Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * Vortex Mixer support.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5)  * There is much more than just the AC97 mixer...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) #include <linux/time.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <sound/core.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include "au88x0.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) static int remove_ctl(struct snd_card *card, const char *name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 	struct snd_ctl_elem_id id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 	memset(&id, 0, sizeof(id));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 	strcpy(id.name, name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 	id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 	return snd_ctl_remove_id(card, &id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) static int snd_vortex_mixer(vortex_t *vortex)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 	struct snd_ac97_bus *pbus;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 	struct snd_ac97_template ac97;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 	static const struct snd_ac97_bus_ops ops = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 		.write = vortex_codec_write,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 		.read = vortex_codec_read,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 	if ((err = snd_ac97_bus(vortex->card, 0, &ops, NULL, &pbus)) < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 	memset(&ac97, 0, sizeof(ac97));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 	// Initialize AC97 codec stuff.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	ac97.private_data = vortex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	ac97.scaps = AC97_SCAP_NO_SPDIF;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 	err = snd_ac97_mixer(pbus, &ac97, &vortex->codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	vortex->isquad = ((vortex->codec == NULL) ?  0 : (vortex->codec->ext_id&0x80));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	remove_ctl(vortex->card, "Master Mono Playback Volume");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 	remove_ctl(vortex->card, "Master Mono Playback Switch");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 	return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) }