// SPDX-License-Identifier: GPL-2.0-only /* Terratec ActiveRadio ISA Standalone card driver for Linux radio support * (c) 1999 R. Offermanns ([email protected]) * based on the aimslab radio driver from M. Kirkwood * many thanks to Michael Becker and Friedhelm Birth (from TerraTec) * * * History: * 1999-05-21 First preview release * * Notes on the hardware: * There are two "main" chips on the card: * - Philips OM5610 (http://www-us.semiconductors.philips.com/acrobat/datasheets/OM5610_2.pdf) * - Philips SAA6588 (http://www-us.semiconductors.philips.com/acrobat/datasheets/SAA6588_1.pdf) * (you can get the datasheet at the above links) * * Frequency control is done digitally -- ie out(port,encodefreq(95.8)); * Volume Control is done digitally * * Converted to the radio-isa framework by Hans Verkuil <[email protected]> * Converted to V4L2 API by Mauro Carvalho Chehab <[email protected]> */ #include <linux/module.h> /* Modules */ #include <linux/init.h> /* Initdata */ #include <linux/ioport.h> /* request_region */ #include <linux/videodev2.h> /* kernel radio structs */ #include <linux/mutex.h> #include <linux/io.h> /* outb, outb_p */ #include <linux/slab.h> #include <media/v4l2-device.h> #include <media/v4l2-ioctl.h> #include "radio-isa.h" MODULE_AUTHOR(…) …; MODULE_DESCRIPTION(…) …; MODULE_LICENSE(…) …; MODULE_VERSION(…) …; /* Note: there seems to be only one possible port (0x590), but without hardware this is hard to verify. For now, this is the only one we will support. */ static int io = …; static int radio_nr = …; module_param(radio_nr, int, 0444); MODULE_PARM_DESC(…) …; #define WRT_DIS … #define CLK_OFF … #define IIC_DATA … #define IIC_CLK … #define DATA … #define CLK_ON … #define WRT_EN … static struct radio_isa_card *terratec_alloc(void) { … } static int terratec_s_mute_volume(struct radio_isa_card *isa, bool mute, int vol) { … } /* this is the worst part in this driver */ /* many more or less strange things are going on here, but hey, it works :) */ static int terratec_s_frequency(struct radio_isa_card *isa, u32 freq) { … } static u32 terratec_g_signal(struct radio_isa_card *isa) { … } static const struct radio_isa_ops terratec_ops = …; static const int terratec_ioports[] = …; static struct radio_isa_driver terratec_driver = …; static int __init terratec_init(void) { … } static void __exit terratec_exit(void) { … } module_init(…) …; module_exit(terratec_exit);