aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2012-10-03 03:28:56 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-10-07 09:27:49 -0400
commit33eebec55c94c755f5f4785e46a72af9238999e2 (patch)
tree65fe0bd28133e7637cd1eac75787dd26d0cd0148
parentd92462401dde1effa04a51d0a15000e6246d2a43 (diff)
[media] dvb: LNA implementation changes
* use dvb property cache * implement get (thus API minor++) * PCTV 290e: 1=LNA ON, all the other values LNA OFF Also fix PCTV 290e LNA comment, it is disabled by default Hans and Mauro proposed use of cache implementation of get as they were planning to extend LNA usage for analog side too. Reported-by: Hans Verkuil <hverkuil@xs4all.nl> Reported-by: Mauro Carvalho Chehab <mchehab@redhat.com> Signed-off-by: Antti Palosaari <crope@iki.fi> Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/dvb-core/dvb_frontend.c18
-rw-r--r--drivers/media/dvb-core/dvb_frontend.h4
-rw-r--r--drivers/media/usb/em28xx/em28xx-dvb.c13
-rw-r--r--include/linux/dvb/version.h2
4 files changed, 25 insertions, 12 deletions
diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c
index 41af996c413..7e92793260f 100644
--- a/drivers/media/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb-core/dvb_frontend.c
@@ -966,6 +966,8 @@ static int dvb_frontend_clear_cache(struct dvb_frontend *fe)
966 break; 966 break;
967 } 967 }
968 968
969 c->lna = LNA_AUTO;
970
969 return 0; 971 return 0;
970} 972}
971 973
@@ -1054,6 +1056,8 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = {
1054 _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_B, 0, 0), 1056 _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_B, 0, 0),
1055 _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_C, 0, 0), 1057 _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_C, 0, 0),
1056 _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_D, 0, 0), 1058 _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_D, 0, 0),
1059
1060 _DTV_CMD(DTV_LNA, 0, 0),
1057}; 1061};
1058 1062
1059static void dtv_property_dump(struct dvb_frontend *fe, struct dtv_property *tvp) 1063static void dtv_property_dump(struct dvb_frontend *fe, struct dtv_property *tvp)
@@ -1440,6 +1444,10 @@ static int dtv_property_process_get(struct dvb_frontend *fe,
1440 tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_d; 1444 tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_d;
1441 break; 1445 break;
1442 1446
1447 case DTV_LNA:
1448 tvp->u.data = c->lna;
1449 break;
1450
1443 default: 1451 default:
1444 return -EINVAL; 1452 return -EINVAL;
1445 } 1453 }
@@ -1731,10 +1739,6 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
1731 case DTV_INTERLEAVING: 1739 case DTV_INTERLEAVING:
1732 c->interleaving = tvp->u.data; 1740 c->interleaving = tvp->u.data;
1733 break; 1741 break;
1734 case DTV_LNA:
1735 if (fe->ops.set_lna)
1736 r = fe->ops.set_lna(fe, tvp->u.data);
1737 break;
1738 1742
1739 /* ISDB-T Support here */ 1743 /* ISDB-T Support here */
1740 case DTV_ISDBT_PARTIAL_RECEPTION: 1744 case DTV_ISDBT_PARTIAL_RECEPTION:
@@ -1806,6 +1810,12 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
1806 fe->dtv_property_cache.atscmh_rs_frame_ensemble = tvp->u.data; 1810 fe->dtv_property_cache.atscmh_rs_frame_ensemble = tvp->u.data;
1807 break; 1811 break;
1808 1812
1813 case DTV_LNA:
1814 c->lna = tvp->u.data;
1815 if (fe->ops.set_lna)
1816 r = fe->ops.set_lna(fe);
1817 break;
1818
1809 default: 1819 default:
1810 return -EINVAL; 1820 return -EINVAL;
1811 } 1821 }
diff --git a/drivers/media/dvb-core/dvb_frontend.h b/drivers/media/dvb-core/dvb_frontend.h
index 44a445cee74..97112cd88a1 100644
--- a/drivers/media/dvb-core/dvb_frontend.h
+++ b/drivers/media/dvb-core/dvb_frontend.h
@@ -303,7 +303,7 @@ struct dvb_frontend_ops {
303 int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd); 303 int (*dishnetwork_send_legacy_command)(struct dvb_frontend* fe, unsigned long cmd);
304 int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable); 304 int (*i2c_gate_ctrl)(struct dvb_frontend* fe, int enable);
305 int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire); 305 int (*ts_bus_ctrl)(struct dvb_frontend* fe, int acquire);
306 int (*set_lna)(struct dvb_frontend *, int); 306 int (*set_lna)(struct dvb_frontend *);
307 307
308 /* These callbacks are for devices that implement their own 308 /* These callbacks are for devices that implement their own
309 * tuning algorithms, rather than a simple swzigzag 309 * tuning algorithms, rather than a simple swzigzag
@@ -391,6 +391,8 @@ struct dtv_frontend_properties {
391 u8 atscmh_sccc_code_mode_b; 391 u8 atscmh_sccc_code_mode_b;
392 u8 atscmh_sccc_code_mode_c; 392 u8 atscmh_sccc_code_mode_c;
393 u8 atscmh_sccc_code_mode_d; 393 u8 atscmh_sccc_code_mode_d;
394
395 u32 lna;
394}; 396};
395 397
396struct dvb_frontend { 398struct dvb_frontend {
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c
index 913e5227897..13ae821949e 100644
--- a/drivers/media/usb/em28xx/em28xx-dvb.c
+++ b/drivers/media/usb/em28xx/em28xx-dvb.c
@@ -574,18 +574,19 @@ static void pctv_520e_init(struct em28xx *dev)
574 i2c_master_send(&dev->i2c_client, regs[i].r, regs[i].len); 574 i2c_master_send(&dev->i2c_client, regs[i].r, regs[i].len);
575}; 575};
576 576
577static int em28xx_pctv_290e_set_lna(struct dvb_frontend *fe, int val) 577static int em28xx_pctv_290e_set_lna(struct dvb_frontend *fe)
578{ 578{
579 struct dtv_frontend_properties *c = &fe->dtv_property_cache;
579 struct em28xx *dev = fe->dvb->priv; 580 struct em28xx *dev = fe->dvb->priv;
580#ifdef CONFIG_GPIOLIB 581#ifdef CONFIG_GPIOLIB
581 struct em28xx_dvb *dvb = dev->dvb; 582 struct em28xx_dvb *dvb = dev->dvb;
582 int ret; 583 int ret;
583 unsigned long flags; 584 unsigned long flags;
584 585
585 if (val) 586 if (c->lna == 1)
586 flags = GPIOF_OUT_INIT_LOW; 587 flags = GPIOF_OUT_INIT_HIGH; /* enable LNA */
587 else 588 else
588 flags = GPIOF_OUT_INIT_HIGH; 589 flags = GPIOF_OUT_INIT_LOW; /* disable LNA */
589 590
590 ret = gpio_request_one(dvb->lna_gpio, flags, NULL); 591 ret = gpio_request_one(dvb->lna_gpio, flags, NULL);
591 if (ret) 592 if (ret)
@@ -595,8 +596,8 @@ static int em28xx_pctv_290e_set_lna(struct dvb_frontend *fe, int val)
595 596
596 return ret; 597 return ret;
597#else 598#else
598 dev_warn(&dev->udev->dev, "%s: LNA control is disabled\n", 599 dev_warn(&dev->udev->dev, "%s: LNA control is disabled (lna=%u)\n",
599 KBUILD_MODNAME); 600 KBUILD_MODNAME, c->lna);
600 return 0; 601 return 0;
601#endif 602#endif
602} 603}
diff --git a/include/linux/dvb/version.h b/include/linux/dvb/version.h
index 20e5eac2ffd..827cce7e33e 100644
--- a/include/linux/dvb/version.h
+++ b/include/linux/dvb/version.h
@@ -24,6 +24,6 @@
24#define _DVBVERSION_H_ 24#define _DVBVERSION_H_
25 25
26#define DVB_API_VERSION 5 26#define DVB_API_VERSION 5
27#define DVB_API_VERSION_MINOR 8 27#define DVB_API_VERSION_MINOR 9
28 28
29#endif /*_DVBVERSION_H_*/ 29#endif /*_DVBVERSION_H_*/