xref: /openbmc/linux/drivers/media/usb/dvb-usb-v2/anysee.c (revision f677b30b487ca3763c3de3f1b4d8c976c2961cd1)
1 /*
2  * DVB USB Linux driver for Anysee E30 DVB-C & DVB-T USB2.0 receiver
3  *
4  * Copyright (C) 2007 Antti Palosaari <crope@iki.fi>
5  *
6  *    This program is free software; you can redistribute it and/or modify
7  *    it under the terms of the GNU General Public License as published by
8  *    the Free Software Foundation; either version 2 of the License, or
9  *    (at your option) any later version.
10  *
11  *    This program is distributed in the hope that it will be useful,
12  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *    GNU General Public License for more details.
15  *
16  *    You should have received a copy of the GNU General Public License
17  *    along with this program; if not, write to the Free Software
18  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  *
20  * TODO:
21  * - add smart card reader support for Conditional Access (CA)
22  *
23  * Card reader in Anysee is nothing more than ISO 7816 card reader.
24  * There is no hardware CAM in any Anysee device sold.
25  * In my understanding it should be implemented by making own module
26  * for ISO 7816 card reader, like dvb_ca_en50221 is implemented. This
27  * module registers serial interface that can be used to communicate
28  * with any ISO 7816 smart card.
29  *
30  * Any help according to implement serial smart card reader support
31  * is highly welcome!
32  */
33 
34 #include "anysee.h"
35 #include "dvb-pll.h"
36 #include "tda1002x.h"
37 #include "mt352.h"
38 #include "mt352_priv.h"
39 #include "zl10353.h"
40 #include "tda18212.h"
41 #include "cx24116.h"
42 #include "stv0900.h"
43 #include "stv6110.h"
44 #include "isl6423.h"
45 #include "cxd2820r.h"
46 
47 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
48 
49 static int anysee_ctrl_msg(struct dvb_usb_device *d,
50 		u8 *sbuf, u8 slen, u8 *rbuf, u8 rlen)
51 {
52 	struct anysee_state *state = d_to_priv(d);
53 	int act_len, ret, i;
54 
55 	mutex_lock(&d->usb_mutex);
56 
57 	memcpy(&state->buf[0], sbuf, slen);
58 	state->buf[60] = state->seq++;
59 
60 	dev_dbg(&d->udev->dev, "%s: >>> %*ph\n", __func__, slen, state->buf);
61 
62 	/* We need receive one message more after dvb_usb_generic_rw due
63 	   to weird transaction flow, which is 1 x send + 2 x receive. */
64 	ret = dvb_usbv2_generic_rw_locked(d, state->buf, sizeof(state->buf),
65 			state->buf, sizeof(state->buf));
66 	if (ret)
67 		goto error_unlock;
68 
69 	/* TODO FIXME: dvb_usb_generic_rw() fails rarely with error code -32
70 	 * (EPIPE, Broken pipe). Function supports currently msleep() as a
71 	 * parameter but I would not like to use it, since according to
72 	 * Documentation/timers/timers-howto.txt it should not be used such
73 	 * short, under < 20ms, sleeps. Repeating failed message would be
74 	 * better choice as not to add unwanted delays...
75 	 * Fixing that correctly is one of those or both;
76 	 * 1) use repeat if possible
77 	 * 2) add suitable delay
78 	 */
79 
80 	/* get answer, retry few times if error returned */
81 	for (i = 0; i < 3; i++) {
82 		/* receive 2nd answer */
83 		ret = usb_bulk_msg(d->udev, usb_rcvbulkpipe(d->udev,
84 				d->props->generic_bulk_ctrl_endpoint),
85 				state->buf, sizeof(state->buf), &act_len, 2000);
86 		if (ret) {
87 			dev_dbg(&d->udev->dev,
88 					"%s: recv bulk message failed=%d\n",
89 					__func__, ret);
90 		} else {
91 			dev_dbg(&d->udev->dev, "%s: <<< %*ph\n", __func__,
92 					rlen, state->buf);
93 
94 			if (state->buf[63] != 0x4f)
95 				dev_dbg(&d->udev->dev,
96 						"%s: cmd failed\n", __func__);
97 			break;
98 		}
99 	}
100 
101 	if (ret) {
102 		/* all retries failed, it is fatal */
103 		dev_err(&d->udev->dev, "%s: recv bulk message failed=%d\n",
104 				KBUILD_MODNAME, ret);
105 		goto error_unlock;
106 	}
107 
108 	/* read request, copy returned data to return buf */
109 	if (rbuf && rlen)
110 		memcpy(rbuf, state->buf, rlen);
111 
112 error_unlock:
113 	mutex_unlock(&d->usb_mutex);
114 	return ret;
115 }
116 
117 static int anysee_read_reg(struct dvb_usb_device *d, u16 reg, u8 *val)
118 {
119 	u8 buf[] = {CMD_REG_READ, reg >> 8, reg & 0xff, 0x01};
120 	int ret;
121 	ret = anysee_ctrl_msg(d, buf, sizeof(buf), val, 1);
122 	dev_dbg(&d->udev->dev, "%s: reg=%04x val=%02x\n", __func__, reg, *val);
123 	return ret;
124 }
125 
126 static int anysee_write_reg(struct dvb_usb_device *d, u16 reg, u8 val)
127 {
128 	u8 buf[] = {CMD_REG_WRITE, reg >> 8, reg & 0xff, 0x01, val};
129 	dev_dbg(&d->udev->dev, "%s: reg=%04x val=%02x\n", __func__, reg, val);
130 	return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0);
131 }
132 
133 /* write single register with mask */
134 static int anysee_wr_reg_mask(struct dvb_usb_device *d, u16 reg, u8 val,
135 	u8 mask)
136 {
137 	int ret;
138 	u8 tmp;
139 
140 	/* no need for read if whole reg is written */
141 	if (mask != 0xff) {
142 		ret = anysee_read_reg(d, reg, &tmp);
143 		if (ret)
144 			return ret;
145 
146 		val &= mask;
147 		tmp &= ~mask;
148 		val |= tmp;
149 	}
150 
151 	return anysee_write_reg(d, reg, val);
152 }
153 
154 /* read single register with mask */
155 static int anysee_rd_reg_mask(struct dvb_usb_device *d, u16 reg, u8 *val,
156 	u8 mask)
157 {
158 	int ret, i;
159 	u8 tmp;
160 
161 	ret = anysee_read_reg(d, reg, &tmp);
162 	if (ret)
163 		return ret;
164 
165 	tmp &= mask;
166 
167 	/* find position of the first bit */
168 	for (i = 0; i < 8; i++) {
169 		if ((mask >> i) & 0x01)
170 			break;
171 	}
172 	*val = tmp >> i;
173 
174 	return 0;
175 }
176 
177 static int anysee_get_hw_info(struct dvb_usb_device *d, u8 *id)
178 {
179 	u8 buf[] = {CMD_GET_HW_INFO};
180 	return anysee_ctrl_msg(d, buf, sizeof(buf), id, 3);
181 }
182 
183 static int anysee_streaming_ctrl(struct dvb_frontend *fe, int onoff)
184 {
185 	u8 buf[] = {CMD_STREAMING_CTRL, (u8)onoff, 0x00};
186 	dev_dbg(&fe_to_d(fe)->udev->dev, "%s: onoff=%d\n", __func__, onoff);
187 	return anysee_ctrl_msg(fe_to_d(fe), buf, sizeof(buf), NULL, 0);
188 }
189 
190 static int anysee_led_ctrl(struct dvb_usb_device *d, u8 mode, u8 interval)
191 {
192 	u8 buf[] = {CMD_LED_AND_IR_CTRL, 0x01, mode, interval};
193 	dev_dbg(&d->udev->dev, "%s: state=%d interval=%d\n", __func__,
194 			mode, interval);
195 	return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0);
196 }
197 
198 static int anysee_ir_ctrl(struct dvb_usb_device *d, u8 onoff)
199 {
200 	u8 buf[] = {CMD_LED_AND_IR_CTRL, 0x02, onoff};
201 	dev_dbg(&d->udev->dev, "%s: onoff=%d\n", __func__, onoff);
202 	return anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0);
203 }
204 
205 /* I2C */
206 static int anysee_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msg,
207 	int num)
208 {
209 	struct dvb_usb_device *d = i2c_get_adapdata(adap);
210 	int ret = 0, inc, i = 0;
211 	u8 buf[52]; /* 4 + 48 (I2C WR USB command header + I2C WR max) */
212 
213 	if (mutex_lock_interruptible(&d->i2c_mutex) < 0)
214 		return -EAGAIN;
215 
216 	while (i < num) {
217 		if (num > i + 1 && (msg[i+1].flags & I2C_M_RD)) {
218 			if (msg[i].len > 2 || msg[i+1].len > 60) {
219 				ret = -EOPNOTSUPP;
220 				break;
221 			}
222 			buf[0] = CMD_I2C_READ;
223 			buf[1] = (msg[i].addr << 1) | 0x01;
224 			buf[2] = msg[i].buf[0];
225 			buf[3] = msg[i].buf[1];
226 			buf[4] = msg[i].len-1;
227 			buf[5] = msg[i+1].len;
228 			ret = anysee_ctrl_msg(d, buf, 6, msg[i+1].buf,
229 				msg[i+1].len);
230 			inc = 2;
231 		} else {
232 			if (msg[i].len > 48) {
233 				ret = -EOPNOTSUPP;
234 				break;
235 			}
236 			buf[0] = CMD_I2C_WRITE;
237 			buf[1] = (msg[i].addr << 1);
238 			buf[2] = msg[i].len;
239 			buf[3] = 0x01;
240 			memcpy(&buf[4], msg[i].buf, msg[i].len);
241 			ret = anysee_ctrl_msg(d, buf, 4 + msg[i].len, NULL, 0);
242 			inc = 1;
243 		}
244 		if (ret)
245 			break;
246 
247 		i += inc;
248 	}
249 
250 	mutex_unlock(&d->i2c_mutex);
251 
252 	return ret ? ret : i;
253 }
254 
255 static u32 anysee_i2c_func(struct i2c_adapter *adapter)
256 {
257 	return I2C_FUNC_I2C;
258 }
259 
260 static struct i2c_algorithm anysee_i2c_algo = {
261 	.master_xfer   = anysee_master_xfer,
262 	.functionality = anysee_i2c_func,
263 };
264 
265 static int anysee_mt352_demod_init(struct dvb_frontend *fe)
266 {
267 	static u8 clock_config[]   = { CLOCK_CTL,  0x38, 0x28 };
268 	static u8 reset[]          = { RESET,      0x80 };
269 	static u8 adc_ctl_1_cfg[]  = { ADC_CTL_1,  0x40 };
270 	static u8 agc_cfg[]        = { AGC_TARGET, 0x28, 0x20 };
271 	static u8 gpp_ctl_cfg[]    = { GPP_CTL,    0x33 };
272 	static u8 capt_range_cfg[] = { CAPT_RANGE, 0x32 };
273 
274 	mt352_write(fe, clock_config,   sizeof(clock_config));
275 	udelay(200);
276 	mt352_write(fe, reset,          sizeof(reset));
277 	mt352_write(fe, adc_ctl_1_cfg,  sizeof(adc_ctl_1_cfg));
278 
279 	mt352_write(fe, agc_cfg,        sizeof(agc_cfg));
280 	mt352_write(fe, gpp_ctl_cfg,    sizeof(gpp_ctl_cfg));
281 	mt352_write(fe, capt_range_cfg, sizeof(capt_range_cfg));
282 
283 	return 0;
284 }
285 
286 /* Callbacks for DVB USB */
287 static struct tda10023_config anysee_tda10023_config = {
288 	.demod_address = (0x1a >> 1),
289 	.invert = 0,
290 	.xtal   = 16000000,
291 	.pll_m  = 11,
292 	.pll_p  = 3,
293 	.pll_n  = 1,
294 	.output_mode = TDA10023_OUTPUT_MODE_PARALLEL_C,
295 	.deltaf = 0xfeeb,
296 };
297 
298 static struct mt352_config anysee_mt352_config = {
299 	.demod_address = (0x1e >> 1),
300 	.demod_init    = anysee_mt352_demod_init,
301 };
302 
303 static struct zl10353_config anysee_zl10353_config = {
304 	.demod_address = (0x1e >> 1),
305 	.parallel_ts = 1,
306 };
307 
308 static struct zl10353_config anysee_zl10353_tda18212_config2 = {
309 	.demod_address = (0x1e >> 1),
310 	.parallel_ts = 1,
311 	.disable_i2c_gate_ctrl = 1,
312 	.no_tuner = 1,
313 	.if2 = 41500,
314 };
315 
316 static struct zl10353_config anysee_zl10353_tda18212_config = {
317 	.demod_address = (0x18 >> 1),
318 	.parallel_ts = 1,
319 	.disable_i2c_gate_ctrl = 1,
320 	.no_tuner = 1,
321 	.if2 = 41500,
322 };
323 
324 static struct tda10023_config anysee_tda10023_tda18212_config = {
325 	.demod_address = (0x1a >> 1),
326 	.xtal   = 16000000,
327 	.pll_m  = 12,
328 	.pll_p  = 3,
329 	.pll_n  = 1,
330 	.output_mode = TDA10023_OUTPUT_MODE_PARALLEL_B,
331 	.deltaf = 0xba02,
332 };
333 
334 static struct tda18212_config anysee_tda18212_config = {
335 	.i2c_address = (0xc0 >> 1),
336 	.if_dvbt_6 = 4150,
337 	.if_dvbt_7 = 4150,
338 	.if_dvbt_8 = 4150,
339 	.if_dvbc = 5000,
340 };
341 
342 static struct tda18212_config anysee_tda18212_config2 = {
343 	.i2c_address = 0x60 /* (0xc0 >> 1) */,
344 	.if_dvbt_6 = 3550,
345 	.if_dvbt_7 = 3700,
346 	.if_dvbt_8 = 4150,
347 	.if_dvbt2_6 = 3250,
348 	.if_dvbt2_7 = 4000,
349 	.if_dvbt2_8 = 4000,
350 	.if_dvbc = 5000,
351 };
352 
353 static struct cx24116_config anysee_cx24116_config = {
354 	.demod_address = (0xaa >> 1),
355 	.mpg_clk_pos_pol = 0x00,
356 	.i2c_wr_max = 48,
357 };
358 
359 static struct stv0900_config anysee_stv0900_config = {
360 	.demod_address = (0xd0 >> 1),
361 	.demod_mode = 0,
362 	.xtal = 8000000,
363 	.clkmode = 3,
364 	.diseqc_mode = 2,
365 	.tun1_maddress = 0,
366 	.tun1_adc = 1, /* 1 Vpp */
367 	.path1_mode = 3,
368 };
369 
370 static struct stv6110_config anysee_stv6110_config = {
371 	.i2c_address = (0xc0 >> 1),
372 	.mclk = 16000000,
373 	.clk_div = 1,
374 };
375 
376 static struct isl6423_config anysee_isl6423_config = {
377 	.current_max = SEC_CURRENT_800m,
378 	.curlim  = SEC_CURRENT_LIM_OFF,
379 	.mod_extern = 1,
380 	.addr = (0x10 >> 1),
381 };
382 
383 static struct cxd2820r_config anysee_cxd2820r_config = {
384 	.i2c_address = 0x6d, /* (0xda >> 1) */
385 	.ts_mode = 0x38,
386 };
387 
388 /*
389  * New USB device strings: Mfr=1, Product=2, SerialNumber=0
390  * Manufacturer: AMT.CO.KR
391  *
392  * E30 VID=04b4 PID=861f HW=2 FW=2.1 Product=????????
393  * PCB: ?
394  * parts: DNOS404ZH102A(MT352, DTT7579(?))
395  *
396  * E30 VID=04b4 PID=861f HW=2 FW=2.1 "anysee-T(LP)"
397  * PCB: PCB 507T (rev1.61)
398  * parts: DNOS404ZH103A(ZL10353, DTT7579(?))
399  * OEA=0a OEB=00 OEC=00 OED=ff OEE=00
400  * IOA=45 IOB=ff IOC=00 IOD=ff IOE=00
401  *
402  * E30 Plus VID=04b4 PID=861f HW=6 FW=1.0 "anysee"
403  * PCB: 507CD (rev1.1)
404  * parts: DNOS404ZH103A(ZL10353, DTT7579(?)), CST56I01
405  * OEA=80 OEB=00 OEC=00 OED=ff OEE=fe
406  * IOA=4f IOB=ff IOC=00 IOD=06 IOE=01
407  * IOD[0] ZL10353 1=enabled
408  * IOA[7] TS 0=enabled
409  * tuner is not behind ZL10353 I2C-gate (no care if gate disabled or not)
410  *
411  * E30 C Plus VID=04b4 PID=861f HW=10 FW=1.0 "anysee-DC(LP)"
412  * PCB: 507DC (rev0.2)
413  * parts: TDA10023, DTOS403IH102B TM, CST56I01
414  * OEA=80 OEB=00 OEC=00 OED=ff OEE=fe
415  * IOA=4f IOB=ff IOC=00 IOD=26 IOE=01
416  * IOD[0] TDA10023 1=enabled
417  *
418  * E30 S2 Plus VID=04b4 PID=861f HW=11 FW=0.1 "anysee-S2(LP)"
419  * PCB: 507SI (rev2.1)
420  * parts: BS2N10WCC01(CX24116, CX24118), ISL6423, TDA8024
421  * OEA=80 OEB=00 OEC=ff OED=ff OEE=fe
422  * IOA=4d IOB=ff IOC=00 IOD=26 IOE=01
423  * IOD[0] CX24116 1=enabled
424  *
425  * E30 C Plus VID=1c73 PID=861f HW=15 FW=1.2 "anysee-FA(LP)"
426  * PCB: 507FA (rev0.4)
427  * parts: TDA10023, DTOS403IH102B TM, TDA8024
428  * OEA=80 OEB=00 OEC=ff OED=ff OEE=ff
429  * IOA=4d IOB=ff IOC=00 IOD=00 IOE=c0
430  * IOD[5] TDA10023 1=enabled
431  * IOE[0] tuner 1=enabled
432  *
433  * E30 Combo Plus VID=1c73 PID=861f HW=15 FW=1.2 "anysee-FA(LP)"
434  * PCB: 507FA (rev1.1)
435  * parts: ZL10353, TDA10023, DTOS403IH102B TM, TDA8024
436  * OEA=80 OEB=00 OEC=ff OED=ff OEE=ff
437  * IOA=4d IOB=ff IOC=00 IOD=00 IOE=c0
438  * DVB-C:
439  * IOD[5] TDA10023 1=enabled
440  * IOE[0] tuner 1=enabled
441  * DVB-T:
442  * IOD[0] ZL10353 1=enabled
443  * IOE[0] tuner 0=enabled
444  * tuner is behind ZL10353 I2C-gate
445  *
446  * E7 TC VID=1c73 PID=861f HW=18 FW=0.7 AMTCI=0.5 "anysee-E7TC(LP)"
447  * PCB: 508TC (rev0.6)
448  * parts: ZL10353, TDA10023, DNOD44CDH086A(TDA18212)
449  * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff
450  * IOA=4d IOB=00 IOC=cc IOD=48 IOE=e4
451  * IOA[7] TS 1=enabled
452  * IOE[4] TDA18212 1=enabled
453  * DVB-C:
454  * IOD[6] ZL10353 0=disabled
455  * IOD[5] TDA10023 1=enabled
456  * IOE[0] IF 1=enabled
457  * DVB-T:
458  * IOD[5] TDA10023 0=disabled
459  * IOD[6] ZL10353 1=enabled
460  * IOE[0] IF 0=enabled
461  *
462  * E7 S2 VID=1c73 PID=861f HW=19 FW=0.4 AMTCI=0.5 "anysee-E7S2(LP)"
463  * PCB: 508S2 (rev0.7)
464  * parts: DNBU10512IST(STV0903, STV6110), ISL6423
465  * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff
466  * IOA=4d IOB=00 IOC=c4 IOD=08 IOE=e4
467  * IOA[7] TS 1=enabled
468  * IOE[5] STV0903 1=enabled
469  *
470  * E7 T2C VID=1c73 PID=861f HW=20 FW=0.1 AMTCI=0.5 "anysee-E7T2C(LP)"
471  * PCB: 508T2C (rev0.3)
472  * parts: DNOQ44QCH106A(CXD2820R, TDA18212), TDA8024
473  * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff
474  * IOA=4d IOB=00 IOC=cc IOD=48 IOE=e4
475  * IOA[7] TS 1=enabled
476  * IOE[5] CXD2820R 1=enabled
477  *
478  * E7 PTC VID=1c73 PID=861f HW=21 FW=0.1 AMTCI=?? "anysee-E7PTC(LP)"
479  * PCB: 508PTC (rev0.5)
480  * parts: ZL10353, TDA10023, DNOD44CDH086A(TDA18212)
481  * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff
482  * IOA=4d IOB=00 IOC=cc IOD=48 IOE=e4
483  * IOA[7] TS 1=enabled
484  * IOE[4] TDA18212 1=enabled
485  * DVB-C:
486  * IOD[6] ZL10353 0=disabled
487  * IOD[5] TDA10023 1=enabled
488  * IOE[0] IF 1=enabled
489  * DVB-T:
490  * IOD[5] TDA10023 0=disabled
491  * IOD[6] ZL10353 1=enabled
492  * IOE[0] IF 0=enabled
493  *
494  * E7 PS2 VID=1c73 PID=861f HW=22 FW=0.1 AMTCI=?? "anysee-E7PS2(LP)"
495  * PCB: 508PS2 (rev0.4)
496  * parts: DNBU10512IST(STV0903, STV6110), ISL6423
497  * OEA=80 OEB=00 OEC=03 OED=f7 OEE=ff
498  * IOA=4d IOB=00 IOC=c4 IOD=08 IOE=e4
499  * IOA[7] TS 1=enabled
500  * IOE[5] STV0903 1=enabled
501  */
502 
503 static int anysee_read_config(struct dvb_usb_device *d)
504 {
505 	struct anysee_state *state = d_to_priv(d);
506 	int ret;
507 	u8 hw_info[3];
508 
509 	/*
510 	 * Check which hardware we have.
511 	 * We must do this call two times to get reliable values (hw/fw bug).
512 	 */
513 	ret = anysee_get_hw_info(d, hw_info);
514 	if (ret)
515 		goto error;
516 
517 	ret = anysee_get_hw_info(d, hw_info);
518 	if (ret)
519 		goto error;
520 
521 	/*
522 	 * Meaning of these info bytes are guessed.
523 	 */
524 	dev_info(&d->udev->dev, "%s: firmware version %d.%d hardware id %d\n",
525 			KBUILD_MODNAME, hw_info[1], hw_info[2], hw_info[0]);
526 
527 	state->hw = hw_info[0];
528 error:
529 	return ret;
530 }
531 
532 /* external I2C gate used for DNOD44CDH086A(TDA18212) tuner module */
533 static int anysee_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
534 {
535 	/* enable / disable tuner access on IOE[4] */
536 	return anysee_wr_reg_mask(fe_to_d(fe), REG_IOE, (enable << 4), 0x10);
537 }
538 
539 static int anysee_frontend_ctrl(struct dvb_frontend *fe, int onoff)
540 {
541 	struct anysee_state *state = fe_to_priv(fe);
542 	struct dvb_usb_device *d = fe_to_d(fe);
543 	int ret;
544 	dev_dbg(&d->udev->dev, "%s: fe=%d onoff=%d\n", __func__, fe->id, onoff);
545 
546 	/* no frontend sleep control */
547 	if (onoff == 0)
548 		return 0;
549 
550 	switch (state->hw) {
551 	case ANYSEE_HW_507FA: /* 15 */
552 		/* E30 Combo Plus */
553 		/* E30 C Plus */
554 
555 		if (fe->id == 0)  {
556 			/* disable DVB-T demod on IOD[0] */
557 			ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 0), 0x01);
558 			if (ret)
559 				goto error;
560 
561 			/* enable DVB-C demod on IOD[5] */
562 			ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 5), 0x20);
563 			if (ret)
564 				goto error;
565 
566 			/* enable DVB-C tuner on IOE[0] */
567 			ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 0), 0x01);
568 			if (ret)
569 				goto error;
570 		} else {
571 			/* disable DVB-C demod on IOD[5] */
572 			ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 5), 0x20);
573 			if (ret)
574 				goto error;
575 
576 			/* enable DVB-T demod on IOD[0] */
577 			ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01);
578 			if (ret)
579 				goto error;
580 
581 			/* enable DVB-T tuner on IOE[0] */
582 			ret = anysee_wr_reg_mask(d, REG_IOE, (0 << 0), 0x01);
583 			if (ret)
584 				goto error;
585 		}
586 
587 		break;
588 	case ANYSEE_HW_508TC: /* 18 */
589 	case ANYSEE_HW_508PTC: /* 21 */
590 		/* E7 TC */
591 		/* E7 PTC */
592 
593 		if (fe->id == 0)  {
594 			/* disable DVB-T demod on IOD[6] */
595 			ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 6), 0x40);
596 			if (ret)
597 				goto error;
598 
599 			/* enable DVB-C demod on IOD[5] */
600 			ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 5), 0x20);
601 			if (ret)
602 				goto error;
603 
604 			/* enable IF route on IOE[0] */
605 			ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 0), 0x01);
606 			if (ret)
607 				goto error;
608 		} else {
609 			/* disable DVB-C demod on IOD[5] */
610 			ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 5), 0x20);
611 			if (ret)
612 				goto error;
613 
614 			/* enable DVB-T demod on IOD[6] */
615 			ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 6), 0x40);
616 			if (ret)
617 				goto error;
618 
619 			/* enable IF route on IOE[0] */
620 			ret = anysee_wr_reg_mask(d, REG_IOE, (0 << 0), 0x01);
621 			if (ret)
622 				goto error;
623 		}
624 
625 		break;
626 	default:
627 		ret = 0;
628 	}
629 
630 error:
631 	return ret;
632 }
633 
634 static int anysee_frontend_attach(struct dvb_usb_adapter *adap)
635 {
636 	struct anysee_state *state = adap_to_priv(adap);
637 	struct dvb_usb_device *d = adap_to_d(adap);
638 	int ret = 0;
639 	u8 tmp;
640 	struct i2c_msg msg[2] = {
641 		{
642 			.addr = anysee_tda18212_config.i2c_address,
643 			.flags = 0,
644 			.len = 1,
645 			.buf = "\x00",
646 		}, {
647 			.addr = anysee_tda18212_config.i2c_address,
648 			.flags = I2C_M_RD,
649 			.len = 1,
650 			.buf = &tmp,
651 		}
652 	};
653 
654 	switch (state->hw) {
655 	case ANYSEE_HW_507T: /* 2 */
656 		/* E30 */
657 
658 		/* attach demod */
659 		adap->fe[0] = dvb_attach(mt352_attach, &anysee_mt352_config,
660 				&d->i2c_adap);
661 		if (adap->fe[0])
662 			break;
663 
664 		/* attach demod */
665 		adap->fe[0] = dvb_attach(zl10353_attach, &anysee_zl10353_config,
666 				&d->i2c_adap);
667 
668 		break;
669 	case ANYSEE_HW_507CD: /* 6 */
670 		/* E30 Plus */
671 
672 		/* enable DVB-T demod on IOD[0] */
673 		ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01);
674 		if (ret)
675 			goto error;
676 
677 		/* enable transport stream on IOA[7] */
678 		ret = anysee_wr_reg_mask(d, REG_IOA, (0 << 7), 0x80);
679 		if (ret)
680 			goto error;
681 
682 		/* attach demod */
683 		adap->fe[0] = dvb_attach(zl10353_attach, &anysee_zl10353_config,
684 				&d->i2c_adap);
685 
686 		break;
687 	case ANYSEE_HW_507DC: /* 10 */
688 		/* E30 C Plus */
689 
690 		/* enable DVB-C demod on IOD[0] */
691 		ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01);
692 		if (ret)
693 			goto error;
694 
695 		/* attach demod */
696 		adap->fe[0] = dvb_attach(tda10023_attach,
697 				&anysee_tda10023_config, &d->i2c_adap, 0x48);
698 
699 		break;
700 	case ANYSEE_HW_507SI: /* 11 */
701 		/* E30 S2 Plus */
702 
703 		/* enable DVB-S/S2 demod on IOD[0] */
704 		ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01);
705 		if (ret)
706 			goto error;
707 
708 		/* attach demod */
709 		adap->fe[0] = dvb_attach(cx24116_attach, &anysee_cx24116_config,
710 				&d->i2c_adap);
711 
712 		break;
713 	case ANYSEE_HW_507FA: /* 15 */
714 		/* E30 Combo Plus */
715 		/* E30 C Plus */
716 
717 		/* enable tuner on IOE[4] */
718 		ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 4), 0x10);
719 		if (ret)
720 			goto error;
721 
722 		/* probe TDA18212 */
723 		tmp = 0;
724 		ret = i2c_transfer(&d->i2c_adap, msg, 2);
725 		if (ret == 2 && tmp == 0xc7)
726 			dev_dbg(&d->udev->dev, "%s: TDA18212 found\n",
727 					__func__);
728 		else
729 			tmp = 0;
730 
731 		/* disable tuner on IOE[4] */
732 		ret = anysee_wr_reg_mask(d, REG_IOE, (0 << 4), 0x10);
733 		if (ret)
734 			goto error;
735 
736 		/* disable DVB-T demod on IOD[0] */
737 		ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 0), 0x01);
738 		if (ret)
739 			goto error;
740 
741 		/* enable DVB-C demod on IOD[5] */
742 		ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 5), 0x20);
743 		if (ret)
744 			goto error;
745 
746 		/* attach demod */
747 		if (tmp == 0xc7) {
748 			/* TDA18212 config */
749 			adap->fe[0] = dvb_attach(tda10023_attach,
750 					&anysee_tda10023_tda18212_config,
751 					&d->i2c_adap, 0x48);
752 
753 			/* I2C gate for DNOD44CDH086A(TDA18212) tuner module */
754 			if (adap->fe[0])
755 				adap->fe[0]->ops.i2c_gate_ctrl =
756 						anysee_i2c_gate_ctrl;
757 		} else {
758 			/* PLL config */
759 			adap->fe[0] = dvb_attach(tda10023_attach,
760 					&anysee_tda10023_config,
761 					&d->i2c_adap, 0x48);
762 		}
763 
764 		/* break out if first frontend attaching fails */
765 		if (!adap->fe[0])
766 			break;
767 
768 		/* disable DVB-C demod on IOD[5] */
769 		ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 5), 0x20);
770 		if (ret)
771 			goto error;
772 
773 		/* enable DVB-T demod on IOD[0] */
774 		ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 0), 0x01);
775 		if (ret)
776 			goto error;
777 
778 		/* attach demod */
779 		if (tmp == 0xc7) {
780 			/* TDA18212 config */
781 			adap->fe[1] = dvb_attach(zl10353_attach,
782 					&anysee_zl10353_tda18212_config2,
783 					&d->i2c_adap);
784 
785 			/* I2C gate for DNOD44CDH086A(TDA18212) tuner module */
786 			if (adap->fe[1])
787 				adap->fe[1]->ops.i2c_gate_ctrl =
788 						anysee_i2c_gate_ctrl;
789 		} else {
790 			/* PLL config */
791 			adap->fe[1] = dvb_attach(zl10353_attach,
792 					&anysee_zl10353_config,
793 					&d->i2c_adap);
794 		}
795 
796 		break;
797 	case ANYSEE_HW_508TC: /* 18 */
798 	case ANYSEE_HW_508PTC: /* 21 */
799 		/* E7 TC */
800 		/* E7 PTC */
801 
802 		/* disable DVB-T demod on IOD[6] */
803 		ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 6), 0x40);
804 		if (ret)
805 			goto error;
806 
807 		/* enable DVB-C demod on IOD[5] */
808 		ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 5), 0x20);
809 		if (ret)
810 			goto error;
811 
812 		/* attach demod */
813 		adap->fe[0] = dvb_attach(tda10023_attach,
814 				&anysee_tda10023_tda18212_config,
815 				&d->i2c_adap, 0x48);
816 
817 		/* I2C gate for DNOD44CDH086A(TDA18212) tuner module */
818 		if (adap->fe[0])
819 			adap->fe[0]->ops.i2c_gate_ctrl = anysee_i2c_gate_ctrl;
820 
821 		/* break out if first frontend attaching fails */
822 		if (!adap->fe[0])
823 			break;
824 
825 		/* disable DVB-C demod on IOD[5] */
826 		ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 5), 0x20);
827 		if (ret)
828 			goto error;
829 
830 		/* enable DVB-T demod on IOD[6] */
831 		ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 6), 0x40);
832 		if (ret)
833 			goto error;
834 
835 		/* attach demod */
836 		adap->fe[1] = dvb_attach(zl10353_attach,
837 				&anysee_zl10353_tda18212_config,
838 				&d->i2c_adap);
839 
840 		/* I2C gate for DNOD44CDH086A(TDA18212) tuner module */
841 		if (adap->fe[1])
842 			adap->fe[1]->ops.i2c_gate_ctrl = anysee_i2c_gate_ctrl;
843 
844 		state->has_ci = true;
845 
846 		break;
847 	case ANYSEE_HW_508S2: /* 19 */
848 	case ANYSEE_HW_508PS2: /* 22 */
849 		/* E7 S2 */
850 		/* E7 PS2 */
851 
852 		/* enable DVB-S/S2 demod on IOE[5] */
853 		ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 5), 0x20);
854 		if (ret)
855 			goto error;
856 
857 		/* attach demod */
858 		adap->fe[0] = dvb_attach(stv0900_attach,
859 				&anysee_stv0900_config, &d->i2c_adap, 0);
860 
861 		state->has_ci = true;
862 
863 		break;
864 	case ANYSEE_HW_508T2C: /* 20 */
865 		/* E7 T2C */
866 
867 		/* enable DVB-T/T2/C demod on IOE[5] */
868 		ret = anysee_wr_reg_mask(d, REG_IOE, (1 << 5), 0x20);
869 		if (ret)
870 			goto error;
871 
872 		/* attach demod */
873 		adap->fe[0] = dvb_attach(cxd2820r_attach,
874 				&anysee_cxd2820r_config, &d->i2c_adap, NULL);
875 
876 		state->has_ci = true;
877 
878 		break;
879 	}
880 
881 	if (!adap->fe[0]) {
882 		/* we have no frontend :-( */
883 		ret = -ENODEV;
884 		dev_err(&d->udev->dev,
885 				"%s: Unsupported Anysee version. Please report to <linux-media@vger.kernel.org>.\n",
886 				KBUILD_MODNAME);
887 	}
888 error:
889 	return ret;
890 }
891 
892 static int anysee_tuner_attach(struct dvb_usb_adapter *adap)
893 {
894 	struct anysee_state *state = adap_to_priv(adap);
895 	struct dvb_usb_device *d = adap_to_d(adap);
896 	struct dvb_frontend *fe;
897 	int ret;
898 	dev_dbg(&d->udev->dev, "%s:\n", __func__);
899 
900 	switch (state->hw) {
901 	case ANYSEE_HW_507T: /* 2 */
902 		/* E30 */
903 
904 		/* attach tuner */
905 		fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc2 >> 1), NULL,
906 				DVB_PLL_THOMSON_DTT7579);
907 
908 		break;
909 	case ANYSEE_HW_507CD: /* 6 */
910 		/* E30 Plus */
911 
912 		/* attach tuner */
913 		fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc2 >> 1),
914 				&d->i2c_adap, DVB_PLL_THOMSON_DTT7579);
915 
916 		break;
917 	case ANYSEE_HW_507DC: /* 10 */
918 		/* E30 C Plus */
919 
920 		/* attach tuner */
921 		fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc0 >> 1),
922 				&d->i2c_adap, DVB_PLL_SAMSUNG_DTOS403IH102A);
923 
924 		break;
925 	case ANYSEE_HW_507SI: /* 11 */
926 		/* E30 S2 Plus */
927 
928 		/* attach LNB controller */
929 		fe = dvb_attach(isl6423_attach, adap->fe[0], &d->i2c_adap,
930 				&anysee_isl6423_config);
931 
932 		break;
933 	case ANYSEE_HW_507FA: /* 15 */
934 		/* E30 Combo Plus */
935 		/* E30 C Plus */
936 
937 		/* Try first attach TDA18212 silicon tuner on IOE[4], if that
938 		 * fails attach old simple PLL. */
939 
940 		/* attach tuner */
941 		fe = dvb_attach(tda18212_attach, adap->fe[0], &d->i2c_adap,
942 				&anysee_tda18212_config);
943 
944 		if (fe && adap->fe[1]) {
945 			/* attach tuner for 2nd FE */
946 			fe = dvb_attach(tda18212_attach, adap->fe[1],
947 					&d->i2c_adap, &anysee_tda18212_config);
948 			break;
949 		} else if (fe) {
950 			break;
951 		}
952 
953 		/* attach tuner */
954 		fe = dvb_attach(dvb_pll_attach, adap->fe[0], (0xc0 >> 1),
955 				&d->i2c_adap, DVB_PLL_SAMSUNG_DTOS403IH102A);
956 
957 		if (fe && adap->fe[1]) {
958 			/* attach tuner for 2nd FE */
959 			fe = dvb_attach(dvb_pll_attach, adap->fe[0],
960 					(0xc0 >> 1), &d->i2c_adap,
961 					DVB_PLL_SAMSUNG_DTOS403IH102A);
962 		}
963 
964 		break;
965 	case ANYSEE_HW_508TC: /* 18 */
966 	case ANYSEE_HW_508PTC: /* 21 */
967 		/* E7 TC */
968 		/* E7 PTC */
969 
970 		/* attach tuner */
971 		fe = dvb_attach(tda18212_attach, adap->fe[0], &d->i2c_adap,
972 				&anysee_tda18212_config);
973 
974 		if (fe) {
975 			/* attach tuner for 2nd FE */
976 			fe = dvb_attach(tda18212_attach, adap->fe[1],
977 					&d->i2c_adap, &anysee_tda18212_config);
978 		}
979 
980 		break;
981 	case ANYSEE_HW_508S2: /* 19 */
982 	case ANYSEE_HW_508PS2: /* 22 */
983 		/* E7 S2 */
984 		/* E7 PS2 */
985 
986 		/* attach tuner */
987 		fe = dvb_attach(stv6110_attach, adap->fe[0],
988 				&anysee_stv6110_config, &d->i2c_adap);
989 
990 		if (fe) {
991 			/* attach LNB controller */
992 			fe = dvb_attach(isl6423_attach, adap->fe[0],
993 					&d->i2c_adap, &anysee_isl6423_config);
994 		}
995 
996 		break;
997 
998 	case ANYSEE_HW_508T2C: /* 20 */
999 		/* E7 T2C */
1000 
1001 		/* attach tuner */
1002 		fe = dvb_attach(tda18212_attach, adap->fe[0], &d->i2c_adap,
1003 				&anysee_tda18212_config2);
1004 
1005 		break;
1006 	default:
1007 		fe = NULL;
1008 	}
1009 
1010 	if (fe)
1011 		ret = 0;
1012 	else
1013 		ret = -ENODEV;
1014 
1015 	return ret;
1016 }
1017 
1018 #if IS_ENABLED(CONFIG_RC_CORE)
1019 static int anysee_rc_query(struct dvb_usb_device *d)
1020 {
1021 	u8 buf[] = {CMD_GET_IR_CODE};
1022 	u8 ircode[2];
1023 	int ret;
1024 
1025 	/* Remote controller is basic NEC using address byte 0x08.
1026 	   Anysee device RC query returns only two bytes, status and code,
1027 	   address byte is dropped. Also it does not return any value for
1028 	   NEC RCs having address byte other than 0x08. Due to that, we
1029 	   cannot use that device as standard NEC receiver.
1030 	   It could be possible make hack which reads whole code directly
1031 	   from device memory... */
1032 
1033 	ret = anysee_ctrl_msg(d, buf, sizeof(buf), ircode, sizeof(ircode));
1034 	if (ret)
1035 		return ret;
1036 
1037 	if (ircode[0]) {
1038 		dev_dbg(&d->udev->dev, "%s: key pressed %02x\n", __func__,
1039 				ircode[1]);
1040 		rc_keydown(d->rc_dev, 0x08 << 8 | ircode[1], 0);
1041 	}
1042 
1043 	return 0;
1044 }
1045 
1046 static int anysee_get_rc_config(struct dvb_usb_device *d, struct dvb_usb_rc *rc)
1047 {
1048 	rc->allowed_protos = RC_BIT_NEC;
1049 	rc->query          = anysee_rc_query;
1050 	rc->interval       = 250;  /* windows driver uses 500ms */
1051 
1052 	return 0;
1053 }
1054 #else
1055 	#define anysee_get_rc_config NULL
1056 #endif
1057 
1058 static int anysee_ci_read_attribute_mem(struct dvb_ca_en50221 *ci, int slot,
1059 	int addr)
1060 {
1061 	struct dvb_usb_device *d = ci->data;
1062 	int ret;
1063 	u8 buf[] = {CMD_CI, 0x02, 0x40 | addr >> 8, addr & 0xff, 0x00, 1};
1064 	u8 val;
1065 
1066 	ret = anysee_ctrl_msg(d, buf, sizeof(buf), &val, 1);
1067 	if (ret)
1068 		return ret;
1069 
1070 	return val;
1071 }
1072 
1073 static int anysee_ci_write_attribute_mem(struct dvb_ca_en50221 *ci, int slot,
1074 	int addr, u8 val)
1075 {
1076 	struct dvb_usb_device *d = ci->data;
1077 	int ret;
1078 	u8 buf[] = {CMD_CI, 0x03, 0x40 | addr >> 8, addr & 0xff, 0x00, 1, val};
1079 
1080 	ret = anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0);
1081 	if (ret)
1082 		return ret;
1083 
1084 	return 0;
1085 }
1086 
1087 static int anysee_ci_read_cam_control(struct dvb_ca_en50221 *ci, int slot,
1088 	u8 addr)
1089 {
1090 	struct dvb_usb_device *d = ci->data;
1091 	int ret;
1092 	u8 buf[] = {CMD_CI, 0x04, 0x40, addr, 0x00, 1};
1093 	u8 val;
1094 
1095 	ret = anysee_ctrl_msg(d, buf, sizeof(buf), &val, 1);
1096 	if (ret)
1097 		return ret;
1098 
1099 	return val;
1100 }
1101 
1102 static int anysee_ci_write_cam_control(struct dvb_ca_en50221 *ci, int slot,
1103 	u8 addr, u8 val)
1104 {
1105 	struct dvb_usb_device *d = ci->data;
1106 	int ret;
1107 	u8 buf[] = {CMD_CI, 0x05, 0x40, addr, 0x00, 1, val};
1108 
1109 	ret = anysee_ctrl_msg(d, buf, sizeof(buf), NULL, 0);
1110 	if (ret)
1111 		return ret;
1112 
1113 	return 0;
1114 }
1115 
1116 static int anysee_ci_slot_reset(struct dvb_ca_en50221 *ci, int slot)
1117 {
1118 	struct dvb_usb_device *d = ci->data;
1119 	int ret;
1120 	struct anysee_state *state = d_to_priv(d);
1121 
1122 	state->ci_cam_ready = jiffies + msecs_to_jiffies(1000);
1123 
1124 	ret = anysee_wr_reg_mask(d, REG_IOA, (0 << 7), 0x80);
1125 	if (ret)
1126 		return ret;
1127 
1128 	msleep(300);
1129 
1130 	ret = anysee_wr_reg_mask(d, REG_IOA, (1 << 7), 0x80);
1131 	if (ret)
1132 		return ret;
1133 
1134 	return 0;
1135 }
1136 
1137 static int anysee_ci_slot_shutdown(struct dvb_ca_en50221 *ci, int slot)
1138 {
1139 	struct dvb_usb_device *d = ci->data;
1140 	int ret;
1141 
1142 	ret = anysee_wr_reg_mask(d, REG_IOA, (0 << 7), 0x80);
1143 	if (ret)
1144 		return ret;
1145 
1146 	msleep(30);
1147 
1148 	ret = anysee_wr_reg_mask(d, REG_IOA, (1 << 7), 0x80);
1149 	if (ret)
1150 		return ret;
1151 
1152 	return 0;
1153 }
1154 
1155 static int anysee_ci_slot_ts_enable(struct dvb_ca_en50221 *ci, int slot)
1156 {
1157 	struct dvb_usb_device *d = ci->data;
1158 	int ret;
1159 
1160 	ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 1), 0x02);
1161 	if (ret)
1162 		return ret;
1163 
1164 	return 0;
1165 }
1166 
1167 static int anysee_ci_poll_slot_status(struct dvb_ca_en50221 *ci, int slot,
1168 	int open)
1169 {
1170 	struct dvb_usb_device *d = ci->data;
1171 	struct anysee_state *state = d_to_priv(d);
1172 	int ret;
1173 	u8 tmp = 0;
1174 
1175 	ret = anysee_rd_reg_mask(d, REG_IOC, &tmp, 0x40);
1176 	if (ret)
1177 		return ret;
1178 
1179 	if (tmp == 0) {
1180 		ret = DVB_CA_EN50221_POLL_CAM_PRESENT;
1181 		if (time_after(jiffies, state->ci_cam_ready))
1182 			ret |= DVB_CA_EN50221_POLL_CAM_READY;
1183 	}
1184 
1185 	return ret;
1186 }
1187 
1188 static int anysee_ci_init(struct dvb_usb_device *d)
1189 {
1190 	struct anysee_state *state = d_to_priv(d);
1191 	int ret;
1192 
1193 	state->ci.owner               = THIS_MODULE;
1194 	state->ci.read_attribute_mem  = anysee_ci_read_attribute_mem;
1195 	state->ci.write_attribute_mem = anysee_ci_write_attribute_mem;
1196 	state->ci.read_cam_control    = anysee_ci_read_cam_control;
1197 	state->ci.write_cam_control   = anysee_ci_write_cam_control;
1198 	state->ci.slot_reset          = anysee_ci_slot_reset;
1199 	state->ci.slot_shutdown       = anysee_ci_slot_shutdown;
1200 	state->ci.slot_ts_enable      = anysee_ci_slot_ts_enable;
1201 	state->ci.poll_slot_status    = anysee_ci_poll_slot_status;
1202 	state->ci.data                = d;
1203 
1204 	ret = anysee_wr_reg_mask(d, REG_IOA, (1 << 7), 0x80);
1205 	if (ret)
1206 		return ret;
1207 
1208 	ret = anysee_wr_reg_mask(d, REG_IOD, (0 << 2)|(0 << 1)|(0 << 0), 0x07);
1209 	if (ret)
1210 		return ret;
1211 
1212 	ret = anysee_wr_reg_mask(d, REG_IOD, (1 << 2)|(1 << 1)|(1 << 0), 0x07);
1213 	if (ret)
1214 		return ret;
1215 
1216 	ret = dvb_ca_en50221_init(&d->adapter[0].dvb_adap, &state->ci, 0, 1);
1217 	if (ret)
1218 		return ret;
1219 
1220 	state->ci_attached = true;
1221 
1222 	return 0;
1223 }
1224 
1225 static void anysee_ci_release(struct dvb_usb_device *d)
1226 {
1227 	struct anysee_state *state = d_to_priv(d);
1228 
1229 	/* detach CI */
1230 	if (state->ci_attached)
1231 		dvb_ca_en50221_release(&state->ci);
1232 
1233 	return;
1234 }
1235 
1236 static int anysee_init(struct dvb_usb_device *d)
1237 {
1238 	struct anysee_state *state = d_to_priv(d);
1239 	int ret;
1240 
1241 	/* There is one interface with two alternate settings.
1242 	   Alternate setting 0 is for bulk transfer.
1243 	   Alternate setting 1 is for isochronous transfer.
1244 	   We use bulk transfer (alternate setting 0). */
1245 	ret = usb_set_interface(d->udev, 0, 0);
1246 	if (ret)
1247 		return ret;
1248 
1249 	/* LED light */
1250 	ret = anysee_led_ctrl(d, 0x01, 0x03);
1251 	if (ret)
1252 		return ret;
1253 
1254 	/* enable IR */
1255 	ret = anysee_ir_ctrl(d, 1);
1256 	if (ret)
1257 		return ret;
1258 
1259 	/* attach CI */
1260 	if (state->has_ci) {
1261 		ret = anysee_ci_init(d);
1262 		if (ret)
1263 			return ret;
1264 	}
1265 
1266 	return 0;
1267 }
1268 
1269 static void anysee_exit(struct dvb_usb_device *d)
1270 {
1271 	return anysee_ci_release(d);
1272 }
1273 
1274 /* DVB USB Driver stuff */
1275 static struct dvb_usb_device_properties anysee_props = {
1276 	.driver_name = KBUILD_MODNAME,
1277 	.owner = THIS_MODULE,
1278 	.adapter_nr = adapter_nr,
1279 	.size_of_priv = sizeof(struct anysee_state),
1280 
1281 	.generic_bulk_ctrl_endpoint = 0x01,
1282 	.generic_bulk_ctrl_endpoint_response = 0x81,
1283 
1284 	.i2c_algo         = &anysee_i2c_algo,
1285 	.read_config      = anysee_read_config,
1286 	.frontend_attach  = anysee_frontend_attach,
1287 	.tuner_attach     = anysee_tuner_attach,
1288 	.init             = anysee_init,
1289 	.get_rc_config    = anysee_get_rc_config,
1290 	.frontend_ctrl    = anysee_frontend_ctrl,
1291 	.streaming_ctrl   = anysee_streaming_ctrl,
1292 	.exit             = anysee_exit,
1293 
1294 	.num_adapters = 1,
1295 	.adapter = {
1296 		{
1297 			.stream = DVB_USB_STREAM_BULK(0x82, 8, 16 * 512),
1298 		}
1299 	}
1300 };
1301 
1302 static const struct usb_device_id anysee_id_table[] = {
1303 	{ DVB_USB_DEVICE(USB_VID_CYPRESS, USB_PID_ANYSEE,
1304 		&anysee_props, "Anysee", RC_MAP_ANYSEE) },
1305 	{ DVB_USB_DEVICE(USB_VID_AMT, USB_PID_ANYSEE,
1306 		&anysee_props, "Anysee", RC_MAP_ANYSEE) },
1307 	{ }
1308 };
1309 MODULE_DEVICE_TABLE(usb, anysee_id_table);
1310 
1311 static struct usb_driver anysee_usb_driver = {
1312 	.name = KBUILD_MODNAME,
1313 	.id_table = anysee_id_table,
1314 	.probe = dvb_usbv2_probe,
1315 	.disconnect = dvb_usbv2_disconnect,
1316 	.suspend = dvb_usbv2_suspend,
1317 	.resume = dvb_usbv2_resume,
1318 	.reset_resume = dvb_usbv2_reset_resume,
1319 	.no_dynamic_id = 1,
1320 	.soft_unbind = 1,
1321 };
1322 
1323 module_usb_driver(anysee_usb_driver);
1324 
1325 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1326 MODULE_DESCRIPTION("Driver Anysee E30 DVB-C & DVB-T USB2.0");
1327 MODULE_LICENSE("GPL");
1328