| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
|  | 2 | *   Additional mixer mapping | 
|  | 3 | * | 
|  | 4 | *   Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de> | 
|  | 5 | * | 
|  | 6 | *   This program is free software; you can redistribute it and/or modify | 
|  | 7 | *   it under the terms of the GNU General Public License as published by | 
|  | 8 | *   the Free Software Foundation; either version 2 of the License, or | 
|  | 9 | *   (at your option) any later version. | 
|  | 10 | * | 
|  | 11 | *   This program is distributed in the hope that it will be useful, | 
|  | 12 | *   but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | 13 | *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | 14 | *   GNU General Public License for more details. | 
|  | 15 | * | 
|  | 16 | *   You should have received a copy of the GNU General Public License | 
|  | 17 | *   along with this program; if not, write to the Free Software | 
|  | 18 | *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA | 
|  | 19 | * | 
|  | 20 | */ | 
|  | 21 |  | 
|  | 22 |  | 
|  | 23 | struct usbmix_name_map { | 
|  | 24 | int id; | 
|  | 25 | const char *name; | 
|  | 26 | int control; | 
|  | 27 | }; | 
|  | 28 |  | 
|  | 29 | struct usbmix_ctl_map { | 
|  | 30 | int vendor; | 
|  | 31 | int product; | 
|  | 32 | const struct usbmix_name_map *map; | 
|  | 33 | int ignore_ctl_error; | 
|  | 34 | }; | 
|  | 35 |  | 
|  | 36 | /* | 
|  | 37 | * USB control mappers for SB Exitigy | 
|  | 38 | */ | 
|  | 39 |  | 
|  | 40 | /* | 
|  | 41 | * Topology of SB Extigy (see on the wide screen :) | 
|  | 42 |  | 
|  | 43 | USB_IN[1] --->FU[2]------------------------------+->MU[16]-->PU[17]-+->FU[18]--+->EU[27]--+->EU[21]-->FU[22]--+->FU[23] > Dig_OUT[24] | 
|  | 44 | ^                  |          |          |                   | | 
|  | 45 | USB_IN[3] -+->SU[5]-->FU[6]--+->MU[14] ->PU[15]->+                  |          |          |                   +->FU[25] > Dig_OUT[26] | 
|  | 46 | ^                 ^                   |                  |          |          | | 
|  | 47 | Dig_IN[4] -+                 |                   |                  |          |          +->FU[28]---------------------> Spk_OUT[19] | 
|  | 48 | |                   |                  |          | | 
|  | 49 | Lin-IN[7] -+-->FU[8]---------+                   |                  |          +----------------------------------------> Hph_OUT[20] | 
|  | 50 | |                                     |                  | | 
|  | 51 | Mic-IN[9] --+->FU[10]----------------------------+                  | | 
|  | 52 | ||                                                       | | 
|  | 53 | ||  +----------------------------------------------------+ | 
|  | 54 | VV  V | 
|  | 55 | ++--+->SU[11]-->FU[12] --------------------------------------------------------------------------------------> USB_OUT[13] | 
|  | 56 | */ | 
|  | 57 |  | 
|  | 58 | static struct usbmix_name_map extigy_map[] = { | 
|  | 59 | /* 1: IT pcm */ | 
|  | 60 | { 2, "PCM Playback" }, /* FU */ | 
|  | 61 | /* 3: IT pcm */ | 
|  | 62 | /* 4: IT digital in */ | 
|  | 63 | { 5, NULL }, /* DISABLED: this seems to be bogus on some firmware */ | 
|  | 64 | { 6, "Digital In" }, /* FU */ | 
|  | 65 | /* 7: IT line */ | 
|  | 66 | { 8, "Line Playback" }, /* FU */ | 
|  | 67 | /* 9: IT mic */ | 
|  | 68 | { 10, "Mic Playback" }, /* FU */ | 
|  | 69 | { 11, "Capture Input Source" }, /* SU */ | 
|  | 70 | { 12, "Capture" }, /* FU */ | 
|  | 71 | /* 13: OT pcm capture */ | 
|  | 72 | /* 14: MU (w/o controls) */ | 
|  | 73 | /* 15: PU (3D enh) */ | 
|  | 74 | /* 16: MU (w/o controls) */ | 
|  | 75 | { 17, NULL, 1 }, /* DISABLED: PU-switch (any effect?) */ | 
|  | 76 | { 17, "Channel Routing", 2 },	/* PU: mode select */ | 
|  | 77 | { 18, "Tone Control - Bass", USB_FEATURE_BASS }, /* FU */ | 
|  | 78 | { 18, "Tone Control - Treble", USB_FEATURE_TREBLE }, /* FU */ | 
|  | 79 | { 18, "Master Playback" }, /* FU; others */ | 
|  | 80 | /* 19: OT speaker */ | 
|  | 81 | /* 20: OT headphone */ | 
|  | 82 | { 21, NULL }, /* DISABLED: EU (for what?) */ | 
|  | 83 | { 22, "Digital Out Playback" }, /* FU */ | 
|  | 84 | { 23, "Digital Out1 Playback" }, /* FU */  /* FIXME: corresponds to 24 */ | 
|  | 85 | /* 24: OT digital out */ | 
|  | 86 | { 25, "IEC958 Optical Playback" }, /* FU */ | 
|  | 87 | { 26, "IEC958 Optical Playback" }, /* OT */ | 
|  | 88 | { 27, NULL }, /* DISABLED: EU (for what?) */ | 
|  | 89 | /* 28: FU speaker (mute) */ | 
|  | 90 | { 29, NULL }, /* Digital Input Playback Source? */ | 
|  | 91 | { 0 } /* terminator */ | 
|  | 92 | }; | 
|  | 93 |  | 
|  | 94 | /* LineX FM Transmitter entry - needed to bypass controls bug */ | 
|  | 95 | static struct usbmix_name_map linex_map[] = { | 
|  | 96 | /* 1: IT pcm */ | 
|  | 97 | /* 2: OT Speaker */ | 
|  | 98 | { 3, "Master" }, /* FU: master volume - left / right / mute */ | 
|  | 99 | { 0 } /* terminator */ | 
|  | 100 | }; | 
|  | 101 |  | 
|  | 102 | /* Section "justlink_map" below added by James Courtier-Dutton <James@superbug.demon.co.uk> | 
|  | 103 | * sourced from Maplin Electronics (http://www.maplin.co.uk), part number A56AK | 
|  | 104 | * Part has 2 connectors that act as a single output. (TOSLINK Optical for digital out, and 3.5mm Jack for Analogue out.) | 
|  | 105 | * The USB Mixer publishes a Microphone and extra Volume controls for it, but none exist on the device, | 
|  | 106 | * so this map removes all unwanted sliders from alsamixer | 
|  | 107 | */ | 
|  | 108 |  | 
|  | 109 | static struct usbmix_name_map justlink_map[] = { | 
|  | 110 | /* 1: IT pcm playback */ | 
|  | 111 | /* 2: Not present */ | 
|  | 112 | { 3, NULL}, /* IT mic (No mic input on device) */ | 
|  | 113 | /* 4: Not present */ | 
|  | 114 | /* 5: OT speacker */ | 
|  | 115 | /* 6: OT pcm capture */ | 
|  | 116 | { 7, "Master Playback" }, /* Mute/volume for speaker */ | 
|  | 117 | { 8, NULL }, /* Capture Switch (No capture inputs on device) */ | 
|  | 118 | { 9, NULL }, /* Capture Mute/volume (No capture inputs on device */ | 
|  | 119 | /* 0xa: Not present */ | 
|  | 120 | /* 0xb: MU (w/o controls) */ | 
|  | 121 | { 0xc, NULL }, /* Mic feedback Mute/volume (No capture inputs on device) */ | 
|  | 122 | { 0 } /* terminator */ | 
|  | 123 | }; | 
|  | 124 |  | 
|  | 125 | /* | 
|  | 126 | * Control map entries | 
|  | 127 | */ | 
|  | 128 |  | 
|  | 129 | static struct usbmix_ctl_map usbmix_ctl_maps[] = { | 
|  | 130 | { 0x41e, 0x3000, extigy_map, 1 }, | 
|  | 131 | { 0x8bb, 0x2702, linex_map, 1 }, | 
|  | 132 | { 0xc45, 0x1158, justlink_map, 0 }, | 
|  | 133 | { 0 } /* terminator */ | 
|  | 134 | }; | 
|  | 135 |  |