static int stac9766_reset(struct snd_soc_codec *codec, int try_warm) { if (try_warm && soc_ac97_ops.warm_reset) { soc_ac97_ops.warm_reset(codec->ac97); if (stac9766_ac97_read(codec, 0) == stac9766_reg[0]) return 1; } soc_ac97_ops.reset(codec->ac97); if (soc_ac97_ops.warm_reset) soc_ac97_ops.warm_reset(codec->ac97); if (stac9766_ac97_read(codec, 0) != stac9766_reg[0]) return -EIO; return 0; }
static int stac9766_reset(struct snd_soc_codec *codec, int try_warm) { struct snd_ac97 *ac97 = snd_soc_codec_get_drvdata(codec); if (try_warm && soc_ac97_ops->warm_reset) { soc_ac97_ops->warm_reset(ac97); if (stac9766_ac97_read(codec, 0) == stac9766_reg[0]) return 1; } soc_ac97_ops->reset(ac97); if (soc_ac97_ops->warm_reset) soc_ac97_ops->warm_reset(ac97); if (stac9766_ac97_read(codec, 0) != stac9766_reg[0]) return -EIO; return 0; }
static int ac97_digital_trigger(struct snd_pcm_substream *substream, int cmd, struct snd_soc_dai *dai) { struct snd_soc_codec *codec = dai->codec; unsigned short vra; switch (cmd) { case SNDRV_PCM_TRIGGER_STOP: vra = stac9766_ac97_read(codec, AC97_EXTENDED_STATUS); vra &= !0x04; stac9766_ac97_write(codec, AC97_EXTENDED_STATUS, vra); break; } return 0; }
static int ac97_digital_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { struct snd_soc_codec *codec = dai->codec; struct snd_pcm_runtime *runtime = substream->runtime; unsigned short reg, vra; stac9766_ac97_write(codec, AC97_SPDIF, 0x2002); vra = stac9766_ac97_read(codec, AC97_EXTENDED_STATUS); vra |= 0x5; /* Enable VRA and SPDIF out */ stac9766_ac97_write(codec, AC97_EXTENDED_STATUS, vra); reg = AC97_PCM_FRONT_DAC_RATE; return stac9766_ac97_write(codec, reg, runtime->rate); }
static int ac97_analog_prepare(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { struct snd_soc_codec *codec = dai->codec; struct snd_pcm_runtime *runtime = substream->runtime; unsigned short reg, vra; vra = stac9766_ac97_read(codec, AC97_EXTENDED_STATUS); vra |= 0x1; /* enable variable rate audio */ stac9766_ac97_write(codec, AC97_EXTENDED_STATUS, vra); if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) reg = AC97_PCM_FRONT_DAC_RATE; else reg = AC97_PCM_LR_ADC_RATE; return stac9766_ac97_write(codec, reg, runtime->rate); }