aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntti Palosaari <crope@iki.fi>2014-08-31 19:57:05 -0400
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2014-09-21 18:37:33 -0400
commitf5b00a767006e47f9c32099f0797068a7a3e4c5c (patch)
treed35c687d37592e704d82beb8cdc9057aadce39c6
parent09611caad158f868993261c7d9277a9a331f8ea3 (diff)
[media] af9033: convert to I2C client
Convert driver to kernel I2C model. Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
-rw-r--r--drivers/media/dvb-frontends/af9033.c236
-rw-r--r--drivers/media/dvb-frontends/af9033.h44
-rw-r--r--drivers/media/usb/dvb-usb-v2/af9035.c50
-rw-r--r--drivers/media/usb/dvb-usb-v2/af9035.h2
4 files changed, 183 insertions, 149 deletions
diff --git a/drivers/media/dvb-frontends/af9033.c b/drivers/media/dvb-frontends/af9033.c
index 43b7335f27e4..c40ae49effb5 100644
--- a/drivers/media/dvb-frontends/af9033.c
+++ b/drivers/media/dvb-frontends/af9033.c
@@ -25,7 +25,7 @@
25#define MAX_XFER_SIZE 64 25#define MAX_XFER_SIZE 64
26 26
27struct af9033_dev { 27struct af9033_dev {
28 struct i2c_adapter *i2c; 28 struct i2c_client *client;
29 struct dvb_frontend fe; 29 struct dvb_frontend fe;
30 struct af9033_config cfg; 30 struct af9033_config cfg;
31 31
@@ -46,7 +46,7 @@ static int af9033_wr_regs(struct af9033_dev *dev, u32 reg, const u8 *val,
46 u8 buf[MAX_XFER_SIZE]; 46 u8 buf[MAX_XFER_SIZE];
47 struct i2c_msg msg[1] = { 47 struct i2c_msg msg[1] = {
48 { 48 {
49 .addr = dev->cfg.i2c_addr, 49 .addr = dev->client->addr,
50 .flags = 0, 50 .flags = 0,
51 .len = 3 + len, 51 .len = 3 + len,
52 .buf = buf, 52 .buf = buf,
@@ -54,7 +54,7 @@ static int af9033_wr_regs(struct af9033_dev *dev, u32 reg, const u8 *val,
54 }; 54 };
55 55
56 if (3 + len > sizeof(buf)) { 56 if (3 + len > sizeof(buf)) {
57 dev_warn(&dev->i2c->dev, 57 dev_warn(&dev->client->dev,
58 "%s: i2c wr reg=%04x: len=%d is too big!\n", 58 "%s: i2c wr reg=%04x: len=%d is too big!\n",
59 KBUILD_MODNAME, reg, len); 59 KBUILD_MODNAME, reg, len);
60 return -EINVAL; 60 return -EINVAL;
@@ -65,11 +65,11 @@ static int af9033_wr_regs(struct af9033_dev *dev, u32 reg, const u8 *val,
65 buf[2] = (reg >> 0) & 0xff; 65 buf[2] = (reg >> 0) & 0xff;
66 memcpy(&buf[3], val, len); 66 memcpy(&buf[3], val, len);
67 67
68 ret = i2c_transfer(dev->i2c, msg, 1); 68 ret = i2c_transfer(dev->client->adapter, msg, 1);
69 if (ret == 1) { 69 if (ret == 1) {
70 ret = 0; 70 ret = 0;
71 } else { 71 } else {
72 dev_warn(&dev->i2c->dev, 72 dev_warn(&dev->client->dev,
73 "%s: i2c wr failed=%d reg=%06x len=%d\n", 73 "%s: i2c wr failed=%d reg=%06x len=%d\n",
74 KBUILD_MODNAME, ret, reg, len); 74 KBUILD_MODNAME, ret, reg, len);
75 ret = -EREMOTEIO; 75 ret = -EREMOTEIO;
@@ -86,23 +86,23 @@ static int af9033_rd_regs(struct af9033_dev *dev, u32 reg, u8 *val, int len)
86 (reg >> 0) & 0xff }; 86 (reg >> 0) & 0xff };
87 struct i2c_msg msg[2] = { 87 struct i2c_msg msg[2] = {
88 { 88 {
89 .addr = dev->cfg.i2c_addr, 89 .addr = dev->client->addr,
90 .flags = 0, 90 .flags = 0,
91 .len = sizeof(buf), 91 .len = sizeof(buf),
92 .buf = buf 92 .buf = buf
93 }, { 93 }, {
94 .addr = dev->cfg.i2c_addr, 94 .addr = dev->client->addr,
95 .flags = I2C_M_RD, 95 .flags = I2C_M_RD,
96 .len = len, 96 .len = len,
97 .buf = val 97 .buf = val
98 } 98 }
99 }; 99 };
100 100
101 ret = i2c_transfer(dev->i2c, msg, 2); 101 ret = i2c_transfer(dev->client->adapter, msg, 2);
102 if (ret == 2) { 102 if (ret == 2) {
103 ret = 0; 103 ret = 0;
104 } else { 104 } else {
105 dev_warn(&dev->i2c->dev, 105 dev_warn(&dev->client->dev,
106 "%s: i2c rd failed=%d reg=%06x len=%d\n", 106 "%s: i2c rd failed=%d reg=%06x len=%d\n",
107 KBUILD_MODNAME, ret, reg, len); 107 KBUILD_MODNAME, ret, reg, len);
108 ret = -EREMOTEIO; 108 ret = -EREMOTEIO;
@@ -176,10 +176,10 @@ static int af9033_wr_reg_val_tab(struct af9033_dev *dev,
176 int ret, i, j; 176 int ret, i, j;
177 u8 buf[1 + MAX_TAB_LEN]; 177 u8 buf[1 + MAX_TAB_LEN];
178 178
179 dev_dbg(&dev->i2c->dev, "%s: tab_len=%d\n", __func__, tab_len); 179 dev_dbg(&dev->client->dev, "%s: tab_len=%d\n", __func__, tab_len);
180 180
181 if (tab_len > sizeof(buf)) { 181 if (tab_len > sizeof(buf)) {
182 dev_warn(&dev->i2c->dev, "%s: tab len %d is too big\n", 182 dev_warn(&dev->client->dev, "%s: tab len %d is too big\n",
183 KBUILD_MODNAME, tab_len); 183 KBUILD_MODNAME, tab_len);
184 return -EINVAL; 184 return -EINVAL;
185 } 185 }
@@ -201,7 +201,7 @@ static int af9033_wr_reg_val_tab(struct af9033_dev *dev,
201 return 0; 201 return 0;
202 202
203err: 203err:
204 dev_dbg(&dev->i2c->dev, "%s: failed=%d\n", __func__, ret); 204 dev_dbg(&dev->client->dev, "%s: failed=%d\n", __func__, ret);
205 205
206 return ret; 206 return ret;
207} 207}
@@ -210,7 +210,7 @@ static u32 af9033_div(struct af9033_dev *dev, u32 a, u32 b, u32 x)
210{ 210{
211 u32 r = 0, c = 0, i; 211 u32 r = 0, c = 0, i;
212 212
213 dev_dbg(&dev->i2c->dev, "%s: a=%d b=%d x=%d\n", __func__, a, b, x); 213 dev_dbg(&dev->client->dev, "%s: a=%d b=%d x=%d\n", __func__, a, b, x);
214 214
215 if (a > b) { 215 if (a > b) {
216 c = a / b; 216 c = a / b;
@@ -227,19 +227,12 @@ static u32 af9033_div(struct af9033_dev *dev, u32 a, u32 b, u32 x)
227 } 227 }
228 r = (c << (u32)x) + r; 228 r = (c << (u32)x) + r;
229 229
230 dev_dbg(&dev->i2c->dev, "%s: a=%d b=%d x=%d r=%d r=%x\n", 230 dev_dbg(&dev->client->dev, "%s: a=%d b=%d x=%d r=%d r=%x\n",
231 __func__, a, b, x, r, r); 231 __func__, a, b, x, r, r);
232 232
233 return r; 233 return r;
234} 234}
235 235
236static void af9033_release(struct dvb_frontend *fe)
237{
238 struct af9033_dev *dev = fe->demodulator_priv;
239
240 kfree(dev);
241}
242
243static int af9033_init(struct dvb_frontend *fe) 236static int af9033_init(struct dvb_frontend *fe)
244{ 237{
245 struct af9033_dev *dev = fe->demodulator_priv; 238 struct af9033_dev *dev = fe->demodulator_priv;
@@ -283,7 +276,7 @@ static int af9033_init(struct dvb_frontend *fe)
283 buf[2] = (clock_cw >> 16) & 0xff; 276 buf[2] = (clock_cw >> 16) & 0xff;
284 buf[3] = (clock_cw >> 24) & 0xff; 277 buf[3] = (clock_cw >> 24) & 0xff;
285 278
286 dev_dbg(&dev->i2c->dev, "%s: clock=%d clock_cw=%08x\n", 279 dev_dbg(&dev->client->dev, "%s: clock=%d clock_cw=%08x\n",
287 __func__, dev->cfg.clock, clock_cw); 280 __func__, dev->cfg.clock, clock_cw);
288 281
289 ret = af9033_wr_regs(dev, 0x800025, buf, 4); 282 ret = af9033_wr_regs(dev, 0x800025, buf, 4);
@@ -301,7 +294,7 @@ static int af9033_init(struct dvb_frontend *fe)
301 buf[1] = (adc_cw >> 8) & 0xff; 294 buf[1] = (adc_cw >> 8) & 0xff;
302 buf[2] = (adc_cw >> 16) & 0xff; 295 buf[2] = (adc_cw >> 16) & 0xff;
303 296
304 dev_dbg(&dev->i2c->dev, "%s: adc=%d adc_cw=%06x\n", 297 dev_dbg(&dev->client->dev, "%s: adc=%d adc_cw=%06x\n",
305 __func__, clock_adc_lut[i].adc, adc_cw); 298 __func__, clock_adc_lut[i].adc, adc_cw);
306 299
307 ret = af9033_wr_regs(dev, 0x80f1cd, buf, 3); 300 ret = af9033_wr_regs(dev, 0x80f1cd, buf, 3);
@@ -343,7 +336,7 @@ static int af9033_init(struct dvb_frontend *fe)
343 } 336 }
344 337
345 /* load OFSM settings */ 338 /* load OFSM settings */
346 dev_dbg(&dev->i2c->dev, "%s: load ofsm settings\n", __func__); 339 dev_dbg(&dev->client->dev, "%s: load ofsm settings\n", __func__);
347 switch (dev->cfg.tuner) { 340 switch (dev->cfg.tuner) {
348 case AF9033_TUNER_IT9135_38: 341 case AF9033_TUNER_IT9135_38:
349 case AF9033_TUNER_IT9135_51: 342 case AF9033_TUNER_IT9135_51:
@@ -368,7 +361,7 @@ static int af9033_init(struct dvb_frontend *fe)
368 goto err; 361 goto err;
369 362
370 /* load tuner specific settings */ 363 /* load tuner specific settings */
371 dev_dbg(&dev->i2c->dev, "%s: load tuner specific settings\n", 364 dev_dbg(&dev->client->dev, "%s: load tuner specific settings\n",
372 __func__); 365 __func__);
373 switch (dev->cfg.tuner) { 366 switch (dev->cfg.tuner) {
374 case AF9033_TUNER_TUA9001: 367 case AF9033_TUNER_TUA9001:
@@ -420,7 +413,7 @@ static int af9033_init(struct dvb_frontend *fe)
420 init = tuner_init_it9135_62; 413 init = tuner_init_it9135_62;
421 break; 414 break;
422 default: 415 default:
423 dev_dbg(&dev->i2c->dev, "%s: unsupported tuner ID=%d\n", 416 dev_dbg(&dev->client->dev, "%s: unsupported tuner ID=%d\n",
424 __func__, dev->cfg.tuner); 417 __func__, dev->cfg.tuner);
425 ret = -ENODEV; 418 ret = -ENODEV;
426 goto err; 419 goto err;
@@ -458,7 +451,7 @@ static int af9033_init(struct dvb_frontend *fe)
458 return 0; 451 return 0;
459 452
460err: 453err:
461 dev_dbg(&dev->i2c->dev, "%s: failed=%d\n", __func__, ret); 454 dev_dbg(&dev->client->dev, "%s: failed=%d\n", __func__, ret);
462 455
463 return ret; 456 return ret;
464} 457}
@@ -485,7 +478,7 @@ static int af9033_sleep(struct dvb_frontend *fe)
485 usleep_range(200, 10000); 478 usleep_range(200, 10000);
486 } 479 }
487 480
488 dev_dbg(&dev->i2c->dev, "%s: loop=%d\n", __func__, i); 481 dev_dbg(&dev->client->dev, "%s: loop=%d\n", __func__, i);
489 482
490 if (i == 0) { 483 if (i == 0) {
491 ret = -ETIMEDOUT; 484 ret = -ETIMEDOUT;
@@ -511,7 +504,7 @@ static int af9033_sleep(struct dvb_frontend *fe)
511 return 0; 504 return 0;
512 505
513err: 506err:
514 dev_dbg(&dev->i2c->dev, "%s: failed=%d\n", __func__, ret); 507 dev_dbg(&dev->client->dev, "%s: failed=%d\n", __func__, ret);
515 508
516 return ret; 509 return ret;
517} 510}
@@ -535,7 +528,7 @@ static int af9033_set_frontend(struct dvb_frontend *fe)
535 u8 tmp, buf[3], bandwidth_reg_val; 528 u8 tmp, buf[3], bandwidth_reg_val;
536 u32 if_frequency, freq_cw, adc_freq; 529 u32 if_frequency, freq_cw, adc_freq;
537 530
538 dev_dbg(&dev->i2c->dev, "%s: frequency=%d bandwidth_hz=%d\n", 531 dev_dbg(&dev->client->dev, "%s: frequency=%d bandwidth_hz=%d\n",
539 __func__, c->frequency, c->bandwidth_hz); 532 __func__, c->frequency, c->bandwidth_hz);
540 533
541 /* check bandwidth */ 534 /* check bandwidth */
@@ -550,7 +543,7 @@ static int af9033_set_frontend(struct dvb_frontend *fe)
550 bandwidth_reg_val = 0x02; 543 bandwidth_reg_val = 0x02;
551 break; 544 break;
552 default: 545 default:
553 dev_dbg(&dev->i2c->dev, "%s: invalid bandwidth_hz\n", 546 dev_dbg(&dev->client->dev, "%s: invalid bandwidth_hz\n",
554 __func__); 547 __func__);
555 ret = -EINVAL; 548 ret = -EINVAL;
556 goto err; 549 goto err;
@@ -653,7 +646,7 @@ static int af9033_set_frontend(struct dvb_frontend *fe)
653 return 0; 646 return 0;
654 647
655err: 648err:
656 dev_dbg(&dev->i2c->dev, "%s: failed=%d\n", __func__, ret); 649 dev_dbg(&dev->client->dev, "%s: failed=%d\n", __func__, ret);
657 650
658 return ret; 651 return ret;
659} 652}
@@ -665,7 +658,7 @@ static int af9033_get_frontend(struct dvb_frontend *fe)
665 int ret; 658 int ret;
666 u8 buf[8]; 659 u8 buf[8];
667 660
668 dev_dbg(&dev->i2c->dev, "%s:\n", __func__); 661 dev_dbg(&dev->client->dev, "%s:\n", __func__);
669 662
670 /* read all needed registers */ 663 /* read all needed registers */
671 ret = af9033_rd_regs(dev, 0x80f900, buf, sizeof(buf)); 664 ret = af9033_rd_regs(dev, 0x80f900, buf, sizeof(buf));
@@ -780,7 +773,7 @@ static int af9033_get_frontend(struct dvb_frontend *fe)
780 return 0; 773 return 0;
781 774
782err: 775err:
783 dev_dbg(&dev->i2c->dev, "%s: failed=%d\n", __func__, ret); 776 dev_dbg(&dev->client->dev, "%s: failed=%d\n", __func__, ret);
784 777
785 return ret; 778 return ret;
786} 779}
@@ -826,7 +819,7 @@ static int af9033_read_status(struct dvb_frontend *fe, fe_status_t *status)
826 return 0; 819 return 0;
827 820
828err: 821err:
829 dev_dbg(&dev->i2c->dev, "%s: failed=%d\n", __func__, ret); 822 dev_dbg(&dev->client->dev, "%s: failed=%d\n", __func__, ret);
830 823
831 return ret; 824 return ret;
832} 825}
@@ -880,7 +873,7 @@ static int af9033_read_snr(struct dvb_frontend *fe, u16 *snr)
880 return 0; 873 return 0;
881 874
882err: 875err:
883 dev_dbg(&dev->i2c->dev, "%s: failed=%d\n", __func__, ret); 876 dev_dbg(&dev->client->dev, "%s: failed=%d\n", __func__, ret);
884 877
885 return ret; 878 return ret;
886} 879}
@@ -902,7 +895,7 @@ static int af9033_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
902 return 0; 895 return 0;
903 896
904err: 897err:
905 dev_dbg(&dev->i2c->dev, "%s: failed=%d\n", __func__, ret); 898 dev_dbg(&dev->client->dev, "%s: failed=%d\n", __func__, ret);
906 899
907 return ret; 900 return ret;
908} 901}
@@ -948,7 +941,7 @@ static int af9033_update_ch_stat(struct af9033_dev *dev)
948 941
949 return 0; 942 return 0;
950err: 943err:
951 dev_dbg(&dev->i2c->dev, "%s: failed=%d\n", __func__, ret); 944 dev_dbg(&dev->client->dev, "%s: failed=%d\n", __func__, ret);
952 945
953 return ret; 946 return ret;
954} 947}
@@ -986,7 +979,7 @@ static int af9033_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
986 struct af9033_dev *dev = fe->demodulator_priv; 979 struct af9033_dev *dev = fe->demodulator_priv;
987 int ret; 980 int ret;
988 981
989 dev_dbg(&dev->i2c->dev, "%s: enable=%d\n", __func__, enable); 982 dev_dbg(&dev->client->dev, "%s: enable=%d\n", __func__, enable);
990 983
991 ret = af9033_wr_reg_mask(dev, 0x00fa04, enable, 0x01); 984 ret = af9033_wr_reg_mask(dev, 0x00fa04, enable, 0x01);
992 if (ret < 0) 985 if (ret < 0)
@@ -995,7 +988,7 @@ static int af9033_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
995 return 0; 988 return 0;
996 989
997err: 990err:
998 dev_dbg(&dev->i2c->dev, "%s: failed=%d\n", __func__, ret); 991 dev_dbg(&dev->client->dev, "%s: failed=%d\n", __func__, ret);
999 992
1000 return ret; 993 return ret;
1001} 994}
@@ -1005,7 +998,7 @@ static int af9033_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
1005 struct af9033_dev *dev = fe->demodulator_priv; 998 struct af9033_dev *dev = fe->demodulator_priv;
1006 int ret; 999 int ret;
1007 1000
1008 dev_dbg(&dev->i2c->dev, "%s: onoff=%d\n", __func__, onoff); 1001 dev_dbg(&dev->client->dev, "%s: onoff=%d\n", __func__, onoff);
1009 1002
1010 ret = af9033_wr_reg_mask(dev, 0x80f993, onoff, 0x01); 1003 ret = af9033_wr_reg_mask(dev, 0x80f993, onoff, 0x01);
1011 if (ret < 0) 1004 if (ret < 0)
@@ -1014,7 +1007,7 @@ static int af9033_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
1014 return 0; 1007 return 0;
1015 1008
1016err: 1009err:
1017 dev_dbg(&dev->i2c->dev, "%s: failed=%d\n", __func__, ret); 1010 dev_dbg(&dev->client->dev, "%s: failed=%d\n", __func__, ret);
1018 1011
1019 return ret; 1012 return ret;
1020} 1013}
@@ -1026,7 +1019,7 @@ static int af9033_pid_filter(struct dvb_frontend *fe, int index, u16 pid,
1026 int ret; 1019 int ret;
1027 u8 wbuf[2] = {(pid >> 0) & 0xff, (pid >> 8) & 0xff}; 1020 u8 wbuf[2] = {(pid >> 0) & 0xff, (pid >> 8) & 0xff};
1028 1021
1029 dev_dbg(&dev->i2c->dev, "%s: index=%d pid=%04x onoff=%d\n", 1022 dev_dbg(&dev->client->dev, "%s: index=%d pid=%04x onoff=%d\n",
1030 __func__, index, pid, onoff); 1023 __func__, index, pid, onoff);
1031 1024
1032 if (pid > 0x1fff) 1025 if (pid > 0x1fff)
@@ -1047,38 +1040,79 @@ static int af9033_pid_filter(struct dvb_frontend *fe, int index, u16 pid,
1047 return 0; 1040 return 0;
1048 1041
1049err: 1042err:
1050 dev_dbg(&dev->i2c->dev, "%s: failed=%d\n", __func__, ret); 1043 dev_dbg(&dev->client->dev, "%s: failed=%d\n", __func__, ret);
1051 1044
1052 return ret; 1045 return ret;
1053} 1046}
1054 1047
1055static struct dvb_frontend_ops af9033_ops; 1048static struct dvb_frontend_ops af9033_ops = {
1049 .delsys = { SYS_DVBT },
1050 .info = {
1051 .name = "Afatech AF9033 (DVB-T)",
1052 .frequency_min = 174000000,
1053 .frequency_max = 862000000,
1054 .frequency_stepsize = 250000,
1055 .frequency_tolerance = 0,
1056 .caps = FE_CAN_FEC_1_2 |
1057 FE_CAN_FEC_2_3 |
1058 FE_CAN_FEC_3_4 |
1059 FE_CAN_FEC_5_6 |
1060 FE_CAN_FEC_7_8 |
1061 FE_CAN_FEC_AUTO |
1062 FE_CAN_QPSK |
1063 FE_CAN_QAM_16 |
1064 FE_CAN_QAM_64 |
1065 FE_CAN_QAM_AUTO |
1066 FE_CAN_TRANSMISSION_MODE_AUTO |
1067 FE_CAN_GUARD_INTERVAL_AUTO |
1068 FE_CAN_HIERARCHY_AUTO |
1069 FE_CAN_RECOVER |
1070 FE_CAN_MUTE_TS
1071 },
1072
1073 .init = af9033_init,
1074 .sleep = af9033_sleep,
1075
1076 .get_tune_settings = af9033_get_tune_settings,
1077 .set_frontend = af9033_set_frontend,
1078 .get_frontend = af9033_get_frontend,
1079
1080 .read_status = af9033_read_status,
1081 .read_snr = af9033_read_snr,
1082 .read_signal_strength = af9033_read_signal_strength,
1083 .read_ber = af9033_read_ber,
1084 .read_ucblocks = af9033_read_ucblocks,
1085
1086 .i2c_gate_ctrl = af9033_i2c_gate_ctrl,
1087};
1056 1088
1057struct dvb_frontend *af9033_attach(const struct af9033_config *config, 1089static int af9033_probe(struct i2c_client *client,
1058 struct i2c_adapter *i2c, 1090 const struct i2c_device_id *id)
1059 struct af9033_ops *ops)
1060{ 1091{
1061 int ret; 1092 struct af9033_config *cfg = client->dev.platform_data;
1062 struct af9033_dev *dev; 1093 struct af9033_dev *dev;
1094 int ret;
1063 u8 buf[8]; 1095 u8 buf[8];
1064 u32 reg; 1096 u32 reg;
1065 1097
1066 dev_dbg(&i2c->dev, "%s:\n", __func__);
1067
1068 /* allocate memory for the internal state */ 1098 /* allocate memory for the internal state */
1069 dev = kzalloc(sizeof(struct af9033_dev), GFP_KERNEL); 1099 dev = kzalloc(sizeof(struct af9033_dev), GFP_KERNEL);
1070 if (dev == NULL) 1100 if (dev == NULL) {
1101 ret = -ENOMEM;
1102 dev_err(&client->dev, "Could not allocate memory for state\n");
1071 goto err; 1103 goto err;
1104 }
1072 1105
1073 /* setup the state */ 1106 /* setup the state */
1074 dev->i2c = i2c; 1107 dev->client = client;
1075 memcpy(&dev->cfg, config, sizeof(struct af9033_config)); 1108 memcpy(&dev->cfg, cfg, sizeof(struct af9033_config));
1076 1109
1077 if (dev->cfg.clock != 12000000) { 1110 if (dev->cfg.clock != 12000000) {
1078 dev_err(&dev->i2c->dev, 1111 ret = -ENODEV;
1112 dev_err(&dev->client->dev,
1079 "%s: af9033: unsupported clock=%d, only 12000000 Hz is supported currently\n", 1113 "%s: af9033: unsupported clock=%d, only 12000000 Hz is supported currently\n",
1080 KBUILD_MODNAME, dev->cfg.clock); 1114 KBUILD_MODNAME, dev->cfg.clock);
1081 goto err; 1115 goto err_kfree;
1082 } 1116 }
1083 1117
1084 /* firmware version */ 1118 /* firmware version */
@@ -1098,13 +1132,13 @@ struct dvb_frontend *af9033_attach(const struct af9033_config *config,
1098 1132
1099 ret = af9033_rd_regs(dev, reg, &buf[0], 4); 1133 ret = af9033_rd_regs(dev, reg, &buf[0], 4);
1100 if (ret < 0) 1134 if (ret < 0)
1101 goto err; 1135 goto err_kfree;
1102 1136
1103 ret = af9033_rd_regs(dev, 0x804191, &buf[4], 4); 1137 ret = af9033_rd_regs(dev, 0x804191, &buf[4], 4);
1104 if (ret < 0) 1138 if (ret < 0)
1105 goto err; 1139 goto err_kfree;
1106 1140
1107 dev_info(&dev->i2c->dev, 1141 dev_info(&dev->client->dev,
1108 "%s: firmware version: LINK=%d.%d.%d.%d OFDM=%d.%d.%d.%d\n", 1142 "%s: firmware version: LINK=%d.%d.%d.%d OFDM=%d.%d.%d.%d\n",
1109 KBUILD_MODNAME, buf[0], buf[1], buf[2], buf[3], buf[4], 1143 KBUILD_MODNAME, buf[0], buf[1], buf[2], buf[3], buf[4],
1110 buf[5], buf[6], buf[7]); 1144 buf[5], buf[6], buf[7]);
@@ -1122,11 +1156,11 @@ struct dvb_frontend *af9033_attach(const struct af9033_config *config,
1122 default: 1156 default:
1123 ret = af9033_wr_reg(dev, 0x80004c, 1); 1157 ret = af9033_wr_reg(dev, 0x80004c, 1);
1124 if (ret < 0) 1158 if (ret < 0)
1125 goto err; 1159 goto err_kfree;
1126 1160
1127 ret = af9033_wr_reg(dev, 0x800000, 0); 1161 ret = af9033_wr_reg(dev, 0x800000, 0);
1128 if (ret < 0) 1162 if (ret < 0)
1129 goto err; 1163 goto err_kfree;
1130 } 1164 }
1131 1165
1132 /* configure internal TS mode */ 1166 /* configure internal TS mode */
@@ -1146,63 +1180,53 @@ struct dvb_frontend *af9033_attach(const struct af9033_config *config,
1146 /* create dvb_frontend */ 1180 /* create dvb_frontend */
1147 memcpy(&dev->fe.ops, &af9033_ops, sizeof(struct dvb_frontend_ops)); 1181 memcpy(&dev->fe.ops, &af9033_ops, sizeof(struct dvb_frontend_ops));
1148 dev->fe.demodulator_priv = dev; 1182 dev->fe.demodulator_priv = dev;
1149 1183 *cfg->fe = &dev->fe;
1150 if (ops) { 1184 if (cfg->ops) {
1151 ops->pid_filter = af9033_pid_filter; 1185 cfg->ops->pid_filter = af9033_pid_filter;
1152 ops->pid_filter_ctrl = af9033_pid_filter_ctrl; 1186 cfg->ops->pid_filter_ctrl = af9033_pid_filter_ctrl;
1153 } 1187 }
1188 i2c_set_clientdata(client, dev);
1154 1189
1155 return &dev->fe; 1190 dev_info(&dev->client->dev, "Afatech AF9033 successfully attached\n");
1156 1191 return 0;
1157err: 1192err_kfree:
1158 kfree(dev); 1193 kfree(dev);
1159 return NULL; 1194err:
1195 dev_dbg(&client->dev, "failed %d\n", ret);
1196 return ret;
1160} 1197}
1161EXPORT_SYMBOL(af9033_attach);
1162 1198
1163static struct dvb_frontend_ops af9033_ops = { 1199static int af9033_remove(struct i2c_client *client)
1164 .delsys = { SYS_DVBT }, 1200{
1165 .info = { 1201 struct af9033_dev *dev = i2c_get_clientdata(client);
1166 .name = "Afatech AF9033 (DVB-T)",
1167 .frequency_min = 174000000,
1168 .frequency_max = 862000000,
1169 .frequency_stepsize = 250000,
1170 .frequency_tolerance = 0,
1171 .caps = FE_CAN_FEC_1_2 |
1172 FE_CAN_FEC_2_3 |
1173 FE_CAN_FEC_3_4 |
1174 FE_CAN_FEC_5_6 |
1175 FE_CAN_FEC_7_8 |
1176 FE_CAN_FEC_AUTO |
1177 FE_CAN_QPSK |
1178 FE_CAN_QAM_16 |
1179 FE_CAN_QAM_64 |
1180 FE_CAN_QAM_AUTO |
1181 FE_CAN_TRANSMISSION_MODE_AUTO |
1182 FE_CAN_GUARD_INTERVAL_AUTO |
1183 FE_CAN_HIERARCHY_AUTO |
1184 FE_CAN_RECOVER |
1185 FE_CAN_MUTE_TS
1186 },
1187 1202
1188 .release = af9033_release, 1203 dev_dbg(&client->dev, "%s\n", __func__);
1189 1204
1190 .init = af9033_init, 1205 dev->fe.ops.release = NULL;
1191 .sleep = af9033_sleep, 1206 dev->fe.demodulator_priv = NULL;
1207 kfree(dev);
1192 1208
1193 .get_tune_settings = af9033_get_tune_settings, 1209 return 0;
1194 .set_frontend = af9033_set_frontend, 1210}
1195 .get_frontend = af9033_get_frontend,
1196 1211
1197 .read_status = af9033_read_status, 1212static const struct i2c_device_id af9033_id_table[] = {
1198 .read_snr = af9033_read_snr, 1213 {"af9033", 0},
1199 .read_signal_strength = af9033_read_signal_strength, 1214 {}
1200 .read_ber = af9033_read_ber, 1215};
1201 .read_ucblocks = af9033_read_ucblocks, 1216MODULE_DEVICE_TABLE(i2c, af9033_id_table);
1202 1217
1203 .i2c_gate_ctrl = af9033_i2c_gate_ctrl, 1218static struct i2c_driver af9033_driver = {
1219 .driver = {
1220 .owner = THIS_MODULE,
1221 .name = "af9033",
1222 },
1223 .probe = af9033_probe,
1224 .remove = af9033_remove,
1225 .id_table = af9033_id_table,
1204}; 1226};
1205 1227
1228module_i2c_driver(af9033_driver);
1229
1206MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>"); 1230MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1207MODULE_DESCRIPTION("Afatech AF9033 DVB-T demodulator driver"); 1231MODULE_DESCRIPTION("Afatech AF9033 DVB-T demodulator driver");
1208MODULE_LICENSE("GPL"); 1232MODULE_LICENSE("GPL");
diff --git a/drivers/media/dvb-frontends/af9033.h b/drivers/media/dvb-frontends/af9033.h
index b95a6d438eca..1b968d0fcb17 100644
--- a/drivers/media/dvb-frontends/af9033.h
+++ b/drivers/media/dvb-frontends/af9033.h
@@ -80,8 +80,18 @@ struct af9033_config {
80 * 80 *
81 */ 81 */
82 bool dyn0_clk; 82 bool dyn0_clk;
83};
84 83
84 /*
85 * PID filter ops
86 */
87 struct af9033_ops *ops;
88
89 /*
90 * frontend
91 * returned by that driver
92 */
93 struct dvb_frontend **fe;
94};
85 95
86struct af9033_ops { 96struct af9033_ops {
87 int (*pid_filter_ctrl)(struct dvb_frontend *fe, int onoff); 97 int (*pid_filter_ctrl)(struct dvb_frontend *fe, int onoff);
@@ -89,36 +99,4 @@ struct af9033_ops {
89 int onoff); 99 int onoff);
90}; 100};
91 101
92
93#if IS_ENABLED(CONFIG_DVB_AF9033)
94extern
95struct dvb_frontend *af9033_attach(const struct af9033_config *config,
96 struct i2c_adapter *i2c,
97 struct af9033_ops *ops);
98
99#else
100static inline
101struct dvb_frontend *af9033_attach(const struct af9033_config *config,
102 struct i2c_adapter *i2c,
103 struct af9033_ops *ops)
104{
105 pr_warn("%s: driver disabled by Kconfig\n", __func__);
106 return NULL;
107}
108
109static inline int af9033_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
110{
111 pr_warn("%s: driver disabled by Kconfig\n", __func__);
112 return -ENODEV;
113}
114
115static inline int af9033_pid_filter(struct dvb_frontend *fe, int index, u16 pid,
116 int onoff)
117{
118 pr_warn("%s: driver disabled by Kconfig\n", __func__);
119 return -ENODEV;
120}
121
122#endif
123
124#endif /* AF9033_H */ 102#endif /* AF9033_H */
diff --git a/drivers/media/usb/dvb-usb-v2/af9035.c b/drivers/media/usb/dvb-usb-v2/af9035.c
index 533c96e4fbb6..6534e44b42b6 100644
--- a/drivers/media/usb/dvb-usb-v2/af9035.c
+++ b/drivers/media/usb/dvb-usb-v2/af9035.c
@@ -305,6 +305,19 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap,
305 * NOTE: As a firmware knows tuner type there is very small possibility 305 * NOTE: As a firmware knows tuner type there is very small possibility
306 * there could be some tuner I2C hacks done by firmware and this may 306 * there could be some tuner I2C hacks done by firmware and this may
307 * lead problems if firmware expects those bytes are used. 307 * lead problems if firmware expects those bytes are used.
308 *
309 * TODO: Here is few hacks. AF9035 chip integrates AF9033 demodulator.
310 * IT9135 chip integrates AF9033 demodulator and RF tuner. For dual
311 * tuner devices, there is also external AF9033 demodulator connected
312 * via external I2C bus. All AF9033 demod I2C traffic, both single and
313 * dual tuner configuration, is covered by firmware - actual USB IO
314 * looks just like a memory access.
315 * In case of IT913x chip, there is own tuner driver. It is implemented
316 * currently as a I2C driver, even tuner IP block is likely build
317 * directly into the demodulator memory space and there is no own I2C
318 * bus. I2C subsystem does not allow register multiple devices to same
319 * bus, having same slave address. Due to that we reuse demod address,
320 * shifted by one bit, on that case.
308 */ 321 */
309 if (num == 2 && !(msg[0].flags & I2C_M_RD) && 322 if (num == 2 && !(msg[0].flags & I2C_M_RD) &&
310 (msg[1].flags & I2C_M_RD)) { 323 (msg[1].flags & I2C_M_RD)) {
@@ -312,12 +325,14 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap,
312 /* TODO: correct limits > 40 */ 325 /* TODO: correct limits > 40 */
313 ret = -EOPNOTSUPP; 326 ret = -EOPNOTSUPP;
314 } else if ((msg[0].addr == state->af9033_config[0].i2c_addr) || 327 } else if ((msg[0].addr == state->af9033_config[0].i2c_addr) ||
315 (msg[0].addr == state->af9033_config[1].i2c_addr)) { 328 (msg[0].addr == state->af9033_config[1].i2c_addr) ||
329 (state->chip_type == 0x9135)) {
316 /* demod access via firmware interface */ 330 /* demod access via firmware interface */
317 u32 reg = msg[0].buf[0] << 16 | msg[0].buf[1] << 8 | 331 u32 reg = msg[0].buf[0] << 16 | msg[0].buf[1] << 8 |
318 msg[0].buf[2]; 332 msg[0].buf[2];
319 333
320 if (msg[0].addr == state->af9033_config[1].i2c_addr) 334 if (msg[0].addr == state->af9033_config[1].i2c_addr ||
335 msg[0].addr == (state->af9033_config[1].i2c_addr >> 1))
321 reg |= 0x100000; 336 reg |= 0x100000;
322 337
323 ret = af9035_rd_regs(d, reg, &msg[1].buf[0], 338 ret = af9035_rd_regs(d, reg, &msg[1].buf[0],
@@ -349,12 +364,14 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap,
349 /* TODO: correct limits > 40 */ 364 /* TODO: correct limits > 40 */
350 ret = -EOPNOTSUPP; 365 ret = -EOPNOTSUPP;
351 } else if ((msg[0].addr == state->af9033_config[0].i2c_addr) || 366 } else if ((msg[0].addr == state->af9033_config[0].i2c_addr) ||
352 (msg[0].addr == state->af9033_config[1].i2c_addr)) { 367 (msg[0].addr == state->af9033_config[1].i2c_addr) ||
368 (state->chip_type == 0x9135)) {
353 /* demod access via firmware interface */ 369 /* demod access via firmware interface */
354 u32 reg = msg[0].buf[0] << 16 | msg[0].buf[1] << 8 | 370 u32 reg = msg[0].buf[0] << 16 | msg[0].buf[1] << 8 |
355 msg[0].buf[2]; 371 msg[0].buf[2];
356 372
357 if (msg[0].addr == state->af9033_config[1].i2c_addr) 373 if (msg[0].addr == state->af9033_config[1].i2c_addr ||
374 msg[0].addr == (state->af9033_config[1].i2c_addr >> 1))
358 reg |= 0x100000; 375 reg |= 0x100000;
359 376
360 ret = af9035_wr_regs(d, reg, &msg[0].buf[3], 377 ret = af9035_wr_regs(d, reg, &msg[0].buf[3],
@@ -1066,6 +1083,8 @@ static int af9035_get_adapter_count(struct dvb_usb_device *d)
1066 return state->dual_mode + 1; 1083 return state->dual_mode + 1;
1067} 1084}
1068 1085
1086static void af9035_exit(struct dvb_usb_device *d);
1087
1069static int af9035_frontend_attach(struct dvb_usb_adapter *adap) 1088static int af9035_frontend_attach(struct dvb_usb_adapter *adap)
1070{ 1089{
1071 struct state *state = adap_to_priv(adap); 1090 struct state *state = adap_to_priv(adap);
@@ -1080,9 +1099,14 @@ static int af9035_frontend_attach(struct dvb_usb_adapter *adap)
1080 goto err; 1099 goto err;
1081 } 1100 }
1082 1101
1083 /* attach demodulator */ 1102 state->af9033_config[adap->id].fe = &adap->fe[0];
1084 adap->fe[0] = dvb_attach(af9033_attach, &state->af9033_config[adap->id], 1103 state->af9033_config[adap->id].ops = &state->ops;
1085 &d->i2c_adap, &state->ops); 1104 ret = af9035_add_i2c_dev(d, "af9033",
1105 state->af9033_config[adap->id].i2c_addr,
1106 &state->af9033_config[adap->id]);
1107 if (ret)
1108 goto err;
1109
1086 if (adap->fe[0] == NULL) { 1110 if (adap->fe[0] == NULL) {
1087 ret = -ENODEV; 1111 ret = -ENODEV;
1088 goto err; 1112 goto err;
@@ -1095,6 +1119,7 @@ static int af9035_frontend_attach(struct dvb_usb_adapter *adap)
1095 return 0; 1119 return 0;
1096 1120
1097err: 1121err:
1122 af9035_exit(d); /* remove I2C clients */
1098 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret); 1123 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
1099 1124
1100 return ret; 1125 return ret;
@@ -1332,7 +1357,7 @@ static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
1332 } 1357 }
1333 1358
1334 ret = af9035_add_i2c_dev(d, "it913x", 1359 ret = af9035_add_i2c_dev(d, "it913x",
1335 state->af9033_config[adap->id].i2c_addr, 1360 state->af9033_config[adap->id].i2c_addr >> 1,
1336 &it913x_config); 1361 &it913x_config);
1337 if (ret) 1362 if (ret)
1338 goto err; 1363 goto err;
@@ -1357,7 +1382,7 @@ static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
1357 } 1382 }
1358 1383
1359 ret = af9035_add_i2c_dev(d, "it913x", 1384 ret = af9035_add_i2c_dev(d, "it913x",
1360 state->af9033_config[adap->id].i2c_addr, 1385 state->af9033_config[adap->id].i2c_addr >> 1,
1361 &it913x_config); 1386 &it913x_config);
1362 if (ret) 1387 if (ret)
1363 goto err; 1388 goto err;
@@ -1377,6 +1402,7 @@ static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
1377 return 0; 1402 return 0;
1378 1403
1379err: 1404err:
1405 af9035_exit(d); /* remove I2C clients */
1380 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret); 1406 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
1381 1407
1382 return ret; 1408 return ret;
@@ -1435,6 +1461,12 @@ static void af9035_exit(struct dvb_usb_device *d)
1435 1461
1436 dev_dbg(&d->udev->dev, "%s:\n", __func__); 1462 dev_dbg(&d->udev->dev, "%s:\n", __func__);
1437 1463
1464 if (state->i2c_client[3])
1465 af9035_del_i2c_dev(d);
1466
1467 if (state->i2c_client[2])
1468 af9035_del_i2c_dev(d);
1469
1438 if (state->i2c_client[1]) 1470 if (state->i2c_client[1])
1439 af9035_del_i2c_dev(d); 1471 af9035_del_i2c_dev(d);
1440 1472
diff --git a/drivers/media/usb/dvb-usb-v2/af9035.h b/drivers/media/usb/dvb-usb-v2/af9035.h
index 0911c4fc860c..21960773df05 100644
--- a/drivers/media/usb/dvb-usb-v2/af9035.h
+++ b/drivers/media/usb/dvb-usb-v2/af9035.h
@@ -63,7 +63,7 @@ struct state {
63 u16 eeprom_addr; 63 u16 eeprom_addr;
64 struct af9033_config af9033_config[2]; 64 struct af9033_config af9033_config[2];
65 struct af9033_ops ops; 65 struct af9033_ops ops;
66 #define AF9035_I2C_CLIENT_MAX 2 66 #define AF9035_I2C_CLIENT_MAX 4
67 struct i2c_client *i2c_client[AF9035_I2C_CLIENT_MAX]; 67 struct i2c_client *i2c_client[AF9035_I2C_CLIENT_MAX];
68}; 68};
69 69