Merge branch 'fix/hda' into topic/hda

This commit is contained in:
Takashi Iwai 2011-10-06 10:04:30 +02:00
Родитель 06503670af 798cb7e897
Коммит 97999e28c7
4 изменённых файлов: 18 добавлений и 8 удалений

Просмотреть файл

@ -2032,7 +2032,8 @@ static unsigned int azx_via_get_position(struct azx *chip,
} }
static unsigned int azx_get_position(struct azx *chip, static unsigned int azx_get_position(struct azx *chip,
struct azx_dev *azx_dev) struct azx_dev *azx_dev,
bool with_check)
{ {
unsigned int pos; unsigned int pos;
int stream = azx_dev->substream->stream; int stream = azx_dev->substream->stream;
@ -2048,7 +2049,7 @@ static unsigned int azx_get_position(struct azx *chip,
default: default:
/* use the position buffer */ /* use the position buffer */
pos = le32_to_cpu(*azx_dev->posbuf); pos = le32_to_cpu(*azx_dev->posbuf);
if (chip->position_fix[stream] == POS_FIX_AUTO) { if (with_check && chip->position_fix[stream] == POS_FIX_AUTO) {
if (!pos || pos == (u32)-1) { if (!pos || pos == (u32)-1) {
printk(KERN_WARNING printk(KERN_WARNING
"hda-intel: Invalid position buffer, " "hda-intel: Invalid position buffer, "
@ -2072,7 +2073,7 @@ static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
struct azx *chip = apcm->chip; struct azx *chip = apcm->chip;
struct azx_dev *azx_dev = get_azx_dev(substream); struct azx_dev *azx_dev = get_azx_dev(substream);
return bytes_to_frames(substream->runtime, return bytes_to_frames(substream->runtime,
azx_get_position(chip, azx_dev)); azx_get_position(chip, azx_dev, false));
} }
/* /*
@ -2095,7 +2096,7 @@ static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)
return -1; /* bogus (too early) interrupt */ return -1; /* bogus (too early) interrupt */
stream = azx_dev->substream->stream; stream = azx_dev->substream->stream;
pos = azx_get_position(chip, azx_dev); pos = azx_get_position(chip, azx_dev, true);
if (WARN_ONCE(!azx_dev->period_bytes, if (WARN_ONCE(!azx_dev->period_bytes,
"hda-intel: zero azx_dev->period_bytes")) "hda-intel: zero azx_dev->period_bytes"))

Просмотреть файл

@ -431,7 +431,8 @@ static int ssm2602_set_dai_fmt(struct snd_soc_dai *codec_dai,
static int ssm2602_set_bias_level(struct snd_soc_codec *codec, static int ssm2602_set_bias_level(struct snd_soc_codec *codec,
enum snd_soc_bias_level level) enum snd_soc_bias_level level)
{ {
u16 reg = snd_soc_read(codec, SSM2602_PWR) & 0xff7f; u16 reg = snd_soc_read(codec, SSM2602_PWR);
reg &= ~(PWR_POWER_OFF | PWR_OSC_PDN);
switch (level) { switch (level) {
case SND_SOC_BIAS_ON: case SND_SOC_BIAS_ON:

Просмотреть файл

@ -516,6 +516,12 @@ static int omap_mcbsp_dai_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs; struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs;
int err = 0; int err = 0;
if (mcbsp_data->active)
if (freq == mcbsp_data->in_freq)
return 0;
else
return -EBUSY;
/* The McBSP signal muxing functions are only available on McBSP1 */ /* The McBSP signal muxing functions are only available on McBSP1 */
if (clk_id == OMAP_MCBSP_CLKR_SRC_CLKR || if (clk_id == OMAP_MCBSP_CLKR_SRC_CLKR ||
clk_id == OMAP_MCBSP_CLKR_SRC_CLKX || clk_id == OMAP_MCBSP_CLKR_SRC_CLKX ||

Просмотреть файл

@ -530,9 +530,11 @@ snd_usb_audio_probe(struct usb_device *dev,
return chip; return chip;
__error: __error:
if (chip && !chip->num_interfaces) if (chip) {
snd_card_free(chip->card); if (!chip->num_interfaces)
chip->probing = 0; snd_card_free(chip->card);
chip->probing = 0;
}
mutex_unlock(&register_mutex); mutex_unlock(&register_mutex);
__err_val: __err_val:
return NULL; return NULL;