···129static int freq = DEFAULT_FREQ; /* BCLK: available 50 or 70 (MHz) */130static int vga = 0; /* default mode(0:QVGA mode, other:VGA mode) */131static int vga_interlace = 0; /* 0 is normal mode for, else interlace mode */132-MODULE_PARM(freq, "i");133-MODULE_PARM(vga, "i");134-MODULE_PARM(vga_interlace, "i");135136static int ar_initialize(struct video_device *dev);137
···129static int freq = DEFAULT_FREQ; /* BCLK: available 50 or 70 (MHz) */130static int vga = 0; /* default mode(0:QVGA mode, other:VGA mode) */131static int vga_interlace = 0; /* 0 is normal mode for, else interlace mode */132+module_param(freq, int, 0);133+module_param(vga, int, 0);134+module_param(vga_interlace, int, 0);135136static int ar_initialize(struct video_device *dev);137
···37MODULE_AUTHOR("Gerd Knorr");38MODULE_LICENSE("GPL");3940-static unsigned int debug = 0;41module_param(debug, int, 0644);42MODULE_PARM_DESC(debug,"debug messages, default is 0 (no)");43
···37MODULE_AUTHOR("Gerd Knorr");38MODULE_LICENSE("GPL");3940+static unsigned int debug;41module_param(debug, int, 0644);42MODULE_PARM_DESC(debug,"debug messages, default is 0 (no)");43
+3-3
drivers/media/video/bttv-cards.c
···92static int __devinit pvr_boot(struct bttv *btv);9394/* config variables */95-static unsigned int triton1=0;96-static unsigned int vsfx=0;97static unsigned int latency = UNSET;98int no_overlay=-1;99···106#ifdef MODULE107static unsigned int autoload = 1;108#else109-static unsigned int autoload = 0;110#endif111static unsigned int gpiomask = UNSET;112static unsigned int audioall = UNSET;
···92static int __devinit pvr_boot(struct bttv *btv);9394/* config variables */95+static unsigned int triton1;96+static unsigned int vsfx;97static unsigned int latency = UNSET;98int no_overlay=-1;99···106#ifdef MODULE107static unsigned int autoload = 1;108#else109+static unsigned int autoload;110#endif111static unsigned int gpiomask = UNSET;112static unsigned int audioall = UNSET;
+43-44
drivers/media/video/bttv-driver.c
···48unsigned int bttv_num; /* number of Bt848s in use */49struct bttv bttvs[BTTV_MAX];5051-unsigned int bttv_debug = 0;52unsigned int bttv_verbose = 1;53-unsigned int bttv_gpio = 0;5455/* config variables */56#ifdef __BIG_ENDIAN57static unsigned int bigendian=1;58#else59-static unsigned int bigendian=0;60#endif61static unsigned int radio[BTTV_MAX];62-static unsigned int irq_debug = 0;63static unsigned int gbuffers = 8;64static unsigned int gbufsize = 0x208000;6566static int video_nr = -1;67static int radio_nr = -1;68static int vbi_nr = -1;69-static int debug_latency = 0;7071-static unsigned int fdsr = 0;7273/* options */74-static unsigned int combfilter = 0;75-static unsigned int lumafilter = 0;76static unsigned int automute = 1;77-static unsigned int chroma_agc = 0;78static unsigned int adc_crush = 1;79static unsigned int whitecrush_upper = 0xCF;80static unsigned int whitecrush_lower = 0x7F;81-static unsigned int vcr_hack = 0;82-static unsigned int irq_iswitch = 0;83static unsigned int uv_ratio = 50;84-static unsigned int full_luma_range = 0;85-static unsigned int coring = 0;86extern int no_overlay;8788/* API features (turn on/off stuff for testing) */89static unsigned int v4l2 = 1;90-9192/* insmod args */93module_param(bttv_verbose, int, 0644);···684 return 1;685686 /* is it free? */687- down(&btv->reslock);688 if (btv->resources & bit) {689 /* no, someone else uses it */690- up(&btv->reslock);691 return 0;692 }693 /* it's free, grab it */694 fh->resources |= bit;695 btv->resources |= bit;696- up(&btv->reslock);697 return 1;698}699···716 /* trying to free ressources not allocated by us ... */717 printk("bttv: BUG! (btres)\n");718 }719- down(&btv->reslock);720 fh->resources &= ~bits;721 btv->resources &= ~bits;722- up(&btv->reslock);723}724725/* ----------------------------------------------------------------------- */···1536 case VIDIOCSFREQ:1537 {1538 unsigned long *freq = arg;1539- down(&btv->lock);1540 btv->freq=*freq;1541 bttv_call_i2c_clients(btv,VIDIOCSFREQ,freq);1542 if (btv->has_matchbox && btv->radio_user)1543 tea5757_set_freq(btv,*freq);1544- up(&btv->lock);1545 return 0;1546 }1547···1571 if (v->mode >= BTTV_TVNORMS)1572 return -EINVAL;15731574- down(&btv->lock);1575 set_tvnorm(btv,v->mode);1576 bttv_call_i2c_clients(btv,cmd,v);1577- up(&btv->lock);1578 return 0;1579 }1580···1611 if (v->norm >= BTTV_TVNORMS)1612 return -EINVAL;16131614- down(&btv->lock);1615 if (channel == btv->input &&1616 v->norm == btv->tvnorm) {1617 /* nothing to do */1618- up(&btv->lock);1619 return 0;1620 }16211622 btv->tvnorm = v->norm;1623 set_input(btv,v->channel);1624- up(&btv->lock);1625 return 0;1626 }1627···1634 v->flags |= VIDEO_AUDIO_MUTABLE;1635 v->mode = VIDEO_SOUND_MONO;16361637- down(&btv->lock);1638 bttv_call_i2c_clients(btv,cmd,v);16391640 /* card specific hooks */1641 if (btv->audio_hook)1642 btv->audio_hook(btv,v,0);16431644- up(&btv->lock);1645 return 0;1646 }1647 case VIDIOCSAUDIO:···1652 if (audio >= bttv_tvcards[btv->c.type].audio_inputs)1653 return -EINVAL;16541655- down(&btv->lock);1656 audio_mux(btv, (v->flags&VIDEO_AUDIO_MUTE) ? AUDIO_MUTE : AUDIO_UNMUTE);1657 bttv_call_i2c_clients(btv,cmd,v);1658···1660 if (btv->audio_hook)1661 btv->audio_hook(btv,v,1);16621663- up(&btv->lock);1664 return 0;1665 }1666···1694 if (i == BTTV_TVNORMS)1695 return -EINVAL;16961697- down(&btv->lock);1698 set_tvnorm(btv,i);1699 i2c_vidiocschan(btv);1700- up(&btv->lock);1701 return 0;1702 }1703 case VIDIOC_QUERYSTD:···17551756 if (*i > bttv_tvcards[btv->c.type].video_inputs)1757 return -EINVAL;1758- down(&btv->lock);1759 set_input(btv,*i);1760- up(&btv->lock);1761 return 0;1762 }1763···1769 return -EINVAL;1770 if (0 != t->index)1771 return -EINVAL;1772- down(&btv->lock);1773 memset(t,0,sizeof(*t));1774 strcpy(t->name, "Television");1775 t->type = V4L2_TUNER_ANALOG_TV;···1804 }1805 }1806 /* FIXME: fill capability+audmode */1807- up(&btv->lock);1808 return 0;1809 }1810 case VIDIOC_S_TUNER:···1815 return -EINVAL;1816 if (0 != t->index)1817 return -EINVAL;1818- down(&btv->lock);1819 {1820 struct video_audio va;1821 memset(&va, 0, sizeof(struct video_audio));···1832 if (btv->audio_hook)1833 btv->audio_hook(btv,&va,1);1834 }1835- up(&btv->lock);1836 return 0;1837 }1838···1853 return -EINVAL;1854 if (unlikely (f->type != V4L2_TUNER_ANALOG_TV))1855 return -EINVAL;1856- down(&btv->lock);1857 btv->freq = f->frequency;1858 bttv_call_i2c_clients(btv,VIDIOCSFREQ,&btv->freq);1859 if (btv->has_matchbox && btv->radio_user)1860 tea5757_set_freq(btv,btv->freq);1861- up(&btv->lock);1862 return 0;1863 }1864 case VIDIOC_LOG_STATUS:···3156 return -ENODEV;31573158 dprintk("bttv%d: open called (radio)\n",btv->c.nr);3159- down(&btv->lock);31603161 btv->radio_user++;3162···3165 bttv_call_i2c_clients(btv,AUDC_SET_RADIO,&btv->tuner_type);3166 audio_mux(btv,AUDIO_RADIO);31673168- up(&btv->lock);3169 return 0;3170}3171···3920 sprintf(btv->c.name,"bttv%d",btv->c.nr);39213922 /* initialize structs / fill in defaults */3923- init_MUTEX(&btv->lock);3924- init_MUTEX(&btv->reslock);3925 spin_lock_init(&btv->s_lock);3926 spin_lock_init(&btv->gpio_lock);3927 init_waitqueue_head(&btv->gpioq);
···48unsigned int bttv_num; /* number of Bt848s in use */49struct bttv bttvs[BTTV_MAX];5051+unsigned int bttv_debug;52unsigned int bttv_verbose = 1;53+unsigned int bttv_gpio;5455/* config variables */56#ifdef __BIG_ENDIAN57static unsigned int bigendian=1;58#else59+static unsigned int bigendian;60#endif61static unsigned int radio[BTTV_MAX];62+static unsigned int irq_debug;63static unsigned int gbuffers = 8;64static unsigned int gbufsize = 0x208000;6566static int video_nr = -1;67static int radio_nr = -1;68static int vbi_nr = -1;69+static int debug_latency;7071+static unsigned int fdsr;7273/* options */74+static unsigned int combfilter;75+static unsigned int lumafilter;76static unsigned int automute = 1;77+static unsigned int chroma_agc;78static unsigned int adc_crush = 1;79static unsigned int whitecrush_upper = 0xCF;80static unsigned int whitecrush_lower = 0x7F;81+static unsigned int vcr_hack;82+static unsigned int irq_iswitch;83static unsigned int uv_ratio = 50;84+static unsigned int full_luma_range;85+static unsigned int coring;86extern int no_overlay;8788/* API features (turn on/off stuff for testing) */89static unsigned int v4l2 = 1;09091/* insmod args */92module_param(bttv_verbose, int, 0644);···685 return 1;686687 /* is it free? */688+ mutex_lock(&btv->reslock);689 if (btv->resources & bit) {690 /* no, someone else uses it */691+ mutex_unlock(&btv->reslock);692 return 0;693 }694 /* it's free, grab it */695 fh->resources |= bit;696 btv->resources |= bit;697+ mutex_unlock(&btv->reslock);698 return 1;699}700···717 /* trying to free ressources not allocated by us ... */718 printk("bttv: BUG! (btres)\n");719 }720+ mutex_lock(&btv->reslock);721 fh->resources &= ~bits;722 btv->resources &= ~bits;723+ mutex_unlock(&btv->reslock);724}725726/* ----------------------------------------------------------------------- */···1537 case VIDIOCSFREQ:1538 {1539 unsigned long *freq = arg;1540+ mutex_lock(&btv->lock);1541 btv->freq=*freq;1542 bttv_call_i2c_clients(btv,VIDIOCSFREQ,freq);1543 if (btv->has_matchbox && btv->radio_user)1544 tea5757_set_freq(btv,*freq);1545+ mutex_unlock(&btv->lock);1546 return 0;1547 }1548···1572 if (v->mode >= BTTV_TVNORMS)1573 return -EINVAL;15741575+ mutex_lock(&btv->lock);1576 set_tvnorm(btv,v->mode);1577 bttv_call_i2c_clients(btv,cmd,v);1578+ mutex_unlock(&btv->lock);1579 return 0;1580 }1581···1612 if (v->norm >= BTTV_TVNORMS)1613 return -EINVAL;16141615+ mutex_lock(&btv->lock);1616 if (channel == btv->input &&1617 v->norm == btv->tvnorm) {1618 /* nothing to do */1619+ mutex_unlock(&btv->lock);1620 return 0;1621 }16221623 btv->tvnorm = v->norm;1624 set_input(btv,v->channel);1625+ mutex_unlock(&btv->lock);1626 return 0;1627 }1628···1635 v->flags |= VIDEO_AUDIO_MUTABLE;1636 v->mode = VIDEO_SOUND_MONO;16371638+ mutex_lock(&btv->lock);1639 bttv_call_i2c_clients(btv,cmd,v);16401641 /* card specific hooks */1642 if (btv->audio_hook)1643 btv->audio_hook(btv,v,0);16441645+ mutex_unlock(&btv->lock);1646 return 0;1647 }1648 case VIDIOCSAUDIO:···1653 if (audio >= bttv_tvcards[btv->c.type].audio_inputs)1654 return -EINVAL;16551656+ mutex_lock(&btv->lock);1657 audio_mux(btv, (v->flags&VIDEO_AUDIO_MUTE) ? AUDIO_MUTE : AUDIO_UNMUTE);1658 bttv_call_i2c_clients(btv,cmd,v);1659···1661 if (btv->audio_hook)1662 btv->audio_hook(btv,v,1);16631664+ mutex_unlock(&btv->lock);1665 return 0;1666 }1667···1695 if (i == BTTV_TVNORMS)1696 return -EINVAL;16971698+ mutex_lock(&btv->lock);1699 set_tvnorm(btv,i);1700 i2c_vidiocschan(btv);1701+ mutex_unlock(&btv->lock);1702 return 0;1703 }1704 case VIDIOC_QUERYSTD:···17561757 if (*i > bttv_tvcards[btv->c.type].video_inputs)1758 return -EINVAL;1759+ mutex_lock(&btv->lock);1760 set_input(btv,*i);1761+ mutex_unlock(&btv->lock);1762 return 0;1763 }1764···1770 return -EINVAL;1771 if (0 != t->index)1772 return -EINVAL;1773+ mutex_lock(&btv->lock);1774 memset(t,0,sizeof(*t));1775 strcpy(t->name, "Television");1776 t->type = V4L2_TUNER_ANALOG_TV;···1805 }1806 }1807 /* FIXME: fill capability+audmode */1808+ mutex_unlock(&btv->lock);1809 return 0;1810 }1811 case VIDIOC_S_TUNER:···1816 return -EINVAL;1817 if (0 != t->index)1818 return -EINVAL;1819+ mutex_lock(&btv->lock);1820 {1821 struct video_audio va;1822 memset(&va, 0, sizeof(struct video_audio));···1833 if (btv->audio_hook)1834 btv->audio_hook(btv,&va,1);1835 }1836+ mutex_unlock(&btv->lock);1837 return 0;1838 }1839···1854 return -EINVAL;1855 if (unlikely (f->type != V4L2_TUNER_ANALOG_TV))1856 return -EINVAL;1857+ mutex_lock(&btv->lock);1858 btv->freq = f->frequency;1859 bttv_call_i2c_clients(btv,VIDIOCSFREQ,&btv->freq);1860 if (btv->has_matchbox && btv->radio_user)1861 tea5757_set_freq(btv,btv->freq);1862+ mutex_unlock(&btv->lock);1863 return 0;1864 }1865 case VIDIOC_LOG_STATUS:···3157 return -ENODEV;31583159 dprintk("bttv%d: open called (radio)\n",btv->c.nr);3160+ mutex_lock(&btv->lock);31613162 btv->radio_user++;3163···3166 bttv_call_i2c_clients(btv,AUDC_SET_RADIO,&btv->tuner_type);3167 audio_mux(btv,AUDIO_RADIO);31683169+ mutex_unlock(&btv->lock);3170 return 0;3171}3172···3921 sprintf(btv->c.name,"bttv%d",btv->c.nr);39223923 /* initialize structs / fill in defaults */3924+ mutex_init(&btv->lock);3925+ mutex_init(&btv->reslock);3926 spin_lock_init(&btv->s_lock);3927 spin_lock_init(&btv->gpio_lock);3928 init_waitqueue_head(&btv->gpioq);
+3-3
drivers/media/video/bttv-i2c.c
···4142static int attach_inform(struct i2c_client *client);4344-static int i2c_debug = 0;45-static int i2c_hw = 0;46-static int i2c_scan = 0;47module_param(i2c_debug, int, 0644);48module_param(i2c_hw, int, 0444);49module_param(i2c_scan, int, 0444);
···4142static int attach_inform(struct i2c_client *client);4344+static int i2c_debug;45+static int i2c_hw;46+static int i2c_scan;47module_param(i2c_debug, int, 0644);48module_param(i2c_hw, int, 0444);49module_param(i2c_scan, int, 0444);
···43static unsigned short normal_i2c[] = { 0x88 >> 1, I2C_CLIENT_END };444546+static int cx25840_debug;4748module_param_named(debug,cx25840_debug, int, 0644);49
+1-2
drivers/media/video/cx88/Kconfig
···3132config VIDEO_CX88_ALSA33 tristate "ALSA DMA audio support"34- depends on VIDEO_CX88 && SND35- select SND_PCM_OSS36 ---help---37 This is a video4linux driver for direct (DMA) audio on38 Conexant 2388x based TV cards.
···3132config VIDEO_CX88_ALSA33 tristate "ALSA DMA audio support"34+ depends on VIDEO_CX88 && SND && EXPERIMENTAL035 ---help---36 This is a video4linux driver for direct (DMA) audio on37 Conexant 2388x based TV cards.
···6667/* module parameters */68static int opmode = OPMODE_AUTO;69-int msp_debug = 0; /* msp_debug output */70-int msp_once = 0; /* no continous stereo monitoring */71-int msp_amsound = 0; /* hard-wire AM sound at 6.5 Hz (france),72- the autoscan seems work well only with FM... */73int msp_standard = 1; /* Override auto detect of audio msp_standard, if needed. */74-int msp_dolby = 0;7576int msp_stereo_thresh = 0x190; /* a2 threshold for stereo/bilingual77 (msp34xxg only) 0x00a0-0x03c0 */···1031 }10321033 default:1034- /* nothing */1035- break;1036 }1037 return 0;1038}
···6667/* module parameters */68static int opmode = OPMODE_AUTO;69+int msp_debug; /* msp_debug output */70+int msp_once; /* no continous stereo monitoring */71+int msp_amsound; /* hard-wire AM sound at 6.5 Hz (france),72+ the autoscan seems work well only with FM... */73int msp_standard = 1; /* Override auto detect of audio msp_standard, if needed. */74+int msp_dolby;7576int msp_stereo_thresh = 0x190; /* a2 threshold for stereo/bilingual77 (msp34xxg only) 0x00a0-0x03c0 */···1031 }10321033 default:1034+ /* unknown */1035+ return -EINVAL;1036 }1037 return 0;1038}
-8
drivers/media/video/msp3400.h
···67/* ---------------------------------------------------------------------- */89-struct msp_matrix {10- int input;11- int output;12-};13-14-/* ioctl for MSP_SET_MATRIX will have to be registered */15-#define MSP_SET_MATRIX _IOW('m',17,struct msp_matrix)16-17/* This macro is allowed for *constants* only, gcc must calculate it18 at compile time. Remember -- no floats in kernel mode */19#define MSP_CARRIER(freq) ((int)((float)(freq / 18.432) * (1 << 24)))
···67/* ---------------------------------------------------------------------- */8000000009/* This macro is allowed for *constants* only, gcc must calculate it10 at compile time. Remember -- no floats in kernel mode */11#define MSP_CARRIER(freq) ((int)((float)(freq / 18.432) * (1 << 24)))
···1+/*2+ * descriptions for simple tuners.3+ */4+5+#ifndef __TUNER_TYPES_H__6+#define __TUNER_TYPES_H__7+8+enum param_type {9+ TUNER_PARAM_TYPE_RADIO, \10+ TUNER_PARAM_TYPE_PAL, \11+ TUNER_PARAM_TYPE_SECAM, \12+ TUNER_PARAM_TYPE_NTSC13+};14+15+struct tuner_range {16+ unsigned short limit;17+ unsigned char cb;18+};19+20+struct tuner_params {21+ enum param_type type;22+ /* Many Philips based tuners have a comment like this in their23+ * datasheet:24+ *25+ * For channel selection involving band switching, and to ensure26+ * smooth tuning to the desired channel without causing27+ * unnecessary charge pump action, it is recommended to consider28+ * the difference between wanted channel frequency and the29+ * current channel frequency. Unnecessary charge pump action30+ * will result in very low tuning voltage which may drive the31+ * oscillator to extreme conditions.32+ *33+ * Set cb_first_if_lower_freq to 1, if this check is34+ * required for this tuner.35+ *36+ * I tested this for PAL by first setting the TV frequency to37+ * 203 MHz and then switching to 96.6 MHz FM radio. The result was38+ * static unless the control byte was sent first.39+ */40+ unsigned int cb_first_if_lower_freq:1;41+ unsigned char config; /* to be moved into struct tuner_range for dvb-pll merge */42+43+ unsigned int count;44+ struct tuner_range *ranges;45+};46+47+struct tunertype {48+ char *name;49+ struct tuner_params *params;50+};51+52+extern struct tunertype tuners[];53+extern unsigned const int tuner_count;54+55+#endif
+7-3
include/media/tuner.h
···23#define _TUNER_H2425#include <linux/videodev2.h>02627#define ADDR_UNSET (255)28···115116#define TUNER_PHILIPS_TUV1236D 68 /* ATI HDTV Wonder */117#define TUNER_TNF_5335MF 69 /* Sabrent Bt848 */0118119/* tv card specific */120#define TDA9887_PRESENT (1<<0)···179 unsigned int mode;180 unsigned int mode_mask; /* Combination of allowable modes */181182- unsigned int freq; /* keep track of the current settings */00183 unsigned int audmode;184 v4l2_std_id std;185···199 unsigned int sgIF;200201 /* function ptrs */202- void (*tv_freq)(struct i2c_client *c, unsigned int freq);203- void (*radio_freq)(struct i2c_client *c, unsigned int freq);204 int (*has_signal)(struct i2c_client *c);205 int (*is_stereo)(struct i2c_client *c);206 void (*standby)(struct i2c_client *c);
···23#define _TUNER_H2425#include <linux/videodev2.h>26+#include <media/tuner-types.h>2728#define ADDR_UNSET (255)29···114115#define TUNER_PHILIPS_TUV1236D 68 /* ATI HDTV Wonder */116#define TUNER_TNF_5335MF 69 /* Sabrent Bt848 */117+#define TUNER_SAMSUNG_TCPN_2121P30A 70 /* Hauppauge PVR-500MCE NTSC */118119/* tv card specific */120#define TDA9887_PRESENT (1<<0)···177 unsigned int mode;178 unsigned int mode_mask; /* Combination of allowable modes */179180+ unsigned int tv_freq; /* keep track of the current settings */181+ unsigned int radio_freq;182+ u16 last_div;183 unsigned int audmode;184 v4l2_std_id std;185···195 unsigned int sgIF;196197 /* function ptrs */198+ void (*set_tv_freq)(struct i2c_client *c, unsigned int freq);199+ void (*set_radio_freq)(struct i2c_client *c, unsigned int freq);200 int (*has_signal)(struct i2c_client *c);201 int (*is_stereo)(struct i2c_client *c);202 void (*standby)(struct i2c_client *c);
+7
include/media/v4l2-common.h
···120/* select from TV,radio,extern,MUTE */121#define AUDC_SET_INPUT _IOW('d',89,int)1220000000123/* tuner ioctls */124/* Sets tuner type and its I2C addr */125#define TUNER_SET_TYPE_ADDR _IOW('d',90,int)
···120/* select from TV,radio,extern,MUTE */121#define AUDC_SET_INPUT _IOW('d',89,int)122123+/* msp3400 ioctl: will be removed in the near future */124+struct msp_matrix {125+ int input;126+ int output;127+};128+#define MSP_SET_MATRIX _IOW('m',17,struct msp_matrix)129+130/* tuner ioctls */131/* Sets tuner type and its I2C addr */132#define TUNER_SET_TYPE_ADDR _IOW('d',90,int)