diff options
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/common/b2c2/flexcop-fe-tuner.c | 4 | ||||
-rw-r--r-- | drivers/media/dvb-frontends/isl6421.c | 28 | ||||
-rw-r--r-- | drivers/media/dvb-frontends/isl6421.h | 4 | ||||
-rw-r--r-- | drivers/media/pci/cx88/cx88-cards.c | 1 | ||||
-rw-r--r-- | drivers/media/pci/cx88/cx88-dvb.c | 16 | ||||
-rw-r--r-- | drivers/media/pci/cx88/cx88.h | 1 | ||||
-rw-r--r-- | drivers/media/pci/saa7134/saa7134-dvb.c | 8 |
7 files changed, 50 insertions, 12 deletions
diff --git a/drivers/media/common/b2c2/flexcop-fe-tuner.c b/drivers/media/common/b2c2/flexcop-fe-tuner.c index 850a6c606750..7e14e90d2922 100644 --- a/drivers/media/common/b2c2/flexcop-fe-tuner.c +++ b/drivers/media/common/b2c2/flexcop-fe-tuner.c | |||
@@ -325,7 +325,7 @@ static int skystar2_rev27_attach(struct flexcop_device *fc, | |||
325 | /* enable no_base_addr - no repeated start when reading */ | 325 | /* enable no_base_addr - no repeated start when reading */ |
326 | fc->fc_i2c_adap[2].no_base_addr = 1; | 326 | fc->fc_i2c_adap[2].no_base_addr = 1; |
327 | if (!dvb_attach(isl6421_attach, fc->fe, &fc->fc_i2c_adap[2].i2c_adap, | 327 | if (!dvb_attach(isl6421_attach, fc->fe, &fc->fc_i2c_adap[2].i2c_adap, |
328 | 0x08, 1, 1)) { | 328 | 0x08, 1, 1, false)) { |
329 | err("ISL6421 could NOT be attached"); | 329 | err("ISL6421 could NOT be attached"); |
330 | goto fail_isl; | 330 | goto fail_isl; |
331 | } | 331 | } |
@@ -391,7 +391,7 @@ static int skystar2_rev28_attach(struct flexcop_device *fc, | |||
391 | 391 | ||
392 | fc->fc_i2c_adap[2].no_base_addr = 1; | 392 | fc->fc_i2c_adap[2].no_base_addr = 1; |
393 | if (!dvb_attach(isl6421_attach, fc->fe, &fc->fc_i2c_adap[2].i2c_adap, | 393 | if (!dvb_attach(isl6421_attach, fc->fe, &fc->fc_i2c_adap[2].i2c_adap, |
394 | 0x08, 0, 0)) { | 394 | 0x08, 0, 0, false)) { |
395 | err("ISL6421 could NOT be attached"); | 395 | err("ISL6421 could NOT be attached"); |
396 | fc->fc_i2c_adap[2].no_base_addr = 0; | 396 | fc->fc_i2c_adap[2].no_base_addr = 0; |
397 | return 0; | 397 | return 0; |
diff --git a/drivers/media/dvb-frontends/isl6421.c b/drivers/media/dvb-frontends/isl6421.c index 0cb3f0f74c9c..c77002fcc8e2 100644 --- a/drivers/media/dvb-frontends/isl6421.c +++ b/drivers/media/dvb-frontends/isl6421.c | |||
@@ -89,6 +89,30 @@ static int isl6421_enable_high_lnb_voltage(struct dvb_frontend *fe, long arg) | |||
89 | return (i2c_transfer(isl6421->i2c, &msg, 1) == 1) ? 0 : -EIO; | 89 | return (i2c_transfer(isl6421->i2c, &msg, 1) == 1) ? 0 : -EIO; |
90 | } | 90 | } |
91 | 91 | ||
92 | static int isl6421_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone) | ||
93 | { | ||
94 | struct isl6421 *isl6421 = (struct isl6421 *) fe->sec_priv; | ||
95 | struct i2c_msg msg = { .addr = isl6421->i2c_addr, .flags = 0, | ||
96 | .buf = &isl6421->config, | ||
97 | .len = sizeof(isl6421->config) }; | ||
98 | |||
99 | switch (tone) { | ||
100 | case SEC_TONE_ON: | ||
101 | isl6421->config |= ISL6421_ENT1; | ||
102 | break; | ||
103 | case SEC_TONE_OFF: | ||
104 | isl6421->config &= ~ISL6421_ENT1; | ||
105 | break; | ||
106 | default: | ||
107 | return -EINVAL; | ||
108 | } | ||
109 | |||
110 | isl6421->config |= isl6421->override_or; | ||
111 | isl6421->config &= isl6421->override_and; | ||
112 | |||
113 | return (i2c_transfer(isl6421->i2c, &msg, 1) == 1) ? 0 : -EIO; | ||
114 | } | ||
115 | |||
92 | static void isl6421_release(struct dvb_frontend *fe) | 116 | static void isl6421_release(struct dvb_frontend *fe) |
93 | { | 117 | { |
94 | /* power off */ | 118 | /* power off */ |
@@ -100,7 +124,7 @@ static void isl6421_release(struct dvb_frontend *fe) | |||
100 | } | 124 | } |
101 | 125 | ||
102 | struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr, | 126 | struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr, |
103 | u8 override_set, u8 override_clear) | 127 | u8 override_set, u8 override_clear, bool override_tone) |
104 | { | 128 | { |
105 | struct isl6421 *isl6421 = kmalloc(sizeof(struct isl6421), GFP_KERNEL); | 129 | struct isl6421 *isl6421 = kmalloc(sizeof(struct isl6421), GFP_KERNEL); |
106 | if (!isl6421) | 130 | if (!isl6421) |
@@ -131,6 +155,8 @@ struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter | |||
131 | /* override frontend ops */ | 155 | /* override frontend ops */ |
132 | fe->ops.set_voltage = isl6421_set_voltage; | 156 | fe->ops.set_voltage = isl6421_set_voltage; |
133 | fe->ops.enable_high_lnb_voltage = isl6421_enable_high_lnb_voltage; | 157 | fe->ops.enable_high_lnb_voltage = isl6421_enable_high_lnb_voltage; |
158 | if (override_tone) | ||
159 | fe->ops.set_tone = isl6421_set_tone; | ||
134 | 160 | ||
135 | return fe; | 161 | return fe; |
136 | } | 162 | } |
diff --git a/drivers/media/dvb-frontends/isl6421.h b/drivers/media/dvb-frontends/isl6421.h index e7ca7d12b50a..630e7f8a150e 100644 --- a/drivers/media/dvb-frontends/isl6421.h +++ b/drivers/media/dvb-frontends/isl6421.h | |||
@@ -42,10 +42,10 @@ | |||
42 | #if IS_ENABLED(CONFIG_DVB_ISL6421) | 42 | #if IS_ENABLED(CONFIG_DVB_ISL6421) |
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, bool override_tone); |
46 | #else | 46 | #else |
47 | static inline struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr, | 47 | static inline struct dvb_frontend *isl6421_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, u8 i2c_addr, |
48 | u8 override_set, u8 override_clear) | 48 | u8 override_set, u8 override_clear, bool override_tone) |
49 | { | 49 | { |
50 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); | 50 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); |
51 | return NULL; | 51 | return NULL; |
diff --git a/drivers/media/pci/cx88/cx88-cards.c b/drivers/media/pci/cx88/cx88-cards.c index e2e0b8faf7a4..07b700a9ed7f 100644 --- a/drivers/media/pci/cx88/cx88-cards.c +++ b/drivers/media/pci/cx88/cx88-cards.c | |||
@@ -2855,6 +2855,7 @@ static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) | |||
2855 | core->board.tuner_type = tv.tuner_type; | 2855 | core->board.tuner_type = tv.tuner_type; |
2856 | core->tuner_formats = tv.tuner_formats; | 2856 | core->tuner_formats = tv.tuner_formats; |
2857 | core->board.radio.type = tv.has_radio ? CX88_RADIO : 0; | 2857 | core->board.radio.type = tv.has_radio ? CX88_RADIO : 0; |
2858 | core->model = tv.model; | ||
2858 | 2859 | ||
2859 | /* Make sure we support the board model */ | 2860 | /* Make sure we support the board model */ |
2860 | switch (tv.model) | 2861 | switch (tv.model) |
diff --git a/drivers/media/pci/cx88/cx88-dvb.c b/drivers/media/pci/cx88/cx88-dvb.c index 672b267a2d3e..053ed1ba1d85 100644 --- a/drivers/media/pci/cx88/cx88-dvb.c +++ b/drivers/media/pci/cx88/cx88-dvb.c | |||
@@ -1042,7 +1042,7 @@ static int dvb_register(struct cx8802_dev *dev) | |||
1042 | if (!dvb_attach(isl6421_attach, | 1042 | if (!dvb_attach(isl6421_attach, |
1043 | fe0->dvb.frontend, | 1043 | fe0->dvb.frontend, |
1044 | &dev->core->i2c_adap, | 1044 | &dev->core->i2c_adap, |
1045 | 0x08, ISL6421_DCL, 0x00)) | 1045 | 0x08, ISL6421_DCL, 0x00, false)) |
1046 | goto frontend_detach; | 1046 | goto frontend_detach; |
1047 | } | 1047 | } |
1048 | /* MFE frontend 2 */ | 1048 | /* MFE frontend 2 */ |
@@ -1279,8 +1279,16 @@ static int dvb_register(struct cx8802_dev *dev) | |||
1279 | &hauppauge_novas_config, | 1279 | &hauppauge_novas_config, |
1280 | &core->i2c_adap); | 1280 | &core->i2c_adap); |
1281 | if (fe0->dvb.frontend) { | 1281 | if (fe0->dvb.frontend) { |
1282 | bool override_tone; | ||
1283 | |||
1284 | if (core->model == 92001) | ||
1285 | override_tone = true; | ||
1286 | else | ||
1287 | override_tone = false; | ||
1288 | |||
1282 | if (!dvb_attach(isl6421_attach, fe0->dvb.frontend, | 1289 | if (!dvb_attach(isl6421_attach, fe0->dvb.frontend, |
1283 | &core->i2c_adap, 0x08, ISL6421_DCL, 0x00)) | 1290 | &core->i2c_adap, 0x08, ISL6421_DCL, 0x00, |
1291 | override_tone)) | ||
1284 | goto frontend_detach; | 1292 | goto frontend_detach; |
1285 | } | 1293 | } |
1286 | break; | 1294 | break; |
@@ -1403,7 +1411,7 @@ static int dvb_register(struct cx8802_dev *dev) | |||
1403 | if (!dvb_attach(isl6421_attach, | 1411 | if (!dvb_attach(isl6421_attach, |
1404 | fe0->dvb.frontend, | 1412 | fe0->dvb.frontend, |
1405 | &dev->core->i2c_adap, | 1413 | &dev->core->i2c_adap, |
1406 | 0x08, ISL6421_DCL, 0x00)) | 1414 | 0x08, ISL6421_DCL, 0x00, false)) |
1407 | goto frontend_detach; | 1415 | goto frontend_detach; |
1408 | } | 1416 | } |
1409 | /* MFE frontend 2 */ | 1417 | /* MFE frontend 2 */ |
@@ -1431,7 +1439,7 @@ static int dvb_register(struct cx8802_dev *dev) | |||
1431 | if (!dvb_attach(isl6421_attach, | 1439 | if (!dvb_attach(isl6421_attach, |
1432 | fe0->dvb.frontend, | 1440 | fe0->dvb.frontend, |
1433 | &dev->core->i2c_adap, | 1441 | &dev->core->i2c_adap, |
1434 | 0x08, ISL6421_DCL, 0x00)) | 1442 | 0x08, ISL6421_DCL, 0x00, false)) |
1435 | goto frontend_detach; | 1443 | goto frontend_detach; |
1436 | } | 1444 | } |
1437 | break; | 1445 | break; |
diff --git a/drivers/media/pci/cx88/cx88.h b/drivers/media/pci/cx88/cx88.h index eca02c2435de..4e29c9deb684 100644 --- a/drivers/media/pci/cx88/cx88.h +++ b/drivers/media/pci/cx88/cx88.h | |||
@@ -334,6 +334,7 @@ struct cx88_core { | |||
334 | /* board name */ | 334 | /* board name */ |
335 | int nr; | 335 | int nr; |
336 | char name[32]; | 336 | char name[32]; |
337 | u32 model; | ||
337 | 338 | ||
338 | /* pci stuff */ | 339 | /* pci stuff */ |
339 | int pci_bus; | 340 | int pci_bus; |
diff --git a/drivers/media/pci/saa7134/saa7134-dvb.c b/drivers/media/pci/saa7134/saa7134-dvb.c index 27915e501db9..45271390d7fb 100644 --- a/drivers/media/pci/saa7134/saa7134-dvb.c +++ b/drivers/media/pci/saa7134/saa7134-dvb.c | |||
@@ -1391,8 +1391,9 @@ static int dvb_init(struct saa7134_dev *dev) | |||
1391 | wprintk("%s: Lifeview Trio, No tda826x found!\n", __func__); | 1391 | wprintk("%s: Lifeview Trio, No tda826x found!\n", __func__); |
1392 | goto detach_frontend; | 1392 | goto detach_frontend; |
1393 | } | 1393 | } |
1394 | if (dvb_attach(isl6421_attach, fe0->dvb.frontend, &dev->i2c_adap, | 1394 | if (dvb_attach(isl6421_attach, fe0->dvb.frontend, |
1395 | 0x08, 0, 0) == NULL) { | 1395 | &dev->i2c_adap, |
1396 | 0x08, 0, 0, false) == NULL) { | ||
1396 | wprintk("%s: Lifeview Trio, No ISL6421 found!\n", __func__); | 1397 | wprintk("%s: Lifeview Trio, No ISL6421 found!\n", __func__); |
1397 | goto detach_frontend; | 1398 | goto detach_frontend; |
1398 | } | 1399 | } |
@@ -1509,7 +1510,8 @@ static int dvb_init(struct saa7134_dev *dev) | |||
1509 | goto detach_frontend; | 1510 | goto detach_frontend; |
1510 | } | 1511 | } |
1511 | if (dvb_attach(isl6421_attach, fe0->dvb.frontend, | 1512 | if (dvb_attach(isl6421_attach, fe0->dvb.frontend, |
1512 | &dev->i2c_adap, 0x08, 0, 0) == NULL) { | 1513 | &dev->i2c_adap, |
1514 | 0x08, 0, 0, false) == NULL) { | ||
1513 | wprintk("%s: No ISL6421 found!\n", __func__); | 1515 | wprintk("%s: No ISL6421 found!\n", __func__); |
1514 | goto detach_frontend; | 1516 | goto detach_frontend; |
1515 | } | 1517 | } |