Lines Matching +full:1 +full:- +full:d
1 // SPDX-License-Identifier: GPL-2.0-only
3 * DVBWorld DVB-S 2101, 2102, DVB-S2 2104, DVB-C 3101,
7 * TechnoTrend S2-4600,
9 * Copyright (C) 2008-2012 Igor M. Liplianin (liplianin@me.by)
11 * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information
13 #include <media/dvb-usb-ids.h>
41 #define DW210X_WRITE_MSG 1
52 #define DW2101_FIRMWARE "dvb-usb-dw2101.fw"
53 #define DW2102_FIRMWARE "dvb-usb-dw2102.fw"
54 #define DW2104_FIRMWARE "dvb-usb-dw2104.fw"
55 #define DW3101_FIRMWARE "dvb-usb-dw3101.fw"
56 #define S630_FIRMWARE "dvb-usb-s630.fw"
57 #define S660_FIRMWARE "dvb-usb-s660.fw"
58 #define P1100_FIRMWARE "dvb-usb-p1100.fw"
59 #define P7500_FIRMWARE "dvb-usb-p7500.fw"
79 MODULE_PARM_DESC(debug, "set debugging level (1=info 2=xfer 4=rc(or-able))."
83 static int demod_probe = 1;
85 MODULE_PARM_DESC(demod, "demod to probe (1=cx24116 2=stv0903+stv6110 4=stv0903+stb6100(or-able)).");
100 return -ENOMEM; in dw210x_op_rw()
119 struct dvb_usb_device *d = i2c_get_adapdata(adap); in dw2102_i2c_transfer() local
124 if (!d) in dw2102_i2c_transfer()
125 return -ENODEV; in dw2102_i2c_transfer()
126 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in dw2102_i2c_transfer()
127 return -EAGAIN; in dw2102_i2c_transfer()
131 if (msg[0].len < 1) { in dw2102_i2c_transfer()
132 num = -EOPNOTSUPP; in dw2102_i2c_transfer()
137 for (i = 0; i < msg[1].len; i++) { in dw2102_i2c_transfer()
138 dw210x_op_rw(d->udev, 0xb5, value + i, 0, in dw2102_i2c_transfer()
140 msg[1].buf[i] = buf6[0]; in dw2102_i2c_transfer()
143 case 1: in dw2102_i2c_transfer()
147 num = -EOPNOTSUPP; in dw2102_i2c_transfer()
152 buf6[1] = msg[0].buf[0]; in dw2102_i2c_transfer()
153 buf6[2] = msg[0].buf[1]; in dw2102_i2c_transfer()
154 dw210x_op_rw(d->udev, 0xb2, 0, 0, in dw2102_i2c_transfer()
160 num = -EOPNOTSUPP; in dw2102_i2c_transfer()
165 buf6[1] = 5; in dw2102_i2c_transfer()
168 buf6[4] = msg[0].buf[1]; in dw2102_i2c_transfer()
171 dw210x_op_rw(d->udev, 0xb2, 0, 0, in dw2102_i2c_transfer()
174 if (msg[0].len < 1) { in dw2102_i2c_transfer()
175 num = -EOPNOTSUPP; in dw2102_i2c_transfer()
179 dw210x_op_rw(d->udev, 0xb5, 0, 0, in dw2102_i2c_transfer()
180 buf6, 1, DW210X_READ_MSG); in dw2102_i2c_transfer()
186 num = -EOPNOTSUPP; in dw2102_i2c_transfer()
189 dw210x_op_rw(d->udev, 0xb8, 0, 0, in dw2102_i2c_transfer()
192 msg[0].buf[1] = buf6[1]; in dw2102_i2c_transfer()
195 if (msg[0].len < 1) { in dw2102_i2c_transfer()
196 num = -EOPNOTSUPP; in dw2102_i2c_transfer()
200 buf6[1] = msg[0].buf[0]; in dw2102_i2c_transfer()
201 dw210x_op_rw(d->udev, 0xb2, 0, 0, in dw2102_i2c_transfer()
209 mutex_unlock(&d->i2c_mutex); in dw2102_i2c_transfer()
216 struct dvb_usb_device *d = i2c_get_adapdata(adap); in dw2102_serit_i2c_transfer() local
219 if (!d) in dw2102_serit_i2c_transfer()
220 return -ENODEV; in dw2102_serit_i2c_transfer()
221 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in dw2102_serit_i2c_transfer()
222 return -EAGAIN; in dw2102_serit_i2c_transfer()
226 if (msg[0].len != 1) { in dw2102_serit_i2c_transfer()
227 warn("i2c rd: len=%d is not 1!\n", in dw2102_serit_i2c_transfer()
229 num = -EOPNOTSUPP; in dw2102_serit_i2c_transfer()
233 if (2 + msg[1].len > sizeof(buf6)) { in dw2102_serit_i2c_transfer()
234 warn("i2c rd: len=%d is too big!\n", in dw2102_serit_i2c_transfer()
235 msg[1].len); in dw2102_serit_i2c_transfer()
236 num = -EOPNOTSUPP; in dw2102_serit_i2c_transfer()
241 buf6[0] = msg[0].addr << 1; in dw2102_serit_i2c_transfer()
242 buf6[1] = msg[0].len; in dw2102_serit_i2c_transfer()
244 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw2102_serit_i2c_transfer()
247 dw210x_op_rw(d->udev, 0xc3, 0xd0, 0, in dw2102_serit_i2c_transfer()
248 buf6, msg[1].len + 2, DW210X_READ_MSG); in dw2102_serit_i2c_transfer()
249 memcpy(msg[1].buf, buf6 + 2, msg[1].len); in dw2102_serit_i2c_transfer()
252 case 1: in dw2102_serit_i2c_transfer()
256 warn("i2c wr: len=%d is too big!\n", in dw2102_serit_i2c_transfer()
258 num = -EOPNOTSUPP; in dw2102_serit_i2c_transfer()
263 buf6[0] = msg[0].addr << 1; in dw2102_serit_i2c_transfer()
264 buf6[1] = msg[0].len; in dw2102_serit_i2c_transfer()
266 dw210x_op_rw(d->udev, 0xc2, 0, 0, buf6, in dw2102_serit_i2c_transfer()
270 dw210x_op_rw(d->udev, 0xb8, 0, 0, in dw2102_serit_i2c_transfer()
273 msg[0].buf[1] = buf6[1]; in dw2102_serit_i2c_transfer()
277 buf6[1] = msg[0].buf[0]; in dw2102_serit_i2c_transfer()
278 dw210x_op_rw(d->udev, 0xb2, 0, 0, in dw2102_serit_i2c_transfer()
285 mutex_unlock(&d->i2c_mutex); in dw2102_serit_i2c_transfer()
291 struct dvb_usb_device *d = i2c_get_adapdata(adap); in dw2102_earda_i2c_transfer() local
294 if (!d) in dw2102_earda_i2c_transfer()
295 return -ENODEV; in dw2102_earda_i2c_transfer()
296 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in dw2102_earda_i2c_transfer()
297 return -EAGAIN; in dw2102_earda_i2c_transfer()
306 warn("i2c rd: len=%d is not 1!\n", in dw2102_earda_i2c_transfer()
308 ret = -EOPNOTSUPP; in dw2102_earda_i2c_transfer()
312 if (2 + msg[1].len > sizeof(ibuf)) { in dw2102_earda_i2c_transfer()
313 warn("i2c rd: len=%d is too big!\n", in dw2102_earda_i2c_transfer()
314 msg[1].len); in dw2102_earda_i2c_transfer()
315 ret = -EOPNOTSUPP; in dw2102_earda_i2c_transfer()
319 obuf[0] = msg[0].addr << 1; in dw2102_earda_i2c_transfer()
320 obuf[1] = msg[0].len; in dw2102_earda_i2c_transfer()
322 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw2102_earda_i2c_transfer()
325 dw210x_op_rw(d->udev, 0xc3, 0xd1 , 0, in dw2102_earda_i2c_transfer()
326 ibuf, msg[1].len + 2, DW210X_READ_MSG); in dw2102_earda_i2c_transfer()
327 memcpy(msg[1].buf, ibuf + 2, msg[1].len); in dw2102_earda_i2c_transfer()
331 case 1: in dw2102_earda_i2c_transfer()
338 warn("i2c wr: len=%d is too big!\n", in dw2102_earda_i2c_transfer()
339 msg[1].len); in dw2102_earda_i2c_transfer()
340 ret = -EOPNOTSUPP; in dw2102_earda_i2c_transfer()
344 obuf[0] = msg[0].addr << 1; in dw2102_earda_i2c_transfer()
345 obuf[1] = msg[0].len; in dw2102_earda_i2c_transfer()
347 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw2102_earda_i2c_transfer()
356 warn("i2c wr: len=%d is too big!\n", in dw2102_earda_i2c_transfer()
357 msg[1].len); in dw2102_earda_i2c_transfer()
358 ret = -EOPNOTSUPP; in dw2102_earda_i2c_transfer()
362 obuf[0] = msg[0].addr << 1; in dw2102_earda_i2c_transfer()
363 obuf[1] = msg[0].len; in dw2102_earda_i2c_transfer()
365 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw2102_earda_i2c_transfer()
371 dw210x_op_rw(d->udev, 0xb8, 0, 0, in dw2102_earda_i2c_transfer()
379 obuf[1] = msg[0].buf[0]; in dw2102_earda_i2c_transfer()
380 dw210x_op_rw(d->udev, 0xb2, 0, 0, in dw2102_earda_i2c_transfer()
391 mutex_unlock(&d->i2c_mutex); in dw2102_earda_i2c_transfer()
397 struct dvb_usb_device *d = i2c_get_adapdata(adap); in dw2104_i2c_transfer() local
400 if (!d) in dw2104_i2c_transfer()
401 return -ENODEV; in dw2104_i2c_transfer()
402 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in dw2104_i2c_transfer()
403 return -EAGAIN; in dw2104_i2c_transfer()
409 dw210x_op_rw(d->udev, 0xb8, 0, 0, in dw2104_i2c_transfer()
417 obuf[1] = msg[j].buf[0]; in dw2104_i2c_transfer()
418 dw210x_op_rw(d->udev, 0xb2, 0, 0, in dw2104_i2c_transfer()
432 warn("i2c rd: len=%d is too big!\n", in dw2104_i2c_transfer()
434 ret = -EOPNOTSUPP; in dw2104_i2c_transfer()
438 dw210x_op_rw(d->udev, 0xc3, in dw2104_i2c_transfer()
439 (msg[j].addr << 1) + 1, 0, in dw2104_i2c_transfer()
450 obuf[0] = msg[j].addr << 1; in dw2104_i2c_transfer()
451 obuf[1] = (msg[j].len > 15 ? 17 : msg[j].len); in dw2104_i2c_transfer()
453 len = msg[j].len - 1; in dw2104_i2c_transfer()
454 i = 1; in dw2104_i2c_transfer()
458 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw2104_i2c_transfer()
462 len -= 16; in dw2104_i2c_transfer()
469 warn("i2c wr: len=%d is too big!\n", in dw2104_i2c_transfer()
471 ret = -EOPNOTSUPP; in dw2104_i2c_transfer()
475 obuf[0] = msg[j].addr << 1; in dw2104_i2c_transfer()
476 obuf[1] = msg[j].len; in dw2104_i2c_transfer()
478 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw2104_i2c_transfer()
490 mutex_unlock(&d->i2c_mutex); in dw2104_i2c_transfer()
497 struct dvb_usb_device *d = i2c_get_adapdata(adap); in dw3101_i2c_transfer() local
501 if (!d) in dw3101_i2c_transfer()
502 return -ENODEV; in dw3101_i2c_transfer()
503 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in dw3101_i2c_transfer()
504 return -EAGAIN; in dw3101_i2c_transfer()
513 warn("i2c rd: len=%d is not 1!\n", in dw3101_i2c_transfer()
515 ret = -EOPNOTSUPP; in dw3101_i2c_transfer()
518 if (2 + msg[1].len > sizeof(ibuf)) { in dw3101_i2c_transfer()
519 warn("i2c rd: len=%d is too big!\n", in dw3101_i2c_transfer()
520 msg[1].len); in dw3101_i2c_transfer()
521 ret = -EOPNOTSUPP; in dw3101_i2c_transfer()
524 obuf[0] = msg[0].addr << 1; in dw3101_i2c_transfer()
525 obuf[1] = msg[0].len; in dw3101_i2c_transfer()
527 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw3101_i2c_transfer()
530 dw210x_op_rw(d->udev, 0xc3, 0x19 , 0, in dw3101_i2c_transfer()
531 ibuf, msg[1].len + 2, DW210X_READ_MSG); in dw3101_i2c_transfer()
532 memcpy(msg[1].buf, ibuf + 2, msg[1].len); in dw3101_i2c_transfer()
536 case 1: in dw3101_i2c_transfer()
544 warn("i2c wr: len=%d is too big!\n", in dw3101_i2c_transfer()
546 ret = -EOPNOTSUPP; in dw3101_i2c_transfer()
549 obuf[0] = msg[0].addr << 1; in dw3101_i2c_transfer()
550 obuf[1] = msg[0].len; in dw3101_i2c_transfer()
552 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw3101_i2c_transfer()
558 dw210x_op_rw(d->udev, 0xb8, 0, 0, in dw3101_i2c_transfer()
576 mutex_unlock(&d->i2c_mutex); in dw3101_i2c_transfer()
583 struct dvb_usb_device *d = i2c_get_adapdata(adap); in s6x0_i2c_transfer() local
587 if (!d) in s6x0_i2c_transfer()
588 return -ENODEV; in s6x0_i2c_transfer()
589 udev = d->udev; in s6x0_i2c_transfer()
590 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in s6x0_i2c_transfer()
591 return -EAGAIN; in s6x0_i2c_transfer()
597 dw210x_op_rw(d->udev, 0xb8, 0, 0, in s6x0_i2c_transfer()
605 obuf[0] = 1; in s6x0_i2c_transfer()
606 obuf[1] = msg[j].buf[1];/* off-on */ in s6x0_i2c_transfer()
607 dw210x_op_rw(d->udev, 0x8a, 0, 0, in s6x0_i2c_transfer()
610 obuf[1] = msg[j].buf[0];/* 13v-18v */ in s6x0_i2c_transfer()
611 dw210x_op_rw(d->udev, 0x8a, 0, 0, in s6x0_i2c_transfer()
619 obuf[1] = msg[j].buf[0]; in s6x0_i2c_transfer()
620 dw210x_op_rw(d->udev, 0x8a, 0, 0, in s6x0_i2c_transfer()
635 warn("i2c rd: len=%d is too big!\n", in s6x0_i2c_transfer()
637 ret = -EOPNOTSUPP; in s6x0_i2c_transfer()
641 dw210x_op_rw(d->udev, 0x91, 0, 0, in s6x0_i2c_transfer()
651 18 : msg[j].len + 1); in s6x0_i2c_transfer()
652 obuf[1] = msg[j].addr << 1; in s6x0_i2c_transfer()
654 len = msg[j].len - 1; in s6x0_i2c_transfer()
655 i = 1; in s6x0_i2c_transfer()
659 dw210x_op_rw(d->udev, 0x80, 0, 0, in s6x0_i2c_transfer()
663 len -= 16; in s6x0_i2c_transfer()
665 } else if (j < (num - 1)) { in s6x0_i2c_transfer()
670 warn("i2c wr: len=%d is too big!\n", in s6x0_i2c_transfer()
672 ret = -EOPNOTSUPP; in s6x0_i2c_transfer()
676 obuf[0] = msg[j + 1].len; in s6x0_i2c_transfer()
677 obuf[1] = (msg[j].addr << 1); in s6x0_i2c_transfer()
679 dw210x_op_rw(d->udev, in s6x0_i2c_transfer()
680 le16_to_cpu(udev->descriptor.idProduct) == in s6x0_i2c_transfer()
690 warn("i2c wr: len=%d is too big!\n", in s6x0_i2c_transfer()
692 ret = -EOPNOTSUPP; in s6x0_i2c_transfer()
695 obuf[0] = msg[j].len + 1; in s6x0_i2c_transfer()
696 obuf[1] = (msg[j].addr << 1); in s6x0_i2c_transfer()
698 dw210x_op_rw(d->udev, 0x80, 0, 0, in s6x0_i2c_transfer()
710 mutex_unlock(&d->i2c_mutex); in s6x0_i2c_transfer()
717 struct dvb_usb_device *d = i2c_get_adapdata(adap); in su3000_i2c_transfer() local
721 if (!d) in su3000_i2c_transfer()
722 return -ENODEV; in su3000_i2c_transfer()
724 state = d->priv; in su3000_i2c_transfer()
726 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in su3000_i2c_transfer()
727 return -EAGAIN; in su3000_i2c_transfer()
728 if (mutex_lock_interruptible(&d->data_mutex) < 0) { in su3000_i2c_transfer()
729 mutex_unlock(&d->i2c_mutex); in su3000_i2c_transfer()
730 return -EAGAIN; in su3000_i2c_transfer()
737 state->data[0] = msg[j].buf[0] + 0x36; in su3000_i2c_transfer()
738 state->data[1] = 3; in su3000_i2c_transfer()
739 state->data[2] = 0; in su3000_i2c_transfer()
740 if (dvb_usb_generic_rw(d, state->data, 3, in su3000_i2c_transfer()
741 state->data, 0, 0) < 0) in su3000_i2c_transfer()
745 state->data[0] = 0x10; in su3000_i2c_transfer()
746 if (dvb_usb_generic_rw(d, state->data, 1, in su3000_i2c_transfer()
747 state->data, 2, 0) < 0) in su3000_i2c_transfer()
749 msg[j].buf[1] = state->data[0]; in su3000_i2c_transfer()
750 msg[j].buf[0] = state->data[1]; in su3000_i2c_transfer()
756 if ((j+1 < num) && (msg[j+1].flags & I2C_M_RD) && in su3000_i2c_transfer()
757 (msg[j].addr == msg[j+1].addr)) { in su3000_i2c_transfer()
759 if (4 + msg[j].len > sizeof(state->data)) { in su3000_i2c_transfer()
760 warn("i2c combined wr/rd: write len=%d is too big!\n", in su3000_i2c_transfer()
762 num = -EOPNOTSUPP; in su3000_i2c_transfer()
765 if (1 + msg[j+1].len > sizeof(state->data)) { in su3000_i2c_transfer()
766 warn("i2c combined wr/rd: read len=%d is too big!\n", in su3000_i2c_transfer()
767 msg[j+1].len); in su3000_i2c_transfer()
768 num = -EOPNOTSUPP; in su3000_i2c_transfer()
772 state->data[0] = 0x09; in su3000_i2c_transfer()
773 state->data[1] = msg[j].len; in su3000_i2c_transfer()
774 state->data[2] = msg[j+1].len; in su3000_i2c_transfer()
775 state->data[3] = msg[j].addr; in su3000_i2c_transfer()
776 memcpy(&state->data[4], msg[j].buf, msg[j].len); in su3000_i2c_transfer()
778 if (dvb_usb_generic_rw(d, state->data, msg[j].len + 4, in su3000_i2c_transfer()
779 state->data, msg[j+1].len + 1, 0) < 0) in su3000_i2c_transfer()
782 memcpy(msg[j+1].buf, &state->data[1], msg[j+1].len); in su3000_i2c_transfer()
789 if (4 + msg[j].len > sizeof(state->data)) { in su3000_i2c_transfer()
790 warn("i2c rd: len=%d is too big!\n", msg[j].len); in su3000_i2c_transfer()
791 num = -EOPNOTSUPP; in su3000_i2c_transfer()
795 state->data[0] = 0x09; in su3000_i2c_transfer()
796 state->data[1] = 0; in su3000_i2c_transfer()
797 state->data[2] = msg[j].len; in su3000_i2c_transfer()
798 state->data[3] = msg[j].addr; in su3000_i2c_transfer()
799 memcpy(&state->data[4], msg[j].buf, msg[j].len); in su3000_i2c_transfer()
801 if (dvb_usb_generic_rw(d, state->data, 4, in su3000_i2c_transfer()
802 state->data, msg[j].len + 1, 0) < 0) in su3000_i2c_transfer()
805 memcpy(msg[j].buf, &state->data[1], msg[j].len); in su3000_i2c_transfer()
810 if (3 + msg[j].len > sizeof(state->data)) { in su3000_i2c_transfer()
811 warn("i2c wr: len=%d is too big!\n", msg[j].len); in su3000_i2c_transfer()
812 num = -EOPNOTSUPP; in su3000_i2c_transfer()
816 state->data[0] = 0x08; in su3000_i2c_transfer()
817 state->data[1] = msg[j].addr; in su3000_i2c_transfer()
818 state->data[2] = msg[j].len; in su3000_i2c_transfer()
820 memcpy(&state->data[3], msg[j].buf, msg[j].len); in su3000_i2c_transfer()
822 if (dvb_usb_generic_rw(d, state->data, msg[j].len + 3, in su3000_i2c_transfer()
823 state->data, 1, 0) < 0) in su3000_i2c_transfer()
829 mutex_unlock(&d->data_mutex); in su3000_i2c_transfer()
830 mutex_unlock(&d->i2c_mutex); in su3000_i2c_transfer()
874 static int dw210x_read_mac_address(struct dvb_usb_device *d, u8 mac[6]) in dw210x_read_mac_address() argument
881 if (dw210x_op_rw(d->udev, 0xb6, 0xa0 , i, ibuf, 2, DW210X_READ_MSG) < 0) { in dw210x_read_mac_address()
883 return -EIO; in dw210x_read_mac_address()
889 deb_xfer("%02x: ", i - 15); in dw210x_read_mac_address()
898 static int s6x0_read_mac_address(struct dvb_usb_device *d, u8 mac[6]) in s6x0_read_mac_address() argument
905 .addr = 0xa0 >> 1, in s6x0_read_mac_address()
908 .len = 1, in s6x0_read_mac_address()
910 .addr = 0xa0 >> 1, in s6x0_read_mac_address()
913 .len = 1, in s6x0_read_mac_address()
919 ret = s6x0_i2c_transfer(&d->i2c_adap, msg, 2); in s6x0_read_mac_address()
922 return -EIO; in s6x0_read_mac_address()
929 deb_xfer("%02x: ", i - 15); in s6x0_read_mac_address()
946 .len = 1 in su3000_streaming_ctrl()
949 i2c_transfer(&adap->dev->i2c_adap, &msg, 1); in su3000_streaming_ctrl()
954 static int su3000_power_ctrl(struct dvb_usb_device *d, int i) in su3000_power_ctrl() argument
956 struct dw2102_state *state = d->priv; in su3000_power_ctrl()
959 info("%s: %d, initialized %d", __func__, i, state->initialized); in su3000_power_ctrl()
961 if (i && !state->initialized) { in su3000_power_ctrl()
962 mutex_lock(&d->data_mutex); in su3000_power_ctrl()
964 state->data[0] = 0xde; in su3000_power_ctrl()
965 state->data[1] = 0; in su3000_power_ctrl()
967 state->initialized = 1; in su3000_power_ctrl()
969 ret = dvb_usb_generic_rw(d, state->data, 2, NULL, 0, 0); in su3000_power_ctrl()
970 mutex_unlock(&d->data_mutex); in su3000_power_ctrl()
976 static int su3000_read_mac_address(struct dvb_usb_device *d, u8 mac[6]) in su3000_read_mac_address() argument
991 .len = 1, in su3000_read_mac_address()
997 obuf[1] = 0xf0 + i; in su3000_read_mac_address()
998 if (i2c_transfer(&d->i2c_adap, msg, 2) != 2) in su3000_read_mac_address()
999 return -EIO; in su3000_read_mac_address()
1031 struct dvb_usb_adapter *udev_adap = fe->dvb->priv; in dw210x_set_voltage()
1037 i2c_transfer(&udev_adap->dev->i2c_adap, &msg, 1); in dw210x_set_voltage()
1045 struct dvb_usb_adapter *d = fe->dvb->priv; in s660_set_voltage() local
1046 struct dw2102_state *st = d->dev->priv; in s660_set_voltage()
1049 if (st->old_set_voltage) in s660_set_voltage()
1050 st->old_set_voltage(fe, voltage); in s660_set_voltage()
1058 static u8 led_on[] = { 1 }; in dw210x_led_ctrl()
1063 .len = 1 in dw210x_led_ctrl()
1065 struct dvb_usb_adapter *udev_adap = fe->dvb->priv; in dw210x_led_ctrl()
1069 i2c_transfer(&udev_adap->dev->i2c_adap, &msg, 1); in dw210x_led_ctrl()
1075 struct dvb_usb_adapter *d = fe->dvb->priv; in tt_s2_4600_read_status() local
1076 struct dw2102_state *st = d->dev->priv; in tt_s2_4600_read_status()
1079 ret = st->fe_read_status(fe, status); in tt_s2_4600_read_status()
1082 if ((*status & FE_HAS_LOCK) && (!st->last_lock)) in tt_s2_4600_read_status()
1083 su3000_streaming_ctrl(d, 1); in tt_s2_4600_read_status()
1085 st->last_lock = (*status & FE_HAS_LOCK) ? 1 : 0; in tt_s2_4600_read_status()
1093 .invert = 1,
1114 .invert = 1,
1127 .clk_out_div = 1,
1133 .ci_mode = 1,
1139 .clk_out_div = 1,
1147 .clkmode = 3,/* 0-CLKI, 2-XTALI, else AUTO */
1166 .tun1_adc = 1,/* 1 Vpp */
1173 .clk_div = 1,
1180 .clkmode = 3,/* 0-CLKI, 2-XTALI, else AUTO */
1191 .ci_mode = 1,
1196 .i2c_address = 0x6c, /* (0xd8 >> 1) */
1198 .ts_clock_inv = 1,
1229 static int dw2104_frontend_attach(struct dvb_usb_adapter *d) in dw2104_frontend_attach() argument
1234 d->fe_adap[0].fe = dvb_attach(stv0900_attach, &dw2104a_stv0900_config, in dw2104_frontend_attach()
1235 &d->dev->i2c_adap, 0); in dw2104_frontend_attach()
1236 if (d->fe_adap[0].fe != NULL) { in dw2104_frontend_attach()
1237 if (dvb_attach(stb6100_attach, d->fe_adap[0].fe, in dw2104_frontend_attach()
1239 &d->dev->i2c_adap)) { in dw2104_frontend_attach()
1240 tuner_ops = &d->fe_adap[0].fe->ops.tuner_ops; in dw2104_frontend_attach()
1241 tuner_ops->set_frequency = stb6100_set_freq; in dw2104_frontend_attach()
1242 tuner_ops->get_frequency = stb6100_get_freq; in dw2104_frontend_attach()
1243 tuner_ops->set_bandwidth = stb6100_set_bandw; in dw2104_frontend_attach()
1244 tuner_ops->get_bandwidth = stb6100_get_bandw; in dw2104_frontend_attach()
1245 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2104_frontend_attach()
1253 d->fe_adap[0].fe = dvb_attach(stv0900_attach, &dw2104_stv0900_config, in dw2104_frontend_attach()
1254 &d->dev->i2c_adap, 0); in dw2104_frontend_attach()
1255 if (d->fe_adap[0].fe != NULL) { in dw2104_frontend_attach()
1256 if (dvb_attach(stv6110_attach, d->fe_adap[0].fe, in dw2104_frontend_attach()
1258 &d->dev->i2c_adap)) { in dw2104_frontend_attach()
1259 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2104_frontend_attach()
1266 if (demod_probe & 1) { in dw2104_frontend_attach()
1267 d->fe_adap[0].fe = dvb_attach(cx24116_attach, &dw2104_config, in dw2104_frontend_attach()
1268 &d->dev->i2c_adap); in dw2104_frontend_attach()
1269 if (d->fe_adap[0].fe != NULL) { in dw2104_frontend_attach()
1270 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2104_frontend_attach()
1276 d->fe_adap[0].fe = dvb_attach(ds3000_attach, &dw2104_ds3000_config, in dw2104_frontend_attach()
1277 &d->dev->i2c_adap); in dw2104_frontend_attach()
1278 if (d->fe_adap[0].fe != NULL) { in dw2104_frontend_attach()
1279 dvb_attach(ts2020_attach, d->fe_adap[0].fe, in dw2104_frontend_attach()
1280 &dw2104_ts2020_config, &d->dev->i2c_adap); in dw2104_frontend_attach()
1281 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2104_frontend_attach()
1286 return -EIO; in dw2104_frontend_attach()
1293 static int dw2102_frontend_attach(struct dvb_usb_adapter *d) in dw2102_frontend_attach() argument
1296 /*dw2102_properties.adapter->tuner_attach = NULL;*/ in dw2102_frontend_attach()
1297 d->fe_adap[0].fe = dvb_attach(si21xx_attach, &serit_sp1511lhb_config, in dw2102_frontend_attach()
1298 &d->dev->i2c_adap); in dw2102_frontend_attach()
1299 if (d->fe_adap[0].fe != NULL) { in dw2102_frontend_attach()
1300 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2102_frontend_attach()
1307 d->fe_adap[0].fe = dvb_attach(stv0288_attach, &earda_config, in dw2102_frontend_attach()
1308 &d->dev->i2c_adap); in dw2102_frontend_attach()
1309 if (d->fe_adap[0].fe != NULL) { in dw2102_frontend_attach()
1310 if (dvb_attach(stb6000_attach, d->fe_adap[0].fe, 0x61, in dw2102_frontend_attach()
1311 &d->dev->i2c_adap)) { in dw2102_frontend_attach()
1312 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2102_frontend_attach()
1320 /*dw2102_properties.adapter->tuner_attach = dw2102_tuner_attach;*/ in dw2102_frontend_attach()
1321 d->fe_adap[0].fe = dvb_attach(stv0299_attach, &sharp_z0194a_config, in dw2102_frontend_attach()
1322 &d->dev->i2c_adap); in dw2102_frontend_attach()
1323 if (d->fe_adap[0].fe != NULL) { in dw2102_frontend_attach()
1324 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2102_frontend_attach()
1329 return -EIO; in dw2102_frontend_attach()
1332 static int dw3101_frontend_attach(struct dvb_usb_adapter *d) in dw3101_frontend_attach() argument
1334 d->fe_adap[0].fe = dvb_attach(tda10023_attach, &dw3101_tda10023_config, in dw3101_frontend_attach()
1335 &d->dev->i2c_adap, 0x48); in dw3101_frontend_attach()
1336 if (d->fe_adap[0].fe != NULL) { in dw3101_frontend_attach()
1340 return -EIO; in dw3101_frontend_attach()
1343 static int zl100313_frontend_attach(struct dvb_usb_adapter *d) in zl100313_frontend_attach() argument
1345 d->fe_adap[0].fe = dvb_attach(mt312_attach, &zl313_config, in zl100313_frontend_attach()
1346 &d->dev->i2c_adap); in zl100313_frontend_attach()
1347 if (d->fe_adap[0].fe != NULL) { in zl100313_frontend_attach()
1348 if (dvb_attach(zl10039_attach, d->fe_adap[0].fe, 0x60, in zl100313_frontend_attach()
1349 &d->dev->i2c_adap)) { in zl100313_frontend_attach()
1350 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in zl100313_frontend_attach()
1356 return -EIO; in zl100313_frontend_attach()
1359 static int stv0288_frontend_attach(struct dvb_usb_adapter *d) in stv0288_frontend_attach() argument
1361 u8 obuf[] = {7, 1}; in stv0288_frontend_attach()
1363 d->fe_adap[0].fe = dvb_attach(stv0288_attach, &earda_config, in stv0288_frontend_attach()
1364 &d->dev->i2c_adap); in stv0288_frontend_attach()
1366 if (d->fe_adap[0].fe == NULL) in stv0288_frontend_attach()
1367 return -EIO; in stv0288_frontend_attach()
1369 if (NULL == dvb_attach(stb6000_attach, d->fe_adap[0].fe, 0x61, &d->dev->i2c_adap)) in stv0288_frontend_attach()
1370 return -EIO; in stv0288_frontend_attach()
1372 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in stv0288_frontend_attach()
1374 dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG); in stv0288_frontend_attach()
1382 static int ds3000_frontend_attach(struct dvb_usb_adapter *d) in ds3000_frontend_attach() argument
1384 struct dw2102_state *st = d->dev->priv; in ds3000_frontend_attach()
1385 u8 obuf[] = {7, 1}; in ds3000_frontend_attach()
1387 d->fe_adap[0].fe = dvb_attach(ds3000_attach, &s660_ds3000_config, in ds3000_frontend_attach()
1388 &d->dev->i2c_adap); in ds3000_frontend_attach()
1390 if (d->fe_adap[0].fe == NULL) in ds3000_frontend_attach()
1391 return -EIO; in ds3000_frontend_attach()
1393 dvb_attach(ts2020_attach, d->fe_adap[0].fe, &s660_ts2020_config, in ds3000_frontend_attach()
1394 &d->dev->i2c_adap); in ds3000_frontend_attach()
1396 st->old_set_voltage = d->fe_adap[0].fe->ops.set_voltage; in ds3000_frontend_attach()
1397 d->fe_adap[0].fe->ops.set_voltage = s660_set_voltage; in ds3000_frontend_attach()
1399 dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG); in ds3000_frontend_attach()
1406 static int prof_7500_frontend_attach(struct dvb_usb_adapter *d) in prof_7500_frontend_attach() argument
1408 u8 obuf[] = {7, 1}; in prof_7500_frontend_attach()
1410 d->fe_adap[0].fe = dvb_attach(stv0900_attach, &prof_7500_stv0900_config, in prof_7500_frontend_attach()
1411 &d->dev->i2c_adap, 0); in prof_7500_frontend_attach()
1412 if (d->fe_adap[0].fe == NULL) in prof_7500_frontend_attach()
1413 return -EIO; in prof_7500_frontend_attach()
1415 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in prof_7500_frontend_attach()
1417 dw210x_op_rw(d->dev->udev, 0x8a, 0, 0, obuf, 2, DW210X_WRITE_MSG); in prof_7500_frontend_attach()
1426 struct dvb_usb_device *d = adap->dev; in su3000_frontend_attach() local
1427 struct dw2102_state *state = d->priv; in su3000_frontend_attach()
1429 mutex_lock(&d->data_mutex); in su3000_frontend_attach()
1431 state->data[0] = 0xe; in su3000_frontend_attach()
1432 state->data[1] = 0x80; in su3000_frontend_attach()
1433 state->data[2] = 0; in su3000_frontend_attach()
1435 if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) in su3000_frontend_attach()
1438 state->data[0] = 0xe; in su3000_frontend_attach()
1439 state->data[1] = 0x02; in su3000_frontend_attach()
1440 state->data[2] = 1; in su3000_frontend_attach()
1442 if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) in su3000_frontend_attach()
1446 state->data[0] = 0xe; in su3000_frontend_attach()
1447 state->data[1] = 0x83; in su3000_frontend_attach()
1448 state->data[2] = 0; in su3000_frontend_attach()
1450 if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) in su3000_frontend_attach()
1453 state->data[0] = 0xe; in su3000_frontend_attach()
1454 state->data[1] = 0x83; in su3000_frontend_attach()
1455 state->data[2] = 1; in su3000_frontend_attach()
1457 if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) in su3000_frontend_attach()
1460 state->data[0] = 0x51; in su3000_frontend_attach()
1462 if (dvb_usb_generic_rw(d, state->data, 1, state->data, 1, 0) < 0) in su3000_frontend_attach()
1465 mutex_unlock(&d->data_mutex); in su3000_frontend_attach()
1467 adap->fe_adap[0].fe = dvb_attach(ds3000_attach, &su3000_ds3000_config, in su3000_frontend_attach()
1468 &d->i2c_adap); in su3000_frontend_attach()
1469 if (adap->fe_adap[0].fe == NULL) in su3000_frontend_attach()
1470 return -EIO; in su3000_frontend_attach()
1472 if (dvb_attach(ts2020_attach, adap->fe_adap[0].fe, in su3000_frontend_attach()
1474 &d->i2c_adap)) { in su3000_frontend_attach()
1480 return -EIO; in su3000_frontend_attach()
1485 struct dvb_usb_device *d = adap->dev; in t220_frontend_attach() local
1486 struct dw2102_state *state = d->priv; in t220_frontend_attach()
1488 mutex_lock(&d->data_mutex); in t220_frontend_attach()
1490 state->data[0] = 0xe; in t220_frontend_attach()
1491 state->data[1] = 0x87; in t220_frontend_attach()
1492 state->data[2] = 0x0; in t220_frontend_attach()
1494 if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) in t220_frontend_attach()
1497 state->data[0] = 0xe; in t220_frontend_attach()
1498 state->data[1] = 0x86; in t220_frontend_attach()
1499 state->data[2] = 1; in t220_frontend_attach()
1501 if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) in t220_frontend_attach()
1504 state->data[0] = 0xe; in t220_frontend_attach()
1505 state->data[1] = 0x80; in t220_frontend_attach()
1506 state->data[2] = 0; in t220_frontend_attach()
1508 if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) in t220_frontend_attach()
1513 state->data[0] = 0xe; in t220_frontend_attach()
1514 state->data[1] = 0x80; in t220_frontend_attach()
1515 state->data[2] = 1; in t220_frontend_attach()
1517 if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) in t220_frontend_attach()
1520 state->data[0] = 0x51; in t220_frontend_attach()
1522 if (dvb_usb_generic_rw(d, state->data, 1, state->data, 1, 0) < 0) in t220_frontend_attach()
1525 mutex_unlock(&d->data_mutex); in t220_frontend_attach()
1527 adap->fe_adap[0].fe = dvb_attach(cxd2820r_attach, &cxd2820r_config, in t220_frontend_attach()
1528 &d->i2c_adap, NULL); in t220_frontend_attach()
1529 if (adap->fe_adap[0].fe != NULL) { in t220_frontend_attach()
1530 if (dvb_attach(tda18271_attach, adap->fe_adap[0].fe, 0x60, in t220_frontend_attach()
1531 &d->i2c_adap, &tda18271_config)) { in t220_frontend_attach()
1538 return -EIO; in t220_frontend_attach()
1543 struct dvb_usb_device *d = adap->dev; in m88rs2000_frontend_attach() local
1544 struct dw2102_state *state = d->priv; in m88rs2000_frontend_attach()
1546 mutex_lock(&d->data_mutex); in m88rs2000_frontend_attach()
1548 state->data[0] = 0x51; in m88rs2000_frontend_attach()
1550 if (dvb_usb_generic_rw(d, state->data, 1, state->data, 1, 0) < 0) in m88rs2000_frontend_attach()
1553 mutex_unlock(&d->data_mutex); in m88rs2000_frontend_attach()
1555 adap->fe_adap[0].fe = dvb_attach(m88rs2000_attach, in m88rs2000_frontend_attach()
1557 &d->i2c_adap); in m88rs2000_frontend_attach()
1559 if (adap->fe_adap[0].fe == NULL) in m88rs2000_frontend_attach()
1560 return -EIO; in m88rs2000_frontend_attach()
1562 if (dvb_attach(ts2020_attach, adap->fe_adap[0].fe, in m88rs2000_frontend_attach()
1564 &d->i2c_adap)) { in m88rs2000_frontend_attach()
1570 return -EIO; in m88rs2000_frontend_attach()
1573 static int tt_s2_4600_frontend_attach_probe_demod(struct dvb_usb_device *d, in tt_s2_4600_frontend_attach_probe_demod() argument
1576 struct dw2102_state *state = d->priv; in tt_s2_4600_frontend_attach_probe_demod()
1578 state->data[0] = 0x9; in tt_s2_4600_frontend_attach_probe_demod()
1579 state->data[1] = 0x1; in tt_s2_4600_frontend_attach_probe_demod()
1580 state->data[2] = 0x1; in tt_s2_4600_frontend_attach_probe_demod()
1581 state->data[3] = probe_addr; in tt_s2_4600_frontend_attach_probe_demod()
1582 state->data[4] = 0x0; in tt_s2_4600_frontend_attach_probe_demod()
1584 if (dvb_usb_generic_rw(d, state->data, 5, state->data, 2, 0) < 0) { in tt_s2_4600_frontend_attach_probe_demod()
1589 if (state->data[0] != 8) /* fail(7) or error, no device at address */ in tt_s2_4600_frontend_attach_probe_demod()
1593 return 1; in tt_s2_4600_frontend_attach_probe_demod()
1598 struct dvb_usb_device *d = adap->dev; in tt_s2_4600_frontend_attach() local
1599 struct dw2102_state *state = d->priv; in tt_s2_4600_frontend_attach()
1607 mutex_lock(&d->data_mutex); in tt_s2_4600_frontend_attach()
1609 state->data[0] = 0xe; in tt_s2_4600_frontend_attach()
1610 state->data[1] = 0x80; in tt_s2_4600_frontend_attach()
1611 state->data[2] = 0x0; in tt_s2_4600_frontend_attach()
1613 if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) in tt_s2_4600_frontend_attach()
1616 state->data[0] = 0xe; in tt_s2_4600_frontend_attach()
1617 state->data[1] = 0x02; in tt_s2_4600_frontend_attach()
1618 state->data[2] = 1; in tt_s2_4600_frontend_attach()
1620 if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) in tt_s2_4600_frontend_attach()
1624 state->data[0] = 0xe; in tt_s2_4600_frontend_attach()
1625 state->data[1] = 0x83; in tt_s2_4600_frontend_attach()
1626 state->data[2] = 0; in tt_s2_4600_frontend_attach()
1628 if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) in tt_s2_4600_frontend_attach()
1631 state->data[0] = 0xe; in tt_s2_4600_frontend_attach()
1632 state->data[1] = 0x83; in tt_s2_4600_frontend_attach()
1633 state->data[2] = 1; in tt_s2_4600_frontend_attach()
1635 if (dvb_usb_generic_rw(d, state->data, 3, state->data, 1, 0) < 0) in tt_s2_4600_frontend_attach()
1638 state->data[0] = 0x51; in tt_s2_4600_frontend_attach()
1640 if (dvb_usb_generic_rw(d, state->data, 1, state->data, 1, 0) < 0) in tt_s2_4600_frontend_attach()
1644 demod_addr = -1; in tt_s2_4600_frontend_attach()
1645 if (tt_s2_4600_frontend_attach_probe_demod(d, 0x68)) in tt_s2_4600_frontend_attach()
1647 else if (tt_s2_4600_frontend_attach_probe_demod(d, 0x69)) in tt_s2_4600_frontend_attach()
1649 else if (tt_s2_4600_frontend_attach_probe_demod(d, 0x6a)) in tt_s2_4600_frontend_attach()
1652 mutex_unlock(&d->data_mutex); in tt_s2_4600_frontend_attach()
1656 return -ENODEV; in tt_s2_4600_frontend_attach()
1670 m88ds3103_pdata.lnb_hv_pol = 1; in tt_s2_4600_frontend_attach()
1680 client = i2c_new_client_device(&d->i2c_adap, &board_info); in tt_s2_4600_frontend_attach()
1682 return -ENODEV; in tt_s2_4600_frontend_attach()
1683 if (!try_module_get(client->dev.driver->owner)) { in tt_s2_4600_frontend_attach()
1685 return -ENODEV; in tt_s2_4600_frontend_attach()
1687 adap->fe_adap[0].fe = m88ds3103_pdata.get_dvb_frontend(client); in tt_s2_4600_frontend_attach()
1690 state->i2c_client_demod = client; in tt_s2_4600_frontend_attach()
1693 ts2020_config.fe = adap->fe_adap[0].fe; in tt_s2_4600_frontend_attach()
1702 dvb_frontend_detach(adap->fe_adap[0].fe); in tt_s2_4600_frontend_attach()
1703 return -ENODEV; in tt_s2_4600_frontend_attach()
1706 if (!try_module_get(client->dev.driver->owner)) { in tt_s2_4600_frontend_attach()
1708 dvb_frontend_detach(adap->fe_adap[0].fe); in tt_s2_4600_frontend_attach()
1709 return -ENODEV; in tt_s2_4600_frontend_attach()
1713 adap->fe_adap[0].fe->ops.read_signal_strength = in tt_s2_4600_frontend_attach()
1714 adap->fe_adap[0].fe->ops.tuner_ops.get_rf_strength; in tt_s2_4600_frontend_attach()
1716 state->i2c_client_tuner = client; in tt_s2_4600_frontend_attach()
1719 state->fe_read_status = adap->fe_adap[0].fe->ops.read_status; in tt_s2_4600_frontend_attach()
1720 adap->fe_adap[0].fe->ops.read_status = tt_s2_4600_read_status; in tt_s2_4600_frontend_attach()
1722 state->last_lock = 0; in tt_s2_4600_frontend_attach()
1729 dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, 0x60, in dw2102_tuner_attach()
1730 &adap->dev->i2c_adap, DVB_PLL_OPERA1); in dw2102_tuner_attach()
1736 dvb_attach(dvb_pll_attach, adap->fe_adap[0].fe, 0x60, in dw3101_tuner_attach()
1737 &adap->dev->i2c_adap, DVB_PLL_TUA6034); in dw3101_tuner_attach()
1742 static int dw2102_rc_query(struct dvb_usb_device *d) in dw2102_rc_query() argument
1752 if (d->props.i2c_algo->master_xfer(&d->i2c_adap, &msg, 1) == 1) { in dw2102_rc_query()
1755 __func__, key[0], key[1]); in dw2102_rc_query()
1756 rc_keydown(d->rc_dev, RC_PROTO_UNKNOWN, key[0], 0); in dw2102_rc_query()
1763 static int prof_rc_query(struct dvb_usb_device *d) in prof_rc_query() argument
1773 if (d->props.i2c_algo->master_xfer(&d->i2c_adap, &msg, 1) == 1) { in prof_rc_query()
1776 __func__, key[0], key[1]); in prof_rc_query()
1777 rc_keydown(d->rc_dev, RC_PROTO_UNKNOWN, key[0] ^ 0xff, in prof_rc_query()
1785 static int su3000_rc_query(struct dvb_usb_device *d) in su3000_rc_query() argument
1795 if (d->props.i2c_algo->master_xfer(&d->i2c_adap, &msg, 1) == 1) { in su3000_rc_query()
1798 __func__, key[0], key[1]); in su3000_rc_query()
1799 rc_keydown(d->rc_dev, RC_PROTO_RC5, in su3000_rc_query()
1800 RC_SCANCODE_RC5(key[1], key[0]), 0); in su3000_rc_query()
1885 switch (le16_to_cpu(dev->descriptor.idProduct)) { in dw2102_load_firmware()
1887 ret = request_firmware(&fw, DW2101_FIRMWARE, &dev->dev); in dw2102_load_firmware()
1898 p = kmalloc(fw->size, GFP_KERNEL); in dw2102_load_firmware()
1899 reset = 1; in dw2102_load_firmware()
1901 dw210x_op_rw(dev, 0xa0, 0x7f92, 0, &reset, 1, DW210X_WRITE_MSG); in dw2102_load_firmware()
1902 dw210x_op_rw(dev, 0xa0, 0xe600, 0, &reset, 1, DW210X_WRITE_MSG); in dw2102_load_firmware()
1905 memcpy(p, fw->data, fw->size); in dw2102_load_firmware()
1906 for (i = 0; i < fw->size; i += 0x40) { in dw2102_load_firmware()
1911 ret = -EINVAL; in dw2102_load_firmware()
1917 if (ret || dw210x_op_rw(dev, 0xa0, 0x7f92, 0, &reset, 1, in dw2102_load_firmware()
1918 DW210X_WRITE_MSG) != 1) { in dw2102_load_firmware()
1920 ret = -EINVAL; in dw2102_load_firmware()
1922 if (ret || dw210x_op_rw(dev, 0xa0, 0xe600, 0, &reset, 1, in dw2102_load_firmware()
1923 DW210X_WRITE_MSG) != 1) { in dw2102_load_firmware()
1925 ret = -EINVAL; in dw2102_load_firmware()
1928 switch (le16_to_cpu(dev->descriptor.idProduct)) { in dw2102_load_firmware()
1933 reset = 1; in dw2102_load_firmware()
1934 dw210x_op_rw(dev, 0xc4, 0x0000, 0, &reset, 1, in dw2102_load_firmware()
1953 dw2102_properties.adapter->fe[0].tuner_attach = &dw2102_tuner_attach; in dw2102_load_firmware()
1958 reset16[1] = 1; in dw2102_load_firmware()
1986 if (le16_to_cpu(dev->descriptor.idProduct) == 0x2101) in dw2102_load_firmware()
1995 .no_reconnect = 1,
2008 /* parameter for the MPEG2-data transfer */
2009 .num_adapters = 1,
2014 .num_frontends = 1,
2032 {"DVBWorld DVB-S 2102 USB2.0",
2036 {"DVBWorld DVB-S 2101 USB2.0",
2051 .no_reconnect = 1,
2063 /* parameter for the MPEG2-data transfer */
2064 .num_adapters = 1,
2069 .num_frontends = 1,
2102 .no_reconnect = 1,
2114 /* parameter for the MPEG2-data transfer */
2115 .num_adapters = 1,
2120 .num_frontends = 1,
2137 .num_device_descs = 1,
2139 { "DVBWorld DVB-C 3101 USB2.0",
2151 .no_reconnect = 1,
2163 .num_adapters = 1,
2168 .num_frontends = 1,
2184 .num_device_descs = 1,
2198 .no_reconnect = 1,
2210 .num_adapters = 1,
2215 .num_frontends = 1,
2231 .num_device_descs = 1,
2245 .no_reconnect = 1,
2257 .num_adapters = 1,
2262 .num_frontends = 1,
2284 {"TeVii S480.1 USB",
2300 .no_reconnect = 1,
2312 .num_adapters = 1,
2317 .num_frontends = 1,
2333 .num_device_descs = 1,
2335 {"Prof 7500 USB DVB-S2",
2347 .num_adapters = 1,
2365 .num_frontends = 1,
2384 { "SU3000HD DVB-S USB2.0",
2408 { "Terratec Cinergy S2 PCIe Dual Port 1",
2428 .num_adapters = 1,
2446 .num_frontends = 1,
2481 .num_adapters = 1,
2499 .num_frontends = 1,
2516 .num_device_descs = 1,
2518 { "Geniatech T220 DVB-T/T2 USB2.0",
2530 .num_adapters = 1,
2548 .num_frontends = 1,
2567 { "TechnoTrend TT-connect S2-4600",
2571 { "TeVii S482 (tuner 1)",
2619 return -ENODEV; in dw2102_probe()
2624 struct dvb_usb_device *d = usb_get_intfdata(intf); in dw2102_disconnect() local
2625 struct dw2102_state *st = d->priv; in dw2102_disconnect()
2629 client = st->i2c_client_tuner; in dw2102_disconnect()
2631 module_put(client->dev.driver->owner); in dw2102_disconnect()
2636 client = st->i2c_client_demod; in dw2102_disconnect()
2638 module_put(client->dev.driver->owner); in dw2102_disconnect()
2655 …-S 2101, 2102, DVB-S2 2104, DVB-C 3101 USB2.0, TeVii S421, S480, S482, S600, S630, S632, S650, TeV…