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