---
name: "radio"
section: "4"
platform: "openbsd"
package: "man"
version: "8.0-current-20261101"
release: "OpenBSD 8.0-current (2026-11-01)"
platforms: ["openbsd"]
url: "https://new.carta.tech/radio/4"
---

# radio(4)

device-independent radio driver layer

## NAME

**radio** – device-independent radio driver layer

## SYNOPSIS

**radio\* at bktr?** **radio\* at fms?** **radio\* at udsbr?**

**#include \<sys/types.h\>**

**#include \<sys/ioctl.h\>**

**#include \<sys/radioio.h\>**

## DESCRIPTION

The **radio** driver provides support for various FM radio cards. It provides a uniform programming interface layer above different underlying radio hardware drivers.

For radio tuner controlling there is a single device file available: */dev/radio*.

The following [ioctl(2)](/ioctl/2.md) commands are supported:

- RIOCSSRCH *int*

  This command assumes that a signal search is required and gives direction of search to the driver - 0 to search down and any non-zero value to search up.

- RIOCGINFO *struct radio\_info*

  - RIOCSINFO *struct radio\_info*

  Get or set the current hardware device information into the *radio\_info* structure.

  ```
  struct radio_info {
  	int	mute;
  	int	volume;
  	int	stereo;
  	int	rfreq;	/* reference frequency */
  	int	lock;	/* locking field strength */
  	u_int32_t	freq;	/* in kHz */
  	u_int32_t	caps;	/* card capabilities */
  #define RADIO_CAPS_DETECT_STEREO	(1<<0)
  #define RADIO_CAPS_DETECT_SIGNAL	(1<<1)
  #define RADIO_CAPS_SET_MONO		(1<<2)
  #define RADIO_CAPS_HW_SEARCH		(1<<3)
  #define RADIO_CAPS_HW_AFC		(1<<4)
  #define RADIO_CAPS_REFERENCE_FREQ	(1<<5)
  #define RADIO_CAPS_LOCK_SENSITIVITY	(1<<6)
  #define RADIO_CARD_TYPE			(0xFF<<16)
  	u_int32_t	info;
  #define RADIO_INFO_STEREO		(1<<0)
  #define RADIO_INFO_SIGNAL		(1<<1)
  	u_int32_t	tuner_mode;
  #define RADIO_TUNER_MODE_RADIO		(1<<0)
  #define RADIO_TUNER_MODE_TV		(1<<1)
  	u_int32_t	chan;
  	u_int32_t	chnlset;
  };
  ```

  The *mute* field is a boolean.

  The *volume* field holds the card volume information and can be at most 255.

  The *stereo* field is a boolean.

  The *rfreq* holds information about the card reference frequency (not all cards support this feature).

  The *lock* field holds information about the card locking field strength during an automatic search for cards that support this feature.

  The *freq* field is the frequency in kHz the card is tuned to.

  The *tuner\_mode* field is the current tuning mode of the tuner. Valid modes are:

  - RADIO\_TUNER\_MODE\_RADIO

    The tuner operates in FM radio mode.

  - RADIO\_TUNER\_MODE\_TV

    The tuner operates in TV mode.

    The *caps* field is read-only and describes the card capabilities. The capabilities can have the following values:

    - RADIO\_CAPS\_DETECT\_STEREO

      The device can determine if it is tuned to a stereo signal.

    - RADIO\_CAPS\_DETECT\_SIGNAL

      The device can determine if it is tuned or not.

    - RADIO\_CAPS\_SET\_MONO

      The device is capable of forcibly setting its output to mono.

    - RADIO\_CAPS\_HW\_SEARCH

      The device can do hardware search.

    - RADIO\_CAPS\_HW\_AFC

      The device has an internal hardware automatic frequency control.

    - RADIO\_CAPS\_REFERENCE\_FREQ

      The device allows changing the reference frequency of a received signal.

    - RADIO\_CAPS\_LOCK\_SENSITIVITY

      The device allows changing the station lock sensitivity used during search operation.

    - RADIO\_CARD\_TYPE

      Some cards have several different incarnations. This allows the variant of the card to be determined. Currently not used.

      The *info* field is read-only and describes the current state of the card - tuned/not tuned, stereo signal/mono signal.

      - RADIO\_INFO\_STEREO

        Informs whether the device receives a stereo or mono signal.

      - RADIO\_INFO\_SIGNAL

        Informs whether the device receives a valid signal or noise.

        The *chan* holds the TV channel the card is tuned to.

        The *chnlset* specifies the TV channel set currently being used. The tuner uses the current channel set to derive the tuning frequency from the channel number. Western Europe is the default channel set. The following is a list of valid channel sets:

        - 1

          U.S.A. Broadcast

        - 2

          U.S.A. Cable IRC

        - 3

          U.S.A. Cable HRC

        - 4

          Western Europe

        - 5

          Japan Broadcast

        - 6

          Japan Cable

        - 7

          Former U.S.S.R. and C.I.S. Countries

        - 8

          Australia

        - 9

          France

Either *freq* or *chan* can be used to tune to FM radio stations or TV channels, respectively. Some devices may not support both functionalities.

## CHIPSETS

The TEA5757; TEA5759 is a 44-pin integrated AM/FM stereo radio circuit. The radio part is based on the TEA5712. The TEA5757 is used in FM-standards in which the local oscillator frequency is above the radio frequency (e.g. European and American standards). The TEA5759 is the version in which the oscillator frequency is below the radio frequency (e.g. Japanese standards). To conform with the Japanese standards, it is necessary to set the flags' least significant bit to 1. The TEA5757; TEA5759 has a 25-bit read-write shift register. The TEA5757 chips are used in [fms(4)](/fms/4.md) cards.

## FILES

- */dev/radio*

  ## SEE ALSO

[radioctl(1)](/radioctl/1.md), [ioctl(2)](/ioctl/2.md), [bktr(4)](/bktr/4.md), [fms(4)](/fms/4.md), [intro(4)](/intro/4.md), [udsbr(4)](/udsbr/4.md), radio(9)

## HISTORY

The **radio** device driver appeared in OpenBSD 3.0.

## AUTHORS

The **radio** driver was written by Vladimir Popov ⟨*jumbo@narod.ru*⟩ and Maxim Tsyplakov ⟨*tm@oganer.net*⟩. The man page was written by Vladimir Popov ⟨*jumbo@narod.ru*⟩.
