From ec588ae6c21ae20a22ce13a287728a220935b8ee Mon Sep 17 00:00:00 2001 From: Jarkko Nikula Date: Wed, 6 Oct 2010 16:47:26 +0300 Subject: ASoC: omap: Remove needless prints from machine drivers It is currently completely normal to execute these machine drivers code on different boards if the kernel includes support for multiple boards so no error message should be printed if the machine_is_xxx does not match with the machine driver. Therefore remove these pr_err and pr_debug prints in those cases. Signed-off-by: Jarkko Nikula Acked-by: Mark Brown Signed-off-by: Liam Girdwood diff --git a/sound/soc/omap/am3517evm.c b/sound/soc/omap/am3517evm.c index 68bd902..979dd50 100644 --- a/sound/soc/omap/am3517evm.c +++ b/sound/soc/omap/am3517evm.c @@ -157,10 +157,8 @@ static int __init am3517evm_soc_init(void) { int ret; - if (!machine_is_omap3517evm()) { - pr_err("Not OMAP3517 / AM3517 EVM!\n"); + if (!machine_is_omap3517evm()) return -ENODEV; - } pr_info("OMAP3517 / AM3517 EVM SoC init\n"); am3517evm_snd_device = platform_device_alloc("soc-audio", -1); diff --git a/sound/soc/omap/igep0020.c b/sound/soc/omap/igep0020.c index d296cfc..fd3a40f 100644 --- a/sound/soc/omap/igep0020.c +++ b/sound/soc/omap/igep0020.c @@ -101,10 +101,8 @@ static int __init igep2_soc_init(void) { int ret; - if (!machine_is_igep0020()) { - pr_debug("Not IGEP v2!\n"); + if (!machine_is_igep0020()) return -ENODEV; - } printk(KERN_INFO "IGEP v2 SoC init\n"); igep2_snd_device = platform_device_alloc("soc-audio", -1); diff --git a/sound/soc/omap/omap2evm.c b/sound/soc/omap/omap2evm.c index 38cd189..cf3fc8a 100644 --- a/sound/soc/omap/omap2evm.c +++ b/sound/soc/omap/omap2evm.c @@ -103,10 +103,8 @@ static int __init omap2evm_soc_init(void) { int ret; - if (!machine_is_omap2evm()) { - pr_debug("Not omap2evm!\n"); + if (!machine_is_omap2evm()) return -ENODEV; - } printk(KERN_INFO "omap2evm SoC init\n"); omap2evm_snd_device = platform_device_alloc("soc-audio", -1); diff --git a/sound/soc/omap/omap3beagle.c b/sound/soc/omap/omap3beagle.c index 7c11e1a..e56832b 100644 --- a/sound/soc/omap/omap3beagle.c +++ b/sound/soc/omap/omap3beagle.c @@ -112,10 +112,8 @@ static int __init omap3beagle_soc_init(void) { int ret; - if (!(machine_is_omap3_beagle() || machine_is_devkit8000())) { - pr_debug("Not OMAP3 Beagle or Devkit8000!\n"); + if (!(machine_is_omap3_beagle() || machine_is_devkit8000())) return -ENODEV; - } pr_info("OMAP3 Beagle/Devkit8000 SoC init\n"); omap3beagle_snd_device = platform_device_alloc("soc-audio", -1); diff --git a/sound/soc/omap/omap3evm.c b/sound/soc/omap/omap3evm.c index 1ac5bab..810f1e36 100644 --- a/sound/soc/omap/omap3evm.c +++ b/sound/soc/omap/omap3evm.c @@ -99,10 +99,8 @@ static int __init omap3evm_soc_init(void) { int ret; - if (!machine_is_omap3evm()) { - pr_err("Not OMAP3 EVM!\n"); + if (!machine_is_omap3evm()) return -ENODEV; - } pr_info("OMAP3 EVM SoC init\n"); omap3evm_snd_device = platform_device_alloc("soc-audio", -1); diff --git a/sound/soc/omap/sdp3430.c b/sound/soc/omap/sdp3430.c index 76ce77b9..07fbcf7 100644 --- a/sound/soc/omap/sdp3430.c +++ b/sound/soc/omap/sdp3430.c @@ -296,10 +296,8 @@ static int __init sdp3430_soc_init(void) int ret; u8 pin_mux; - if (!machine_is_omap_3430sdp()) { - pr_debug("Not SDP3430!\n"); + if (!machine_is_omap_3430sdp()) return -ENODEV; - } printk(KERN_INFO "SDP3430 SoC init\n"); sdp3430_snd_device = platform_device_alloc("soc-audio", -1); diff --git a/sound/soc/omap/sdp4430.c b/sound/soc/omap/sdp4430.c index 62f6a62..4b4463d 100644 --- a/sound/soc/omap/sdp4430.c +++ b/sound/soc/omap/sdp4430.c @@ -186,10 +186,8 @@ static int __init sdp4430_soc_init(void) { int ret; - if (!machine_is_omap_4430sdp()) { - pr_debug("Not SDP4430!\n"); + if (!machine_is_omap_4430sdp()) return -ENODEV; - } printk(KERN_INFO "SDP4430 SoC init\n"); sdp4430_snd_device = platform_device_alloc("soc-audio", -1); diff --git a/sound/soc/omap/zoom2.c b/sound/soc/omap/zoom2.c index 338dc95..718031e 100644 --- a/sound/soc/omap/zoom2.c +++ b/sound/soc/omap/zoom2.c @@ -245,10 +245,8 @@ static int __init zoom2_soc_init(void) { int ret; - if (!machine_is_omap_zoom2()) { - pr_debug("Not Zoom2!\n"); + if (!machine_is_omap_zoom2()) return -ENODEV; - } printk(KERN_INFO "Zoom2 SoC init\n"); zoom2_snd_device = platform_device_alloc("soc-audio", -1); -- cgit v0.10.2 From cf4bb69884c8f6a5791e0e251f0b9dc5d32fc256 Mon Sep 17 00:00:00 2001 From: Peter Ujfalusi Date: Wed, 13 Oct 2010 11:56:28 +0300 Subject: ASoC: tlv320dac33: Control for line output gain New control to select the line output gain. This gain control affects the linein-to-lineout and dac-to-loneout gain differently. Use enum type to select the desired gain combination. Signed-off-by: Peter Ujfalusi Acked-by: Mark Brown Signed-off-by: Liam Girdwood diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c index bf6d01f..58349dc 100644 --- a/sound/soc/codecs/tlv320dac33.c +++ b/sound/soc/codecs/tlv320dac33.c @@ -524,6 +524,22 @@ static const struct soc_enum dac33_fifo_mode_enum = SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(dac33_fifo_mode_texts), dac33_fifo_mode_texts); +/* L/R Line Output Gain */ +static const char *lr_lineout_gain_texts[] = { + "Line -12dB DAC 0dB", "Line -6dB DAC 6dB", + "Line 0dB DAC 12dB", "Line 6dB DAC 18dB", +}; + +static const struct soc_enum l_lineout_gain_enum = + SOC_ENUM_SINGLE(DAC33_LDAC_PWR_CTRL, 0, + ARRAY_SIZE(lr_lineout_gain_texts), + lr_lineout_gain_texts); + +static const struct soc_enum r_lineout_gain_enum = + SOC_ENUM_SINGLE(DAC33_RDAC_PWR_CTRL, 0, + ARRAY_SIZE(lr_lineout_gain_texts), + lr_lineout_gain_texts); + /* * DACL/R digital volume control: * from 0 dB to -63.5 in 0.5 dB steps @@ -541,6 +557,8 @@ static const struct snd_kcontrol_new dac33_snd_controls[] = { DAC33_LDAC_DIG_VOL_CTRL, DAC33_RDAC_DIG_VOL_CTRL, 7, 1, 1), SOC_DOUBLE_R("Line to Line Out Volume", DAC33_LINEL_TO_LLO_VOL, DAC33_LINER_TO_RLO_VOL, 0, 127, 1), + SOC_ENUM("Left Line Output Gain", l_lineout_gain_enum), + SOC_ENUM("Right Line Output Gain", r_lineout_gain_enum), }; static const struct snd_kcontrol_new dac33_mode_snd_controls[] = { -- cgit v0.10.2 From 872a64d7e73f0e4dc435295da393db25332172b8 Mon Sep 17 00:00:00 2001 From: Peter Ujfalusi Date: Thu, 21 Oct 2010 15:03:03 +0300 Subject: ASoC: tpa6130a2: Error handling for broken chip Correct/Implement handling of broken chip. Fail the i2c_prope if the communication with the chip fails. Signed-off-by: Peter Ujfalusi Acked-by: Mark Brown Signed-off-by: Liam Girdwood diff --git a/sound/soc/codecs/tpa6130a2.c b/sound/soc/codecs/tpa6130a2.c index 99b70e5..329acc1 100644 --- a/sound/soc/codecs/tpa6130a2.c +++ b/sound/soc/codecs/tpa6130a2.c @@ -98,16 +98,21 @@ static u8 tpa6130a2_read(int reg) return data->regs[reg]; } -static void tpa6130a2_initialize(void) +static int tpa6130a2_initialize(void) { struct tpa6130a2_data *data; - int i; + int i, ret = 0; BUG_ON(tpa6130a2_client == NULL); data = i2c_get_clientdata(tpa6130a2_client); - for (i = 1; i < TPA6130A2_REG_VERSION; i++) - tpa6130a2_i2c_write(i, data->regs[i]); + for (i = 1; i < TPA6130A2_REG_VERSION; i++) { + ret = tpa6130a2_i2c_write(i, data->regs[i]); + if (ret < 0) + break; + } + + return ret; } static int tpa6130a2_power(int power) @@ -133,7 +138,16 @@ static int tpa6130a2_power(int power) } data->power_state = 1; - tpa6130a2_initialize(); + ret = tpa6130a2_initialize(); + if (ret < 0) { + dev_err(&tpa6130a2_client->dev, + "Failed to initialize chip\n"); + if (data->power_gpio >= 0) + gpio_set_value(data->power_gpio, 0); + regulator_disable(data->supply); + data->power_state = 0; + goto exit; + } /* Clear SWS */ val = tpa6130a2_read(TPA6130A2_REG_CONTROL); @@ -375,7 +389,9 @@ int tpa6130a2_add_controls(struct snd_soc_codec *codec) { struct tpa6130a2_data *data; - BUG_ON(tpa6130a2_client == NULL); + if (tpa6130a2_client == NULL) + return -ENODEV; + data = i2c_get_clientdata(tpa6130a2_client); snd_soc_dapm_new_controls(codec, tpa6130a2_dapm_widgets, -- cgit v0.10.2 From 84eae18c867fcb7ce43d5830e23377ed33e45df9 Mon Sep 17 00:00:00 2001 From: Peter Ujfalusi Date: Fri, 22 Oct 2010 15:11:20 +0300 Subject: ASoC: tlv320dac33: Use usleep_range for delays Switch to use the more precise usleep_range instead of msleep(). Replace the udelay with usleep_range to remove the busy loop waiting. Signed-off-by: Peter Ujfalusi Acked-by: Mark Borwn Signed-off-by: Liam Girdwood diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c index 58349dc..d251ff5 100644 --- a/sound/soc/codecs/tlv320dac33.c +++ b/sound/soc/codecs/tlv320dac33.c @@ -669,6 +669,7 @@ static int dac33_set_bias_level(struct snd_soc_codec *codec, static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33) { struct snd_soc_codec *codec = dac33->codec; + unsigned int delay; switch (dac33->fifo_mode) { case DAC33_FIFO_MODE1: @@ -684,8 +685,9 @@ static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33) dac33_write16(codec, DAC33_PREFILL_MSB, DAC33_THRREG(dac33->alarm_threshold)); /* Enable Alarm Threshold IRQ with a delay */ - udelay(SAMPLES_TO_US(dac33->burst_rate, - dac33->alarm_threshold)); + delay = SAMPLES_TO_US(dac33->burst_rate, + dac33->alarm_threshold) + 1000; + usleep_range(delay, delay + 500); dac33_write(codec, DAC33_FIFO_IRQ_MASK, DAC33_MAT); break; case DAC33_FIFO_MODE7: @@ -785,11 +787,11 @@ static irqreturn_t dac33_interrupt_handler(int irq, void *dev) static void dac33_oscwait(struct snd_soc_codec *codec) { - int timeout = 20; + int timeout = 60; u8 reg; do { - msleep(1); + usleep_range(1000, 2000); dac33_read(codec, DAC33_INT_OSC_STATUS, ®); } while (((reg & 0x03) != DAC33_OSCSTATUS_NORMAL) && timeout--); if ((reg & 0x03) != DAC33_OSCSTATUS_NORMAL) -- cgit v0.10.2