mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 01:10:04 +00:00
![Thomas Gleixner](/assets/img/avatar_default.png)
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 59 temple place suite 330 boston ma 02111 1307 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 1334 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Richard Fontana <rfontana@redhat.com> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190527070033.113240726@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
85 lines
2.7 KiB
C
85 lines
2.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
#ifndef __SOUND_AK4XXX_ADDA_H
|
|
#define __SOUND_AK4XXX_ADDA_H
|
|
|
|
/*
|
|
* ALSA driver for AK4524 / AK4528 / AK4529 / AK4355 / AK4381
|
|
* AD and DA converters
|
|
*
|
|
* Copyright (c) 2000 Jaroslav Kysela <perex@perex.cz>
|
|
*/
|
|
|
|
#ifndef AK4XXX_MAX_CHIPS
|
|
#define AK4XXX_MAX_CHIPS 4
|
|
#endif
|
|
|
|
struct snd_akm4xxx;
|
|
|
|
struct snd_ak4xxx_ops {
|
|
void (*lock)(struct snd_akm4xxx *ak, int chip);
|
|
void (*unlock)(struct snd_akm4xxx *ak, int chip);
|
|
void (*write)(struct snd_akm4xxx *ak, int chip, unsigned char reg,
|
|
unsigned char val);
|
|
void (*set_rate_val)(struct snd_akm4xxx *ak, unsigned int rate);
|
|
};
|
|
|
|
#define AK4XXX_IMAGE_SIZE (AK4XXX_MAX_CHIPS * 16) /* 64 bytes */
|
|
|
|
/* DAC label and channels */
|
|
struct snd_akm4xxx_dac_channel {
|
|
char *name; /* mixer volume name */
|
|
unsigned int num_channels;
|
|
char *switch_name; /* mixer switch*/
|
|
};
|
|
|
|
/* ADC labels and channels */
|
|
struct snd_akm4xxx_adc_channel {
|
|
char *name; /* capture gain volume label */
|
|
char *switch_name; /* capture switch */
|
|
unsigned int num_channels;
|
|
char *selector_name; /* capture source select label */
|
|
const char **input_names; /* capture source names (NULL terminated) */
|
|
};
|
|
|
|
struct snd_akm4xxx {
|
|
struct snd_card *card;
|
|
unsigned int num_adcs; /* AK4524 or AK4528 ADCs */
|
|
unsigned int num_dacs; /* AK4524 or AK4528 DACs */
|
|
unsigned char images[AK4XXX_IMAGE_SIZE]; /* saved register image */
|
|
unsigned char volumes[AK4XXX_IMAGE_SIZE]; /* saved volume values */
|
|
unsigned long private_value[AK4XXX_MAX_CHIPS]; /* helper for driver */
|
|
void *private_data[AK4XXX_MAX_CHIPS]; /* helper for driver */
|
|
/* template should fill the following fields */
|
|
unsigned int idx_offset; /* control index offset */
|
|
enum {
|
|
SND_AK4524, SND_AK4528, SND_AK4529,
|
|
SND_AK4355, SND_AK4358, SND_AK4381,
|
|
SND_AK5365, SND_AK4620,
|
|
} type;
|
|
|
|
/* (array) information of combined codecs */
|
|
const struct snd_akm4xxx_dac_channel *dac_info;
|
|
const struct snd_akm4xxx_adc_channel *adc_info;
|
|
|
|
struct snd_ak4xxx_ops ops;
|
|
unsigned int num_chips;
|
|
unsigned int total_regs;
|
|
const char *name;
|
|
};
|
|
|
|
void snd_akm4xxx_write(struct snd_akm4xxx *ak, int chip, unsigned char reg,
|
|
unsigned char val);
|
|
void snd_akm4xxx_reset(struct snd_akm4xxx *ak, int state);
|
|
void snd_akm4xxx_init(struct snd_akm4xxx *ak);
|
|
int snd_akm4xxx_build_controls(struct snd_akm4xxx *ak);
|
|
|
|
#define snd_akm4xxx_get(ak,chip,reg) \
|
|
(ak)->images[(chip) * 16 + (reg)]
|
|
#define snd_akm4xxx_set(ak,chip,reg,val) \
|
|
((ak)->images[(chip) * 16 + (reg)] = (val))
|
|
#define snd_akm4xxx_get_vol(ak,chip,reg) \
|
|
(ak)->volumes[(chip) * 16 + (reg)]
|
|
#define snd_akm4xxx_set_vol(ak,chip,reg,val) \
|
|
((ak)->volumes[(chip) * 16 + (reg)] = (val))
|
|
|
|
#endif /* __SOUND_AK4XXX_ADDA_H */
|