arm64: Implement coherent DMA API based on swiotlb
[firefly-linux-kernel-4.4.55.git] / drivers / media / usb / dvb-usb-v2 / af9035.c
1 /*
2  * Afatech AF9035 DVB USB driver
3  *
4  * Copyright (C) 2009 Antti Palosaari <crope@iki.fi>
5  * Copyright (C) 2012 Antti Palosaari <crope@iki.fi>
6  *
7  *    This program is free software; you can redistribute it and/or modify
8  *    it under the terms of the GNU General Public License as published by
9  *    the Free Software Foundation; either version 2 of the License, or
10  *    (at your option) any later version.
11  *
12  *    This program is distributed in the hope that it will be useful,
13  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *    GNU General Public License for more details.
16  *
17  *    You should have received a copy of the GNU General Public License along
18  *    with this program; if not, write to the Free Software Foundation, Inc.,
19  *    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20  */
21
22 #include "af9035.h"
23
24 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
25
26 static u16 af9035_checksum(const u8 *buf, size_t len)
27 {
28         size_t i;
29         u16 checksum = 0;
30
31         for (i = 1; i < len; i++) {
32                 if (i % 2)
33                         checksum += buf[i] << 8;
34                 else
35                         checksum += buf[i];
36         }
37         checksum = ~checksum;
38
39         return checksum;
40 }
41
42 static int af9035_ctrl_msg(struct dvb_usb_device *d, struct usb_req *req)
43 {
44 #define REQ_HDR_LEN 4 /* send header size */
45 #define ACK_HDR_LEN 3 /* rece header size */
46 #define CHECKSUM_LEN 2
47 #define USB_TIMEOUT 2000
48         struct state *state = d_to_priv(d);
49         int ret, wlen, rlen;
50         u16 checksum, tmp_checksum;
51
52         mutex_lock(&d->usb_mutex);
53
54         /* buffer overflow check */
55         if (req->wlen > (BUF_LEN - REQ_HDR_LEN - CHECKSUM_LEN) ||
56                         req->rlen > (BUF_LEN - ACK_HDR_LEN - CHECKSUM_LEN)) {
57                 dev_err(&d->udev->dev, "%s: too much data wlen=%d rlen=%d\n",
58                                 __func__, req->wlen, req->rlen);
59                 ret = -EINVAL;
60                 goto exit;
61         }
62
63         state->buf[0] = REQ_HDR_LEN + req->wlen + CHECKSUM_LEN - 1;
64         state->buf[1] = req->mbox;
65         state->buf[2] = req->cmd;
66         state->buf[3] = state->seq++;
67         memcpy(&state->buf[REQ_HDR_LEN], req->wbuf, req->wlen);
68
69         wlen = REQ_HDR_LEN + req->wlen + CHECKSUM_LEN;
70         rlen = ACK_HDR_LEN + req->rlen + CHECKSUM_LEN;
71
72         /* calc and add checksum */
73         checksum = af9035_checksum(state->buf, state->buf[0] - 1);
74         state->buf[state->buf[0] - 1] = (checksum >> 8);
75         state->buf[state->buf[0] - 0] = (checksum & 0xff);
76
77         /* no ack for these packets */
78         if (req->cmd == CMD_FW_DL)
79                 rlen = 0;
80
81         ret = dvb_usbv2_generic_rw_locked(d,
82                         state->buf, wlen, state->buf, rlen);
83         if (ret)
84                 goto exit;
85
86         /* no ack for those packets */
87         if (req->cmd == CMD_FW_DL)
88                 goto exit;
89
90         /* verify checksum */
91         checksum = af9035_checksum(state->buf, rlen - 2);
92         tmp_checksum = (state->buf[rlen - 2] << 8) | state->buf[rlen - 1];
93         if (tmp_checksum != checksum) {
94                 dev_err(&d->udev->dev, "%s: command=%02x checksum mismatch " \
95                                 "(%04x != %04x)\n", KBUILD_MODNAME, req->cmd,
96                                 tmp_checksum, checksum);
97                 ret = -EIO;
98                 goto exit;
99         }
100
101         /* check status */
102         if (state->buf[2]) {
103                 /* fw returns status 1 when IR code was not received */
104                 if (req->cmd == CMD_IR_GET || state->buf[2] == 1) {
105                         ret = 1;
106                         goto exit;
107                 }
108
109                 dev_dbg(&d->udev->dev, "%s: command=%02x failed fw error=%d\n",
110                                 __func__, req->cmd, state->buf[2]);
111                 ret = -EIO;
112                 goto exit;
113         }
114
115         /* read request, copy returned data to return buf */
116         if (req->rlen)
117                 memcpy(req->rbuf, &state->buf[ACK_HDR_LEN], req->rlen);
118 exit:
119         mutex_unlock(&d->usb_mutex);
120         if (ret < 0)
121                 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
122         return ret;
123 }
124
125 /* write multiple registers */
126 static int af9035_wr_regs(struct dvb_usb_device *d, u32 reg, u8 *val, int len)
127 {
128         u8 wbuf[6 + len];
129         u8 mbox = (reg >> 16) & 0xff;
130         struct usb_req req = { CMD_MEM_WR, mbox, sizeof(wbuf), wbuf, 0, NULL };
131
132         wbuf[0] = len;
133         wbuf[1] = 2;
134         wbuf[2] = 0;
135         wbuf[3] = 0;
136         wbuf[4] = (reg >> 8) & 0xff;
137         wbuf[5] = (reg >> 0) & 0xff;
138         memcpy(&wbuf[6], val, len);
139
140         return af9035_ctrl_msg(d, &req);
141 }
142
143 /* read multiple registers */
144 static int af9035_rd_regs(struct dvb_usb_device *d, u32 reg, u8 *val, int len)
145 {
146         u8 wbuf[] = { len, 2, 0, 0, (reg >> 8) & 0xff, reg & 0xff };
147         u8 mbox = (reg >> 16) & 0xff;
148         struct usb_req req = { CMD_MEM_RD, mbox, sizeof(wbuf), wbuf, len, val };
149
150         return af9035_ctrl_msg(d, &req);
151 }
152
153 /* write single register */
154 static int af9035_wr_reg(struct dvb_usb_device *d, u32 reg, u8 val)
155 {
156         return af9035_wr_regs(d, reg, &val, 1);
157 }
158
159 /* read single register */
160 static int af9035_rd_reg(struct dvb_usb_device *d, u32 reg, u8 *val)
161 {
162         return af9035_rd_regs(d, reg, val, 1);
163 }
164
165 /* write single register with mask */
166 static int af9035_wr_reg_mask(struct dvb_usb_device *d, u32 reg, u8 val,
167                 u8 mask)
168 {
169         int ret;
170         u8 tmp;
171
172         /* no need for read if whole reg is written */
173         if (mask != 0xff) {
174                 ret = af9035_rd_regs(d, reg, &tmp, 1);
175                 if (ret)
176                         return ret;
177
178                 val &= mask;
179                 tmp &= ~mask;
180                 val |= tmp;
181         }
182
183         return af9035_wr_regs(d, reg, &val, 1);
184 }
185
186 static int af9035_i2c_master_xfer(struct i2c_adapter *adap,
187                 struct i2c_msg msg[], int num)
188 {
189         struct dvb_usb_device *d = i2c_get_adapdata(adap);
190         struct state *state = d_to_priv(d);
191         int ret;
192
193         if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
194                 return -EAGAIN;
195
196         /*
197          * I2C sub header is 5 bytes long. Meaning of those bytes are:
198          * 0: data len
199          * 1: I2C addr << 1
200          * 2: reg addr len
201          *    byte 3 and 4 can be used as reg addr
202          * 3: reg addr MSB
203          *    used when reg addr len is set to 2
204          * 4: reg addr LSB
205          *    used when reg addr len is set to 1 or 2
206          *
207          * For the simplify we do not use register addr at all.
208          * NOTE: As a firmware knows tuner type there is very small possibility
209          * there could be some tuner I2C hacks done by firmware and this may
210          * lead problems if firmware expects those bytes are used.
211          */
212         if (num == 2 && !(msg[0].flags & I2C_M_RD) &&
213                         (msg[1].flags & I2C_M_RD)) {
214                 if (msg[0].len > 40 || msg[1].len > 40) {
215                         /* TODO: correct limits > 40 */
216                         ret = -EOPNOTSUPP;
217                 } else if ((msg[0].addr == state->af9033_config[0].i2c_addr) ||
218                            (msg[0].addr == state->af9033_config[1].i2c_addr)) {
219                         /* demod access via firmware interface */
220                         u32 reg = msg[0].buf[0] << 16 | msg[0].buf[1] << 8 |
221                                         msg[0].buf[2];
222
223                         if (msg[0].addr == state->af9033_config[1].i2c_addr)
224                                 reg |= 0x100000;
225
226                         ret = af9035_rd_regs(d, reg, &msg[1].buf[0],
227                                         msg[1].len);
228                 } else {
229                         /* I2C */
230                         u8 buf[5 + msg[0].len];
231                         struct usb_req req = { CMD_I2C_RD, 0, sizeof(buf),
232                                         buf, msg[1].len, msg[1].buf };
233                         req.mbox |= ((msg[0].addr & 0x80)  >>  3);
234                         buf[0] = msg[1].len;
235                         buf[1] = msg[0].addr << 1;
236                         buf[2] = 0x00; /* reg addr len */
237                         buf[3] = 0x00; /* reg addr MSB */
238                         buf[4] = 0x00; /* reg addr LSB */
239                         memcpy(&buf[5], msg[0].buf, msg[0].len);
240                         ret = af9035_ctrl_msg(d, &req);
241                 }
242         } else if (num == 1 && !(msg[0].flags & I2C_M_RD)) {
243                 if (msg[0].len > 40) {
244                         /* TODO: correct limits > 40 */
245                         ret = -EOPNOTSUPP;
246                 } else if ((msg[0].addr == state->af9033_config[0].i2c_addr) ||
247                            (msg[0].addr == state->af9033_config[1].i2c_addr)) {
248                         /* demod access via firmware interface */
249                         u32 reg = msg[0].buf[0] << 16 | msg[0].buf[1] << 8 |
250                                         msg[0].buf[2];
251
252                         if (msg[0].addr == state->af9033_config[1].i2c_addr)
253                                 reg |= 0x100000;
254
255                         ret = af9035_wr_regs(d, reg, &msg[0].buf[3],
256                                         msg[0].len - 3);
257                 } else {
258                         /* I2C */
259                         u8 buf[5 + msg[0].len];
260                         struct usb_req req = { CMD_I2C_WR, 0, sizeof(buf), buf,
261                                         0, NULL };
262                         req.mbox |= ((msg[0].addr & 0x80)  >>  3);
263                         buf[0] = msg[0].len;
264                         buf[1] = msg[0].addr << 1;
265                         buf[2] = 0x00; /* reg addr len */
266                         buf[3] = 0x00; /* reg addr MSB */
267                         buf[4] = 0x00; /* reg addr LSB */
268                         memcpy(&buf[5], msg[0].buf, msg[0].len);
269                         ret = af9035_ctrl_msg(d, &req);
270                 }
271         } else {
272                 /*
273                  * We support only two kind of I2C transactions:
274                  * 1) 1 x read + 1 x write
275                  * 2) 1 x write
276                  */
277                 ret = -EOPNOTSUPP;
278         }
279
280         mutex_unlock(&d->i2c_mutex);
281
282         if (ret < 0)
283                 return ret;
284         else
285                 return num;
286 }
287
288 static u32 af9035_i2c_functionality(struct i2c_adapter *adapter)
289 {
290         return I2C_FUNC_I2C;
291 }
292
293 static struct i2c_algorithm af9035_i2c_algo = {
294         .master_xfer = af9035_i2c_master_xfer,
295         .functionality = af9035_i2c_functionality,
296 };
297
298 static int af9035_identify_state(struct dvb_usb_device *d, const char **name)
299 {
300         struct state *state = d_to_priv(d);
301         int ret;
302         u8 wbuf[1] = { 1 };
303         u8 rbuf[4];
304         struct usb_req req = { CMD_FW_QUERYINFO, 0, sizeof(wbuf), wbuf,
305                         sizeof(rbuf), rbuf };
306
307         ret = af9035_rd_regs(d, 0x1222, rbuf, 3);
308         if (ret < 0)
309                 goto err;
310
311         state->chip_version = rbuf[0];
312         state->chip_type = rbuf[2] << 8 | rbuf[1] << 0;
313
314         ret = af9035_rd_reg(d, 0x384f, &state->prechip_version);
315         if (ret < 0)
316                 goto err;
317
318         dev_info(&d->udev->dev,
319                         "%s: prechip_version=%02x chip_version=%02x chip_type=%04x\n",
320                         __func__, state->prechip_version, state->chip_version,
321                         state->chip_type);
322
323         if (state->chip_type == 0x9135) {
324                 if (state->chip_version == 0x02)
325                         *name = AF9035_FIRMWARE_IT9135_V2;
326                 else
327                         *name = AF9035_FIRMWARE_IT9135_V1;
328                 state->eeprom_addr = EEPROM_BASE_IT9135;
329         } else {
330                 *name = AF9035_FIRMWARE_AF9035;
331                 state->eeprom_addr = EEPROM_BASE_AF9035;
332         }
333
334         ret = af9035_ctrl_msg(d, &req);
335         if (ret < 0)
336                 goto err;
337
338         dev_dbg(&d->udev->dev, "%s: reply=%*ph\n", __func__, 4, rbuf);
339         if (rbuf[0] || rbuf[1] || rbuf[2] || rbuf[3])
340                 ret = WARM;
341         else
342                 ret = COLD;
343
344         return ret;
345
346 err:
347         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
348
349         return ret;
350 }
351
352 static int af9035_download_firmware_old(struct dvb_usb_device *d,
353                 const struct firmware *fw)
354 {
355         int ret, i, j, len;
356         u8 wbuf[1];
357         struct usb_req req = { 0, 0, 0, NULL, 0, NULL };
358         struct usb_req req_fw_dl = { CMD_FW_DL, 0, 0, wbuf, 0, NULL };
359         u8 hdr_core;
360         u16 hdr_addr, hdr_data_len, hdr_checksum;
361         #define MAX_DATA 58
362         #define HDR_SIZE 7
363
364         /*
365          * Thanks to Daniel Glöckner <daniel-gl@gmx.net> about that info!
366          *
367          * byte 0: MCS 51 core
368          *  There are two inside the AF9035 (1=Link and 2=OFDM) with separate
369          *  address spaces
370          * byte 1-2: Big endian destination address
371          * byte 3-4: Big endian number of data bytes following the header
372          * byte 5-6: Big endian header checksum, apparently ignored by the chip
373          *  Calculated as ~(h[0]*256+h[1]+h[2]*256+h[3]+h[4]*256)
374          */
375
376         for (i = fw->size; i > HDR_SIZE;) {
377                 hdr_core = fw->data[fw->size - i + 0];
378                 hdr_addr = fw->data[fw->size - i + 1] << 8;
379                 hdr_addr |= fw->data[fw->size - i + 2] << 0;
380                 hdr_data_len = fw->data[fw->size - i + 3] << 8;
381                 hdr_data_len |= fw->data[fw->size - i + 4] << 0;
382                 hdr_checksum = fw->data[fw->size - i + 5] << 8;
383                 hdr_checksum |= fw->data[fw->size - i + 6] << 0;
384
385                 dev_dbg(&d->udev->dev, "%s: core=%d addr=%04x data_len=%d " \
386                                 "checksum=%04x\n", __func__, hdr_core, hdr_addr,
387                                 hdr_data_len, hdr_checksum);
388
389                 if (((hdr_core != 1) && (hdr_core != 2)) ||
390                                 (hdr_data_len > i)) {
391                         dev_dbg(&d->udev->dev, "%s: bad firmware\n", __func__);
392                         break;
393                 }
394
395                 /* download begin packet */
396                 req.cmd = CMD_FW_DL_BEGIN;
397                 ret = af9035_ctrl_msg(d, &req);
398                 if (ret < 0)
399                         goto err;
400
401                 /* download firmware packet(s) */
402                 for (j = HDR_SIZE + hdr_data_len; j > 0; j -= MAX_DATA) {
403                         len = j;
404                         if (len > MAX_DATA)
405                                 len = MAX_DATA;
406                         req_fw_dl.wlen = len;
407                         req_fw_dl.wbuf = (u8 *) &fw->data[fw->size - i +
408                                         HDR_SIZE + hdr_data_len - j];
409                         ret = af9035_ctrl_msg(d, &req_fw_dl);
410                         if (ret < 0)
411                                 goto err;
412                 }
413
414                 /* download end packet */
415                 req.cmd = CMD_FW_DL_END;
416                 ret = af9035_ctrl_msg(d, &req);
417                 if (ret < 0)
418                         goto err;
419
420                 i -= hdr_data_len + HDR_SIZE;
421
422                 dev_dbg(&d->udev->dev, "%s: data uploaded=%zu\n",
423                                 __func__, fw->size - i);
424         }
425
426         /* print warn if firmware is bad, continue and see what happens */
427         if (i)
428                 dev_warn(&d->udev->dev, "%s: bad firmware\n", KBUILD_MODNAME);
429
430         return 0;
431
432 err:
433         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
434
435         return ret;
436 }
437
438 static int af9035_download_firmware_new(struct dvb_usb_device *d,
439                 const struct firmware *fw)
440 {
441         int ret, i, i_prev;
442         struct usb_req req_fw_dl = { CMD_FW_SCATTER_WR, 0, 0, NULL, 0, NULL };
443         #define HDR_SIZE 7
444
445         /*
446          * There seems to be following firmware header. Meaning of bytes 0-3
447          * is unknown.
448          *
449          * 0: 3
450          * 1: 0, 1
451          * 2: 0
452          * 3: 1, 2, 3
453          * 4: addr MSB
454          * 5: addr LSB
455          * 6: count of data bytes ?
456          */
457         for (i = HDR_SIZE, i_prev = 0; i <= fw->size; i++) {
458                 if (i == fw->size ||
459                                 (fw->data[i + 0] == 0x03 &&
460                                 (fw->data[i + 1] == 0x00 ||
461                                 fw->data[i + 1] == 0x01) &&
462                                 fw->data[i + 2] == 0x00)) {
463                         req_fw_dl.wlen = i - i_prev;
464                         req_fw_dl.wbuf = (u8 *) &fw->data[i_prev];
465                         i_prev = i;
466                         ret = af9035_ctrl_msg(d, &req_fw_dl);
467                         if (ret < 0)
468                                 goto err;
469
470                         dev_dbg(&d->udev->dev, "%s: data uploaded=%d\n",
471                                         __func__, i);
472                 }
473         }
474
475         return 0;
476
477 err:
478         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
479
480         return ret;
481 }
482
483 static int af9035_download_firmware(struct dvb_usb_device *d,
484                 const struct firmware *fw)
485 {
486         struct state *state = d_to_priv(d);
487         int ret;
488         u8 wbuf[1];
489         u8 rbuf[4];
490         u8 tmp;
491         struct usb_req req = { 0, 0, 0, NULL, 0, NULL };
492         struct usb_req req_fw_ver = { CMD_FW_QUERYINFO, 0, 1, wbuf, 4, rbuf } ;
493         dev_dbg(&d->udev->dev, "%s:\n", __func__);
494
495         /*
496          * In case of dual tuner configuration we need to do some extra
497          * initialization in order to download firmware to slave demod too,
498          * which is done by master demod.
499          * Master feeds also clock and controls power via GPIO.
500          */
501         ret = af9035_rd_reg(d, state->eeprom_addr + EEPROM_DUAL_MODE, &tmp);
502         if (ret < 0)
503                 goto err;
504
505         if (tmp) {
506                 /* configure gpioh1, reset & power slave demod */
507                 ret = af9035_wr_reg_mask(d, 0x00d8b0, 0x01, 0x01);
508                 if (ret < 0)
509                         goto err;
510
511                 ret = af9035_wr_reg_mask(d, 0x00d8b1, 0x01, 0x01);
512                 if (ret < 0)
513                         goto err;
514
515                 ret = af9035_wr_reg_mask(d, 0x00d8af, 0x00, 0x01);
516                 if (ret < 0)
517                         goto err;
518
519                 usleep_range(10000, 50000);
520
521                 ret = af9035_wr_reg_mask(d, 0x00d8af, 0x01, 0x01);
522                 if (ret < 0)
523                         goto err;
524
525                 /* tell the slave I2C address */
526                 ret = af9035_rd_reg(d,
527                                 state->eeprom_addr + EEPROM_2ND_DEMOD_ADDR,
528                                 &tmp);
529                 if (ret < 0)
530                         goto err;
531
532                 if (state->chip_type == 0x9135) {
533                         ret = af9035_wr_reg(d, 0x004bfb, tmp);
534                         if (ret < 0)
535                                 goto err;
536                 } else {
537                         ret = af9035_wr_reg(d, 0x00417f, tmp);
538                         if (ret < 0)
539                                 goto err;
540
541                         /* enable clock out */
542                         ret = af9035_wr_reg_mask(d, 0x00d81a, 0x01, 0x01);
543                         if (ret < 0)
544                                 goto err;
545                 }
546         }
547
548         if (fw->data[0] == 0x01)
549                 ret = af9035_download_firmware_old(d, fw);
550         else
551                 ret = af9035_download_firmware_new(d, fw);
552         if (ret < 0)
553                 goto err;
554
555         /* firmware loaded, request boot */
556         req.cmd = CMD_FW_BOOT;
557         ret = af9035_ctrl_msg(d, &req);
558         if (ret < 0)
559                 goto err;
560
561         /* ensure firmware starts */
562         wbuf[0] = 1;
563         ret = af9035_ctrl_msg(d, &req_fw_ver);
564         if (ret < 0)
565                 goto err;
566
567         if (!(rbuf[0] || rbuf[1] || rbuf[2] || rbuf[3])) {
568                 dev_err(&d->udev->dev, "%s: firmware did not run\n",
569                                 KBUILD_MODNAME);
570                 ret = -ENODEV;
571                 goto err;
572         }
573
574         dev_info(&d->udev->dev, "%s: firmware version=%d.%d.%d.%d",
575                         KBUILD_MODNAME, rbuf[0], rbuf[1], rbuf[2], rbuf[3]);
576
577         return 0;
578
579 err:
580         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
581
582         return ret;
583 }
584
585 static int af9035_read_config(struct dvb_usb_device *d)
586 {
587         struct state *state = d_to_priv(d);
588         int ret, i;
589         u8 tmp;
590         u16 tmp16, addr;
591
592         /* demod I2C "address" */
593         state->af9033_config[0].i2c_addr = 0x38;
594         state->af9033_config[0].adc_multiplier = AF9033_ADC_MULTIPLIER_2X;
595         state->af9033_config[1].adc_multiplier = AF9033_ADC_MULTIPLIER_2X;
596         state->af9033_config[0].ts_mode = AF9033_TS_MODE_USB;
597         state->af9033_config[1].ts_mode = AF9033_TS_MODE_SERIAL;
598
599         /* eeprom memory mapped location */
600         if (state->chip_type == 0x9135) {
601                 if (state->chip_version == 0x02) {
602                         state->af9033_config[0].tuner = AF9033_TUNER_IT9135_60;
603                         state->af9033_config[1].tuner = AF9033_TUNER_IT9135_60;
604                         tmp16 = 0x00461d;
605                 } else {
606                         state->af9033_config[0].tuner = AF9033_TUNER_IT9135_38;
607                         state->af9033_config[1].tuner = AF9033_TUNER_IT9135_38;
608                         tmp16 = 0x00461b;
609                 }
610
611                 /* check if eeprom exists */
612                 ret = af9035_rd_reg(d, tmp16, &tmp);
613                 if (ret < 0)
614                         goto err;
615
616                 if (tmp == 0x00) {
617                         dev_dbg(&d->udev->dev, "%s: no eeprom\n", __func__);
618                         goto skip_eeprom;
619                 }
620         }
621
622         /* check if there is dual tuners */
623         ret = af9035_rd_reg(d, state->eeprom_addr + EEPROM_DUAL_MODE, &tmp);
624         if (ret < 0)
625                 goto err;
626
627         state->dual_mode = tmp;
628         dev_dbg(&d->udev->dev, "%s: dual mode=%d\n", __func__,
629                         state->dual_mode);
630
631         if (state->dual_mode) {
632                 /* read 2nd demodulator I2C address */
633                 ret = af9035_rd_reg(d,
634                                 state->eeprom_addr + EEPROM_2ND_DEMOD_ADDR,
635                                 &tmp);
636                 if (ret < 0)
637                         goto err;
638
639                 state->af9033_config[1].i2c_addr = tmp;
640                 dev_dbg(&d->udev->dev, "%s: 2nd demod I2C addr=%02x\n",
641                                 __func__, tmp);
642         }
643
644         addr = state->eeprom_addr;
645
646         for (i = 0; i < state->dual_mode + 1; i++) {
647                 /* tuner */
648                 ret = af9035_rd_reg(d, addr + EEPROM_1_TUNER_ID, &tmp);
649                 if (ret < 0)
650                         goto err;
651
652                 if (tmp == 0x00)
653                         dev_dbg(&d->udev->dev,
654                                         "%s: [%d]tuner not set, using default\n",
655                                         __func__, i);
656                 else
657                         state->af9033_config[i].tuner = tmp;
658
659                 dev_dbg(&d->udev->dev, "%s: [%d]tuner=%02x\n",
660                                 __func__, i, state->af9033_config[i].tuner);
661
662                 switch (state->af9033_config[i].tuner) {
663                 case AF9033_TUNER_TUA9001:
664                 case AF9033_TUNER_FC0011:
665                 case AF9033_TUNER_MXL5007T:
666                 case AF9033_TUNER_TDA18218:
667                 case AF9033_TUNER_FC2580:
668                 case AF9033_TUNER_FC0012:
669                         state->af9033_config[i].spec_inv = 1;
670                         break;
671                 case AF9033_TUNER_IT9135_38:
672                 case AF9033_TUNER_IT9135_51:
673                 case AF9033_TUNER_IT9135_52:
674                 case AF9033_TUNER_IT9135_60:
675                 case AF9033_TUNER_IT9135_61:
676                 case AF9033_TUNER_IT9135_62:
677                         break;
678                 default:
679                         dev_warn(&d->udev->dev,
680                                         "%s: tuner id=%02x not supported, please report!",
681                                         KBUILD_MODNAME, tmp);
682                 }
683
684                 /* disable dual mode if driver does not support it */
685                 if (i == 1)
686                         switch (state->af9033_config[i].tuner) {
687                         case AF9033_TUNER_FC0012:
688                         case AF9033_TUNER_IT9135_38:
689                         case AF9033_TUNER_IT9135_51:
690                         case AF9033_TUNER_IT9135_52:
691                         case AF9033_TUNER_IT9135_60:
692                         case AF9033_TUNER_IT9135_61:
693                         case AF9033_TUNER_IT9135_62:
694                         case AF9033_TUNER_MXL5007T:
695                                 break;
696                         default:
697                                 state->dual_mode = false;
698                                 dev_info(&d->udev->dev,
699                                                 "%s: driver does not support 2nd tuner and will disable it",
700                                                 KBUILD_MODNAME);
701                 }
702
703                 /* tuner IF frequency */
704                 ret = af9035_rd_reg(d, addr + EEPROM_1_IF_L, &tmp);
705                 if (ret < 0)
706                         goto err;
707
708                 tmp16 = tmp;
709
710                 ret = af9035_rd_reg(d, addr + EEPROM_1_IF_H, &tmp);
711                 if (ret < 0)
712                         goto err;
713
714                 tmp16 |= tmp << 8;
715
716                 dev_dbg(&d->udev->dev, "%s: [%d]IF=%d\n", __func__, i, tmp16);
717
718                 addr += 0x10; /* shift for the 2nd tuner params */
719         }
720
721 skip_eeprom:
722         /* get demod clock */
723         ret = af9035_rd_reg(d, 0x00d800, &tmp);
724         if (ret < 0)
725                 goto err;
726
727         tmp = (tmp >> 0) & 0x0f;
728
729         for (i = 0; i < ARRAY_SIZE(state->af9033_config); i++) {
730                 if (state->chip_type == 0x9135)
731                         state->af9033_config[i].clock = clock_lut_it9135[tmp];
732                 else
733                         state->af9033_config[i].clock = clock_lut_af9035[tmp];
734         }
735
736         return 0;
737
738 err:
739         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
740
741         return ret;
742 }
743
744 static int af9035_tua9001_tuner_callback(struct dvb_usb_device *d,
745                 int cmd, int arg)
746 {
747         int ret;
748         u8 val;
749
750         dev_dbg(&d->udev->dev, "%s: cmd=%d arg=%d\n", __func__, cmd, arg);
751
752         /*
753          * CEN     always enabled by hardware wiring
754          * RESETN  GPIOT3
755          * RXEN    GPIOT2
756          */
757
758         switch (cmd) {
759         case TUA9001_CMD_RESETN:
760                 if (arg)
761                         val = 0x00;
762                 else
763                         val = 0x01;
764
765                 ret = af9035_wr_reg_mask(d, 0x00d8e7, val, 0x01);
766                 if (ret < 0)
767                         goto err;
768                 break;
769         case TUA9001_CMD_RXEN:
770                 if (arg)
771                         val = 0x01;
772                 else
773                         val = 0x00;
774
775                 ret = af9035_wr_reg_mask(d, 0x00d8eb, val, 0x01);
776                 if (ret < 0)
777                         goto err;
778                 break;
779         }
780
781         return 0;
782
783 err:
784         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
785
786         return ret;
787 }
788
789
790 static int af9035_fc0011_tuner_callback(struct dvb_usb_device *d,
791                 int cmd, int arg)
792 {
793         int ret;
794
795         switch (cmd) {
796         case FC0011_FE_CALLBACK_POWER:
797                 /* Tuner enable */
798                 ret = af9035_wr_reg_mask(d, 0xd8eb, 1, 1);
799                 if (ret < 0)
800                         goto err;
801
802                 ret = af9035_wr_reg_mask(d, 0xd8ec, 1, 1);
803                 if (ret < 0)
804                         goto err;
805
806                 ret = af9035_wr_reg_mask(d, 0xd8ed, 1, 1);
807                 if (ret < 0)
808                         goto err;
809
810                 /* LED */
811                 ret = af9035_wr_reg_mask(d, 0xd8d0, 1, 1);
812                 if (ret < 0)
813                         goto err;
814
815                 ret = af9035_wr_reg_mask(d, 0xd8d1, 1, 1);
816                 if (ret < 0)
817                         goto err;
818
819                 usleep_range(10000, 50000);
820                 break;
821         case FC0011_FE_CALLBACK_RESET:
822                 ret = af9035_wr_reg(d, 0xd8e9, 1);
823                 if (ret < 0)
824                         goto err;
825
826                 ret = af9035_wr_reg(d, 0xd8e8, 1);
827                 if (ret < 0)
828                         goto err;
829
830                 ret = af9035_wr_reg(d, 0xd8e7, 1);
831                 if (ret < 0)
832                         goto err;
833
834                 usleep_range(10000, 20000);
835
836                 ret = af9035_wr_reg(d, 0xd8e7, 0);
837                 if (ret < 0)
838                         goto err;
839
840                 usleep_range(10000, 20000);
841                 break;
842         default:
843                 ret = -EINVAL;
844                 goto err;
845         }
846
847         return 0;
848
849 err:
850         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
851
852         return ret;
853 }
854
855 static int af9035_tuner_callback(struct dvb_usb_device *d, int cmd, int arg)
856 {
857         struct state *state = d_to_priv(d);
858
859         switch (state->af9033_config[0].tuner) {
860         case AF9033_TUNER_FC0011:
861                 return af9035_fc0011_tuner_callback(d, cmd, arg);
862         case AF9033_TUNER_TUA9001:
863                 return af9035_tua9001_tuner_callback(d, cmd, arg);
864         default:
865                 break;
866         }
867
868         return 0;
869 }
870
871 static int af9035_frontend_callback(void *adapter_priv, int component,
872                                     int cmd, int arg)
873 {
874         struct i2c_adapter *adap = adapter_priv;
875         struct dvb_usb_device *d = i2c_get_adapdata(adap);
876
877         dev_dbg(&d->udev->dev, "%s: component=%d cmd=%d arg=%d\n",
878                         __func__, component, cmd, arg);
879
880         switch (component) {
881         case DVB_FRONTEND_COMPONENT_TUNER:
882                 return af9035_tuner_callback(d, cmd, arg);
883         default:
884                 break;
885         }
886
887         return 0;
888 }
889
890 static int af9035_get_adapter_count(struct dvb_usb_device *d)
891 {
892         struct state *state = d_to_priv(d);
893
894         /* disable 2nd adapter as we don't have PID filters implemented */
895         if (d->udev->speed == USB_SPEED_FULL)
896                 return 1;
897         else
898                 return state->dual_mode + 1;
899 }
900
901 static int af9035_frontend_attach(struct dvb_usb_adapter *adap)
902 {
903         struct state *state = adap_to_priv(adap);
904         struct dvb_usb_device *d = adap_to_d(adap);
905         int ret;
906         dev_dbg(&d->udev->dev, "%s:\n", __func__);
907
908         if (!state->af9033_config[adap->id].tuner) {
909                 /* unsupported tuner */
910                 ret = -ENODEV;
911                 goto err;
912         }
913
914         /* attach demodulator */
915         adap->fe[0] = dvb_attach(af9033_attach, &state->af9033_config[adap->id],
916                         &d->i2c_adap);
917         if (adap->fe[0] == NULL) {
918                 ret = -ENODEV;
919                 goto err;
920         }
921
922         /* disable I2C-gate */
923         adap->fe[0]->ops.i2c_gate_ctrl = NULL;
924         adap->fe[0]->callback = af9035_frontend_callback;
925
926         return 0;
927
928 err:
929         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
930
931         return ret;
932 }
933
934 static struct tua9001_config af9035_tua9001_config = {
935         .i2c_addr = 0x60,
936 };
937
938 static const struct fc0011_config af9035_fc0011_config = {
939         .i2c_address = 0x60,
940 };
941
942 static struct mxl5007t_config af9035_mxl5007t_config[] = {
943         {
944                 .xtal_freq_hz = MxL_XTAL_24_MHZ,
945                 .if_freq_hz = MxL_IF_4_57_MHZ,
946                 .invert_if = 0,
947                 .loop_thru_enable = 0,
948                 .clk_out_enable = 0,
949                 .clk_out_amp = MxL_CLKOUT_AMP_0_94V,
950         }, {
951                 .xtal_freq_hz = MxL_XTAL_24_MHZ,
952                 .if_freq_hz = MxL_IF_4_57_MHZ,
953                 .invert_if = 0,
954                 .loop_thru_enable = 1,
955                 .clk_out_enable = 1,
956                 .clk_out_amp = MxL_CLKOUT_AMP_0_94V,
957         }
958 };
959
960 static struct tda18218_config af9035_tda18218_config = {
961         .i2c_address = 0x60,
962         .i2c_wr_max = 21,
963 };
964
965 static const struct fc2580_config af9035_fc2580_config = {
966         .i2c_addr = 0x56,
967         .clock = 16384000,
968 };
969
970 static const struct fc0012_config af9035_fc0012_config[] = {
971         {
972                 .i2c_address = 0x63,
973                 .xtal_freq = FC_XTAL_36_MHZ,
974                 .dual_master = true,
975                 .loop_through = true,
976                 .clock_out = true,
977         }, {
978                 .i2c_address = 0x63 | 0x80, /* I2C bus select hack */
979                 .xtal_freq = FC_XTAL_36_MHZ,
980                 .dual_master = true,
981         }
982 };
983
984 static int af9035_tuner_attach(struct dvb_usb_adapter *adap)
985 {
986         struct state *state = adap_to_priv(adap);
987         struct dvb_usb_device *d = adap_to_d(adap);
988         int ret;
989         struct dvb_frontend *fe;
990         struct i2c_msg msg[1];
991         u8 tuner_addr;
992         dev_dbg(&d->udev->dev, "%s:\n", __func__);
993
994         /*
995          * XXX: Hack used in that function: we abuse unused I2C address bit [7]
996          * to carry info about used I2C bus for dual tuner configuration.
997          */
998
999         switch (state->af9033_config[adap->id].tuner) {
1000         case AF9033_TUNER_TUA9001:
1001                 /* AF9035 gpiot3 = TUA9001 RESETN
1002                    AF9035 gpiot2 = TUA9001 RXEN */
1003
1004                 /* configure gpiot2 and gpiot2 as output */
1005                 ret = af9035_wr_reg_mask(d, 0x00d8ec, 0x01, 0x01);
1006                 if (ret < 0)
1007                         goto err;
1008
1009                 ret = af9035_wr_reg_mask(d, 0x00d8ed, 0x01, 0x01);
1010                 if (ret < 0)
1011                         goto err;
1012
1013                 ret = af9035_wr_reg_mask(d, 0x00d8e8, 0x01, 0x01);
1014                 if (ret < 0)
1015                         goto err;
1016
1017                 ret = af9035_wr_reg_mask(d, 0x00d8e9, 0x01, 0x01);
1018                 if (ret < 0)
1019                         goto err;
1020
1021                 /* attach tuner */
1022                 fe = dvb_attach(tua9001_attach, adap->fe[0],
1023                                 &d->i2c_adap, &af9035_tua9001_config);
1024                 break;
1025         case AF9033_TUNER_FC0011:
1026                 fe = dvb_attach(fc0011_attach, adap->fe[0],
1027                                 &d->i2c_adap, &af9035_fc0011_config);
1028                 break;
1029         case AF9033_TUNER_MXL5007T:
1030                 if (adap->id == 0) {
1031                         ret = af9035_wr_reg(d, 0x00d8e0, 1);
1032                         if (ret < 0)
1033                                 goto err;
1034
1035                         ret = af9035_wr_reg(d, 0x00d8e1, 1);
1036                         if (ret < 0)
1037                                 goto err;
1038
1039                         ret = af9035_wr_reg(d, 0x00d8df, 0);
1040                         if (ret < 0)
1041                                 goto err;
1042
1043                         msleep(30);
1044
1045                         ret = af9035_wr_reg(d, 0x00d8df, 1);
1046                         if (ret < 0)
1047                                 goto err;
1048
1049                         msleep(300);
1050
1051                         ret = af9035_wr_reg(d, 0x00d8c0, 1);
1052                         if (ret < 0)
1053                                 goto err;
1054
1055                         ret = af9035_wr_reg(d, 0x00d8c1, 1);
1056                         if (ret < 0)
1057                                 goto err;
1058
1059                         ret = af9035_wr_reg(d, 0x00d8bf, 0);
1060                         if (ret < 0)
1061                                 goto err;
1062
1063                         ret = af9035_wr_reg(d, 0x00d8b4, 1);
1064                         if (ret < 0)
1065                                 goto err;
1066
1067                         ret = af9035_wr_reg(d, 0x00d8b5, 1);
1068                         if (ret < 0)
1069                                 goto err;
1070
1071                         ret = af9035_wr_reg(d, 0x00d8b3, 1);
1072                         if (ret < 0)
1073                                 goto err;
1074
1075                         tuner_addr = 0x60;
1076                 } else {
1077                         tuner_addr = 0x60 | 0x80; /* I2C bus hack */
1078                 }
1079
1080                 /* attach tuner */
1081                 fe = dvb_attach(mxl5007t_attach, adap->fe[0], &d->i2c_adap,
1082                                 tuner_addr, &af9035_mxl5007t_config[adap->id]);
1083                 break;
1084         case AF9033_TUNER_TDA18218:
1085                 /* attach tuner */
1086                 fe = dvb_attach(tda18218_attach, adap->fe[0],
1087                                 &d->i2c_adap, &af9035_tda18218_config);
1088                 break;
1089         case AF9033_TUNER_FC2580:
1090                 /* Tuner enable using gpiot2_o, gpiot2_en and gpiot2_on  */
1091                 ret = af9035_wr_reg_mask(d, 0xd8eb, 0x01, 0x01);
1092                 if (ret < 0)
1093                         goto err;
1094
1095                 ret = af9035_wr_reg_mask(d, 0xd8ec, 0x01, 0x01);
1096                 if (ret < 0)
1097                         goto err;
1098
1099                 ret = af9035_wr_reg_mask(d, 0xd8ed, 0x01, 0x01);
1100                 if (ret < 0)
1101                         goto err;
1102
1103                 usleep_range(10000, 50000);
1104                 /* attach tuner */
1105                 fe = dvb_attach(fc2580_attach, adap->fe[0],
1106                                 &d->i2c_adap, &af9035_fc2580_config);
1107                 break;
1108         case AF9033_TUNER_FC0012:
1109                 /*
1110                  * AF9035 gpiot2 = FC0012 enable
1111                  * XXX: there seems to be something on gpioh8 too, but on my
1112                  * my test I didn't find any difference.
1113                  */
1114
1115                 if (adap->id == 0) {
1116                         /* configure gpiot2 as output and high */
1117                         ret = af9035_wr_reg_mask(d, 0xd8eb, 0x01, 0x01);
1118                         if (ret < 0)
1119                                 goto err;
1120
1121                         ret = af9035_wr_reg_mask(d, 0xd8ec, 0x01, 0x01);
1122                         if (ret < 0)
1123                                 goto err;
1124
1125                         ret = af9035_wr_reg_mask(d, 0xd8ed, 0x01, 0x01);
1126                         if (ret < 0)
1127                                 goto err;
1128                 } else {
1129                         /*
1130                          * FIXME: That belongs for the FC0012 driver.
1131                          * Write 02 to FC0012 master tuner register 0d directly
1132                          * in order to make slave tuner working.
1133                          */
1134                         msg[0].addr = 0x63;
1135                         msg[0].flags = 0;
1136                         msg[0].len = 2;
1137                         msg[0].buf = "\x0d\x02";
1138                         ret = i2c_transfer(&d->i2c_adap, msg, 1);
1139                         if (ret < 0)
1140                                 goto err;
1141                 }
1142
1143                 usleep_range(10000, 50000);
1144
1145                 fe = dvb_attach(fc0012_attach, adap->fe[0], &d->i2c_adap,
1146                                 &af9035_fc0012_config[adap->id]);
1147                 break;
1148         case AF9033_TUNER_IT9135_38:
1149         case AF9033_TUNER_IT9135_51:
1150         case AF9033_TUNER_IT9135_52:
1151         case AF9033_TUNER_IT9135_60:
1152         case AF9033_TUNER_IT9135_61:
1153         case AF9033_TUNER_IT9135_62:
1154                 /* attach tuner */
1155                 fe = dvb_attach(it913x_attach, adap->fe[0], &d->i2c_adap,
1156                                 state->af9033_config[adap->id].i2c_addr,
1157                                 state->af9033_config[0].tuner);
1158                 break;
1159         default:
1160                 fe = NULL;
1161         }
1162
1163         if (fe == NULL) {
1164                 ret = -ENODEV;
1165                 goto err;
1166         }
1167
1168         return 0;
1169
1170 err:
1171         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
1172
1173         return ret;
1174 }
1175
1176 static int af9035_init(struct dvb_usb_device *d)
1177 {
1178         struct state *state = d_to_priv(d);
1179         int ret, i;
1180         u16 frame_size = (d->udev->speed == USB_SPEED_FULL ? 5 : 87) * 188 / 4;
1181         u8 packet_size = (d->udev->speed == USB_SPEED_FULL ? 64 : 512) / 4;
1182         struct reg_val_mask tab[] = {
1183                 { 0x80f99d, 0x01, 0x01 },
1184                 { 0x80f9a4, 0x01, 0x01 },
1185                 { 0x00dd11, 0x00, 0x20 },
1186                 { 0x00dd11, 0x00, 0x40 },
1187                 { 0x00dd13, 0x00, 0x20 },
1188                 { 0x00dd13, 0x00, 0x40 },
1189                 { 0x00dd11, 0x20, 0x20 },
1190                 { 0x00dd88, (frame_size >> 0) & 0xff, 0xff},
1191                 { 0x00dd89, (frame_size >> 8) & 0xff, 0xff},
1192                 { 0x00dd0c, packet_size, 0xff},
1193                 { 0x00dd11, state->dual_mode << 6, 0x40 },
1194                 { 0x00dd8a, (frame_size >> 0) & 0xff, 0xff},
1195                 { 0x00dd8b, (frame_size >> 8) & 0xff, 0xff},
1196                 { 0x00dd0d, packet_size, 0xff },
1197                 { 0x80f9a3, state->dual_mode, 0x01 },
1198                 { 0x80f9cd, state->dual_mode, 0x01 },
1199                 { 0x80f99d, 0x00, 0x01 },
1200                 { 0x80f9a4, 0x00, 0x01 },
1201         };
1202
1203         dev_dbg(&d->udev->dev, "%s: USB speed=%d frame_size=%04x " \
1204                         "packet_size=%02x\n", __func__,
1205                         d->udev->speed, frame_size, packet_size);
1206
1207         /* init endpoints */
1208         for (i = 0; i < ARRAY_SIZE(tab); i++) {
1209                 ret = af9035_wr_reg_mask(d, tab[i].reg, tab[i].val,
1210                                 tab[i].mask);
1211                 if (ret < 0)
1212                         goto err;
1213         }
1214
1215         return 0;
1216
1217 err:
1218         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
1219
1220         return ret;
1221 }
1222
1223 #if IS_ENABLED(CONFIG_RC_CORE)
1224 static int af9035_rc_query(struct dvb_usb_device *d)
1225 {
1226         int ret;
1227         u32 key;
1228         u8 buf[4];
1229         struct usb_req req = { CMD_IR_GET, 0, 0, NULL, 4, buf };
1230
1231         ret = af9035_ctrl_msg(d, &req);
1232         if (ret == 1)
1233                 return 0;
1234         else if (ret < 0)
1235                 goto err;
1236
1237         if ((buf[2] + buf[3]) == 0xff) {
1238                 if ((buf[0] + buf[1]) == 0xff) {
1239                         /* NEC standard 16bit */
1240                         key = buf[0] << 8 | buf[2];
1241                 } else {
1242                         /* NEC extended 24bit */
1243                         key = buf[0] << 16 | buf[1] << 8 | buf[2];
1244                 }
1245         } else {
1246                 /* NEC full code 32bit */
1247                 key = buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3];
1248         }
1249
1250         dev_dbg(&d->udev->dev, "%s: %*ph\n", __func__, 4, buf);
1251
1252         rc_keydown(d->rc_dev, key, 0);
1253
1254         return 0;
1255
1256 err:
1257         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
1258
1259         return ret;
1260 }
1261
1262 static int af9035_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
1263 {
1264         struct state *state = d_to_priv(d);
1265         int ret;
1266         u8 tmp;
1267
1268         ret = af9035_rd_reg(d, state->eeprom_addr + EEPROM_IR_MODE, &tmp);
1269         if (ret < 0)
1270                 goto err;
1271
1272         dev_dbg(&d->udev->dev, "%s: ir_mode=%02x\n", __func__, tmp);
1273
1274         /* don't activate rc if in HID mode or if not available */
1275         if (tmp == 5) {
1276                 ret = af9035_rd_reg(d, state->eeprom_addr + EEPROM_IR_TYPE,
1277                                 &tmp);
1278                 if (ret < 0)
1279                         goto err;
1280
1281                 dev_dbg(&d->udev->dev, "%s: ir_type=%02x\n", __func__, tmp);
1282
1283                 switch (tmp) {
1284                 case 0: /* NEC */
1285                 default:
1286                         rc->allowed_protos = RC_BIT_NEC;
1287                         break;
1288                 case 1: /* RC6 */
1289                         rc->allowed_protos = RC_BIT_RC6_MCE;
1290                         break;
1291                 }
1292
1293                 rc->query = af9035_rc_query;
1294                 rc->interval = 500;
1295
1296                 /* load empty to enable rc */
1297                 if (!rc->map_name)
1298                         rc->map_name = RC_MAP_EMPTY;
1299         }
1300
1301         return 0;
1302
1303 err:
1304         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
1305
1306         return ret;
1307 }
1308 #else
1309         #define af9035_get_rc_config NULL
1310 #endif
1311
1312 static int af9035_get_stream_config(struct dvb_frontend *fe, u8 *ts_type,
1313                 struct usb_data_stream_properties *stream)
1314 {
1315         struct dvb_usb_device *d = fe_to_d(fe);
1316         dev_dbg(&d->udev->dev, "%s: adap=%d\n", __func__, fe_to_adap(fe)->id);
1317
1318         if (d->udev->speed == USB_SPEED_FULL)
1319                 stream->u.bulk.buffersize = 5 * 188;
1320
1321         return 0;
1322 }
1323
1324 /*
1325  * FIXME: PID filter is property of demodulator and should be moved to the
1326  * correct driver. Also we support only adapter #0 PID filter and will
1327  * disable adapter #1 if USB1.1 is used.
1328  */
1329 static int af9035_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
1330 {
1331         struct dvb_usb_device *d = adap_to_d(adap);
1332         int ret;
1333
1334         dev_dbg(&d->udev->dev, "%s: onoff=%d\n", __func__, onoff);
1335
1336         ret = af9035_wr_reg_mask(d, 0x80f993, onoff, 0x01);
1337         if (ret < 0)
1338                 goto err;
1339
1340         return 0;
1341
1342 err:
1343         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
1344
1345         return ret;
1346 }
1347
1348 static int af9035_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
1349                 int onoff)
1350 {
1351         struct dvb_usb_device *d = adap_to_d(adap);
1352         int ret;
1353         u8 wbuf[2] = {(pid >> 0) & 0xff, (pid >> 8) & 0xff};
1354
1355         dev_dbg(&d->udev->dev, "%s: index=%d pid=%04x onoff=%d\n",
1356                         __func__, index, pid, onoff);
1357
1358         ret = af9035_wr_regs(d, 0x80f996, wbuf, 2);
1359         if (ret < 0)
1360                 goto err;
1361
1362         ret = af9035_wr_reg(d, 0x80f994, onoff);
1363         if (ret < 0)
1364                 goto err;
1365
1366         ret = af9035_wr_reg(d, 0x80f995, index);
1367         if (ret < 0)
1368                 goto err;
1369
1370         return 0;
1371
1372 err:
1373         dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
1374
1375         return ret;
1376 }
1377
1378 static int af9035_probe(struct usb_interface *intf,
1379                 const struct usb_device_id *id)
1380 {
1381         struct usb_device *udev = interface_to_usbdev(intf);
1382         char manufacturer[sizeof("Afatech")];
1383
1384         memset(manufacturer, 0, sizeof(manufacturer));
1385         usb_string(udev, udev->descriptor.iManufacturer,
1386                         manufacturer, sizeof(manufacturer));
1387         /*
1388          * There is two devices having same ID but different chipset. One uses
1389          * AF9015 and the other IT9135 chipset. Only difference seen on lsusb
1390          * is iManufacturer string.
1391          *
1392          * idVendor           0x0ccd TerraTec Electronic GmbH
1393          * idProduct          0x0099
1394          * bcdDevice            2.00
1395          * iManufacturer           1 Afatech
1396          * iProduct                2 DVB-T 2
1397          *
1398          * idVendor           0x0ccd TerraTec Electronic GmbH
1399          * idProduct          0x0099
1400          * bcdDevice            2.00
1401          * iManufacturer           1 ITE Technologies, Inc.
1402          * iProduct                2 DVB-T TV Stick
1403          */
1404         if ((le16_to_cpu(udev->descriptor.idVendor) == USB_VID_TERRATEC) &&
1405                         (le16_to_cpu(udev->descriptor.idProduct) == 0x0099)) {
1406                 if (!strcmp("Afatech", manufacturer)) {
1407                         dev_dbg(&udev->dev, "%s: rejecting device\n", __func__);
1408                         return -ENODEV;
1409                 }
1410         }
1411
1412         return dvb_usbv2_probe(intf, id);
1413 }
1414
1415 /* interface 0 is used by DVB-T receiver and
1416    interface 1 is for remote controller (HID) */
1417 static const struct dvb_usb_device_properties af9035_props = {
1418         .driver_name = KBUILD_MODNAME,
1419         .owner = THIS_MODULE,
1420         .adapter_nr = adapter_nr,
1421         .size_of_priv = sizeof(struct state),
1422
1423         .generic_bulk_ctrl_endpoint = 0x02,
1424         .generic_bulk_ctrl_endpoint_response = 0x81,
1425
1426         .identify_state = af9035_identify_state,
1427         .download_firmware = af9035_download_firmware,
1428
1429         .i2c_algo = &af9035_i2c_algo,
1430         .read_config = af9035_read_config,
1431         .frontend_attach = af9035_frontend_attach,
1432         .tuner_attach = af9035_tuner_attach,
1433         .init = af9035_init,
1434         .get_rc_config = af9035_get_rc_config,
1435         .get_stream_config = af9035_get_stream_config,
1436
1437         .get_adapter_count = af9035_get_adapter_count,
1438         .adapter = {
1439                 {
1440                         .caps = DVB_USB_ADAP_HAS_PID_FILTER |
1441                                 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
1442
1443                         .pid_filter_count = 32,
1444                         .pid_filter_ctrl = af9035_pid_filter_ctrl,
1445                         .pid_filter = af9035_pid_filter,
1446
1447                         .stream = DVB_USB_STREAM_BULK(0x84, 6, 87 * 188),
1448                 }, {
1449                         .stream = DVB_USB_STREAM_BULK(0x85, 6, 87 * 188),
1450                 },
1451         },
1452 };
1453
1454 static const struct usb_device_id af9035_id_table[] = {
1455         /* AF9035 devices */
1456         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_9035,
1457                 &af9035_props, "Afatech AF9035 reference design", NULL) },
1458         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_1000,
1459                 &af9035_props, "Afatech AF9035 reference design", NULL) },
1460         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_1001,
1461                 &af9035_props, "Afatech AF9035 reference design", NULL) },
1462         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_1002,
1463                 &af9035_props, "Afatech AF9035 reference design", NULL) },
1464         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9035_1003,
1465                 &af9035_props, "Afatech AF9035 reference design", NULL) },
1466         { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK,
1467                 &af9035_props, "TerraTec Cinergy T Stick", NULL) },
1468         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A835,
1469                 &af9035_props, "AVerMedia AVerTV Volar HD/PRO (A835)", NULL) },
1470         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_B835,
1471                 &af9035_props, "AVerMedia AVerTV Volar HD/PRO (A835)", NULL) },
1472         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_1867,
1473                 &af9035_props, "AVerMedia HD Volar (A867)", NULL) },
1474         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A867,
1475                 &af9035_props, "AVerMedia HD Volar (A867)", NULL) },
1476         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_TWINSTAR,
1477                 &af9035_props, "AVerMedia Twinstar (A825)", NULL) },
1478         { DVB_USB_DEVICE(USB_VID_ASUS, USB_PID_ASUS_U3100MINI_PLUS,
1479                 &af9035_props, "Asus U3100Mini Plus", NULL) },
1480         { DVB_USB_DEVICE(USB_VID_TERRATEC, 0x00aa,
1481                 &af9035_props, "TerraTec Cinergy T Stick (rev. 2)", NULL) },
1482         /* IT9135 devices */
1483 #if 0
1484         { DVB_USB_DEVICE(0x048d, 0x9135,
1485                 &af9035_props, "IT9135 reference design", NULL) },
1486         { DVB_USB_DEVICE(0x048d, 0x9006,
1487                 &af9035_props, "IT9135 reference design", NULL) },
1488 #endif
1489         /* XXX: that same ID [0ccd:0099] is used by af9015 driver too */
1490         { DVB_USB_DEVICE(USB_VID_TERRATEC, 0x0099,
1491                 &af9035_props, "TerraTec Cinergy T Stick Dual RC (rev. 2)", NULL) },
1492         { }
1493 };
1494 MODULE_DEVICE_TABLE(usb, af9035_id_table);
1495
1496 static struct usb_driver af9035_usb_driver = {
1497         .name = KBUILD_MODNAME,
1498         .id_table = af9035_id_table,
1499         .probe = af9035_probe,
1500         .disconnect = dvb_usbv2_disconnect,
1501         .suspend = dvb_usbv2_suspend,
1502         .resume = dvb_usbv2_resume,
1503         .reset_resume = dvb_usbv2_reset_resume,
1504         .no_dynamic_id = 1,
1505         .soft_unbind = 1,
1506 };
1507
1508 module_usb_driver(af9035_usb_driver);
1509
1510 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1511 MODULE_DESCRIPTION("Afatech AF9035 driver");
1512 MODULE_LICENSE("GPL");
1513 MODULE_FIRMWARE(AF9035_FIRMWARE_AF9035);
1514 MODULE_FIRMWARE(AF9035_FIRMWARE_IT9135_V1);
1515 MODULE_FIRMWARE(AF9035_FIRMWARE_IT9135_V2);