#include <linux/module.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/delay.h>
#include <linux/videodev2.h>
#include <linux/kthread.h>
#include <media/v4l2-device.h>
#include <media/v4l2-ioctl.h>
#include <media/v4l2-ctrls.h>
#include <media/v4l2-fh.h>
#include <media/v4l2-event.h>
#include <sound/aci.h>
#define RDS_DATASHIFT …
#define RDS_DATAMASK …
#define RDS_BUSYMASK …
#define RDS_CLOCKMASK …
#define RDS_DATA(x) …
#define RDS_STATUS …
#define RDS_STATIONNAME …
#define RDS_TEXT …
#define RDS_ALTFREQ …
#define RDS_TIMEDATE …
#define RDS_PI_CODE …
#define RDS_PTYTATP …
#define RDS_RESET …
#define RDS_RXVALUE …
static int radio_nr = …;
module_param(radio_nr, int, 0);
MODULE_PARM_DESC(…) …;
struct pcm20 { … };
static struct pcm20 pcm20_card = …;
static int rds_waitread(struct snd_miro_aci *aci)
{ … }
static int rds_rawwrite(struct snd_miro_aci *aci, u8 byte)
{ … }
static int rds_write(struct snd_miro_aci *aci, u8 byte)
{ … }
static int rds_readcycle_nowait(struct snd_miro_aci *aci)
{ … }
static int rds_readcycle(struct snd_miro_aci *aci)
{ … }
static int rds_ack(struct snd_miro_aci *aci)
{ … }
static int rds_cmd(struct snd_miro_aci *aci, u8 cmd, u8 databuffer[], u8 datasize)
{ … }
static int pcm20_setfreq(struct pcm20 *dev, unsigned long freq)
{ … }
static int vidioc_querycap(struct file *file, void *priv,
struct v4l2_capability *v)
{ … }
static bool sanitize(char *p, int size)
{ … }
static int vidioc_g_tuner(struct file *file, void *priv,
struct v4l2_tuner *v)
{ … }
static int vidioc_s_tuner(struct file *file, void *priv,
const struct v4l2_tuner *v)
{ … }
static int vidioc_g_frequency(struct file *file, void *priv,
struct v4l2_frequency *f)
{ … }
static int vidioc_s_frequency(struct file *file, void *priv,
const struct v4l2_frequency *f)
{ … }
static int pcm20_s_ctrl(struct v4l2_ctrl *ctrl)
{ … }
static int pcm20_thread(void *data)
{ … }
static int pcm20_open(struct file *file)
{ … }
static int pcm20_release(struct file *file)
{ … }
static const struct v4l2_file_operations pcm20_fops = …;
static const struct v4l2_ioctl_ops pcm20_ioctl_ops = …;
static const struct v4l2_ctrl_ops pcm20_ctrl_ops = …;
static int __init pcm20_init(void)
{ … }
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
static void __exit pcm20_cleanup(void)
{ … }
module_init(…) …;
module_exit(pcm20_cleanup);