Lines Matching full:ac97
159 static int set_spdif_rate(struct snd_ac97 *ac97, unsigned short rate)
164 if (! (ac97->ext_id & AC97_EI_SPDIF))
168 if (ac97->flags & AC97_CS_SPDIF) {
173 snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, 0);
179 if (ac97->id == AC97_ID_CM9739 && rate != 48000) {
180 snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, 0);
188 snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, 0);
195 guard(mutex)(&ac97->reg_mutex);
196 old = snd_ac97_read(ac97, reg) & mask;
198 snd_ac97_update_bits_nolock(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, 0);
199 snd_ac97_update_bits_nolock(ac97, reg, mask, bits);
201 sbits = ac97->spdif_status;
217 ac97->spdif_status = sbits;
219 snd_ac97_update_bits_nolock(ac97, AC97_EXTENDED_STATUS, AC97_EA_SPDIF, AC97_EA_SPDIF);
225 * @ac97: the ac97 instance
242 int snd_ac97_set_rate(struct snd_ac97 *ac97, int reg, unsigned int rate)
249 if (!(ac97->flags & AC97_DOUBLE_RATE))
255 snd_ac97_update_power(ac97, reg, 1);
258 if ((ac97->regs[AC97_EXTENDED_STATUS] & AC97_EA_VRM) == 0) /* MIC VRA */
264 if ((ac97->regs[AC97_EXTENDED_STATUS] & AC97_EA_VRA) == 0) /* VRA */
269 if (! (ac97->scaps & AC97_SCAP_SURROUND_DAC))
273 if (! (ac97->scaps & AC97_SCAP_CENTER_LFE_DAC))
278 return set_spdif_rate(ac97, rate);
284 tmp = (rate * ac97->bus->clock) / 48000;
287 if ((ac97->ext_id & AC97_EI_DRA) && reg == AC97_PCM_FRONT_DAC_RATE)
288 snd_ac97_update_bits(ac97, AC97_EXTENDED_STATUS,
290 snd_ac97_update(ac97, reg, tmp & 0xffff);
291 snd_ac97_read(ac97, reg);
292 if ((ac97->ext_id & AC97_EI_DRA) && reg == AC97_PCM_FRONT_DAC_RATE) {
296 snd_ac97_update_bits(ac97, AC97_GENERAL_PURPOSE,
299 snd_ac97_read(ac97, AC97_GENERAL_PURPOSE);
306 static unsigned short get_pslots(struct snd_ac97 *ac97, unsigned char *rate_table, unsigned short *spdif_slots)
308 if (!ac97_is_audio(ac97))
310 if (ac97_is_rev22(ac97) || ac97_can_amap(ac97)) {
312 if (ac97_is_rev22(ac97)) {
315 es = ac97->regs[AC97_EXTENDED_ID] &= ~AC97_EI_DACS_SLOT_MASK;
316 switch (ac97->addr) {
321 snd_ac97_write_cache(ac97, AC97_EXTENDED_ID, es);
323 switch (ac97->addr) {
326 if (ac97->scaps & AC97_SCAP_SURROUND_DAC)
328 if (ac97->scaps & AC97_SCAP_CENTER_LFE_DAC)
330 if (ac97->ext_id & AC97_EI_SPDIF) {
331 if (!(ac97->scaps & AC97_SCAP_SURROUND_DAC))
333 else if (!(ac97->scaps & AC97_SCAP_CENTER_LFE_DAC))
343 if (ac97->scaps & AC97_SCAP_SURROUND_DAC)
345 if (ac97->ext_id & AC97_EI_SPDIF) {
346 if (!(ac97->scaps & AC97_SCAP_SURROUND_DAC))
355 if (ac97->ext_id & AC97_EI_SPDIF)
364 if (ac97->scaps & AC97_SCAP_SURROUND_DAC)
366 if (ac97->scaps & AC97_SCAP_CENTER_LFE_DAC)
368 if (ac97->ext_id & AC97_EI_SPDIF) {
369 if (!(ac97->scaps & AC97_SCAP_SURROUND_DAC))
371 else if (!(ac97->scaps & AC97_SCAP_CENTER_LFE_DAC))
381 static unsigned short get_cslots(struct snd_ac97 *ac97)
385 if (!ac97_is_audio(ac97))
419 * snd_ac97_pcm_assign - assign AC97 slots to given PCM streams
420 * @bus: the ac97 bus instance
424 * It assigns available AC97 slots for given PCMs. If none or only
544 * snd_ac97_pcm_open - opens the given AC97 pcm
545 * @pcm: the ac97 pcm instance
550 * It locks the specified slots and sets the given rate to AC97 registers.
590 "cannot find configuration for AC97 slot %i\n",
606 "invalid AC97 slot %i?\n", i);
612 "setting ac97 reg 0x%x to rate %d\n",
636 * snd_ac97_pcm_close - closes the given AC97 pcm
637 * @pcm: the ac97 pcm instance
639 * It frees the locked AC97 slots.
711 * @runtime: the runtime of the ac97 front playback pcm