aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2012-09-16 21:26:56 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-09-27 03:26:59 -0400
commit51639be3b39b058d9f80cfd68c52887c7b96eb41 (patch)
tree211069f9b1f955692048c2ae0d183c0cb4e0d445
parent69504793dfb42bdd0e647c948047b71e9c3307f2 (diff)
[media] af9035: implement TUA9001 GPIOs correctly
Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/usb/dvb-usb-v2/af9035.c65
1 files changed, 48 insertions, 17 deletions
diff --git a/drivers/media/usb/dvb-usb-v2/af9035.c b/drivers/media/usb/dvb-usb-v2/af9035.c
index 7d599a999619..89a3bec5cb92 100644
--- a/drivers/media/usb/dvb-usb-v2/af9035.c
+++ b/drivers/media/usb/dvb-usb-v2/af9035.c
@@ -583,6 +583,52 @@ err:
583 return ret; 583 return ret;
584} 584}
585 585
586static int af9035_tua9001_tuner_callback(struct dvb_usb_device *d,
587 int cmd, int arg)
588{
589 int ret;
590 u8 val;
591
592 dev_dbg(&d->udev->dev, "%s: cmd=%d arg=%d\n", __func__, cmd, arg);
593
594 /*
595 * CEN always enabled by hardware wiring
596 * RESETN GPIOT3
597 * RXEN GPIOT2
598 */
599
600 switch (cmd) {
601 case TUA9001_CMD_RESETN:
602 if (arg)
603 val = 0x00;
604 else
605 val = 0x01;
606
607 ret = af9035_wr_reg_mask(d, 0x00d8e7, val, 0x01);
608 if (ret < 0)
609 goto err;
610 break;
611 case TUA9001_CMD_RXEN:
612 if (arg)
613 val = 0x01;
614 else
615 val = 0x00;
616
617 ret = af9035_wr_reg_mask(d, 0x00d8eb, val, 0x01);
618 if (ret < 0)
619 goto err;
620 break;
621 }
622
623 return 0;
624
625err:
626 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
627
628 return ret;
629}
630
631
586static int af9035_fc0011_tuner_callback(struct dvb_usb_device *d, 632static int af9035_fc0011_tuner_callback(struct dvb_usb_device *d,
587 int cmd, int arg) 633 int cmd, int arg)
588{ 634{
@@ -655,6 +701,8 @@ static int af9035_tuner_callback(struct dvb_usb_device *d, int cmd, int arg)
655 switch (state->af9033_config[0].tuner) { 701 switch (state->af9033_config[0].tuner) {
656 case AF9033_TUNER_FC0011: 702 case AF9033_TUNER_FC0011:
657 return af9035_fc0011_tuner_callback(d, cmd, arg); 703 return af9035_fc0011_tuner_callback(d, cmd, arg);
704 case AF9033_TUNER_TUA9001:
705 return af9035_tua9001_tuner_callback(d, cmd, arg);
658 default: 706 default:
659 break; 707 break;
660 } 708 }
@@ -779,23 +827,6 @@ static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
779 if (ret < 0) 827 if (ret < 0)
780 goto err; 828 goto err;
781 829
782 /* reset tuner */
783 ret = af9035_wr_reg_mask(d, 0x00d8e7, 0x00, 0x01);
784 if (ret < 0)
785 goto err;
786
787 usleep_range(2000, 20000);
788
789 ret = af9035_wr_reg_mask(d, 0x00d8e7, 0x01, 0x01);
790 if (ret < 0)
791 goto err;
792
793 /* activate tuner RX */
794 /* TODO: use callback for TUA9001 RXEN */
795 ret = af9035_wr_reg_mask(d, 0x00d8eb, 0x01, 0x01);
796 if (ret < 0)
797 goto err;
798
799 /* attach tuner */ 830 /* attach tuner */
800 fe = dvb_attach(tua9001_attach, adap->fe[0], 831 fe = dvb_attach(tua9001_attach, adap->fe[0],
801 &d->i2c_adap, &af9035_tua9001_config); 832 &d->i2c_adap, &af9035_tua9001_config);