diff options
-rw-r--r-- | drivers/media/video/pvrusb2/pvrusb2-devattr.c | 155 | ||||
-rw-r--r-- | drivers/media/video/pvrusb2/pvrusb2-devattr.h | 2 | ||||
-rw-r--r-- | drivers/media/video/pvrusb2/pvrusb2-hdw.c | 9 |
3 files changed, 89 insertions, 77 deletions
diff --git a/drivers/media/video/pvrusb2/pvrusb2-devattr.c b/drivers/media/video/pvrusb2/pvrusb2-devattr.c index 2d6519d20f07..9a08670d406f 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-devattr.c +++ b/drivers/media/video/pvrusb2/pvrusb2-devattr.c | |||
@@ -33,71 +33,22 @@ pvr2_device_desc structures. | |||
33 | #include <linux/i2c.h> | 33 | #include <linux/i2c.h> |
34 | #include <media/tuner.h> | 34 | #include <media/tuner.h> |
35 | 35 | ||
36 | /* Known major hardware variants, keyed from device ID */ | ||
37 | #define PVR2_HDW_TYPE_29XXX 0 | ||
38 | #define PVR2_HDW_TYPE_24XXX 1 | ||
39 | #define PVR2_HDW_TYPE_GOTVIEW_2 2 | ||
40 | #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR | ||
41 | #define PVR2_HDW_TYPE_ONAIR_CREATOR 3 | ||
42 | #endif | ||
43 | #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_USB2 | ||
44 | #define PVR2_HDW_TYPE_ONAIR_USB2 4 | ||
45 | #endif | ||
46 | |||
47 | struct usb_device_id pvr2_device_table[] = { | ||
48 | [PVR2_HDW_TYPE_29XXX] = { USB_DEVICE(0x2040, 0x2900) }, | ||
49 | [PVR2_HDW_TYPE_24XXX] = { USB_DEVICE(0x2040, 0x2400) }, | ||
50 | [PVR2_HDW_TYPE_GOTVIEW_2] = { USB_DEVICE(0x1164, 0x0622) }, | ||
51 | #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR | ||
52 | [PVR2_HDW_TYPE_ONAIR_CREATOR] = { USB_DEVICE(0x11ba, 0x1003) }, | ||
53 | #endif | ||
54 | #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_USB2 | ||
55 | [PVR2_HDW_TYPE_ONAIR_USB2] = { USB_DEVICE(0x11ba, 0x1001) }, | ||
56 | #endif | ||
57 | { } | ||
58 | }; | ||
59 | #if defined(CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR) || defined(CONFIG_VIDEO_PVRUSB2_ONAIR_USB2) | ||
60 | 36 | ||
61 | /* Names of other client modules to request for Creator model hardware */ | ||
62 | static const char *pvr2_client_onair[] = { | ||
63 | "saa7115", | ||
64 | "tuner", | ||
65 | "cs53l32a", | ||
66 | }; | ||
67 | #endif | ||
68 | 37 | ||
69 | /* Names of other client modules to request for 24xxx model hardware */ | 38 | /*------------------------------------------------------------------------*/ |
70 | static const char *pvr2_client_24xxx[] = { | 39 | /* Hauppauge PVR-USB2 Model 29xxx */ |
71 | "cx25840", | ||
72 | "tuner", | ||
73 | "wm8775", | ||
74 | }; | ||
75 | 40 | ||
76 | /* Names of other client modules to request for 29xxx model hardware */ | ||
77 | static const char *pvr2_client_29xxx[] = { | 41 | static const char *pvr2_client_29xxx[] = { |
78 | "msp3400", | 42 | "msp3400", |
79 | "saa7115", | 43 | "saa7115", |
80 | "tuner", | 44 | "tuner", |
81 | }; | 45 | }; |
82 | 46 | ||
83 | // Names of other client modules to request for Gotview 2 model hardware | ||
84 | static const char *pvr2_client_gotview_2[] = { | ||
85 | "cx25840", | ||
86 | "tuner", | ||
87 | }; | ||
88 | |||
89 | /* Firmware file name(s) for 29xxx devices */ | ||
90 | static const char *pvr2_fw1_names_29xxx[] = { | 47 | static const char *pvr2_fw1_names_29xxx[] = { |
91 | "v4l-pvrusb2-29xxx-01.fw", | 48 | "v4l-pvrusb2-29xxx-01.fw", |
92 | }; | 49 | }; |
93 | 50 | ||
94 | /* Firmware file name(s) for 24xxx devices */ | 51 | static const struct pvr2_device_desc pvr2_device_29xxx = { |
95 | static const char *pvr2_fw1_names_24xxx[] = { | ||
96 | "v4l-pvrusb2-24xxx-01.fw", | ||
97 | }; | ||
98 | |||
99 | const struct pvr2_device_desc pvr2_device_descriptions[] = { | ||
100 | [PVR2_HDW_TYPE_29XXX] = { | ||
101 | .description = "WinTV PVR USB2 Model Category 29xxxx", | 52 | .description = "WinTV PVR USB2 Model Category 29xxxx", |
102 | .shortname = "29xxx", | 53 | .shortname = "29xxx", |
103 | .client_modules.lst = pvr2_client_29xxx, | 54 | .client_modules.lst = pvr2_client_29xxx, |
@@ -106,8 +57,24 @@ const struct pvr2_device_desc pvr2_device_descriptions[] = { | |||
106 | .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_29xxx), | 57 | .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_29xxx), |
107 | .flag_has_hauppauge_rom = !0, | 58 | .flag_has_hauppauge_rom = !0, |
108 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, | 59 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, |
109 | }, | 60 | }; |
110 | [PVR2_HDW_TYPE_24XXX] = { | 61 | |
62 | |||
63 | |||
64 | /*------------------------------------------------------------------------*/ | ||
65 | /* Hauppauge PVR-USB2 Model 24xxx */ | ||
66 | |||
67 | static const char *pvr2_client_24xxx[] = { | ||
68 | "cx25840", | ||
69 | "tuner", | ||
70 | "wm8775", | ||
71 | }; | ||
72 | |||
73 | static const char *pvr2_fw1_names_24xxx[] = { | ||
74 | "v4l-pvrusb2-24xxx-01.fw", | ||
75 | }; | ||
76 | |||
77 | static const struct pvr2_device_desc pvr2_device_24xxx = { | ||
111 | .description = "WinTV PVR USB2 Model Category 24xxxx", | 78 | .description = "WinTV PVR USB2 Model Category 24xxxx", |
112 | .shortname = "24xxx", | 79 | .shortname = "24xxx", |
113 | .client_modules.lst = pvr2_client_24xxx, | 80 | .client_modules.lst = pvr2_client_24xxx, |
@@ -119,8 +86,19 @@ const struct pvr2_device_desc pvr2_device_descriptions[] = { | |||
119 | .flag_has_hauppauge_rom = !0, | 86 | .flag_has_hauppauge_rom = !0, |
120 | .flag_has_hauppauge_custom_ir = !0, | 87 | .flag_has_hauppauge_custom_ir = !0, |
121 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, | 88 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, |
122 | }, | 89 | }; |
123 | [PVR2_HDW_TYPE_GOTVIEW_2] = { | 90 | |
91 | |||
92 | |||
93 | /*------------------------------------------------------------------------*/ | ||
94 | /* GOTVIEW USB2.0 DVD2 */ | ||
95 | |||
96 | static const char *pvr2_client_gotview_2[] = { | ||
97 | "cx25840", | ||
98 | "tuner", | ||
99 | }; | ||
100 | |||
101 | static const struct pvr2_device_desc pvr2_device_gotview_2 = { | ||
124 | .description = "Gotview USB 2.0 DVD 2", | 102 | .description = "Gotview USB 2.0 DVD 2", |
125 | .shortname = "gv2", | 103 | .shortname = "gv2", |
126 | .client_modules.lst = pvr2_client_gotview_2, | 104 | .client_modules.lst = pvr2_client_gotview_2, |
@@ -128,30 +106,73 @@ const struct pvr2_device_desc pvr2_device_descriptions[] = { | |||
128 | .flag_has_cx25840 = !0, | 106 | .flag_has_cx25840 = !0, |
129 | .default_tuner_type = TUNER_PHILIPS_FM1216ME_MK3, | 107 | .default_tuner_type = TUNER_PHILIPS_FM1216ME_MK3, |
130 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_GOTVIEW, | 108 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_GOTVIEW, |
131 | }, | 109 | }; |
110 | |||
111 | |||
112 | |||
132 | #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR | 113 | #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR |
133 | [PVR2_HDW_TYPE_ONAIR_CREATOR] = { | 114 | /*------------------------------------------------------------------------*/ |
115 | /* OnAir Creator */ | ||
116 | |||
117 | static const char *pvr2_client_onair_creator[] = { | ||
118 | "saa7115", | ||
119 | "tuner", | ||
120 | "cs53l32a", | ||
121 | }; | ||
122 | |||
123 | static const struct pvr2_device_desc pvr2_device_onair_creator = { | ||
134 | .description = "OnAir Creator Hybrid USB tuner", | 124 | .description = "OnAir Creator Hybrid USB tuner", |
135 | .shortname = "oac", | 125 | .shortname = "oac", |
136 | .client_modules.lst = pvr2_client_onair, | 126 | .client_modules.lst = pvr2_client_onair_creator, |
137 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair), | 127 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair_creator), |
138 | .default_tuner_type = TUNER_LG_TDVS_H06XF, | 128 | .default_tuner_type = TUNER_LG_TDVS_H06XF, |
139 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, | 129 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, |
140 | }, | 130 | }; |
141 | #endif | 131 | #endif |
132 | |||
133 | |||
134 | |||
142 | #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_USB2 | 135 | #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_USB2 |
143 | [PVR2_HDW_TYPE_ONAIR_USB2] = { | 136 | /*------------------------------------------------------------------------*/ |
137 | /* OnAir USB 2.0 */ | ||
138 | |||
139 | static const char *pvr2_client_onair_usb2[] = { | ||
140 | "saa7115", | ||
141 | "tuner", | ||
142 | "cs53l32a", | ||
143 | }; | ||
144 | |||
145 | static const struct pvr2_device_desc pvr2_device_onair_usb2 = { | ||
144 | .description = "OnAir USB2 Hybrid USB tuner", | 146 | .description = "OnAir USB2 Hybrid USB tuner", |
145 | .shortname = "oa2", | 147 | .shortname = "oa2", |
146 | .client_modules.lst = pvr2_client_onair, | 148 | .client_modules.lst = pvr2_client_onair_usb2, |
147 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair), | 149 | .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair_usb2), |
148 | .default_tuner_type = TUNER_PHILIPS_ATSC, | 150 | .default_tuner_type = TUNER_PHILIPS_ATSC, |
149 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, | 151 | .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE, |
150 | }, | ||
151 | #endif | ||
152 | }; | 152 | }; |
153 | #endif | ||
154 | |||
155 | |||
153 | 156 | ||
154 | const unsigned int pvr2_device_count = ARRAY_SIZE(pvr2_device_descriptions); | 157 | /*------------------------------------------------------------------------*/ |
158 | |||
159 | struct usb_device_id pvr2_device_table[] = { | ||
160 | { USB_DEVICE(0x2040, 0x2900), | ||
161 | .driver_info = (kernel_ulong_t)&pvr2_device_29xxx}, | ||
162 | { USB_DEVICE(0x2040, 0x2400), | ||
163 | .driver_info = (kernel_ulong_t)&pvr2_device_24xxx}, | ||
164 | { USB_DEVICE(0x1164, 0x0622), | ||
165 | .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2}, | ||
166 | #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR | ||
167 | { USB_DEVICE(0x11ba, 0x1003), | ||
168 | .driver_info = (kernel_ulong_t)&pvr2_device_onair_creator}, | ||
169 | #endif | ||
170 | #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_USB2 | ||
171 | { USB_DEVICE(0x11ba, 0x1001), | ||
172 | .driver_info = (kernel_ulong_t)&pvr2_device_onair_usb2}, | ||
173 | #endif | ||
174 | { } | ||
175 | }; | ||
155 | 176 | ||
156 | MODULE_DEVICE_TABLE(usb, pvr2_device_table); | 177 | MODULE_DEVICE_TABLE(usb, pvr2_device_table); |
157 | 178 | ||
diff --git a/drivers/media/video/pvrusb2/pvrusb2-devattr.h b/drivers/media/video/pvrusb2/pvrusb2-devattr.h index a9c3d99b602d..64b467f0637f 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-devattr.h +++ b/drivers/media/video/pvrusb2/pvrusb2-devattr.h | |||
@@ -104,9 +104,7 @@ struct pvr2_device_desc { | |||
104 | char flag_has_hauppauge_custom_ir; | 104 | char flag_has_hauppauge_custom_ir; |
105 | }; | 105 | }; |
106 | 106 | ||
107 | extern const struct pvr2_device_desc pvr2_device_descriptions[]; | ||
108 | extern struct usb_device_id pvr2_device_table[]; | 107 | extern struct usb_device_id pvr2_device_table[]; |
109 | extern const unsigned int pvr2_device_count; | ||
110 | 108 | ||
111 | #endif /* __PVRUSB2_HDW_INTERNAL_H */ | 109 | #endif /* __PVRUSB2_HDW_INTERNAL_H */ |
112 | 110 | ||
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c index 54d2c4ab7a31..41ae980405ed 100644 --- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c +++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c | |||
@@ -1813,7 +1813,6 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf, | |||
1813 | { | 1813 | { |
1814 | unsigned int idx,cnt1,cnt2; | 1814 | unsigned int idx,cnt1,cnt2; |
1815 | struct pvr2_hdw *hdw; | 1815 | struct pvr2_hdw *hdw; |
1816 | unsigned int hdw_type; | ||
1817 | int valid_std_mask; | 1816 | int valid_std_mask; |
1818 | struct pvr2_ctrl *cptr; | 1817 | struct pvr2_ctrl *cptr; |
1819 | const struct pvr2_device_desc *hdw_desc; | 1818 | const struct pvr2_device_desc *hdw_desc; |
@@ -1821,13 +1820,7 @@ struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf, | |||
1821 | struct v4l2_queryctrl qctrl; | 1820 | struct v4l2_queryctrl qctrl; |
1822 | struct pvr2_ctl_info *ciptr; | 1821 | struct pvr2_ctl_info *ciptr; |
1823 | 1822 | ||
1824 | hdw_type = devid - pvr2_device_table; | 1823 | hdw_desc = (const struct pvr2_device_desc *)(devid->driver_info); |
1825 | if (hdw_type >= pvr2_device_count) { | ||
1826 | pvr2_trace(PVR2_TRACE_ERROR_LEGS, | ||
1827 | "Bogus device type of %u reported",hdw_type); | ||
1828 | return NULL; | ||
1829 | } | ||
1830 | hdw_desc = pvr2_device_descriptions + hdw_type; | ||
1831 | 1824 | ||
1832 | hdw = kzalloc(sizeof(*hdw),GFP_KERNEL); | 1825 | hdw = kzalloc(sizeof(*hdw),GFP_KERNEL); |
1833 | pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"", | 1826 | pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"", |