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 */ |