RADIO(9) | Kernel Developer's Manual | RADIO(9)

# NAME

`radio` — interface between low- and high-level FM radio drivers

# SYNOPSIS

`#include <dev/radio_if.h>`

device_t
`radio_attach_mi`(const struct radio_hw_if *rhwp, void *hdlp, device_t dev);

# DESCRIPTION

The `radio` layer provides support for digitally programmable FM radio tuners.

It is divided into a machine independent, high-level part responsible for managing device files, and low-level hardware drivers.

The high-level radio driver attaches to the low-level driver when the latter calls `radio_attach_mi`().

The radio_hw_if struct contains pointers to functions provided by the low-level driver. The hdlp argument is a handle to a low-level driver's softc structure. It is sent as the first argument to all the functions in radio_hw_if when the high-level driver calls them. dev is the device struct for the hardware device.

The fields of radio_hw_if are described in some more detail below.

    struct radio_hw_if {
    	int	(*open)(void *, int, int, struct lwp *);
    	int	(*close)(void *, int, int, struct lwp *);
    	int     (*get_info)(void *, struct radio_info *);
    	int     (*set_info)(void *, struct radio_info *);
    	int     (*search)(void *, int);
    };

`(*open)`(sc, flags, fmt, lwp)
  Called when the radio device is opened. Optionally, if there is no need to call a driver's function when the device file is opened, `NULL` should be passed in this field. Returns 0 on success, otherwise an error code.
`(*close)`(sc, flags, fmt, lwp)
  Called when the radio device is closed. Optionally, if there is no need to call a driver's function when the device file is closed, `NULL` should be passed in thie field. Returns 0 on success, otherwise an error code.
`(*get_info)`(sc, ri)
  Fills the radio_info struct. This function is used to obtain the current state of a hardware device. It is executed as a result of calling `RIOCGINFO` on a device file managed by the high-level driver. Returns 0 on success, otherwise an error code.
`(*set_info)`(sc, ri)
  Set values from the radio_info struct. This function is used to modify the current state of a hardware device (enable/disable various modes and parameters). It is executed as a result of calling `RIOCSINFO` on a device file managed by the high-level driver. Returns 0 on success, otherwise an error code.
`(*search)`(sc, ri)
  Initiates automatic search for the radio station. It is executed as a result of calling `RIOCSSRCH` on a device file managed by the high-level driver. Returns 0 on success, otherwise an error code.

# SEE ALSO

radio(4)

# AUTHORS

The `radio` API was written by Vladimir Popov and Maxim Tsyplakov for OpenBSD and ported to NetBSD by Lennart Augustsson.

July 9, 2018 | NetBSD 11.0