aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <m.chehab@samsung.com>2014-01-12 09:08:22 -0500
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-01-13 07:30:30 -0500
commitee97207c6e7e9a75f49e2abb7ecf944d319ed969 (patch)
treec79c7fb072055224c5b7fe5ec3f116b062763b02
parentfa1e1de6bb679f2c86da3311bbafee7eaf78f125 (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.c49
-rw-r--r--drivers/media/usb/em28xx/em28xx-dvb.c5
-rw-r--r--drivers/media/usb/em28xx/em28xx-video.c48
-rw-r--r--drivers/media/usb/em28xx/em28xx.h1
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
2771void 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}
2818EXPORT_SYMBOL_GPL(em28xx_setup_xc3028);
2819
2771static void request_module_async(struct work_struct *work) 2820static 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
2103static 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
2151static void em28xx_tuner_setup(struct em28xx *dev) 2103static 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);
762extern struct em28xx_board em28xx_boards[]; 762extern struct em28xx_board em28xx_boards[];
763extern struct usb_device_id em28xx_id_table[]; 763extern struct usb_device_id em28xx_id_table[];
764int em28xx_tuner_callback(void *ptr, int component, int command, int arg); 764int em28xx_tuner_callback(void *ptr, int component, int command, int arg);
765void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl);
765void em28xx_release_resources(struct em28xx *dev); 766void em28xx_release_resources(struct em28xx *dev);
766 767
767/* Provided by em28xx-camera.c */ 768/* Provided by em28xx-camera.c */