diff options
Diffstat (limited to 'drivers/media')
62 files changed, 137 insertions, 94 deletions
diff --git a/drivers/media/common/saa7146_i2c.c b/drivers/media/common/saa7146_i2c.c index d9953f7a8b6b..5297a365c928 100644 --- a/drivers/media/common/saa7146_i2c.c +++ b/drivers/media/common/saa7146_i2c.c | |||
@@ -217,11 +217,9 @@ static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword, int short_d | |||
217 | } | 217 | } |
218 | /* wait until we get a transfer done or error */ | 218 | /* wait until we get a transfer done or error */ |
219 | timeout = jiffies + HZ/100 + 1; /* 10ms */ | 219 | timeout = jiffies + HZ/100 + 1; /* 10ms */ |
220 | /* first read usually delivers bogus results... */ | ||
221 | saa7146_i2c_status(dev); | ||
220 | while(1) { | 222 | while(1) { |
221 | /** | ||
222 | * first read usually delivers bogus results... | ||
223 | */ | ||
224 | saa7146_i2c_status(dev); | ||
225 | status = saa7146_i2c_status(dev); | 223 | status = saa7146_i2c_status(dev); |
226 | if ((status & 0x3) != 1) | 224 | if ((status & 0x3) != 1) |
227 | break; | 225 | break; |
@@ -232,10 +230,10 @@ static int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword, int short_d | |||
232 | DEB_I2C(("saa7146_i2c_writeout: timed out waiting for end of xfer\n")); | 230 | DEB_I2C(("saa7146_i2c_writeout: timed out waiting for end of xfer\n")); |
233 | return -EIO; | 231 | return -EIO; |
234 | } | 232 | } |
235 | if ((++trial < 20) && short_delay) | 233 | if (++trial < 50 && short_delay) |
236 | udelay(10); | 234 | udelay(10); |
237 | else | 235 | else |
238 | msleep(1); | 236 | msleep(1); |
239 | } | 237 | } |
240 | } | 238 | } |
241 | 239 | ||
diff --git a/drivers/media/dvb/b2c2/flexcop-usb.c b/drivers/media/dvb/b2c2/flexcop-usb.c index 2853ea1bdaf1..87fb75f0d1cf 100644 --- a/drivers/media/dvb/b2c2/flexcop-usb.c +++ b/drivers/media/dvb/b2c2/flexcop-usb.c | |||
@@ -246,7 +246,7 @@ static int flexcop_usb_i2c_req(struct flexcop_usb *fc_usb, | |||
246 | wIndex = (chipaddr << 8 ) | addr; | 246 | wIndex = (chipaddr << 8 ) | addr; |
247 | 247 | ||
248 | deb_i2c("i2c %2d: %02x %02x %02x %02x %02x %02x\n",func,request_type,req, | 248 | deb_i2c("i2c %2d: %02x %02x %02x %02x %02x %02x\n",func,request_type,req, |
249 | ((wValue && 0xff) << 8),wValue >> 8,((wIndex && 0xff) << 8),wIndex >> 8); | 249 | wValue & 0xff, wValue >> 8, wIndex & 0xff, wIndex >> 8); |
250 | 250 | ||
251 | len = usb_control_msg(fc_usb->udev,pipe, | 251 | len = usb_control_msg(fc_usb->udev,pipe, |
252 | req, | 252 | req, |
diff --git a/drivers/media/dvb/cinergyT2/cinergyT2.c b/drivers/media/dvb/cinergyT2/cinergyT2.c index ff7d4f56ced3..55bc891768c2 100644 --- a/drivers/media/dvb/cinergyT2/cinergyT2.c +++ b/drivers/media/dvb/cinergyT2/cinergyT2.c | |||
@@ -275,8 +275,7 @@ static void cinergyt2_free_stream_urbs (struct cinergyt2 *cinergyt2) | |||
275 | int i; | 275 | int i; |
276 | 276 | ||
277 | for (i=0; i<STREAM_URB_COUNT; i++) | 277 | for (i=0; i<STREAM_URB_COUNT; i++) |
278 | if (cinergyt2->stream_urb[i]) | 278 | usb_free_urb(cinergyt2->stream_urb[i]); |
279 | usb_free_urb(cinergyt2->stream_urb[i]); | ||
280 | 279 | ||
281 | usb_buffer_free(cinergyt2->udev, STREAM_URB_COUNT*STREAM_BUF_SIZE, | 280 | usb_buffer_free(cinergyt2->udev, STREAM_URB_COUNT*STREAM_BUF_SIZE, |
282 | cinergyt2->streambuf, cinergyt2->streambuf_dmahandle); | 281 | cinergyt2->streambuf, cinergyt2->streambuf_dmahandle); |
@@ -320,8 +319,7 @@ static void cinergyt2_stop_stream_xfer (struct cinergyt2 *cinergyt2) | |||
320 | cinergyt2_control_stream_transfer(cinergyt2, 0); | 319 | cinergyt2_control_stream_transfer(cinergyt2, 0); |
321 | 320 | ||
322 | for (i=0; i<STREAM_URB_COUNT; i++) | 321 | for (i=0; i<STREAM_URB_COUNT; i++) |
323 | if (cinergyt2->stream_urb[i]) | 322 | usb_kill_urb(cinergyt2->stream_urb[i]); |
324 | usb_kill_urb(cinergyt2->stream_urb[i]); | ||
325 | } | 323 | } |
326 | 324 | ||
327 | static int cinergyt2_start_stream_xfer (struct cinergyt2 *cinergyt2) | 325 | static int cinergyt2_start_stream_xfer (struct cinergyt2 *cinergyt2) |
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c index 53304e6991ac..a2ab2eebfc68 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c | |||
@@ -348,7 +348,7 @@ static int dvb_frontend_swzigzag_autotune(struct dvb_frontend *fe, int check_wra | |||
348 | 348 | ||
349 | static void dvb_frontend_swzigzag(struct dvb_frontend *fe) | 349 | static void dvb_frontend_swzigzag(struct dvb_frontend *fe) |
350 | { | 350 | { |
351 | fe_status_t s; | 351 | fe_status_t s = 0; |
352 | struct dvb_frontend_private *fepriv = fe->frontend_priv; | 352 | struct dvb_frontend_private *fepriv = fe->frontend_priv; |
353 | 353 | ||
354 | /* if we've got no parameters, just keep idling */ | 354 | /* if we've got no parameters, just keep idling */ |
diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig index 2cc5caa26a0a..a263b3f3c21d 100644 --- a/drivers/media/dvb/dvb-usb/Kconfig +++ b/drivers/media/dvb/dvb-usb/Kconfig | |||
@@ -26,7 +26,7 @@ config DVB_USB_A800 | |||
26 | tristate "AVerMedia AverTV DVB-T USB 2.0 (A800)" | 26 | tristate "AVerMedia AverTV DVB-T USB 2.0 (A800)" |
27 | depends on DVB_USB | 27 | depends on DVB_USB |
28 | select DVB_DIB3000MC | 28 | select DVB_DIB3000MC |
29 | select DVB_TUNER_MT2060 | 29 | select DVB_TUNER_MT2060 if !DVB_FE_CUSTOMISE |
30 | help | 30 | help |
31 | Say Y here to support the AVerMedia AverTV DVB-T USB 2.0 (A800) receiver. | 31 | Say Y here to support the AVerMedia AverTV DVB-T USB 2.0 (A800) receiver. |
32 | 32 | ||
@@ -34,7 +34,7 @@ config DVB_USB_DIBUSB_MB | |||
34 | tristate "DiBcom USB DVB-T devices (based on the DiB3000M-B) (see help for device list)" | 34 | tristate "DiBcom USB DVB-T devices (based on the DiB3000M-B) (see help for device list)" |
35 | depends on DVB_USB | 35 | depends on DVB_USB |
36 | select DVB_DIB3000MB | 36 | select DVB_DIB3000MB |
37 | select DVB_TUNER_MT2060 | 37 | select DVB_TUNER_MT2060 if !DVB_FE_CUSTOMISE |
38 | help | 38 | help |
39 | Support for USB 1.1 and 2.0 DVB-T receivers based on reference designs made by | 39 | Support for USB 1.1 and 2.0 DVB-T receivers based on reference designs made by |
40 | DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-B demodulator. | 40 | DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-B demodulator. |
@@ -55,7 +55,7 @@ config DVB_USB_DIBUSB_MC | |||
55 | tristate "DiBcom USB DVB-T devices (based on the DiB3000M-C/P) (see help for device list)" | 55 | tristate "DiBcom USB DVB-T devices (based on the DiB3000M-C/P) (see help for device list)" |
56 | depends on DVB_USB | 56 | depends on DVB_USB |
57 | select DVB_DIB3000MC | 57 | select DVB_DIB3000MC |
58 | select DVB_TUNER_MT2060 | 58 | select DVB_TUNER_MT2060 if !DVB_FE_CUSTOMISE |
59 | help | 59 | help |
60 | Support for USB2.0 DVB-T receivers based on reference designs made by | 60 | Support for USB2.0 DVB-T receivers based on reference designs made by |
61 | DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-C/P demodulator. | 61 | DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-C/P demodulator. |
@@ -70,7 +70,7 @@ config DVB_USB_DIB0700 | |||
70 | tristate "DiBcom DiB0700 USB DVB devices (see help for supported devices)" | 70 | tristate "DiBcom DiB0700 USB DVB devices (see help for supported devices)" |
71 | depends on DVB_USB | 71 | depends on DVB_USB |
72 | select DVB_DIB3000MC | 72 | select DVB_DIB3000MC |
73 | select DVB_TUNER_MT2060 | 73 | select DVB_TUNER_MT2060 if !DVB_FE_CUSTOMISE |
74 | help | 74 | help |
75 | Support for USB2.0/1.1 DVB receivers based on the DiB0700 USB bridge. The | 75 | Support for USB2.0/1.1 DVB receivers based on the DiB0700 USB bridge. The |
76 | USB bridge is also present in devices having the DiB7700 DVB-T-USB | 76 | USB bridge is also present in devices having the DiB7700 DVB-T-USB |
@@ -87,7 +87,7 @@ config DVB_USB_UMT_010 | |||
87 | tristate "HanfTek UMT-010 DVB-T USB2.0 support" | 87 | tristate "HanfTek UMT-010 DVB-T USB2.0 support" |
88 | depends on DVB_USB | 88 | depends on DVB_USB |
89 | select DVB_DIB3000MC | 89 | select DVB_DIB3000MC |
90 | select DVB_TUNER_MT2060 | 90 | select DVB_TUNER_MT2060 if !DVB_FE_CUSTOMISE |
91 | help | 91 | help |
92 | Say Y here to support the HanfTek UMT-010 USB2.0 stick-sized DVB-T receiver. | 92 | Say Y here to support the HanfTek UMT-010 USB2.0 stick-sized DVB-T receiver. |
93 | 93 | ||
@@ -153,7 +153,7 @@ config DVB_USB_NOVA_T_USB2 | |||
153 | tristate "Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 support" | 153 | tristate "Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 support" |
154 | depends on DVB_USB | 154 | depends on DVB_USB |
155 | select DVB_DIB3000MC | 155 | select DVB_DIB3000MC |
156 | select DVB_TUNER_MT2060 | 156 | select DVB_TUNER_MT2060 if !DVB_FE_CUSTOMISE |
157 | help | 157 | help |
158 | Say Y here to support the Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 receiver. | 158 | Say Y here to support the Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 receiver. |
159 | 159 | ||
diff --git a/drivers/media/dvb/frontends/Kconfig b/drivers/media/dvb/frontends/Kconfig index 080fa257a0bc..aebb8d6f26f8 100644 --- a/drivers/media/dvb/frontends/Kconfig +++ b/drivers/media/dvb/frontends/Kconfig | |||
@@ -276,6 +276,8 @@ config DVB_TDA826X | |||
276 | 276 | ||
277 | config DVB_TUNER_MT2060 | 277 | config DVB_TUNER_MT2060 |
278 | tristate "Microtune MT2060 silicon IF tuner" | 278 | tristate "Microtune MT2060 silicon IF tuner" |
279 | depends on I2C | ||
280 | default m if DVB_FE_CUSTOMISE | ||
279 | help | 281 | help |
280 | A driver for the silicon IF tuner MT2060 from Microtune. | 282 | A driver for the silicon IF tuner MT2060 from Microtune. |
281 | 283 | ||
diff --git a/drivers/media/dvb/frontends/bcm3510.h b/drivers/media/dvb/frontends/bcm3510.h index 6dfa839a7022..7e4f95e1734b 100644 --- a/drivers/media/dvb/frontends/bcm3510.h +++ b/drivers/media/dvb/frontends/bcm3510.h | |||
@@ -34,7 +34,7 @@ struct bcm3510_config | |||
34 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); | 34 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); |
35 | }; | 35 | }; |
36 | 36 | ||
37 | #if defined(CONFIG_DVB_BCM3510) || defined(CONFIG_DVB_BCM3510_MODULE) | 37 | #if defined(CONFIG_DVB_BCM3510) || (defined(CONFIG_DVB_BCM3510_MODULE) && defined(MODULE)) |
38 | extern struct dvb_frontend* bcm3510_attach(const struct bcm3510_config* config, | 38 | extern struct dvb_frontend* bcm3510_attach(const struct bcm3510_config* config, |
39 | struct i2c_adapter* i2c); | 39 | struct i2c_adapter* i2c); |
40 | #else | 40 | #else |
diff --git a/drivers/media/dvb/frontends/cx22700.h b/drivers/media/dvb/frontends/cx22700.h index 10286cc29fb4..7ac33690cdcc 100644 --- a/drivers/media/dvb/frontends/cx22700.h +++ b/drivers/media/dvb/frontends/cx22700.h | |||
@@ -31,7 +31,7 @@ struct cx22700_config | |||
31 | u8 demod_address; | 31 | u8 demod_address; |
32 | }; | 32 | }; |
33 | 33 | ||
34 | #if defined(CONFIG_DVB_CX22700) || defined(CONFIG_DVB_CX22700_MODULE) | 34 | #if defined(CONFIG_DVB_CX22700) || (defined(CONFIG_DVB_CX22700_MODULE) && defined(MODULE)) |
35 | extern struct dvb_frontend* cx22700_attach(const struct cx22700_config* config, | 35 | extern struct dvb_frontend* cx22700_attach(const struct cx22700_config* config, |
36 | struct i2c_adapter* i2c); | 36 | struct i2c_adapter* i2c); |
37 | #else | 37 | #else |
diff --git a/drivers/media/dvb/frontends/cx22702.h b/drivers/media/dvb/frontends/cx22702.h index bc217ddf02c0..9cd64da6ee40 100644 --- a/drivers/media/dvb/frontends/cx22702.h +++ b/drivers/media/dvb/frontends/cx22702.h | |||
@@ -41,7 +41,7 @@ struct cx22702_config | |||
41 | u8 output_mode; | 41 | u8 output_mode; |
42 | }; | 42 | }; |
43 | 43 | ||
44 | #if defined(CONFIG_DVB_CX22702) || defined(CONFIG_DVB_CX22702_MODULE) | 44 | #if defined(CONFIG_DVB_CX22702) || (defined(CONFIG_DVB_CX22702_MODULE) && defined(MODULE)) |
45 | extern struct dvb_frontend* cx22702_attach(const struct cx22702_config* config, | 45 | extern struct dvb_frontend* cx22702_attach(const struct cx22702_config* config, |
46 | struct i2c_adapter* i2c); | 46 | struct i2c_adapter* i2c); |
47 | #else | 47 | #else |
diff --git a/drivers/media/dvb/frontends/cx24110.h b/drivers/media/dvb/frontends/cx24110.h index c9d5ae250ebb..0ca3af4db513 100644 --- a/drivers/media/dvb/frontends/cx24110.h +++ b/drivers/media/dvb/frontends/cx24110.h | |||
@@ -41,7 +41,7 @@ static inline int cx24110_pll_write(struct dvb_frontend *fe, u32 val) { | |||
41 | return r; | 41 | return r; |
42 | } | 42 | } |
43 | 43 | ||
44 | #if defined(CONFIG_DVB_CX24110) || defined(CONFIG_DVB_CX24110_MODULE) | 44 | #if defined(CONFIG_DVB_CX24110) || (defined(CONFIG_DVB_CX24110_MODULE) && defined(MODULE)) |
45 | extern struct dvb_frontend* cx24110_attach(const struct cx24110_config* config, | 45 | extern struct dvb_frontend* cx24110_attach(const struct cx24110_config* config, |
46 | struct i2c_adapter* i2c); | 46 | struct i2c_adapter* i2c); |
47 | #else | 47 | #else |
diff --git a/drivers/media/dvb/frontends/cx24123.h b/drivers/media/dvb/frontends/cx24123.h index 57a1dae1dc40..84f9e4f5c15e 100644 --- a/drivers/media/dvb/frontends/cx24123.h +++ b/drivers/media/dvb/frontends/cx24123.h | |||
@@ -35,7 +35,7 @@ struct cx24123_config | |||
35 | int lnb_polarity; | 35 | int lnb_polarity; |
36 | }; | 36 | }; |
37 | 37 | ||
38 | #if defined(CONFIG_DVB_CX24123) || defined(CONFIG_DVB_CX24123_MODULE) | 38 | #if defined(CONFIG_DVB_CX24123) || (defined(CONFIG_DVB_CX24123_MODULE) && defined(MODULE)) |
39 | extern struct dvb_frontend* cx24123_attach(const struct cx24123_config* config, | 39 | extern struct dvb_frontend* cx24123_attach(const struct cx24123_config* config, |
40 | struct i2c_adapter* i2c); | 40 | struct i2c_adapter* i2c); |
41 | #else | 41 | #else |
diff --git a/drivers/media/dvb/frontends/dib3000.h b/drivers/media/dvb/frontends/dib3000.h index 0caac3f0f279..a6d3854a67bc 100644 --- a/drivers/media/dvb/frontends/dib3000.h +++ b/drivers/media/dvb/frontends/dib3000.h | |||
@@ -41,7 +41,7 @@ struct dib_fe_xfer_ops | |||
41 | int (*tuner_pass_ctrl)(struct dvb_frontend *fe, int onoff, u8 pll_ctrl); | 41 | int (*tuner_pass_ctrl)(struct dvb_frontend *fe, int onoff, u8 pll_ctrl); |
42 | }; | 42 | }; |
43 | 43 | ||
44 | #if defined(CONFIG_DVB_DIB3000MB) || defined(CONFIG_DVB_DIB3000MB_MODULE) | 44 | #if defined(CONFIG_DVB_DIB3000MB) || (defined(CONFIG_DVB_DIB3000MB_MODULE) && defined(MODULE)) |
45 | extern struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config, | 45 | extern struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config, |
46 | struct i2c_adapter* i2c, struct dib_fe_xfer_ops *xfer_ops); | 46 | struct i2c_adapter* i2c, struct dib_fe_xfer_ops *xfer_ops); |
47 | #else | 47 | #else |
diff --git a/drivers/media/dvb/frontends/dib3000mc.h b/drivers/media/dvb/frontends/dib3000mc.h index 0d6fdef77538..72d4757601d8 100644 --- a/drivers/media/dvb/frontends/dib3000mc.h +++ b/drivers/media/dvb/frontends/dib3000mc.h | |||
@@ -39,7 +39,7 @@ struct dib3000mc_config { | |||
39 | #define DEFAULT_DIB3000MC_I2C_ADDRESS 16 | 39 | #define DEFAULT_DIB3000MC_I2C_ADDRESS 16 |
40 | #define DEFAULT_DIB3000P_I2C_ADDRESS 24 | 40 | #define DEFAULT_DIB3000P_I2C_ADDRESS 24 |
41 | 41 | ||
42 | #if defined(CONFIG_DVB_DIB3000MC) || defined(CONFIG_DVB_DIB3000MC_MODULE) | 42 | #if defined(CONFIG_DVB_DIB3000MC) || (defined(CONFIG_DVB_DIB3000MC_MODULE) && defined(MODULE)) |
43 | extern struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib3000mc_config *cfg); | 43 | extern struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib3000mc_config *cfg); |
44 | #else | 44 | #else |
45 | static inline struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib3000mc_config *cfg) | 45 | static inline struct dvb_frontend * dib3000mc_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib3000mc_config *cfg) |
diff --git a/drivers/media/dvb/frontends/isl6421.h b/drivers/media/dvb/frontends/isl6421.h index 1916e3eb2df3..ea7f78a7d3cd 100644 --- a/drivers/media/dvb/frontends/isl6421.h +++ b/drivers/media/dvb/frontends/isl6421.h | |||
@@ -39,7 +39,7 @@ | |||
39 | #define ISL6421_ISEL1 0x20 | 39 | #define ISL6421_ISEL1 0x20 |
40 | #define ISL6421_DCL 0x40 | 40 | #define ISL6421_DCL 0x40 |
41 | 41 | ||
42 | #if defined(CONFIG_DVB_ISL6421) || defined(CONFIG_DVB_ISL6421_MODULE) | 42 | #if defined(CONFIG_DVB_ISL6421) || (defined(CONFIG_DVB_ISL6421_MODULE) && defined(MODULE)) |
43 | /* override_set and override_clear control which system register bits (above) to always set & clear */ | 43 | /* override_set and override_clear control which system register bits (above) to always set & clear */ |
44 | extern struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr, | 44 | extern struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr, |
45 | u8 override_set, u8 override_clear); | 45 | u8 override_set, u8 override_clear); |
diff --git a/drivers/media/dvb/frontends/l64781.h b/drivers/media/dvb/frontends/l64781.h index 21ba4a230760..cd15f76ff28d 100644 --- a/drivers/media/dvb/frontends/l64781.h +++ b/drivers/media/dvb/frontends/l64781.h | |||
@@ -31,7 +31,7 @@ struct l64781_config | |||
31 | u8 demod_address; | 31 | u8 demod_address; |
32 | }; | 32 | }; |
33 | 33 | ||
34 | #if defined(CONFIG_DVB_L64781) || defined(CONFIG_DVB_L64781_MODULE) | 34 | #if defined(CONFIG_DVB_L64781) || (defined(CONFIG_DVB_L64781_MODULE) && defined(MODULE)) |
35 | extern struct dvb_frontend* l64781_attach(const struct l64781_config* config, | 35 | extern struct dvb_frontend* l64781_attach(const struct l64781_config* config, |
36 | struct i2c_adapter* i2c); | 36 | struct i2c_adapter* i2c); |
37 | #else | 37 | #else |
diff --git a/drivers/media/dvb/frontends/lgdt330x.h b/drivers/media/dvb/frontends/lgdt330x.h index 3f96b485584c..995059004b10 100644 --- a/drivers/media/dvb/frontends/lgdt330x.h +++ b/drivers/media/dvb/frontends/lgdt330x.h | |||
@@ -52,7 +52,7 @@ struct lgdt330x_config | |||
52 | int clock_polarity_flip; | 52 | int clock_polarity_flip; |
53 | }; | 53 | }; |
54 | 54 | ||
55 | #if defined(CONFIG_DVB_LGDT330X) || defined(CONFIG_DVB_LGDT330X_MODULE) | 55 | #if defined(CONFIG_DVB_LGDT330X) || (defined(CONFIG_DVB_LGDT330X_MODULE) && defined(MODULE)) |
56 | extern struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config, | 56 | extern struct dvb_frontend* lgdt330x_attach(const struct lgdt330x_config* config, |
57 | struct i2c_adapter* i2c); | 57 | struct i2c_adapter* i2c); |
58 | #else | 58 | #else |
diff --git a/drivers/media/dvb/frontends/lnbp21.h b/drivers/media/dvb/frontends/lnbp21.h index 1fe1dd179312..68906acf7d63 100644 --- a/drivers/media/dvb/frontends/lnbp21.h +++ b/drivers/media/dvb/frontends/lnbp21.h | |||
@@ -39,7 +39,7 @@ | |||
39 | 39 | ||
40 | #include <linux/dvb/frontend.h> | 40 | #include <linux/dvb/frontend.h> |
41 | 41 | ||
42 | #if defined(CONFIG_DVB_LNBP21) || defined(CONFIG_DVB_LNBP21_MODULE) | 42 | #if defined(CONFIG_DVB_LNBP21) || (defined(CONFIG_DVB_LNBP21_MODULE) && defined(MODULE)) |
43 | /* override_set and override_clear control which system register bits (above) to always set & clear */ | 43 | /* override_set and override_clear control which system register bits (above) to always set & clear */ |
44 | extern struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 override_set, u8 override_clear); | 44 | extern struct dvb_frontend *lnbp21_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 override_set, u8 override_clear); |
45 | #else | 45 | #else |
diff --git a/drivers/media/dvb/frontends/mt2060.h b/drivers/media/dvb/frontends/mt2060.h index 34a37c2b556f..0a86eab3a954 100644 --- a/drivers/media/dvb/frontends/mt2060.h +++ b/drivers/media/dvb/frontends/mt2060.h | |||
@@ -30,6 +30,14 @@ struct mt2060_config { | |||
30 | u8 clock_out; /* 0 = off, 1 = CLK/4, 2 = CLK/2, 3 = CLK/1 */ | 30 | u8 clock_out; /* 0 = off, 1 = CLK/4, 2 = CLK/2, 3 = CLK/1 */ |
31 | }; | 31 | }; |
32 | 32 | ||
33 | #if defined(CONFIG_DVB_TUNER_MT2060) || (defined(CONFIG_DVB_TUNER_MT2060_MODULE) && defined(MODULE)) | ||
33 | extern struct dvb_frontend * mt2060_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct mt2060_config *cfg, u16 if1); | 34 | extern struct dvb_frontend * mt2060_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct mt2060_config *cfg, u16 if1); |
35 | #else | ||
36 | static inline struct dvb_frontend * mt2060_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct mt2060_config *cfg, u16 if1) | ||
37 | { | ||
38 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __FUNCTION__); | ||
39 | return NULL; | ||
40 | } | ||
41 | #endif // CONFIG_DVB_TUNER_MT2060 | ||
34 | 42 | ||
35 | #endif | 43 | #endif |
diff --git a/drivers/media/dvb/frontends/mt312.h b/drivers/media/dvb/frontends/mt312.h index 7112fb4d58ac..cf9a1505ad4b 100644 --- a/drivers/media/dvb/frontends/mt312.h +++ b/drivers/media/dvb/frontends/mt312.h | |||
@@ -34,7 +34,7 @@ struct mt312_config | |||
34 | u8 demod_address; | 34 | u8 demod_address; |
35 | }; | 35 | }; |
36 | 36 | ||
37 | #if defined(CONFIG_DVB_MT312) || defined(CONFIG_DVB_MT312_MODULE) | 37 | #if defined(CONFIG_DVB_MT312) || (defined(CONFIG_DVB_MT312_MODULE) && defined(MODULE)) |
38 | struct dvb_frontend* vp310_mt312_attach(const struct mt312_config* config, | 38 | struct dvb_frontend* vp310_mt312_attach(const struct mt312_config* config, |
39 | struct i2c_adapter* i2c); | 39 | struct i2c_adapter* i2c); |
40 | #else | 40 | #else |
diff --git a/drivers/media/dvb/frontends/mt352.h b/drivers/media/dvb/frontends/mt352.h index 0035c2e2d7c2..e9964081fd84 100644 --- a/drivers/media/dvb/frontends/mt352.h +++ b/drivers/media/dvb/frontends/mt352.h | |||
@@ -51,7 +51,7 @@ struct mt352_config | |||
51 | int (*demod_init)(struct dvb_frontend* fe); | 51 | int (*demod_init)(struct dvb_frontend* fe); |
52 | }; | 52 | }; |
53 | 53 | ||
54 | #if defined(CONFIG_DVB_MT352) || defined(CONFIG_DVB_MT352_MODULE) | 54 | #if defined(CONFIG_DVB_MT352) || (defined(CONFIG_DVB_MT352_MODULE) && defined(MODULE)) |
55 | extern struct dvb_frontend* mt352_attach(const struct mt352_config* config, | 55 | extern struct dvb_frontend* mt352_attach(const struct mt352_config* config, |
56 | struct i2c_adapter* i2c); | 56 | struct i2c_adapter* i2c); |
57 | #else | 57 | #else |
diff --git a/drivers/media/dvb/frontends/nxt200x.h b/drivers/media/dvb/frontends/nxt200x.h index 2eb220e98062..28bc5591b319 100644 --- a/drivers/media/dvb/frontends/nxt200x.h +++ b/drivers/media/dvb/frontends/nxt200x.h | |||
@@ -45,7 +45,7 @@ struct nxt200x_config | |||
45 | int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured); | 45 | int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured); |
46 | }; | 46 | }; |
47 | 47 | ||
48 | #if defined(CONFIG_DVB_NXT200X) || defined(CONFIG_DVB_NXT200X_MODULE) | 48 | #if defined(CONFIG_DVB_NXT200X) || (defined(CONFIG_DVB_NXT200X_MODULE) && defined(MODULE)) |
49 | extern struct dvb_frontend* nxt200x_attach(const struct nxt200x_config* config, | 49 | extern struct dvb_frontend* nxt200x_attach(const struct nxt200x_config* config, |
50 | struct i2c_adapter* i2c); | 50 | struct i2c_adapter* i2c); |
51 | #else | 51 | #else |
diff --git a/drivers/media/dvb/frontends/nxt6000.h b/drivers/media/dvb/frontends/nxt6000.h index 9397393a6bd1..13d22518356e 100644 --- a/drivers/media/dvb/frontends/nxt6000.h +++ b/drivers/media/dvb/frontends/nxt6000.h | |||
@@ -33,7 +33,7 @@ struct nxt6000_config | |||
33 | u8 clock_inversion:1; | 33 | u8 clock_inversion:1; |
34 | }; | 34 | }; |
35 | 35 | ||
36 | #if defined(CONFIG_DVB_NXT6000) || defined(CONFIG_DVB_NXT6000_MODULE) | 36 | #if defined(CONFIG_DVB_NXT6000) || (defined(CONFIG_DVB_NXT6000_MODULE) && defined(MODULE)) |
37 | extern struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config, | 37 | extern struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config, |
38 | struct i2c_adapter* i2c); | 38 | struct i2c_adapter* i2c); |
39 | #else | 39 | #else |
diff --git a/drivers/media/dvb/frontends/or51132.h b/drivers/media/dvb/frontends/or51132.h index 9718be4fb835..add24f0a743b 100644 --- a/drivers/media/dvb/frontends/or51132.h +++ b/drivers/media/dvb/frontends/or51132.h | |||
@@ -34,7 +34,7 @@ struct or51132_config | |||
34 | int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured); | 34 | int (*set_ts_params)(struct dvb_frontend* fe, int is_punctured); |
35 | }; | 35 | }; |
36 | 36 | ||
37 | #if defined(CONFIG_DVB_OR51132) || defined(CONFIG_DVB_OR51132_MODULE) | 37 | #if defined(CONFIG_DVB_OR51132) || (defined(CONFIG_DVB_OR51132_MODULE) && defined(MODULE)) |
38 | extern struct dvb_frontend* or51132_attach(const struct or51132_config* config, | 38 | extern struct dvb_frontend* or51132_attach(const struct or51132_config* config, |
39 | struct i2c_adapter* i2c); | 39 | struct i2c_adapter* i2c); |
40 | #else | 40 | #else |
diff --git a/drivers/media/dvb/frontends/or51211.h b/drivers/media/dvb/frontends/or51211.h index 10a5419f9e00..8aad8402d615 100644 --- a/drivers/media/dvb/frontends/or51211.h +++ b/drivers/media/dvb/frontends/or51211.h | |||
@@ -37,7 +37,7 @@ struct or51211_config | |||
37 | void (*sleep)(struct dvb_frontend * fe); | 37 | void (*sleep)(struct dvb_frontend * fe); |
38 | }; | 38 | }; |
39 | 39 | ||
40 | #if defined(CONFIG_DVB_OR51211) || defined(CONFIG_DVB_OR51211_MODULE) | 40 | #if defined(CONFIG_DVB_OR51211) || (defined(CONFIG_DVB_OR51211_MODULE) && defined(MODULE)) |
41 | extern struct dvb_frontend* or51211_attach(const struct or51211_config* config, | 41 | extern struct dvb_frontend* or51211_attach(const struct or51211_config* config, |
42 | struct i2c_adapter* i2c); | 42 | struct i2c_adapter* i2c); |
43 | #else | 43 | #else |
diff --git a/drivers/media/dvb/frontends/s5h1420.h b/drivers/media/dvb/frontends/s5h1420.h index efc54d7f3c55..1555870f7226 100644 --- a/drivers/media/dvb/frontends/s5h1420.h +++ b/drivers/media/dvb/frontends/s5h1420.h | |||
@@ -34,7 +34,7 @@ struct s5h1420_config | |||
34 | u8 invert:1; | 34 | u8 invert:1; |
35 | }; | 35 | }; |
36 | 36 | ||
37 | #if defined(CONFIG_DVB_S5H1420) || defined(CONFIG_DVB_S5H1420_MODULE) | 37 | #if defined(CONFIG_DVB_S5H1420) || (defined(CONFIG_DVB_S5H1420_MODULE) && defined(MODULE)) |
38 | extern struct dvb_frontend* s5h1420_attach(const struct s5h1420_config* config, | 38 | extern struct dvb_frontend* s5h1420_attach(const struct s5h1420_config* config, |
39 | struct i2c_adapter* i2c); | 39 | struct i2c_adapter* i2c); |
40 | #else | 40 | #else |
diff --git a/drivers/media/dvb/frontends/sp8870.h b/drivers/media/dvb/frontends/sp8870.h index 4cf27d3b10f2..909cefe7139e 100644 --- a/drivers/media/dvb/frontends/sp8870.h +++ b/drivers/media/dvb/frontends/sp8870.h | |||
@@ -35,7 +35,7 @@ struct sp8870_config | |||
35 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); | 35 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); |
36 | }; | 36 | }; |
37 | 37 | ||
38 | #if defined(CONFIG_DVB_SP8870) || defined(CONFIG_DVB_SP8870_MODULE) | 38 | #if defined(CONFIG_DVB_SP8870) || (defined(CONFIG_DVB_SP8870_MODULE) && defined(MODULE)) |
39 | extern struct dvb_frontend* sp8870_attach(const struct sp8870_config* config, | 39 | extern struct dvb_frontend* sp8870_attach(const struct sp8870_config* config, |
40 | struct i2c_adapter* i2c); | 40 | struct i2c_adapter* i2c); |
41 | #else | 41 | #else |
diff --git a/drivers/media/dvb/frontends/sp887x.h b/drivers/media/dvb/frontends/sp887x.h index cab7ea644dfa..7ee78d7d916d 100644 --- a/drivers/media/dvb/frontends/sp887x.h +++ b/drivers/media/dvb/frontends/sp887x.h | |||
@@ -17,7 +17,7 @@ struct sp887x_config | |||
17 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); | 17 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); |
18 | }; | 18 | }; |
19 | 19 | ||
20 | #if defined(CONFIG_DVB_SP887X) || defined(CONFIG_DVB_SP887X_MODULE) | 20 | #if defined(CONFIG_DVB_SP887X) || (defined(CONFIG_DVB_SP887X_MODULE) && defined(MODULE)) |
21 | extern struct dvb_frontend* sp887x_attach(const struct sp887x_config* config, | 21 | extern struct dvb_frontend* sp887x_attach(const struct sp887x_config* config, |
22 | struct i2c_adapter* i2c); | 22 | struct i2c_adapter* i2c); |
23 | #else | 23 | #else |
diff --git a/drivers/media/dvb/frontends/stv0297.h b/drivers/media/dvb/frontends/stv0297.h index 760b80db43a5..69f4515df2b9 100644 --- a/drivers/media/dvb/frontends/stv0297.h +++ b/drivers/media/dvb/frontends/stv0297.h | |||
@@ -42,7 +42,7 @@ struct stv0297_config | |||
42 | u8 stop_during_read:1; | 42 | u8 stop_during_read:1; |
43 | }; | 43 | }; |
44 | 44 | ||
45 | #if defined(CONFIG_DVB_STV0297) || defined(CONFIG_DVB_STV0297_MODULE) | 45 | #if defined(CONFIG_DVB_STV0297) || (defined(CONFIG_DVB_STV0297_MODULE) && defined(MODULE)) |
46 | extern struct dvb_frontend* stv0297_attach(const struct stv0297_config* config, | 46 | extern struct dvb_frontend* stv0297_attach(const struct stv0297_config* config, |
47 | struct i2c_adapter* i2c); | 47 | struct i2c_adapter* i2c); |
48 | #else | 48 | #else |
diff --git a/drivers/media/dvb/frontends/stv0299.h b/drivers/media/dvb/frontends/stv0299.h index 7ef25207081d..33df9495908f 100644 --- a/drivers/media/dvb/frontends/stv0299.h +++ b/drivers/media/dvb/frontends/stv0299.h | |||
@@ -89,7 +89,7 @@ struct stv0299_config | |||
89 | int (*set_symbol_rate)(struct dvb_frontend* fe, u32 srate, u32 ratio); | 89 | int (*set_symbol_rate)(struct dvb_frontend* fe, u32 srate, u32 ratio); |
90 | }; | 90 | }; |
91 | 91 | ||
92 | #if defined(CONFIG_DVB_STV0299) || defined(CONFIG_DVB_STV0299_MODULE) | 92 | #if defined(CONFIG_DVB_STV0299) || (defined(CONFIG_DVB_STV0299_MODULE) && defined(MODULE)) |
93 | extern struct dvb_frontend* stv0299_attach(const struct stv0299_config* config, | 93 | extern struct dvb_frontend* stv0299_attach(const struct stv0299_config* config, |
94 | struct i2c_adapter* i2c); | 94 | struct i2c_adapter* i2c); |
95 | #else | 95 | #else |
diff --git a/drivers/media/dvb/frontends/tda10021.h b/drivers/media/dvb/frontends/tda10021.h index d68ae20c8412..e3da780108f6 100644 --- a/drivers/media/dvb/frontends/tda10021.h +++ b/drivers/media/dvb/frontends/tda10021.h | |||
@@ -32,7 +32,7 @@ struct tda10021_config | |||
32 | u8 demod_address; | 32 | u8 demod_address; |
33 | }; | 33 | }; |
34 | 34 | ||
35 | #if defined(CONFIG_DVB_TDA10021) || defined(CONFIG_DVB_TDA10021_MODULE) | 35 | #if defined(CONFIG_DVB_TDA10021) || (defined(CONFIG_DVB_TDA10021_MODULE) && defined(MODULE)) |
36 | extern struct dvb_frontend* tda10021_attach(const struct tda10021_config* config, | 36 | extern struct dvb_frontend* tda10021_attach(const struct tda10021_config* config, |
37 | struct i2c_adapter* i2c, u8 pwm); | 37 | struct i2c_adapter* i2c, u8 pwm); |
38 | #else | 38 | #else |
diff --git a/drivers/media/dvb/frontends/tda1004x.h b/drivers/media/dvb/frontends/tda1004x.h index e28fca05734c..605ad2dfc09d 100644 --- a/drivers/media/dvb/frontends/tda1004x.h +++ b/drivers/media/dvb/frontends/tda1004x.h | |||
@@ -71,7 +71,7 @@ struct tda1004x_config | |||
71 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); | 71 | int (*request_firmware)(struct dvb_frontend* fe, const struct firmware **fw, char* name); |
72 | }; | 72 | }; |
73 | 73 | ||
74 | #if defined(CONFIG_DVB_TDA1004X) || defined(CONFIG_DVB_TDA1004X_MODULE) | 74 | #if defined(CONFIG_DVB_TDA1004X) || (defined(CONFIG_DVB_TDA1004X_MODULE) && defined(MODULE)) |
75 | extern struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config, | 75 | extern struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config, |
76 | struct i2c_adapter* i2c); | 76 | struct i2c_adapter* i2c); |
77 | 77 | ||
diff --git a/drivers/media/dvb/frontends/tda10086.c b/drivers/media/dvb/frontends/tda10086.c index 7456b0b9976b..4c27a2d90a38 100644 --- a/drivers/media/dvb/frontends/tda10086.c +++ b/drivers/media/dvb/frontends/tda10086.c | |||
@@ -441,6 +441,10 @@ static int tda10086_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_pa | |||
441 | 441 | ||
442 | dprintk ("%s\n", __FUNCTION__); | 442 | dprintk ("%s\n", __FUNCTION__); |
443 | 443 | ||
444 | // check for invalid symbol rate | ||
445 | if (fe_params->u.qpsk.symbol_rate < 500000) | ||
446 | return -EINVAL; | ||
447 | |||
444 | // calculate the updated frequency (note: we convert from Hz->kHz) | 448 | // calculate the updated frequency (note: we convert from Hz->kHz) |
445 | tmp64 = tda10086_read_byte(state, 0x52); | 449 | tmp64 = tda10086_read_byte(state, 0x52); |
446 | tmp64 |= (tda10086_read_byte(state, 0x51) << 8); | 450 | tmp64 |= (tda10086_read_byte(state, 0x51) << 8); |
diff --git a/drivers/media/dvb/frontends/tda10086.h b/drivers/media/dvb/frontends/tda10086.h index 18457adee30b..ed584a8f4a89 100644 --- a/drivers/media/dvb/frontends/tda10086.h +++ b/drivers/media/dvb/frontends/tda10086.h | |||
@@ -35,7 +35,7 @@ struct tda10086_config | |||
35 | u8 invert; | 35 | u8 invert; |
36 | }; | 36 | }; |
37 | 37 | ||
38 | #if defined(CONFIG_DVB_TDA10086) || defined(CONFIG_DVB_TDA10086_MODULE) | 38 | #if defined(CONFIG_DVB_TDA10086) || (defined(CONFIG_DVB_TDA10086_MODULE) && defined(MODULE)) |
39 | extern struct dvb_frontend* tda10086_attach(const struct tda10086_config* config, | 39 | extern struct dvb_frontend* tda10086_attach(const struct tda10086_config* config, |
40 | struct i2c_adapter* i2c); | 40 | struct i2c_adapter* i2c); |
41 | #else | 41 | #else |
diff --git a/drivers/media/dvb/frontends/tda8083.h b/drivers/media/dvb/frontends/tda8083.h index aae15bdce6eb..2d3307999f21 100644 --- a/drivers/media/dvb/frontends/tda8083.h +++ b/drivers/media/dvb/frontends/tda8083.h | |||
@@ -35,7 +35,7 @@ struct tda8083_config | |||
35 | u8 demod_address; | 35 | u8 demod_address; |
36 | }; | 36 | }; |
37 | 37 | ||
38 | #if defined(CONFIG_DVB_TDA8083) || defined(CONFIG_DVB_TDA8083_MODULE) | 38 | #if defined(CONFIG_DVB_TDA8083) || (defined(CONFIG_DVB_TDA8083_MODULE) && defined(MODULE)) |
39 | extern struct dvb_frontend* tda8083_attach(const struct tda8083_config* config, | 39 | extern struct dvb_frontend* tda8083_attach(const struct tda8083_config* config, |
40 | struct i2c_adapter* i2c); | 40 | struct i2c_adapter* i2c); |
41 | #else | 41 | #else |
diff --git a/drivers/media/dvb/frontends/tda826x.c b/drivers/media/dvb/frontends/tda826x.c index eeab26bd36ed..34815b0b97e4 100644 --- a/drivers/media/dvb/frontends/tda826x.c +++ b/drivers/media/dvb/frontends/tda826x.c | |||
@@ -121,7 +121,7 @@ static struct dvb_tuner_ops tda826x_tuner_ops = { | |||
121 | .info = { | 121 | .info = { |
122 | .name = "Philips TDA826X", | 122 | .name = "Philips TDA826X", |
123 | .frequency_min = 950000, | 123 | .frequency_min = 950000, |
124 | .frequency_min = 2175000 | 124 | .frequency_max = 2175000 |
125 | }, | 125 | }, |
126 | .release = tda826x_release, | 126 | .release = tda826x_release, |
127 | .sleep = tda826x_sleep, | 127 | .sleep = tda826x_sleep, |
diff --git a/drivers/media/dvb/frontends/tda826x.h b/drivers/media/dvb/frontends/tda826x.h index 83998c001196..ad9981195961 100644 --- a/drivers/media/dvb/frontends/tda826x.h +++ b/drivers/media/dvb/frontends/tda826x.h | |||
@@ -35,7 +35,7 @@ | |||
35 | * @param has_loopthrough Set to 1 if the card has a loopthrough RF connector. | 35 | * @param has_loopthrough Set to 1 if the card has a loopthrough RF connector. |
36 | * @return FE pointer on success, NULL on failure. | 36 | * @return FE pointer on success, NULL on failure. |
37 | */ | 37 | */ |
38 | #if defined(CONFIG_DVB_TDA826X) || defined(CONFIG_DVB_TDA826X_MODULE) | 38 | #if defined(CONFIG_DVB_TDA826X) || (defined(CONFIG_DVB_TDA826X_MODULE) && defined(MODULE)) |
39 | extern struct dvb_frontend* tda826x_attach(struct dvb_frontend *fe, int addr, | 39 | extern struct dvb_frontend* tda826x_attach(struct dvb_frontend *fe, int addr, |
40 | struct i2c_adapter *i2c, | 40 | struct i2c_adapter *i2c, |
41 | int has_loopthrough); | 41 | int has_loopthrough); |
diff --git a/drivers/media/dvb/frontends/tua6100.h b/drivers/media/dvb/frontends/tua6100.h index 8f98033ffa7b..03a665e7df6d 100644 --- a/drivers/media/dvb/frontends/tua6100.h +++ b/drivers/media/dvb/frontends/tua6100.h | |||
@@ -34,7 +34,7 @@ | |||
34 | #include <linux/i2c.h> | 34 | #include <linux/i2c.h> |
35 | #include "dvb_frontend.h" | 35 | #include "dvb_frontend.h" |
36 | 36 | ||
37 | #if defined(CONFIG_DVB_TUA6100) || defined(CONFIG_DVB_TUA6100_MODULE) | 37 | #if defined(CONFIG_DVB_TUA6100) || (defined(CONFIG_DVB_TUA6100_MODULE) && defined(MODULE)) |
38 | extern struct dvb_frontend *tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c); | 38 | extern struct dvb_frontend *tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c); |
39 | #else | 39 | #else |
40 | static inline struct dvb_frontend* tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c) | 40 | static inline struct dvb_frontend* tua6100_attach(struct dvb_frontend *fe, int addr, struct i2c_adapter *i2c) |
diff --git a/drivers/media/dvb/frontends/ves1820.h b/drivers/media/dvb/frontends/ves1820.h index f0c9dded39d7..e4a2a324046a 100644 --- a/drivers/media/dvb/frontends/ves1820.h +++ b/drivers/media/dvb/frontends/ves1820.h | |||
@@ -41,7 +41,7 @@ struct ves1820_config | |||
41 | u8 selagc:1; | 41 | u8 selagc:1; |
42 | }; | 42 | }; |
43 | 43 | ||
44 | #if defined(CONFIG_DVB_VES1820) || defined(CONFIG_DVB_VES1820_MODULE) | 44 | #if defined(CONFIG_DVB_VES1820) || (defined(CONFIG_DVB_VES1820_MODULE) && defined(MODULE)) |
45 | extern struct dvb_frontend* ves1820_attach(const struct ves1820_config* config, | 45 | extern struct dvb_frontend* ves1820_attach(const struct ves1820_config* config, |
46 | struct i2c_adapter* i2c, u8 pwm); | 46 | struct i2c_adapter* i2c, u8 pwm); |
47 | #else | 47 | #else |
diff --git a/drivers/media/dvb/frontends/ves1x93.h b/drivers/media/dvb/frontends/ves1x93.h index 395fed39b286..d507f8966f81 100644 --- a/drivers/media/dvb/frontends/ves1x93.h +++ b/drivers/media/dvb/frontends/ves1x93.h | |||
@@ -40,7 +40,7 @@ struct ves1x93_config | |||
40 | u8 invert_pwm:1; | 40 | u8 invert_pwm:1; |
41 | }; | 41 | }; |
42 | 42 | ||
43 | #if defined(CONFIG_DVB_VES1X93) || defined(CONFIG_DVB_VES1X93_MODULE) | 43 | #if defined(CONFIG_DVB_VES1X93) || (defined(CONFIG_DVB_VES1X93_MODULE) && defined(MODULE)) |
44 | extern struct dvb_frontend* ves1x93_attach(const struct ves1x93_config* config, | 44 | extern struct dvb_frontend* ves1x93_attach(const struct ves1x93_config* config, |
45 | struct i2c_adapter* i2c); | 45 | struct i2c_adapter* i2c); |
46 | #else | 46 | #else |
diff --git a/drivers/media/dvb/frontends/zl10353.h b/drivers/media/dvb/frontends/zl10353.h index 79a947215c4d..0bc0109737f1 100644 --- a/drivers/media/dvb/frontends/zl10353.h +++ b/drivers/media/dvb/frontends/zl10353.h | |||
@@ -36,7 +36,7 @@ struct zl10353_config | |||
36 | int parallel_ts; | 36 | int parallel_ts; |
37 | }; | 37 | }; |
38 | 38 | ||
39 | #if defined(CONFIG_DVB_ZL10353) || defined(CONFIG_DVB_ZL10353_MODULE) | 39 | #if defined(CONFIG_DVB_ZL10353) || (defined(CONFIG_DVB_ZL10353_MODULE) && defined(MODULE)) |
40 | extern struct dvb_frontend* zl10353_attach(const struct zl10353_config *config, | 40 | extern struct dvb_frontend* zl10353_attach(const struct zl10353_config *config, |
41 | struct i2c_adapter *i2c); | 41 | struct i2c_adapter *i2c); |
42 | #else | 42 | #else |
diff --git a/drivers/media/dvb/ttpci/budget-ci.c b/drivers/media/dvb/ttpci/budget-ci.c index 2a2e9b400613..cd5ec489af1c 100644 --- a/drivers/media/dvb/ttpci/budget-ci.c +++ b/drivers/media/dvb/ttpci/budget-ci.c | |||
@@ -46,7 +46,14 @@ | |||
46 | #include "bsbe1.h" | 46 | #include "bsbe1.h" |
47 | #include "bsru6.h" | 47 | #include "bsru6.h" |
48 | 48 | ||
49 | #define DEBIADDR_IR 0x1234 | 49 | /* |
50 | * Regarding DEBIADDR_IR: | ||
51 | * Some CI modules hang if random addresses are read. | ||
52 | * Using address 0x4000 for the IR read means that we | ||
53 | * use the same address as for CI version, which should | ||
54 | * be a safe default. | ||
55 | */ | ||
56 | #define DEBIADDR_IR 0x4000 | ||
50 | #define DEBIADDR_CICONTROL 0x0000 | 57 | #define DEBIADDR_CICONTROL 0x0000 |
51 | #define DEBIADDR_CIVERSION 0x4000 | 58 | #define DEBIADDR_CIVERSION 0x4000 |
52 | #define DEBIADDR_IO 0x1000 | 59 | #define DEBIADDR_IO 0x1000 |
@@ -1028,6 +1035,7 @@ static void frontend_init(struct budget_ci *budget_ci) | |||
1028 | 1035 | ||
1029 | case 0x1012: // TT DVB-T CI budget (tda10046/Philips tdm1316l(tda6651tt)) | 1036 | case 0x1012: // TT DVB-T CI budget (tda10046/Philips tdm1316l(tda6651tt)) |
1030 | budget_ci->tuner_pll_address = 0x60; | 1037 | budget_ci->tuner_pll_address = 0x60; |
1038 | philips_tdm1316l_config.invert = 1; | ||
1031 | budget_ci->budget.dvb_frontend = | 1039 | budget_ci->budget.dvb_frontend = |
1032 | dvb_attach(tda10046_attach, &philips_tdm1316l_config, &budget_ci->budget.i2c_adap); | 1040 | dvb_attach(tda10046_attach, &philips_tdm1316l_config, &budget_ci->budget.i2c_adap); |
1033 | if (budget_ci->budget.dvb_frontend) { | 1041 | if (budget_ci->budget.dvb_frontend) { |
diff --git a/drivers/media/dvb/ttpci/budget-patch.c b/drivers/media/dvb/ttpci/budget-patch.c index fc1267b8c892..9a155396d6ac 100644 --- a/drivers/media/dvb/ttpci/budget-patch.c +++ b/drivers/media/dvb/ttpci/budget-patch.c | |||
@@ -500,14 +500,14 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte | |||
500 | 500 | ||
501 | /* New design (By Emard) | 501 | /* New design (By Emard) |
502 | ** this rps1 code will copy internal HS event to GPIO3 pin. | 502 | ** this rps1 code will copy internal HS event to GPIO3 pin. |
503 | ** GPIO3 is in budget-patch hardware connectd to port B VSYNC | 503 | ** GPIO3 is in budget-patch hardware connected to port B VSYNC |
504 | 504 | ||
505 | ** HS is an internal event of 7146, accessible with RPS | 505 | ** HS is an internal event of 7146, accessible with RPS |
506 | ** and temporarily raised high every n lines | 506 | ** and temporarily raised high every n lines |
507 | ** (n in defined in the RPS_THRESH1 counter threshold) | 507 | ** (n in defined in the RPS_THRESH1 counter threshold) |
508 | ** I think HS is raised high on the beginning of the n-th line | 508 | ** I think HS is raised high on the beginning of the n-th line |
509 | ** and remains high until this n-th line that triggered | 509 | ** and remains high until this n-th line that triggered |
510 | ** it is completely received. When the receiption of n-th line | 510 | ** it is completely received. When the reception of n-th line |
511 | ** ends, HS is lowered. | 511 | ** ends, HS is lowered. |
512 | 512 | ||
513 | ** To transmit data over DMA, 7146 needs changing state at | 513 | ** To transmit data over DMA, 7146 needs changing state at |
@@ -541,7 +541,7 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte | |||
541 | ** hardware debug note: a working budget card (including budget patch) | 541 | ** hardware debug note: a working budget card (including budget patch) |
542 | ** with vpeirq() interrupt setup in mode "0x90" (every 64K) will | 542 | ** with vpeirq() interrupt setup in mode "0x90" (every 64K) will |
543 | ** generate 3 interrupts per 25-Hz DMA frame of 2*188*512 bytes | 543 | ** generate 3 interrupts per 25-Hz DMA frame of 2*188*512 bytes |
544 | ** and that means 3*25=75 Hz of interrupt freqency, as seen by | 544 | ** and that means 3*25=75 Hz of interrupt frequency, as seen by |
545 | ** watch cat /proc/interrupts | 545 | ** watch cat /proc/interrupts |
546 | ** | 546 | ** |
547 | ** If this frequency is 3x lower (and data received in the DMA | 547 | ** If this frequency is 3x lower (and data received in the DMA |
@@ -550,7 +550,7 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte | |||
550 | ** this means VSYNC line is not connected in the hardware. | 550 | ** this means VSYNC line is not connected in the hardware. |
551 | ** (check soldering pcb and pins) | 551 | ** (check soldering pcb and pins) |
552 | ** The same behaviour of missing VSYNC can be duplicated on budget | 552 | ** The same behaviour of missing VSYNC can be duplicated on budget |
553 | ** cards, by seting DD1_INIT trigger mode 7 in 3rd nibble. | 553 | ** cards, by setting DD1_INIT trigger mode 7 in 3rd nibble. |
554 | */ | 554 | */ |
555 | 555 | ||
556 | // Setup RPS1 "program" (p35) | 556 | // Setup RPS1 "program" (p35) |
diff --git a/drivers/media/dvb/ttpci/budget.c b/drivers/media/dvb/ttpci/budget.c index e58f0391e9d1..56f1c80defc6 100644 --- a/drivers/media/dvb/ttpci/budget.c +++ b/drivers/media/dvb/ttpci/budget.c | |||
@@ -46,6 +46,10 @@ | |||
46 | #include "lnbp21.h" | 46 | #include "lnbp21.h" |
47 | #include "bsru6.h" | 47 | #include "bsru6.h" |
48 | 48 | ||
49 | static int diseqc_method; | ||
50 | module_param(diseqc_method, int, 0444); | ||
51 | MODULE_PARM_DESC(diseqc_method, "Select DiSEqC method for subsystem id 13c2:1003, 0: default, 1: more reliable (for newer revisions only)"); | ||
52 | |||
49 | static void Set22K (struct budget *budget, int state) | 53 | static void Set22K (struct budget *budget, int state) |
50 | { | 54 | { |
51 | struct saa7146_dev *dev=budget->dev; | 55 | struct saa7146_dev *dev=budget->dev; |
@@ -382,6 +386,11 @@ static void frontend_init(struct budget *budget) | |||
382 | if (budget->dvb_frontend) { | 386 | if (budget->dvb_frontend) { |
383 | budget->dvb_frontend->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params; | 387 | budget->dvb_frontend->ops.tuner_ops.set_params = alps_bsru6_tuner_set_params; |
384 | budget->dvb_frontend->tuner_priv = &budget->i2c_adap; | 388 | budget->dvb_frontend->tuner_priv = &budget->i2c_adap; |
389 | if (budget->dev->pci->subsystem_device == 0x1003 && diseqc_method == 0) { | ||
390 | budget->dvb_frontend->ops.diseqc_send_master_cmd = budget_diseqc_send_master_cmd; | ||
391 | budget->dvb_frontend->ops.diseqc_send_burst = budget_diseqc_send_burst; | ||
392 | budget->dvb_frontend->ops.set_tone = budget_set_tone; | ||
393 | } | ||
385 | break; | 394 | break; |
386 | } | 395 | } |
387 | break; | 396 | break; |
diff --git a/drivers/media/dvb/ttusb-dec/ttusb_dec.c b/drivers/media/dvb/ttusb-dec/ttusb_dec.c index a1c9fa9919ea..8135f3e76aeb 100644 --- a/drivers/media/dvb/ttusb-dec/ttusb_dec.c +++ b/drivers/media/dvb/ttusb-dec/ttusb_dec.c | |||
@@ -1135,8 +1135,7 @@ static void ttusb_dec_free_iso_urbs(struct ttusb_dec *dec) | |||
1135 | dprintk("%s\n", __FUNCTION__); | 1135 | dprintk("%s\n", __FUNCTION__); |
1136 | 1136 | ||
1137 | for (i = 0; i < ISO_BUF_COUNT; i++) | 1137 | for (i = 0; i < ISO_BUF_COUNT; i++) |
1138 | if (dec->iso_urb[i]) | 1138 | usb_free_urb(dec->iso_urb[i]); |
1139 | usb_free_urb(dec->iso_urb[i]); | ||
1140 | 1139 | ||
1141 | pci_free_consistent(NULL, | 1140 | pci_free_consistent(NULL, |
1142 | ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF * | 1141 | ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF * |
diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig index fbe5b6168cc2..b8fde5cf4735 100644 --- a/drivers/media/video/Kconfig +++ b/drivers/media/video/Kconfig | |||
@@ -24,7 +24,7 @@ config VIDEO_HELPER_CHIPS_AUTO | |||
24 | decode audio/video standards. This option will autoselect | 24 | decode audio/video standards. This option will autoselect |
25 | all pertinent modules to each selected video module. | 25 | all pertinent modules to each selected video module. |
26 | 26 | ||
27 | Unselect this only if you know exaclty what you are doing, since | 27 | Unselect this only if you know exactly what you are doing, since |
28 | it may break support on some boards. | 28 | it may break support on some boards. |
29 | 29 | ||
30 | In doubt, say Y. | 30 | In doubt, say Y. |
@@ -186,7 +186,7 @@ config VIDEO_KS0127 | |||
186 | 186 | ||
187 | config VIDEO_SAA7110 | 187 | config VIDEO_SAA7110 |
188 | tristate "Philips SAA7110 video decoder" | 188 | tristate "Philips SAA7110 video decoder" |
189 | depends on VIDEO_V4L1 | 189 | depends on VIDEO_V4L1 && I2C |
190 | ---help--- | 190 | ---help--- |
191 | Support for the Philips SAA7110 video decoders. | 191 | Support for the Philips SAA7110 video decoders. |
192 | 192 | ||
diff --git a/drivers/media/video/bt8xx/bttv-cards.c b/drivers/media/video/bt8xx/bttv-cards.c index a84903e0d810..21ebe8f13815 100644 --- a/drivers/media/video/bt8xx/bttv-cards.c +++ b/drivers/media/video/bt8xx/bttv-cards.c | |||
@@ -4001,7 +4001,7 @@ static void __devinit init_PXC200(struct bttv *btv) | |||
4001 | * - sleep 1ms | 4001 | * - sleep 1ms |
4002 | * - write 0x0E | 4002 | * - write 0x0E |
4003 | * read from GPIO_DATA into buf (uint_32) | 4003 | * read from GPIO_DATA into buf (uint_32) |
4004 | * - if ( buf>>18 & 0x01 ) || ( buf>>19 && 0x01 != 0 ) | 4004 | * - if ( buf>>18 & 0x01 ) || ( buf>>19 & 0x01 != 0 ) |
4005 | * error. ERROR_CPLD_Check_Failed. | 4005 | * error. ERROR_CPLD_Check_Failed. |
4006 | */ | 4006 | */ |
4007 | /* ----------------------------------------------------------------------- */ | 4007 | /* ----------------------------------------------------------------------- */ |
diff --git a/drivers/media/video/cx88/cx88-input.c b/drivers/media/video/cx88/cx88-input.c index ee48995a4ab5..57e1c024a547 100644 --- a/drivers/media/video/cx88/cx88-input.c +++ b/drivers/media/video/cx88/cx88-input.c | |||
@@ -202,13 +202,19 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | |||
202 | ir->sampling = 1; | 202 | ir->sampling = 1; |
203 | break; | 203 | break; |
204 | case CX88_BOARD_WINFAST_DTV2000H: | 204 | case CX88_BOARD_WINFAST_DTV2000H: |
205 | case CX88_BOARD_WINFAST2000XP_EXPERT: | ||
206 | ir_codes = ir_codes_winfast; | 205 | ir_codes = ir_codes_winfast; |
207 | ir->gpio_addr = MO_GP0_IO; | 206 | ir->gpio_addr = MO_GP0_IO; |
208 | ir->mask_keycode = 0x8f8; | 207 | ir->mask_keycode = 0x8f8; |
209 | ir->mask_keyup = 0x100; | 208 | ir->mask_keyup = 0x100; |
210 | ir->polling = 50; /* ms */ | 209 | ir->polling = 50; /* ms */ |
211 | break; | 210 | break; |
211 | case CX88_BOARD_WINFAST2000XP_EXPERT: | ||
212 | ir_codes = ir_codes_winfast; | ||
213 | ir->gpio_addr = MO_GP0_IO; | ||
214 | ir->mask_keycode = 0x8f8; | ||
215 | ir->mask_keyup = 0x100; | ||
216 | ir->polling = 1; /* ms */ | ||
217 | break; | ||
212 | case CX88_BOARD_IODATA_GVBCTV7E: | 218 | case CX88_BOARD_IODATA_GVBCTV7E: |
213 | ir_codes = ir_codes_iodata_bctv7e; | 219 | ir_codes = ir_codes_iodata_bctv7e; |
214 | ir->gpio_addr = MO_GP0_IO; | 220 | ir->gpio_addr = MO_GP0_IO; |
@@ -216,7 +222,7 @@ int cx88_ir_init(struct cx88_core *core, struct pci_dev *pci) | |||
216 | ir->mask_keydown = 0x02; | 222 | ir->mask_keydown = 0x02; |
217 | ir->polling = 5; /* ms */ | 223 | ir->polling = 5; /* ms */ |
218 | break; | 224 | break; |
219 | case CX88_BOARD_PROLINK_PLAYTVPVR: | 225 | case CX88_BOARD_PROLINK_PLAYTVPVR: |
220 | case CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO: | 226 | case CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO: |
221 | ir_codes = ir_codes_pixelview; | 227 | ir_codes = ir_codes_pixelview; |
222 | ir->gpio_addr = MO_GP1_IO; | 228 | ir->gpio_addr = MO_GP1_IO; |
diff --git a/drivers/media/video/et61x251/et61x251_core.c b/drivers/media/video/et61x251/et61x251_core.c index f786ab11d2cd..86e353b26b53 100644 --- a/drivers/media/video/et61x251/et61x251_core.c +++ b/drivers/media/video/et61x251/et61x251_core.c | |||
@@ -1182,8 +1182,6 @@ static void et61x251_release_resources(struct et61x251_device* cam) | |||
1182 | video_set_drvdata(cam->v4ldev, NULL); | 1182 | video_set_drvdata(cam->v4ldev, NULL); |
1183 | video_unregister_device(cam->v4ldev); | 1183 | video_unregister_device(cam->v4ldev); |
1184 | 1184 | ||
1185 | usb_put_dev(cam->usbdev); | ||
1186 | |||
1187 | mutex_unlock(&et61x251_sysfs_lock); | 1185 | mutex_unlock(&et61x251_sysfs_lock); |
1188 | 1186 | ||
1189 | kfree(cam->control_buffer); | 1187 | kfree(cam->control_buffer); |
@@ -1275,6 +1273,7 @@ static int et61x251_release(struct inode* inode, struct file* filp) | |||
1275 | 1273 | ||
1276 | if (cam->state & DEV_DISCONNECTED) { | 1274 | if (cam->state & DEV_DISCONNECTED) { |
1277 | et61x251_release_resources(cam); | 1275 | et61x251_release_resources(cam); |
1276 | usb_put_dev(cam->usbdev); | ||
1278 | mutex_unlock(&cam->dev_mutex); | 1277 | mutex_unlock(&cam->dev_mutex); |
1279 | kfree(cam); | 1278 | kfree(cam); |
1280 | return 0; | 1279 | return 0; |
diff --git a/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c b/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c index df8feac16aee..c80c26be6e4d 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c +++ b/drivers/media/video/pvrusb2/pvrusb2-cx2584x-v4l.c | |||
@@ -221,7 +221,7 @@ static unsigned int decoder_describe(struct pvr2_v4l_cx2584x *ctxt, | |||
221 | static void decoder_reset(struct pvr2_v4l_cx2584x *ctxt) | 221 | static void decoder_reset(struct pvr2_v4l_cx2584x *ctxt) |
222 | { | 222 | { |
223 | int ret; | 223 | int ret; |
224 | ret = pvr2_i2c_client_cmd(ctxt->client,VIDIOC_INT_RESET,0); | 224 | ret = pvr2_i2c_client_cmd(ctxt->client,VIDIOC_INT_RESET,NULL); |
225 | pvr2_trace(PVR2_TRACE_CHIPS,"i2c cx25840 decoder_reset (ret=%d)",ret); | 225 | pvr2_trace(PVR2_TRACE_CHIPS,"i2c cx25840 decoder_reset (ret=%d)",ret); |
226 | } | 226 | } |
227 | 227 | ||
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c index f920e0ccacd3..1f787333d18c 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c +++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c | |||
@@ -1953,8 +1953,8 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf, | |||
1953 | return hdw; | 1953 | return hdw; |
1954 | fail: | 1954 | fail: |
1955 | if (hdw) { | 1955 | if (hdw) { |
1956 | if (hdw->ctl_read_urb) usb_free_urb(hdw->ctl_read_urb); | 1956 | usb_free_urb(hdw->ctl_read_urb); |
1957 | if (hdw->ctl_write_urb) usb_free_urb(hdw->ctl_write_urb); | 1957 | usb_free_urb(hdw->ctl_write_urb); |
1958 | if (hdw->ctl_read_buffer) kfree(hdw->ctl_read_buffer); | 1958 | if (hdw->ctl_read_buffer) kfree(hdw->ctl_read_buffer); |
1959 | if (hdw->ctl_write_buffer) kfree(hdw->ctl_write_buffer); | 1959 | if (hdw->ctl_write_buffer) kfree(hdw->ctl_write_buffer); |
1960 | if (hdw->controls) kfree(hdw->controls); | 1960 | if (hdw->controls) kfree(hdw->controls); |
@@ -2575,12 +2575,10 @@ static void pvr2_ctl_timeout(unsigned long data) | |||
2575 | struct pvr2_hdw *hdw = (struct pvr2_hdw *)data; | 2575 | struct pvr2_hdw *hdw = (struct pvr2_hdw *)data; |
2576 | if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) { | 2576 | if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) { |
2577 | hdw->ctl_timeout_flag = !0; | 2577 | hdw->ctl_timeout_flag = !0; |
2578 | if (hdw->ctl_write_pend_flag && hdw->ctl_write_urb) { | 2578 | if (hdw->ctl_write_pend_flag) |
2579 | usb_unlink_urb(hdw->ctl_write_urb); | 2579 | usb_unlink_urb(hdw->ctl_write_urb); |
2580 | } | 2580 | if (hdw->ctl_read_pend_flag) |
2581 | if (hdw->ctl_read_pend_flag && hdw->ctl_read_urb) { | ||
2582 | usb_unlink_urb(hdw->ctl_read_urb); | 2581 | usb_unlink_urb(hdw->ctl_read_urb); |
2583 | } | ||
2584 | } | 2582 | } |
2585 | } | 2583 | } |
2586 | 2584 | ||
diff --git a/drivers/media/video/pvrusb2/pvrusb2-io.c b/drivers/media/video/pvrusb2/pvrusb2-io.c index 70aa63eba0cb..57fb32033543 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-io.c +++ b/drivers/media/video/pvrusb2/pvrusb2-io.c | |||
@@ -289,7 +289,7 @@ static void pvr2_buffer_done(struct pvr2_buffer *bp) | |||
289 | pvr2_buffer_set_none(bp); | 289 | pvr2_buffer_set_none(bp); |
290 | bp->signature = 0; | 290 | bp->signature = 0; |
291 | bp->stream = NULL; | 291 | bp->stream = NULL; |
292 | if (bp->purb) usb_free_urb(bp->purb); | 292 | usb_free_urb(bp->purb); |
293 | pvr2_trace(PVR2_TRACE_BUF_POOL,"/*---TRACE_FLOW---*/" | 293 | pvr2_trace(PVR2_TRACE_BUF_POOL,"/*---TRACE_FLOW---*/" |
294 | " bufferDone %p",bp); | 294 | " bufferDone %p",bp); |
295 | } | 295 | } |
diff --git a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c index 97e974d9b9c3..bb40e9085977 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c +++ b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c | |||
@@ -711,8 +711,8 @@ static void pvr2_v4l2_dev_destroy(struct pvr2_v4l2_dev *dip) | |||
711 | dip->devbase.minor,pvr2_config_get_name(dip->config)); | 711 | dip->devbase.minor,pvr2_config_get_name(dip->config)); |
712 | 712 | ||
713 | /* Paranoia */ | 713 | /* Paranoia */ |
714 | dip->v4lp = 0; | 714 | dip->v4lp = NULL; |
715 | dip->stream = 0; | 715 | dip->stream = NULL; |
716 | 716 | ||
717 | /* Actual deallocation happens later when all internal references | 717 | /* Actual deallocation happens later when all internal references |
718 | are gone. */ | 718 | are gone. */ |
@@ -1076,7 +1076,7 @@ struct pvr2_v4l2 *pvr2_v4l2_create(struct pvr2_context *mnp) | |||
1076 | vp->vdev = kmalloc(sizeof(*vp->vdev),GFP_KERNEL); | 1076 | vp->vdev = kmalloc(sizeof(*vp->vdev),GFP_KERNEL); |
1077 | if (!vp->vdev) { | 1077 | if (!vp->vdev) { |
1078 | kfree(vp); | 1078 | kfree(vp); |
1079 | return 0; | 1079 | return NULL; |
1080 | } | 1080 | } |
1081 | memset(vp->vdev,0,sizeof(*vp->vdev)); | 1081 | memset(vp->vdev,0,sizeof(*vp->vdev)); |
1082 | pvr2_channel_init(&vp->channel,mnp); | 1082 | pvr2_channel_init(&vp->channel,mnp); |
diff --git a/drivers/media/video/pwc/pwc-if.c b/drivers/media/video/pwc/pwc-if.c index 46c114830884..a996aad79276 100644 --- a/drivers/media/video/pwc/pwc-if.c +++ b/drivers/media/video/pwc/pwc-if.c | |||
@@ -866,11 +866,9 @@ int pwc_isoc_init(struct pwc_device *pdev) | |||
866 | } | 866 | } |
867 | if (ret) { | 867 | if (ret) { |
868 | /* De-allocate in reverse order */ | 868 | /* De-allocate in reverse order */ |
869 | while (i >= 0) { | 869 | while (i--) { |
870 | if (pdev->sbuf[i].urb != NULL) | 870 | usb_free_urb(pdev->sbuf[i].urb); |
871 | usb_free_urb(pdev->sbuf[i].urb); | ||
872 | pdev->sbuf[i].urb = NULL; | 871 | pdev->sbuf[i].urb = NULL; |
873 | i--; | ||
874 | } | 872 | } |
875 | return ret; | 873 | return ret; |
876 | } | 874 | } |
@@ -1095,8 +1093,7 @@ static int pwc_video_open(struct inode *inode, struct file *file) | |||
1095 | PWC_DEBUG_OPEN(">> video_open called(vdev = 0x%p).\n", vdev); | 1093 | PWC_DEBUG_OPEN(">> video_open called(vdev = 0x%p).\n", vdev); |
1096 | 1094 | ||
1097 | pdev = (struct pwc_device *)vdev->priv; | 1095 | pdev = (struct pwc_device *)vdev->priv; |
1098 | if (pdev == NULL) | 1096 | BUG_ON(!pdev); |
1099 | BUG(); | ||
1100 | if (pdev->vopen) { | 1097 | if (pdev->vopen) { |
1101 | PWC_DEBUG_OPEN("I'm busy, someone is using the device.\n"); | 1098 | PWC_DEBUG_OPEN("I'm busy, someone is using the device.\n"); |
1102 | return -EBUSY; | 1099 | return -EBUSY; |
diff --git a/drivers/media/video/saa6588.c b/drivers/media/video/saa6588.c index a81285ca7d5b..7b9859c33018 100644 --- a/drivers/media/video/saa6588.c +++ b/drivers/media/video/saa6588.c | |||
@@ -212,8 +212,10 @@ static void read_from_buf(struct saa6588 *s, struct rds_command *a) | |||
212 | if (rd_blocks > s->block_count) | 212 | if (rd_blocks > s->block_count) |
213 | rd_blocks = s->block_count; | 213 | rd_blocks = s->block_count; |
214 | 214 | ||
215 | if (!rd_blocks) | 215 | if (!rd_blocks) { |
216 | spin_unlock_irqrestore(&s->lock, flags); | ||
216 | return; | 217 | return; |
218 | } | ||
217 | 219 | ||
218 | for (i = 0; i < rd_blocks; i++) { | 220 | for (i = 0; i < rd_blocks; i++) { |
219 | if (block_to_user_buf(s, buf_ptr)) { | 221 | if (block_to_user_buf(s, buf_ptr)) { |
diff --git a/drivers/media/video/saa7115.c b/drivers/media/video/saa7115.c index c5719f7bd1ac..f28398dd9d93 100644 --- a/drivers/media/video/saa7115.c +++ b/drivers/media/video/saa7115.c | |||
@@ -1464,8 +1464,6 @@ static int saa711x_attach(struct i2c_adapter *adapter, int address, int kind) | |||
1464 | client->driver = &i2c_driver_saa711x; | 1464 | client->driver = &i2c_driver_saa711x; |
1465 | snprintf(client->name, sizeof(client->name) - 1, "saa7115"); | 1465 | snprintf(client->name, sizeof(client->name) - 1, "saa7115"); |
1466 | 1466 | ||
1467 | v4l_dbg(1, debug, client, "detecting saa7115 client on address 0x%x\n", address << 1); | ||
1468 | |||
1469 | for (i=0;i<0x0f;i++) { | 1467 | for (i=0;i<0x0f;i++) { |
1470 | saa711x_write(client, 0, i); | 1468 | saa711x_write(client, 0, i); |
1471 | name[i] = (saa711x_read(client, 0) &0x0f) +'0'; | 1469 | name[i] = (saa711x_read(client, 0) &0x0f) +'0'; |
@@ -1477,6 +1475,13 @@ static int saa711x_attach(struct i2c_adapter *adapter, int address, int kind) | |||
1477 | saa711x_write(client, 0, 5); | 1475 | saa711x_write(client, 0, 5); |
1478 | chip_id = saa711x_read(client, 0) & 0x0f; | 1476 | chip_id = saa711x_read(client, 0) & 0x0f; |
1479 | 1477 | ||
1478 | /* Check whether this chip is part of the saa711x series */ | ||
1479 | if (memcmp(name, "1f711", 5)) { | ||
1480 | v4l_dbg(1, debug, client, "chip found @ 0x%x (ID %s) does not match a known saa711x chip.\n", | ||
1481 | address << 1, name); | ||
1482 | return 0; | ||
1483 | } | ||
1484 | |||
1480 | snprintf(client->name, sizeof(client->name) - 1, "saa711%d",chip_id); | 1485 | snprintf(client->name, sizeof(client->name) - 1, "saa711%d",chip_id); |
1481 | v4l_info(client, "saa711%d found (%s) @ 0x%x (%s)\n", chip_id, name, address << 1, adapter->name); | 1486 | v4l_info(client, "saa711%d found (%s) @ 0x%x (%s)\n", chip_id, name, address << 1, adapter->name); |
1482 | 1487 | ||
diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c index c9d8e3b9cc37..51f0cfdcb680 100644 --- a/drivers/media/video/saa7134/saa7134-cards.c +++ b/drivers/media/video/saa7134/saa7134-cards.c | |||
@@ -2969,7 +2969,7 @@ struct saa7134_board saa7134_boards[] = { | |||
2969 | /* Petr Baudis <pasky@ucw.cz> */ | 2969 | /* Petr Baudis <pasky@ucw.cz> */ |
2970 | .name = "AVerMedia TV Hybrid A16AR", | 2970 | .name = "AVerMedia TV Hybrid A16AR", |
2971 | .audio_clock = 0x187de7, | 2971 | .audio_clock = 0x187de7, |
2972 | .tuner_type = TUNER_PHILIPS_TDA8290, /* untested */ | 2972 | .tuner_type = TUNER_PHILIPS_TD1316, /* untested */ |
2973 | .radio_type = TUNER_TEA5767, /* untested */ | 2973 | .radio_type = TUNER_TEA5767, /* untested */ |
2974 | .tuner_addr = ADDR_UNSET, | 2974 | .tuner_addr = ADDR_UNSET, |
2975 | .radio_addr = ADDR_UNSET, | 2975 | .radio_addr = ADDR_UNSET, |
@@ -3718,6 +3718,7 @@ int saa7134_board_init1(struct saa7134_dev *dev) | |||
3718 | case SAA7134_BOARD_AVERMEDIA_STUDIO_307: | 3718 | case SAA7134_BOARD_AVERMEDIA_STUDIO_307: |
3719 | case SAA7134_BOARD_AVERMEDIA_307: | 3719 | case SAA7134_BOARD_AVERMEDIA_307: |
3720 | case SAA7134_BOARD_AVERMEDIA_GO_007_FM: | 3720 | case SAA7134_BOARD_AVERMEDIA_GO_007_FM: |
3721 | case SAA7134_BOARD_AVERMEDIA_777: | ||
3721 | /* case SAA7134_BOARD_SABRENT_SBTTVFM: */ /* not finished yet */ | 3722 | /* case SAA7134_BOARD_SABRENT_SBTTVFM: */ /* not finished yet */ |
3722 | case SAA7134_BOARD_VIDEOMATE_TV_PVR: | 3723 | case SAA7134_BOARD_VIDEOMATE_TV_PVR: |
3723 | case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS: | 3724 | case SAA7134_BOARD_VIDEOMATE_GOLD_PLUS: |
@@ -3734,6 +3735,7 @@ int saa7134_board_init1(struct saa7134_dev *dev) | |||
3734 | case SAA7134_BOARD_FLYDVBT_LR301: | 3735 | case SAA7134_BOARD_FLYDVBT_LR301: |
3735 | case SAA7134_BOARD_FLYDVBTDUO: | 3736 | case SAA7134_BOARD_FLYDVBTDUO: |
3736 | case SAA7134_BOARD_PROTEUS_2309: | 3737 | case SAA7134_BOARD_PROTEUS_2309: |
3738 | case SAA7134_BOARD_AVERMEDIA_A16AR: | ||
3737 | dev->has_remote = SAA7134_REMOTE_GPIO; | 3739 | dev->has_remote = SAA7134_REMOTE_GPIO; |
3738 | break; | 3740 | break; |
3739 | case SAA7134_BOARD_FLYDVBS_LR300: | 3741 | case SAA7134_BOARD_FLYDVBS_LR300: |
@@ -3772,7 +3774,6 @@ int saa7134_board_init1(struct saa7134_dev *dev) | |||
3772 | saa_writeb(SAA7134_GPIO_GPMODE3, 0x08); | 3774 | saa_writeb(SAA7134_GPIO_GPMODE3, 0x08); |
3773 | saa_writeb(SAA7134_GPIO_GPSTATUS3, 0x00); | 3775 | saa_writeb(SAA7134_GPIO_GPSTATUS3, 0x00); |
3774 | break; | 3776 | break; |
3775 | case SAA7134_BOARD_AVERMEDIA_A16AR: | ||
3776 | case SAA7134_BOARD_AVERMEDIA_CARDBUS: | 3777 | case SAA7134_BOARD_AVERMEDIA_CARDBUS: |
3777 | /* power-up tuner chip */ | 3778 | /* power-up tuner chip */ |
3778 | saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0xffffffff, 0xffffffff); | 3779 | saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0xffffffff, 0xffffffff); |
diff --git a/drivers/media/video/saa7134/saa7134-dvb.c b/drivers/media/video/saa7134/saa7134-dvb.c index 1ba53b525ad2..6b61d9b2fcb5 100644 --- a/drivers/media/video/saa7134/saa7134-dvb.c +++ b/drivers/media/video/saa7134/saa7134-dvb.c | |||
@@ -1147,6 +1147,8 @@ static int dvb_init(struct saa7134_dev *dev) | |||
1147 | &philips_europa_config, | 1147 | &philips_europa_config, |
1148 | &dev->i2c_adap); | 1148 | &dev->i2c_adap); |
1149 | if (dev->dvb.frontend) { | 1149 | if (dev->dvb.frontend) { |
1150 | dev->original_demod_sleep = dev->dvb.frontend->ops.sleep; | ||
1151 | dev->dvb.frontend->ops.sleep = philips_europa_demod_sleep; | ||
1150 | dev->dvb.frontend->ops.tuner_ops.init = philips_europa_tuner_init; | 1152 | dev->dvb.frontend->ops.tuner_ops.init = philips_europa_tuner_init; |
1151 | dev->dvb.frontend->ops.tuner_ops.sleep = philips_europa_tuner_sleep; | 1153 | dev->dvb.frontend->ops.tuner_ops.sleep = philips_europa_tuner_sleep; |
1152 | dev->dvb.frontend->ops.tuner_ops.set_params = philips_td1316_tuner_set_params; | 1154 | dev->dvb.frontend->ops.tuner_ops.set_params = philips_td1316_tuner_set_params; |
diff --git a/drivers/media/video/saa7134/saa7134-input.c b/drivers/media/video/saa7134/saa7134-input.c index ff5991136f4e..dee83552e681 100644 --- a/drivers/media/video/saa7134/saa7134-input.c +++ b/drivers/media/video/saa7134/saa7134-input.c | |||
@@ -185,7 +185,6 @@ int saa7134_input_init1(struct saa7134_dev *dev) | |||
185 | case SAA7134_BOARD_AVERMEDIA_STUDIO_305: | 185 | case SAA7134_BOARD_AVERMEDIA_STUDIO_305: |
186 | case SAA7134_BOARD_AVERMEDIA_STUDIO_307: | 186 | case SAA7134_BOARD_AVERMEDIA_STUDIO_307: |
187 | case SAA7134_BOARD_AVERMEDIA_GO_007_FM: | 187 | case SAA7134_BOARD_AVERMEDIA_GO_007_FM: |
188 | case SAA7134_BOARD_AVERMEDIA_A16AR: | ||
189 | ir_codes = ir_codes_avermedia; | 188 | ir_codes = ir_codes_avermedia; |
190 | mask_keycode = 0x0007C8; | 189 | mask_keycode = 0x0007C8; |
191 | mask_keydown = 0x000010; | 190 | mask_keydown = 0x000010; |
@@ -194,6 +193,16 @@ int saa7134_input_init1(struct saa7134_dev *dev) | |||
194 | saa_setb(SAA7134_GPIO_GPMODE0, 0x4); | 193 | saa_setb(SAA7134_GPIO_GPMODE0, 0x4); |
195 | saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4); | 194 | saa_setb(SAA7134_GPIO_GPSTATUS0, 0x4); |
196 | break; | 195 | break; |
196 | case SAA7134_BOARD_AVERMEDIA_777: | ||
197 | case SAA7134_BOARD_AVERMEDIA_A16AR: | ||
198 | ir_codes = ir_codes_avermedia; | ||
199 | mask_keycode = 0x02F200; | ||
200 | mask_keydown = 0x000400; | ||
201 | polling = 50; // ms | ||
202 | /* Without this we won't receive key up events */ | ||
203 | saa_setb(SAA7134_GPIO_GPMODE1, 0x1); | ||
204 | saa_setb(SAA7134_GPIO_GPSTATUS1, 0x1); | ||
205 | break; | ||
197 | case SAA7134_BOARD_KWORLD_TERMINATOR: | 206 | case SAA7134_BOARD_KWORLD_TERMINATOR: |
198 | ir_codes = ir_codes_pixelview; | 207 | ir_codes = ir_codes_pixelview; |
199 | mask_keycode = 0x00001f; | 208 | mask_keycode = 0x00001f; |
diff --git a/drivers/media/video/sn9c102/sn9c102_core.c b/drivers/media/video/sn9c102/sn9c102_core.c index a4702d3c2aca..18458d46c0ff 100644 --- a/drivers/media/video/sn9c102/sn9c102_core.c +++ b/drivers/media/video/sn9c102/sn9c102_core.c | |||
@@ -775,7 +775,7 @@ static int sn9c102_start_transfer(struct sn9c102_device* cam) | |||
775 | return 0; | 775 | return 0; |
776 | 776 | ||
777 | free_urbs: | 777 | free_urbs: |
778 | for (i = 0; (i < SN9C102_URBS) && cam->urb[i]; i++) | 778 | for (i = 0; i < SN9C102_URBS; i++) |
779 | usb_free_urb(cam->urb[i]); | 779 | usb_free_urb(cam->urb[i]); |
780 | 780 | ||
781 | free_buffers: | 781 | free_buffers: |
@@ -1462,8 +1462,6 @@ static void sn9c102_release_resources(struct sn9c102_device* cam) | |||
1462 | video_set_drvdata(cam->v4ldev, NULL); | 1462 | video_set_drvdata(cam->v4ldev, NULL); |
1463 | video_unregister_device(cam->v4ldev); | 1463 | video_unregister_device(cam->v4ldev); |
1464 | 1464 | ||
1465 | usb_put_dev(cam->usbdev); | ||
1466 | |||
1467 | mutex_unlock(&sn9c102_sysfs_lock); | 1465 | mutex_unlock(&sn9c102_sysfs_lock); |
1468 | 1466 | ||
1469 | kfree(cam->control_buffer); | 1467 | kfree(cam->control_buffer); |
@@ -1555,6 +1553,7 @@ static int sn9c102_release(struct inode* inode, struct file* filp) | |||
1555 | 1553 | ||
1556 | if (cam->state & DEV_DISCONNECTED) { | 1554 | if (cam->state & DEV_DISCONNECTED) { |
1557 | sn9c102_release_resources(cam); | 1555 | sn9c102_release_resources(cam); |
1556 | usb_put_dev(cam->usbdev); | ||
1558 | mutex_unlock(&cam->dev_mutex); | 1557 | mutex_unlock(&cam->dev_mutex); |
1559 | kfree(cam); | 1558 | kfree(cam); |
1560 | return 0; | 1559 | return 0; |
diff --git a/drivers/media/video/tveeprom.c b/drivers/media/video/tveeprom.c index e6baaee038bf..6b9ef731b83a 100644 --- a/drivers/media/video/tveeprom.c +++ b/drivers/media/video/tveeprom.c | |||
@@ -468,7 +468,7 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee, | |||
468 | (eeprom_data[i+6] << 8) + | 468 | (eeprom_data[i+6] << 8) + |
469 | (eeprom_data[i+7] << 16); | 469 | (eeprom_data[i+7] << 16); |
470 | 470 | ||
471 | if ( (eeprom_data[i + 8] && 0xf0) && | 471 | if ( (eeprom_data[i + 8] & 0xf0) && |
472 | (tvee->serial_number < 0xffffff) ) { | 472 | (tvee->serial_number < 0xffffff) ) { |
473 | tvee->MAC_address[0] = 0x00; | 473 | tvee->MAC_address[0] = 0x00; |
474 | tvee->MAC_address[1] = 0x0D; | 474 | tvee->MAC_address[1] = 0x0D; |
diff --git a/drivers/media/video/usbvideo/quickcam_messenger.c b/drivers/media/video/usbvideo/quickcam_messenger.c index 9a26b9484aae..bbf2beeeb449 100644 --- a/drivers/media/video/usbvideo/quickcam_messenger.c +++ b/drivers/media/video/usbvideo/quickcam_messenger.c | |||
@@ -190,8 +190,7 @@ static int qcm_alloc_int_urb(struct qcm *cam) | |||
190 | 190 | ||
191 | static void qcm_free_int(struct qcm *cam) | 191 | static void qcm_free_int(struct qcm *cam) |
192 | { | 192 | { |
193 | if (cam->button_urb) | 193 | usb_free_urb(cam->button_urb); |
194 | usb_free_urb(cam->button_urb); | ||
195 | } | 194 | } |
196 | #endif /* CONFIG_INPUT */ | 195 | #endif /* CONFIG_INPUT */ |
197 | 196 | ||
diff --git a/drivers/media/video/zc0301/zc0301_core.c b/drivers/media/video/zc0301/zc0301_core.c index 5b5563424422..52d0f759ee00 100644 --- a/drivers/media/video/zc0301/zc0301_core.c +++ b/drivers/media/video/zc0301/zc0301_core.c | |||
@@ -489,7 +489,7 @@ static int zc0301_start_transfer(struct zc0301_device* cam) | |||
489 | return 0; | 489 | return 0; |
490 | 490 | ||
491 | free_urbs: | 491 | free_urbs: |
492 | for (i = 0; (i < ZC0301_URBS) && cam->urb[i]; i++) | 492 | for (i = 0; i < ZC0301_URBS; i++) |
493 | usb_free_urb(cam->urb[i]); | 493 | usb_free_urb(cam->urb[i]); |
494 | 494 | ||
495 | free_buffers: | 495 | free_buffers: |