diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 10:47:46 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 10:47:46 -0500 |
commit | a421018e8c10e5593a1fee076af72a66c3fe8ca3 (patch) | |
tree | 2854511845d0e07d33726a13eda6de1059a5c9df /sound/isa/wss/wss_lib.c | |
parent | 3ad1f3b35e8309ec93454dbf89beaafcdb5312da (diff) | |
parent | 86e1d57e4f24ca27ce813bdc2afaac4adafcbaf4 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: (294 commits)
S3C64XX: Staticise platform data for PCM devices
ASoC: Rename controls with a / in wm_hubs
snd-fm801: autodetect SF64-PCR (tuner-only) card
ALSA: tea575x-tuner: fix mute
ASoC: au1x: dbdma2: plug memleak in pcm device creation error path
ASoC: au1x: dbdma2: fix oops on soc device removal.
ALSA: hda - Fix memory leaks in the previous patch
ALSA: hda - Add ALC661/259, ALC892/888VD support
ALSA: opti9xx: remove snd_opti9xx fields
ALSA: aaci - Clean up duplicate code
ALSA: usb - Fix mixer map for Hercules Gamesurround Muse Pocket LT
ALSA: hda - Add position_fix quirk for HP dv3
ALSA: hda - Add a pin-fix for FSC Amilo Pi1505
ALSA: hda - Fix Cxt5047 test mode
ASoC: pxa/raumfeld: adopt new snd_soc_dai_set_pll() API
ASoC: sh: fsi: Add runtime PM support
sh: ms7724se: Add runtime PM support for FSI
ALSA: hda - Add a position_fix quirk for MSI Wind U115
ALSA: opti-miro: add PnP detection
ALSA: opti-miro: separate comon probing code
...
Diffstat (limited to 'sound/isa/wss/wss_lib.c')
-rw-r--r-- | sound/isa/wss/wss_lib.c | 105 |
1 files changed, 40 insertions, 65 deletions
diff --git a/sound/isa/wss/wss_lib.c b/sound/isa/wss/wss_lib.c index 5d2ba1b749ab..5b9d6c18bc45 100644 --- a/sound/isa/wss/wss_lib.c +++ b/sound/isa/wss/wss_lib.c | |||
@@ -1682,7 +1682,7 @@ static void snd_wss_resume(struct snd_wss *chip) | |||
1682 | } | 1682 | } |
1683 | #endif /* CONFIG_PM */ | 1683 | #endif /* CONFIG_PM */ |
1684 | 1684 | ||
1685 | int snd_wss_free(struct snd_wss *chip) | 1685 | static int snd_wss_free(struct snd_wss *chip) |
1686 | { | 1686 | { |
1687 | release_and_free_resource(chip->res_port); | 1687 | release_and_free_resource(chip->res_port); |
1688 | release_and_free_resource(chip->res_cport); | 1688 | release_and_free_resource(chip->res_cport); |
@@ -1705,7 +1705,6 @@ int snd_wss_free(struct snd_wss *chip) | |||
1705 | kfree(chip); | 1705 | kfree(chip); |
1706 | return 0; | 1706 | return 0; |
1707 | } | 1707 | } |
1708 | EXPORT_SYMBOL(snd_wss_free); | ||
1709 | 1708 | ||
1710 | static int snd_wss_dev_free(struct snd_device *device) | 1709 | static int snd_wss_dev_free(struct snd_device *device) |
1711 | { | 1710 | { |
@@ -2198,84 +2197,61 @@ EXPORT_SYMBOL(snd_wss_put_double); | |||
2198 | static const DECLARE_TLV_DB_SCALE(db_scale_6bit, -9450, 150, 0); | 2197 | static const DECLARE_TLV_DB_SCALE(db_scale_6bit, -9450, 150, 0); |
2199 | static const DECLARE_TLV_DB_SCALE(db_scale_5bit_12db_max, -3450, 150, 0); | 2198 | static const DECLARE_TLV_DB_SCALE(db_scale_5bit_12db_max, -3450, 150, 0); |
2200 | static const DECLARE_TLV_DB_SCALE(db_scale_rec_gain, 0, 150, 0); | 2199 | static const DECLARE_TLV_DB_SCALE(db_scale_rec_gain, 0, 150, 0); |
2200 | static const DECLARE_TLV_DB_SCALE(db_scale_4bit, -4500, 300, 0); | ||
2201 | 2201 | ||
2202 | static struct snd_kcontrol_new snd_ad1848_controls[] = { | 2202 | static struct snd_kcontrol_new snd_wss_controls[] = { |
2203 | WSS_DOUBLE("PCM Playback Switch", 0, CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, | 2203 | WSS_DOUBLE("PCM Playback Switch", 0, |
2204 | 7, 7, 1, 1), | 2204 | CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 7, 7, 1, 1), |
2205 | WSS_DOUBLE_TLV("PCM Playback Volume", 0, | 2205 | WSS_DOUBLE_TLV("PCM Playback Volume", 0, |
2206 | CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 0, 0, 63, 1, | 2206 | CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 0, 0, 63, 1, |
2207 | db_scale_6bit), | 2207 | db_scale_6bit), |
2208 | WSS_DOUBLE("Aux Playback Switch", 0, | 2208 | WSS_DOUBLE("Aux Playback Switch", 0, |
2209 | CS4231_AUX1_LEFT_INPUT, CS4231_AUX1_RIGHT_INPUT, 7, 7, 1, 1), | 2209 | CS4231_AUX1_LEFT_INPUT, CS4231_AUX1_RIGHT_INPUT, 7, 7, 1, 1), |
2210 | WSS_DOUBLE_TLV("Aux Playback Volume", 0, | 2210 | WSS_DOUBLE_TLV("Aux Playback Volume", 0, |
2211 | CS4231_AUX1_LEFT_INPUT, CS4231_AUX1_RIGHT_INPUT, 0, 0, 31, 1, | 2211 | CS4231_AUX1_LEFT_INPUT, CS4231_AUX1_RIGHT_INPUT, 0, 0, 31, 1, |
2212 | db_scale_5bit_12db_max), | 2212 | db_scale_5bit_12db_max), |
2213 | WSS_DOUBLE("Aux Playback Switch", 1, | 2213 | WSS_DOUBLE("Aux Playback Switch", 1, |
2214 | CS4231_AUX2_LEFT_INPUT, CS4231_AUX2_RIGHT_INPUT, 7, 7, 1, 1), | 2214 | CS4231_AUX2_LEFT_INPUT, CS4231_AUX2_RIGHT_INPUT, 7, 7, 1, 1), |
2215 | WSS_DOUBLE_TLV("Aux Playback Volume", 1, | 2215 | WSS_DOUBLE_TLV("Aux Playback Volume", 1, |
2216 | CS4231_AUX2_LEFT_INPUT, CS4231_AUX2_RIGHT_INPUT, 0, 0, 31, 1, | 2216 | CS4231_AUX2_LEFT_INPUT, CS4231_AUX2_RIGHT_INPUT, 0, 0, 31, 1, |
2217 | db_scale_5bit_12db_max), | 2217 | db_scale_5bit_12db_max), |
2218 | WSS_DOUBLE_TLV("Capture Volume", 0, CS4231_LEFT_INPUT, CS4231_RIGHT_INPUT, | 2218 | WSS_DOUBLE_TLV("Capture Volume", 0, CS4231_LEFT_INPUT, CS4231_RIGHT_INPUT, |
2219 | 0, 0, 15, 0, db_scale_rec_gain), | 2219 | 0, 0, 15, 0, db_scale_rec_gain), |
2220 | { | 2220 | { |
2221 | .name = "Capture Source", | ||
2222 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | 2221 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, |
2222 | .name = "Capture Source", | ||
2223 | .info = snd_wss_info_mux, | 2223 | .info = snd_wss_info_mux, |
2224 | .get = snd_wss_get_mux, | 2224 | .get = snd_wss_get_mux, |
2225 | .put = snd_wss_put_mux, | 2225 | .put = snd_wss_put_mux, |
2226 | }, | 2226 | }, |
2227 | WSS_SINGLE("Loopback Capture Switch", 0, CS4231_LOOPBACK, 0, 1, 0), | 2227 | WSS_DOUBLE("Mic Boost (+20dB)", 0, |
2228 | WSS_SINGLE_TLV("Loopback Capture Volume", 0, CS4231_LOOPBACK, 1, 63, 0, | 2228 | CS4231_LEFT_INPUT, CS4231_RIGHT_INPUT, 5, 5, 1, 0), |
2229 | db_scale_6bit), | 2229 | WSS_SINGLE("Loopback Capture Switch", 0, |
2230 | }; | 2230 | CS4231_LOOPBACK, 0, 1, 0), |
2231 | 2231 | WSS_SINGLE_TLV("Loopback Capture Volume", 0, CS4231_LOOPBACK, 2, 63, 1, | |
2232 | static struct snd_kcontrol_new snd_wss_controls[] = { | 2232 | db_scale_6bit), |
2233 | WSS_DOUBLE("PCM Playback Switch", 0, | ||
2234 | CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 7, 7, 1, 1), | ||
2235 | WSS_DOUBLE("PCM Playback Volume", 0, | ||
2236 | CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 0, 0, 63, 1), | ||
2237 | WSS_DOUBLE("Line Playback Switch", 0, | 2233 | WSS_DOUBLE("Line Playback Switch", 0, |
2238 | CS4231_LEFT_LINE_IN, CS4231_RIGHT_LINE_IN, 7, 7, 1, 1), | 2234 | CS4231_LEFT_LINE_IN, CS4231_RIGHT_LINE_IN, 7, 7, 1, 1), |
2239 | WSS_DOUBLE("Line Playback Volume", 0, | 2235 | WSS_DOUBLE_TLV("Line Playback Volume", 0, |
2240 | CS4231_LEFT_LINE_IN, CS4231_RIGHT_LINE_IN, 0, 0, 31, 1), | 2236 | CS4231_LEFT_LINE_IN, CS4231_RIGHT_LINE_IN, 0, 0, 31, 1, |
2241 | WSS_DOUBLE("Aux Playback Switch", 0, | 2237 | db_scale_5bit_12db_max), |
2242 | CS4231_AUX1_LEFT_INPUT, CS4231_AUX1_RIGHT_INPUT, 7, 7, 1, 1), | 2238 | WSS_SINGLE("Beep Playback Switch", 0, |
2243 | WSS_DOUBLE("Aux Playback Volume", 0, | ||
2244 | CS4231_AUX1_LEFT_INPUT, CS4231_AUX1_RIGHT_INPUT, 0, 0, 31, 1), | ||
2245 | WSS_DOUBLE("Aux Playback Switch", 1, | ||
2246 | CS4231_AUX2_LEFT_INPUT, CS4231_AUX2_RIGHT_INPUT, 7, 7, 1, 1), | ||
2247 | WSS_DOUBLE("Aux Playback Volume", 1, | ||
2248 | CS4231_AUX2_LEFT_INPUT, CS4231_AUX2_RIGHT_INPUT, 0, 0, 31, 1), | ||
2249 | WSS_SINGLE("Mono Playback Switch", 0, | ||
2250 | CS4231_MONO_CTRL, 7, 1, 1), | 2239 | CS4231_MONO_CTRL, 7, 1, 1), |
2251 | WSS_SINGLE("Mono Playback Volume", 0, | 2240 | WSS_SINGLE_TLV("Beep Playback Volume", 0, |
2252 | CS4231_MONO_CTRL, 0, 15, 1), | 2241 | CS4231_MONO_CTRL, 0, 15, 1, |
2242 | db_scale_4bit), | ||
2253 | WSS_SINGLE("Mono Output Playback Switch", 0, | 2243 | WSS_SINGLE("Mono Output Playback Switch", 0, |
2254 | CS4231_MONO_CTRL, 6, 1, 1), | 2244 | CS4231_MONO_CTRL, 6, 1, 1), |
2255 | WSS_SINGLE("Mono Output Playback Bypass", 0, | 2245 | WSS_SINGLE("Beep Bypass Playback Switch", 0, |
2256 | CS4231_MONO_CTRL, 5, 1, 0), | 2246 | CS4231_MONO_CTRL, 5, 1, 0), |
2257 | WSS_DOUBLE("Capture Volume", 0, | ||
2258 | CS4231_LEFT_INPUT, CS4231_RIGHT_INPUT, 0, 0, 15, 0), | ||
2259 | { | ||
2260 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | ||
2261 | .name = "Capture Source", | ||
2262 | .info = snd_wss_info_mux, | ||
2263 | .get = snd_wss_get_mux, | ||
2264 | .put = snd_wss_put_mux, | ||
2265 | }, | ||
2266 | WSS_DOUBLE("Mic Boost", 0, | ||
2267 | CS4231_LEFT_INPUT, CS4231_RIGHT_INPUT, 5, 5, 1, 0), | ||
2268 | WSS_SINGLE("Loopback Capture Switch", 0, | ||
2269 | CS4231_LOOPBACK, 0, 1, 0), | ||
2270 | WSS_SINGLE("Loopback Capture Volume", 0, | ||
2271 | CS4231_LOOPBACK, 2, 63, 1) | ||
2272 | }; | 2247 | }; |
2273 | 2248 | ||
2274 | static struct snd_kcontrol_new snd_opti93x_controls[] = { | 2249 | static struct snd_kcontrol_new snd_opti93x_controls[] = { |
2275 | WSS_DOUBLE("Master Playback Switch", 0, | 2250 | WSS_DOUBLE("Master Playback Switch", 0, |
2276 | OPTi93X_OUT_LEFT, OPTi93X_OUT_RIGHT, 7, 7, 1, 1), | 2251 | OPTi93X_OUT_LEFT, OPTi93X_OUT_RIGHT, 7, 7, 1, 1), |
2277 | WSS_DOUBLE("Master Playback Volume", 0, | 2252 | WSS_DOUBLE_TLV("Master Playback Volume", 0, |
2278 | OPTi93X_OUT_LEFT, OPTi93X_OUT_RIGHT, 1, 1, 31, 1), | 2253 | OPTi93X_OUT_LEFT, OPTi93X_OUT_RIGHT, 1, 1, 31, 1, |
2254 | db_scale_6bit), | ||
2279 | WSS_DOUBLE("PCM Playback Switch", 0, | 2255 | WSS_DOUBLE("PCM Playback Switch", 0, |
2280 | CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 7, 7, 1, 1), | 2256 | CS4231_LEFT_OUTPUT, CS4231_RIGHT_OUTPUT, 7, 7, 1, 1), |
2281 | WSS_DOUBLE("PCM Playback Volume", 0, | 2257 | WSS_DOUBLE("PCM Playback Volume", 0, |
@@ -2334,22 +2310,21 @@ int snd_wss_mixer(struct snd_wss *chip) | |||
2334 | if (err < 0) | 2310 | if (err < 0) |
2335 | return err; | 2311 | return err; |
2336 | } | 2312 | } |
2337 | else if (chip->hardware & WSS_HW_AD1848_MASK) | 2313 | else { |
2338 | for (idx = 0; idx < ARRAY_SIZE(snd_ad1848_controls); idx++) { | 2314 | int count = ARRAY_SIZE(snd_wss_controls); |
2339 | err = snd_ctl_add(card, | 2315 | |
2340 | snd_ctl_new1(&snd_ad1848_controls[idx], | 2316 | /* Use only the first 11 entries on AD1848 */ |
2341 | chip)); | 2317 | if (chip->hardware & WSS_HW_AD1848_MASK) |
2342 | if (err < 0) | 2318 | count = 11; |
2343 | return err; | 2319 | |
2344 | } | 2320 | for (idx = 0; idx < count; idx++) { |
2345 | else | ||
2346 | for (idx = 0; idx < ARRAY_SIZE(snd_wss_controls); idx++) { | ||
2347 | err = snd_ctl_add(card, | 2321 | err = snd_ctl_add(card, |
2348 | snd_ctl_new1(&snd_wss_controls[idx], | 2322 | snd_ctl_new1(&snd_wss_controls[idx], |
2349 | chip)); | 2323 | chip)); |
2350 | if (err < 0) | 2324 | if (err < 0) |
2351 | return err; | 2325 | return err; |
2352 | } | 2326 | } |
2327 | } | ||
2353 | return 0; | 2328 | return 0; |
2354 | } | 2329 | } |
2355 | EXPORT_SYMBOL(snd_wss_mixer); | 2330 | EXPORT_SYMBOL(snd_wss_mixer); |