1 // SPDX-License-Identifier: GPL-2.0
3 // DVB device driver for em28xx
5 // (c) 2008-2011 Mauro Carvalho Chehab <mchehab@kernel.org>
7 // (c) 2008 Devin Heitmueller <devin.heitmueller@gmail.com>
8 // - Fixes for the driver to properly work with HVR-950
9 // - Fixes for the driver to properly work with Pinnacle PCTV HD Pro Stick
10 // - Fixes for the driver to properly work with AMD ATI TV Wonder HD 600
12 // (c) 2008 Aidan Thornton <makosoft@googlemail.com>
14 // (c) 2012 Frank Schäfer <fschaefer.oss@googlemail.com>
16 // Based on cx88-dvb, saa7134-dvb and videobuf-dvb originally written by:
17 // (c) 2004, 2005 Chris Pascoe <c.pascoe@itee.uq.edu.au>
18 // (c) 2004 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
20 // This program is free software; you can redistribute it and/or modify
21 // it under the terms of the GNU General Public License as published by
22 // the Free Software Foundation version 2 of the License.
26 #include <linux/kernel.h>
27 #include <linux/slab.h>
28 #include <linux/usb.h>
30 #include <media/v4l2-common.h>
31 #include <media/dvb_demux.h>
32 #include <media/dvb_net.h>
33 #include <media/dmxdev.h>
34 #include <media/tuner.h>
35 #include "tuner-simple.h"
36 #include <linux/gpio.h>
40 #include "lgdt3306a.h"
45 #include "mt352_priv.h" /* FIXME */
47 #include "drx39xyj/drx39xxj.h"
52 #include "tda18271c2dd.h"
59 #include "m88ds3103.h"
64 #include "qm1d1c0042.h"
66 MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@kernel.org>");
67 MODULE_LICENSE("GPL v2");
68 MODULE_DESCRIPTION(DRIVER_DESC
" - digital TV interface");
69 MODULE_VERSION(EM28XX_VERSION
);
71 static unsigned int debug
;
72 module_param(debug
, int, 0644);
73 MODULE_PARM_DESC(debug
, "enable debug messages [dvb]");
75 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr
);
77 #define dprintk(level, fmt, arg...) do { \
79 dev_printk(KERN_DEBUG, &dev->intf->dev, \
80 "dvb: " fmt, ## arg); \
84 struct dvb_frontend
*fe
[2];
86 /* feed count management */
90 /* general boilerplate stuff */
91 struct dvb_adapter adapter
;
92 struct dvb_demux demux
;
94 struct dmx_frontend fe_hw
;
95 struct dmx_frontend fe_mem
;
98 /* Due to DRX-K - probably need changes */
99 int (*gate_ctrl
)(struct dvb_frontend
*fe
, int gate
);
100 struct semaphore pll_mutex
;
101 bool dont_attach_fe1
;
103 struct i2c_client
*i2c_client_demod
;
104 struct i2c_client
*i2c_client_tuner
;
105 struct i2c_client
*i2c_client_sec
;
108 static inline void print_err_status(struct em28xx
*dev
,
109 int packet
, int status
)
111 char *errmsg
= "Unknown";
115 errmsg
= "unlinked synchronously";
118 errmsg
= "unlinked asynchronously";
121 errmsg
= "Buffer error (overrun)";
124 errmsg
= "Stalled (device not responding)";
127 errmsg
= "Babble (bad cable?)";
130 errmsg
= "Bit-stuff error (bad cable?)";
133 errmsg
= "CRC/Timeout (could be anything)";
136 errmsg
= "Device does not respond";
140 dprintk(1, "URB status %d [%s].\n", status
, errmsg
);
142 dprintk(1, "URB packet %d, status %d [%s].\n",
143 packet
, status
, errmsg
);
147 static inline int em28xx_dvb_urb_data_copy(struct em28xx
*dev
, struct urb
*urb
)
149 int xfer_bulk
, num_packets
, i
;
154 if (dev
->disconnected
)
158 print_err_status(dev
, -1, urb
->status
);
160 xfer_bulk
= usb_pipebulk(urb
->pipe
);
162 if (xfer_bulk
) /* bulk */
165 num_packets
= urb
->number_of_packets
;
167 for (i
= 0; i
< num_packets
; i
++) {
169 if (urb
->status
< 0) {
170 print_err_status(dev
, i
, urb
->status
);
171 if (urb
->status
!= -EPROTO
)
174 if (!urb
->actual_length
)
176 dvb_dmx_swfilter(&dev
->dvb
->demux
, urb
->transfer_buffer
,
179 if (urb
->iso_frame_desc
[i
].status
< 0) {
180 print_err_status(dev
, i
,
181 urb
->iso_frame_desc
[i
].status
);
182 if (urb
->iso_frame_desc
[i
].status
!= -EPROTO
)
185 if (!urb
->iso_frame_desc
[i
].actual_length
)
187 dvb_dmx_swfilter(&dev
->dvb
->demux
,
188 urb
->transfer_buffer
+
189 urb
->iso_frame_desc
[i
].offset
,
190 urb
->iso_frame_desc
[i
].actual_length
);
197 static int em28xx_start_streaming(struct em28xx_dvb
*dvb
)
200 struct em28xx_i2c_bus
*i2c_bus
= dvb
->adapter
.priv
;
201 struct em28xx
*dev
= i2c_bus
->dev
;
202 struct usb_device
*udev
= interface_to_usbdev(dev
->intf
);
203 int dvb_max_packet_size
, packet_multiplier
, dvb_alt
;
205 if (dev
->dvb_xfer_bulk
) {
206 if (!dev
->dvb_ep_bulk
)
208 dvb_max_packet_size
= 512; /* USB 2.0 spec */
209 packet_multiplier
= EM28XX_DVB_BULK_PACKET_MULTIPLIER
;
212 if (!dev
->dvb_ep_isoc
)
214 dvb_max_packet_size
= dev
->dvb_max_pkt_size_isoc
;
215 if (dvb_max_packet_size
< 0)
216 return dvb_max_packet_size
;
217 packet_multiplier
= EM28XX_DVB_NUM_ISOC_PACKETS
;
218 dvb_alt
= dev
->dvb_alt_isoc
;
221 if (!dev
->board
.has_dual_ts
)
222 usb_set_interface(udev
, dev
->ifnum
, dvb_alt
);
224 rc
= em28xx_set_mode(dev
, EM28XX_DIGITAL_MODE
);
228 dprintk(1, "Using %d buffers each with %d x %d bytes, alternate %d\n",
231 dvb_max_packet_size
, dvb_alt
);
233 return em28xx_init_usb_xfer(dev
, EM28XX_DIGITAL_MODE
,
238 em28xx_dvb_urb_data_copy
);
241 static int em28xx_stop_streaming(struct em28xx_dvb
*dvb
)
243 struct em28xx_i2c_bus
*i2c_bus
= dvb
->adapter
.priv
;
244 struct em28xx
*dev
= i2c_bus
->dev
;
246 em28xx_stop_urbs(dev
);
251 static int em28xx_start_feed(struct dvb_demux_feed
*feed
)
253 struct dvb_demux
*demux
= feed
->demux
;
254 struct em28xx_dvb
*dvb
= demux
->priv
;
257 if (!demux
->dmx
.frontend
)
260 mutex_lock(&dvb
->lock
);
264 if (dvb
->nfeeds
== 1) {
265 ret
= em28xx_start_streaming(dvb
);
270 mutex_unlock(&dvb
->lock
);
274 static int em28xx_stop_feed(struct dvb_demux_feed
*feed
)
276 struct dvb_demux
*demux
= feed
->demux
;
277 struct em28xx_dvb
*dvb
= demux
->priv
;
280 mutex_lock(&dvb
->lock
);
284 err
= em28xx_stop_streaming(dvb
);
286 mutex_unlock(&dvb
->lock
);
290 /* ------------------------------------------------------------------ */
291 static int em28xx_dvb_bus_ctrl(struct dvb_frontend
*fe
, int acquire
)
293 struct em28xx_i2c_bus
*i2c_bus
= fe
->dvb
->priv
;
294 struct em28xx
*dev
= i2c_bus
->dev
;
297 return em28xx_set_mode(dev
, EM28XX_DIGITAL_MODE
);
299 return em28xx_set_mode(dev
, EM28XX_SUSPEND
);
302 /* ------------------------------------------------------------------ */
304 static struct lgdt330x_config em2880_lgdt3303_dev
= {
305 .demod_chip
= LGDT3303
,
308 static struct lgdt3305_config em2870_lgdt3304_dev
= {
310 .demod_chip
= LGDT3304
,
311 .spectral_inversion
= 1,
313 .mpeg_mode
= LGDT3305_MPEG_PARALLEL
,
314 .tpclk_edge
= LGDT3305_TPCLK_FALLING_EDGE
,
315 .tpvalid_polarity
= LGDT3305_TP_VALID_HIGH
,
320 static struct lgdt3305_config em2874_lgdt3305_dev
= {
322 .demod_chip
= LGDT3305
,
323 .spectral_inversion
= 1,
325 .mpeg_mode
= LGDT3305_MPEG_SERIAL
,
326 .tpclk_edge
= LGDT3305_TPCLK_FALLING_EDGE
,
327 .tpvalid_polarity
= LGDT3305_TP_VALID_HIGH
,
332 static struct lgdt3305_config em2874_lgdt3305_nogate_dev
= {
334 .demod_chip
= LGDT3305
,
335 .spectral_inversion
= 1,
337 .mpeg_mode
= LGDT3305_MPEG_SERIAL
,
338 .tpclk_edge
= LGDT3305_TPCLK_FALLING_EDGE
,
339 .tpvalid_polarity
= LGDT3305_TP_VALID_HIGH
,
344 static struct s921_config sharp_isdbt
= {
345 .demod_address
= 0x30 >> 1
348 static struct zl10353_config em28xx_zl10353_with_xc3028
= {
349 .demod_address
= (0x1e >> 1),
355 static struct s5h1409_config em28xx_s5h1409_with_xc3028
= {
356 .demod_address
= 0x32 >> 1,
357 .output_mode
= S5H1409_PARALLEL_OUTPUT
,
358 .gpio
= S5H1409_GPIO_OFF
,
359 .inversion
= S5H1409_INVERSION_OFF
,
360 .status_mode
= S5H1409_DEMODLOCKING
,
361 .mpeg_timing
= S5H1409_MPEGTIMING_CONTINUOUS_NONINVERTING_CLOCK
364 static struct tda18271_std_map kworld_a340_std_map
= {
365 .atsc_6
= { .if_freq
= 3250, .agc_mode
= 3, .std
= 0,
366 .if_lvl
= 1, .rfagc_top
= 0x37, },
367 .qam_6
= { .if_freq
= 4000, .agc_mode
= 3, .std
= 1,
368 .if_lvl
= 1, .rfagc_top
= 0x37, },
371 static struct tda18271_config kworld_a340_config
= {
372 .std_map
= &kworld_a340_std_map
,
375 static struct tda18271_config kworld_ub435q_v2_config
= {
376 .std_map
= &kworld_a340_std_map
,
377 .gate
= TDA18271_GATE_DIGITAL
,
380 static struct tda18212_config kworld_ub435q_v3_config
= {
385 static struct zl10353_config em28xx_zl10353_xc3028_no_i2c_gate
= {
386 .demod_address
= (0x1e >> 1),
388 .disable_i2c_gate_ctrl
= 1,
393 static struct drxd_config em28xx_drxd
= {
394 .demod_address
= 0x70,
395 .demod_revision
= 0xa2,
396 .pll_type
= DRXD_PLL_NONE
,
400 .disable_i2c_gate_ctrl
= 1,
403 static struct drxk_config terratec_h5_drxk
= {
407 .microcode_name
= "dvb-usb-terratec-h5-drxk.fw",
408 .qam_demod_parameter_count
= 2,
411 static struct drxk_config hauppauge_930c_drxk
= {
415 .microcode_name
= "dvb-usb-hauppauge-hvr930c-drxk.fw",
417 .qam_demod_parameter_count
= 2,
420 static struct drxk_config terratec_htc_stick_drxk
= {
424 .microcode_name
= "dvb-usb-terratec-htc-stick-drxk.fw",
426 .qam_demod_parameter_count
= 2,
427 /* Required for the antenna_gpio to disable LNA. */
428 .antenna_dvbt
= true,
429 /* The windows driver uses the same. This will disable LNA. */
433 static struct drxk_config maxmedia_ub425_tc_drxk
= {
437 .microcode_name
= "dvb-demod-drxk-01.fw",
439 .qam_demod_parameter_count
= 2,
442 static struct drxk_config pctv_520e_drxk
= {
445 .microcode_name
= "dvb-demod-drxk-pctv.fw",
446 .qam_demod_parameter_count
= 2,
448 .antenna_dvbt
= true, /* disable LNA */
449 .antenna_gpio
= (1 << 2), /* disable LNA */
452 static int drxk_gate_ctrl(struct dvb_frontend
*fe
, int enable
)
454 struct em28xx_dvb
*dvb
= fe
->sec_priv
;
461 down(&dvb
->pll_mutex
);
462 status
= dvb
->gate_ctrl(fe
, 1);
464 status
= dvb
->gate_ctrl(fe
, 0);
470 static void hauppauge_hvr930c_init(struct em28xx
*dev
)
474 struct em28xx_reg_seq hauppauge_hvr930c_init
[] = {
475 {EM2874_R80_GPIO_P0_CTRL
, 0xff, 0xff, 0x65},
476 {EM2874_R80_GPIO_P0_CTRL
, 0xfb, 0xff, 0x32},
477 {EM2874_R80_GPIO_P0_CTRL
, 0xff, 0xff, 0xb8},
480 struct em28xx_reg_seq hauppauge_hvr930c_end
[] = {
481 {EM2874_R80_GPIO_P0_CTRL
, 0xef, 0xff, 0x01},
482 {EM2874_R80_GPIO_P0_CTRL
, 0xaf, 0xff, 0x65},
483 {EM2874_R80_GPIO_P0_CTRL
, 0xef, 0xff, 0x76},
484 {EM2874_R80_GPIO_P0_CTRL
, 0xef, 0xff, 0x01},
485 {EM2874_R80_GPIO_P0_CTRL
, 0xcf, 0xff, 0x0b},
486 {EM2874_R80_GPIO_P0_CTRL
, 0xef, 0xff, 0x40},
488 {EM2874_R80_GPIO_P0_CTRL
, 0xcf, 0xff, 0x65},
489 {EM2874_R80_GPIO_P0_CTRL
, 0xef, 0xff, 0x65},
490 {EM2874_R80_GPIO_P0_CTRL
, 0xcf, 0xff, 0x0b},
491 {EM2874_R80_GPIO_P0_CTRL
, 0xef, 0xff, 0x65},
500 {{ 0x06, 0x02, 0x00, 0x31 }, 4},
502 {{ 0x01, 0x02, 0x00, 0xc6 }, 4},
504 {{ 0x01, 0x00, 0xff, 0xaf }, 4},
505 {{ 0x01, 0x00, 0x03, 0xa0 }, 4},
507 {{ 0x01, 0x00, 0x73, 0xaf }, 4},
510 {{ 0x00, 0x04, 0x00, 0x0a }, 4},
512 {{ 0x04, 0x14, 0x00, 0x00 }, 4},
515 em28xx_gpio_set(dev
, hauppauge_hvr930c_init
);
516 em28xx_write_reg(dev
, EM28XX_R06_I2C_CLK
, 0x40);
517 usleep_range(10000, 11000);
518 em28xx_write_reg(dev
, EM28XX_R06_I2C_CLK
, 0x44);
519 usleep_range(10000, 11000);
521 dev
->i2c_client
[dev
->def_i2c_bus
].addr
= 0x82 >> 1;
523 for (i
= 0; i
< ARRAY_SIZE(regs
); i
++)
524 i2c_master_send(&dev
->i2c_client
[dev
->def_i2c_bus
],
525 regs
[i
].r
, regs
[i
].len
);
526 em28xx_gpio_set(dev
, hauppauge_hvr930c_end
);
530 em28xx_write_reg(dev
, EM28XX_R06_I2C_CLK
, 0x44);
533 em28xx_write_reg(dev
, EM28XX_R06_I2C_CLK
, 0x45);
534 usleep_range(10000, 11000);
537 static void terratec_h5_init(struct em28xx
*dev
)
540 struct em28xx_reg_seq terratec_h5_init
[] = {
541 {EM2820_R08_GPIO_CTRL
, 0xff, 0xff, 10},
542 {EM2874_R80_GPIO_P0_CTRL
, 0xf6, 0xff, 100},
543 {EM2874_R80_GPIO_P0_CTRL
, 0xf2, 0xff, 50},
544 {EM2874_R80_GPIO_P0_CTRL
, 0xf6, 0xff, 100},
547 struct em28xx_reg_seq terratec_h5_end
[] = {
548 {EM2874_R80_GPIO_P0_CTRL
, 0xe6, 0xff, 100},
549 {EM2874_R80_GPIO_P0_CTRL
, 0xa6, 0xff, 50},
550 {EM2874_R80_GPIO_P0_CTRL
, 0xe6, 0xff, 100},
557 {{ 0x06, 0x02, 0x00, 0x31 }, 4},
559 {{ 0x01, 0x02, 0x00, 0xc6 }, 4},
561 {{ 0x01, 0x00, 0xff, 0xaf }, 4},
562 {{ 0x01, 0x00, 0x03, 0xa0 }, 4},
564 {{ 0x01, 0x00, 0x73, 0xaf }, 4},
567 {{ 0x00, 0x04, 0x00, 0x0a }, 4},
569 {{ 0x04, 0x14, 0x00, 0x00 }, 4},
572 em28xx_gpio_set(dev
, terratec_h5_init
);
573 em28xx_write_reg(dev
, EM28XX_R06_I2C_CLK
, 0x40);
574 usleep_range(10000, 11000);
575 em28xx_write_reg(dev
, EM28XX_R06_I2C_CLK
, 0x45);
576 usleep_range(10000, 11000);
578 dev
->i2c_client
[dev
->def_i2c_bus
].addr
= 0x82 >> 1;
580 for (i
= 0; i
< ARRAY_SIZE(regs
); i
++)
581 i2c_master_send(&dev
->i2c_client
[dev
->def_i2c_bus
],
582 regs
[i
].r
, regs
[i
].len
);
583 em28xx_gpio_set(dev
, terratec_h5_end
);
586 static void terratec_htc_stick_init(struct em28xx
*dev
)
591 * GPIO configuration:
592 * 0xff: unknown (does not affect DVB-T).
593 * 0xf6: DRX-K (demodulator).
594 * 0xe6: unknown (does not affect DVB-T).
595 * 0xb6: unknown (does not affect DVB-T).
597 struct em28xx_reg_seq terratec_htc_stick_init
[] = {
598 {EM2820_R08_GPIO_CTRL
, 0xff, 0xff, 10},
599 {EM2874_R80_GPIO_P0_CTRL
, 0xf6, 0xff, 100},
600 {EM2874_R80_GPIO_P0_CTRL
, 0xe6, 0xff, 50},
601 {EM2874_R80_GPIO_P0_CTRL
, 0xf6, 0xff, 100},
604 struct em28xx_reg_seq terratec_htc_stick_end
[] = {
605 {EM2874_R80_GPIO_P0_CTRL
, 0xb6, 0xff, 100},
606 {EM2874_R80_GPIO_P0_CTRL
, 0xf6, 0xff, 50},
611 * Init the analog decoder (not yet supported), but
612 * it's probably still a good idea.
618 {{ 0x06, 0x02, 0x00, 0x31 }, 4},
620 {{ 0x01, 0x02, 0x00, 0xc6 }, 4},
622 {{ 0x01, 0x00, 0xff, 0xaf }, 4},
625 em28xx_gpio_set(dev
, terratec_htc_stick_init
);
627 em28xx_write_reg(dev
, EM28XX_R06_I2C_CLK
, 0x40);
628 usleep_range(10000, 11000);
629 em28xx_write_reg(dev
, EM28XX_R06_I2C_CLK
, 0x44);
630 usleep_range(10000, 11000);
632 dev
->i2c_client
[dev
->def_i2c_bus
].addr
= 0x82 >> 1;
634 for (i
= 0; i
< ARRAY_SIZE(regs
); i
++)
635 i2c_master_send(&dev
->i2c_client
[dev
->def_i2c_bus
],
636 regs
[i
].r
, regs
[i
].len
);
638 em28xx_gpio_set(dev
, terratec_htc_stick_end
);
641 static void terratec_htc_usb_xs_init(struct em28xx
*dev
)
645 struct em28xx_reg_seq terratec_htc_usb_xs_init
[] = {
646 {EM2820_R08_GPIO_CTRL
, 0xff, 0xff, 10},
647 {EM2874_R80_GPIO_P0_CTRL
, 0xb2, 0xff, 100},
648 {EM2874_R80_GPIO_P0_CTRL
, 0xb2, 0xff, 50},
649 {EM2874_R80_GPIO_P0_CTRL
, 0xb6, 0xff, 100},
652 struct em28xx_reg_seq terratec_htc_usb_xs_end
[] = {
653 {EM2874_R80_GPIO_P0_CTRL
, 0xa6, 0xff, 100},
654 {EM2874_R80_GPIO_P0_CTRL
, 0xa6, 0xff, 50},
655 {EM2874_R80_GPIO_P0_CTRL
, 0xe6, 0xff, 100},
660 * Init the analog decoder (not yet supported), but
661 * it's probably still a good idea.
667 {{ 0x06, 0x02, 0x00, 0x31 }, 4},
669 {{ 0x01, 0x02, 0x00, 0xc6 }, 4},
671 {{ 0x01, 0x00, 0xff, 0xaf }, 4},
672 {{ 0x01, 0x00, 0x03, 0xa0 }, 4},
674 {{ 0x01, 0x00, 0x73, 0xaf }, 4},
677 {{ 0x00, 0x04, 0x00, 0x0a }, 4},
679 {{ 0x04, 0x14, 0x00, 0x00 }, 4},
682 em28xx_write_reg(dev
, EM28XX_R06_I2C_CLK
, 0x40);
684 em28xx_gpio_set(dev
, terratec_htc_usb_xs_init
);
686 em28xx_write_reg(dev
, EM28XX_R06_I2C_CLK
, 0x40);
687 usleep_range(10000, 11000);
688 em28xx_write_reg(dev
, EM28XX_R06_I2C_CLK
, 0x44);
689 usleep_range(10000, 11000);
691 dev
->i2c_client
[dev
->def_i2c_bus
].addr
= 0x82 >> 1;
693 for (i
= 0; i
< ARRAY_SIZE(regs
); i
++)
694 i2c_master_send(&dev
->i2c_client
[dev
->def_i2c_bus
],
695 regs
[i
].r
, regs
[i
].len
);
697 em28xx_gpio_set(dev
, terratec_htc_usb_xs_end
);
700 static void pctv_520e_init(struct em28xx
*dev
)
703 * Init AVF4910B analog decoder. Looks like I2C traffic to
704 * digital demodulator and tuner are routed via AVF4910B.
711 {{ 0x06, 0x02, 0x00, 0x31 }, 4},
713 {{ 0x01, 0x02, 0x00, 0xc6 }, 4},
715 {{ 0x01, 0x00, 0xff, 0xaf }, 4},
716 {{ 0x01, 0x00, 0x03, 0xa0 }, 4},
718 {{ 0x01, 0x00, 0x73, 0xaf }, 4},
721 dev
->i2c_client
[dev
->def_i2c_bus
].addr
= 0x82 >> 1; /* 0x41 */
723 for (i
= 0; i
< ARRAY_SIZE(regs
); i
++)
724 i2c_master_send(&dev
->i2c_client
[dev
->def_i2c_bus
],
725 regs
[i
].r
, regs
[i
].len
);
728 static int em28xx_pctv_290e_set_lna(struct dvb_frontend
*fe
)
730 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
731 struct em28xx_i2c_bus
*i2c_bus
= fe
->dvb
->priv
;
732 struct em28xx
*dev
= i2c_bus
->dev
;
733 #ifdef CONFIG_GPIOLIB
734 struct em28xx_dvb
*dvb
= dev
->dvb
;
739 flags
= GPIOF_OUT_INIT_HIGH
; /* enable LNA */
741 flags
= GPIOF_OUT_INIT_LOW
; /* disable LNA */
743 ret
= gpio_request_one(dvb
->lna_gpio
, flags
, NULL
);
745 dev_err(&dev
->intf
->dev
, "gpio request failed %d\n", ret
);
747 gpio_free(dvb
->lna_gpio
);
751 dev_warn(&dev
->intf
->dev
, "%s: LNA control is disabled (lna=%u)\n",
752 KBUILD_MODNAME
, c
->lna
);
757 static int em28xx_pctv_292e_set_lna(struct dvb_frontend
*fe
)
759 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
760 struct em28xx_i2c_bus
*i2c_bus
= fe
->dvb
->priv
;
761 struct em28xx
*dev
= i2c_bus
->dev
;
769 return em28xx_write_reg_bits(dev
, EM2874_R80_GPIO_P0_CTRL
, lna
, 0x01);
772 static int em28xx_mt352_terratec_xs_init(struct dvb_frontend
*fe
)
774 /* Values extracted from a USB trace of the Terratec Windows driver */
775 static u8 clock_config
[] = { CLOCK_CTL
, 0x38, 0x2c };
776 static u8 reset
[] = { RESET
, 0x80 };
777 static u8 adc_ctl_1_cfg
[] = { ADC_CTL_1
, 0x40 };
778 static u8 agc_cfg
[] = { AGC_TARGET
, 0x28, 0xa0 };
779 static u8 input_freq_cfg
[] = { INPUT_FREQ_1
, 0x31, 0xb8 };
780 static u8 rs_err_cfg
[] = { RS_ERR_PER_1
, 0x00, 0x4d };
781 static u8 capt_range_cfg
[] = { CAPT_RANGE
, 0x32 };
782 static u8 trl_nom_cfg
[] = { TRL_NOMINAL_RATE_1
, 0x64, 0x00 };
783 static u8 tps_given_cfg
[] = { TPS_GIVEN_1
, 0x40, 0x80, 0x50 };
784 static u8 tuner_go
[] = { TUNER_GO
, 0x01};
786 mt352_write(fe
, clock_config
, sizeof(clock_config
));
787 usleep_range(200, 250);
788 mt352_write(fe
, reset
, sizeof(reset
));
789 mt352_write(fe
, adc_ctl_1_cfg
, sizeof(adc_ctl_1_cfg
));
790 mt352_write(fe
, agc_cfg
, sizeof(agc_cfg
));
791 mt352_write(fe
, input_freq_cfg
, sizeof(input_freq_cfg
));
792 mt352_write(fe
, rs_err_cfg
, sizeof(rs_err_cfg
));
793 mt352_write(fe
, capt_range_cfg
, sizeof(capt_range_cfg
));
794 mt352_write(fe
, trl_nom_cfg
, sizeof(trl_nom_cfg
));
795 mt352_write(fe
, tps_given_cfg
, sizeof(tps_given_cfg
));
796 mt352_write(fe
, tuner_go
, sizeof(tuner_go
));
800 static void px_bcud_init(struct em28xx
*dev
)
821 static struct em28xx_reg_seq gpio
[] = {
822 {EM28XX_R06_I2C_CLK
, 0x40, 0xff, 300},
823 {EM2874_R80_GPIO_P0_CTRL
, 0xfd, 0xff, 60},
824 {EM28XX_R15_RGAIN
, 0x20, 0xff, 0},
825 {EM28XX_R16_GGAIN
, 0x20, 0xff, 0},
826 {EM28XX_R17_BGAIN
, 0x20, 0xff, 0},
827 {EM28XX_R18_ROFFSET
, 0x00, 0xff, 0},
828 {EM28XX_R19_GOFFSET
, 0x00, 0xff, 0},
829 {EM28XX_R1A_BOFFSET
, 0x00, 0xff, 0},
830 {EM28XX_R23_UOFFSET
, 0x00, 0xff, 0},
831 {EM28XX_R24_VOFFSET
, 0x00, 0xff, 0},
832 {EM28XX_R26_COMPR
, 0x00, 0xff, 0},
833 {0x13, 0x08, 0xff, 0},
834 {EM28XX_R12_VINENABLE
, 0x27, 0xff, 0},
835 {EM28XX_R0C_USBSUSP
, 0x10, 0xff, 0},
836 {EM28XX_R27_OUTFMT
, 0x00, 0xff, 0},
837 {EM28XX_R10_VINMODE
, 0x00, 0xff, 0},
838 {EM28XX_R11_VINCTRL
, 0x11, 0xff, 0},
839 {EM2874_R50_IR_CONFIG
, 0x01, 0xff, 0},
840 {EM2874_R5F_TS_ENABLE
, 0x80, 0xff, 0},
841 {EM28XX_R06_I2C_CLK
, 0x46, 0xff, 0},
843 em28xx_write_reg(dev
, EM28XX_R06_I2C_CLK
, 0x46);
844 /* sleeping ISDB-T */
845 dev
->dvb
->i2c_client_demod
->addr
= 0x14;
846 for (i
= 0; i
< ARRAY_SIZE(regs1
); i
++)
847 i2c_master_send(dev
->dvb
->i2c_client_demod
,
848 regs1
[i
].r
, regs1
[i
].len
);
849 /* sleeping ISDB-S */
850 dev
->dvb
->i2c_client_demod
->addr
= 0x15;
851 for (i
= 0; i
< ARRAY_SIZE(regs2
); i
++)
852 i2c_master_send(dev
->dvb
->i2c_client_demod
, regs2
[i
].r
,
854 for (i
= 0; i
< ARRAY_SIZE(gpio
); i
++) {
855 em28xx_write_reg_bits(dev
, gpio
[i
].reg
, gpio
[i
].val
,
857 if (gpio
[i
].sleep
> 0)
858 msleep(gpio
[i
].sleep
);
862 static struct mt352_config terratec_xs_mt352_cfg
= {
863 .demod_address
= (0x1e >> 1),
866 .demod_init
= em28xx_mt352_terratec_xs_init
,
869 static struct tda10023_config em28xx_tda10023_config
= {
870 .demod_address
= 0x0c,
874 static struct cxd2820r_config em28xx_cxd2820r_config
= {
875 .i2c_address
= (0xd8 >> 1),
876 .ts_mode
= CXD2820R_TS_SERIAL
,
879 static struct tda18271_config em28xx_cxd2820r_tda18271_config
= {
880 .output_opt
= TDA18271_OUTPUT_LT_OFF
,
881 .gate
= TDA18271_GATE_DIGITAL
,
884 static struct zl10353_config em28xx_zl10353_no_i2c_gate_dev
= {
885 .demod_address
= (0x1e >> 1),
886 .disable_i2c_gate_ctrl
= 1,
891 static struct mt2060_config em28xx_mt2060_config
= {
895 static struct qt1010_config em28xx_qt1010_config
= {
899 static const struct mb86a20s_config c3tech_duo_mb86a20s_config
= {
900 .demod_address
= 0x10,
904 static struct tda18271_std_map mb86a20s_tda18271_config
= {
905 .dvbt_6
= { .if_freq
= 4000, .agc_mode
= 3, .std
= 4,
906 .if_lvl
= 1, .rfagc_top
= 0x37, },
909 static struct tda18271_config c3tech_duo_tda18271_config
= {
910 .std_map
= &mb86a20s_tda18271_config
,
911 .gate
= TDA18271_GATE_DIGITAL
,
912 .small_i2c
= TDA18271_03_BYTE_CHUNK_INIT
,
915 static struct tda18271_std_map drx_j_std_map
= {
916 .atsc_6
= { .if_freq
= 5000, .agc_mode
= 3, .std
= 0, .if_lvl
= 1,
917 .rfagc_top
= 0x37, },
918 .qam_6
= { .if_freq
= 5380, .agc_mode
= 3, .std
= 3, .if_lvl
= 1,
919 .rfagc_top
= 0x37, },
922 static struct tda18271_config pinnacle_80e_dvb_config
= {
923 .std_map
= &drx_j_std_map
,
924 .gate
= TDA18271_GATE_DIGITAL
,
925 .role
= TDA18271_MASTER
,
928 static struct lgdt3306a_config hauppauge_01595_lgdt3306a_config
= {
931 .spectral_inversion
= 0,
933 .mpeg_mode
= LGDT3306A_MPEG_SERIAL
,
934 .tpclk_edge
= LGDT3306A_TPCLK_RISING_EDGE
,
935 .tpvalid_polarity
= LGDT3306A_TP_VALID_HIGH
,
939 /* ------------------------------------------------------------------ */
941 static noinline_for_stack
int em28xx_attach_xc3028(u8 addr
, struct em28xx
*dev
)
943 struct dvb_frontend
*fe
;
944 struct xc2028_config cfg
;
945 struct xc2028_ctrl ctl
;
947 memset(&cfg
, 0, sizeof(cfg
));
948 cfg
.i2c_adap
= &dev
->i2c_adap
[dev
->def_i2c_bus
];
951 memset(&ctl
, 0, sizeof(ctl
));
952 em28xx_setup_xc3028(dev
, &ctl
);
955 if (!dev
->dvb
->fe
[0]) {
956 dev_err(&dev
->intf
->dev
,
957 "dvb frontend not attached. Can't attach xc3028\n");
961 fe
= dvb_attach(xc2028_attach
, dev
->dvb
->fe
[0], &cfg
);
963 dev_err(&dev
->intf
->dev
, "xc3028 attach failed\n");
964 dvb_frontend_detach(dev
->dvb
->fe
[0]);
965 dev
->dvb
->fe
[0] = NULL
;
969 dev_info(&dev
->intf
->dev
, "xc3028 attached\n");
974 /* ------------------------------------------------------------------ */
976 static int em28xx_register_dvb(struct em28xx_dvb
*dvb
, struct module
*module
,
977 struct em28xx
*dev
, struct device
*device
)
980 bool create_rf_connector
= false;
982 mutex_init(&dvb
->lock
);
984 /* register adapter */
985 result
= dvb_register_adapter(&dvb
->adapter
,
986 dev_name(&dev
->intf
->dev
), module
,
989 dev_warn(&dev
->intf
->dev
,
990 "dvb_register_adapter failed (errno = %d)\n",
994 #ifdef CONFIG_MEDIA_CONTROLLER_DVB
995 dvb
->adapter
.mdev
= dev
->media_dev
;
998 /* Ensure all frontends negotiate bus access */
999 dvb
->fe
[0]->ops
.ts_bus_ctrl
= em28xx_dvb_bus_ctrl
;
1001 dvb
->fe
[1]->ops
.ts_bus_ctrl
= em28xx_dvb_bus_ctrl
;
1003 dvb
->adapter
.priv
= &dev
->i2c_bus
[dev
->def_i2c_bus
];
1005 /* register frontend */
1006 result
= dvb_register_frontend(&dvb
->adapter
, dvb
->fe
[0]);
1008 dev_warn(&dev
->intf
->dev
,
1009 "dvb_register_frontend failed (errno = %d)\n",
1011 goto fail_frontend0
;
1014 /* register 2nd frontend */
1016 result
= dvb_register_frontend(&dvb
->adapter
, dvb
->fe
[1]);
1018 dev_warn(&dev
->intf
->dev
,
1019 "2nd dvb_register_frontend failed (errno = %d)\n",
1021 goto fail_frontend1
;
1025 /* register demux stuff */
1026 dvb
->demux
.dmx
.capabilities
=
1027 DMX_TS_FILTERING
| DMX_SECTION_FILTERING
|
1028 DMX_MEMORY_BASED_FILTERING
;
1029 dvb
->demux
.priv
= dvb
;
1030 dvb
->demux
.filternum
= 256;
1031 dvb
->demux
.feednum
= 256;
1032 dvb
->demux
.start_feed
= em28xx_start_feed
;
1033 dvb
->demux
.stop_feed
= em28xx_stop_feed
;
1035 result
= dvb_dmx_init(&dvb
->demux
);
1037 dev_warn(&dev
->intf
->dev
,
1038 "dvb_dmx_init failed (errno = %d)\n",
1043 dvb
->dmxdev
.filternum
= 256;
1044 dvb
->dmxdev
.demux
= &dvb
->demux
.dmx
;
1045 dvb
->dmxdev
.capabilities
= 0;
1046 result
= dvb_dmxdev_init(&dvb
->dmxdev
, &dvb
->adapter
);
1048 dev_warn(&dev
->intf
->dev
,
1049 "dvb_dmxdev_init failed (errno = %d)\n",
1054 dvb
->fe_hw
.source
= DMX_FRONTEND_0
;
1055 result
= dvb
->demux
.dmx
.add_frontend(&dvb
->demux
.dmx
, &dvb
->fe_hw
);
1057 dev_warn(&dev
->intf
->dev
,
1058 "add_frontend failed (DMX_FRONTEND_0, errno = %d)\n",
1063 dvb
->fe_mem
.source
= DMX_MEMORY_FE
;
1064 result
= dvb
->demux
.dmx
.add_frontend(&dvb
->demux
.dmx
, &dvb
->fe_mem
);
1066 dev_warn(&dev
->intf
->dev
,
1067 "add_frontend failed (DMX_MEMORY_FE, errno = %d)\n",
1072 result
= dvb
->demux
.dmx
.connect_frontend(&dvb
->demux
.dmx
, &dvb
->fe_hw
);
1074 dev_warn(&dev
->intf
->dev
,
1075 "connect_frontend failed (errno = %d)\n",
1080 /* register network adapter */
1081 dvb_net_init(&dvb
->adapter
, &dvb
->net
, &dvb
->demux
.dmx
);
1083 /* If the analog part won't create RF connectors, DVB will do it */
1084 if (!dev
->has_video
|| dev
->tuner_type
== TUNER_ABSENT
)
1085 create_rf_connector
= true;
1087 result
= dvb_create_media_graph(&dvb
->adapter
, create_rf_connector
);
1089 goto fail_create_graph
;
1094 dvb_net_release(&dvb
->net
);
1096 dvb
->demux
.dmx
.remove_frontend(&dvb
->demux
.dmx
, &dvb
->fe_mem
);
1098 dvb
->demux
.dmx
.remove_frontend(&dvb
->demux
.dmx
, &dvb
->fe_hw
);
1100 dvb_dmxdev_release(&dvb
->dmxdev
);
1102 dvb_dmx_release(&dvb
->demux
);
1105 dvb_unregister_frontend(dvb
->fe
[1]);
1106 dvb_unregister_frontend(dvb
->fe
[0]);
1109 dvb_frontend_detach(dvb
->fe
[1]);
1111 dvb_frontend_detach(dvb
->fe
[0]);
1112 dvb_unregister_adapter(&dvb
->adapter
);
1117 static void em28xx_unregister_dvb(struct em28xx_dvb
*dvb
)
1119 dvb_net_release(&dvb
->net
);
1120 dvb
->demux
.dmx
.remove_frontend(&dvb
->demux
.dmx
, &dvb
->fe_mem
);
1121 dvb
->demux
.dmx
.remove_frontend(&dvb
->demux
.dmx
, &dvb
->fe_hw
);
1122 dvb_dmxdev_release(&dvb
->dmxdev
);
1123 dvb_dmx_release(&dvb
->demux
);
1125 dvb_unregister_frontend(dvb
->fe
[1]);
1126 dvb_unregister_frontend(dvb
->fe
[0]);
1127 if (dvb
->fe
[1] && !dvb
->dont_attach_fe1
)
1128 dvb_frontend_detach(dvb
->fe
[1]);
1129 dvb_frontend_detach(dvb
->fe
[0]);
1130 dvb_unregister_adapter(&dvb
->adapter
);
1133 static int em28174_dvb_init_pctv_460e(struct em28xx
*dev
)
1135 struct em28xx_dvb
*dvb
= dev
->dvb
;
1136 struct tda10071_platform_data tda10071_pdata
= {};
1137 struct a8293_platform_data a8293_pdata
= {};
1139 /* attach demod + tuner combo */
1140 tda10071_pdata
.clk
= 40444000; /* 40.444 MHz */
1141 tda10071_pdata
.i2c_wr_max
= 64;
1142 tda10071_pdata
.ts_mode
= TDA10071_TS_SERIAL
;
1143 tda10071_pdata
.pll_multiplier
= 20;
1144 tda10071_pdata
.tuner_i2c_addr
= 0x14;
1146 dvb
->i2c_client_demod
= dvb_module_probe("tda10071", "tda10071_cx24118",
1147 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1148 0x55, &tda10071_pdata
);
1149 if (!dvb
->i2c_client_demod
)
1152 dvb
->fe
[0] = tda10071_pdata
.get_dvb_frontend(dvb
->i2c_client_demod
);
1155 a8293_pdata
.dvb_frontend
= dvb
->fe
[0];
1157 dvb
->i2c_client_sec
= dvb_module_probe("a8293", NULL
,
1158 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1159 0x08, &a8293_pdata
);
1160 if (!dvb
->i2c_client_sec
) {
1161 dvb_module_release(dvb
->i2c_client_demod
);
1168 static int em28178_dvb_init_pctv_461e(struct em28xx
*dev
)
1170 struct em28xx_dvb
*dvb
= dev
->dvb
;
1171 struct i2c_adapter
*i2c_adapter
;
1172 struct m88ds3103_platform_data m88ds3103_pdata
= {};
1173 struct ts2020_config ts2020_config
= {};
1174 struct a8293_platform_data a8293_pdata
= {};
1177 m88ds3103_pdata
.clk
= 27000000;
1178 m88ds3103_pdata
.i2c_wr_max
= 33;
1179 m88ds3103_pdata
.ts_mode
= M88DS3103_TS_PARALLEL
;
1180 m88ds3103_pdata
.ts_clk
= 16000;
1181 m88ds3103_pdata
.ts_clk_pol
= 1;
1182 m88ds3103_pdata
.agc
= 0x99;
1184 dvb
->i2c_client_demod
= dvb_module_probe("m88ds3103", NULL
,
1185 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1186 0x68, &m88ds3103_pdata
);
1187 if (!dvb
->i2c_client_demod
)
1190 dvb
->fe
[0] = m88ds3103_pdata
.get_dvb_frontend(dvb
->i2c_client_demod
);
1191 i2c_adapter
= m88ds3103_pdata
.get_i2c_adapter(dvb
->i2c_client_demod
);
1194 ts2020_config
.fe
= dvb
->fe
[0];
1196 dvb
->i2c_client_tuner
= dvb_module_probe("ts2020", "ts2022",
1198 0x60, &ts2020_config
);
1199 if (!dvb
->i2c_client_tuner
) {
1200 dvb_module_release(dvb
->i2c_client_demod
);
1204 /* delegate signal strength measurement to tuner */
1205 dvb
->fe
[0]->ops
.read_signal_strength
=
1206 dvb
->fe
[0]->ops
.tuner_ops
.get_rf_strength
;
1209 a8293_pdata
.dvb_frontend
= dvb
->fe
[0];
1210 dvb
->i2c_client_sec
= dvb_module_probe("a8293", NULL
,
1211 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1212 0x08, &a8293_pdata
);
1213 if (!dvb
->i2c_client_sec
) {
1214 dvb_module_release(dvb
->i2c_client_tuner
);
1215 dvb_module_release(dvb
->i2c_client_demod
);
1222 static int em28178_dvb_init_pctv_292e(struct em28xx
*dev
)
1224 struct em28xx_dvb
*dvb
= dev
->dvb
;
1225 struct i2c_adapter
*adapter
;
1226 struct si2168_config si2168_config
= {};
1227 struct si2157_config si2157_config
= {};
1230 si2168_config
.i2c_adapter
= &adapter
;
1231 si2168_config
.fe
= &dvb
->fe
[0];
1232 si2168_config
.ts_mode
= SI2168_TS_PARALLEL
;
1233 si2168_config
.spectral_inversion
= true;
1235 dvb
->i2c_client_demod
= dvb_module_probe("si2168", NULL
,
1236 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1237 0x64, &si2168_config
);
1238 if (!dvb
->i2c_client_demod
)
1242 si2157_config
.fe
= dvb
->fe
[0];
1243 si2157_config
.if_port
= 1;
1244 #ifdef CONFIG_MEDIA_CONTROLLER_DVB
1245 si2157_config
.mdev
= dev
->media_dev
;
1247 dvb
->i2c_client_tuner
= dvb_module_probe("si2157", NULL
,
1249 0x60, &si2157_config
);
1250 if (!dvb
->i2c_client_tuner
) {
1251 dvb_module_release(dvb
->i2c_client_demod
);
1254 dvb
->fe
[0]->ops
.set_lna
= em28xx_pctv_292e_set_lna
;
1259 static int em28178_dvb_init_terratec_t2_stick_hd(struct em28xx
*dev
)
1261 struct em28xx_dvb
*dvb
= dev
->dvb
;
1262 struct i2c_adapter
*adapter
;
1263 struct si2168_config si2168_config
= {};
1264 struct si2157_config si2157_config
= {};
1267 si2168_config
.i2c_adapter
= &adapter
;
1268 si2168_config
.fe
= &dvb
->fe
[0];
1269 si2168_config
.ts_mode
= SI2168_TS_PARALLEL
;
1271 dvb
->i2c_client_demod
= dvb_module_probe("si2168", NULL
,
1272 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1273 0x64, &si2168_config
);
1274 if (!dvb
->i2c_client_demod
)
1278 memset(&si2157_config
, 0, sizeof(si2157_config
));
1279 si2157_config
.fe
= dvb
->fe
[0];
1280 si2157_config
.if_port
= 0;
1281 #ifdef CONFIG_MEDIA_CONTROLLER_DVB
1282 si2157_config
.mdev
= dev
->media_dev
;
1284 dvb
->i2c_client_tuner
= dvb_module_probe("si2157", "si2146",
1286 0x60, &si2157_config
);
1287 if (!dvb
->i2c_client_tuner
) {
1288 dvb_module_release(dvb
->i2c_client_demod
);
1295 static int em28178_dvb_init_plex_px_bcud(struct em28xx
*dev
)
1297 struct em28xx_dvb
*dvb
= dev
->dvb
;
1298 struct tc90522_config tc90522_config
= {};
1299 struct qm1d1c0042_config qm1d1c0042_config
= {};
1302 dvb
->i2c_client_demod
= dvb_module_probe("tc90522", "tc90522sat",
1303 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1304 0x15, &tc90522_config
);
1305 if (!dvb
->i2c_client_demod
)
1309 qm1d1c0042_config
.fe
= tc90522_config
.fe
;
1310 qm1d1c0042_config
.lpf
= 1;
1312 dvb
->i2c_client_tuner
= dvb_module_probe("qm1d1c0042", NULL
,
1313 tc90522_config
.tuner_i2c
,
1314 0x61, &qm1d1c0042_config
);
1315 if (!dvb
->i2c_client_tuner
) {
1316 dvb_module_release(dvb
->i2c_client_demod
);
1320 dvb
->fe
[0] = tc90522_config
.fe
;
1326 static int em28174_dvb_init_hauppauge_wintv_dualhd_dvb(struct em28xx
*dev
)
1328 struct em28xx_dvb
*dvb
= dev
->dvb
;
1329 struct i2c_adapter
*adapter
;
1330 struct si2168_config si2168_config
= {};
1331 struct si2157_config si2157_config
= {};
1335 si2168_config
.i2c_adapter
= &adapter
;
1336 si2168_config
.fe
= &dvb
->fe
[0];
1337 si2168_config
.ts_mode
= SI2168_TS_SERIAL
;
1338 si2168_config
.spectral_inversion
= true;
1339 addr
= (dev
->ts
== PRIMARY_TS
) ? 0x64 : 0x67;
1341 dvb
->i2c_client_demod
= dvb_module_probe("si2168", NULL
,
1342 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1343 addr
, &si2168_config
);
1344 if (!dvb
->i2c_client_demod
)
1348 memset(&si2157_config
, 0, sizeof(si2157_config
));
1349 si2157_config
.fe
= dvb
->fe
[0];
1350 si2157_config
.if_port
= 1;
1351 #ifdef CONFIG_MEDIA_CONTROLLER_DVB
1352 si2157_config
.mdev
= dev
->media_dev
;
1354 addr
= (dev
->ts
== PRIMARY_TS
) ? 0x60 : 0x63;
1356 dvb
->i2c_client_tuner
= dvb_module_probe("si2157", NULL
,
1358 addr
, &si2157_config
);
1359 if (!dvb
->i2c_client_tuner
) {
1360 dvb_module_release(dvb
->i2c_client_demod
);
1367 static int em28174_dvb_init_hauppauge_wintv_dualhd_01595(struct em28xx
*dev
)
1369 struct em28xx_dvb
*dvb
= dev
->dvb
;
1370 struct i2c_adapter
*adapter
;
1371 struct lgdt3306a_config lgdt3306a_config
= {};
1372 struct si2157_config si2157_config
= {};
1376 lgdt3306a_config
= hauppauge_01595_lgdt3306a_config
;
1377 lgdt3306a_config
.fe
= &dvb
->fe
[0];
1378 lgdt3306a_config
.i2c_adapter
= &adapter
;
1379 addr
= (dev
->ts
== PRIMARY_TS
) ? 0x59 : 0x0e;
1381 dvb
->i2c_client_demod
= dvb_module_probe("lgdt3306a", NULL
,
1382 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1383 addr
, &lgdt3306a_config
);
1384 if (!dvb
->i2c_client_demod
)
1388 si2157_config
.fe
= dvb
->fe
[0];
1389 si2157_config
.if_port
= 1;
1390 si2157_config
.inversion
= 1;
1391 #ifdef CONFIG_MEDIA_CONTROLLER_DVB
1392 si2157_config
.mdev
= dev
->media_dev
;
1394 addr
= (dev
->ts
== PRIMARY_TS
) ? 0x60 : 0x62;
1396 dvb
->i2c_client_tuner
= dvb_module_probe("si2157", NULL
,
1398 addr
, &si2157_config
);
1399 if (!dvb
->i2c_client_tuner
) {
1400 dvb_module_release(dvb
->i2c_client_demod
);
1407 static int em28xx_dvb_init(struct em28xx
*dev
)
1409 int result
= 0, dvb_alt
= 0;
1410 struct em28xx_dvb
*dvb
;
1411 struct usb_device
*udev
;
1413 if (dev
->is_audio_only
) {
1414 /* Shouldn't initialize IR for this interface */
1418 if (!dev
->board
.has_dvb
) {
1419 /* This device does not support the extension */
1423 dev_info(&dev
->intf
->dev
, "Binding DVB extension\n");
1425 dvb
= kzalloc(sizeof(*dvb
), GFP_KERNEL
);
1433 /* pre-allocate DVB usb transfer buffers */
1434 if (dev
->dvb_xfer_bulk
) {
1435 result
= em28xx_alloc_urbs(dev
, EM28XX_DIGITAL_MODE
,
1437 EM28XX_DVB_NUM_BUFS
,
1439 EM28XX_DVB_BULK_PACKET_MULTIPLIER
);
1441 result
= em28xx_alloc_urbs(dev
, EM28XX_DIGITAL_MODE
,
1443 EM28XX_DVB_NUM_BUFS
,
1444 dev
->dvb_max_pkt_size_isoc
,
1445 EM28XX_DVB_NUM_ISOC_PACKETS
);
1448 dev_err(&dev
->intf
->dev
,
1449 "failed to pre-allocate USB transfer buffers for DVB.\n");
1455 mutex_lock(&dev
->lock
);
1456 em28xx_set_mode(dev
, EM28XX_DIGITAL_MODE
);
1458 switch (dev
->model
) {
1459 case EM2874_BOARD_LEADERSHIP_ISDBT
:
1460 dvb
->fe
[0] = dvb_attach(s921_attach
,
1462 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1470 case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850
:
1471 case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950
:
1472 case EM2880_BOARD_PINNACLE_PCTV_HD_PRO
:
1473 case EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600
:
1474 dvb
->fe
[0] = dvb_attach(lgdt330x_attach
,
1475 &em2880_lgdt3303_dev
,
1477 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1478 if (em28xx_attach_xc3028(0x61, dev
) < 0) {
1483 case EM2880_BOARD_KWORLD_DVB_310U
:
1484 dvb
->fe
[0] = dvb_attach(zl10353_attach
,
1485 &em28xx_zl10353_with_xc3028
,
1486 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1487 if (em28xx_attach_xc3028(0x61, dev
) < 0) {
1492 case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900
:
1493 case EM2882_BOARD_TERRATEC_HYBRID_XS
:
1494 case EM2880_BOARD_EMPIRE_DUAL_TV
:
1495 case EM2882_BOARD_ZOLID_HYBRID_TV_STICK
:
1496 dvb
->fe
[0] = dvb_attach(zl10353_attach
,
1497 &em28xx_zl10353_xc3028_no_i2c_gate
,
1498 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1499 if (em28xx_attach_xc3028(0x61, dev
) < 0) {
1504 case EM2880_BOARD_TERRATEC_HYBRID_XS
:
1505 case EM2880_BOARD_TERRATEC_HYBRID_XS_FR
:
1506 case EM2881_BOARD_PINNACLE_HYBRID_PRO
:
1507 case EM2882_BOARD_DIKOM_DK300
:
1508 case EM2882_BOARD_KWORLD_VS_DVBT
:
1510 * Those boards could have either a zl10353 or a mt352.
1511 * If the chip id isn't for zl10353, try mt352.
1513 dvb
->fe
[0] = dvb_attach(zl10353_attach
,
1514 &em28xx_zl10353_xc3028_no_i2c_gate
,
1515 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1517 dvb
->fe
[0] = dvb_attach(mt352_attach
,
1518 &terratec_xs_mt352_cfg
,
1519 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1521 if (em28xx_attach_xc3028(0x61, dev
) < 0) {
1526 case EM2870_BOARD_TERRATEC_XS_MT2060
:
1527 dvb
->fe
[0] = dvb_attach(zl10353_attach
,
1528 &em28xx_zl10353_no_i2c_gate_dev
,
1529 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1531 dvb_attach(mt2060_attach
, dvb
->fe
[0],
1532 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1533 &em28xx_mt2060_config
, 1220);
1536 case EM2870_BOARD_KWORLD_355U
:
1537 dvb
->fe
[0] = dvb_attach(zl10353_attach
,
1538 &em28xx_zl10353_no_i2c_gate_dev
,
1539 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1541 dvb_attach(qt1010_attach
, dvb
->fe
[0],
1542 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1543 &em28xx_qt1010_config
);
1545 case EM2883_BOARD_KWORLD_HYBRID_330U
:
1546 case EM2882_BOARD_EVGA_INDTUBE
:
1547 dvb
->fe
[0] = dvb_attach(s5h1409_attach
,
1548 &em28xx_s5h1409_with_xc3028
,
1549 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1550 if (em28xx_attach_xc3028(0x61, dev
) < 0) {
1555 case EM2882_BOARD_KWORLD_ATSC_315U
:
1556 dvb
->fe
[0] = dvb_attach(lgdt330x_attach
,
1557 &em2880_lgdt3303_dev
,
1559 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1561 if (!dvb_attach(simple_tuner_attach
, dvb
->fe
[0],
1562 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1563 0x61, TUNER_THOMSON_DTT761X
)) {
1569 case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2
:
1570 case EM2882_BOARD_PINNACLE_HYBRID_PRO_330E
:
1571 dvb
->fe
[0] = dvb_attach(drxd_attach
, &em28xx_drxd
, NULL
,
1572 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1574 if (em28xx_attach_xc3028(0x61, dev
) < 0) {
1579 case EM2870_BOARD_REDDO_DVB_C_USB_BOX
:
1580 /* Philips CU1216L NIM (Philips TDA10023 + Infineon TUA6034) */
1581 dvb
->fe
[0] = dvb_attach(tda10023_attach
,
1582 &em28xx_tda10023_config
,
1583 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1586 if (!dvb_attach(simple_tuner_attach
, dvb
->fe
[0],
1587 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1588 0x60, TUNER_PHILIPS_CU1216L
)) {
1594 case EM2870_BOARD_KWORLD_A340
:
1595 dvb
->fe
[0] = dvb_attach(lgdt3305_attach
,
1596 &em2870_lgdt3304_dev
,
1597 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1602 if (!dvb_attach(tda18271_attach
, dvb
->fe
[0], 0x60,
1603 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1604 &kworld_a340_config
)) {
1605 dvb_frontend_detach(dvb
->fe
[0]);
1610 case EM28174_BOARD_PCTV_290E
:
1611 /* set default GPIO0 for LNA, used if GPIOLIB is undefined */
1612 dvb
->lna_gpio
= CXD2820R_GPIO_E
| CXD2820R_GPIO_O
|
1614 dvb
->fe
[0] = dvb_attach(cxd2820r_attach
,
1615 &em28xx_cxd2820r_config
,
1616 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1619 /* FE 0 attach tuner */
1620 if (!dvb_attach(tda18271_attach
,
1623 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1624 &em28xx_cxd2820r_tda18271_config
)) {
1625 dvb_frontend_detach(dvb
->fe
[0]);
1630 #ifdef CONFIG_GPIOLIB
1631 /* enable LNA for DVB-T, DVB-T2 and DVB-C */
1632 result
= gpio_request_one(dvb
->lna_gpio
,
1633 GPIOF_OUT_INIT_LOW
, NULL
);
1635 dev_err(&dev
->intf
->dev
,
1636 "gpio request failed %d\n",
1639 gpio_free(dvb
->lna_gpio
);
1641 result
= 0; /* continue even set LNA fails */
1643 dvb
->fe
[0]->ops
.set_lna
= em28xx_pctv_290e_set_lna
;
1647 case EM2884_BOARD_HAUPPAUGE_WINTV_HVR_930C
:
1649 struct xc5000_config cfg
= {};
1651 hauppauge_hvr930c_init(dev
);
1653 dvb
->fe
[0] = dvb_attach(drxk_attach
,
1654 &hauppauge_930c_drxk
,
1655 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1660 /* FIXME: do we need a pll semaphore? */
1661 dvb
->fe
[0]->sec_priv
= dvb
;
1662 sema_init(&dvb
->pll_mutex
, 1);
1663 dvb
->gate_ctrl
= dvb
->fe
[0]->ops
.i2c_gate_ctrl
;
1664 dvb
->fe
[0]->ops
.i2c_gate_ctrl
= drxk_gate_ctrl
;
1667 cfg
.i2c_address
= 0x61;
1670 if (dvb
->fe
[0]->ops
.i2c_gate_ctrl
)
1671 dvb
->fe
[0]->ops
.i2c_gate_ctrl(dvb
->fe
[0], 1);
1672 if (!dvb_attach(xc5000_attach
, dvb
->fe
[0],
1673 &dev
->i2c_adap
[dev
->def_i2c_bus
], &cfg
)) {
1677 if (dvb
->fe
[0]->ops
.i2c_gate_ctrl
)
1678 dvb
->fe
[0]->ops
.i2c_gate_ctrl(dvb
->fe
[0], 0);
1682 case EM2884_BOARD_TERRATEC_H5
:
1683 terratec_h5_init(dev
);
1685 dvb
->fe
[0] = dvb_attach(drxk_attach
, &terratec_h5_drxk
,
1686 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1691 /* FIXME: do we need a pll semaphore? */
1692 dvb
->fe
[0]->sec_priv
= dvb
;
1693 sema_init(&dvb
->pll_mutex
, 1);
1694 dvb
->gate_ctrl
= dvb
->fe
[0]->ops
.i2c_gate_ctrl
;
1695 dvb
->fe
[0]->ops
.i2c_gate_ctrl
= drxk_gate_ctrl
;
1697 /* Attach tda18271 to DVB-C frontend */
1698 if (dvb
->fe
[0]->ops
.i2c_gate_ctrl
)
1699 dvb
->fe
[0]->ops
.i2c_gate_ctrl(dvb
->fe
[0], 1);
1700 if (!dvb_attach(tda18271c2dd_attach
, dvb
->fe
[0],
1701 &dev
->i2c_adap
[dev
->def_i2c_bus
], 0x60)) {
1705 if (dvb
->fe
[0]->ops
.i2c_gate_ctrl
)
1706 dvb
->fe
[0]->ops
.i2c_gate_ctrl(dvb
->fe
[0], 0);
1709 case EM2884_BOARD_C3TECH_DIGITAL_DUO
:
1710 dvb
->fe
[0] = dvb_attach(mb86a20s_attach
,
1711 &c3tech_duo_mb86a20s_config
,
1712 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1714 dvb_attach(tda18271_attach
, dvb
->fe
[0], 0x60,
1715 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1716 &c3tech_duo_tda18271_config
);
1718 case EM28174_BOARD_PCTV_460E
:
1719 result
= em28174_dvb_init_pctv_460e(dev
);
1723 case EM2874_BOARD_DELOCK_61959
:
1724 case EM2874_BOARD_MAXMEDIA_UB425_TC
:
1725 /* attach demodulator */
1726 dvb
->fe
[0] = dvb_attach(drxk_attach
, &maxmedia_ub425_tc_drxk
,
1727 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1730 /* disable I2C-gate */
1731 dvb
->fe
[0]->ops
.i2c_gate_ctrl
= NULL
;
1734 if (!dvb_attach(tda18271_attach
, dvb
->fe
[0], 0x60,
1735 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1736 &em28xx_cxd2820r_tda18271_config
)) {
1737 dvb_frontend_detach(dvb
->fe
[0]);
1743 case EM2884_BOARD_PCTV_510E
:
1744 case EM2884_BOARD_PCTV_520E
:
1745 pctv_520e_init(dev
);
1747 /* attach demodulator */
1748 dvb
->fe
[0] = dvb_attach(drxk_attach
, &pctv_520e_drxk
,
1749 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1753 if (!dvb_attach(tda18271_attach
, dvb
->fe
[0], 0x60,
1754 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1755 &em28xx_cxd2820r_tda18271_config
)) {
1756 dvb_frontend_detach(dvb
->fe
[0]);
1762 case EM2884_BOARD_ELGATO_EYETV_HYBRID_2008
:
1763 case EM2884_BOARD_CINERGY_HTC_STICK
:
1764 case EM2884_BOARD_TERRATEC_H6
:
1765 terratec_htc_stick_init(dev
);
1767 /* attach demodulator */
1768 dvb
->fe
[0] = dvb_attach(drxk_attach
, &terratec_htc_stick_drxk
,
1769 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1775 /* Attach the demodulator. */
1776 if (!dvb_attach(tda18271_attach
, dvb
->fe
[0], 0x60,
1777 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1778 &em28xx_cxd2820r_tda18271_config
)) {
1783 case EM2884_BOARD_TERRATEC_HTC_USB_XS
:
1784 terratec_htc_usb_xs_init(dev
);
1786 /* attach demodulator */
1787 dvb
->fe
[0] = dvb_attach(drxk_attach
, &terratec_htc_stick_drxk
,
1788 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1794 /* Attach the demodulator. */
1795 if (!dvb_attach(tda18271_attach
, dvb
->fe
[0], 0x60,
1796 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1797 &em28xx_cxd2820r_tda18271_config
)) {
1802 case EM2874_BOARD_KWORLD_UB435Q_V2
:
1803 dvb
->fe
[0] = dvb_attach(lgdt3305_attach
,
1804 &em2874_lgdt3305_dev
,
1805 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1811 /* Attach the demodulator. */
1812 if (!dvb_attach(tda18271_attach
, dvb
->fe
[0], 0x60,
1813 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1814 &kworld_ub435q_v2_config
)) {
1819 case EM2874_BOARD_KWORLD_UB435Q_V3
:
1821 struct i2c_adapter
*adapter
= &dev
->i2c_adap
[dev
->def_i2c_bus
];
1823 dvb
->fe
[0] = dvb_attach(lgdt3305_attach
,
1824 &em2874_lgdt3305_nogate_dev
,
1825 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1832 kworld_ub435q_v3_config
.fe
= dvb
->fe
[0];
1834 dvb
->i2c_client_tuner
= dvb_module_probe("tda18212", NULL
,
1836 &kworld_ub435q_v3_config
);
1837 if (!dvb
->i2c_client_tuner
) {
1838 dvb_frontend_detach(dvb
->fe
[0]);
1844 case EM2874_BOARD_PCTV_HD_MINI_80E
:
1845 dvb
->fe
[0] = dvb_attach(drx39xxj_attach
,
1846 &dev
->i2c_adap
[dev
->def_i2c_bus
]);
1848 dvb
->fe
[0] = dvb_attach(tda18271_attach
, dvb
->fe
[0],
1850 &dev
->i2c_adap
[dev
->def_i2c_bus
],
1851 &pinnacle_80e_dvb_config
);
1858 case EM28178_BOARD_PCTV_461E
:
1859 result
= em28178_dvb_init_pctv_461e(dev
);
1863 case EM28178_BOARD_PCTV_292E
:
1864 result
= em28178_dvb_init_pctv_292e(dev
);
1868 case EM28178_BOARD_TERRATEC_T2_STICK_HD
:
1869 result
= em28178_dvb_init_terratec_t2_stick_hd(dev
);
1873 case EM28178_BOARD_PLEX_PX_BCUD
:
1874 result
= em28178_dvb_init_plex_px_bcud(dev
);
1878 case EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_DVB
:
1879 result
= em28174_dvb_init_hauppauge_wintv_dualhd_dvb(dev
);
1883 case EM28174_BOARD_HAUPPAUGE_WINTV_DUALHD_01595
:
1884 result
= em28174_dvb_init_hauppauge_wintv_dualhd_01595(dev
);
1889 dev_err(&dev
->intf
->dev
,
1890 "The frontend of your DVB/ATSC card isn't supported yet\n");
1894 dev_err(&dev
->intf
->dev
, "frontend initialization failed\n");
1898 /* define general-purpose callback pointer */
1899 dvb
->fe
[0]->callback
= em28xx_tuner_callback
;
1901 dvb
->fe
[1]->callback
= em28xx_tuner_callback
;
1903 /* register everything */
1904 result
= em28xx_register_dvb(dvb
, THIS_MODULE
, dev
, &dev
->intf
->dev
);
1909 if (dev
->dvb_xfer_bulk
) {
1912 dvb_alt
= dev
->dvb_alt_isoc
;
1915 udev
= interface_to_usbdev(dev
->intf
);
1916 usb_set_interface(udev
, dev
->ifnum
, dvb_alt
);
1917 dev_info(&dev
->intf
->dev
, "DVB extension successfully initialized\n");
1919 kref_get(&dev
->ref
);
1922 em28xx_set_mode(dev
, EM28XX_SUSPEND
);
1923 mutex_unlock(&dev
->lock
);
1932 static inline void prevent_sleep(struct dvb_frontend_ops
*ops
)
1934 ops
->set_voltage
= NULL
;
1936 ops
->tuner_ops
.sleep
= NULL
;
1939 static int em28xx_dvb_fini(struct em28xx
*dev
)
1941 struct em28xx_dvb
*dvb
;
1943 if (dev
->is_audio_only
) {
1944 /* Shouldn't initialize IR for this interface */
1948 if (!dev
->board
.has_dvb
) {
1949 /* This device does not support the extension */
1956 dev_info(&dev
->intf
->dev
, "Closing DVB extension\n");
1960 em28xx_uninit_usb_xfer(dev
, EM28XX_DIGITAL_MODE
);
1962 if (dev
->disconnected
) {
1964 * We cannot tell the device to sleep
1965 * once it has been unplugged.
1968 prevent_sleep(&dvb
->fe
[0]->ops
);
1969 dvb
->fe
[0]->exit
= DVB_FE_DEVICE_REMOVED
;
1972 prevent_sleep(&dvb
->fe
[1]->ops
);
1973 dvb
->fe
[1]->exit
= DVB_FE_DEVICE_REMOVED
;
1977 em28xx_unregister_dvb(dvb
);
1979 /* release I2C module bindings */
1980 dvb_module_release(dvb
->i2c_client_sec
);
1981 dvb_module_release(dvb
->i2c_client_tuner
);
1982 dvb_module_release(dvb
->i2c_client_demod
);
1986 kref_put(&dev
->ref
, em28xx_free_device
);
1991 static int em28xx_dvb_suspend(struct em28xx
*dev
)
1995 if (dev
->is_audio_only
)
1998 if (!dev
->board
.has_dvb
)
2001 dev_info(&dev
->intf
->dev
, "Suspending DVB extension\n");
2003 struct em28xx_dvb
*dvb
= dev
->dvb
;
2006 ret
= dvb_frontend_suspend(dvb
->fe
[0]);
2007 dev_info(&dev
->intf
->dev
, "fe0 suspend %d\n", ret
);
2010 dvb_frontend_suspend(dvb
->fe
[1]);
2011 dev_info(&dev
->intf
->dev
, "fe1 suspend %d\n", ret
);
2018 static int em28xx_dvb_resume(struct em28xx
*dev
)
2022 if (dev
->is_audio_only
)
2025 if (!dev
->board
.has_dvb
)
2028 dev_info(&dev
->intf
->dev
, "Resuming DVB extension\n");
2030 struct em28xx_dvb
*dvb
= dev
->dvb
;
2033 ret
= dvb_frontend_resume(dvb
->fe
[0]);
2034 dev_info(&dev
->intf
->dev
, "fe0 resume %d\n", ret
);
2038 ret
= dvb_frontend_resume(dvb
->fe
[1]);
2039 dev_info(&dev
->intf
->dev
, "fe1 resume %d\n", ret
);
2046 static struct em28xx_ops dvb_ops
= {
2048 .name
= "Em28xx dvb Extension",
2049 .init
= em28xx_dvb_init
,
2050 .fini
= em28xx_dvb_fini
,
2051 .suspend
= em28xx_dvb_suspend
,
2052 .resume
= em28xx_dvb_resume
,
2055 static int __init
em28xx_dvb_register(void)
2057 return em28xx_register_extension(&dvb_ops
);
2060 static void __exit
em28xx_dvb_unregister(void)
2062 em28xx_unregister_extension(&dvb_ops
);
2065 module_init(em28xx_dvb_register
);
2066 module_exit(em28xx_dvb_unregister
);