Merge branch 'topic/asoc' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6 into for-2.6.39

+36 -6
+36 -6
sound/soc/omap/rx51.c
··· 40 41 #define RX51_TVOUT_SEL_GPIO 40 42 #define RX51_JACK_DETECT_GPIO 177 43 /* 44 * REVISIT: TWL4030 GPIO base in RX-51. Now statically defined to 192. This 45 * gpio is reserved in arch/arm/mach-omap2/board-rx51-peripherals.c ··· 51 RX51_JACK_DISABLED, 52 RX51_JACK_TVOUT, /* tv-out with stereo output */ 53 RX51_JACK_HP, /* headphone: stereo output, no mic */ 54 }; 55 56 static int rx51_spk_func; ··· 61 static void rx51_ext_control(struct snd_soc_codec *codec) 62 { 63 struct snd_soc_dapm_context *dapm = &codec->dapm; 64 - int hp = 0, tvout = 0; 65 66 switch (rx51_jack_func) { 67 case RX51_JACK_TVOUT: 68 tvout = 1; 69 case RX51_JACK_HP: 70 hp = 1; 71 break; ··· 87 snd_soc_dapm_enable_pin(dapm, "Headphone Jack"); 88 else 89 snd_soc_dapm_disable_pin(dapm, "Headphone Jack"); 90 91 gpio_set_value(RX51_TVOUT_SEL_GPIO, tvout); 92 ··· 240 { 241 .gpio = RX51_JACK_DETECT_GPIO, 242 .name = "avdet-gpio", 243 - .report = SND_JACK_VIDEOOUT, 244 .invert = 1, 245 .debounce_time = 200, 246 }, ··· 250 SND_SOC_DAPM_SPK("Ext Spk", rx51_spk_event), 251 SND_SOC_DAPM_MIC("DMic", NULL), 252 SND_SOC_DAPM_HP("Headphone Jack", rx51_hp_event), 253 }; 254 255 static const struct snd_soc_dapm_widget aic34_dapm_widgetsb[] = { ··· 263 {"Ext Spk", NULL, "HPROUT"}, 264 {"Headphone Jack", NULL, "LLOUT"}, 265 {"Headphone Jack", NULL, "RLOUT"}, 266 267 {"DMic Rate 64", NULL, "Mic Bias 2V"}, 268 {"Mic Bias 2V", NULL, "DMic"}, ··· 273 static const struct snd_soc_dapm_route audio_mapb[] = { 274 {"b LINE2R", NULL, "MONO_LOUT"}, 275 {"Earphone", NULL, "b HPLOUT"}, 276 }; 277 278 static const char *spk_function[] = {"Off", "On"}; 279 static const char *input_function[] = {"ADC", "Digital Mic"}; 280 - static const char *jack_function[] = {"Off", "TV-OUT", "Headphone"}; 281 282 static const struct soc_enum rx51_enum[] = { 283 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(spk_function), spk_function), ··· 295 rx51_get_input, rx51_set_input), 296 SOC_ENUM_EXT("Jack Function", rx51_enum[2], 297 rx51_get_jack, rx51_set_jack), 298 }; 299 300 static const struct snd_kcontrol_new aic34_rx51_controlsb[] = { ··· 331 return err; 332 snd_soc_limit_volume(codec, "TPA6130A2 Headphone Playback Volume", 42); 333 334 snd_soc_dapm_sync(dapm); 335 336 /* AV jack detection */ 337 err = snd_soc_jack_new(codec, "AV Jack", 338 - SND_JACK_VIDEOOUT, &rx51_av_jack); 339 if (err) 340 return err; 341 err = snd_soc_jack_add_gpios(&rx51_av_jack, ··· 417 if (!machine_is_nokia_rx51()) 418 return -ENODEV; 419 420 - err = gpio_request(RX51_TVOUT_SEL_GPIO, "tvout_sel"); 421 if (err) 422 goto err_gpio_tvout_sel; 423 - gpio_direction_output(RX51_TVOUT_SEL_GPIO, 0); 424 425 rx51_snd_device = platform_device_alloc("soc-audio", -1); 426 if (!rx51_snd_device) { ··· 442 err2: 443 platform_device_put(rx51_snd_device); 444 err1: 445 gpio_free(RX51_TVOUT_SEL_GPIO); 446 err_gpio_tvout_sel: 447 ··· 456 rx51_av_jack_gpios); 457 458 platform_device_unregister(rx51_snd_device); 459 gpio_free(RX51_TVOUT_SEL_GPIO); 460 } 461
··· 40 41 #define RX51_TVOUT_SEL_GPIO 40 42 #define RX51_JACK_DETECT_GPIO 177 43 + #define RX51_ECI_SW_GPIO 182 44 /* 45 * REVISIT: TWL4030 GPIO base in RX-51. Now statically defined to 192. This 46 * gpio is reserved in arch/arm/mach-omap2/board-rx51-peripherals.c ··· 50 RX51_JACK_DISABLED, 51 RX51_JACK_TVOUT, /* tv-out with stereo output */ 52 RX51_JACK_HP, /* headphone: stereo output, no mic */ 53 + RX51_JACK_HS, /* headset: stereo output with mic */ 54 }; 55 56 static int rx51_spk_func; ··· 59 static void rx51_ext_control(struct snd_soc_codec *codec) 60 { 61 struct snd_soc_dapm_context *dapm = &codec->dapm; 62 + int hp = 0, hs = 0, tvout = 0; 63 64 switch (rx51_jack_func) { 65 case RX51_JACK_TVOUT: 66 tvout = 1; 67 + hp = 1; 68 + break; 69 + case RX51_JACK_HS: 70 + hs = 1; 71 case RX51_JACK_HP: 72 hp = 1; 73 break; ··· 81 snd_soc_dapm_enable_pin(dapm, "Headphone Jack"); 82 else 83 snd_soc_dapm_disable_pin(dapm, "Headphone Jack"); 84 + if (hs) 85 + snd_soc_dapm_enable_pin(dapm, "HS Mic"); 86 + else 87 + snd_soc_dapm_disable_pin(dapm, "HS Mic"); 88 89 gpio_set_value(RX51_TVOUT_SEL_GPIO, tvout); 90 ··· 230 { 231 .gpio = RX51_JACK_DETECT_GPIO, 232 .name = "avdet-gpio", 233 + .report = SND_JACK_HEADSET, 234 .invert = 1, 235 .debounce_time = 200, 236 }, ··· 240 SND_SOC_DAPM_SPK("Ext Spk", rx51_spk_event), 241 SND_SOC_DAPM_MIC("DMic", NULL), 242 SND_SOC_DAPM_HP("Headphone Jack", rx51_hp_event), 243 + SND_SOC_DAPM_MIC("HS Mic", NULL), 244 + SND_SOC_DAPM_LINE("FM Transmitter", NULL), 245 }; 246 247 static const struct snd_soc_dapm_widget aic34_dapm_widgetsb[] = { ··· 251 {"Ext Spk", NULL, "HPROUT"}, 252 {"Headphone Jack", NULL, "LLOUT"}, 253 {"Headphone Jack", NULL, "RLOUT"}, 254 + {"FM Transmitter", NULL, "LLOUT"}, 255 + {"FM Transmitter", NULL, "RLOUT"}, 256 257 {"DMic Rate 64", NULL, "Mic Bias 2V"}, 258 {"Mic Bias 2V", NULL, "DMic"}, ··· 259 static const struct snd_soc_dapm_route audio_mapb[] = { 260 {"b LINE2R", NULL, "MONO_LOUT"}, 261 {"Earphone", NULL, "b HPLOUT"}, 262 + 263 + {"LINE1L", NULL, "b Mic Bias 2.5V"}, 264 + {"b Mic Bias 2.5V", NULL, "HS Mic"} 265 }; 266 267 static const char *spk_function[] = {"Off", "On"}; 268 static const char *input_function[] = {"ADC", "Digital Mic"}; 269 + static const char *jack_function[] = {"Off", "TV-OUT", "Headphone", "Headset"}; 270 271 static const struct soc_enum rx51_enum[] = { 272 SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(spk_function), spk_function), ··· 278 rx51_get_input, rx51_set_input), 279 SOC_ENUM_EXT("Jack Function", rx51_enum[2], 280 rx51_get_jack, rx51_set_jack), 281 + SOC_DAPM_PIN_SWITCH("FM Transmitter"), 282 }; 283 284 static const struct snd_kcontrol_new aic34_rx51_controlsb[] = { ··· 313 return err; 314 snd_soc_limit_volume(codec, "TPA6130A2 Headphone Playback Volume", 42); 315 316 + err = omap_mcbsp_st_add_controls(codec, 1); 317 + if (err < 0) 318 + return err; 319 + 320 snd_soc_dapm_sync(dapm); 321 322 /* AV jack detection */ 323 err = snd_soc_jack_new(codec, "AV Jack", 324 + SND_JACK_HEADSET | SND_JACK_VIDEOOUT, 325 + &rx51_av_jack); 326 if (err) 327 return err; 328 err = snd_soc_jack_add_gpios(&rx51_av_jack, ··· 394 if (!machine_is_nokia_rx51()) 395 return -ENODEV; 396 397 + err = gpio_request_one(RX51_TVOUT_SEL_GPIO, 398 + GPIOF_DIR_OUT | GPIOF_INIT_LOW, "tvout_sel"); 399 if (err) 400 goto err_gpio_tvout_sel; 401 + err = gpio_request_one(RX51_ECI_SW_GPIO, 402 + GPIOF_DIR_OUT | GPIOF_INIT_HIGH, "eci_sw"); 403 + if (err) 404 + goto err_gpio_eci_sw; 405 406 rx51_snd_device = platform_device_alloc("soc-audio", -1); 407 if (!rx51_snd_device) { ··· 415 err2: 416 platform_device_put(rx51_snd_device); 417 err1: 418 + gpio_free(RX51_ECI_SW_GPIO); 419 + err_gpio_eci_sw: 420 gpio_free(RX51_TVOUT_SEL_GPIO); 421 err_gpio_tvout_sel: 422 ··· 427 rx51_av_jack_gpios); 428 429 platform_device_unregister(rx51_snd_device); 430 + gpio_free(RX51_ECI_SW_GPIO); 431 gpio_free(RX51_TVOUT_SEL_GPIO); 432 } 433