Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[linux-2.6.git] / drivers / media / dvb / dvb-usb / dw2102.c
index ff941d2..451c5a7 100644 (file)
@@ -1435,22 +1435,40 @@ static int dw2102_rc_query(struct dvb_usb_device *d, u32 *event, int *state)
        return 0;
 }
 
+enum dw2102_table_entry {
+       CYPRESS_DW2102,
+       CYPRESS_DW2101,
+       CYPRESS_DW2104,
+       TEVII_S650,
+       TERRATEC_CINERGY_S,
+       CYPRESS_DW3101,
+       TEVII_S630,
+       PROF_1100,
+       TEVII_S660,
+       PROF_7500,
+       GENIATECH_SU3000,
+       TERRATEC_CINERGY_S2,
+       TEVII_S480_1,
+       TEVII_S480_2,
+       X3M_SPC1400HD,
+};
+
 static struct usb_device_id dw2102_table[] = {
-       {USB_DEVICE(USB_VID_CYPRESS, USB_PID_DW2102)},
-       {USB_DEVICE(USB_VID_CYPRESS, 0x2101)},
-       {USB_DEVICE(USB_VID_CYPRESS, USB_PID_DW2104)},
-       {USB_DEVICE(0x9022, USB_PID_TEVII_S650)},
-       {USB_DEVICE(USB_VID_TERRATEC, USB_PID_CINERGY_S)},
-       {USB_DEVICE(USB_VID_CYPRESS, USB_PID_DW3101)},
-       {USB_DEVICE(0x9022, USB_PID_TEVII_S630)},
-       {USB_DEVICE(0x3011, USB_PID_PROF_1100)},
-       {USB_DEVICE(0x9022, USB_PID_TEVII_S660)},
-       {USB_DEVICE(0x3034, 0x7500)},
-       {USB_DEVICE(0x1f4d, 0x3000)},
-       {USB_DEVICE(USB_VID_TERRATEC, 0x00a8)},
-       {USB_DEVICE(0x9022, USB_PID_TEVII_S480_1)},
-       {USB_DEVICE(0x9022, USB_PID_TEVII_S480_2)},
-       {USB_DEVICE(0x1f4d, 0x3100)},
+       [CYPRESS_DW2102] = {USB_DEVICE(USB_VID_CYPRESS, USB_PID_DW2102)},
+       [CYPRESS_DW2101] = {USB_DEVICE(USB_VID_CYPRESS, 0x2101)},
+       [CYPRESS_DW2104] = {USB_DEVICE(USB_VID_CYPRESS, USB_PID_DW2104)},
+       [TEVII_S650] = {USB_DEVICE(0x9022, USB_PID_TEVII_S650)},
+       [TERRATEC_CINERGY_S] = {USB_DEVICE(USB_VID_TERRATEC, USB_PID_CINERGY_S)},
+       [CYPRESS_DW3101] = {USB_DEVICE(USB_VID_CYPRESS, USB_PID_DW3101)},
+       [TEVII_S630] = {USB_DEVICE(0x9022, USB_PID_TEVII_S630)},
+       [PROF_1100] = {USB_DEVICE(0x3011, USB_PID_PROF_1100)},
+       [TEVII_S660] = {USB_DEVICE(0x9022, USB_PID_TEVII_S660)},
+       [PROF_7500] = {USB_DEVICE(0x3034, 0x7500)},
+       [GENIATECH_SU3000] = {USB_DEVICE(0x1f4d, 0x3000)},
+       [TERRATEC_CINERGY_S2] = {USB_DEVICE(USB_VID_TERRATEC, 0x00a8)},
+       [TEVII_S480_1] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_1)},
+       [TEVII_S480_2] = {USB_DEVICE(0x9022, USB_PID_TEVII_S480_2)},
+       [X3M_SPC1400HD] = {USB_DEVICE(0x1f4d, 0x3100)},
        { }
 };
 
