#include <linux/i2c.h>
 #include <media/tuner.h>
 
-/* Known major hardware variants, keyed from device ID */
-#define PVR2_HDW_TYPE_29XXX 0
-#define PVR2_HDW_TYPE_24XXX 1
-#define PVR2_HDW_TYPE_GOTVIEW_2 2
-#ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR
-#define PVR2_HDW_TYPE_ONAIR_CREATOR 3
-#endif
-#ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_USB2
-#define PVR2_HDW_TYPE_ONAIR_USB2 4
-#endif
-
-struct usb_device_id pvr2_device_table[] = {
-       [PVR2_HDW_TYPE_29XXX] = { USB_DEVICE(0x2040, 0x2900) },
-       [PVR2_HDW_TYPE_24XXX] = { USB_DEVICE(0x2040, 0x2400) },
-       [PVR2_HDW_TYPE_GOTVIEW_2] = { USB_DEVICE(0x1164, 0x0622) },
-#ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR
-       [PVR2_HDW_TYPE_ONAIR_CREATOR] = { USB_DEVICE(0x11ba, 0x1003) },
-#endif
-#ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_USB2
-       [PVR2_HDW_TYPE_ONAIR_USB2] = { USB_DEVICE(0x11ba, 0x1001) },
-#endif
-       { }
-};
-#if defined(CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR) || defined(CONFIG_VIDEO_PVRUSB2_ONAIR_USB2)
 
-/* Names of other client modules to request for Creator model hardware */
-static const char *pvr2_client_onair[] = {
-       "saa7115",
-       "tuner",
-       "cs53l32a",
-};
-#endif
 
-/* Names of other client modules to request for 24xxx model hardware */
-static const char *pvr2_client_24xxx[] = {
-       "cx25840",
-       "tuner",
-       "wm8775",
-};
+/*------------------------------------------------------------------------*/
+/* Hauppauge PVR-USB2 Model 29xxx */
 
-/* Names of other client modules to request for 29xxx model hardware */
 static const char *pvr2_client_29xxx[] = {
        "msp3400",
        "saa7115",
        "tuner",
 };
 
-// Names of other client modules to request for Gotview 2 model hardware
-static const char *pvr2_client_gotview_2[] = {
-       "cx25840",
-       "tuner",
-};
-
-/* Firmware file name(s) for 29xxx devices */
 static const char *pvr2_fw1_names_29xxx[] = {
                "v4l-pvrusb2-29xxx-01.fw",
 };
 
-/* Firmware file name(s) for 24xxx devices */
-static const char *pvr2_fw1_names_24xxx[] = {
-               "v4l-pvrusb2-24xxx-01.fw",
-};
-
-const struct pvr2_device_desc pvr2_device_descriptions[] = {
-       [PVR2_HDW_TYPE_29XXX] = {
+static const struct pvr2_device_desc pvr2_device_29xxx = {
                .description = "WinTV PVR USB2 Model Category 29xxxx",
                .shortname = "29xxx",
                .client_modules.lst = pvr2_client_29xxx,
                .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_29xxx),
                .flag_has_hauppauge_rom = !0,
                .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,
-       },
-       [PVR2_HDW_TYPE_24XXX] = {
+};
+
+
+
+/*------------------------------------------------------------------------*/
+/* Hauppauge PVR-USB2 Model 24xxx */
+
+static const char *pvr2_client_24xxx[] = {
+       "cx25840",
+       "tuner",
+       "wm8775",
+};
+
+static const char *pvr2_fw1_names_24xxx[] = {
+               "v4l-pvrusb2-24xxx-01.fw",
+};
+
+static const struct pvr2_device_desc pvr2_device_24xxx = {
                .description = "WinTV PVR USB2 Model Category 24xxxx",
                .shortname = "24xxx",
                .client_modules.lst = pvr2_client_24xxx,
                .flag_has_hauppauge_rom = !0,
                .flag_has_hauppauge_custom_ir = !0,
                .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,
-       },
-       [PVR2_HDW_TYPE_GOTVIEW_2] = {
+};
+
+
+
+/*------------------------------------------------------------------------*/
+/* GOTVIEW USB2.0 DVD2 */
+
+static const char *pvr2_client_gotview_2[] = {
+       "cx25840",
+       "tuner",
+};
+
+static const struct pvr2_device_desc pvr2_device_gotview_2 = {
                .description = "Gotview USB 2.0 DVD 2",
                .shortname = "gv2",
                .client_modules.lst = pvr2_client_gotview_2,
                .flag_has_cx25840 = !0,
                .default_tuner_type = TUNER_PHILIPS_FM1216ME_MK3,
                .signal_routing_scheme = PVR2_ROUTING_SCHEME_GOTVIEW,
-       },
+};
+
+
+
 #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR
-       [PVR2_HDW_TYPE_ONAIR_CREATOR] = {
+/*------------------------------------------------------------------------*/
+/* OnAir Creator */
+
+static const char *pvr2_client_onair_creator[] = {
+       "saa7115",
+       "tuner",
+       "cs53l32a",
+};
+
+static const struct pvr2_device_desc pvr2_device_onair_creator = {
                .description = "OnAir Creator Hybrid USB tuner",
                .shortname = "oac",
-               .client_modules.lst = pvr2_client_onair,
-               .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair),
+               .client_modules.lst = pvr2_client_onair_creator,
+               .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair_creator),
                .default_tuner_type = TUNER_LG_TDVS_H06XF,
                .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,
-       },
+};
 #endif
+
+
+
 #ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_USB2
-       [PVR2_HDW_TYPE_ONAIR_USB2] = {
+/*------------------------------------------------------------------------*/
+/* OnAir USB 2.0 */
+
+static const char *pvr2_client_onair_usb2[] = {
+       "saa7115",
+       "tuner",
+       "cs53l32a",
+};
+
+static const struct pvr2_device_desc pvr2_device_onair_usb2 = {
                .description = "OnAir USB2 Hybrid USB tuner",
                .shortname = "oa2",
-               .client_modules.lst = pvr2_client_onair,
-               .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair),
+               .client_modules.lst = pvr2_client_onair_usb2,
+               .client_modules.cnt = ARRAY_SIZE(pvr2_client_onair_usb2),
                .default_tuner_type = TUNER_PHILIPS_ATSC,
                .signal_routing_scheme = PVR2_ROUTING_SCHEME_HAUPPAUGE,
-       },
-#endif
 };
+#endif
+
+
 
-const unsigned int pvr2_device_count = ARRAY_SIZE(pvr2_device_descriptions);
+/*------------------------------------------------------------------------*/
+
+struct usb_device_id pvr2_device_table[] = {
+       { USB_DEVICE(0x2040, 0x2900),
+         .driver_info = (kernel_ulong_t)&pvr2_device_29xxx},
+       { USB_DEVICE(0x2040, 0x2400),
+         .driver_info = (kernel_ulong_t)&pvr2_device_24xxx},
+       { USB_DEVICE(0x1164, 0x0622),
+         .driver_info = (kernel_ulong_t)&pvr2_device_gotview_2},
+#ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_CREATOR
+       { USB_DEVICE(0x11ba, 0x1003),
+         .driver_info = (kernel_ulong_t)&pvr2_device_onair_creator},
+#endif
+#ifdef CONFIG_VIDEO_PVRUSB2_ONAIR_USB2
+       { USB_DEVICE(0x11ba, 0x1001),
+         .driver_info = (kernel_ulong_t)&pvr2_device_onair_usb2},
+#endif
+       { }
+};
 
 MODULE_DEVICE_TABLE(usb, pvr2_device_table);