Merge branch 'for-2.6.37' of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/asoc-2.6 into topic/asoc

This commit is contained in:
Takashi Iwai 2010-10-23 17:01:17 +02:00
commit b11bdb5254
10 changed files with 54 additions and 34 deletions

View file

@ -524,6 +524,22 @@ static const struct soc_enum dac33_fifo_mode_enum =
SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(dac33_fifo_mode_texts), SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(dac33_fifo_mode_texts),
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: * DACL/R digital volume control:
* from 0 dB to -63.5 in 0.5 dB steps * 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), DAC33_LDAC_DIG_VOL_CTRL, DAC33_RDAC_DIG_VOL_CTRL, 7, 1, 1),
SOC_DOUBLE_R("Line to Line Out Volume", SOC_DOUBLE_R("Line to Line Out Volume",
DAC33_LINEL_TO_LLO_VOL, DAC33_LINER_TO_RLO_VOL, 0, 127, 1), 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[] = { 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) static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
{ {
struct snd_soc_codec *codec = dac33->codec; struct snd_soc_codec *codec = dac33->codec;
unsigned int delay;
switch (dac33->fifo_mode) { switch (dac33->fifo_mode) {
case DAC33_FIFO_MODE1: 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_write16(codec, DAC33_PREFILL_MSB,
DAC33_THRREG(dac33->alarm_threshold)); DAC33_THRREG(dac33->alarm_threshold));
/* Enable Alarm Threshold IRQ with a delay */ /* Enable Alarm Threshold IRQ with a delay */
udelay(SAMPLES_TO_US(dac33->burst_rate, delay = SAMPLES_TO_US(dac33->burst_rate,
dac33->alarm_threshold)); dac33->alarm_threshold) + 1000;
usleep_range(delay, delay + 500);
dac33_write(codec, DAC33_FIFO_IRQ_MASK, DAC33_MAT); dac33_write(codec, DAC33_FIFO_IRQ_MASK, DAC33_MAT);
break; break;
case DAC33_FIFO_MODE7: 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) static void dac33_oscwait(struct snd_soc_codec *codec)
{ {
int timeout = 20; int timeout = 60;
u8 reg; u8 reg;
do { do {
msleep(1); usleep_range(1000, 2000);
dac33_read(codec, DAC33_INT_OSC_STATUS, &reg); dac33_read(codec, DAC33_INT_OSC_STATUS, &reg);
} while (((reg & 0x03) != DAC33_OSCSTATUS_NORMAL) && timeout--); } while (((reg & 0x03) != DAC33_OSCSTATUS_NORMAL) && timeout--);
if ((reg & 0x03) != DAC33_OSCSTATUS_NORMAL) if ((reg & 0x03) != DAC33_OSCSTATUS_NORMAL)

View file

@ -98,16 +98,21 @@ static u8 tpa6130a2_read(int reg)
return data->regs[reg]; return data->regs[reg];
} }
static void tpa6130a2_initialize(void) static int tpa6130a2_initialize(void)
{ {
struct tpa6130a2_data *data; struct tpa6130a2_data *data;
int i; int i, ret = 0;
BUG_ON(tpa6130a2_client == NULL); BUG_ON(tpa6130a2_client == NULL);
data = i2c_get_clientdata(tpa6130a2_client); data = i2c_get_clientdata(tpa6130a2_client);
for (i = 1; i < TPA6130A2_REG_VERSION; i++) for (i = 1; i < TPA6130A2_REG_VERSION; i++) {
tpa6130a2_i2c_write(i, data->regs[i]); ret = tpa6130a2_i2c_write(i, data->regs[i]);
if (ret < 0)
break;
}
return ret;
} }
static int tpa6130a2_power(int power) static int tpa6130a2_power(int power)
@ -133,7 +138,16 @@ static int tpa6130a2_power(int power)
} }
data->power_state = 1; 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 */ /* Clear SWS */
val = tpa6130a2_read(TPA6130A2_REG_CONTROL); val = tpa6130a2_read(TPA6130A2_REG_CONTROL);
@ -375,7 +389,9 @@ int tpa6130a2_add_controls(struct snd_soc_codec *codec)
{ {
struct tpa6130a2_data *data; struct tpa6130a2_data *data;
BUG_ON(tpa6130a2_client == NULL); if (tpa6130a2_client == NULL)
return -ENODEV;
data = i2c_get_clientdata(tpa6130a2_client); data = i2c_get_clientdata(tpa6130a2_client);
snd_soc_dapm_new_controls(codec, tpa6130a2_dapm_widgets, snd_soc_dapm_new_controls(codec, tpa6130a2_dapm_widgets,

View file

@ -157,10 +157,8 @@ static int __init am3517evm_soc_init(void)
{ {
int ret; int ret;
if (!machine_is_omap3517evm()) { if (!machine_is_omap3517evm())
pr_err("Not OMAP3517 / AM3517 EVM!\n");
return -ENODEV; return -ENODEV;
}
pr_info("OMAP3517 / AM3517 EVM SoC init\n"); pr_info("OMAP3517 / AM3517 EVM SoC init\n");
am3517evm_snd_device = platform_device_alloc("soc-audio", -1); am3517evm_snd_device = platform_device_alloc("soc-audio", -1);

View file

@ -101,10 +101,8 @@ static int __init igep2_soc_init(void)
{ {
int ret; int ret;
if (!machine_is_igep0020()) { if (!machine_is_igep0020())
pr_debug("Not IGEP v2!\n");
return -ENODEV; return -ENODEV;
}
printk(KERN_INFO "IGEP v2 SoC init\n"); printk(KERN_INFO "IGEP v2 SoC init\n");
igep2_snd_device = platform_device_alloc("soc-audio", -1); igep2_snd_device = platform_device_alloc("soc-audio", -1);

View file

@ -103,10 +103,8 @@ static int __init omap2evm_soc_init(void)
{ {
int ret; int ret;
if (!machine_is_omap2evm()) { if (!machine_is_omap2evm())
pr_debug("Not omap2evm!\n");
return -ENODEV; return -ENODEV;
}
printk(KERN_INFO "omap2evm SoC init\n"); printk(KERN_INFO "omap2evm SoC init\n");
omap2evm_snd_device = platform_device_alloc("soc-audio", -1); omap2evm_snd_device = platform_device_alloc("soc-audio", -1);

View file

@ -112,10 +112,8 @@ static int __init omap3beagle_soc_init(void)
{ {
int ret; int ret;
if (!(machine_is_omap3_beagle() || machine_is_devkit8000())) { if (!(machine_is_omap3_beagle() || machine_is_devkit8000()))
pr_debug("Not OMAP3 Beagle or Devkit8000!\n");
return -ENODEV; return -ENODEV;
}
pr_info("OMAP3 Beagle/Devkit8000 SoC init\n"); pr_info("OMAP3 Beagle/Devkit8000 SoC init\n");
omap3beagle_snd_device = platform_device_alloc("soc-audio", -1); omap3beagle_snd_device = platform_device_alloc("soc-audio", -1);

View file

@ -99,10 +99,8 @@ static int __init omap3evm_soc_init(void)
{ {
int ret; int ret;
if (!machine_is_omap3evm()) { if (!machine_is_omap3evm())
pr_err("Not OMAP3 EVM!\n");
return -ENODEV; return -ENODEV;
}
pr_info("OMAP3 EVM SoC init\n"); pr_info("OMAP3 EVM SoC init\n");
omap3evm_snd_device = platform_device_alloc("soc-audio", -1); omap3evm_snd_device = platform_device_alloc("soc-audio", -1);

View file

@ -296,10 +296,8 @@ static int __init sdp3430_soc_init(void)
int ret; int ret;
u8 pin_mux; u8 pin_mux;
if (!machine_is_omap_3430sdp()) { if (!machine_is_omap_3430sdp())
pr_debug("Not SDP3430!\n");
return -ENODEV; return -ENODEV;
}
printk(KERN_INFO "SDP3430 SoC init\n"); printk(KERN_INFO "SDP3430 SoC init\n");
sdp3430_snd_device = platform_device_alloc("soc-audio", -1); sdp3430_snd_device = platform_device_alloc("soc-audio", -1);

View file

@ -186,10 +186,8 @@ static int __init sdp4430_soc_init(void)
{ {
int ret; int ret;
if (!machine_is_omap_4430sdp()) { if (!machine_is_omap_4430sdp())
pr_debug("Not SDP4430!\n");
return -ENODEV; return -ENODEV;
}
printk(KERN_INFO "SDP4430 SoC init\n"); printk(KERN_INFO "SDP4430 SoC init\n");
sdp4430_snd_device = platform_device_alloc("soc-audio", -1); sdp4430_snd_device = platform_device_alloc("soc-audio", -1);

View file

@ -245,10 +245,8 @@ static int __init zoom2_soc_init(void)
{ {
int ret; int ret;
if (!machine_is_omap_zoom2()) { if (!machine_is_omap_zoom2())
pr_debug("Not Zoom2!\n");
return -ENODEV; return -ENODEV;
}
printk(KERN_INFO "Zoom2 SoC init\n"); printk(KERN_INFO "Zoom2 SoC init\n");
zoom2_snd_device = platform_device_alloc("soc-audio", -1); zoom2_snd_device = platform_device_alloc("soc-audio", -1);