aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/bt8xx
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2007-04-29 22:38:01 -0400
committerPaul Mackerras <paulus@samba.org>2007-04-29 22:38:01 -0400
commit49e1900d4cc2e7bcecb681fe60f0990bec2dcce8 (patch)
tree253801ebf57e0a23856a2c7be129c2c178f62fdf /drivers/media/video/bt8xx
parent34f6d749c0a328817d5e36274e53121c1db734dc (diff)
parentb9099ff63c75216d6ca10bce5a1abcd9293c27e6 (diff)
Merge branch 'linux-2.6' into for-2.6.22
Diffstat (limited to 'drivers/media/video/bt8xx')
-rw-r--r--drivers/media/video/bt8xx/bttv-cards.c53
-rw-r--r--drivers/media/video/bt8xx/bttv-driver.c24
-rw-r--r--drivers/media/video/bt8xx/bttv-gpio.c5
-rw-r--r--drivers/media/video/bt8xx/bttv-i2c.c2
-rw-r--r--drivers/media/video/bt8xx/bttv-if.c48
-rw-r--r--drivers/media/video/bt8xx/bttv.h25
-rw-r--r--drivers/media/video/bt8xx/bttvp.h3
7 files changed, 66 insertions, 94 deletions
diff --git a/drivers/media/video/bt8xx/bttv-cards.c b/drivers/media/video/bt8xx/bttv-cards.c
index 6addc42df045..6b31e50fb951 100644
--- a/drivers/media/video/bt8xx/bttv-cards.c
+++ b/drivers/media/video/bt8xx/bttv-cards.c
@@ -291,6 +291,9 @@ static struct CARD {
291 291
292 { 0x15409511, BTTV_BOARD_ACORP_Y878F, "Acorp Y878F" }, 292 { 0x15409511, BTTV_BOARD_ACORP_Y878F, "Acorp Y878F" },
293 293
294 { 0x53534149, BTTV_BOARD_SSAI_SECURITY, "SSAI Security Video Interface" },
295 { 0x5353414a, BTTV_BOARD_SSAI_ULTRASOUND, "SSAI Ultrasound Video Interface" },
296
294 /* likely broken, vendor id doesn't match the other magic views ... 297 /* likely broken, vendor id doesn't match the other magic views ...
295 * { 0xa0fca04f, BTTV_BOARD_MAGICTVIEW063, "Guillemot Maxi TV Video 3" }, */ 298 * { 0xa0fca04f, BTTV_BOARD_MAGICTVIEW063, "Guillemot Maxi TV Video 3" }, */
296 299
@@ -2907,6 +2910,28 @@ struct tvcard bttv_tvcards[] = {
2907 .has_radio = 1, 2910 .has_radio = 1,
2908 .has_remote = 1, 2911 .has_remote = 1,
2909 }, 2912 },
2913 [BTTV_BOARD_SSAI_SECURITY] = {
2914 .name = "SSAI Security Video Interface",
2915 .video_inputs = 4,
2916 .audio_inputs = 0,
2917 .tuner = -1,
2918 .svhs = -1,
2919 .muxsel = { 0, 1, 2, 3 },
2920 .tuner_type = -1,
2921 .tuner_addr = ADDR_UNSET,
2922 .radio_addr = ADDR_UNSET,
2923 },
2924 [BTTV_BOARD_SSAI_ULTRASOUND] = {
2925 .name = "SSAI Ultrasound Video Interface",
2926 .video_inputs = 2,
2927 .audio_inputs = 0,
2928 .tuner = -1,
2929 .svhs = 1,
2930 .muxsel = { 2, 0, 1, 3 },
2931 .tuner_type = -1,
2932 .tuner_addr = ADDR_UNSET,
2933 .radio_addr = ADDR_UNSET,
2934 },
2910}; 2935};
2911 2936
2912static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards); 2937static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards);
@@ -2970,20 +2995,20 @@ void __devinit bttv_idcard(struct bttv *btv)
2970 2995
2971 if (UNSET != audiomux[0]) { 2996 if (UNSET != audiomux[0]) {
2972 gpiobits = 0; 2997 gpiobits = 0;
2973 for (i = 0; i < 4; i++) { 2998 for (i = 0; i < ARRAY_SIZE(bttv_tvcards->gpiomux); i++) {
2974 bttv_tvcards[btv->c.type].gpiomux[i] = audiomux[i]; 2999 bttv_tvcards[btv->c.type].gpiomux[i] = audiomux[i];
2975 gpiobits |= audiomux[i]; 3000 gpiobits |= audiomux[i];
2976 } 3001 }
2977 } else { 3002 } else {
2978 gpiobits = audioall; 3003 gpiobits = audioall;
2979 for (i = 0; i < 4; i++) { 3004 for (i = 0; i < ARRAY_SIZE(bttv_tvcards->gpiomux); i++) {
2980 bttv_tvcards[btv->c.type].gpiomux[i] = audioall; 3005 bttv_tvcards[btv->c.type].gpiomux[i] = audioall;
2981 } 3006 }
2982 } 3007 }
2983 bttv_tvcards[btv->c.type].gpiomask = (UNSET != gpiomask) ? gpiomask : gpiobits; 3008 bttv_tvcards[btv->c.type].gpiomask = (UNSET != gpiomask) ? gpiomask : gpiobits;
2984 printk(KERN_INFO "bttv%d: gpio config override: mask=0x%x, mux=", 3009 printk(KERN_INFO "bttv%d: gpio config override: mask=0x%x, mux=",
2985 btv->c.nr,bttv_tvcards[btv->c.type].gpiomask); 3010 btv->c.nr,bttv_tvcards[btv->c.type].gpiomask);
2986 for (i = 0; i < 5; i++) { 3011 for (i = 0; i < ARRAY_SIZE(bttv_tvcards->gpiomux); i++) {
2987 printk("%s0x%x", i ? "," : "", bttv_tvcards[btv->c.type].gpiomux[i]); 3012 printk("%s0x%x", i ? "," : "", bttv_tvcards[btv->c.type].gpiomux[i]);
2988 } 3013 }
2989 printk("\n"); 3014 printk("\n");
@@ -3638,7 +3663,7 @@ static int __devinit pvr_altera_load(struct bttv *btv, u8 *micro, u32 microlen)
3638 3663
3639 for (n = 0; n < microlen; n++) { 3664 for (n = 0; n < microlen; n++) {
3640 bits = micro[n]; 3665 bits = micro[n];
3641 for ( i = 0 ; i < 8 ; i++ ) { 3666 for (i = 0 ; i < 8 ; i++) {
3642 gpio_bits(BTTV_ALT_DCLK,0); 3667 gpio_bits(BTTV_ALT_DCLK,0);
3643 if (bits & 0x01) 3668 if (bits & 0x01)
3644 gpio_bits(BTTV_ALT_DATA,BTTV_ALT_DATA); 3669 gpio_bits(BTTV_ALT_DATA,BTTV_ALT_DATA);
@@ -3691,7 +3716,7 @@ static void __devinit osprey_eeprom(struct bttv *btv)
3691 /* this might be an antique... check for MMAC label in eeprom */ 3716 /* this might be an antique... check for MMAC label in eeprom */
3692 if ((ee[0]=='M') && (ee[1]=='M') && (ee[2]=='A') && (ee[3]=='C')) { 3717 if ((ee[0]=='M') && (ee[1]=='M') && (ee[2]=='A') && (ee[3]=='C')) {
3693 unsigned char checksum = 0; 3718 unsigned char checksum = 0;
3694 for (i =0; i<21; i++) 3719 for (i = 0; i < 21; i++)
3695 checksum += ee[i]; 3720 checksum += ee[i];
3696 if (checksum != ee[21]) 3721 if (checksum != ee[21])
3697 return; 3722 return;
@@ -3703,12 +3728,13 @@ static void __devinit osprey_eeprom(struct bttv *btv)
3703 unsigned short type; 3728 unsigned short type;
3704 int offset = 4*16; 3729 int offset = 4*16;
3705 3730
3706 for(; offset < 8*16; offset += 16) { 3731 for (; offset < 8*16; offset += 16) {
3707 unsigned short checksum = 0; 3732 unsigned short checksum = 0;
3708 /* verify the checksum */ 3733 /* verify the checksum */
3709 for(i = 0; i<14; i++) checksum += ee[i+offset]; 3734 for (i = 0; i < 14; i++)
3710 checksum = ~checksum; /* no idea why */ 3735 checksum += ee[i+offset];
3711 if ((((checksum>>8)&0x0FF) == ee[offset+14]) && 3736 checksum = ~checksum; /* no idea why */
3737 if ((((checksum>>8)&0x0FF) == ee[offset+14]) &&
3712 ((checksum & 0x0FF) == ee[offset+15])) { 3738 ((checksum & 0x0FF) == ee[offset+15])) {
3713 break; 3739 break;
3714 } 3740 }
@@ -3721,7 +3747,6 @@ static void __devinit osprey_eeprom(struct bttv *btv)
3721 type = (ee[offset+4]<<8) | (ee[offset+5]); 3747 type = (ee[offset+4]<<8) | (ee[offset+5]);
3722 3748
3723 switch(type) { 3749 switch(type) {
3724
3725 /* 848 based */ 3750 /* 848 based */
3726 case 0x0004: 3751 case 0x0004:
3727 btv->c.type = BTTV_BOARD_OSPREY1x0_848; 3752 btv->c.type = BTTV_BOARD_OSPREY1x0_848;
@@ -4149,8 +4174,7 @@ static int tea5757_read(struct bttv *btv)
4149 } 4174 }
4150 4175
4151 dprintk("bttv%d: tea5757:",btv->c.nr); 4176 dprintk("bttv%d: tea5757:",btv->c.nr);
4152 for(i = 0; i < 24; i++) 4177 for (i = 0; i < 24; i++) {
4153 {
4154 udelay(5); 4178 udelay(5);
4155 bus_high(btv,btv->mbox_clk); 4179 bus_high(btv,btv->mbox_clk);
4156 udelay(5); 4180 udelay(5);
@@ -4182,8 +4206,7 @@ static int tea5757_write(struct bttv *btv, int value)
4182 dprintk("bttv%d: tea5757: write 0x%X\n", btv->c.nr, value); 4206 dprintk("bttv%d: tea5757: write 0x%X\n", btv->c.nr, value);
4183 bus_low(btv,btv->mbox_clk); 4207 bus_low(btv,btv->mbox_clk);
4184 bus_high(btv,btv->mbox_we); 4208 bus_high(btv,btv->mbox_we);
4185 for(i = 0; i < 25; i++) 4209 for (i = 0; i < 25; i++) {
4186 {
4187 if (reg & 0x1000000) 4210 if (reg & 0x1000000)
4188 bus_high(btv,btv->mbox_data); 4211 bus_high(btv,btv->mbox_data);
4189 else 4212 else
@@ -4755,7 +4778,7 @@ static void kodicom4400r_init(struct bttv *btv)
4755 gpio_write(1 << 9); /* reset MUX */ 4778 gpio_write(1 << 9); /* reset MUX */
4756 gpio_write(0); 4779 gpio_write(0);
4757 /* Preset camera 0 to the 4 controllers */ 4780 /* Preset camera 0 to the 4 controllers */
4758 for (ix=0; ix<4; ix++) { 4781 for (ix = 0; ix < 4; ix++) {
4759 sw_status[ix] = ix; 4782 sw_status[ix] = ix;
4760 kodicom4400r_write(btv, ix, ix, 1); 4783 kodicom4400r_write(btv, ix, ix, 1);
4761 } 4784 }
diff --git a/drivers/media/video/bt8xx/bttv-driver.c b/drivers/media/video/bt8xx/bttv-driver.c
index 5720b77ac9a7..1c38723d3169 100644
--- a/drivers/media/video/bt8xx/bttv-driver.c
+++ b/drivers/media/video/bt8xx/bttv-driver.c
@@ -164,6 +164,24 @@ static ssize_t show_card(struct class_device *cd, char *buf)
164static CLASS_DEVICE_ATTR(card, S_IRUGO, show_card, NULL); 164static CLASS_DEVICE_ATTR(card, S_IRUGO, show_card, NULL);
165 165
166/* ----------------------------------------------------------------------- */ 166/* ----------------------------------------------------------------------- */
167/* dvb auto-load setup */
168#if defined(CONFIG_MODULES) && defined(MODULE)
169static void request_module_async(struct work_struct *work)
170{
171 request_module("dvb-bt8xx");
172}
173
174static void request_modules(struct bttv *dev)
175{
176 INIT_WORK(&dev->request_module_wk, request_module_async);
177 schedule_work(&dev->request_module_wk);
178}
179#else
180#define request_modules(dev)
181#endif /* CONFIG_MODULES */
182
183
184/* ----------------------------------------------------------------------- */
167/* static data */ 185/* static data */
168 186
169/* special timing tables from conexant... */ 187/* special timing tables from conexant... */
@@ -4769,9 +4787,11 @@ static int __devinit bttv_probe(struct pci_dev *dev,
4769 disclaim_video_lines(btv); 4787 disclaim_video_lines(btv);
4770 } 4788 }
4771 4789
4772 /* add subdevices */ 4790 /* add subdevices and autoload dvb-bt8xx if needed */
4773 if (bttv_tvcards[btv->c.type].has_dvb) 4791 if (bttv_tvcards[btv->c.type].has_dvb) {
4774 bttv_sub_add_device(&btv->c, "dvb"); 4792 bttv_sub_add_device(&btv->c, "dvb");
4793 request_modules(btv);
4794 }
4775 4795
4776 bttv_input_init(btv); 4796 bttv_input_init(btv);
4777 4797
diff --git a/drivers/media/video/bt8xx/bttv-gpio.c b/drivers/media/video/bt8xx/bttv-gpio.c
index ba081f6f8c82..84154c26f9c5 100644
--- a/drivers/media/video/bt8xx/bttv-gpio.c
+++ b/drivers/media/video/bt8xx/bttv-gpio.c
@@ -71,7 +71,6 @@ struct bus_type bttv_sub_bus_type = {
71 .probe = bttv_sub_probe, 71 .probe = bttv_sub_probe,
72 .remove = bttv_sub_remove, 72 .remove = bttv_sub_remove,
73}; 73};
74EXPORT_SYMBOL(bttv_sub_bus_type);
75 74
76static void release_sub_device(struct device *dev) 75static void release_sub_device(struct device *dev)
77{ 76{
@@ -152,7 +151,6 @@ void bttv_gpio_inout(struct bttv_core *core, u32 mask, u32 outbits)
152 btwrite(data,BT848_GPIO_OUT_EN); 151 btwrite(data,BT848_GPIO_OUT_EN);
153 spin_unlock_irqrestore(&btv->gpio_lock,flags); 152 spin_unlock_irqrestore(&btv->gpio_lock,flags);
154} 153}
155EXPORT_SYMBOL(bttv_gpio_inout);
156 154
157u32 bttv_gpio_read(struct bttv_core *core) 155u32 bttv_gpio_read(struct bttv_core *core)
158{ 156{
@@ -162,7 +160,6 @@ u32 bttv_gpio_read(struct bttv_core *core)
162 value = btread(BT848_GPIO_DATA); 160 value = btread(BT848_GPIO_DATA);
163 return value; 161 return value;
164} 162}
165EXPORT_SYMBOL(bttv_gpio_read);
166 163
167void bttv_gpio_write(struct bttv_core *core, u32 value) 164void bttv_gpio_write(struct bttv_core *core, u32 value)
168{ 165{
@@ -170,7 +167,6 @@ void bttv_gpio_write(struct bttv_core *core, u32 value)
170 167
171 btwrite(value,BT848_GPIO_DATA); 168 btwrite(value,BT848_GPIO_DATA);
172} 169}
173EXPORT_SYMBOL(bttv_gpio_write);
174 170
175void bttv_gpio_bits(struct bttv_core *core, u32 mask, u32 bits) 171void bttv_gpio_bits(struct bttv_core *core, u32 mask, u32 bits)
176{ 172{
@@ -185,7 +181,6 @@ void bttv_gpio_bits(struct bttv_core *core, u32 mask, u32 bits)
185 btwrite(data,BT848_GPIO_DATA); 181 btwrite(data,BT848_GPIO_DATA);
186 spin_unlock_irqrestore(&btv->gpio_lock,flags); 182 spin_unlock_irqrestore(&btv->gpio_lock,flags);
187} 183}
188EXPORT_SYMBOL(bttv_gpio_bits);
189 184
190/* 185/*
191 * Local variables: 186 * Local variables:
diff --git a/drivers/media/video/bt8xx/bttv-i2c.c b/drivers/media/video/bt8xx/bttv-i2c.c
index 62b873076e09..0dfa49b66418 100644
--- a/drivers/media/video/bt8xx/bttv-i2c.c
+++ b/drivers/media/video/bt8xx/bttv-i2c.c
@@ -412,7 +412,7 @@ static void do_i2c_scan(char *name, struct i2c_client *c)
412 unsigned char buf; 412 unsigned char buf;
413 int i,rc; 413 int i,rc;
414 414
415 for (i = 0; i < 128; i++) { 415 for (i = 0; i < ARRAY_SIZE(i2c_devs); i++) {
416 c->addr = i; 416 c->addr = i;
417 rc = i2c_master_recv(c,&buf,0); 417 rc = i2c_master_recv(c,&buf,0);
418 if (rc < 0) 418 if (rc < 0)
diff --git a/drivers/media/video/bt8xx/bttv-if.c b/drivers/media/video/bt8xx/bttv-if.c
index 19b564ab0e92..ecf07988cd33 100644
--- a/drivers/media/video/bt8xx/bttv-if.c
+++ b/drivers/media/video/bt8xx/bttv-if.c
@@ -33,32 +33,16 @@
33 33
34#include "bttvp.h" 34#include "bttvp.h"
35 35
36EXPORT_SYMBOL(bttv_get_cardinfo);
37EXPORT_SYMBOL(bttv_get_pcidev); 36EXPORT_SYMBOL(bttv_get_pcidev);
38EXPORT_SYMBOL(bttv_get_id);
39EXPORT_SYMBOL(bttv_gpio_enable); 37EXPORT_SYMBOL(bttv_gpio_enable);
40EXPORT_SYMBOL(bttv_read_gpio); 38EXPORT_SYMBOL(bttv_read_gpio);
41EXPORT_SYMBOL(bttv_write_gpio); 39EXPORT_SYMBOL(bttv_write_gpio);
42EXPORT_SYMBOL(bttv_get_gpio_queue);
43EXPORT_SYMBOL(bttv_i2c_call);
44 40
45/* ----------------------------------------------------------------------- */ 41/* ----------------------------------------------------------------------- */
46/* Exported functions - for other modules which want to access the */ 42/* Exported functions - for other modules which want to access the */
47/* gpio ports (IR for example) */ 43/* gpio ports (IR for example) */
48/* see bttv.h for comments */ 44/* see bttv.h for comments */
49 45
50int bttv_get_cardinfo(unsigned int card, int *type, unsigned *cardid)
51{
52 printk("The bttv_* interface is obsolete and will go away,\n"
53 "please use the new, sysfs based interface instead.\n");
54 if (card >= bttv_num) {
55 return -1;
56 }
57 *type = bttvs[card].c.type;
58 *cardid = bttvs[card].cardid;
59 return 0;
60}
61
62struct pci_dev* bttv_get_pcidev(unsigned int card) 46struct pci_dev* bttv_get_pcidev(unsigned int card)
63{ 47{
64 if (card >= bttv_num) 48 if (card >= bttv_num)
@@ -66,16 +50,6 @@ struct pci_dev* bttv_get_pcidev(unsigned int card)
66 return bttvs[card].c.pci; 50 return bttvs[card].c.pci;
67} 51}
68 52
69int bttv_get_id(unsigned int card)
70{
71 printk("The bttv_* interface is obsolete and will go away,\n"
72 "please use the new, sysfs based interface instead.\n");
73 if (card >= bttv_num) {
74 return -1;
75 }
76 return bttvs[card].c.type;
77}
78
79 53
80int bttv_gpio_enable(unsigned int card, unsigned long mask, unsigned long data) 54int bttv_gpio_enable(unsigned int card, unsigned long mask, unsigned long data)
81{ 55{
@@ -130,28 +104,6 @@ int bttv_write_gpio(unsigned int card, unsigned long mask, unsigned long data)
130 return 0; 104 return 0;
131} 105}
132 106
133wait_queue_head_t* bttv_get_gpio_queue(unsigned int card)
134{
135 struct bttv *btv;
136
137 if (card >= bttv_num) {
138 return NULL;
139 }
140
141 btv = &bttvs[card];
142 if (bttvs[card].shutdown) {
143 return NULL;
144 }
145 return &btv->gpioq;
146}
147
148void bttv_i2c_call(unsigned int card, unsigned int cmd, void *arg)
149{
150 if (card >= bttv_num)
151 return;
152 bttv_call_i2c_clients(&bttvs[card], cmd, arg);
153}
154
155/* 107/*
156 * Local variables: 108 * Local variables:
157 * c-basic-offset: 8 109 * c-basic-offset: 8
diff --git a/drivers/media/video/bt8xx/bttv.h b/drivers/media/video/bt8xx/bttv.h
index 5491acbdaf63..f821ba69db99 100644
--- a/drivers/media/video/bt8xx/bttv.h
+++ b/drivers/media/video/bt8xx/bttv.h
@@ -168,6 +168,8 @@
168#define BTTV_BOARD_SABRENT_TVFM 0x8e 168#define BTTV_BOARD_SABRENT_TVFM 0x8e
169#define BTTV_BOARD_HAUPPAUGE_IMPACTVCB 0x8f 169#define BTTV_BOARD_HAUPPAUGE_IMPACTVCB 0x8f
170#define BTTV_BOARD_MACHTV_MAGICTV 0x90 170#define BTTV_BOARD_MACHTV_MAGICTV 0x90
171#define BTTV_BOARD_SSAI_SECURITY 0x91
172#define BTTV_BOARD_SSAI_ULTRASOUND 0x92
171 173
172/* more card-specific defines */ 174/* more card-specific defines */
173#define PT2254_L_CHANNEL 0x10 175#define PT2254_L_CHANNEL 0x10
@@ -260,17 +262,8 @@ extern int bttv_handle_chipset(struct bttv *btv);
260/* this obsolete -- please use the sysfs-based 262/* this obsolete -- please use the sysfs-based
261 interface below for new code */ 263 interface below for new code */
262 264
263/* returns card type + card ID (for bt878-based ones)
264 for possible values see lines below beginning with #define BTTV_BOARD_UNKNOWN
265 returns negative value if error occurred
266*/
267extern int bttv_get_cardinfo(unsigned int card, int *type,
268 unsigned int *cardid);
269extern struct pci_dev* bttv_get_pcidev(unsigned int card); 265extern struct pci_dev* bttv_get_pcidev(unsigned int card);
270 266
271/* obsolete, use bttv_get_cardinfo instead */
272extern int bttv_get_id(unsigned int card);
273
274/* sets GPOE register (BT848_GPIO_OUT_EN) to new value: 267/* sets GPOE register (BT848_GPIO_OUT_EN) to new value:
275 data | (current_GPOE_value & ~mask) 268 data | (current_GPOE_value & ~mask)
276 returns negative value if error occurred 269 returns negative value if error occurred
@@ -290,20 +283,6 @@ extern int bttv_read_gpio(unsigned int card, unsigned long *data);
290extern int bttv_write_gpio(unsigned int card, 283extern int bttv_write_gpio(unsigned int card,
291 unsigned long mask, unsigned long data); 284 unsigned long mask, unsigned long data);
292 285
293/* returns pointer to task queue which can be used as parameter to
294 interruptible_sleep_on
295 in interrupt handler if BT848_INT_GPINT bit is set - this queue is activated
296 (wake_up_interruptible) and following call to the function bttv_read_gpio
297 should return new value of GPDATA,
298 returns NULL value if error occurred or queue is not available
299 WARNING: because there is no buffer for GPIO data, one MUST
300 process data ASAP
301*/
302extern wait_queue_head_t* bttv_get_gpio_queue(unsigned int card);
303
304/* call i2c clients
305*/
306extern void bttv_i2c_call(unsigned int card, unsigned int cmd, void *arg);
307 286
308 287
309 288
diff --git a/drivers/media/video/bt8xx/bttvp.h b/drivers/media/video/bt8xx/bttvp.h
index ad79b8d53430..8f44f02029be 100644
--- a/drivers/media/video/bt8xx/bttvp.h
+++ b/drivers/media/video/bt8xx/bttvp.h
@@ -434,6 +434,9 @@ struct bttv {
434 unsigned int users; 434 unsigned int users;
435 struct bttv_fh init; 435 struct bttv_fh init;
436 436
437 /* used to make dvb-bt8xx autoloadable */
438 struct work_struct request_module_wk;
439
437 /* Default (0) and current (1) video capturing and overlay 440 /* Default (0) and current (1) video capturing and overlay
438 cropping parameters in bttv_tvnorm.cropcap units. Protected 441 cropping parameters in bttv_tvnorm.cropcap units. Protected
439 by bttv.lock. */ 442 by bttv.lock. */