@@ -1610,15 +1628,15 @@ static struct dvb_usb_device_properties dw2102_properties = {
        .num_device_descs = 3,
        .devices = {
                {"DVBWorld DVB-S 2102 USB2.0",
-                       {&dw2102_table[0], NULL},
+                       {&dw2102_table[CYPRESS_DW2102], NULL},
                        {NULL},
                },
                {"DVBWorld DVB-S 2101 USB2.0",
-                       {&dw2102_table[1], NULL},
+                       {&dw2102_table[CYPRESS_DW2101], NULL},
                        {NULL},
                },
                {"TerraTec Cinergy S USB",
-                       {&dw2102_table[4], NULL},
+                       {&dw2102_table[TERRATEC_CINERGY_S], NULL},
                        {NULL},
                },
        }
@@ -1664,11 +1682,11 @@ static struct dvb_usb_device_properties dw2104_properties = {
        .num_device_descs = 2,
        .devices = {
                { "DVBWorld DW2104 USB2.0",
-                       {&dw2102_table[2], NULL},
+                       {&dw2102_table[CYPRESS_DW2104], NULL},
                        {NULL},
                },
                { "TeVii S650 USB2.0",
-                       {&dw2102_table[3], NULL},
+                       {&dw2102_table[TEVII_S650], NULL},
                        {NULL},
                },
        }
@@ -1715,7 +1733,7 @@ static struct dvb_usb_device_properties dw3101_properties = {
        .num_device_descs = 1,
        .devices = {
                { "DVBWorld DVB-C 3101 USB2.0",
-                       {&dw2102_table[5], NULL},
+                       {&dw2102_table[CYPRESS_DW3101], NULL},
                        {NULL},
                },
        }
@@ -1761,7 +1779,7 @@ static struct dvb_usb_device_properties s6x0_properties = {
        .num_device_descs = 1,
        .devices = {
                {"TeVii S630 USB",
-                       {&dw2102_table[6], NULL},
+                       {&dw2102_table[TEVII_S630], NULL},
                        {NULL},
                },
        }
@@ -1770,33 +1788,33 @@ static struct dvb_usb_device_properties s6x0_properties = {
 struct dvb_usb_device_properties *p1100;
 static struct dvb_usb_device_description d1100 = {
        "Prof 1100 USB ",
-       {&dw2102_table[7], NULL},
+       {&dw2102_table[PROF_1100], NULL},
        {NULL},
 };
 
 struct dvb_usb_device_properties *s660;
 static struct dvb_usb_device_description d660 = {
        "TeVii S660 USB",
-       {&dw2102_table[8], NULL},
+       {&dw2102_table[TEVII_S660], NULL},
        {NULL},
 };
 
 static struct dvb_usb_device_description d480_1 = {
        "TeVii S480.1 USB",
-       {&dw2102_table[12], NULL},
+       {&dw2102_table[TEVII_S480_1], NULL},
        {NULL},
 };
 
 static struct dvb_usb_device_description d480_2 = {
        "TeVii S480.2 USB",
-       {&dw2102_table[13], NULL},
+       {&dw2102_table[TEVII_S480_2], NULL},
        {NULL},
 };
 
 struct dvb_usb_device_properties *p7500;
 static struct dvb_usb_device_description d7500 = {
        "Prof 7500 USB DVB-S2",
-       {&dw2102_table[9], NULL},
+       {&dw2102_table[PROF_7500], NULL},
        {NULL},
 };
 
@@ -1842,15 +1860,15 @@ static struct dvb_usb_device_properties su3000_properties = {
        .num_device_descs = 3,
        .devices = {
                { "SU3000HD DVB-S USB2.0",
-                       { &dw2102_table[10], NULL },
+                       { &dw2102_table[GENIATECH_SU3000], NULL },
                        { NULL },
                },
                { "Terratec Cinergy S2 USB HD",
-                       { &dw2102_table[11], NULL },
+                       { &dw2102_table[TERRATEC_CINERGY_S2], NULL },
                        { NULL },
                },
                { "X3M TV SPC1400HD PCI",
-                       { &dw2102_table[14], NULL },
+                       { &dw2102_table[X3M_SPC1400HD], NULL },
                        { NULL },
                },
        }
@@ -1859,12 +1877,11 @@ static struct dvb_usb_device_properties su3000_properties = {
 static int dw2102_probe(struct usb_interface *intf,
                const struct usb_device_id *id)
 {
-       p1100 = kzalloc(sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
+       p1100 = kmemdup(&s6x0_properties,
+                       sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
        if (!p1100)
                return -ENOMEM;
        /* copy default structure */
-       memcpy(p1100, &s6x0_properties,
-                       sizeof(struct dvb_usb_device_properties));
        /* fill only different fields */
        p1100->firmware = "dvb-usb-p1100.fw";
        p1100->devices[0] = d1100;
@@ -1872,13 +1889,12 @@ static int dw2102_probe(struct usb_interface *intf,
        p1100->rc.legacy.rc_map_size = ARRAY_SIZE(rc_map_tbs_table);
        p1100->adapter->fe[0].frontend_attach = stv0288_frontend_attach;
 
-       s660 = kzalloc(sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
+       s660 = kmemdup(&s6x0_properties,
+                      sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
        if (!s660) {
                kfree(p1100);
                return -ENOMEM;
        }
-       memcpy(s660, &s6x0_properties,
-                       sizeof(struct dvb_usb_device_properties));
        s660->firmware = "dvb-usb-s660.fw";
        s660->num_device_descs = 3;
        s660->devices[0] = d660;
@@ -1886,14 +1902,13 @@ static int dw2102_probe(struct usb_interface *intf,
        s660->devices[2] = d480_2;
        s660->adapter->fe[0].frontend_attach = ds3000_frontend_attach;
 
-       p7500 = kzalloc(sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
+       p7500 = kmemdup(&s6x0_properties,
+                       sizeof(struct dvb_usb_device_properties), GFP_KERNEL);
        if (!p7500) {
                kfree(p1100);
                kfree(s660);
                return -ENOMEM;
        }
-       memcpy(p7500, &s6x0_properties,
-                       sizeof(struct dvb_usb_device_properties));
        p7500->firmware = "dvb-usb-p7500.fw";
        p7500->devices[0] = d7500;
        p7500->rc.legacy.rc_map_table = rc_map_tbs_table;