Linux-libre 3.4.8-gnu1
[librecmc/linux-libre.git] / drivers / media / dvb / dvb-usb / anysee.c
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
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
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
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 */
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 */
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
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
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
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
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 */
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
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
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 */
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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");