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