diff options
| author | Mauro Carvalho Chehab <m.chehab@samsung.com> | 2014-01-12 09:08:22 -0500 |
|---|---|---|
| committer | Mauro Carvalho Chehab <m.chehab@samsung.com> | 2014-01-13 07:30:30 -0500 |
| commit | ee97207c6e7e9a75f49e2abb7ecf944d319ed969 (patch) | |
| tree | c79c7fb072055224c5b7fe5ec3f116b062763b02 | |
| parent | fa1e1de6bb679f2c86da3311bbafee7eaf78f125 (diff) | |
[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>
| -rw-r--r-- | drivers/media/usb/em28xx/em28xx-cards.c | 49 | ||||
| -rw-r--r-- | drivers/media/usb/em28xx/em28xx-dvb.c | 5 | ||||
| -rw-r--r-- | drivers/media/usb/em28xx/em28xx-video.c | 48 | ||||
| -rw-r--r-- | drivers/media/usb/em28xx/em28xx.h | 1 |
4 files changed, 55 insertions, 48 deletions
diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c index 39cf49c44e10..6efb9029381b 100644 --- a/drivers/media/usb/em28xx/em28xx-cards.c +++ b/drivers/media/usb/em28xx/em28xx-cards.c | |||
| @@ -2768,6 +2768,55 @@ static void em28xx_card_setup(struct em28xx *dev) | |||
| 2768 | dev->tuner_type = tuner; | 2768 | dev->tuner_type = tuner; |
| 2769 | } | 2769 | } |
| 2770 | 2770 | ||
| 2771 | void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl) | ||
| 2772 | { | ||
| 2773 | memset(ctl, 0, sizeof(*ctl)); | ||
| 2774 | |||
| 2775 | ctl->fname = XC2028_DEFAULT_FIRMWARE; | ||
| 2776 | ctl->max_len = 64; | ||
| 2777 | ctl->mts = em28xx_boards[dev->model].mts_firmware; | ||
| 2778 | |||
| 2779 | switch (dev->model) { | ||
| 2780 | case EM2880_BOARD_EMPIRE_DUAL_TV: | ||
| 2781 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900: | ||
| 2782 | case EM2882_BOARD_TERRATEC_HYBRID_XS: | ||
| 2783 | ctl->demod = XC3028_FE_ZARLINK456; | ||
| 2784 | break; | ||
| 2785 | case EM2880_BOARD_TERRATEC_HYBRID_XS: | ||
| 2786 | case EM2880_BOARD_TERRATEC_HYBRID_XS_FR: | ||
| 2787 | case EM2881_BOARD_PINNACLE_HYBRID_PRO: | ||
| 2788 | ctl->demod = XC3028_FE_ZARLINK456; | ||
| 2789 | break; | ||
| 2790 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2: | ||
| 2791 | case EM2882_BOARD_PINNACLE_HYBRID_PRO_330E: | ||
| 2792 | ctl->demod = XC3028_FE_DEFAULT; | ||
| 2793 | break; | ||
| 2794 | case EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600: | ||
| 2795 | ctl->demod = XC3028_FE_DEFAULT; | ||
| 2796 | ctl->fname = XC3028L_DEFAULT_FIRMWARE; | ||
| 2797 | break; | ||
| 2798 | case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850: | ||
| 2799 | case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950: | ||
| 2800 | case EM2880_BOARD_PINNACLE_PCTV_HD_PRO: | ||
| 2801 | /* FIXME: Better to specify the needed IF */ | ||
| 2802 | ctl->demod = XC3028_FE_DEFAULT; | ||
| 2803 | break; | ||
| 2804 | case EM2883_BOARD_KWORLD_HYBRID_330U: | ||
| 2805 | case EM2882_BOARD_DIKOM_DK300: | ||
| 2806 | case EM2882_BOARD_KWORLD_VS_DVBT: | ||
| 2807 | ctl->demod = XC3028_FE_CHINA; | ||
| 2808 | ctl->fname = XC2028_DEFAULT_FIRMWARE; | ||
| 2809 | break; | ||
| 2810 | case EM2882_BOARD_EVGA_INDTUBE: | ||
| 2811 | ctl->demod = XC3028_FE_CHINA; | ||
| 2812 | ctl->fname = XC3028L_DEFAULT_FIRMWARE; | ||
| 2813 | break; | ||
| 2814 | default: | ||
| 2815 | ctl->demod = XC3028_FE_OREN538; | ||
| 2816 | } | ||
| 2817 | } | ||
| 2818 | EXPORT_SYMBOL_GPL(em28xx_setup_xc3028); | ||
| 2819 | |||
| 2771 | static void request_module_async(struct work_struct *work) | 2820 | static void request_module_async(struct work_struct *work) |
| 2772 | { | 2821 | { |
| 2773 | struct em28xx *dev = container_of(work, | 2822 | struct em28xx *dev = container_of(work, |
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c index 5c6be66ac858..7dba17576edf 100644 --- a/drivers/media/usb/em28xx/em28xx-dvb.c +++ b/drivers/media/usb/em28xx/em28xx-dvb.c | |||
| @@ -828,11 +828,16 @@ static int em28xx_attach_xc3028(u8 addr, struct em28xx *dev) | |||
| 828 | { | 828 | { |
| 829 | struct dvb_frontend *fe; | 829 | struct dvb_frontend *fe; |
| 830 | struct xc2028_config cfg; | 830 | struct xc2028_config cfg; |
| 831 | struct xc2028_ctrl ctl; | ||
| 831 | 832 | ||
| 832 | memset(&cfg, 0, sizeof(cfg)); | 833 | memset(&cfg, 0, sizeof(cfg)); |
| 833 | cfg.i2c_adap = &dev->i2c_adap[dev->def_i2c_bus]; | 834 | cfg.i2c_adap = &dev->i2c_adap[dev->def_i2c_bus]; |
| 834 | cfg.i2c_addr = addr; | 835 | cfg.i2c_addr = addr; |
| 835 | 836 | ||
| 837 | memset(&ctl, 0, sizeof(ctl)); | ||
| 838 | em28xx_setup_xc3028(dev, &ctl); | ||
| 839 | cfg.ctrl = &ctl; | ||
| 840 | |||
| 836 | if (!dev->dvb->fe[0]) { | 841 | if (!dev->dvb->fe[0]) { |
| 837 | em28xx_errdev("/2: dvb frontend not attached. " | 842 | em28xx_errdev("/2: dvb frontend not attached. " |
| 838 | "Can't attach xc3028\n"); | 843 | "Can't attach xc3028\n"); |
diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c index 9c4462868330..a1dcceb7b2c0 100644 --- a/drivers/media/usb/em28xx/em28xx-video.c +++ b/drivers/media/usb/em28xx/em28xx-video.c | |||
| @@ -2100,54 +2100,6 @@ static struct video_device *em28xx_vdev_init(struct em28xx *dev, | |||
| 2100 | return vfd; | 2100 | return vfd; |
| 2101 | } | 2101 | } |
| 2102 | 2102 | ||
| 2103 | static void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl) | ||
| 2104 | { | ||
| 2105 | memset(ctl, 0, sizeof(*ctl)); | ||
| 2106 | |||
| 2107 | ctl->fname = XC2028_DEFAULT_FIRMWARE; | ||
| 2108 | ctl->max_len = 64; | ||
| 2109 | ctl->mts = em28xx_boards[dev->model].mts_firmware; | ||
| 2110 | |||
| 2111 | switch (dev->model) { | ||
| 2112 | case EM2880_BOARD_EMPIRE_DUAL_TV: | ||
| 2113 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900: | ||
| 2114 | case EM2882_BOARD_TERRATEC_HYBRID_XS: | ||
| 2115 | ctl->demod = XC3028_FE_ZARLINK456; | ||
| 2116 | break; | ||
| 2117 | case EM2880_BOARD_TERRATEC_HYBRID_XS: | ||
| 2118 | case EM2880_BOARD_TERRATEC_HYBRID_XS_FR: | ||
| 2119 | case EM2881_BOARD_PINNACLE_HYBRID_PRO: | ||
| 2120 | ctl->demod = XC3028_FE_ZARLINK456; | ||
| 2121 | break; | ||
| 2122 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900_R2: | ||
| 2123 | case EM2882_BOARD_PINNACLE_HYBRID_PRO_330E: | ||
| 2124 | ctl->demod = XC3028_FE_DEFAULT; | ||
| 2125 | break; | ||
| 2126 | case EM2880_BOARD_AMD_ATI_TV_WONDER_HD_600: | ||
| 2127 | ctl->demod = XC3028_FE_DEFAULT; | ||
| 2128 | ctl->fname = XC3028L_DEFAULT_FIRMWARE; | ||
| 2129 | break; | ||
| 2130 | case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_850: | ||
| 2131 | case EM2883_BOARD_HAUPPAUGE_WINTV_HVR_950: | ||
| 2132 | case EM2880_BOARD_PINNACLE_PCTV_HD_PRO: | ||
| 2133 | /* FIXME: Better to specify the needed IF */ | ||
| 2134 | ctl->demod = XC3028_FE_DEFAULT; | ||
| 2135 | break; | ||
| 2136 | case EM2883_BOARD_KWORLD_HYBRID_330U: | ||
| 2137 | case EM2882_BOARD_DIKOM_DK300: | ||
| 2138 | case EM2882_BOARD_KWORLD_VS_DVBT: | ||
| 2139 | ctl->demod = XC3028_FE_CHINA; | ||
| 2140 | ctl->fname = XC2028_DEFAULT_FIRMWARE; | ||
| 2141 | break; | ||
| 2142 | case EM2882_BOARD_EVGA_INDTUBE: | ||
| 2143 | ctl->demod = XC3028_FE_CHINA; | ||
| 2144 | ctl->fname = XC3028L_DEFAULT_FIRMWARE; | ||
| 2145 | break; | ||
| 2146 | default: | ||
| 2147 | ctl->demod = XC3028_FE_OREN538; | ||
| 2148 | } | ||
| 2149 | } | ||
| 2150 | |||
| 2151 | static void em28xx_tuner_setup(struct em28xx *dev) | 2103 | static void em28xx_tuner_setup(struct em28xx *dev) |
| 2152 | { | 2104 | { |
| 2153 | struct tuner_setup tun_setup; | 2105 | struct tuner_setup tun_setup; |
diff --git a/drivers/media/usb/em28xx/em28xx.h b/drivers/media/usb/em28xx/em28xx.h index e76f993e3195..5d5d1b6f0294 100644 --- a/drivers/media/usb/em28xx/em28xx.h +++ b/drivers/media/usb/em28xx/em28xx.h | |||
| @@ -762,6 +762,7 @@ void em28xx_close_extension(struct em28xx *dev); | |||
| 762 | extern struct em28xx_board em28xx_boards[]; | 762 | extern struct em28xx_board em28xx_boards[]; |
| 763 | extern struct usb_device_id em28xx_id_table[]; | 763 | extern struct usb_device_id em28xx_id_table[]; |
| 764 | int em28xx_tuner_callback(void *ptr, int component, int command, int arg); | 764 | int em28xx_tuner_callback(void *ptr, int component, int command, int arg); |
| 765 | void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl); | ||
| 765 | void em28xx_release_resources(struct em28xx *dev); | 766 | void em28xx_release_resources(struct em28xx *dev); |
| 766 | 767 | ||
| 767 | /* Provided by em28xx-camera.c */ | 768 | /* Provided by em28xx-camera.c */ |
