ratep = &chip->rates[viadev->direction];
spin_lock_irqsave(&ratep->lock, flags);
ratep->used++;
- if (chip->dxs_fixed && viadev->direction == 0) {
- /* fixed playback rate */
+ if (chip->dxs_fixed && viadev->reg_offset < 0x40) {
+ /* fixed DXS playback rate */
runtime->hw.rates = SNDRV_PCM_RATE_48000;
runtime->hw.rate_min = runtime->hw.rate_max = 48000;
} else if (! ratep->rate) {
if (chip_type == TYPE_VIA8233A) {
if ((err = snd_via8233a_pcm_new(chip)) < 0)
goto __error;
+ chip->dxs_fixed = 1; /* use 48k for DXS #3 */
} else {
if ((err = snd_via8233_pcm_new(chip)) < 0)
goto __error;