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