diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-09-21 13:56:50 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-09-21 13:56:50 -0400 |
commit | c1f03b486429633597bccbee413fb621b53603a8 (patch) | |
tree | 0c642c0474bc856f101ea03739518a953c7c0282 | |
parent | 3c2ea7024a686e9e7121ef6405da7412619a98f5 (diff) | |
parent | a04646c045cab08a9e62b9be8f01ecbb0632d24e (diff) |
Merge tag 'media-v3.17-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media fixes from Mauro Carvalho Chehab:
"some media bug fixes:
- a Kconfig dependency issue
- some fixes for af9033/it913x demod to be more reliable and address
a performance regression
- cx18: fix an oops on devices with tda8290 tuner
- two new USB IDs for af9035
- a couple fixes on smapp driver"
* tag 'media-v3.17-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media:
[media] af9035: new IDs: add support for PCTV 78e and PCTV 79e
[media] af9033: feed clock to RF tuner
[media] it913x: init tuner on attach
[media] af9033: update IT9135 tuner inittabs
[media] Kconfig: do not select SPI bus on sub-driver auto-select
[media] cx18: fix kernel oops with tda8290 tuner
[media] smiapp: Set sub-device owner
[media] smiapp: Fix power count handling
-rw-r--r-- | drivers/media/Kconfig | 1 | ||||
-rw-r--r-- | drivers/media/dvb-core/dvb-usb-ids.h | 2 | ||||
-rw-r--r-- | drivers/media/dvb-frontends/af9033.c | 13 | ||||
-rw-r--r-- | drivers/media/dvb-frontends/af9033_priv.h | 20 | ||||
-rw-r--r-- | drivers/media/i2c/smiapp/smiapp-core.c | 13 | ||||
-rw-r--r-- | drivers/media/pci/cx18/cx18-driver.c | 1 | ||||
-rw-r--r-- | drivers/media/tuners/tuner_it913x.c | 6 | ||||
-rw-r--r-- | drivers/media/usb/dvb-usb-v2/af9035.c | 4 |
8 files changed, 38 insertions, 22 deletions
diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig index f60bad491eb6..3c89fcbc621e 100644 --- a/drivers/media/Kconfig +++ b/drivers/media/Kconfig | |||
@@ -182,7 +182,6 @@ config MEDIA_SUBDRV_AUTOSELECT | |||
182 | depends on HAS_IOMEM | 182 | depends on HAS_IOMEM |
183 | select I2C | 183 | select I2C |
184 | select I2C_MUX | 184 | select I2C_MUX |
185 | select SPI | ||
186 | default y | 185 | default y |
187 | help | 186 | help |
188 | By default, a media driver auto-selects all possible ancillary | 187 | By default, a media driver auto-selects all possible ancillary |
diff --git a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-usb-ids.h index 5135a096bfa6..12ce19c98ded 100644 --- a/drivers/media/dvb-core/dvb-usb-ids.h +++ b/drivers/media/dvb-core/dvb-usb-ids.h | |||
@@ -280,6 +280,8 @@ | |||
280 | #define USB_PID_PCTV_400E 0x020f | 280 | #define USB_PID_PCTV_400E 0x020f |
281 | #define USB_PID_PCTV_450E 0x0222 | 281 | #define USB_PID_PCTV_450E 0x0222 |
282 | #define USB_PID_PCTV_452E 0x021f | 282 | #define USB_PID_PCTV_452E 0x021f |
283 | #define USB_PID_PCTV_78E 0x025a | ||
284 | #define USB_PID_PCTV_79E 0x0262 | ||
283 | #define USB_PID_REALTEK_RTL2831U 0x2831 | 285 | #define USB_PID_REALTEK_RTL2831U 0x2831 |
284 | #define USB_PID_REALTEK_RTL2832U 0x2832 | 286 | #define USB_PID_REALTEK_RTL2832U 0x2832 |
285 | #define USB_PID_TECHNOTREND_CONNECT_S2_3600 0x3007 | 287 | #define USB_PID_TECHNOTREND_CONNECT_S2_3600 0x3007 |
diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c index be4bec2a9640..5c90ea683a7e 100644 --- a/drivers/media/dvb-frontends/af9033.c +++ b/drivers/media/dvb-frontends/af9033.c | |||
@@ -314,6 +314,19 @@ static int af9033_init(struct dvb_frontend *fe) | |||
314 | goto err; | 314 | goto err; |
315 | } | 315 | } |
316 | 316 | ||
317 | /* feed clock to RF tuner */ | ||
318 | switch (state->cfg.tuner) { | ||
319 | case AF9033_TUNER_IT9135_38: | ||
320 | case AF9033_TUNER_IT9135_51: | ||
321 | case AF9033_TUNER_IT9135_52: | ||
322 | case AF9033_TUNER_IT9135_60: | ||
323 | case AF9033_TUNER_IT9135_61: | ||
324 | case AF9033_TUNER_IT9135_62: | ||
325 | ret = af9033_wr_reg(state, 0x80fba8, 0x00); | ||
326 | if (ret < 0) | ||
327 | goto err; | ||
328 | } | ||
329 | |||
317 | /* settings for TS interface */ | 330 | /* settings for TS interface */ |
318 | if (state->cfg.ts_mode == AF9033_TS_MODE_USB) { | 331 | if (state->cfg.ts_mode == AF9033_TS_MODE_USB) { |
319 | ret = af9033_wr_reg_mask(state, 0x80f9a5, 0x00, 0x01); | 332 | ret = af9033_wr_reg_mask(state, 0x80f9a5, 0x00, 0x01); |
diff --git a/drivers/media/dvb-frontends/af9033_priv.h b/drivers/media/dvb-frontends/af9033_priv.h index fc2ad581e302..ded7b67d7526 100644 --- a/drivers/media/dvb-frontends/af9033_priv.h +++ b/drivers/media/dvb-frontends/af9033_priv.h | |||
@@ -1418,7 +1418,7 @@ static const struct reg_val tuner_init_it9135_60[] = { | |||
1418 | { 0x800068, 0x0a }, | 1418 | { 0x800068, 0x0a }, |
1419 | { 0x80006a, 0x03 }, | 1419 | { 0x80006a, 0x03 }, |
1420 | { 0x800070, 0x0a }, | 1420 | { 0x800070, 0x0a }, |
1421 | { 0x800071, 0x05 }, | 1421 | { 0x800071, 0x0a }, |
1422 | { 0x800072, 0x02 }, | 1422 | { 0x800072, 0x02 }, |
1423 | { 0x800075, 0x8c }, | 1423 | { 0x800075, 0x8c }, |
1424 | { 0x800076, 0x8c }, | 1424 | { 0x800076, 0x8c }, |
@@ -1484,7 +1484,6 @@ static const struct reg_val tuner_init_it9135_60[] = { | |||
1484 | { 0x800104, 0x02 }, | 1484 | { 0x800104, 0x02 }, |
1485 | { 0x800105, 0xbe }, | 1485 | { 0x800105, 0xbe }, |
1486 | { 0x800106, 0x00 }, | 1486 | { 0x800106, 0x00 }, |
1487 | { 0x800109, 0x02 }, | ||
1488 | { 0x800115, 0x0a }, | 1487 | { 0x800115, 0x0a }, |
1489 | { 0x800116, 0x03 }, | 1488 | { 0x800116, 0x03 }, |
1490 | { 0x80011a, 0xbe }, | 1489 | { 0x80011a, 0xbe }, |
@@ -1510,7 +1509,6 @@ static const struct reg_val tuner_init_it9135_60[] = { | |||
1510 | { 0x80014b, 0x8c }, | 1509 | { 0x80014b, 0x8c }, |
1511 | { 0x80014d, 0xac }, | 1510 | { 0x80014d, 0xac }, |
1512 | { 0x80014e, 0xc6 }, | 1511 | { 0x80014e, 0xc6 }, |
1513 | { 0x80014f, 0x03 }, | ||
1514 | { 0x800151, 0x1e }, | 1512 | { 0x800151, 0x1e }, |
1515 | { 0x800153, 0xbc }, | 1513 | { 0x800153, 0xbc }, |
1516 | { 0x800178, 0x09 }, | 1514 | { 0x800178, 0x09 }, |
@@ -1522,9 +1520,10 @@ static const struct reg_val tuner_init_it9135_60[] = { | |||
1522 | { 0x80018d, 0x5f }, | 1520 | { 0x80018d, 0x5f }, |
1523 | { 0x80018f, 0xa0 }, | 1521 | { 0x80018f, 0xa0 }, |
1524 | { 0x800190, 0x5a }, | 1522 | { 0x800190, 0x5a }, |
1525 | { 0x80ed02, 0xff }, | 1523 | { 0x800191, 0x00 }, |
1526 | { 0x80ee42, 0xff }, | 1524 | { 0x80ed02, 0x40 }, |
1527 | { 0x80ee82, 0xff }, | 1525 | { 0x80ee42, 0x40 }, |
1526 | { 0x80ee82, 0x40 }, | ||
1528 | { 0x80f000, 0x0f }, | 1527 | { 0x80f000, 0x0f }, |
1529 | { 0x80f01f, 0x8c }, | 1528 | { 0x80f01f, 0x8c }, |
1530 | { 0x80f020, 0x00 }, | 1529 | { 0x80f020, 0x00 }, |
@@ -1699,7 +1698,6 @@ static const struct reg_val tuner_init_it9135_61[] = { | |||
1699 | { 0x800104, 0x02 }, | 1698 | { 0x800104, 0x02 }, |
1700 | { 0x800105, 0xc8 }, | 1699 | { 0x800105, 0xc8 }, |
1701 | { 0x800106, 0x00 }, | 1700 | { 0x800106, 0x00 }, |
1702 | { 0x800109, 0x02 }, | ||
1703 | { 0x800115, 0x0a }, | 1701 | { 0x800115, 0x0a }, |
1704 | { 0x800116, 0x03 }, | 1702 | { 0x800116, 0x03 }, |
1705 | { 0x80011a, 0xc6 }, | 1703 | { 0x80011a, 0xc6 }, |
@@ -1725,7 +1723,6 @@ static const struct reg_val tuner_init_it9135_61[] = { | |||
1725 | { 0x80014b, 0x8c }, | 1723 | { 0x80014b, 0x8c }, |
1726 | { 0x80014d, 0xa8 }, | 1724 | { 0x80014d, 0xa8 }, |
1727 | { 0x80014e, 0xc6 }, | 1725 | { 0x80014e, 0xc6 }, |
1728 | { 0x80014f, 0x03 }, | ||
1729 | { 0x800151, 0x28 }, | 1726 | { 0x800151, 0x28 }, |
1730 | { 0x800153, 0xcc }, | 1727 | { 0x800153, 0xcc }, |
1731 | { 0x800178, 0x09 }, | 1728 | { 0x800178, 0x09 }, |
@@ -1737,9 +1734,10 @@ static const struct reg_val tuner_init_it9135_61[] = { | |||
1737 | { 0x80018d, 0x5f }, | 1734 | { 0x80018d, 0x5f }, |
1738 | { 0x80018f, 0xfb }, | 1735 | { 0x80018f, 0xfb }, |
1739 | { 0x800190, 0x5c }, | 1736 | { 0x800190, 0x5c }, |
1740 | { 0x80ed02, 0xff }, | 1737 | { 0x800191, 0x00 }, |
1741 | { 0x80ee42, 0xff }, | 1738 | { 0x80ed02, 0x40 }, |
1742 | { 0x80ee82, 0xff }, | 1739 | { 0x80ee42, 0x40 }, |
1740 | { 0x80ee82, 0x40 }, | ||
1743 | { 0x80f000, 0x0f }, | 1741 | { 0x80f000, 0x0f }, |
1744 | { 0x80f01f, 0x8c }, | 1742 | { 0x80f01f, 0x8c }, |
1745 | { 0x80f020, 0x00 }, | 1743 | { 0x80f020, 0x00 }, |
diff --git a/drivers/media/i2c/smiapp/smiapp-core.c b/drivers/media/i2c/smiapp/smiapp-core.c index 1eaf975d3612..62acb10630f9 100644 --- a/drivers/media/i2c/smiapp/smiapp-core.c +++ b/drivers/media/i2c/smiapp/smiapp-core.c | |||
@@ -1282,19 +1282,12 @@ static int smiapp_set_power(struct v4l2_subdev *subdev, int on) | |||
1282 | 1282 | ||
1283 | mutex_lock(&sensor->power_mutex); | 1283 | mutex_lock(&sensor->power_mutex); |
1284 | 1284 | ||
1285 | /* | 1285 | if (on && !sensor->power_count) { |
1286 | * If the power count is modified from 0 to != 0 or from != 0 | ||
1287 | * to 0, update the power state. | ||
1288 | */ | ||
1289 | if (!sensor->power_count == !on) | ||
1290 | goto out; | ||
1291 | |||
1292 | if (on) { | ||
1293 | /* Power on and perform initialisation. */ | 1286 | /* Power on and perform initialisation. */ |
1294 | ret = smiapp_power_on(sensor); | 1287 | ret = smiapp_power_on(sensor); |
1295 | if (ret < 0) | 1288 | if (ret < 0) |
1296 | goto out; | 1289 | goto out; |
1297 | } else { | 1290 | } else if (!on && sensor->power_count == 1) { |
1298 | smiapp_power_off(sensor); | 1291 | smiapp_power_off(sensor); |
1299 | } | 1292 | } |
1300 | 1293 | ||
@@ -2572,7 +2565,7 @@ static int smiapp_registered(struct v4l2_subdev *subdev) | |||
2572 | 2565 | ||
2573 | this->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; | 2566 | this->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; |
2574 | this->sd.internal_ops = &smiapp_internal_ops; | 2567 | this->sd.internal_ops = &smiapp_internal_ops; |
2575 | this->sd.owner = NULL; | 2568 | this->sd.owner = THIS_MODULE; |
2576 | v4l2_set_subdevdata(&this->sd, client); | 2569 | v4l2_set_subdevdata(&this->sd, client); |
2577 | 2570 | ||
2578 | rval = media_entity_init(&this->sd.entity, | 2571 | rval = media_entity_init(&this->sd.entity, |
diff --git a/drivers/media/pci/cx18/cx18-driver.c b/drivers/media/pci/cx18/cx18-driver.c index 716bdc57fac6..83f5074706f9 100644 --- a/drivers/media/pci/cx18/cx18-driver.c +++ b/drivers/media/pci/cx18/cx18-driver.c | |||
@@ -1091,6 +1091,7 @@ static int cx18_probe(struct pci_dev *pci_dev, | |||
1091 | setup.addr = ADDR_UNSET; | 1091 | setup.addr = ADDR_UNSET; |
1092 | setup.type = cx->options.tuner; | 1092 | setup.type = cx->options.tuner; |
1093 | setup.mode_mask = T_ANALOG_TV; /* matches TV tuners */ | 1093 | setup.mode_mask = T_ANALOG_TV; /* matches TV tuners */ |
1094 | setup.config = NULL; | ||
1094 | if (cx->options.radio > 0) | 1095 | if (cx->options.radio > 0) |
1095 | setup.mode_mask |= T_RADIO; | 1096 | setup.mode_mask |= T_RADIO; |
1096 | setup.tuner_callback = (setup.type == TUNER_XC2028) ? | 1097 | setup.tuner_callback = (setup.type == TUNER_XC2028) ? |
diff --git a/drivers/media/tuners/tuner_it913x.c b/drivers/media/tuners/tuner_it913x.c index 6f30d7e535b8..3d83c425bccf 100644 --- a/drivers/media/tuners/tuner_it913x.c +++ b/drivers/media/tuners/tuner_it913x.c | |||
@@ -396,6 +396,7 @@ struct dvb_frontend *it913x_attach(struct dvb_frontend *fe, | |||
396 | struct i2c_adapter *i2c_adap, u8 i2c_addr, u8 config) | 396 | struct i2c_adapter *i2c_adap, u8 i2c_addr, u8 config) |
397 | { | 397 | { |
398 | struct it913x_state *state = NULL; | 398 | struct it913x_state *state = NULL; |
399 | int ret; | ||
399 | 400 | ||
400 | /* allocate memory for the internal state */ | 401 | /* allocate memory for the internal state */ |
401 | state = kzalloc(sizeof(struct it913x_state), GFP_KERNEL); | 402 | state = kzalloc(sizeof(struct it913x_state), GFP_KERNEL); |
@@ -425,6 +426,11 @@ struct dvb_frontend *it913x_attach(struct dvb_frontend *fe, | |||
425 | state->tuner_type = config; | 426 | state->tuner_type = config; |
426 | state->firmware_ver = 1; | 427 | state->firmware_ver = 1; |
427 | 428 | ||
429 | /* tuner RF initial */ | ||
430 | ret = it913x_wr_reg(state, PRO_DMOD, 0xec4c, 0x68); | ||
431 | if (ret < 0) | ||
432 | goto error; | ||
433 | |||
428 | fe->tuner_priv = state; | 434 | fe->tuner_priv = state; |
429 | memcpy(&fe->ops.tuner_ops, &it913x_tuner_ops, | 435 | memcpy(&fe->ops.tuner_ops, &it913x_tuner_ops, |
430 | sizeof(struct dvb_tuner_ops)); | 436 | sizeof(struct dvb_tuner_ops)); |
diff --git a/drivers/media/usb/dvb-usb-v2/af9035.c b/drivers/media/usb/dvb-usb-v2/af9035.c index 75ec1c659fdd..c82beac0e0cb 100644 --- a/drivers/media/usb/dvb-usb-v2/af9035.c +++ b/drivers/media/usb/dvb-usb-v2/af9035.c | |||
@@ -1575,6 +1575,10 @@ static const struct usb_device_id af9035_id_table[] = { | |||
1575 | &af9035_props, "Leadtek WinFast DTV Dongle Dual", NULL) }, | 1575 | &af9035_props, "Leadtek WinFast DTV Dongle Dual", NULL) }, |
1576 | { DVB_USB_DEVICE(USB_VID_HAUPPAUGE, 0xf900, | 1576 | { DVB_USB_DEVICE(USB_VID_HAUPPAUGE, 0xf900, |
1577 | &af9035_props, "Hauppauge WinTV-MiniStick 2", NULL) }, | 1577 | &af9035_props, "Hauppauge WinTV-MiniStick 2", NULL) }, |
1578 | { DVB_USB_DEVICE(USB_VID_PCTV, USB_PID_PCTV_78E, | ||
1579 | &af9035_props, "PCTV 78e", RC_MAP_IT913X_V1) }, | ||
1580 | { DVB_USB_DEVICE(USB_VID_PCTV, USB_PID_PCTV_79E, | ||
1581 | &af9035_props, "PCTV 79e", RC_MAP_IT913X_V2) }, | ||
1578 | { } | 1582 | { } |
1579 | }; | 1583 | }; |
1580 | MODULE_DEVICE_TABLE(usb, af9035_id_table); | 1584 | MODULE_DEVICE_TABLE(usb, af9035_id_table); |