History

[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.

Mauro Carvalho Chehab committed 12 years ago

Commit ee972071 parent fa1e1de4 files · +55 −48Browse files

Unified · Split

4 files
  1. drivers/media/usb/em28xx/em28xx-cards.c +49 −0
  2. drivers/media/usb/em28xx/em28xx-dvb.c +5 −0
  3. drivers/media/usb/em28xx/em28xx-video.c +0 −48
  4. drivers/media/usb/em28xx/em28xx.h +1 −0
drivers/media/usb/em28xx/em28xx-cards.c+49−0
@@ -2768,6 +2768,55 @@ static void em28xx_card_setup(struct em28xx *dev) · 2767 unmodified lines
27682768 dev->tuner_type = tuner;
27692769 }
27702770
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+
27712820 static void request_module_async(struct work_struct *work)
27722821 {
27732822 struct em28xx *dev = container_of(work,
drivers/media/usb/em28xx/em28xx-dvb.c+5−0
@@ -828,11 +828,16 @@ static int em28xx_attach_xc3028(u8 addr, struct em28xx *dev) · 827 unmodified lines
828828 {
829829 struct dvb_frontend *fe;
830830 struct xc2028_config cfg;
831+ struct xc2028_ctrl ctl;
831832
832833 memset(&cfg, 0, sizeof(cfg));
833834 cfg.i2c_adap = &dev->i2c_adap[dev->def_i2c_bus];
834835 cfg.i2c_addr = addr;
835836
837+ memset(&ctl, 0, sizeof(ctl));
838+ em28xx_setup_xc3028(dev, &ctl);
839+ cfg.ctrl = &ctl;
840+
836841 if (!dev->dvb->fe[0]) {
837842 em28xx_errdev("/2: dvb frontend not attached. "
838843 "Can't attach xc3028\n");
drivers/media/usb/em28xx/em28xx-video.c+0−48
@@ -2100,54 +2100,6 @@ static struct video_device *em28xx_vdev_init(struct em28xx *dev, · 2099 unmodified lines
21002100 return vfd;
21012101 }
21022102
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−
21512103 static void em28xx_tuner_setup(struct em28xx *dev)
21522104 {
21532105 struct tuner_setup tun_setup;
drivers/media/usb/em28xx/em28xx.h+1−0
@@ -762,6 +762,7 @@ void em28xx_close_extension(struct em28xx *dev); · 761 unmodified lines
762762 extern struct em28xx_board em28xx_boards[];
763763 extern struct usb_device_id em28xx_id_table[];
764764 int em28xx_tuner_callback(void *ptr, int component, int command, int arg);
765+void em28xx_setup_xc3028(struct em28xx *dev, struct xc2028_ctrl *ctl);
765766 void em28xx_release_resources(struct em28xx *dev);
766767
767768 /* Provided by em28xx-camera.c */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t