Example 7.1. Example of AC97 Interface
struct mychip { .... struct snd_ac97 *ac97; .... }; static unsigned short snd_mychip_ac97_read(struct snd_ac97 *ac97, unsigned short reg) { struct mychip *chip = ac97->private_data; .... /* read a register value here from the codec */ return the_register_value; } static void snd_mychip_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val) { struct mychip *chip = ac97->private_data; .... /* write the given register value to the codec */ } static int snd_mychip_ac97(struct mychip *chip) { struct snd_ac97_bus *bus; struct snd_ac97_template ac97; int err; static struct snd_ac97_bus_ops ops = { .write = snd_mychip_ac97_write, .read = snd_mychip_ac97_read, }; err = snd_ac97_bus(chip->card, 0, &ops, NULL, &bus); if (err < 0) return err; memset(&ac97, 0, sizeof(ac97)); ac97.private_data = chip; return snd_ac97_mixer(bus, &ac97, &chip->ac97); }