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 ([email protected])
11 * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information
13 #include <media/dvb-usb-ids.h>
40 #define DW210X_WRITE_MSG 1
51 #define DW2101_FIRMWARE "dvb-usb-dw2101.fw"
52 #define DW2102_FIRMWARE "dvb-usb-dw2102.fw"
53 #define DW2104_FIRMWARE "dvb-usb-dw2104.fw"
54 #define DW3101_FIRMWARE "dvb-usb-dw3101.fw"
55 #define S630_FIRMWARE "dvb-usb-s630.fw"
56 #define S660_FIRMWARE "dvb-usb-s660.fw"
57 #define P1100_FIRMWARE "dvb-usb-p1100.fw"
58 #define P7500_FIRMWARE "dvb-usb-p7500.fw"
78 MODULE_PARM_DESC(debug, "set debugging level (1=info 2=xfer 4=rc(or-able))."
82 static int demod_probe = 1;
84 MODULE_PARM_DESC(demod, "demod to probe (1=cx24116 2=stv0903+stv6110 4=stv0903+stb6100(or-able)).");
99 return -ENOMEM; in dw210x_op_rw()
117 struct dvb_usb_device *d = i2c_get_adapdata(adap); in dw2102_i2c_transfer() local
122 if (!d) in dw2102_i2c_transfer()
123 return -ENODEV; in dw2102_i2c_transfer()
124 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in dw2102_i2c_transfer()
125 return -EAGAIN; in dw2102_i2c_transfer()
129 if (msg[0].len < 1) { in dw2102_i2c_transfer()
130 num = -EOPNOTSUPP; in dw2102_i2c_transfer()
135 for (i = 0; i < msg[1].len; i++) { in dw2102_i2c_transfer()
136 dw210x_op_rw(d->udev, 0xb5, value + i, 0, in dw2102_i2c_transfer()
138 msg[1].buf[i] = buf6[0]; in dw2102_i2c_transfer()
141 case 1: in dw2102_i2c_transfer()
145 num = -EOPNOTSUPP; in dw2102_i2c_transfer()
150 buf6[1] = msg[0].buf[0]; in dw2102_i2c_transfer()
151 buf6[2] = msg[0].buf[1]; in dw2102_i2c_transfer()
152 dw210x_op_rw(d->udev, 0xb2, 0, 0, in dw2102_i2c_transfer()
158 num = -EOPNOTSUPP; in dw2102_i2c_transfer()
163 buf6[1] = 5; in dw2102_i2c_transfer()
166 buf6[4] = msg[0].buf[1]; in dw2102_i2c_transfer()
169 dw210x_op_rw(d->udev, 0xb2, 0, 0, in dw2102_i2c_transfer()
172 if (msg[0].len < 1) { in dw2102_i2c_transfer()
173 num = -EOPNOTSUPP; in dw2102_i2c_transfer()
177 dw210x_op_rw(d->udev, 0xb5, 0, 0, in dw2102_i2c_transfer()
178 buf6, 1, DW210X_READ_MSG); in dw2102_i2c_transfer()
184 num = -EOPNOTSUPP; in dw2102_i2c_transfer()
187 dw210x_op_rw(d->udev, 0xb8, 0, 0, in dw2102_i2c_transfer()
190 msg[0].buf[1] = buf6[1]; in dw2102_i2c_transfer()
193 if (msg[0].len < 1) { in dw2102_i2c_transfer()
194 num = -EOPNOTSUPP; in dw2102_i2c_transfer()
198 buf6[1] = msg[0].buf[0]; in dw2102_i2c_transfer()
199 dw210x_op_rw(d->udev, 0xb2, 0, 0, in dw2102_i2c_transfer()
207 mutex_unlock(&d->i2c_mutex); in dw2102_i2c_transfer()
214 struct dvb_usb_device *d = i2c_get_adapdata(adap); in dw2102_serit_i2c_transfer() local
217 if (!d) in dw2102_serit_i2c_transfer()
218 return -ENODEV; in dw2102_serit_i2c_transfer()
219 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in dw2102_serit_i2c_transfer()
220 return -EAGAIN; in dw2102_serit_i2c_transfer()
224 if (msg[0].len != 1) { in dw2102_serit_i2c_transfer()
225 warn("i2c rd: len=%d is not 1!\n", in dw2102_serit_i2c_transfer()
227 num = -EOPNOTSUPP; in dw2102_serit_i2c_transfer()
231 if (2 + msg[1].len > sizeof(buf6)) { in dw2102_serit_i2c_transfer()
232 warn("i2c rd: len=%d is too big!\n", in dw2102_serit_i2c_transfer()
233 msg[1].len); in dw2102_serit_i2c_transfer()
234 num = -EOPNOTSUPP; in dw2102_serit_i2c_transfer()
239 buf6[0] = msg[0].addr << 1; in dw2102_serit_i2c_transfer()
240 buf6[1] = msg[0].len; in dw2102_serit_i2c_transfer()
242 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw2102_serit_i2c_transfer()
245 dw210x_op_rw(d->udev, 0xc3, 0xd0, 0, in dw2102_serit_i2c_transfer()
246 buf6, msg[1].len + 2, DW210X_READ_MSG); in dw2102_serit_i2c_transfer()
247 memcpy(msg[1].buf, buf6 + 2, msg[1].len); in dw2102_serit_i2c_transfer()
250 case 1: in dw2102_serit_i2c_transfer()
254 warn("i2c wr: len=%d is too big!\n", in dw2102_serit_i2c_transfer()
256 num = -EOPNOTSUPP; in dw2102_serit_i2c_transfer()
261 buf6[0] = msg[0].addr << 1; in dw2102_serit_i2c_transfer()
262 buf6[1] = msg[0].len; in dw2102_serit_i2c_transfer()
264 dw210x_op_rw(d->udev, 0xc2, 0, 0, buf6, in dw2102_serit_i2c_transfer()
268 dw210x_op_rw(d->udev, 0xb8, 0, 0, in dw2102_serit_i2c_transfer()
271 msg[0].buf[1] = buf6[1]; in dw2102_serit_i2c_transfer()
275 buf6[1] = msg[0].buf[0]; in dw2102_serit_i2c_transfer()
276 dw210x_op_rw(d->udev, 0xb2, 0, 0, in dw2102_serit_i2c_transfer()
283 mutex_unlock(&d->i2c_mutex); in dw2102_serit_i2c_transfer()
289 struct dvb_usb_device *d = i2c_get_adapdata(adap); in dw2102_earda_i2c_transfer() local
292 if (!d) in dw2102_earda_i2c_transfer()
293 return -ENODEV; in dw2102_earda_i2c_transfer()
294 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in dw2102_earda_i2c_transfer()
295 return -EAGAIN; in dw2102_earda_i2c_transfer()
304 warn("i2c rd: len=%d is not 1!\n", in dw2102_earda_i2c_transfer()
306 ret = -EOPNOTSUPP; in dw2102_earda_i2c_transfer()
310 if (2 + msg[1].len > sizeof(ibuf)) { in dw2102_earda_i2c_transfer()
311 warn("i2c rd: len=%d is too big!\n", in dw2102_earda_i2c_transfer()
312 msg[1].len); in dw2102_earda_i2c_transfer()
313 ret = -EOPNOTSUPP; in dw2102_earda_i2c_transfer()
317 obuf[0] = msg[0].addr << 1; in dw2102_earda_i2c_transfer()
318 obuf[1] = msg[0].len; in dw2102_earda_i2c_transfer()
320 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw2102_earda_i2c_transfer()
323 dw210x_op_rw(d->udev, 0xc3, 0xd1, 0, in dw2102_earda_i2c_transfer()
324 ibuf, msg[1].len + 2, DW210X_READ_MSG); in dw2102_earda_i2c_transfer()
325 memcpy(msg[1].buf, ibuf + 2, msg[1].len); in dw2102_earda_i2c_transfer()
329 case 1: in dw2102_earda_i2c_transfer()
336 warn("i2c wr: len=%d is too big!\n", in dw2102_earda_i2c_transfer()
337 msg[1].len); in dw2102_earda_i2c_transfer()
338 ret = -EOPNOTSUPP; in dw2102_earda_i2c_transfer()
342 obuf[0] = msg[0].addr << 1; in dw2102_earda_i2c_transfer()
343 obuf[1] = msg[0].len; in dw2102_earda_i2c_transfer()
345 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw2102_earda_i2c_transfer()
354 warn("i2c wr: len=%d is too big!\n", in dw2102_earda_i2c_transfer()
355 msg[1].len); in dw2102_earda_i2c_transfer()
356 ret = -EOPNOTSUPP; in dw2102_earda_i2c_transfer()
360 obuf[0] = msg[0].addr << 1; in dw2102_earda_i2c_transfer()
361 obuf[1] = msg[0].len; in dw2102_earda_i2c_transfer()
363 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw2102_earda_i2c_transfer()
370 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()
410 dw210x_op_rw(d->udev, 0xb8, 0, 0, in dw2104_i2c_transfer()
419 obuf[1] = msg[j].buf[0]; in dw2104_i2c_transfer()
420 dw210x_op_rw(d->udev, 0xb2, 0, 0, in dw2104_i2c_transfer()
435 warn("i2c rd: len=%d is too big!\n", in dw2104_i2c_transfer()
437 ret = -EOPNOTSUPP; in dw2104_i2c_transfer()
441 dw210x_op_rw(d->udev, 0xc3, in dw2104_i2c_transfer()
442 (msg[j].addr << 1) + 1, 0, in dw2104_i2c_transfer()
452 obuf[0] = msg[j].addr << 1; in dw2104_i2c_transfer()
453 obuf[1] = (msg[j].len > 15 ? 17 : msg[j].len); in dw2104_i2c_transfer()
455 len = msg[j].len - 1; in dw2104_i2c_transfer()
456 i = 1; in dw2104_i2c_transfer()
460 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw2104_i2c_transfer()
464 len -= 16; in dw2104_i2c_transfer()
471 warn("i2c wr: len=%d is too big!\n", in dw2104_i2c_transfer()
473 ret = -EOPNOTSUPP; in dw2104_i2c_transfer()
477 obuf[0] = msg[j].addr << 1; in dw2104_i2c_transfer()
478 obuf[1] = msg[j].len; in dw2104_i2c_transfer()
480 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw2104_i2c_transfer()
491 mutex_unlock(&d->i2c_mutex); in dw2104_i2c_transfer()
498 struct dvb_usb_device *d = i2c_get_adapdata(adap); in dw3101_i2c_transfer() local
502 if (!d) in dw3101_i2c_transfer()
503 return -ENODEV; in dw3101_i2c_transfer()
504 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in dw3101_i2c_transfer()
505 return -EAGAIN; in dw3101_i2c_transfer()
514 warn("i2c rd: len=%d is not 1!\n", in dw3101_i2c_transfer()
516 ret = -EOPNOTSUPP; in dw3101_i2c_transfer()
519 if (2 + msg[1].len > sizeof(ibuf)) { in dw3101_i2c_transfer()
520 warn("i2c rd: len=%d is too big!\n", in dw3101_i2c_transfer()
521 msg[1].len); in dw3101_i2c_transfer()
522 ret = -EOPNOTSUPP; in dw3101_i2c_transfer()
525 obuf[0] = msg[0].addr << 1; in dw3101_i2c_transfer()
526 obuf[1] = msg[0].len; in dw3101_i2c_transfer()
528 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw3101_i2c_transfer()
531 dw210x_op_rw(d->udev, 0xc3, 0x19, 0, in dw3101_i2c_transfer()
532 ibuf, msg[1].len + 2, DW210X_READ_MSG); in dw3101_i2c_transfer()
533 memcpy(msg[1].buf, ibuf + 2, msg[1].len); in dw3101_i2c_transfer()
537 case 1: in dw3101_i2c_transfer()
545 warn("i2c wr: len=%d is too big!\n", in dw3101_i2c_transfer()
547 ret = -EOPNOTSUPP; in dw3101_i2c_transfer()
550 obuf[0] = msg[0].addr << 1; in dw3101_i2c_transfer()
551 obuf[1] = msg[0].len; in dw3101_i2c_transfer()
553 dw210x_op_rw(d->udev, 0xc2, 0, 0, in dw3101_i2c_transfer()
560 dw210x_op_rw(d->udev, 0xb8, 0, 0, in dw3101_i2c_transfer()
578 mutex_unlock(&d->i2c_mutex); in dw3101_i2c_transfer()
585 struct dvb_usb_device *d = i2c_get_adapdata(adap); in s6x0_i2c_transfer() local
589 if (!d) in s6x0_i2c_transfer()
590 return -ENODEV; in s6x0_i2c_transfer()
591 udev = d->udev; in s6x0_i2c_transfer()
592 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in s6x0_i2c_transfer()
593 return -EAGAIN; in s6x0_i2c_transfer()
600 dw210x_op_rw(d->udev, 0xb8, 0, 0, in s6x0_i2c_transfer()
608 obuf[0] = 1; in s6x0_i2c_transfer()
609 obuf[1] = msg[j].buf[1];/* off-on */ in s6x0_i2c_transfer()
610 dw210x_op_rw(d->udev, 0x8a, 0, 0, in s6x0_i2c_transfer()
613 obuf[1] = msg[j].buf[0];/* 13v-18v */ in s6x0_i2c_transfer()
614 dw210x_op_rw(d->udev, 0x8a, 0, 0, in s6x0_i2c_transfer()
622 obuf[1] = msg[j].buf[0]; in s6x0_i2c_transfer()
623 dw210x_op_rw(d->udev, 0x8a, 0, 0, in s6x0_i2c_transfer()
639 warn("i2c rd: len=%d is too big!\n", in s6x0_i2c_transfer()
641 ret = -EOPNOTSUPP; in s6x0_i2c_transfer()
645 dw210x_op_rw(d->udev, 0x91, 0, 0, in s6x0_i2c_transfer()
655 18 : msg[j].len + 1); in s6x0_i2c_transfer()
656 obuf[1] = msg[j].addr << 1; in s6x0_i2c_transfer()
658 len = msg[j].len - 1; in s6x0_i2c_transfer()
659 i = 1; in s6x0_i2c_transfer()
663 dw210x_op_rw(d->udev, 0x80, 0, 0, in s6x0_i2c_transfer()
667 len -= 16; in s6x0_i2c_transfer()
669 } else if (j < (num - 1)) { in s6x0_i2c_transfer()
674 warn("i2c wr: len=%d is too big!\n", in s6x0_i2c_transfer()
676 ret = -EOPNOTSUPP; in s6x0_i2c_transfer()
680 obuf[0] = msg[j + 1].len; in s6x0_i2c_transfer()
681 obuf[1] = (msg[j].addr << 1); in s6x0_i2c_transfer()
683 dw210x_op_rw(d->udev, in s6x0_i2c_transfer()
684 le16_to_cpu(udev->descriptor.idProduct) == 0x7500 ? 0x92 : 0x90, in s6x0_i2c_transfer()
693 warn("i2c wr: len=%d is too big!\n", in s6x0_i2c_transfer()
695 ret = -EOPNOTSUPP; in s6x0_i2c_transfer()
698 obuf[0] = msg[j].len + 1; in s6x0_i2c_transfer()
699 obuf[1] = (msg[j].addr << 1); in s6x0_i2c_transfer()
701 dw210x_op_rw(d->udev, 0x80, 0, 0, in s6x0_i2c_transfer()
713 mutex_unlock(&d->i2c_mutex); in s6x0_i2c_transfer()
720 struct dvb_usb_device *d = i2c_get_adapdata(adap); in su3000_i2c_transfer() local
724 if (!d) in su3000_i2c_transfer()
725 return -ENODEV; in su3000_i2c_transfer()
727 state = d->priv; in su3000_i2c_transfer()
729 if (mutex_lock_interruptible(&d->i2c_mutex) < 0) in su3000_i2c_transfer()
730 return -EAGAIN; in su3000_i2c_transfer()
731 if (mutex_lock_interruptible(&d->data_mutex) < 0) { in su3000_i2c_transfer()
732 mutex_unlock(&d->i2c_mutex); in su3000_i2c_transfer()
733 return -EAGAIN; in su3000_i2c_transfer()
740 state->data[0] = msg[j].buf[0] + 0x36; in su3000_i2c_transfer()
741 state->data[1] = 3; in su3000_i2c_transfer()
742 state->data[2] = 0; in su3000_i2c_transfer()
743 if (dvb_usb_generic_rw(d, state->data, 3, in su3000_i2c_transfer()
744 state->data, 0, 0) < 0) in su3000_i2c_transfer()
748 state->data[0] = 0x10; in su3000_i2c_transfer()
749 if (dvb_usb_generic_rw(d, state->data, 1, in su3000_i2c_transfer()
750 state->data, 2, 0) < 0) in su3000_i2c_transfer()
752 msg[j].buf[1] = state->data[0]; in su3000_i2c_transfer()
753 msg[j].buf[0] = state->data[1]; in su3000_i2c_transfer()
759 if ((j + 1 < num) && (msg[j + 1].flags & I2C_M_RD) && in su3000_i2c_transfer()
760 (msg[j].addr == msg[j + 1].addr)) { in su3000_i2c_transfer()
762 if (4 + msg[j].len > sizeof(state->data)) { in su3000_i2c_transfer()
763 warn("i2c combined wr/rd: write len=%d is too big!\n", in su3000_i2c_transfer()
765 num = -EOPNOTSUPP; in su3000_i2c_transfer()
768 if (1 + msg[j + 1].len > sizeof(state->data)) { in su3000_i2c_transfer()
769 warn("i2c combined wr/rd: read len=%d is too big!\n", in su3000_i2c_transfer()
770 msg[j + 1].len); in su3000_i2c_transfer()
771 num = -EOPNOTSUPP; in su3000_i2c_transfer()
775 state->data[0] = 0x09; in su3000_i2c_transfer()
776 state->data[1] = msg[j].len; in su3000_i2c_transfer()
777 state->data[2] = msg[j + 1].len; in su3000_i2c_transfer()
778 state->data[3] = msg[j].addr; in su3000_i2c_transfer()
779 memcpy(&state->data[4], msg[j].buf, msg[j].len); in su3000_i2c_transfer()
781 if (dvb_usb_generic_rw(d, state->data, msg[j].len + 4, in su3000_i2c_transfer()
782 state->data, msg[j + 1].len + 1, 0) < 0) in su3000_i2c_transfer()
785 memcpy(msg[j + 1].buf, &state->data[1], msg[j + 1].len); in su3000_i2c_transfer()
792 if (4 + msg[j].len > sizeof(state->data)) { in su3000_i2c_transfer()
793 warn("i2c rd: len=%d is too big!\n", msg[j].len); in su3000_i2c_transfer()
794 num = -EOPNOTSUPP; in su3000_i2c_transfer()
798 state->data[0] = 0x09; in su3000_i2c_transfer()
799 state->data[1] = 0; in su3000_i2c_transfer()
800 state->data[2] = msg[j].len; in su3000_i2c_transfer()
801 state->data[3] = msg[j].addr; in su3000_i2c_transfer()
802 memcpy(&state->data[4], msg[j].buf, msg[j].len); in su3000_i2c_transfer()
804 if (dvb_usb_generic_rw(d, state->data, 4, in su3000_i2c_transfer()
805 state->data, msg[j].len + 1, 0) < 0) in su3000_i2c_transfer()
808 memcpy(msg[j].buf, &state->data[1], msg[j].len); in su3000_i2c_transfer()
813 if (3 + msg[j].len > sizeof(state->data)) { in su3000_i2c_transfer()
814 warn("i2c wr: len=%d is too big!\n", msg[j].len); in su3000_i2c_transfer()
815 num = -EOPNOTSUPP; in su3000_i2c_transfer()
819 state->data[0] = 0x08; in su3000_i2c_transfer()
820 state->data[1] = msg[j].addr; in su3000_i2c_transfer()
821 state->data[2] = msg[j].len; in su3000_i2c_transfer()
823 memcpy(&state->data[3], msg[j].buf, msg[j].len); in su3000_i2c_transfer()
825 if (dvb_usb_generic_rw(d, state->data, msg[j].len + 3, in su3000_i2c_transfer()
826 state->data, 1, 0) < 0) in su3000_i2c_transfer()
832 mutex_unlock(&d->data_mutex); in su3000_i2c_transfer()
833 mutex_unlock(&d->i2c_mutex); in su3000_i2c_transfer()
877 static int dw210x_read_mac_address(struct dvb_usb_device *d, u8 mac[6]) in dw210x_read_mac_address() argument
884 if (dw210x_op_rw(d->udev, 0xb6, 0xa0, i, ibuf, 2, DW210X_READ_MSG) < 0) { in dw210x_read_mac_address()
886 return -EIO; in dw210x_read_mac_address()
892 deb_xfer("%02x: ", i - 15); in dw210x_read_mac_address()
901 static int s6x0_read_mac_address(struct dvb_usb_device *d, u8 mac[6]) in s6x0_read_mac_address() argument
908 .addr = 0xa0 >> 1, in s6x0_read_mac_address()
911 .len = 1, in s6x0_read_mac_address()
913 .addr = 0xa0 >> 1, in s6x0_read_mac_address()
916 .len = 1, in s6x0_read_mac_address()
922 ret = s6x0_i2c_transfer(&d->i2c_adap, msg, 2); in s6x0_read_mac_address()
925 return -EIO; in s6x0_read_mac_address()
932 deb_xfer("%02x: ", i - 15); in s6x0_read_mac_address()
949 .len = 1 in su3000_streaming_ctrl()
952 i2c_transfer(&adap->dev->i2c_adap, &msg, 1); in su3000_streaming_ctrl()
957 static int su3000_power_ctrl(struct dvb_usb_device *d, int i) in su3000_power_ctrl() argument
959 struct dw2102_state *state = d->priv; in su3000_power_ctrl()
962 info("%s: %d, initialized %d", __func__, i, state->initialized); in su3000_power_ctrl()
964 if (i && !state->initialized) { in su3000_power_ctrl()
965 mutex_lock(&d->data_mutex); in su3000_power_ctrl()
967 state->data[0] = 0xde; in su3000_power_ctrl()
968 state->data[1] = 0; in su3000_power_ctrl()
970 state->initialized = 1; in su3000_power_ctrl()
972 ret = dvb_usb_generic_rw(d, state->data, 2, NULL, 0, 0); in su3000_power_ctrl()
973 mutex_unlock(&d->data_mutex); in su3000_power_ctrl()
979 static int su3000_read_mac_address(struct dvb_usb_device *d, u8 mac[6]) in su3000_read_mac_address() argument
994 .len = 1, in su3000_read_mac_address()
999 obuf[1] = 0xf0 + i; in su3000_read_mac_address()
1000 if (i2c_transfer(&d->i2c_adap, msg, 2) != 2) in su3000_read_mac_address()
1001 return -EIO; in su3000_read_mac_address()
1031 struct dvb_usb_adapter *udev_adap = fe->dvb->priv; in dw210x_set_voltage()
1038 i2c_transfer(&udev_adap->dev->i2c_adap, &msg, 1); in dw210x_set_voltage()
1046 struct dvb_usb_adapter *d = fe->dvb->priv; in s660_set_voltage() local
1047 struct dw2102_state *st = d->dev->priv; in s660_set_voltage()
1050 if (st->old_set_voltage) in s660_set_voltage()
1051 st->old_set_voltage(fe, voltage); in s660_set_voltage()
1059 static u8 led_on[] = { 1 }; in dw210x_led_ctrl()
1064 .len = 1 in dw210x_led_ctrl()
1066 struct dvb_usb_adapter *udev_adap = fe->dvb->priv; in dw210x_led_ctrl()
1070 i2c_transfer(&udev_adap->dev->i2c_adap, &msg, 1); in dw210x_led_ctrl()
1076 struct dvb_usb_adapter *d = fe->dvb->priv; in tt_s2_4600_read_status() local
1077 struct dw2102_state *st = d->dev->priv; in tt_s2_4600_read_status()
1080 ret = st->fe_read_status(fe, status); in tt_s2_4600_read_status()
1083 if ((*status & FE_HAS_LOCK) && (!st->last_lock)) in tt_s2_4600_read_status()
1084 su3000_streaming_ctrl(d, 1); in tt_s2_4600_read_status()
1086 st->last_lock = (*status & FE_HAS_LOCK) ? 1 : 0; in tt_s2_4600_read_status()
1094 .invert = 1,
1115 .invert = 1,
1128 .clk_out_div = 1,
1134 .ci_mode = 1,
1140 .clk_out_div = 1,
1148 .clkmode = 3,/* 0-CLKI, 2-XTALI, else AUTO */
1167 .tun1_adc = 1,/* 1 Vpp */
1174 .clk_div = 1,
1181 .clkmode = 3,/* 0-CLKI, 2-XTALI, else AUTO */
1192 .ci_mode = 1,
1197 .i2c_address = 0x6c, /* (0xd8 >> 1) */
1199 .ts_clock_inv = 1,
1230 static int dw2104_frontend_attach(struct dvb_usb_adapter *d) in dw2104_frontend_attach() argument
1235 d->fe_adap[0].fe = dvb_attach(stv0900_attach, &dw2104a_stv0900_config, in dw2104_frontend_attach()
1236 &d->dev->i2c_adap, 0); in dw2104_frontend_attach()
1237 if (d->fe_adap[0].fe) { in dw2104_frontend_attach()
1238 if (dvb_attach(stb6100_attach, d->fe_adap[0].fe, in dw2104_frontend_attach()
1240 &d->dev->i2c_adap)) { in dw2104_frontend_attach()
1241 tuner_ops = &d->fe_adap[0].fe->ops.tuner_ops; in dw2104_frontend_attach()
1242 tuner_ops->set_frequency = stb6100_set_freq; in dw2104_frontend_attach()
1243 tuner_ops->get_frequency = stb6100_get_freq; in dw2104_frontend_attach()
1244 tuner_ops->set_bandwidth = stb6100_set_bandw; in dw2104_frontend_attach()
1245 tuner_ops->get_bandwidth = stb6100_get_bandw; in dw2104_frontend_attach()
1246 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2104_frontend_attach()
1254 d->fe_adap[0].fe = dvb_attach(stv0900_attach, &dw2104_stv0900_config, in dw2104_frontend_attach()
1255 &d->dev->i2c_adap, 0); in dw2104_frontend_attach()
1256 if (d->fe_adap[0].fe) { in dw2104_frontend_attach()
1257 if (dvb_attach(stv6110_attach, d->fe_adap[0].fe, in dw2104_frontend_attach()
1259 &d->dev->i2c_adap)) { in dw2104_frontend_attach()
1260 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2104_frontend_attach()
1267 if (demod_probe & 1) { in dw2104_frontend_attach()
1268 d->fe_adap[0].fe = dvb_attach(cx24116_attach, &dw2104_config, in dw2104_frontend_attach()
1269 &d->dev->i2c_adap); in dw2104_frontend_attach()
1270 if (d->fe_adap[0].fe) { in dw2104_frontend_attach()
1271 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2104_frontend_attach()
1277 d->fe_adap[0].fe = dvb_attach(ds3000_attach, &dw2104_ds3000_config, in dw2104_frontend_attach()
1278 &d->dev->i2c_adap); in dw2104_frontend_attach()
1279 if (d->fe_adap[0].fe) { in dw2104_frontend_attach()
1280 dvb_attach(ts2020_attach, d->fe_adap[0].fe, in dw2104_frontend_attach()
1281 &dw2104_ts2020_config, &d->dev->i2c_adap); in dw2104_frontend_attach()
1282 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2104_frontend_attach()
1287 return -EIO; in dw2104_frontend_attach()
1294 static int dw2102_frontend_attach(struct dvb_usb_adapter *d) in dw2102_frontend_attach() argument
1297 /*dw2102_properties.adapter->tuner_attach = NULL;*/ in dw2102_frontend_attach()
1298 d->fe_adap[0].fe = dvb_attach(si21xx_attach, &serit_sp1511lhb_config, in dw2102_frontend_attach()
1299 &d->dev->i2c_adap); in dw2102_frontend_attach()
1300 if (d->fe_adap[0].fe) { in dw2102_frontend_attach()
1301 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2102_frontend_attach()
1308 d->fe_adap[0].fe = dvb_attach(stv0288_attach, &earda_config, in dw2102_frontend_attach()
1309 &d->dev->i2c_adap); in dw2102_frontend_attach()
1310 if (d->fe_adap[0].fe) { in dw2102_frontend_attach()
1311 if (dvb_attach(stb6000_attach, d->fe_adap[0].fe, 0x61, in dw2102_frontend_attach()
1312 &d->dev->i2c_adap)) { in dw2102_frontend_attach()
1313 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2102_frontend_attach()
1321 /*dw2102_properties.adapter->tuner_attach = dw2102_tuner_attach;*/ in dw2102_frontend_attach()
1322 d->fe_adap[0].fe = dvb_attach(stv0299_attach, &sharp_z0194a_config, in dw2102_frontend_attach()
1323 &d->dev->i2c_adap); in dw2102_frontend_attach()
1324 if (d->fe_adap[0].fe) { in dw2102_frontend_attach()
1325 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in dw2102_frontend_attach()
1330 return -EIO; in dw2102_frontend_attach()
1333 static int dw3101_frontend_attach(struct dvb_usb_adapter *d) in dw3101_frontend_attach() argument
1335 d->fe_adap[0].fe = dvb_attach(tda10023_attach, &dw3101_tda10023_config, in dw3101_frontend_attach()
1336 &d->dev->i2c_adap, 0x48); in dw3101_frontend_attach()
1337 if (d->fe_adap[0].fe) { in dw3101_frontend_attach()
1341 return -EIO; in dw3101_frontend_attach()
1344 static int zl100313_frontend_attach(struct dvb_usb_adapter *d) in zl100313_frontend_attach() argument
1346 d->fe_adap[0].fe = dvb_attach(mt312_attach, &zl313_config, in zl100313_frontend_attach()
1347 &d->dev->i2c_adap); in zl100313_frontend_attach()
1348 if (d->fe_adap[0].fe) { in zl100313_frontend_attach()
1349 if (dvb_attach(zl10039_attach, d->fe_adap[0].fe, 0x60, in zl100313_frontend_attach()
1350 &d->dev->i2c_adap)) { in zl100313_frontend_attach()
1351 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in zl100313_frontend_attach()
1357 return -EIO; in zl100313_frontend_attach()
1360 static int stv0288_frontend_attach(struct dvb_usb_adapter *d) in stv0288_frontend_attach() argument
1362 u8 obuf[] = {7, 1}; in stv0288_frontend_attach()
1364 d->fe_adap[0].fe = dvb_attach(stv0288_attach, &earda_config, in stv0288_frontend_attach()
1365 &d->dev->i2c_adap); in stv0288_frontend_attach()
1367 if (!d->fe_adap[0].fe) in stv0288_frontend_attach()
1368 return -EIO; in stv0288_frontend_attach()
1370 if (dvb_attach(stb6000_attach, d->fe_adap[0].fe, 0x61, &d->dev->i2c_adap) == NULL) in stv0288_frontend_attach()
1371 return -EIO; in stv0288_frontend_attach()
1373 d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage; in stv0288_frontend_attach()
1375 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) 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) 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) 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) { 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) 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()
1883 switch (le16_to_cpu(dev->descriptor.idProduct)) { in dw2102_load_firmware()
1885 ret = request_firmware(&fw, DW2101_FIRMWARE, &dev->dev); in dw2102_load_firmware()
1896 p = kmalloc(fw->size, GFP_KERNEL); in dw2102_load_firmware()
1897 reset = 1; in dw2102_load_firmware()
1899 dw210x_op_rw(dev, 0xa0, 0x7f92, 0, &reset, 1, DW210X_WRITE_MSG); in dw2102_load_firmware()
1900 dw210x_op_rw(dev, 0xa0, 0xe600, 0, &reset, 1, DW210X_WRITE_MSG); in dw2102_load_firmware()
1903 memcpy(p, fw->data, fw->size); in dw2102_load_firmware()
1904 for (i = 0; i < fw->size; i += 0x40) { in dw2102_load_firmware()
1909 ret = -EINVAL; in dw2102_load_firmware()
1915 if (ret || dw210x_op_rw(dev, 0xa0, 0x7f92, 0, &reset, 1, in dw2102_load_firmware()
1916 DW210X_WRITE_MSG) != 1) { in dw2102_load_firmware()
1918 ret = -EINVAL; in dw2102_load_firmware()
1920 if (ret || dw210x_op_rw(dev, 0xa0, 0xe600, 0, &reset, 1, in dw2102_load_firmware()
1921 DW210X_WRITE_MSG) != 1) { in dw2102_load_firmware()
1923 ret = -EINVAL; in dw2102_load_firmware()
1926 switch (le16_to_cpu(dev->descriptor.idProduct)) { in dw2102_load_firmware()
1931 reset = 1; in dw2102_load_firmware()
1932 dw210x_op_rw(dev, 0xc4, 0x0000, 0, &reset, 1, in dw2102_load_firmware()
1951 dw2102_properties.adapter->fe[0].tuner_attach = &dw2102_tuner_attach; in dw2102_load_firmware()
1956 reset16[1] = 1; in dw2102_load_firmware()
1983 if (le16_to_cpu(dev->descriptor.idProduct) == 0x2101) in dw2102_load_firmware()
1992 .no_reconnect = 1,
2005 /* parameter for the MPEG2-data transfer */
2006 .num_adapters = 1,
2011 .num_frontends = 1,
2029 {"DVBWorld DVB-S 2102 USB2.0",
2033 {"DVBWorld DVB-S 2101 USB2.0",
2048 .no_reconnect = 1,
2060 /* parameter for the MPEG2-data transfer */
2061 .num_adapters = 1,
2066 .num_frontends = 1,
2099 .no_reconnect = 1,
2111 /* parameter for the MPEG2-data transfer */
2112 .num_adapters = 1,
2117 .num_frontends = 1,
2134 .num_device_descs = 1,
2136 { "DVBWorld DVB-C 3101 USB2.0",
2148 .no_reconnect = 1,
2160 .num_adapters = 1,
2165 .num_frontends = 1,
2181 .num_device_descs = 1,
2195 .no_reconnect = 1,
2207 .num_adapters = 1,
2212 .num_frontends = 1,
2228 .num_device_descs = 1,
2242 .no_reconnect = 1,
2254 .num_adapters = 1,
2259 .num_frontends = 1,
2281 {"TeVii S480.1 USB",
2297 .no_reconnect = 1,
2309 .num_adapters = 1,
2314 .num_frontends = 1,
2330 .num_device_descs = 1,
2332 {"Prof 7500 USB DVB-S2",
2344 .num_adapters = 1,
2362 .num_frontends = 1,
2381 { "SU3000HD DVB-S USB2.0",
2405 { "Terratec Cinergy S2 PCIe Dual Port 1",
2425 .num_adapters = 1,
2443 .num_frontends = 1,
2478 .num_adapters = 1,
2496 .num_frontends = 1,
2513 .num_device_descs = 1,
2515 { "Geniatech T220 DVB-T/T2 USB2.0",
2527 .num_adapters = 1,
2545 .num_frontends = 1,
2564 { "TechnoTrend TT-connect S2-4600",
2568 { "TeVii S482 (tuner 1)",
2615 return -ENODEV; in dw2102_probe()
2620 struct dvb_usb_device *d = usb_get_intfdata(intf); in dw2102_disconnect() local
2621 struct dw2102_state *st = d->priv; in dw2102_disconnect()
2625 client = st->i2c_client_tuner; in dw2102_disconnect()
2627 module_put(client->dev.driver->owner); in dw2102_disconnect()
2632 client = st->i2c_client_demod; in dw2102_disconnect()
2634 module_put(client->dev.driver->owner); in dw2102_disconnect()
2651-S 2101, 2102, DVB-S2 2104, DVB-C 3101 USB2.0, TeVii S421, S480, S482, S600, S630, S632, S650, TeV…