diff options
author | Antti Palosaari <crope@iki.fi> | 2012-09-16 21:26:56 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-09-27 03:26:59 -0400 |
commit | 51639be3b39b058d9f80cfd68c52887c7b96eb41 (patch) | |
tree | 211069f9b1f955692048c2ae0d183c0cb4e0d445 | |
parent | 69504793dfb42bdd0e647c948047b71e9c3307f2 (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.c | 65 |
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 | ||
586 | static 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 | |||
625 | err: | ||
626 | dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret); | ||
627 | |||
628 | return ret; | ||
629 | } | ||
630 | |||
631 | |||
586 | static int af9035_fc0011_tuner_callback(struct dvb_usb_device *d, | 632 | static 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); |