mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-02-12 06:42:12 +00:00
Merge branch 'for-2.6.37' of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/asoc-2.6 into fix/asoc
This commit is contained in:
commit
cf78c0c426
@ -58,7 +58,7 @@
|
|||||||
(1000000000 / ((rate * 1000) / samples))
|
(1000000000 / ((rate * 1000) / samples))
|
||||||
|
|
||||||
#define US_TO_SAMPLES(rate, us) \
|
#define US_TO_SAMPLES(rate, us) \
|
||||||
(rate / (1000000 / us))
|
(rate / (1000000 / (us < 1000000 ? us : 1000000)))
|
||||||
|
|
||||||
#define UTHR_FROM_PERIOD_SIZE(samples, playrate, burstrate) \
|
#define UTHR_FROM_PERIOD_SIZE(samples, playrate, burstrate) \
|
||||||
((samples * 5000) / ((burstrate * 5000) / (burstrate - playrate)))
|
((samples * 5000) / ((burstrate * 5000) / (burstrate - playrate)))
|
||||||
@ -200,7 +200,7 @@ static int dac33_read(struct snd_soc_codec *codec, unsigned int reg,
|
|||||||
u8 *value)
|
u8 *value)
|
||||||
{
|
{
|
||||||
struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
|
struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
|
||||||
int val;
|
int val, ret = 0;
|
||||||
|
|
||||||
*value = reg & 0xff;
|
*value = reg & 0xff;
|
||||||
|
|
||||||
@ -210,6 +210,7 @@ static int dac33_read(struct snd_soc_codec *codec, unsigned int reg,
|
|||||||
if (val < 0) {
|
if (val < 0) {
|
||||||
dev_err(codec->dev, "Read failed (%d)\n", val);
|
dev_err(codec->dev, "Read failed (%d)\n", val);
|
||||||
value[0] = dac33_read_reg_cache(codec, reg);
|
value[0] = dac33_read_reg_cache(codec, reg);
|
||||||
|
ret = val;
|
||||||
} else {
|
} else {
|
||||||
value[0] = val;
|
value[0] = val;
|
||||||
dac33_write_reg_cache(codec, reg, val);
|
dac33_write_reg_cache(codec, reg, val);
|
||||||
@ -218,7 +219,7 @@ static int dac33_read(struct snd_soc_codec *codec, unsigned int reg,
|
|||||||
value[0] = dac33_read_reg_cache(codec, reg);
|
value[0] = dac33_read_reg_cache(codec, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dac33_write(struct snd_soc_codec *codec, unsigned int reg,
|
static int dac33_write(struct snd_soc_codec *codec, unsigned int reg,
|
||||||
@ -329,13 +330,18 @@ static void dac33_init_chip(struct snd_soc_codec *codec)
|
|||||||
dac33_read_reg_cache(codec, DAC33_LINER_TO_RLO_VOL));
|
dac33_read_reg_cache(codec, DAC33_LINER_TO_RLO_VOL));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void dac33_read_id(struct snd_soc_codec *codec)
|
static inline int dac33_read_id(struct snd_soc_codec *codec)
|
||||||
{
|
{
|
||||||
|
int i, ret = 0;
|
||||||
u8 reg;
|
u8 reg;
|
||||||
|
|
||||||
dac33_read(codec, DAC33_DEVICE_ID_MSB, ®);
|
for (i = 0; i < 3; i++) {
|
||||||
dac33_read(codec, DAC33_DEVICE_ID_LSB, ®);
|
ret = dac33_read(codec, DAC33_DEVICE_ID_MSB + i, ®);
|
||||||
dac33_read(codec, DAC33_DEVICE_REV_ID, ®);
|
if (ret < 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void dac33_soft_power(struct snd_soc_codec *codec, int power)
|
static inline void dac33_soft_power(struct snd_soc_codec *codec, int power)
|
||||||
@ -1076,6 +1082,9 @@ static void dac33_calculate_times(struct snd_pcm_substream *substream)
|
|||||||
/* Number of samples under i2c latency */
|
/* Number of samples under i2c latency */
|
||||||
dac33->alarm_threshold = US_TO_SAMPLES(rate,
|
dac33->alarm_threshold = US_TO_SAMPLES(rate,
|
||||||
dac33->mode1_latency);
|
dac33->mode1_latency);
|
||||||
|
nsample_limit = DAC33_BUFFER_SIZE_SAMPLES -
|
||||||
|
dac33->alarm_threshold;
|
||||||
|
|
||||||
if (dac33->auto_fifo_config) {
|
if (dac33->auto_fifo_config) {
|
||||||
if (period_size <= dac33->alarm_threshold)
|
if (period_size <= dac33->alarm_threshold)
|
||||||
/*
|
/*
|
||||||
@ -1086,6 +1095,8 @@ static void dac33_calculate_times(struct snd_pcm_substream *substream)
|
|||||||
((dac33->alarm_threshold / period_size) +
|
((dac33->alarm_threshold / period_size) +
|
||||||
(dac33->alarm_threshold % period_size ?
|
(dac33->alarm_threshold % period_size ?
|
||||||
1 : 0));
|
1 : 0));
|
||||||
|
else if (period_size > nsample_limit)
|
||||||
|
dac33->nsample = nsample_limit;
|
||||||
else
|
else
|
||||||
dac33->nsample = period_size;
|
dac33->nsample = period_size;
|
||||||
} else {
|
} else {
|
||||||
@ -1097,8 +1108,7 @@ static void dac33_calculate_times(struct snd_pcm_substream *substream)
|
|||||||
*/
|
*/
|
||||||
dac33->nsample_max = substream->runtime->buffer_size -
|
dac33->nsample_max = substream->runtime->buffer_size -
|
||||||
period_size;
|
period_size;
|
||||||
nsample_limit = DAC33_BUFFER_SIZE_SAMPLES -
|
|
||||||
dac33->alarm_threshold;
|
|
||||||
if (dac33->nsample_max > nsample_limit)
|
if (dac33->nsample_max > nsample_limit)
|
||||||
dac33->nsample_max = nsample_limit;
|
dac33->nsample_max = nsample_limit;
|
||||||
|
|
||||||
@ -1414,9 +1424,15 @@ static int dac33_soc_probe(struct snd_soc_codec *codec)
|
|||||||
dev_err(codec->dev, "Failed to power up codec: %d\n", ret);
|
dev_err(codec->dev, "Failed to power up codec: %d\n", ret);
|
||||||
goto err_power;
|
goto err_power;
|
||||||
}
|
}
|
||||||
dac33_read_id(codec);
|
ret = dac33_read_id(codec);
|
||||||
dac33_hard_power(codec, 0);
|
dac33_hard_power(codec, 0);
|
||||||
|
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(codec->dev, "Failed to read chip ID: %d\n", ret);
|
||||||
|
ret = -ENODEV;
|
||||||
|
goto err_power;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if the IRQ number is valid and request it */
|
/* Check if the IRQ number is valid and request it */
|
||||||
if (dac33->irq >= 0) {
|
if (dac33->irq >= 0) {
|
||||||
ret = request_irq(dac33->irq, dac33_interrupt_handler,
|
ret = request_irq(dac33->irq, dac33_interrupt_handler,
|
||||||
|
@ -125,7 +125,7 @@ static int tpa6130a2_power(int power)
|
|||||||
data = i2c_get_clientdata(tpa6130a2_client);
|
data = i2c_get_clientdata(tpa6130a2_client);
|
||||||
|
|
||||||
mutex_lock(&data->mutex);
|
mutex_lock(&data->mutex);
|
||||||
if (power) {
|
if (power && !data->power_state) {
|
||||||
/* Power on */
|
/* Power on */
|
||||||
if (data->power_gpio >= 0)
|
if (data->power_gpio >= 0)
|
||||||
gpio_set_value(data->power_gpio, 1);
|
gpio_set_value(data->power_gpio, 1);
|
||||||
@ -153,7 +153,7 @@ static int tpa6130a2_power(int power)
|
|||||||
val = tpa6130a2_read(TPA6130A2_REG_CONTROL);
|
val = tpa6130a2_read(TPA6130A2_REG_CONTROL);
|
||||||
val &= ~TPA6130A2_SWS;
|
val &= ~TPA6130A2_SWS;
|
||||||
tpa6130a2_i2c_write(TPA6130A2_REG_CONTROL, val);
|
tpa6130a2_i2c_write(TPA6130A2_REG_CONTROL, val);
|
||||||
} else {
|
} else if (!power && data->power_state) {
|
||||||
/* set SWS */
|
/* set SWS */
|
||||||
val = tpa6130a2_read(TPA6130A2_REG_CONTROL);
|
val = tpa6130a2_read(TPA6130A2_REG_CONTROL);
|
||||||
val |= TPA6130A2_SWS;
|
val |= TPA6130A2_SWS;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user