Version:  2.0.40 2.2.26 2.4.37 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17

Linux/drivers/media/usb/dvb-usb-v2/af9015.c

  1 /*
  2  * DVB USB Linux driver for Afatech AF9015 DVB-T USB2.0 receiver
  3  *
  4  * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
  5  *
  6  * Thanks to Afatech who kindly provided information.
  7  *
  8  *    This program is free software; you can redistribute it and/or modify
  9  *    it under the terms of the GNU General Public License as published by
 10  *    the Free Software Foundation; either version 2 of the License, or
 11  *    (at your option) any later version.
 12  *
 13  *    This program is distributed in the hope that it will be useful,
 14  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 15  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 16  *    GNU General Public License for more details.
 17  *
 18  *    You should have received a copy of the GNU General Public License
 19  *    along with this program; if not, write to the Free Software
 20  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 21  *
 22  */
 23 
 24 #include "af9015.h"
 25 
 26 static int dvb_usb_af9015_remote;
 27 module_param_named(remote, dvb_usb_af9015_remote, int, 0644);
 28 MODULE_PARM_DESC(remote, "select remote");
 29 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
 30 
 31 static int af9015_ctrl_msg(struct dvb_usb_device *d, struct req_t *req)
 32 {
 33 #define REQ_HDR_LEN 8 /* send header size */
 34 #define ACK_HDR_LEN 2 /* rece header size */
 35         struct af9015_state *state = d_to_priv(d);
 36         int ret, wlen, rlen;
 37         u8 write = 1;
 38 
 39         mutex_lock(&d->usb_mutex);
 40 
 41         state->buf[0] = req->cmd;
 42         state->buf[1] = state->seq++;
 43         state->buf[2] = req->i2c_addr;
 44         state->buf[3] = req->addr >> 8;
 45         state->buf[4] = req->addr & 0xff;
 46         state->buf[5] = req->mbox;
 47         state->buf[6] = req->addr_len;
 48         state->buf[7] = req->data_len;
 49 
 50         switch (req->cmd) {
 51         case GET_CONFIG:
 52         case READ_MEMORY:
 53         case RECONNECT_USB:
 54                 write = 0;
 55                 break;
 56         case READ_I2C:
 57                 write = 0;
 58                 state->buf[2] |= 0x01; /* set I2C direction */
 59         case WRITE_I2C:
 60                 state->buf[0] = READ_WRITE_I2C;
 61                 break;
 62         case WRITE_MEMORY:
 63                 if (((req->addr & 0xff00) == 0xff00) ||
 64                     ((req->addr & 0xff00) == 0xae00))
 65                         state->buf[0] = WRITE_VIRTUAL_MEMORY;
 66         case WRITE_VIRTUAL_MEMORY:
 67         case COPY_FIRMWARE:
 68         case DOWNLOAD_FIRMWARE:
 69         case BOOT:
 70                 break;
 71         default:
 72                 dev_err(&d->udev->dev, "%s: unknown command=%d\n",
 73                                 KBUILD_MODNAME, req->cmd);
 74                 ret = -EIO;
 75                 goto error;
 76         }
 77 
 78         /* buffer overflow check */
 79         if ((write && (req->data_len > BUF_LEN - REQ_HDR_LEN)) ||
 80                         (!write && (req->data_len > BUF_LEN - ACK_HDR_LEN))) {
 81                 dev_err(&d->udev->dev, "%s: too much data; cmd=%d len=%d\n",
 82                                 KBUILD_MODNAME, req->cmd, req->data_len);
 83                 ret = -EINVAL;
 84                 goto error;
 85         }
 86 
 87         /* write receives seq + status = 2 bytes
 88            read receives seq + status + data = 2 + N bytes */
 89         wlen = REQ_HDR_LEN;
 90         rlen = ACK_HDR_LEN;
 91         if (write) {
 92                 wlen += req->data_len;
 93                 memcpy(&state->buf[REQ_HDR_LEN], req->data, req->data_len);
 94         } else {
 95                 rlen += req->data_len;
 96         }
 97 
 98         /* no ack for these packets */
 99         if (req->cmd == DOWNLOAD_FIRMWARE || req->cmd == RECONNECT_USB)
100                 rlen = 0;
101 
102         ret = dvb_usbv2_generic_rw_locked(d,
103                         state->buf, wlen, state->buf, rlen);
104         if (ret)
105                 goto error;
106 
107         /* check status */
108         if (rlen && state->buf[1]) {
109                 dev_err(&d->udev->dev, "%s: command failed=%d\n",
110                                 KBUILD_MODNAME, state->buf[1]);
111                 ret = -EIO;
112                 goto error;
113         }
114 
115         /* read request, copy returned data to return buf */
116         if (!write)
117                 memcpy(req->data, &state->buf[ACK_HDR_LEN], req->data_len);
118 error:
119         mutex_unlock(&d->usb_mutex);
120 
121         return ret;
122 }
123 
124 static int af9015_write_regs(struct dvb_usb_device *d, u16 addr, u8 *val,
125         u8 len)
126 {
127         struct req_t req = {WRITE_MEMORY, AF9015_I2C_DEMOD, addr, 0, 0, len,
128                 val};
129         return af9015_ctrl_msg(d, &req);
130 }
131 
132 static int af9015_read_regs(struct dvb_usb_device *d, u16 addr, u8 *val, u8 len)
133 {
134         struct req_t req = {READ_MEMORY, AF9015_I2C_DEMOD, addr, 0, 0, len,
135                 val};
136         return af9015_ctrl_msg(d, &req);
137 }
138 
139 static int af9015_write_reg(struct dvb_usb_device *d, u16 addr, u8 val)
140 {
141         return af9015_write_regs(d, addr, &val, 1);
142 }
143 
144 static int af9015_read_reg(struct dvb_usb_device *d, u16 addr, u8 *val)
145 {
146         return af9015_read_regs(d, addr, val, 1);
147 }
148 
149 static int af9015_write_reg_i2c(struct dvb_usb_device *d, u8 addr, u16 reg,
150         u8 val)
151 {
152         struct af9015_state *state = d_to_priv(d);
153         struct req_t req = {WRITE_I2C, addr, reg, 1, 1, 1, &val};
154 
155         if (addr == state->af9013_config[0].i2c_addr ||
156             addr == state->af9013_config[1].i2c_addr)
157                 req.addr_len = 3;
158 
159         return af9015_ctrl_msg(d, &req);
160 }
161 
162 static int af9015_read_reg_i2c(struct dvb_usb_device *d, u8 addr, u16 reg,
163         u8 *val)
164 {
165         struct af9015_state *state = d_to_priv(d);
166         struct req_t req = {READ_I2C, addr, reg, 0, 1, 1, val};
167 
168         if (addr == state->af9013_config[0].i2c_addr ||
169             addr == state->af9013_config[1].i2c_addr)
170                 req.addr_len = 3;
171 
172         return af9015_ctrl_msg(d, &req);
173 }
174 
175 static int af9015_do_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit, u8 op)
176 {
177         int ret;
178         u8 val, mask = 0x01;
179 
180         ret = af9015_read_reg(d, addr, &val);
181         if (ret)
182                 return ret;
183 
184         mask <<= bit;
185         if (op) {
186                 /* set bit */
187                 val |= mask;
188         } else {
189                 /* clear bit */
190                 mask ^= 0xff;
191                 val &= mask;
192         }
193 
194         return af9015_write_reg(d, addr, val);
195 }
196 
197 static int af9015_set_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit)
198 {
199         return af9015_do_reg_bit(d, addr, bit, 1);
200 }
201 
202 static int af9015_clear_reg_bit(struct dvb_usb_device *d, u16 addr, u8 bit)
203 {
204         return af9015_do_reg_bit(d, addr, bit, 0);
205 }
206 
207 static int af9015_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
208         int num)
209 {
210         struct dvb_usb_device *d = i2c_get_adapdata(adap);
211         struct af9015_state *state = d_to_priv(d);
212         int ret = 0, i = 0;
213         u16 addr;
214         u8 uninitialized_var(mbox), addr_len;
215         struct req_t req;
216 
217 /*
218 The bus lock is needed because there is two tuners both using same I2C-address.
219 Due to that the only way to select correct tuner is use demodulator I2C-gate.
220 
221 ................................................
222 . AF9015 includes integrated AF9013 demodulator.
223 . ____________                   ____________  .                ____________
224 .|     uC     |                 |   demod    | .               |    tuner   |
225 .|------------|                 |------------| .               |------------|
226 .|   AF9015   |                 |  AF9013/5  | .               |   MXL5003  |
227 .|            |--+----I2C-------|-----/ -----|-.-----I2C-------|            |
228 .|            |  |              | addr 0x38  | .               |  addr 0xc6 |
229 .|____________|  |              |____________| .               |____________|
230 .................|..............................
231                  |               ____________                   ____________
232                  |              |   demod    |                 |    tuner   |
233                  |              |------------|                 |------------|
234                  |              |   AF9013   |                 |   MXL5003  |
235                  +----I2C-------|-----/ -----|-------I2C-------|            |
236                                 | addr 0x3a  |                 |  addr 0xc6 |
237                                 |____________|                 |____________|
238 */
239         if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
240                 return -EAGAIN;
241 
242         while (i < num) {
243                 if (msg[i].addr == state->af9013_config[0].i2c_addr ||
244                     msg[i].addr == state->af9013_config[1].i2c_addr) {
245                         addr = msg[i].buf[0] << 8;
246                         addr += msg[i].buf[1];
247                         mbox = msg[i].buf[2];
248                         addr_len = 3;
249                 } else {
250                         addr = msg[i].buf[0];
251                         addr_len = 1;
252                         /* mbox is don't care in that case */
253                 }
254 
255                 if (num > i + 1 && (msg[i+1].flags & I2C_M_RD)) {
256                         if (msg[i].len > 3 || msg[i+1].len > 61) {
257                                 ret = -EOPNOTSUPP;
258                                 goto error;
259                         }
260                         if (msg[i].addr == state->af9013_config[0].i2c_addr)
261                                 req.cmd = READ_MEMORY;
262                         else
263                                 req.cmd = READ_I2C;
264                         req.i2c_addr = msg[i].addr;
265                         req.addr = addr;
266                         req.mbox = mbox;
267                         req.addr_len = addr_len;
268                         req.data_len = msg[i+1].len;
269                         req.data = &msg[i+1].buf[0];
270                         ret = af9015_ctrl_msg(d, &req);
271                         i += 2;
272                 } else if (msg[i].flags & I2C_M_RD) {
273                         if (msg[i].len > 61) {
274                                 ret = -EOPNOTSUPP;
275                                 goto error;
276                         }
277                         if (msg[i].addr == state->af9013_config[0].i2c_addr) {
278                                 ret = -EINVAL;
279                                 goto error;
280                         }
281                         req.cmd = READ_I2C;
282                         req.i2c_addr = msg[i].addr;
283                         req.addr = addr;
284                         req.mbox = mbox;
285                         req.addr_len = addr_len;
286                         req.data_len = msg[i].len;
287                         req.data = &msg[i].buf[0];
288                         ret = af9015_ctrl_msg(d, &req);
289                         i += 1;
290                 } else {
291                         if (msg[i].len > 21) {
292                                 ret = -EOPNOTSUPP;
293                                 goto error;
294                         }
295                         if (msg[i].addr == state->af9013_config[0].i2c_addr)
296                                 req.cmd = WRITE_MEMORY;
297                         else
298                                 req.cmd = WRITE_I2C;
299                         req.i2c_addr = msg[i].addr;
300                         req.addr = addr;
301                         req.mbox = mbox;
302                         req.addr_len = addr_len;
303                         req.data_len = msg[i].len-addr_len;
304                         req.data = &msg[i].buf[addr_len];
305                         ret = af9015_ctrl_msg(d, &req);
306                         i += 1;
307                 }
308                 if (ret)
309                         goto error;
310 
311         }
312         ret = i;
313 
314 error:
315         mutex_unlock(&d->i2c_mutex);
316 
317         return ret;
318 }
319 
320 static u32 af9015_i2c_func(struct i2c_adapter *adapter)
321 {
322         return I2C_FUNC_I2C;
323 }
324 
325 static struct i2c_algorithm af9015_i2c_algo = {
326         .master_xfer = af9015_i2c_xfer,
327         .functionality = af9015_i2c_func,
328 };
329 
330 static int af9015_identify_state(struct dvb_usb_device *d, const char **name)
331 {
332         int ret;
333         u8 reply;
334         struct req_t req = {GET_CONFIG, 0, 0, 0, 0, 1, &reply};
335 
336         ret = af9015_ctrl_msg(d, &req);
337         if (ret)
338                 return ret;
339 
340         dev_dbg(&d->udev->dev, "%s: reply=%02x\n", __func__, reply);
341 
342         if (reply == 0x02)
343                 ret = WARM;
344         else
345                 ret = COLD;
346 
347         return ret;
348 }
349 
350 static int af9015_download_firmware(struct dvb_usb_device *d,
351         const struct firmware *fw)
352 {
353         struct af9015_state *state = d_to_priv(d);
354         int i, len, remaining, ret;
355         struct req_t req = {DOWNLOAD_FIRMWARE, 0, 0, 0, 0, 0, NULL};
356         u16 checksum = 0;
357         dev_dbg(&d->udev->dev, "%s:\n", __func__);
358 
359         /* calc checksum */
360         for (i = 0; i < fw->size; i++)
361                 checksum += fw->data[i];
362 
363         state->firmware_size = fw->size;
364         state->firmware_checksum = checksum;
365 
366         #define FW_ADDR 0x5100 /* firmware start address */
367         #define LEN_MAX 55 /* max packet size */
368         for (remaining = fw->size; remaining > 0; remaining -= LEN_MAX) {
369                 len = remaining;
370                 if (len > LEN_MAX)
371                         len = LEN_MAX;
372 
373                 req.data_len = len;
374                 req.data = (u8 *) &fw->data[fw->size - remaining];
375                 req.addr = FW_ADDR + fw->size - remaining;
376 
377                 ret = af9015_ctrl_msg(d, &req);
378                 if (ret) {
379                         dev_err(&d->udev->dev,
380                                         "%s: firmware download failed=%d\n",
381                                         KBUILD_MODNAME, ret);
382                         goto error;
383                 }
384         }
385 
386         /* firmware loaded, request boot */
387         req.cmd = BOOT;
388         req.data_len = 0;
389         ret = af9015_ctrl_msg(d, &req);
390         if (ret) {
391                 dev_err(&d->udev->dev, "%s: firmware boot failed=%d\n",
392                                 KBUILD_MODNAME, ret);
393                 goto error;
394         }
395 
396 error:
397         return ret;
398 }
399 
400 #define AF9015_EEPROM_SIZE 256
401 
402 /* hash (and dump) eeprom */
403 static int af9015_eeprom_hash(struct dvb_usb_device *d)
404 {
405         struct af9015_state *state = d_to_priv(d);
406         int ret, i;
407         u8 buf[AF9015_EEPROM_SIZE];
408         struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, NULL};
409 
410         /* read eeprom */
411         for (i = 0; i < AF9015_EEPROM_SIZE; i++) {
412                 req.addr = i;
413                 req.data = &buf[i];
414                 ret = af9015_ctrl_msg(d, &req);
415                 if (ret < 0)
416                         goto err;
417         }
418 
419         /* calculate checksum */
420         for (i = 0; i < AF9015_EEPROM_SIZE / sizeof(u32); i++) {
421                 state->eeprom_sum *= GOLDEN_RATIO_PRIME_32;
422                 state->eeprom_sum += le32_to_cpu(((u32 *)buf)[i]);
423         }
424 
425         for (i = 0; i < AF9015_EEPROM_SIZE; i += 16)
426                 dev_dbg(&d->udev->dev, "%s: %*ph\n", __func__, 16, buf + i);
427 
428         dev_dbg(&d->udev->dev, "%s: eeprom sum=%.8x\n",
429                         __func__, state->eeprom_sum);
430         return 0;
431 err:
432         dev_err(&d->udev->dev, "%s: eeprom failed=%d\n", KBUILD_MODNAME, ret);
433         return ret;
434 }
435 
436 static int af9015_read_config(struct dvb_usb_device *d)
437 {
438         struct af9015_state *state = d_to_priv(d);
439         int ret;
440         u8 val, i, offset = 0;
441         struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, &val};
442 
443         dev_dbg(&d->udev->dev, "%s:\n", __func__);
444 
445         /* IR remote controller */
446         req.addr = AF9015_EEPROM_IR_MODE;
447         /* first message will timeout often due to possible hw bug */
448         for (i = 0; i < 4; i++) {
449                 ret = af9015_ctrl_msg(d, &req);
450                 if (!ret)
451                         break;
452         }
453         if (ret)
454                 goto error;
455 
456         ret = af9015_eeprom_hash(d);
457         if (ret)
458                 goto error;
459 
460         state->ir_mode = val;
461         dev_dbg(&d->udev->dev, "%s: IR mode=%d\n", __func__, val);
462 
463         /* TS mode - one or two receivers */
464         req.addr = AF9015_EEPROM_TS_MODE;
465         ret = af9015_ctrl_msg(d, &req);
466         if (ret)
467                 goto error;
468 
469         state->dual_mode = val;
470         dev_dbg(&d->udev->dev, "%s: TS mode=%d\n", __func__, state->dual_mode);
471 
472         /* disable 2nd adapter because we don't have PID-filters */
473         if (d->udev->speed == USB_SPEED_FULL)
474                 state->dual_mode = 0;
475 
476         if (state->dual_mode) {
477                 /* read 2nd demodulator I2C address */
478                 req.addr = AF9015_EEPROM_DEMOD2_I2C;
479                 ret = af9015_ctrl_msg(d, &req);
480                 if (ret)
481                         goto error;
482 
483                 state->af9013_config[1].i2c_addr = val;
484         }
485 
486         for (i = 0; i < state->dual_mode + 1; i++) {
487                 if (i == 1)
488                         offset = AF9015_EEPROM_OFFSET;
489                 /* xtal */
490                 req.addr = AF9015_EEPROM_XTAL_TYPE1 + offset;
491                 ret = af9015_ctrl_msg(d, &req);
492                 if (ret)
493                         goto error;
494                 switch (val) {
495                 case 0:
496                         state->af9013_config[i].clock = 28800000;
497                         break;
498                 case 1:
499                         state->af9013_config[i].clock = 20480000;
500                         break;
501                 case 2:
502                         state->af9013_config[i].clock = 28000000;
503                         break;
504                 case 3:
505                         state->af9013_config[i].clock = 25000000;
506                         break;
507                 }
508                 dev_dbg(&d->udev->dev, "%s: [%d] xtal=%d set clock=%d\n",
509                                 __func__, i, val,
510                                 state->af9013_config[i].clock);
511 
512                 /* IF frequency */
513                 req.addr = AF9015_EEPROM_IF1H + offset;
514                 ret = af9015_ctrl_msg(d, &req);
515                 if (ret)
516                         goto error;
517 
518                 state->af9013_config[i].if_frequency = val << 8;
519 
520                 req.addr = AF9015_EEPROM_IF1L + offset;
521                 ret = af9015_ctrl_msg(d, &req);
522                 if (ret)
523                         goto error;
524 
525                 state->af9013_config[i].if_frequency += val;
526                 state->af9013_config[i].if_frequency *= 1000;
527                 dev_dbg(&d->udev->dev, "%s: [%d] IF frequency=%d\n", __func__,
528                                 i, state->af9013_config[i].if_frequency);
529 
530                 /* MT2060 IF1 */
531                 req.addr = AF9015_EEPROM_MT2060_IF1H  + offset;
532                 ret = af9015_ctrl_msg(d, &req);
533                 if (ret)
534                         goto error;
535                 state->mt2060_if1[i] = val << 8;
536                 req.addr = AF9015_EEPROM_MT2060_IF1L + offset;
537                 ret = af9015_ctrl_msg(d, &req);
538                 if (ret)
539                         goto error;
540                 state->mt2060_if1[i] += val;
541                 dev_dbg(&d->udev->dev, "%s: [%d] MT2060 IF1=%d\n", __func__, i,
542                                 state->mt2060_if1[i]);
543 
544                 /* tuner */
545                 req.addr =  AF9015_EEPROM_TUNER_ID1 + offset;
546                 ret = af9015_ctrl_msg(d, &req);
547                 if (ret)
548                         goto error;
549                 switch (val) {
550                 case AF9013_TUNER_ENV77H11D5:
551                 case AF9013_TUNER_MT2060:
552                 case AF9013_TUNER_QT1010:
553                 case AF9013_TUNER_UNKNOWN:
554                 case AF9013_TUNER_MT2060_2:
555                 case AF9013_TUNER_TDA18271:
556                 case AF9013_TUNER_QT1010A:
557                 case AF9013_TUNER_TDA18218:
558                         state->af9013_config[i].spec_inv = 1;
559                         break;
560                 case AF9013_TUNER_MXL5003D:
561                 case AF9013_TUNER_MXL5005D:
562                 case AF9013_TUNER_MXL5005R:
563                 case AF9013_TUNER_MXL5007T:
564                         state->af9013_config[i].spec_inv = 0;
565                         break;
566                 case AF9013_TUNER_MC44S803:
567                         state->af9013_config[i].gpio[1] = AF9013_GPIO_LO;
568                         state->af9013_config[i].spec_inv = 1;
569                         break;
570                 default:
571                         dev_err(&d->udev->dev, "%s: tuner id=%d not " \
572                                         "supported, please report!\n",
573                                         KBUILD_MODNAME, val);
574                         return -ENODEV;
575                 }
576 
577                 state->af9013_config[i].tuner = val;
578                 dev_dbg(&d->udev->dev, "%s: [%d] tuner id=%d\n",
579                                 __func__, i, val);
580         }
581 
582 error:
583         if (ret)
584                 dev_err(&d->udev->dev, "%s: eeprom read failed=%d\n",
585                                 KBUILD_MODNAME, ret);
586 
587         /* AverMedia AVerTV Volar Black HD (A850) device have bad EEPROM
588            content :-( Override some wrong values here. Ditto for the
589            AVerTV Red HD+ (A850T) device. */
590         if (le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_AVERMEDIA &&
591                 ((le16_to_cpu(d->udev->descriptor.idProduct) ==
592                         USB_PID_AVERMEDIA_A850) ||
593                 (le16_to_cpu(d->udev->descriptor.idProduct) ==
594                         USB_PID_AVERMEDIA_A850T))) {
595                 dev_dbg(&d->udev->dev,
596                                 "%s: AverMedia A850: overriding config\n",
597                                 __func__);
598                 /* disable dual mode */
599                 state->dual_mode = 0;
600 
601                 /* set correct IF */
602                 state->af9013_config[0].if_frequency = 4570000;
603         }
604 
605         return ret;
606 }
607 
608 static int af9015_get_stream_config(struct dvb_frontend *fe, u8 *ts_type,
609                 struct usb_data_stream_properties *stream)
610 {
611         struct dvb_usb_device *d = fe_to_d(fe);
612         dev_dbg(&d->udev->dev, "%s: adap=%d\n", __func__, fe_to_adap(fe)->id);
613 
614         if (d->udev->speed == USB_SPEED_FULL)
615                 stream->u.bulk.buffersize = TS_USB11_FRAME_SIZE;
616 
617         return 0;
618 }
619 
620 static int af9015_get_adapter_count(struct dvb_usb_device *d)
621 {
622         struct af9015_state *state = d_to_priv(d);
623         return state->dual_mode + 1;
624 }
625 
626 /* override demod callbacks for resource locking */
627 static int af9015_af9013_set_frontend(struct dvb_frontend *fe)
628 {
629         int ret;
630         struct af9015_state *state = fe_to_priv(fe);
631 
632         if (mutex_lock_interruptible(&state->fe_mutex))
633                 return -EAGAIN;
634 
635         ret = state->set_frontend[fe_to_adap(fe)->id](fe);
636 
637         mutex_unlock(&state->fe_mutex);
638 
639         return ret;
640 }
641 
642 /* override demod callbacks for resource locking */
643 static int af9015_af9013_read_status(struct dvb_frontend *fe,
644         fe_status_t *status)
645 {
646         int ret;
647         struct af9015_state *state = fe_to_priv(fe);
648 
649         if (mutex_lock_interruptible(&state->fe_mutex))
650                 return -EAGAIN;
651 
652         ret = state->read_status[fe_to_adap(fe)->id](fe, status);
653 
654         mutex_unlock(&state->fe_mutex);
655 
656         return ret;
657 }
658 
659 /* override demod callbacks for resource locking */
660 static int af9015_af9013_init(struct dvb_frontend *fe)
661 {
662         int ret;
663         struct af9015_state *state = fe_to_priv(fe);
664 
665         if (mutex_lock_interruptible(&state->fe_mutex))
666                 return -EAGAIN;
667 
668         ret = state->init[fe_to_adap(fe)->id](fe);
669 
670         mutex_unlock(&state->fe_mutex);
671 
672         return ret;
673 }
674 
675 /* override demod callbacks for resource locking */
676 static int af9015_af9013_sleep(struct dvb_frontend *fe)
677 {
678         int ret;
679         struct af9015_state *state = fe_to_priv(fe);
680 
681         if (mutex_lock_interruptible(&state->fe_mutex))
682                 return -EAGAIN;
683 
684         ret = state->sleep[fe_to_adap(fe)->id](fe);
685 
686         mutex_unlock(&state->fe_mutex);
687 
688         return ret;
689 }
690 
691 /* override tuner callbacks for resource locking */
692 static int af9015_tuner_init(struct dvb_frontend *fe)
693 {
694         int ret;
695         struct af9015_state *state = fe_to_priv(fe);
696 
697         if (mutex_lock_interruptible(&state->fe_mutex))
698                 return -EAGAIN;
699 
700         ret = state->tuner_init[fe_to_adap(fe)->id](fe);
701 
702         mutex_unlock(&state->fe_mutex);
703 
704         return ret;
705 }
706 
707 /* override tuner callbacks for resource locking */
708 static int af9015_tuner_sleep(struct dvb_frontend *fe)
709 {
710         int ret;
711         struct af9015_state *state = fe_to_priv(fe);
712 
713         if (mutex_lock_interruptible(&state->fe_mutex))
714                 return -EAGAIN;
715 
716         ret = state->tuner_sleep[fe_to_adap(fe)->id](fe);
717 
718         mutex_unlock(&state->fe_mutex);
719 
720         return ret;
721 }
722 
723 static int af9015_copy_firmware(struct dvb_usb_device *d)
724 {
725         struct af9015_state *state = d_to_priv(d);
726         int ret;
727         u8 fw_params[4];
728         u8 val, i;
729         struct req_t req = {COPY_FIRMWARE, 0, 0x5100, 0, 0, sizeof(fw_params),
730                 fw_params };
731         dev_dbg(&d->udev->dev, "%s:\n", __func__);
732 
733         fw_params[0] = state->firmware_size >> 8;
734         fw_params[1] = state->firmware_size & 0xff;
735         fw_params[2] = state->firmware_checksum >> 8;
736         fw_params[3] = state->firmware_checksum & 0xff;
737 
738         /* wait 2nd demodulator ready */
739         msleep(100);
740 
741         ret = af9015_read_reg_i2c(d, state->af9013_config[1].i2c_addr,
742                         0x98be, &val);
743         if (ret)
744                 goto error;
745         else
746                 dev_dbg(&d->udev->dev, "%s: firmware status=%02x\n",
747                                 __func__, val);
748 
749         if (val == 0x0c) /* fw is running, no need for download */
750                 goto exit;
751 
752         /* set I2C master clock to fast (to speed up firmware copy) */
753         ret = af9015_write_reg(d, 0xd416, 0x04); /* 0x04 * 400ns */
754         if (ret)
755                 goto error;
756 
757         msleep(50);
758 
759         /* copy firmware */
760         ret = af9015_ctrl_msg(d, &req);
761         if (ret)
762                 dev_err(&d->udev->dev, "%s: firmware copy cmd failed=%d\n",
763                                 KBUILD_MODNAME, ret);
764 
765         dev_dbg(&d->udev->dev, "%s: firmware copy done\n", __func__);
766 
767         /* set I2C master clock back to normal */
768         ret = af9015_write_reg(d, 0xd416, 0x14); /* 0x14 * 400ns */
769         if (ret)
770                 goto error;
771 
772         /* request boot firmware */
773         ret = af9015_write_reg_i2c(d, state->af9013_config[1].i2c_addr,
774                         0xe205, 1);
775         dev_dbg(&d->udev->dev, "%s: firmware boot cmd status=%d\n",
776                         __func__, ret);
777         if (ret)
778                 goto error;
779 
780         for (i = 0; i < 15; i++) {
781                 msleep(100);
782 
783                 /* check firmware status */
784                 ret = af9015_read_reg_i2c(d, state->af9013_config[1].i2c_addr,
785                                 0x98be, &val);
786                 dev_dbg(&d->udev->dev, "%s: firmware status cmd status=%d " \
787                                 "firmware status=%02x\n", __func__, ret, val);
788                 if (ret)
789                         goto error;
790 
791                 if (val == 0x0c || val == 0x04) /* success or fail */
792                         break;
793         }
794 
795         if (val == 0x04) {
796                 dev_err(&d->udev->dev, "%s: firmware did not run\n",
797                                 KBUILD_MODNAME);
798                 ret = -ETIMEDOUT;
799         } else if (val != 0x0c) {
800                 dev_err(&d->udev->dev, "%s: firmware boot timeout\n",
801                                 KBUILD_MODNAME);
802                 ret = -ETIMEDOUT;
803         }
804 
805 error:
806 exit:
807         return ret;
808 }
809 
810 static int af9015_af9013_frontend_attach(struct dvb_usb_adapter *adap)
811 {
812         int ret;
813         struct af9015_state *state = adap_to_priv(adap);
814 
815         if (adap->id == 0) {
816                 state->af9013_config[0].ts_mode = AF9013_TS_USB;
817                 memcpy(state->af9013_config[0].api_version, "\x\x1\x9\x", 4);
818                 state->af9013_config[0].gpio[0] = AF9013_GPIO_HI;
819                 state->af9013_config[0].gpio[3] = AF9013_GPIO_TUNER_ON;
820         } else if (adap->id == 1) {
821                 state->af9013_config[1].ts_mode = AF9013_TS_SERIAL;
822                 memcpy(state->af9013_config[1].api_version, "\x\x1\x9\x", 4);
823                 state->af9013_config[1].gpio[0] = AF9013_GPIO_TUNER_ON;
824                 state->af9013_config[1].gpio[1] = AF9013_GPIO_LO;
825 
826                 /* copy firmware to 2nd demodulator */
827                 if (state->dual_mode) {
828                         ret = af9015_copy_firmware(adap_to_d(adap));
829                         if (ret) {
830                                 dev_err(&adap_to_d(adap)->udev->dev,
831                                                 "%s: firmware copy to 2nd " \
832                                                 "frontend failed, will " \
833                                                 "disable it\n", KBUILD_MODNAME);
834                                 state->dual_mode = 0;
835                                 return -ENODEV;
836                         }
837                 } else {
838                         return -ENODEV;
839                 }
840         }
841 
842         /* attach demodulator */
843         adap->fe[0] = dvb_attach(af9013_attach,
844                 &state->af9013_config[adap->id], &adap_to_d(adap)->i2c_adap);
845 
846         /*
847          * AF9015 firmware does not like if it gets interrupted by I2C adapter
848          * request on some critical phases. During normal operation I2C adapter
849          * is used only 2nd demodulator and tuner on dual tuner devices.
850          * Override demodulator callbacks and use mutex for limit access to
851          * those "critical" paths to keep AF9015 happy.
852          */
853         if (adap->fe[0]) {
854                 state->set_frontend[adap->id] =
855                         adap->fe[0]->ops.set_frontend;
856                 adap->fe[0]->ops.set_frontend =
857                         af9015_af9013_set_frontend;
858 
859                 state->read_status[adap->id] =
860                         adap->fe[0]->ops.read_status;
861                 adap->fe[0]->ops.read_status =
862                         af9015_af9013_read_status;
863 
864                 state->init[adap->id] = adap->fe[0]->ops.init;
865                 adap->fe[0]->ops.init = af9015_af9013_init;
866 
867                 state->sleep[adap->id] = adap->fe[0]->ops.sleep;
868                 adap->fe[0]->ops.sleep = af9015_af9013_sleep;
869         }
870 
871         return adap->fe[0] == NULL ? -ENODEV : 0;
872 }
873 
874 static struct mt2060_config af9015_mt2060_config = {
875         .i2c_address = 0xc0,
876         .clock_out = 0,
877 };
878 
879 static struct qt1010_config af9015_qt1010_config = {
880         .i2c_address = 0xc4,
881 };
882 
883 static struct tda18271_config af9015_tda18271_config = {
884         .gate = TDA18271_GATE_DIGITAL,
885         .small_i2c = TDA18271_16_BYTE_CHUNK_INIT,
886 };
887 
888 static struct mxl5005s_config af9015_mxl5003_config = {
889         .i2c_address     = 0xc6,
890         .if_freq         = IF_FREQ_4570000HZ,
891         .xtal_freq       = CRYSTAL_FREQ_16000000HZ,
892         .agc_mode        = MXL_SINGLE_AGC,
893         .tracking_filter = MXL_TF_DEFAULT,
894         .rssi_enable     = MXL_RSSI_ENABLE,
895         .cap_select      = MXL_CAP_SEL_ENABLE,
896         .div_out         = MXL_DIV_OUT_4,
897         .clock_out       = MXL_CLOCK_OUT_DISABLE,
898         .output_load     = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
899         .top             = MXL5005S_TOP_25P2,
900         .mod_mode        = MXL_DIGITAL_MODE,
901         .if_mode         = MXL_ZERO_IF,
902         .AgcMasterByte   = 0x00,
903 };
904 
905 static struct mxl5005s_config af9015_mxl5005_config = {
906         .i2c_address     = 0xc6,
907         .if_freq         = IF_FREQ_4570000HZ,
908         .xtal_freq       = CRYSTAL_FREQ_16000000HZ,
909         .agc_mode        = MXL_SINGLE_AGC,
910         .tracking_filter = MXL_TF_OFF,
911         .rssi_enable     = MXL_RSSI_ENABLE,
912         .cap_select      = MXL_CAP_SEL_ENABLE,
913         .div_out         = MXL_DIV_OUT_4,
914         .clock_out       = MXL_CLOCK_OUT_DISABLE,
915         .output_load     = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
916         .top             = MXL5005S_TOP_25P2,
917         .mod_mode        = MXL_DIGITAL_MODE,
918         .if_mode         = MXL_ZERO_IF,
919         .AgcMasterByte   = 0x00,
920 };
921 
922 static struct mc44s803_config af9015_mc44s803_config = {
923         .i2c_address = 0xc0,
924         .dig_out = 1,
925 };
926 
927 static struct tda18218_config af9015_tda18218_config = {
928         .i2c_address = 0xc0,
929         .i2c_wr_max = 21, /* max wr bytes AF9015 I2C adap can handle at once */
930 };
931 
932 static struct mxl5007t_config af9015_mxl5007t_config = {
933         .xtal_freq_hz = MxL_XTAL_24_MHZ,
934         .if_freq_hz = MxL_IF_4_57_MHZ,
935 };
936 
937 static int af9015_tuner_attach(struct dvb_usb_adapter *adap)
938 {
939         struct dvb_usb_device *d = adap_to_d(adap);
940         struct af9015_state *state = d_to_priv(d);
941         int ret;
942         dev_dbg(&d->udev->dev, "%s:\n", __func__);
943 
944         switch (state->af9013_config[adap->id].tuner) {
945         case AF9013_TUNER_MT2060:
946         case AF9013_TUNER_MT2060_2:
947                 ret = dvb_attach(mt2060_attach, adap->fe[0],
948                         &adap_to_d(adap)->i2c_adap, &af9015_mt2060_config,
949                         state->mt2060_if1[adap->id])
950                         == NULL ? -ENODEV : 0;
951                 break;
952         case AF9013_TUNER_QT1010:
953         case AF9013_TUNER_QT1010A:
954                 ret = dvb_attach(qt1010_attach, adap->fe[0],
955                         &adap_to_d(adap)->i2c_adap,
956                         &af9015_qt1010_config) == NULL ? -ENODEV : 0;
957                 break;
958         case AF9013_TUNER_TDA18271:
959                 ret = dvb_attach(tda18271_attach, adap->fe[0], 0xc0,
960                         &adap_to_d(adap)->i2c_adap,
961                         &af9015_tda18271_config) == NULL ? -ENODEV : 0;
962                 break;
963         case AF9013_TUNER_TDA18218:
964                 ret = dvb_attach(tda18218_attach, adap->fe[0],
965                         &adap_to_d(adap)->i2c_adap,
966                         &af9015_tda18218_config) == NULL ? -ENODEV : 0;
967                 break;
968         case AF9013_TUNER_MXL5003D:
969                 ret = dvb_attach(mxl5005s_attach, adap->fe[0],
970                         &adap_to_d(adap)->i2c_adap,
971                         &af9015_mxl5003_config) == NULL ? -ENODEV : 0;
972                 break;
973         case AF9013_TUNER_MXL5005D:
974         case AF9013_TUNER_MXL5005R:
975                 ret = dvb_attach(mxl5005s_attach, adap->fe[0],
976                         &adap_to_d(adap)->i2c_adap,
977                         &af9015_mxl5005_config) == NULL ? -ENODEV : 0;
978                 break;
979         case AF9013_TUNER_ENV77H11D5:
980                 ret = dvb_attach(dvb_pll_attach, adap->fe[0], 0xc0,
981                         &adap_to_d(adap)->i2c_adap,
982                         DVB_PLL_TDA665X) == NULL ? -ENODEV : 0;
983                 break;
984         case AF9013_TUNER_MC44S803:
985                 ret = dvb_attach(mc44s803_attach, adap->fe[0],
986                         &adap_to_d(adap)->i2c_adap,
987                         &af9015_mc44s803_config) == NULL ? -ENODEV : 0;
988                 break;
989         case AF9013_TUNER_MXL5007T:
990                 ret = dvb_attach(mxl5007t_attach, adap->fe[0],
991                         &adap_to_d(adap)->i2c_adap,
992                         0xc0, &af9015_mxl5007t_config) == NULL ? -ENODEV : 0;
993                 break;
994         case AF9013_TUNER_UNKNOWN:
995         default:
996                 dev_err(&d->udev->dev, "%s: unknown tuner id=%d\n",
997                                 KBUILD_MODNAME,
998                                 state->af9013_config[adap->id].tuner);
999                 ret = -ENODEV;
1000         }
1001 
1002         if (adap->fe[0]->ops.tuner_ops.init) {
1003                 state->tuner_init[adap->id] =
1004                         adap->fe[0]->ops.tuner_ops.init;
1005                 adap->fe[0]->ops.tuner_ops.init = af9015_tuner_init;
1006         }
1007 
1008         if (adap->fe[0]->ops.tuner_ops.sleep) {
1009                 state->tuner_sleep[adap->id] =
1010                         adap->fe[0]->ops.tuner_ops.sleep;
1011                 adap->fe[0]->ops.tuner_ops.sleep = af9015_tuner_sleep;
1012         }
1013 
1014         return ret;
1015 }
1016 
1017 static int af9015_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
1018 {
1019         struct dvb_usb_device *d = adap_to_d(adap);
1020         int ret;
1021         dev_dbg(&d->udev->dev, "%s: onoff=%d\n", __func__, onoff);
1022 
1023         if (onoff)
1024                 ret = af9015_set_reg_bit(d, 0xd503, 0);
1025         else
1026                 ret = af9015_clear_reg_bit(d, 0xd503, 0);
1027 
1028         return ret;
1029 }
1030 
1031 static int af9015_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
1032         int onoff)
1033 {
1034         struct dvb_usb_device *d = adap_to_d(adap);
1035         int ret;
1036         u8 idx;
1037         dev_dbg(&d->udev->dev, "%s: index=%d pid=%04x onoff=%d\n",
1038                         __func__, index, pid, onoff);
1039 
1040         ret = af9015_write_reg(d, 0xd505, (pid & 0xff));
1041         if (ret)
1042                 goto error;
1043 
1044         ret = af9015_write_reg(d, 0xd506, (pid >> 8));
1045         if (ret)
1046                 goto error;
1047 
1048         idx = ((index & 0x1f) | (1 << 5));
1049         ret = af9015_write_reg(d, 0xd504, idx);
1050 
1051 error:
1052         return ret;
1053 }
1054 
1055 static int af9015_init_endpoint(struct dvb_usb_device *d)
1056 {
1057         struct af9015_state *state = d_to_priv(d);
1058         int ret;
1059         u16 frame_size;
1060         u8  packet_size;
1061         dev_dbg(&d->udev->dev, "%s: USB speed=%d\n", __func__, d->udev->speed);
1062 
1063         if (d->udev->speed == USB_SPEED_FULL) {
1064                 frame_size = TS_USB11_FRAME_SIZE/4;
1065                 packet_size = TS_USB11_MAX_PACKET_SIZE/4;
1066         } else {
1067                 frame_size = TS_USB20_FRAME_SIZE/4;
1068                 packet_size = TS_USB20_MAX_PACKET_SIZE/4;
1069         }
1070 
1071         ret = af9015_set_reg_bit(d, 0xd507, 2); /* assert EP4 reset */
1072         if (ret)
1073                 goto error;
1074         ret = af9015_set_reg_bit(d, 0xd50b, 1); /* assert EP5 reset */
1075         if (ret)
1076                 goto error;
1077         ret = af9015_clear_reg_bit(d, 0xdd11, 5); /* disable EP4 */
1078         if (ret)
1079                 goto error;
1080         ret = af9015_clear_reg_bit(d, 0xdd11, 6); /* disable EP5 */
1081         if (ret)
1082                 goto error;
1083         ret = af9015_set_reg_bit(d, 0xdd11, 5); /* enable EP4 */
1084         if (ret)
1085                 goto error;
1086         if (state->dual_mode) {
1087                 ret = af9015_set_reg_bit(d, 0xdd11, 6); /* enable EP5 */
1088                 if (ret)
1089                         goto error;
1090         }
1091         ret = af9015_clear_reg_bit(d, 0xdd13, 5); /* disable EP4 NAK */
1092         if (ret)
1093                 goto error;
1094         if (state->dual_mode) {
1095                 ret = af9015_clear_reg_bit(d, 0xdd13, 6); /* disable EP5 NAK */
1096                 if (ret)
1097                         goto error;
1098         }
1099         /* EP4 xfer length */
1100         ret = af9015_write_reg(d, 0xdd88, frame_size & 0xff);
1101         if (ret)
1102                 goto error;
1103         ret = af9015_write_reg(d, 0xdd89, frame_size >> 8);
1104         if (ret)
1105                 goto error;
1106         /* EP5 xfer length */
1107         ret = af9015_write_reg(d, 0xdd8a, frame_size & 0xff);
1108         if (ret)
1109                 goto error;
1110         ret = af9015_write_reg(d, 0xdd8b, frame_size >> 8);
1111         if (ret)
1112                 goto error;
1113         ret = af9015_write_reg(d, 0xdd0c, packet_size); /* EP4 packet size */
1114         if (ret)
1115                 goto error;
1116         ret = af9015_write_reg(d, 0xdd0d, packet_size); /* EP5 packet size */
1117         if (ret)
1118                 goto error;
1119         ret = af9015_clear_reg_bit(d, 0xd507, 2); /* negate EP4 reset */
1120         if (ret)
1121                 goto error;
1122         if (state->dual_mode) {
1123                 ret = af9015_clear_reg_bit(d, 0xd50b, 1); /* negate EP5 reset */
1124                 if (ret)
1125                         goto error;
1126         }
1127 
1128         /* enable / disable mp2if2 */
1129         if (state->dual_mode)
1130                 ret = af9015_set_reg_bit(d, 0xd50b, 0);
1131         else
1132                 ret = af9015_clear_reg_bit(d, 0xd50b, 0);
1133 
1134 error:
1135         if (ret)
1136                 dev_err(&d->udev->dev, "%s: endpoint init failed=%d\n",
1137                                 KBUILD_MODNAME, ret);
1138 
1139         return ret;
1140 }
1141 
1142 static int af9015_init(struct dvb_usb_device *d)
1143 {
1144         struct af9015_state *state = d_to_priv(d);
1145         int ret;
1146         dev_dbg(&d->udev->dev, "%s:\n", __func__);
1147 
1148         mutex_init(&state->fe_mutex);
1149 
1150         /* init RC canary */
1151         ret = af9015_write_reg(d, 0x98e9, 0xff);
1152         if (ret)
1153                 goto error;
1154 
1155         ret = af9015_init_endpoint(d);
1156         if (ret)
1157                 goto error;
1158 
1159 error:
1160         return ret;
1161 }
1162 
1163 #if IS_ENABLED(CONFIG_RC_CORE)
1164 struct af9015_rc_setup {
1165         unsigned int id;
1166         char *rc_codes;
1167 };
1168 
1169 static char *af9015_rc_setup_match(unsigned int id,
1170         const struct af9015_rc_setup *table)
1171 {
1172         for (; table->rc_codes; table++)
1173                 if (table->id == id)
1174                         return table->rc_codes;
1175         return NULL;
1176 }
1177 
1178 static const struct af9015_rc_setup af9015_rc_setup_modparam[] = {
1179         { AF9015_REMOTE_A_LINK_DTU_M, RC_MAP_ALINK_DTU_M },
1180         { AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, RC_MAP_MSI_DIGIVOX_II },
1181         { AF9015_REMOTE_MYGICTV_U718, RC_MAP_TOTAL_MEDIA_IN_HAND },
1182         { AF9015_REMOTE_DIGITTRADE_DVB_T, RC_MAP_DIGITTRADE },
1183         { AF9015_REMOTE_AVERMEDIA_KS, RC_MAP_AVERMEDIA_RM_KS },
1184         { }
1185 };
1186 
1187 static const struct af9015_rc_setup af9015_rc_setup_hashes[] = {
1188         { 0xb8feb708, RC_MAP_MSI_DIGIVOX_II },
1189         { 0xa3703d00, RC_MAP_ALINK_DTU_M },
1190         { 0x9b7dc64e, RC_MAP_TOTAL_MEDIA_IN_HAND }, /* MYGICTV U718 */
1191         { 0x5d49e3db, RC_MAP_DIGITTRADE }, /* LC-Power LC-USB-DVBT */
1192         { }
1193 };
1194 
1195 static int af9015_rc_query(struct dvb_usb_device *d)
1196 {
1197         struct af9015_state *state = d_to_priv(d);
1198         int ret;
1199         u8 buf[17];
1200 
1201         /* read registers needed to detect remote controller code */
1202         ret = af9015_read_regs(d, 0x98d9, buf, sizeof(buf));
1203         if (ret)
1204                 goto error;
1205 
1206         /* If any of these are non-zero, assume invalid data */
1207         if (buf[1] || buf[2] || buf[3]) {
1208                 dev_dbg(&d->udev->dev, "%s: invalid data\n", __func__);
1209                 return ret;
1210         }
1211 
1212         /* Check for repeat of previous code */
1213         if ((state->rc_repeat != buf[6] || buf[0]) &&
1214                         !memcmp(&buf[12], state->rc_last, 4)) {
1215                 dev_dbg(&d->udev->dev, "%s: key repeated\n", __func__);
1216                 rc_repeat(d->rc_dev);
1217                 state->rc_repeat = buf[6];
1218                 return ret;
1219         }
1220 
1221         /* Only process key if canary killed */
1222         if (buf[16] != 0xff && buf[0] != 0x01) {
1223                 dev_dbg(&d->udev->dev, "%s: key pressed %*ph\n",
1224                                 __func__, 4, buf + 12);
1225 
1226                 /* Reset the canary */
1227                 ret = af9015_write_reg(d, 0x98e9, 0xff);
1228                 if (ret)
1229                         goto error;
1230 
1231                 /* Remember this key */
1232                 memcpy(state->rc_last, &buf[12], 4);
1233                 if (buf[14] == (u8) ~buf[15]) {
1234                         if (buf[12] == (u8) ~buf[13]) {
1235                                 /* NEC */
1236                                 state->rc_keycode = RC_SCANCODE_NEC(buf[12],
1237                                                                     buf[14]);
1238                         } else {
1239                                 /* NEC extended*/
1240                                 state->rc_keycode = RC_SCANCODE_NECX(buf[12] << 8 |
1241                                                                      buf[13],
1242                                                                      buf[14]);
1243                         }
1244                 } else {
1245                         /* 32 bit NEC */
1246                         state->rc_keycode = RC_SCANCODE_NEC32(buf[12] << 24 |
1247                                                               buf[13] << 16 |
1248                                                               buf[14] << 8  |
1249                                                               buf[15]);
1250                 }
1251                 rc_keydown(d->rc_dev, RC_TYPE_NEC, state->rc_keycode, 0);
1252         } else {
1253                 dev_dbg(&d->udev->dev, "%s: no key press\n", __func__);
1254                 /* Invalidate last keypress */
1255                 /* Not really needed, but helps with debug */
1256                 state->rc_last[2] = state->rc_last[3];
1257         }
1258 
1259         state->rc_repeat = buf[6];
1260         state->rc_failed = false;
1261 
1262 error:
1263         if (ret) {
1264                 dev_warn(&d->udev->dev, "%s: rc query failed=%d\n",
1265                                 KBUILD_MODNAME, ret);
1266 
1267                 /* allow random errors as dvb-usb will stop polling on error */
1268                 if (!state->rc_failed)
1269                         ret = 0;
1270 
1271                 state->rc_failed = true;
1272         }
1273 
1274         return ret;
1275 }
1276 
1277 static int af9015_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
1278 {
1279         struct af9015_state *state = d_to_priv(d);
1280         u16 vid = le16_to_cpu(d->udev->descriptor.idVendor);
1281 
1282         if (state->ir_mode == AF9015_IR_MODE_DISABLED)
1283                 return 0;
1284 
1285         /* try to load remote based module param */
1286         if (!rc->map_name)
1287                 rc->map_name = af9015_rc_setup_match(dvb_usb_af9015_remote,
1288                                 af9015_rc_setup_modparam);
1289 
1290         /* try to load remote based eeprom hash */
1291         if (!rc->map_name)
1292                 rc->map_name = af9015_rc_setup_match(state->eeprom_sum,
1293                                 af9015_rc_setup_hashes);
1294 
1295         /* try to load remote based USB iManufacturer string */
1296         if (!rc->map_name && vid == USB_VID_AFATECH) {
1297                 /* Check USB manufacturer and product strings and try
1298                    to determine correct remote in case of chip vendor
1299                    reference IDs are used.
1300                    DO NOT ADD ANYTHING NEW HERE. Use hashes instead. */
1301                 char manufacturer[10];
1302                 memset(manufacturer, 0, sizeof(manufacturer));
1303                 usb_string(d->udev, d->udev->descriptor.iManufacturer,
1304                         manufacturer, sizeof(manufacturer));
1305                 if (!strcmp("MSI", manufacturer)) {
1306                         /* iManufacturer 1 MSI
1307                            iProduct      2 MSI K-VOX */
1308                         rc->map_name = af9015_rc_setup_match(
1309                                         AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
1310                                         af9015_rc_setup_modparam);
1311                 }
1312         }
1313 
1314         /* load empty to enable rc */
1315         if (!rc->map_name)
1316                 rc->map_name = RC_MAP_EMPTY;
1317 
1318         rc->allowed_protos = RC_BIT_NEC;
1319         rc->query = af9015_rc_query;
1320         rc->interval = 500;
1321 
1322         return 0;
1323 }
1324 #else
1325         #define af9015_get_rc_config NULL
1326 #endif
1327 
1328 static int af9015_probe(struct usb_interface *intf,
1329                 const struct usb_device_id *id)
1330 {
1331         struct usb_device *udev = interface_to_usbdev(intf);
1332         char manufacturer[sizeof("ITE Technologies, Inc.")];
1333 
1334         memset(manufacturer, 0, sizeof(manufacturer));
1335         usb_string(udev, udev->descriptor.iManufacturer,
1336                         manufacturer, sizeof(manufacturer));
1337         /*
1338          * There is two devices having same ID but different chipset. One uses
1339          * AF9015 and the other IT9135 chipset. Only difference seen on lsusb
1340          * is iManufacturer string.
1341          *
1342          * idVendor           0x0ccd TerraTec Electronic GmbH
1343          * idProduct          0x0099
1344          * bcdDevice            2.00
1345          * iManufacturer           1 Afatech
1346          * iProduct                2 DVB-T 2
1347          *
1348          * idVendor           0x0ccd TerraTec Electronic GmbH
1349          * idProduct          0x0099
1350          * bcdDevice            2.00
1351          * iManufacturer           1 ITE Technologies, Inc.
1352          * iProduct                2 DVB-T TV Stick
1353          */
1354         if ((le16_to_cpu(udev->descriptor.idVendor) == USB_VID_TERRATEC) &&
1355                         (le16_to_cpu(udev->descriptor.idProduct) == 0x0099)) {
1356                 if (!strcmp("ITE Technologies, Inc.", manufacturer)) {
1357                         dev_dbg(&udev->dev, "%s: rejecting device\n", __func__);
1358                         return -ENODEV;
1359                 }
1360         }
1361 
1362         return dvb_usbv2_probe(intf, id);
1363 }
1364 
1365 /* interface 0 is used by DVB-T receiver and
1366    interface 1 is for remote controller (HID) */
1367 static struct dvb_usb_device_properties af9015_props = {
1368         .driver_name = KBUILD_MODNAME,
1369         .owner = THIS_MODULE,
1370         .adapter_nr = adapter_nr,
1371         .size_of_priv = sizeof(struct af9015_state),
1372 
1373         .generic_bulk_ctrl_endpoint = 0x02,
1374         .generic_bulk_ctrl_endpoint_response = 0x81,
1375 
1376         .identify_state = af9015_identify_state,
1377         .firmware = AF9015_FIRMWARE,
1378         .download_firmware = af9015_download_firmware,
1379 
1380         .i2c_algo = &af9015_i2c_algo,
1381         .read_config = af9015_read_config,
1382         .frontend_attach = af9015_af9013_frontend_attach,
1383         .tuner_attach = af9015_tuner_attach,
1384         .init = af9015_init,
1385         .get_rc_config = af9015_get_rc_config,
1386         .get_stream_config = af9015_get_stream_config,
1387 
1388         .get_adapter_count = af9015_get_adapter_count,
1389         .adapter = {
1390                 {
1391                         .caps = DVB_USB_ADAP_HAS_PID_FILTER |
1392                                 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
1393                         .pid_filter_count = 32,
1394                         .pid_filter = af9015_pid_filter,
1395                         .pid_filter_ctrl = af9015_pid_filter_ctrl,
1396 
1397                         .stream = DVB_USB_STREAM_BULK(0x84, 8, TS_USB20_FRAME_SIZE),
1398                 }, {
1399                         .stream = DVB_USB_STREAM_BULK(0x85, 8, TS_USB20_FRAME_SIZE),
1400                 },
1401         },
1402 };
1403 
1404 static const struct usb_device_id af9015_id_table[] = {
1405         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9015,
1406                 &af9015_props, "Afatech AF9015 reference design", NULL) },
1407         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9016,
1408                 &af9015_props, "Afatech AF9015 reference design", NULL) },
1409         { DVB_USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_GOLD,
1410                 &af9015_props, "Leadtek WinFast DTV Dongle Gold", RC_MAP_LEADTEK_Y04G0051) },
1411         { DVB_USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV71E,
1412                 &af9015_props, "Pinnacle PCTV 71e", NULL) },
1413         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U,
1414                 &af9015_props, "KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)", NULL) },
1415         { DVB_USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_TINYTWIN,
1416                 &af9015_props, "DigitalNow TinyTwin", RC_MAP_AZUREWAVE_AD_TU700) },
1417         { DVB_USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_AZUREWAVE_AD_TU700,
1418                 &af9015_props, "TwinHan AzureWave AD-TU700(704J)", RC_MAP_AZUREWAVE_AD_TU700) },
1419         { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_USB_XE_REV2,
1420                 &af9015_props, "TerraTec Cinergy T USB XE", NULL) },
1421         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_2T,
1422                 &af9015_props, "KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T)", NULL) },
1423         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X,
1424                 &af9015_props, "AVerMedia AVerTV DVB-T Volar X", RC_MAP_AVERMEDIA_M135A) },
1425         { DVB_USB_DEVICE(USB_VID_XTENSIONS, USB_PID_XTENSIONS_XD_380,
1426                 &af9015_props, "Xtensions XD-380", NULL) },
1427         { DVB_USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGIVOX_DUO,
1428                 &af9015_props, "MSI DIGIVOX Duo", RC_MAP_MSI_DIGIVOX_III) },
1429         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X_2,
1430                 &af9015_props, "Fujitsu-Siemens Slim Mobile USB DVB-T", NULL) },
1431         { DVB_USB_DEVICE(USB_VID_TELESTAR,  USB_PID_TELESTAR_STARSTICK_2,
1432                 &af9015_props, "Telestar Starstick 2", NULL) },
1433         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A309,
1434                 &af9015_props, "AVerMedia A309", NULL) },
1435         { DVB_USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGI_VOX_MINI_III,
1436                 &af9015_props, "MSI Digi VOX mini III", RC_MAP_MSI_DIGIVOX_III) },
1437         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U,
1438                 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1439         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_2,
1440                 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1441         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_3,
1442                 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1443         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_TREKSTOR_DVBT,
1444                 &af9015_props, "TrekStor DVB-T USB Stick", RC_MAP_TREKSTOR) },
1445         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850,
1446                 &af9015_props, "AverMedia AVerTV Volar Black HD (A850)", NULL) },
1447         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A805,
1448                 &af9015_props, "AverMedia AVerTV Volar GPS 805 (A805)", NULL) },
1449         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_CONCEPTRONIC_CTVDIGRCU,
1450                 &af9015_props, "Conceptronic USB2.0 DVB-T CTVDIGRCU V3.0", NULL) },
1451         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_MC810,
1452                 &af9015_props, "KWorld Digial MC-810", NULL) },
1453         { DVB_USB_DEVICE(USB_VID_KYE, USB_PID_GENIUS_TVGO_DVB_T03,
1454                 &af9015_props, "Genius TVGo DVB-T03", NULL) },
1455         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U_2,
1456                 &af9015_props, "KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)", NULL) },
1457         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_T,
1458                 &af9015_props, "KWorld PlusTV DVB-T PCI Pro Card (DVB-T PC160-T)", NULL) },
1459         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV20,
1460                 &af9015_props, "Sveon STV20 Tuner USB DVB-T HDTV", NULL) },
1461         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_TINYTWIN_2,
1462                 &af9015_props, "DigitalNow TinyTwin v2", RC_MAP_DIGITALNOW_TINYTWIN) },
1463         { DVB_USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV2000DS,
1464                 &af9015_props, "Leadtek WinFast DTV2000DS", RC_MAP_LEADTEK_Y04G0051) },
1465         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_UB383_T,
1466                 &af9015_props, "KWorld USB DVB-T Stick Mobile (UB383-T)", NULL) },
1467         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_4,
1468                 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1469         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A815M,
1470                 &af9015_props, "AverMedia AVerTV Volar M (A815Mac)", NULL) },
1471         { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_RC,
1472                 &af9015_props, "TerraTec Cinergy T Stick RC", RC_MAP_TERRATEC_SLIM_2) },
1473         /* XXX: that same ID [0ccd:0099] is used by af9035 driver too */
1474         { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC,
1475                 &af9015_props, "TerraTec Cinergy T Stick Dual RC", RC_MAP_TERRATEC_SLIM) },
1476         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850T,
1477                 &af9015_props, "AverMedia AVerTV Red HD+ (A850T)", NULL) },
1478         { DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_TINYTWIN_3,
1479                 &af9015_props, "DigitalNow TinyTwin v3", RC_MAP_DIGITALNOW_TINYTWIN) },
1480         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV22,
1481                 &af9015_props, "Sveon STV22 Dual USB DVB-T Tuner HDTV", RC_MAP_MSI_DIGIVOX_III) },
1482         { }
1483 };
1484 MODULE_DEVICE_TABLE(usb, af9015_id_table);
1485 
1486 /* usb specific object needed to register this driver with the usb subsystem */
1487 static struct usb_driver af9015_usb_driver = {
1488         .name = KBUILD_MODNAME,
1489         .id_table = af9015_id_table,
1490         .probe = af9015_probe,
1491         .disconnect = dvb_usbv2_disconnect,
1492         .suspend = dvb_usbv2_suspend,
1493         .resume = dvb_usbv2_resume,
1494         .reset_resume = dvb_usbv2_reset_resume,
1495         .no_dynamic_id = 1,
1496         .soft_unbind = 1,
1497 };
1498 
1499 module_usb_driver(af9015_usb_driver);
1500 
1501 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1502 MODULE_DESCRIPTION("Afatech AF9015 driver");
1503 MODULE_LICENSE("GPL");
1504 MODULE_FIRMWARE(AF9015_FIRMWARE);
1505 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us