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-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) #ifndef __SOUND_AK4XXX_ADDA_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) #define __SOUND_AK4XXX_ADDA_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6)  *   ALSA driver for AK4524 / AK4528 / AK4529 / AK4355 / AK4381
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7)  *   AD and DA converters
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9)  *	Copyright (c) 2000 Jaroslav Kysela <perex@perex.cz>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)  */      
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #ifndef AK4XXX_MAX_CHIPS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define AK4XXX_MAX_CHIPS	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) struct snd_akm4xxx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) struct snd_ak4xxx_ops {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 	void (*lock)(struct snd_akm4xxx *ak, int chip);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 	void (*unlock)(struct snd_akm4xxx *ak, int chip);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 	void (*write)(struct snd_akm4xxx *ak, int chip, unsigned char reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 		      unsigned char val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 	void (*set_rate_val)(struct snd_akm4xxx *ak, unsigned int rate);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define AK4XXX_IMAGE_SIZE	(AK4XXX_MAX_CHIPS * 16)	/* 64 bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) /* DAC label and channels */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) struct snd_akm4xxx_dac_channel {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	char *name;		/* mixer volume name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 	unsigned int num_channels;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 	char *switch_name;		/* mixer switch*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) /* ADC labels and channels */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) struct snd_akm4xxx_adc_channel {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	char *name;		/* capture gain volume label */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	char *switch_name;	/* capture switch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 	unsigned int num_channels;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	char *selector_name;	/* capture source select label */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	const char **input_names; /* capture source names (NULL terminated) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) struct snd_akm4xxx {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	struct snd_card *card;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 	unsigned int num_adcs;			/* AK4524 or AK4528 ADCs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	unsigned int num_dacs;			/* AK4524 or AK4528 DACs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 	unsigned char images[AK4XXX_IMAGE_SIZE]; /* saved register image */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 	unsigned char volumes[AK4XXX_IMAGE_SIZE]; /* saved volume values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 	unsigned long private_value[AK4XXX_MAX_CHIPS];	/* helper for driver */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 	void *private_data[AK4XXX_MAX_CHIPS];		/* helper for driver */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 	/* template should fill the following fields */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 	unsigned int idx_offset;		/* control index offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 	enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 		SND_AK4524, SND_AK4528, SND_AK4529,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 		SND_AK4355, SND_AK4358, SND_AK4381,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 		SND_AK5365, SND_AK4620,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 	} type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 	/* (array) information of combined codecs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 	const struct snd_akm4xxx_dac_channel *dac_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 	const struct snd_akm4xxx_adc_channel *adc_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 	struct snd_ak4xxx_ops ops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 	unsigned int num_chips;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 	unsigned int total_regs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 	const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) void snd_akm4xxx_write(struct snd_akm4xxx *ak, int chip, unsigned char reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 		       unsigned char val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) void snd_akm4xxx_reset(struct snd_akm4xxx *ak, int state);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) void snd_akm4xxx_init(struct snd_akm4xxx *ak);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) int snd_akm4xxx_build_controls(struct snd_akm4xxx *ak);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) #define snd_akm4xxx_get(ak,chip,reg) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) 	(ak)->images[(chip) * 16 + (reg)]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define snd_akm4xxx_set(ak,chip,reg,val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 	((ak)->images[(chip) * 16 + (reg)] = (val))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define snd_akm4xxx_get_vol(ak,chip,reg) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) 	(ak)->volumes[(chip) * 16 + (reg)]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define snd_akm4xxx_set_vol(ak,chip,reg,val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) 	((ak)->volumes[(chip) * 16 + (reg)] = (val))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #endif /* __SOUND_AK4XXX_ADDA_H */