diff options
Diffstat (limited to 'drivers/media/dvb-frontends/rtl2832.c')
-rw-r--r-- | drivers/media/dvb-frontends/rtl2832.c | 25 |
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; |
951 | err: | 953 | err: |
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 | ||