Updating Registers in The Driver
Prev | Chapter 7. API for AC97 Codec | Next

## Updating Registers in The Driver

If you need to access to the codec from the driver, you can call the following functions: `snd_ac97_write()`, `snd_ac97_read()`, `snd_ac97_update()` and `snd_ac97_update_bits()`.

Both `snd_ac97_write()` and `snd_ac97_update()` functions are used to set a value to the given register (`AC97_XXX`). The difference between them is that `snd_ac97_update()` doesn't write a value if the given value has been already set, while `snd_ac97_write()` always rewrites the value.

      snd_ac97_write(ac97, AC97_MASTER, 0x8080);
      snd_ac97_update(ac97, AC97_MASTER, 0x8080);

`snd_ac97_read()` is used to read the value of the given register. For example,

      value = snd_ac97_read(ac97, AC97_MASTER);

`snd_ac97_update_bits()` is used to update some bits in the given register.

      snd_ac97_update_bits(ac97, reg, mask, value);

Also, there is a function to change the sample rate (of a given register such as `AC97_PCM_FRONT_DAC_RATE`) when VRA or DRA is supported by the codec: `snd_ac97_set_rate()`.

      snd_ac97_set_rate(ac97, AC97_PCM_FRONT_DAC_RATE, 44100);

The following registers are available to set the rate: `AC97_PCM_MIC_ADC_RATE`, `AC97_PCM_FRONT_DAC_RATE`, `AC97_PCM_LR_ADC_RATE`, `AC97_SPDIF`. When `AC97_SPDIF` is specified, the register is not really changed but the corresponding IEC958 status bits will be updated.

Prev | Up | Next
Callbacks | Home | Clock Adjustment