Now that em28xx can be compiled without V4L support, we should call em28xx_setup_xc3028() on both em28xx-v4l and em28xx-dvb modules.
Unified · Split
| @@ -2768,6 +2768,55 @@ static void em28xx_card_setup(struct em28xx *dev) · 2767 unmodified lines | ||
| 2768 | 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 | 2820 | static void request_module_async(struct work_struct *work) |
| 2772 | 2821 | { |
| 2773 | 2822 | struct em28xx *dev = container_of(work, |
| @@ -828,11 +828,16 @@ static int em28xx_attach_xc3028(u8 addr, struct em28xx *dev) · 827 unmodified lines | ||
| 828 | 828 | { |
| 829 | 829 | struct dvb_frontend *fe; |
| 830 | 830 | struct xc2028_config cfg; |
| 831 | + struct xc2028_ctrl ctl; | |
| 831 | 832 | |
| 832 | 833 | memset(&cfg, 0, sizeof(cfg)); |
| 833 | 834 | cfg.i2c_adap = &dev->i2c_adap[dev->def_i2c_bus]; |
| 834 | 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 | 841 | if (!dev->dvb->fe[0]) { |
| 837 | 842 | em28xx_errdev("/2: dvb frontend not attached. " |
| 838 | 843 | "Can't attach xc3028\n"); |
| @@ -2100,54 +2100,6 @@ static struct video_device *em28xx_vdev_init(struct em28xx *dev, · 2099 unmodified lines | ||
| 2100 | 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 | 2103 | static void em28xx_tuner_setup(struct em28xx *dev) |
| 2152 | 2104 | { |
| 2153 | 2105 | struct tuner_setup tun_setup; |
| @@ -762,6 +762,7 @@ void em28xx_close_extension(struct em28xx *dev); · 761 unmodified lines | ||
| 762 | 762 | extern struct em28xx_board em28xx_boards[]; |
| 763 | 763 | extern struct usb_device_id em28xx_id_table[]; |
| 764 | 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 | 766 | void em28xx_release_resources(struct em28xx *dev); |
| 766 | 767 | |
| 767 | 768 | /* Provided by em28xx-camera.c */ |