diff options
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/codecs/twl4030.c | 44 |
1 files changed, 31 insertions, 13 deletions
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c index 5dd7c81623a6..7bfabe5750e8 100644 --- a/sound/soc/codecs/twl4030.c +++ b/sound/soc/codecs/twl4030.c | |||
@@ -41,6 +41,11 @@ | |||
41 | /* Register descriptions are here */ | 41 | /* Register descriptions are here */ |
42 | #include <linux/mfd/twl4030-audio.h> | 42 | #include <linux/mfd/twl4030-audio.h> |
43 | 43 | ||
44 | /* TWL4030 PMBR1 Register */ | ||
45 | #define TWL4030_PMBR1_REG 0x0D | ||
46 | /* TWL4030 PMBR1 Register GPIO6 mux bits */ | ||
47 | #define TWL4030_GPIO6_PWM0_MUTE(value) ((value & 0x03) << 2) | ||
48 | |||
44 | /* Shadow register used by the audio driver */ | 49 | /* Shadow register used by the audio driver */ |
45 | #define TWL4030_REG_SW_SHADOW 0x4A | 50 | #define TWL4030_REG_SW_SHADOW 0x4A |
46 | #define TWL4030_CACHEREGNUM (TWL4030_REG_SW_SHADOW + 1) | 51 | #define TWL4030_CACHEREGNUM (TWL4030_REG_SW_SHADOW + 1) |
@@ -348,19 +353,32 @@ static void twl4030_init_chip(struct snd_soc_codec *codec) | |||
348 | 353 | ||
349 | pdata = twl4030_get_pdata(codec); | 354 | pdata = twl4030_get_pdata(codec); |
350 | 355 | ||
351 | if (pdata && pdata->hs_extmute && | 356 | if (pdata && pdata->hs_extmute) { |
352 | gpio_is_valid(pdata->hs_extmute_gpio)) { | 357 | if (gpio_is_valid(pdata->hs_extmute_gpio)) { |
353 | int ret; | 358 | int ret; |
354 | 359 | ||
355 | if (!pdata->hs_extmute_gpio) | 360 | if (!pdata->hs_extmute_gpio) |
356 | dev_warn(codec->dev, | 361 | dev_warn(codec->dev, |
357 | "Extmute GPIO is 0 is this correct?\n"); | 362 | "Extmute GPIO is 0 is this correct?\n"); |
358 | 363 | ||
359 | ret = gpio_request_one(pdata->hs_extmute_gpio, | 364 | ret = gpio_request_one(pdata->hs_extmute_gpio, |
360 | GPIOF_OUT_INIT_LOW, "hs_extmute"); | 365 | GPIOF_OUT_INIT_LOW, |
361 | if (ret) { | 366 | "hs_extmute"); |
362 | dev_err(codec->dev, "Failed to get hs_extmute GPIO\n"); | 367 | if (ret) { |
363 | pdata->hs_extmute_gpio = -1; | 368 | dev_err(codec->dev, |
369 | "Failed to get hs_extmute GPIO\n"); | ||
370 | pdata->hs_extmute_gpio = -1; | ||
371 | } | ||
372 | } else { | ||
373 | u8 pin_mux; | ||
374 | |||
375 | /* Set TWL4030 GPIO6 as EXTMUTE signal */ | ||
376 | twl_i2c_read_u8(TWL4030_MODULE_INTBR, &pin_mux, | ||
377 | TWL4030_PMBR1_REG); | ||
378 | pin_mux &= ~TWL4030_GPIO6_PWM0_MUTE(0x03); | ||
379 | pin_mux |= TWL4030_GPIO6_PWM0_MUTE(0x02); | ||
380 | twl_i2c_write_u8(TWL4030_MODULE_INTBR, pin_mux, | ||
381 | TWL4030_PMBR1_REG); | ||
364 | } | 382 | } |
365 | } | 383 | } |
366 | 384 | ||