mirror of
https://github.com/torvalds/linux.git
synced 2024-11-08 05:01:48 +00:00
[media] em28xx: fix xc3028 demod and firmware setup on DVB
Now that em28xx can be compiled without V4L support, we should call em28xx_setup_xc3028() on both em28xx-v4l and em28xx-dvb modules. Reported-by: Chris Lee <updatelee@gmail.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
fa1e1de6bb
commit
ee97207c6e
@ -2768,6 +2768,55 @@ static void em28xx_card_setup(struct em28xx *dev)
|
||||
dev->tuner_type = tuner;
|
||||
}
|
||||
|
||||
void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl)
|
||||
{
|
||||
memset(ctl, 0, sizeof(*ctl));
|
||||
|
||||
ctl->fname = XC2028_DEFAULT_FIRMWARE;
|
||||
ctl->max_len = 64;
|
||||
ctl->mts = em28xx_boards[dev->model].mts_firmware;
|
||||
|
||||
switch (dev->model) {
|
||||
case EM2880_BOARD_EMPIRE_DUAL_TV:
|
||||
case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900:
|
||||
case EM2882_BOARD_TERRATEC_HYBRID_XS:
|
||||
ctl->demod = XC3028_FE_ZARLINK456;
|
||||
break;
|
||||
case EM2880_BOARD_TERRATEC_HYBRID_XS:
|
||||
case EM2880_BOARD_TERRATEC_HYBRID_XS_FR:
|
||||
case EM2881_BOARD_PINNACLE_HYBRID_PRO:
|
||||
ctl->demod = XC3028_FE_ZARLINK456;
|
||||
break;
|
||||
case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2:
|
||||
case EM2882_BOARD_PINNACLE_HYBRID_PRO_330E:
|
||||
ctl->demod = XC3028_FE_DEFAULT;
|
||||
break;
|
||||
case EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600:
|
||||
ctl->demod = XC3028_FE_DEFAULT;
|
||||
ctl->fname = XC3028L_DEFAULT_FIRMWARE;
|
||||
break;
|
||||
case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850:
|
||||
case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950:
|
||||
case EM2880_BOARD_PINNACLE_PCTV_HD_PRO:
|
||||
/* FIXME: Better to specify the needed IF */
|
||||
ctl->demod = XC3028_FE_DEFAULT;
|
||||
break;
|
||||
case EM2883_BOARD_KWORLD_HYBRID_330U:
|
||||
case EM2882_BOARD_DIKOM_DK300:
|
||||
case EM2882_BOARD_KWORLD_VS_DVBT:
|
||||
ctl->demod = XC3028_FE_CHINA;
|
||||
ctl->fname = XC2028_DEFAULT_FIRMWARE;
|
||||
break;
|
||||
case EM2882_BOARD_EVGA_INDTUBE:
|
||||
ctl->demod = XC3028_FE_CHINA;
|
||||
ctl->fname = XC3028L_DEFAULT_FIRMWARE;
|
||||
break;
|
||||
default:
|
||||
ctl->demod = XC3028_FE_OREN538;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(em28xx_setup_xc3028);
|
||||
|
||||
static void request_module_async(struct work_struct *work)
|
||||
{
|
||||
struct em28xx *dev = container_of(work,
|
||||
|
@ -828,11 +828,16 @@ static int em28xx_attach_xc3028(u8 addr, struct em28xx *dev)
|
||||
{
|
||||
struct dvb_frontend *fe;
|
||||
struct xc2028_config cfg;
|
||||
struct xc2028_ctrl ctl;
|
||||
|
||||
memset(&cfg, 0, sizeof(cfg));
|
||||
cfg.i2c_adap = &dev->i2c_adap[dev->def_i2c_bus];
|
||||
cfg.i2c_addr = addr;
|
||||
|
||||
memset(&ctl, 0, sizeof(ctl));
|
||||
em28xx_setup_xc3028(dev, &ctl);
|
||||
cfg.ctrl = &ctl;
|
||||
|
||||
if (!dev->dvb->fe[0]) {
|
||||
em28xx_errdev("/2: dvb frontend not attached. "
|
||||
"Can't attach xc3028\n");
|
||||
|
@ -2100,54 +2100,6 @@ static struct video_device *em28xx_vdev_init(struct em28xx *dev,
|
||||
return vfd;
|
||||
}
|
||||
|
||||
static void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl)
|
||||
{
|
||||
memset(ctl, 0, sizeof(*ctl));
|
||||
|
||||
ctl->fname = XC2028_DEFAULT_FIRMWARE;
|
||||
ctl->max_len = 64;
|
||||
ctl->mts = em28xx_boards[dev->model].mts_firmware;
|
||||
|
||||
switch (dev->model) {
|
||||
case EM2880_BOARD_EMPIRE_DUAL_TV:
|
||||
case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900:
|
||||
case EM2882_BOARD_TERRATEC_HYBRID_XS:
|
||||
ctl->demod = XC3028_FE_ZARLINK456;
|
||||
break;
|
||||
case EM2880_BOARD_TERRATEC_HYBRID_XS:
|
||||
case EM2880_BOARD_TERRATEC_HYBRID_XS_FR:
|
||||
case EM2881_BOARD_PINNACLE_HYBRID_PRO:
|
||||
ctl->demod = XC3028_FE_ZARLINK456;
|
||||
break;
|
||||
case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2:
|
||||
case EM2882_BOARD_PINNACLE_HYBRID_PRO_330E:
|
||||
ctl->demod = XC3028_FE_DEFAULT;
|
||||
break;
|
||||
case EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600:
|
||||
ctl->demod = XC3028_FE_DEFAULT;
|
||||
ctl->fname = XC3028L_DEFAULT_FIRMWARE;
|
||||
break;
|
||||
case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850:
|
||||
case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950:
|
||||
case EM2880_BOARD_PINNACLE_PCTV_HD_PRO:
|
||||
/* FIXME: Better to specify the needed IF */
|
||||
ctl->demod = XC3028_FE_DEFAULT;
|
||||
break;
|
||||
case EM2883_BOARD_KWORLD_HYBRID_330U:
|
||||
case EM2882_BOARD_DIKOM_DK300:
|
||||
case EM2882_BOARD_KWORLD_VS_DVBT:
|
||||
ctl->demod = XC3028_FE_CHINA;
|
||||
ctl->fname = XC2028_DEFAULT_FIRMWARE;
|
||||
break;
|
||||
case EM2882_BOARD_EVGA_INDTUBE:
|
||||
ctl->demod = XC3028_FE_CHINA;
|
||||
ctl->fname = XC3028L_DEFAULT_FIRMWARE;
|
||||
break;
|
||||
default:
|
||||
ctl->demod = XC3028_FE_OREN538;
|
||||
}
|
||||
}
|
||||
|
||||
static void em28xx_tuner_setup(struct em28xx *dev)
|
||||
{
|
||||
struct tuner_setup tun_setup;
|
||||
|
@ -762,6 +762,7 @@ void em28xx_close_extension(struct em28xx *dev);
|
||||
extern struct em28xx_board em28xx_boards[];
|
||||
extern struct usb_device_id em28xx_id_table[];
|
||||
int em28xx_tuner_callback(void *ptr, int component, int command, int arg);
|
||||
void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl);
|
||||
void em28xx_release_resources(struct em28xx *dev);
|
||||
|
||||
/* Provided by em28xx-camera.c */
|
||||
|
Loading…
Reference in New Issue
Block a user