]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
Merge branch 'for-2.6.37' of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/asoc...
authorTakashi Iwai <tiwai@suse.de>
Sat, 23 Oct 2010 15:01:17 +0000 (17:01 +0200)
committerTakashi Iwai <tiwai@suse.de>
Sat, 23 Oct 2010 15:01:17 +0000 (17:01 +0200)
sound/soc/codecs/tlv320dac33.c
sound/soc/codecs/tpa6130a2.c
sound/soc/omap/am3517evm.c
sound/soc/omap/igep0020.c
sound/soc/omap/omap2evm.c
sound/soc/omap/omap3beagle.c
sound/soc/omap/omap3evm.c
sound/soc/omap/sdp3430.c
sound/soc/omap/sdp4430.c
sound/soc/omap/zoom2.c

index bf6d01f4a45aa1ac86958c7f652442858a03cd81..d251ff54a2d36f8b691b4aca2073d74adb010673 100644 (file)
@@ -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[] = {
@@ -651,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:
@@ -666,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:
@@ -767,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, &reg);
        } while (((reg & 0x03) != DAC33_OSCSTATUS_NORMAL) && timeout--);
        if ((reg & 0x03) != DAC33_OSCSTATUS_NORMAL)
index 99b70e5978a2ee122e6799df5f27e20711a93976..329acc1a207457942a560e86d7f990a2fc44ffd8 100644 (file)
@@ -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,
index 68bd902ccd4e392dd96547b1e8e8d735baa3472b..979dd508305f812bc6ad893893ed6e811a8bdf3a 100644 (file)
@@ -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);
index d296cfcc672e0b950a3cb13ac037f9da8c01fbd7..fd3a40f309c8e4d3067ea93ecfebc6ad8f0f4a23 100644 (file)
@@ -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);
index 38cd1894623e575095c8a4b4e1fc364789dfe00c..cf3fc8a675b5fc504169f35aaf418095d7da71d0 100644 (file)
@@ -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);
index 7c11e1afe9e640a9e90c006b00fdadb8e4ff5939..e56832b0c444083def074b75f3c788d9c89d07d3 100644 (file)
@@ -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);
index 1ac5babef00d32c4cea288452d4f18094a647c08..810f1e36da2127e019570563d8d1d622939a3e48 100644 (file)
@@ -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);
index 76ce77b91844871f53481afbab751dc394e51bc8..07fbcf7d2411ea6d0a80f5c390ba629f89a5e2ca 100644 (file)
@@ -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);
index 62f6a622d79146d24068c76cb63fda6cf03bc347..4b4463db6ba0330a0c29b401083e13cbc671bfd0 100644 (file)
@@ -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);
index 338dc9552bd6be7d8bf2f7dee9b5673f86f6198c..718031eeac34805bc16909fd29cb9a87da494a59 100644 (file)
@@ -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);