Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
[powerpc.git] / sound / usb / usbmixer_maps.c
index 4918a18..c126443 100644 (file)
@@ -26,10 +26,16 @@ struct usbmix_name_map {
        int control;
 };
 
+struct usbmix_selector_map {
+       int id;
+       int count;
+       const char **names;
+};
+
 struct usbmix_ctl_map {
-       int vendor;
-       int product;
+       u32 id;
        const struct usbmix_name_map *map;
+       const struct usbmix_selector_map *selector_map;
        int ignore_ctl_error;
 };
 
@@ -162,6 +168,25 @@ static struct usbmix_name_map audigy2nx_map[] = {
        { 0 } /* terminator */
 };
 
+static struct usbmix_selector_map audigy2nx_selectors[] = {
+       {
+               .id = 14, /* Capture Source */
+               .count = 3,
+               .names = (const char*[]) {"Line", "Digital In", "What-U-Hear"}
+       },
+       {
+               .id = 29, /* Digital Out Source */
+               .count = 3,
+               .names = (const char*[]) {"Front", "PCM", "Digital In"}
+       },
+       {
+               .id = 31, /* Headphone Source */
+               .count = 2,
+               .names = (const char*[]) {"Front", "Side"}
+       },
+       { 0 } /* terminator */
+};
+
 /* LineX FM Transmitter entry - needed to bypass controls bug */
 static struct usbmix_name_map linex_map[] = {
        /* 1: IT pcm */
@@ -198,11 +223,39 @@ static struct usbmix_name_map justlink_map[] = {
  */
 
 static struct usbmix_ctl_map usbmix_ctl_maps[] = {
-       { 0x41e, 0x3000, extigy_map, 1 },
-       { 0x41e, 0x3010, mp3plus_map, 0 },
-       { 0x41e, 0x3020, audigy2nx_map, 0 },
-       { 0x8bb, 0x2702, linex_map, 1 },
-       { 0xc45, 0x1158, justlink_map, 0 },
+       {
+               .id = USB_ID(0x041e, 0x3000),
+               .map = extigy_map,
+               .ignore_ctl_error = 1,
+       },
+       {
+               .id = USB_ID(0x041e, 0x3010),
+               .map = mp3plus_map,
+       },
+       {
+               .id = USB_ID(0x041e, 0x3020),
+               .map = audigy2nx_map,
+               .selector_map = audigy2nx_selectors,
+       },
+       {
+               /* Hercules DJ Console (Windows Edition) */
+               .id = USB_ID(0x06f8, 0xb000),
+               .ignore_ctl_error = 1,
+       },
+       {
+               /* Hercules DJ Console (Macintosh Edition) */
+               .id = USB_ID(0x06f8, 0xd002),
+               .ignore_ctl_error = 1,
+       },
+       {
+               .id = USB_ID(0x08bb, 0x2702),
+               .map = linex_map,
+               .ignore_ctl_error = 1,
+       },
+       {
+               .id = USB_ID(0x0c45, 0x1158),
+               .map = justlink_map,
+       },
        { 0 } /* terminator */
 };