Version:  2.0.40 2.2.26 2.4.37 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8

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 /* 2^31 + 2^29 - 2^25 + 2^22 - 2^19 - 2^16 + 1 */
402 #define GOLDEN_RATIO_PRIME_32 0x9e370001UL
403 
404 /* hash (and dump) eeprom */
405 static int af9015_eeprom_hash(struct dvb_usb_device *d)
406 {
407         struct af9015_state *state = d_to_priv(d);
408         int ret, i;
409         u8 buf[AF9015_EEPROM_SIZE];
410         struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, NULL};
411 
412         /* read eeprom */
413         for (i = 0; i < AF9015_EEPROM_SIZE; i++) {
414                 req.addr = i;
415                 req.data = &buf[i];
416                 ret = af9015_ctrl_msg(d, &req);
417                 if (ret < 0)
418                         goto err;
419         }
420 
421         /* calculate checksum */
422         for (i = 0; i < AF9015_EEPROM_SIZE / sizeof(u32); i++) {
423                 state->eeprom_sum *= GOLDEN_RATIO_PRIME_32;
424                 state->eeprom_sum += le32_to_cpu(((__le32 *)buf)[i]);
425         }
426 
427         for (i = 0; i < AF9015_EEPROM_SIZE; i += 16)
428                 dev_dbg(&d->udev->dev, "%s: %*ph\n", __func__, 16, buf + i);
429 
430         dev_dbg(&d->udev->dev, "%s: eeprom sum=%.8x\n",
431                         __func__, state->eeprom_sum);
432         return 0;
433 err:
434         dev_err(&d->udev->dev, "%s: eeprom failed=%d\n", KBUILD_MODNAME, ret);
435         return ret;
436 }
437 
438 static int af9015_read_config(struct dvb_usb_device *d)
439 {
440         struct af9015_state *state = d_to_priv(d);
441         int ret;
442         u8 val, i, offset = 0;
443         struct req_t req = {READ_I2C, AF9015_I2C_EEPROM, 0, 0, 1, 1, &val};
444 
445         dev_dbg(&d->udev->dev, "%s:\n", __func__);
446 
447         /* IR remote controller */
448         req.addr = AF9015_EEPROM_IR_MODE;
449         /* first message will timeout often due to possible hw bug */
450         for (i = 0; i < 4; i++) {
451                 ret = af9015_ctrl_msg(d, &req);
452                 if (!ret)
453                         break;
454         }
455         if (ret)
456                 goto error;
457 
458         ret = af9015_eeprom_hash(d);
459         if (ret)
460                 goto error;
461 
462         state->ir_mode = val;
463         dev_dbg(&d->udev->dev, "%s: IR mode=%d\n", __func__, val);
464 
465         /* TS mode - one or two receivers */
466         req.addr = AF9015_EEPROM_TS_MODE;
467         ret = af9015_ctrl_msg(d, &req);
468         if (ret)
469                 goto error;
470 
471         state->dual_mode = val;
472         dev_dbg(&d->udev->dev, "%s: TS mode=%d\n", __func__, state->dual_mode);
473 
474         /* disable 2nd adapter because we don't have PID-filters */
475         if (d->udev->speed == USB_SPEED_FULL)
476                 state->dual_mode = 0;
477 
478         if (state->dual_mode) {
479                 /* read 2nd demodulator I2C address */
480                 req.addr = AF9015_EEPROM_DEMOD2_I2C;
481                 ret = af9015_ctrl_msg(d, &req);
482                 if (ret)
483                         goto error;
484 
485                 state->af9013_config[1].i2c_addr = val;
486         }
487 
488         for (i = 0; i < state->dual_mode + 1; i++) {
489                 if (i == 1)
490                         offset = AF9015_EEPROM_OFFSET;
491                 /* xtal */
492                 req.addr = AF9015_EEPROM_XTAL_TYPE1 + offset;
493                 ret = af9015_ctrl_msg(d, &req);
494                 if (ret)
495                         goto error;
496                 switch (val) {
497                 case 0:
498                         state->af9013_config[i].clock = 28800000;
499                         break;
500                 case 1:
501                         state->af9013_config[i].clock = 20480000;
502                         break;
503                 case 2:
504                         state->af9013_config[i].clock = 28000000;
505                         break;
506                 case 3:
507                         state->af9013_config[i].clock = 25000000;
508                         break;
509                 }
510                 dev_dbg(&d->udev->dev, "%s: [%d] xtal=%d set clock=%d\n",
511                                 __func__, i, val,
512                                 state->af9013_config[i].clock);
513 
514                 /* IF frequency */
515                 req.addr = AF9015_EEPROM_IF1H + offset;
516                 ret = af9015_ctrl_msg(d, &req);
517                 if (ret)
518                         goto error;
519 
520                 state->af9013_config[i].if_frequency = val << 8;
521 
522                 req.addr = AF9015_EEPROM_IF1L + offset;
523                 ret = af9015_ctrl_msg(d, &req);
524                 if (ret)
525                         goto error;
526 
527                 state->af9013_config[i].if_frequency += val;
528                 state->af9013_config[i].if_frequency *= 1000;
529                 dev_dbg(&d->udev->dev, "%s: [%d] IF frequency=%d\n", __func__,
530                                 i, state->af9013_config[i].if_frequency);
531 
532                 /* MT2060 IF1 */
533                 req.addr = AF9015_EEPROM_MT2060_IF1H  + offset;
534                 ret = af9015_ctrl_msg(d, &req);
535                 if (ret)
536                         goto error;
537                 state->mt2060_if1[i] = val << 8;
538                 req.addr = AF9015_EEPROM_MT2060_IF1L + offset;
539                 ret = af9015_ctrl_msg(d, &req);
540                 if (ret)
541                         goto error;
542                 state->mt2060_if1[i] += val;
543                 dev_dbg(&d->udev->dev, "%s: [%d] MT2060 IF1=%d\n", __func__, i,
544                                 state->mt2060_if1[i]);
545 
546                 /* tuner */
547                 req.addr =  AF9015_EEPROM_TUNER_ID1 + offset;
548                 ret = af9015_ctrl_msg(d, &req);
549                 if (ret)
550                         goto error;
551                 switch (val) {
552                 case AF9013_TUNER_ENV77H11D5:
553                 case AF9013_TUNER_MT2060:
554                 case AF9013_TUNER_QT1010:
555                 case AF9013_TUNER_UNKNOWN:
556                 case AF9013_TUNER_MT2060_2:
557                 case AF9013_TUNER_TDA18271:
558                 case AF9013_TUNER_QT1010A:
559                 case AF9013_TUNER_TDA18218:
560                         state->af9013_config[i].spec_inv = 1;
561                         break;
562                 case AF9013_TUNER_MXL5003D:
563                 case AF9013_TUNER_MXL5005D:
564                 case AF9013_TUNER_MXL5005R:
565                 case AF9013_TUNER_MXL5007T:
566                         state->af9013_config[i].spec_inv = 0;
567                         break;
568                 case AF9013_TUNER_MC44S803:
569                         state->af9013_config[i].gpio[1] = AF9013_GPIO_LO;
570                         state->af9013_config[i].spec_inv = 1;
571                         break;
572                 default:
573                         dev_err(&d->udev->dev, "%s: tuner id=%d not " \
574                                         "supported, please report!\n",
575                                         KBUILD_MODNAME, val);
576                         return -ENODEV;
577                 }
578 
579                 state->af9013_config[i].tuner = val;
580                 dev_dbg(&d->udev->dev, "%s: [%d] tuner id=%d\n",
581                                 __func__, i, val);
582         }
583 
584 error:
585         if (ret)
586                 dev_err(&d->udev->dev, "%s: eeprom read failed=%d\n",
587                                 KBUILD_MODNAME, ret);
588 
589         /* AverMedia AVerTV Volar Black HD (A850) device have bad EEPROM
590            content :-( Override some wrong values here. Ditto for the
591            AVerTV Red HD+ (A850T) device. */
592         if (le16_to_cpu(d->udev->descriptor.idVendor) == USB_VID_AVERMEDIA &&
593                 ((le16_to_cpu(d->udev->descriptor.idProduct) ==
594                         USB_PID_AVERMEDIA_A850) ||
595                 (le16_to_cpu(d->udev->descriptor.idProduct) ==
596                         USB_PID_AVERMEDIA_A850T))) {
597                 dev_dbg(&d->udev->dev,
598                                 "%s: AverMedia A850: overriding config\n",
599                                 __func__);
600                 /* disable dual mode */
601                 state->dual_mode = 0;
602 
603                 /* set correct IF */
604                 state->af9013_config[0].if_frequency = 4570000;
605         }
606 
607         return ret;
608 }
609 
610 static int af9015_get_stream_config(struct dvb_frontend *fe, u8 *ts_type,
611                 struct usb_data_stream_properties *stream)
612 {
613         struct dvb_usb_device *d = fe_to_d(fe);
614         dev_dbg(&d->udev->dev, "%s: adap=%d\n", __func__, fe_to_adap(fe)->id);
615 
616         if (d->udev->speed == USB_SPEED_FULL)
617                 stream->u.bulk.buffersize = TS_USB11_FRAME_SIZE;
618 
619         return 0;
620 }
621 
622 static int af9015_get_adapter_count(struct dvb_usb_device *d)
623 {
624         struct af9015_state *state = d_to_priv(d);
625         return state->dual_mode + 1;
626 }
627 
628 /* override demod callbacks for resource locking */
629 static int af9015_af9013_set_frontend(struct dvb_frontend *fe)
630 {
631         int ret;
632         struct af9015_state *state = fe_to_priv(fe);
633 
634         if (mutex_lock_interruptible(&state->fe_mutex))
635                 return -EAGAIN;
636 
637         ret = state->set_frontend[fe_to_adap(fe)->id](fe);
638 
639         mutex_unlock(&state->fe_mutex);
640 
641         return ret;
642 }
643 
644 /* override demod callbacks for resource locking */
645 static int af9015_af9013_read_status(struct dvb_frontend *fe,
646         enum fe_status *status)
647 {
648         int ret;
649         struct af9015_state *state = fe_to_priv(fe);
650 
651         if (mutex_lock_interruptible(&state->fe_mutex))
652                 return -EAGAIN;
653 
654         ret = state->read_status[fe_to_adap(fe)->id](fe, status);
655 
656         mutex_unlock(&state->fe_mutex);
657 
658         return ret;
659 }
660 
661 /* override demod callbacks for resource locking */
662 static int af9015_af9013_init(struct dvb_frontend *fe)
663 {
664         int ret;
665         struct af9015_state *state = fe_to_priv(fe);
666 
667         if (mutex_lock_interruptible(&state->fe_mutex))
668                 return -EAGAIN;
669 
670         ret = state->init[fe_to_adap(fe)->id](fe);
671 
672         mutex_unlock(&state->fe_mutex);
673 
674         return ret;
675 }
676 
677 /* override demod callbacks for resource locking */
678 static int af9015_af9013_sleep(struct dvb_frontend *fe)
679 {
680         int ret;
681         struct af9015_state *state = fe_to_priv(fe);
682 
683         if (mutex_lock_interruptible(&state->fe_mutex))
684                 return -EAGAIN;
685 
686         ret = state->sleep[fe_to_adap(fe)->id](fe);
687 
688         mutex_unlock(&state->fe_mutex);
689 
690         return ret;
691 }
692 
693 /* override tuner callbacks for resource locking */
694 static int af9015_tuner_init(struct dvb_frontend *fe)
695 {
696         int ret;
697         struct af9015_state *state = fe_to_priv(fe);
698 
699         if (mutex_lock_interruptible(&state->fe_mutex))
700                 return -EAGAIN;
701 
702         ret = state->tuner_init[fe_to_adap(fe)->id](fe);
703 
704         mutex_unlock(&state->fe_mutex);
705 
706         return ret;
707 }
708 
709 /* override tuner callbacks for resource locking */
710 static int af9015_tuner_sleep(struct dvb_frontend *fe)
711 {
712         int ret;
713         struct af9015_state *state = fe_to_priv(fe);
714 
715         if (mutex_lock_interruptible(&state->fe_mutex))
716                 return -EAGAIN;
717 
718         ret = state->tuner_sleep[fe_to_adap(fe)->id](fe);
719 
720         mutex_unlock(&state->fe_mutex);
721 
722         return ret;
723 }
724 
725 static int af9015_copy_firmware(struct dvb_usb_device *d)
726 {
727         struct af9015_state *state = d_to_priv(d);
728         int ret;
729         u8 fw_params[4];
730         u8 val, i;
731         struct req_t req = {COPY_FIRMWARE, 0, 0x5100, 0, 0, sizeof(fw_params),
732                 fw_params };
733         dev_dbg(&d->udev->dev, "%s:\n", __func__);
734 
735         fw_params[0] = state->firmware_size >> 8;
736         fw_params[1] = state->firmware_size & 0xff;
737         fw_params[2] = state->firmware_checksum >> 8;
738         fw_params[3] = state->firmware_checksum & 0xff;
739 
740         /* wait 2nd demodulator ready */
741         msleep(100);
742 
743         ret = af9015_read_reg_i2c(d, state->af9013_config[1].i2c_addr,
744                         0x98be, &val);
745         if (ret)
746                 goto error;
747         else
748                 dev_dbg(&d->udev->dev, "%s: firmware status=%02x\n",
749                                 __func__, val);
750 
751         if (val == 0x0c) /* fw is running, no need for download */
752                 goto exit;
753 
754         /* set I2C master clock to fast (to speed up firmware copy) */
755         ret = af9015_write_reg(d, 0xd416, 0x04); /* 0x04 * 400ns */
756         if (ret)
757                 goto error;
758 
759         msleep(50);
760 
761         /* copy firmware */
762         ret = af9015_ctrl_msg(d, &req);
763         if (ret)
764                 dev_err(&d->udev->dev, "%s: firmware copy cmd failed=%d\n",
765                                 KBUILD_MODNAME, ret);
766 
767         dev_dbg(&d->udev->dev, "%s: firmware copy done\n", __func__);
768 
769         /* set I2C master clock back to normal */
770         ret = af9015_write_reg(d, 0xd416, 0x14); /* 0x14 * 400ns */
771         if (ret)
772                 goto error;
773 
774         /* request boot firmware */
775         ret = af9015_write_reg_i2c(d, state->af9013_config[1].i2c_addr,
776                         0xe205, 1);
777         dev_dbg(&d->udev->dev, "%s: firmware boot cmd status=%d\n",
778                         __func__, ret);
779         if (ret)
780                 goto error;
781 
782         for (i = 0; i < 15; i++) {
783                 msleep(100);
784 
785                 /* check firmware status */
786                 ret = af9015_read_reg_i2c(d, state->af9013_config[1].i2c_addr,
787                                 0x98be, &val);
788                 dev_dbg(&d->udev->dev, "%s: firmware status cmd status=%d " \
789                                 "firmware status=%02x\n", __func__, ret, val);
790                 if (ret)
791                         goto error;
792 
793                 if (val == 0x0c || val == 0x04) /* success or fail */
794                         break;
795         }
796 
797         if (val == 0x04) {
798                 dev_err(&d->udev->dev, "%s: firmware did not run\n",
799                                 KBUILD_MODNAME);
800                 ret = -ETIMEDOUT;
801         } else if (val != 0x0c) {
802                 dev_err(&d->udev->dev, "%s: firmware boot timeout\n",
803                                 KBUILD_MODNAME);
804                 ret = -ETIMEDOUT;
805         }
806 
807 error:
808 exit:
809         return ret;
810 }
811 
812 static int af9015_af9013_frontend_attach(struct dvb_usb_adapter *adap)
813 {
814         int ret;
815         struct af9015_state *state = adap_to_priv(adap);
816 
817         if (adap->id == 0) {
818                 state->af9013_config[0].ts_mode = AF9013_TS_USB;
819                 memcpy(state->af9013_config[0].api_version, "\x\x1\x9\x", 4);
820                 state->af9013_config[0].gpio[0] = AF9013_GPIO_HI;
821                 state->af9013_config[0].gpio[3] = AF9013_GPIO_TUNER_ON;
822         } else if (adap->id == 1) {
823                 state->af9013_config[1].ts_mode = AF9013_TS_SERIAL;
824                 memcpy(state->af9013_config[1].api_version, "\x\x1\x9\x", 4);
825                 state->af9013_config[1].gpio[0] = AF9013_GPIO_TUNER_ON;
826                 state->af9013_config[1].gpio[1] = AF9013_GPIO_LO;
827 
828                 /* copy firmware to 2nd demodulator */
829                 if (state->dual_mode) {
830                         ret = af9015_copy_firmware(adap_to_d(adap));
831                         if (ret) {
832                                 dev_err(&adap_to_d(adap)->udev->dev,
833                                                 "%s: firmware copy to 2nd " \
834                                                 "frontend failed, will " \
835                                                 "disable it\n", KBUILD_MODNAME);
836                                 state->dual_mode = 0;
837                                 return -ENODEV;
838                         }
839                 } else {
840                         return -ENODEV;
841                 }
842         }
843 
844         /* attach demodulator */
845         adap->fe[0] = dvb_attach(af9013_attach,
846                 &state->af9013_config[adap->id], &adap_to_d(adap)->i2c_adap);
847 
848         /*
849          * AF9015 firmware does not like if it gets interrupted by I2C adapter
850          * request on some critical phases. During normal operation I2C adapter
851          * is used only 2nd demodulator and tuner on dual tuner devices.
852          * Override demodulator callbacks and use mutex for limit access to
853          * those "critical" paths to keep AF9015 happy.
854          */
855         if (adap->fe[0]) {
856                 state->set_frontend[adap->id] =
857                         adap->fe[0]->ops.set_frontend;
858                 adap->fe[0]->ops.set_frontend =
859                         af9015_af9013_set_frontend;
860 
861                 state->read_status[adap->id] =
862                         adap->fe[0]->ops.read_status;
863                 adap->fe[0]->ops.read_status =
864                         af9015_af9013_read_status;
865 
866                 state->init[adap->id] = adap->fe[0]->ops.init;
867                 adap->fe[0]->ops.init = af9015_af9013_init;
868 
869                 state->sleep[adap->id] = adap->fe[0]->ops.sleep;
870                 adap->fe[0]->ops.sleep = af9015_af9013_sleep;
871         }
872 
873         return adap->fe[0] == NULL ? -ENODEV : 0;
874 }
875 
876 static struct mt2060_config af9015_mt2060_config = {
877         .i2c_address = 0xc0,
878         .clock_out = 0,
879 };
880 
881 static struct qt1010_config af9015_qt1010_config = {
882         .i2c_address = 0xc4,
883 };
884 
885 static struct tda18271_config af9015_tda18271_config = {
886         .gate = TDA18271_GATE_DIGITAL,
887         .small_i2c = TDA18271_16_BYTE_CHUNK_INIT,
888 };
889 
890 static struct mxl5005s_config af9015_mxl5003_config = {
891         .i2c_address     = 0xc6,
892         .if_freq         = IF_FREQ_4570000HZ,
893         .xtal_freq       = CRYSTAL_FREQ_16000000HZ,
894         .agc_mode        = MXL_SINGLE_AGC,
895         .tracking_filter = MXL_TF_DEFAULT,
896         .rssi_enable     = MXL_RSSI_ENABLE,
897         .cap_select      = MXL_CAP_SEL_ENABLE,
898         .div_out         = MXL_DIV_OUT_4,
899         .clock_out       = MXL_CLOCK_OUT_DISABLE,
900         .output_load     = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
901         .top             = MXL5005S_TOP_25P2,
902         .mod_mode        = MXL_DIGITAL_MODE,
903         .if_mode         = MXL_ZERO_IF,
904         .AgcMasterByte   = 0x00,
905 };
906 
907 static struct mxl5005s_config af9015_mxl5005_config = {
908         .i2c_address     = 0xc6,
909         .if_freq         = IF_FREQ_4570000HZ,
910         .xtal_freq       = CRYSTAL_FREQ_16000000HZ,
911         .agc_mode        = MXL_SINGLE_AGC,
912         .tracking_filter = MXL_TF_OFF,
913         .rssi_enable     = MXL_RSSI_ENABLE,
914         .cap_select      = MXL_CAP_SEL_ENABLE,
915         .div_out         = MXL_DIV_OUT_4,
916         .clock_out       = MXL_CLOCK_OUT_DISABLE,
917         .output_load     = MXL5005S_IF_OUTPUT_LOAD_200_OHM,
918         .top             = MXL5005S_TOP_25P2,
919         .mod_mode        = MXL_DIGITAL_MODE,
920         .if_mode         = MXL_ZERO_IF,
921         .AgcMasterByte   = 0x00,
922 };
923 
924 static struct mc44s803_config af9015_mc44s803_config = {
925         .i2c_address = 0xc0,
926         .dig_out = 1,
927 };
928 
929 static struct tda18218_config af9015_tda18218_config = {
930         .i2c_address = 0xc0,
931         .i2c_wr_max = 21, /* max wr bytes AF9015 I2C adap can handle at once */
932 };
933 
934 static struct mxl5007t_config af9015_mxl5007t_config = {
935         .xtal_freq_hz = MxL_XTAL_24_MHZ,
936         .if_freq_hz = MxL_IF_4_57_MHZ,
937 };
938 
939 static int af9015_tuner_attach(struct dvb_usb_adapter *adap)
940 {
941         struct dvb_usb_device *d = adap_to_d(adap);
942         struct af9015_state *state = d_to_priv(d);
943         int ret;
944         dev_dbg(&d->udev->dev, "%s:\n", __func__);
945 
946         switch (state->af9013_config[adap->id].tuner) {
947         case AF9013_TUNER_MT2060:
948         case AF9013_TUNER_MT2060_2:
949                 ret = dvb_attach(mt2060_attach, adap->fe[0],
950                         &adap_to_d(adap)->i2c_adap, &af9015_mt2060_config,
951                         state->mt2060_if1[adap->id])
952                         == NULL ? -ENODEV : 0;
953                 break;
954         case AF9013_TUNER_QT1010:
955         case AF9013_TUNER_QT1010A:
956                 ret = dvb_attach(qt1010_attach, adap->fe[0],
957                         &adap_to_d(adap)->i2c_adap,
958                         &af9015_qt1010_config) == NULL ? -ENODEV : 0;
959                 break;
960         case AF9013_TUNER_TDA18271:
961                 ret = dvb_attach(tda18271_attach, adap->fe[0], 0xc0,
962                         &adap_to_d(adap)->i2c_adap,
963                         &af9015_tda18271_config) == NULL ? -ENODEV : 0;
964                 break;
965         case AF9013_TUNER_TDA18218:
966                 ret = dvb_attach(tda18218_attach, adap->fe[0],
967                         &adap_to_d(adap)->i2c_adap,
968                         &af9015_tda18218_config) == NULL ? -ENODEV : 0;
969                 break;
970         case AF9013_TUNER_MXL5003D:
971                 ret = dvb_attach(mxl5005s_attach, adap->fe[0],
972                         &adap_to_d(adap)->i2c_adap,
973                         &af9015_mxl5003_config) == NULL ? -ENODEV : 0;
974                 break;
975         case AF9013_TUNER_MXL5005D:
976         case AF9013_TUNER_MXL5005R:
977                 ret = dvb_attach(mxl5005s_attach, adap->fe[0],
978                         &adap_to_d(adap)->i2c_adap,
979                         &af9015_mxl5005_config) == NULL ? -ENODEV : 0;
980                 break;
981         case AF9013_TUNER_ENV77H11D5:
982                 ret = dvb_attach(dvb_pll_attach, adap->fe[0], 0xc0,
983                         &adap_to_d(adap)->i2c_adap,
984                         DVB_PLL_TDA665X) == NULL ? -ENODEV : 0;
985                 break;
986         case AF9013_TUNER_MC44S803:
987                 ret = dvb_attach(mc44s803_attach, adap->fe[0],
988                         &adap_to_d(adap)->i2c_adap,
989                         &af9015_mc44s803_config) == NULL ? -ENODEV : 0;
990                 break;
991         case AF9013_TUNER_MXL5007T:
992                 ret = dvb_attach(mxl5007t_attach, adap->fe[0],
993                         &adap_to_d(adap)->i2c_adap,
994                         0xc0, &af9015_mxl5007t_config) == NULL ? -ENODEV : 0;
995                 break;
996         case AF9013_TUNER_UNKNOWN:
997         default:
998                 dev_err(&d->udev->dev, "%s: unknown tuner id=%d\n",
999                                 KBUILD_MODNAME,
1000                                 state->af9013_config[adap->id].tuner);
1001                 ret = -ENODEV;
1002         }
1003 
1004         if (adap->fe[0]->ops.tuner_ops.init) {
1005                 state->tuner_init[adap->id] =
1006                         adap->fe[0]->ops.tuner_ops.init;
1007                 adap->fe[0]->ops.tuner_ops.init = af9015_tuner_init;
1008         }
1009 
1010         if (adap->fe[0]->ops.tuner_ops.sleep) {
1011                 state->tuner_sleep[adap->id] =
1012                         adap->fe[0]->ops.tuner_ops.sleep;
1013                 adap->fe[0]->ops.tuner_ops.sleep = af9015_tuner_sleep;
1014         }
1015 
1016         return ret;
1017 }
1018 
1019 static int af9015_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
1020 {
1021         struct dvb_usb_device *d = adap_to_d(adap);
1022         int ret;
1023         dev_dbg(&d->udev->dev, "%s: onoff=%d\n", __func__, onoff);
1024 
1025         if (onoff)
1026                 ret = af9015_set_reg_bit(d, 0xd503, 0);
1027         else
1028                 ret = af9015_clear_reg_bit(d, 0xd503, 0);
1029 
1030         return ret;
1031 }
1032 
1033 static int af9015_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
1034         int onoff)
1035 {
1036         struct dvb_usb_device *d = adap_to_d(adap);
1037         int ret;
1038         u8 idx;
1039         dev_dbg(&d->udev->dev, "%s: index=%d pid=%04x onoff=%d\n",
1040                         __func__, index, pid, onoff);
1041 
1042         ret = af9015_write_reg(d, 0xd505, (pid & 0xff));
1043         if (ret)
1044                 goto error;
1045 
1046         ret = af9015_write_reg(d, 0xd506, (pid >> 8));
1047         if (ret)
1048                 goto error;
1049 
1050         idx = ((index & 0x1f) | (1 << 5));
1051         ret = af9015_write_reg(d, 0xd504, idx);
1052 
1053 error:
1054         return ret;
1055 }
1056 
1057 static int af9015_init_endpoint(struct dvb_usb_device *d)
1058 {
1059         struct af9015_state *state = d_to_priv(d);
1060         int ret;
1061         u16 frame_size;
1062         u8  packet_size;
1063         dev_dbg(&d->udev->dev, "%s: USB speed=%d\n", __func__, d->udev->speed);
1064 
1065         if (d->udev->speed == USB_SPEED_FULL) {
1066                 frame_size = TS_USB11_FRAME_SIZE/4;
1067                 packet_size = TS_USB11_MAX_PACKET_SIZE/4;
1068         } else {
1069                 frame_size = TS_USB20_FRAME_SIZE/4;
1070                 packet_size = TS_USB20_MAX_PACKET_SIZE/4;
1071         }
1072 
1073         ret = af9015_set_reg_bit(d, 0xd507, 2); /* assert EP4 reset */
1074         if (ret)
1075                 goto error;
1076         ret = af9015_set_reg_bit(d, 0xd50b, 1); /* assert EP5 reset */
1077         if (ret)
1078                 goto error;
1079         ret = af9015_clear_reg_bit(d, 0xdd11, 5); /* disable EP4 */
1080         if (ret)
1081                 goto error;
1082         ret = af9015_clear_reg_bit(d, 0xdd11, 6); /* disable EP5 */
1083         if (ret)
1084                 goto error;
1085         ret = af9015_set_reg_bit(d, 0xdd11, 5); /* enable EP4 */
1086         if (ret)
1087                 goto error;
1088         if (state->dual_mode) {
1089                 ret = af9015_set_reg_bit(d, 0xdd11, 6); /* enable EP5 */
1090                 if (ret)
1091                         goto error;
1092         }
1093         ret = af9015_clear_reg_bit(d, 0xdd13, 5); /* disable EP4 NAK */
1094         if (ret)
1095                 goto error;
1096         if (state->dual_mode) {
1097                 ret = af9015_clear_reg_bit(d, 0xdd13, 6); /* disable EP5 NAK */
1098                 if (ret)
1099                         goto error;
1100         }
1101         /* EP4 xfer length */
1102         ret = af9015_write_reg(d, 0xdd88, frame_size & 0xff);
1103         if (ret)
1104                 goto error;
1105         ret = af9015_write_reg(d, 0xdd89, frame_size >> 8);
1106         if (ret)
1107                 goto error;
1108         /* EP5 xfer length */
1109         ret = af9015_write_reg(d, 0xdd8a, frame_size & 0xff);
1110         if (ret)
1111                 goto error;
1112         ret = af9015_write_reg(d, 0xdd8b, frame_size >> 8);
1113         if (ret)
1114                 goto error;
1115         ret = af9015_write_reg(d, 0xdd0c, packet_size); /* EP4 packet size */
1116         if (ret)
1117                 goto error;
1118         ret = af9015_write_reg(d, 0xdd0d, packet_size); /* EP5 packet size */
1119         if (ret)
1120                 goto error;
1121         ret = af9015_clear_reg_bit(d, 0xd507, 2); /* negate EP4 reset */
1122         if (ret)
1123                 goto error;
1124         if (state->dual_mode) {
1125                 ret = af9015_clear_reg_bit(d, 0xd50b, 1); /* negate EP5 reset */
1126                 if (ret)
1127                         goto error;
1128         }
1129 
1130         /* enable / disable mp2if2 */
1131         if (state->dual_mode)
1132                 ret = af9015_set_reg_bit(d, 0xd50b, 0);
1133         else
1134                 ret = af9015_clear_reg_bit(d, 0xd50b, 0);
1135 
1136 error:
1137         if (ret)
1138                 dev_err(&d->udev->dev, "%s: endpoint init failed=%d\n",
1139                                 KBUILD_MODNAME, ret);
1140 
1141         return ret;
1142 }
1143 
1144 static int af9015_init(struct dvb_usb_device *d)
1145 {
1146         struct af9015_state *state = d_to_priv(d);
1147         int ret;
1148         dev_dbg(&d->udev->dev, "%s:\n", __func__);
1149 
1150         mutex_init(&state->fe_mutex);
1151 
1152         /* init RC canary */
1153         ret = af9015_write_reg(d, 0x98e9, 0xff);
1154         if (ret)
1155                 goto error;
1156 
1157         ret = af9015_init_endpoint(d);
1158         if (ret)
1159                 goto error;
1160 
1161 error:
1162         return ret;
1163 }
1164 
1165 #if IS_ENABLED(CONFIG_RC_CORE)
1166 struct af9015_rc_setup {
1167         unsigned int id;
1168         char *rc_codes;
1169 };
1170 
1171 static char *af9015_rc_setup_match(unsigned int id,
1172         const struct af9015_rc_setup *table)
1173 {
1174         for (; table->rc_codes; table++)
1175                 if (table->id == id)
1176                         return table->rc_codes;
1177         return NULL;
1178 }
1179 
1180 static const struct af9015_rc_setup af9015_rc_setup_modparam[] = {
1181         { AF9015_REMOTE_A_LINK_DTU_M, RC_MAP_ALINK_DTU_M },
1182         { AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3, RC_MAP_MSI_DIGIVOX_II },
1183         { AF9015_REMOTE_MYGICTV_U718, RC_MAP_TOTAL_MEDIA_IN_HAND },
1184         { AF9015_REMOTE_DIGITTRADE_DVB_T, RC_MAP_DIGITTRADE },
1185         { AF9015_REMOTE_AVERMEDIA_KS, RC_MAP_AVERMEDIA_RM_KS },
1186         { }
1187 };
1188 
1189 static const struct af9015_rc_setup af9015_rc_setup_hashes[] = {
1190         { 0xb8feb708, RC_MAP_MSI_DIGIVOX_II },
1191         { 0xa3703d00, RC_MAP_ALINK_DTU_M },
1192         { 0x9b7dc64e, RC_MAP_TOTAL_MEDIA_IN_HAND }, /* MYGICTV U718 */
1193         { 0x5d49e3db, RC_MAP_DIGITTRADE }, /* LC-Power LC-USB-DVBT */
1194         { }
1195 };
1196 
1197 static int af9015_rc_query(struct dvb_usb_device *d)
1198 {
1199         struct af9015_state *state = d_to_priv(d);
1200         int ret;
1201         u8 buf[17];
1202 
1203         /* read registers needed to detect remote controller code */
1204         ret = af9015_read_regs(d, 0x98d9, buf, sizeof(buf));
1205         if (ret)
1206                 goto error;
1207 
1208         /* If any of these are non-zero, assume invalid data */
1209         if (buf[1] || buf[2] || buf[3]) {
1210                 dev_dbg(&d->udev->dev, "%s: invalid data\n", __func__);
1211                 return ret;
1212         }
1213 
1214         /* Check for repeat of previous code */
1215         if ((state->rc_repeat != buf[6] || buf[0]) &&
1216                         !memcmp(&buf[12], state->rc_last, 4)) {
1217                 dev_dbg(&d->udev->dev, "%s: key repeated\n", __func__);
1218                 rc_repeat(d->rc_dev);
1219                 state->rc_repeat = buf[6];
1220                 return ret;
1221         }
1222 
1223         /* Only process key if canary killed */
1224         if (buf[16] != 0xff && buf[0] != 0x01) {
1225                 dev_dbg(&d->udev->dev, "%s: key pressed %*ph\n",
1226                                 __func__, 4, buf + 12);
1227 
1228                 /* Reset the canary */
1229                 ret = af9015_write_reg(d, 0x98e9, 0xff);
1230                 if (ret)
1231                         goto error;
1232 
1233                 /* Remember this key */
1234                 memcpy(state->rc_last, &buf[12], 4);
1235                 if (buf[14] == (u8) ~buf[15]) {
1236                         if (buf[12] == (u8) ~buf[13]) {
1237                                 /* NEC */
1238                                 state->rc_keycode = RC_SCANCODE_NEC(buf[12],
1239                                                                     buf[14]);
1240                         } else {
1241                                 /* NEC extended*/
1242                                 state->rc_keycode = RC_SCANCODE_NECX(buf[12] << 8 |
1243                                                                      buf[13],
1244                                                                      buf[14]);
1245                         }
1246                 } else {
1247                         /* 32 bit NEC */
1248                         state->rc_keycode = RC_SCANCODE_NEC32(buf[12] << 24 |
1249                                                               buf[13] << 16 |
1250                                                               buf[14] << 8  |
1251                                                               buf[15]);
1252                 }
1253                 rc_keydown(d->rc_dev, RC_TYPE_NEC, state->rc_keycode, 0);
1254         } else {
1255                 dev_dbg(&d->udev->dev, "%s: no key press\n", __func__);
1256                 /* Invalidate last keypress */
1257                 /* Not really needed, but helps with debug */
1258                 state->rc_last[2] = state->rc_last[3];
1259         }
1260 
1261         state->rc_repeat = buf[6];
1262         state->rc_failed = false;
1263 
1264 error:
1265         if (ret) {
1266                 dev_warn(&d->udev->dev, "%s: rc query failed=%d\n",
1267                                 KBUILD_MODNAME, ret);
1268 
1269                 /* allow random errors as dvb-usb will stop polling on error */
1270                 if (!state->rc_failed)
1271                         ret = 0;
1272 
1273                 state->rc_failed = true;
1274         }
1275 
1276         return ret;
1277 }
1278 
1279 static int af9015_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
1280 {
1281         struct af9015_state *state = d_to_priv(d);
1282         u16 vid = le16_to_cpu(d->udev->descriptor.idVendor);
1283 
1284         if (state->ir_mode == AF9015_IR_MODE_DISABLED)
1285                 return 0;
1286 
1287         /* try to load remote based module param */
1288         if (!rc->map_name)
1289                 rc->map_name = af9015_rc_setup_match(dvb_usb_af9015_remote,
1290                                 af9015_rc_setup_modparam);
1291 
1292         /* try to load remote based eeprom hash */
1293         if (!rc->map_name)
1294                 rc->map_name = af9015_rc_setup_match(state->eeprom_sum,
1295                                 af9015_rc_setup_hashes);
1296 
1297         /* try to load remote based USB iManufacturer string */
1298         if (!rc->map_name && vid == USB_VID_AFATECH) {
1299                 /* Check USB manufacturer and product strings and try
1300                    to determine correct remote in case of chip vendor
1301                    reference IDs are used.
1302                    DO NOT ADD ANYTHING NEW HERE. Use hashes instead. */
1303                 char manufacturer[10];
1304                 memset(manufacturer, 0, sizeof(manufacturer));
1305                 usb_string(d->udev, d->udev->descriptor.iManufacturer,
1306                         manufacturer, sizeof(manufacturer));
1307                 if (!strcmp("MSI", manufacturer)) {
1308                         /* iManufacturer 1 MSI
1309                            iProduct      2 MSI K-VOX */
1310                         rc->map_name = af9015_rc_setup_match(
1311                                         AF9015_REMOTE_MSI_DIGIVOX_MINI_II_V3,
1312                                         af9015_rc_setup_modparam);
1313                 }
1314         }
1315 
1316         /* load empty to enable rc */
1317         if (!rc->map_name)
1318                 rc->map_name = RC_MAP_EMPTY;
1319 
1320         rc->allowed_protos = RC_BIT_NEC;
1321         rc->query = af9015_rc_query;
1322         rc->interval = 500;
1323 
1324         return 0;
1325 }
1326 #else
1327         #define af9015_get_rc_config NULL
1328 #endif
1329 
1330 static int af9015_probe(struct usb_interface *intf,
1331                 const struct usb_device_id *id)
1332 {
1333         struct usb_device *udev = interface_to_usbdev(intf);
1334         char manufacturer[sizeof("ITE Technologies, Inc.")];
1335 
1336         memset(manufacturer, 0, sizeof(manufacturer));
1337         usb_string(udev, udev->descriptor.iManufacturer,
1338                         manufacturer, sizeof(manufacturer));
1339         /*
1340          * There is two devices having same ID but different chipset. One uses
1341          * AF9015 and the other IT9135 chipset. Only difference seen on lsusb
1342          * is iManufacturer string.
1343          *
1344          * idVendor           0x0ccd TerraTec Electronic GmbH
1345          * idProduct          0x0099
1346          * bcdDevice            2.00
1347          * iManufacturer           1 Afatech
1348          * iProduct                2 DVB-T 2
1349          *
1350          * idVendor           0x0ccd TerraTec Electronic GmbH
1351          * idProduct          0x0099
1352          * bcdDevice            2.00
1353          * iManufacturer           1 ITE Technologies, Inc.
1354          * iProduct                2 DVB-T TV Stick
1355          */
1356         if ((le16_to_cpu(udev->descriptor.idVendor) == USB_VID_TERRATEC) &&
1357                         (le16_to_cpu(udev->descriptor.idProduct) == 0x0099)) {
1358                 if (!strcmp("ITE Technologies, Inc.", manufacturer)) {
1359                         dev_dbg(&udev->dev, "%s: rejecting device\n", __func__);
1360                         return -ENODEV;
1361                 }
1362         }
1363 
1364         return dvb_usbv2_probe(intf, id);
1365 }
1366 
1367 /* interface 0 is used by DVB-T receiver and
1368    interface 1 is for remote controller (HID) */
1369 static struct dvb_usb_device_properties af9015_props = {
1370         .driver_name = KBUILD_MODNAME,
1371         .owner = THIS_MODULE,
1372         .adapter_nr = adapter_nr,
1373         .size_of_priv = sizeof(struct af9015_state),
1374 
1375         .generic_bulk_ctrl_endpoint = 0x02,
1376         .generic_bulk_ctrl_endpoint_response = 0x81,
1377 
1378         .identify_state = af9015_identify_state,
1379         .firmware = AF9015_FIRMWARE,
1380         .download_firmware = af9015_download_firmware,
1381 
1382         .i2c_algo = &af9015_i2c_algo,
1383         .read_config = af9015_read_config,
1384         .frontend_attach = af9015_af9013_frontend_attach,
1385         .tuner_attach = af9015_tuner_attach,
1386         .init = af9015_init,
1387         .get_rc_config = af9015_get_rc_config,
1388         .get_stream_config = af9015_get_stream_config,
1389 
1390         .get_adapter_count = af9015_get_adapter_count,
1391         .adapter = {
1392                 {
1393                         .caps = DVB_USB_ADAP_HAS_PID_FILTER |
1394                                 DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
1395                         .pid_filter_count = 32,
1396                         .pid_filter = af9015_pid_filter,
1397                         .pid_filter_ctrl = af9015_pid_filter_ctrl,
1398 
1399                         .stream = DVB_USB_STREAM_BULK(0x84, 8, TS_USB20_FRAME_SIZE),
1400                 }, {
1401                         .stream = DVB_USB_STREAM_BULK(0x85, 8, TS_USB20_FRAME_SIZE),
1402                 },
1403         },
1404 };
1405 
1406 static const struct usb_device_id af9015_id_table[] = {
1407         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9015,
1408                 &af9015_props, "Afatech AF9015 reference design", NULL) },
1409         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_AFATECH_AF9015_9016,
1410                 &af9015_props, "Afatech AF9015 reference design", NULL) },
1411         { DVB_USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV_DONGLE_GOLD,
1412                 &af9015_props, "Leadtek WinFast DTV Dongle Gold", RC_MAP_LEADTEK_Y04G0051) },
1413         { DVB_USB_DEVICE(USB_VID_PINNACLE, USB_PID_PINNACLE_PCTV71E,
1414                 &af9015_props, "Pinnacle PCTV 71e", NULL) },
1415         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U,
1416                 &af9015_props, "KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)", NULL) },
1417         { DVB_USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_TINYTWIN,
1418                 &af9015_props, "DigitalNow TinyTwin", RC_MAP_AZUREWAVE_AD_TU700) },
1419         { DVB_USB_DEVICE(USB_VID_VISIONPLUS, USB_PID_AZUREWAVE_AD_TU700,
1420                 &af9015_props, "TwinHan AzureWave AD-TU700(704J)", RC_MAP_AZUREWAVE_AD_TU700) },
1421         { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_USB_XE_REV2,
1422                 &af9015_props, "TerraTec Cinergy T USB XE", NULL) },
1423         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_2T,
1424                 &af9015_props, "KWorld PlusTV Dual DVB-T PCI (DVB-T PC160-2T)", NULL) },
1425         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X,
1426                 &af9015_props, "AVerMedia AVerTV DVB-T Volar X", RC_MAP_AVERMEDIA_M135A) },
1427         { DVB_USB_DEVICE(USB_VID_XTENSIONS, USB_PID_XTENSIONS_XD_380,
1428                 &af9015_props, "Xtensions XD-380", NULL) },
1429         { DVB_USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGIVOX_DUO,
1430                 &af9015_props, "MSI DIGIVOX Duo", RC_MAP_MSI_DIGIVOX_III) },
1431         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_VOLAR_X_2,
1432                 &af9015_props, "Fujitsu-Siemens Slim Mobile USB DVB-T", NULL) },
1433         { DVB_USB_DEVICE(USB_VID_TELESTAR,  USB_PID_TELESTAR_STARSTICK_2,
1434                 &af9015_props, "Telestar Starstick 2", NULL) },
1435         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A309,
1436                 &af9015_props, "AVerMedia A309", NULL) },
1437         { DVB_USB_DEVICE(USB_VID_MSI_2, USB_PID_MSI_DIGI_VOX_MINI_III,
1438                 &af9015_props, "MSI Digi VOX mini III", RC_MAP_MSI_DIGIVOX_III) },
1439         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U,
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_2,
1442                 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1443         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_3,
1444                 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1445         { DVB_USB_DEVICE(USB_VID_AFATECH, USB_PID_TREKSTOR_DVBT,
1446                 &af9015_props, "TrekStor DVB-T USB Stick", RC_MAP_TREKSTOR) },
1447         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850,
1448                 &af9015_props, "AverMedia AVerTV Volar Black HD (A850)", NULL) },
1449         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A805,
1450                 &af9015_props, "AverMedia AVerTV Volar GPS 805 (A805)", NULL) },
1451         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_CONCEPTRONIC_CTVDIGRCU,
1452                 &af9015_props, "Conceptronic USB2.0 DVB-T CTVDIGRCU V3.0", NULL) },
1453         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_MC810,
1454                 &af9015_props, "KWorld Digial MC-810", NULL) },
1455         { DVB_USB_DEVICE(USB_VID_KYE, USB_PID_GENIUS_TVGO_DVB_T03,
1456                 &af9015_props, "Genius TVGo DVB-T03", NULL) },
1457         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_399U_2,
1458                 &af9015_props, "KWorld PlusTV Dual DVB-T Stick (DVB-T 399U)", NULL) },
1459         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_PC160_T,
1460                 &af9015_props, "KWorld PlusTV DVB-T PCI Pro Card (DVB-T PC160-T)", NULL) },
1461         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV20,
1462                 &af9015_props, "Sveon STV20 Tuner USB DVB-T HDTV", NULL) },
1463         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_TINYTWIN_2,
1464                 &af9015_props, "DigitalNow TinyTwin v2", RC_MAP_DIGITALNOW_TINYTWIN) },
1465         { DVB_USB_DEVICE(USB_VID_LEADTEK, USB_PID_WINFAST_DTV2000DS,
1466                 &af9015_props, "Leadtek WinFast DTV2000DS", RC_MAP_LEADTEK_Y04G0051) },
1467         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_UB383_T,
1468                 &af9015_props, "KWorld USB DVB-T Stick Mobile (UB383-T)", NULL) },
1469         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_KWORLD_395U_4,
1470                 &af9015_props, "KWorld USB DVB-T TV Stick II (VS-DVB-T 395U)", NULL) },
1471         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A815M,
1472                 &af9015_props, "AverMedia AVerTV Volar M (A815Mac)", NULL) },
1473         { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_RC,
1474                 &af9015_props, "TerraTec Cinergy T Stick RC", RC_MAP_TERRATEC_SLIM_2) },
1475         /* XXX: that same ID [0ccd:0099] is used by af9035 driver too */
1476         { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_T_STICK_DUAL_RC,
1477                 &af9015_props, "TerraTec Cinergy T Stick Dual RC", RC_MAP_TERRATEC_SLIM) },
1478         { DVB_USB_DEVICE(USB_VID_AVERMEDIA, USB_PID_AVERMEDIA_A850T,
1479                 &af9015_props, "AverMedia AVerTV Red HD+ (A850T)", NULL) },
1480         { DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_TINYTWIN_3,
1481                 &af9015_props, "DigitalNow TinyTwin v3", RC_MAP_DIGITALNOW_TINYTWIN) },
1482         { DVB_USB_DEVICE(USB_VID_KWORLD_2, USB_PID_SVEON_STV22,
1483                 &af9015_props, "Sveon STV22 Dual USB DVB-T Tuner HDTV", RC_MAP_MSI_DIGIVOX_III) },
1484         { }
1485 };
1486 MODULE_DEVICE_TABLE(usb, af9015_id_table);
1487 
1488 /* usb specific object needed to register this driver with the usb subsystem */
1489 static struct usb_driver af9015_usb_driver = {
1490         .name = KBUILD_MODNAME,
1491         .id_table = af9015_id_table,
1492         .probe = af9015_probe,
1493         .disconnect = dvb_usbv2_disconnect,
1494         .suspend = dvb_usbv2_suspend,
1495         .resume = dvb_usbv2_resume,
1496         .reset_resume = dvb_usbv2_reset_resume,
1497         .no_dynamic_id = 1,
1498         .soft_unbind = 1,
1499 };
1500 
1501 module_usb_driver(af9015_usb_driver);
1502 
1503 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1504 MODULE_DESCRIPTION("Afatech AF9015 driver");
1505 MODULE_LICENSE("GPL");
1506 MODULE_FIRMWARE(AF9015_FIRMWARE);
1507 

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