aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb-frontends/rtl2832.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb-frontends/rtl2832.c')
-rw-r--r--drivers/media/dvb-frontends/rtl2832.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/drivers/media/dvb-frontends/rtl2832.c b/drivers/media/dvb-frontends/rtl2832.c
index bfb6beedd40b..c16c69e9d26c 100644
--- a/drivers/media/dvb-frontends/rtl2832.c
+++ b/drivers/media/dvb-frontends/rtl2832.c
@@ -947,6 +947,8 @@ static int rtl2832_slave_ts_ctrl(struct i2c_client *client, bool enable)
947 goto err; 947 goto err;
948 } 948 }
949 949
950 dev->slave_ts = enable;
951
950 return 0; 952 return 0;
951err: 953err:
952 dev_dbg(&client->dev, "failed=%d\n", ret); 954 dev_dbg(&client->dev, "failed=%d\n", ret);
@@ -960,7 +962,7 @@ static int rtl2832_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
960 int ret; 962 int ret;
961 u8 u8tmp; 963 u8 u8tmp;
962 964
963 dev_dbg(&client->dev, "onoff=%d\n", onoff); 965 dev_dbg(&client->dev, "onoff=%d, slave_ts=%d\n", onoff, dev->slave_ts);
964 966
965 /* enable / disable PID filter */ 967 /* enable / disable PID filter */
966 if (onoff) 968 if (onoff)
@@ -968,7 +970,10 @@ static int rtl2832_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
968 else 970 else
969 u8tmp = 0x00; 971 u8tmp = 0x00;
970 972
971 ret = regmap_update_bits(dev->regmap, 0x061, 0xc0, u8tmp); 973 if (dev->slave_ts)
974 ret = regmap_update_bits(dev->regmap, 0x021, 0xc0, u8tmp);
975 else
976 ret = regmap_update_bits(dev->regmap, 0x061, 0xc0, u8tmp);
972 if (ret) 977 if (ret)
973 goto err; 978 goto err;
974 979
@@ -986,8 +991,8 @@ static int rtl2832_pid_filter(struct dvb_frontend *fe, u8 index, u16 pid,
986 int ret; 991 int ret;
987 u8 buf[4]; 992 u8 buf[4];
988 993
989 dev_dbg(&client->dev, "index=%d pid=%04x onoff=%d\n", 994 dev_dbg(&client->dev, "index=%d pid=%04x onoff=%d slave_ts=%d\n",
990 index, pid, onoff); 995 index, pid, onoff, dev->slave_ts);
991 996
992 /* skip invalid PIDs (0x2000) */ 997 /* skip invalid PIDs (0x2000) */
993 if (pid > 0x1fff || index > 32) 998 if (pid > 0x1fff || index > 32)
@@ -1003,14 +1008,22 @@ static int rtl2832_pid_filter(struct dvb_frontend *fe, u8 index, u16 pid,
1003 buf[1] = (dev->filters >> 8) & 0xff; 1008 buf[1] = (dev->filters >> 8) & 0xff;
1004 buf[2] = (dev->filters >> 16) & 0xff; 1009 buf[2] = (dev->filters >> 16) & 0xff;
1005 buf[3] = (dev->filters >> 24) & 0xff; 1010 buf[3] = (dev->filters >> 24) & 0xff;
1006 ret = regmap_bulk_write(dev->regmap, 0x062, buf, 4); 1011
1012 if (dev->slave_ts)
1013 ret = regmap_bulk_write(dev->regmap, 0x022, buf, 4);
1014 else
1015 ret = regmap_bulk_write(dev->regmap, 0x062, buf, 4);
1007 if (ret) 1016 if (ret)
1008 goto err; 1017 goto err;
1009 1018
1010 /* add PID */ 1019 /* add PID */
1011 buf[0] = (pid >> 8) & 0xff; 1020 buf[0] = (pid >> 8) & 0xff;
1012 buf[1] = (pid >> 0) & 0xff; 1021 buf[1] = (pid >> 0) & 0xff;
1013 ret = regmap_bulk_write(dev->regmap, 0x066 + 2 * index, buf, 2); 1022
1023 if (dev->slave_ts)
1024 ret = regmap_bulk_write(dev->regmap, 0x026 + 2 * index, buf, 2);
1025 else
1026 ret = regmap_bulk_write(dev->regmap, 0x066 + 2 * index, buf, 2);
1014 if (ret) 1027 if (ret)
1015 goto err; 1028 goto err;
1016 1029