The standard callbacks are read and write. Obviously they correspond to the functions for read and write accesses to the hardware low-level codes.

The read callback returns the register value specified in the argument.

  static unsigned short snd_mychip_ac97_read(struct snd_ac97 *ac97,
                                             unsigned short reg)
          struct mychip *chip = ac97->private_data;
          return the_register_value;


Here, the chip can be cast from ac97->private_data.

Meanwhile, the write callback is used to set the register value.

  static void snd_mychip_ac97_write(struct snd_ac97 *ac97,
                       unsigned short reg, unsigned short val)


These callbacks are non-atomic like the control API callbacks.

There are also other callbacks: reset, wait and init.

The reset callback is used to reset the codec. If the chip requires a special kind of reset, you can define this callback.

The wait callback is used to add some waiting time in the standard initialization of the codec. If the chip requires the extra waiting time, define this callback.

The init callback is used for additional initialization of the codec.