sound/soc/codecs/es8375.c
Source file repositories/reference/linux-study-clean/sound/soc/codecs/es8375.c
File Facts
- System
- Linux kernel
- Corpus path
sound/soc/codecs/es8375.c- Extension
.c- Size
- 26173 bytes
- Lines
- 793
- Domain
- Driver Families
- Bucket
- sound/soc
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/gpio/consumer.hlinux/clk.hlinux/module.hlinux/kernel.hlinux/delay.hlinux/i2c.hlinux/regmap.hlinux/regulator/consumer.hsound/core.hsound/pcm.hsound/pcm_params.hsound/tlv.hsound/soc.hlinux/acpi.hes8375.h
Detected Declarations
struct es8375_privstruct _coeff_divfunction get_coefffunction es8375_hw_paramsfunction es8375_set_sysclkfunction es8375_set_dai_fmtfunction es8375_set_bias_levelfunction es8375_mutefunction es8375_initfunction es8375_suspendfunction es8375_resumefunction es8375_codec_probefunction es8375_writeable_registerfunction es8375_read_device_properitiesfunction es8375_i2c_probefunction es8375_i2c_shutdown
Annotated Snippet
struct es8375_priv {
struct regmap *regmap;
struct clk *mclk;
struct regulator_bulk_data core_supply[2];
unsigned int mclk_freq;
int mastermode;
u8 mclk_src;
u8 vddd;
enum snd_soc_bias_level bias_level;
};
static const char * const es8375_core_supplies[] = {
"vddd",
"vdda",
};
static const DECLARE_TLV_DB_SCALE(es8375_adc_osr_gain_tlv, -3100, 100, 0);
static const DECLARE_TLV_DB_SCALE(es8375_adc_volume_tlv, -9550, 50, 0);
static const DECLARE_TLV_DB_SCALE(es8375_adc_automute_attn_tlv, 0, 100, 0);
static const DECLARE_TLV_DB_SCALE(es8375_adc_dmic_volume_tlv, 0, 600, 0);
static const DECLARE_TLV_DB_SCALE(es8375_dac_volume_tlv, -9550, 50, 0);
static const DECLARE_TLV_DB_SCALE(es8375_dac_vppscale_tlv, -388, 12, 0);
static const DECLARE_TLV_DB_SCALE(es8375_dac_automute_attn_tlv, 0, 400, 0);
static const DECLARE_TLV_DB_SCALE(es8375_automute_ng_tlv, -9600, 600, 0);
static const char *const es8375_ramprate_txt[] = {
"0.125dB/LRCK",
"0.125dB/2LRCK",
"0.125dB/4LRCK",
"0.125dB/8LRCK",
"0.125dB/16LRCK",
"0.125dB/32LRCK",
"0.125dB/64LRCK",
"0.125dB/128LRCK",
"disable softramp",
};
static SOC_ENUM_SINGLE_DECL(es8375_adc_ramprate, ES8375_ADC2,
ADC_RAMPRATE_SHIFT_0, es8375_ramprate_txt);
static SOC_ENUM_SINGLE_DECL(es8375_dac_ramprate, ES8375_DAC2,
DAC_RAMPRATE_SHIFT_0, es8375_ramprate_txt);
static const char *const es8375_automute_ws_txt[] = {
"256 samples",
"512 samples",
"1024 samples",
"2048 samples",
"4096 samples",
"8192 samples",
"16384 samples",
"32768 samples",
};
static SOC_ENUM_SINGLE_DECL(es8375_adc_automute_ws, ES8375_ADC_AUTOMUTE,
ADC_AUTOMUTE_WS_SHIFT_3, es8375_automute_ws_txt);
static SOC_ENUM_SINGLE_DECL(es8375_dac_automute_ws, ES8375_DAC_AUTOMUTE,
DAC_AUTOMUTE_WS_SHIFT_5, es8375_automute_ws_txt);
static const char *const es8375_dmic_pol_txt[] = {
"Low",
"High",
};
static SOC_ENUM_SINGLE_DECL(es8375_dmic_pol, ES8375_ADC1,
DMIC_POL_SHIFT_4, es8375_dmic_pol_txt);
static const char *const es8375_adc_hpf_txt[] = {
"Freeze Offset",
"Dynamic HPF",
};
static SOC_ENUM_SINGLE_DECL(es8375_adc_hpf, ES8375_HPF1,
ADC_HPF_SHIFT_5, es8375_adc_hpf_txt);
static const char *const es8375_dmic_mux_txt[] = {
"AMIC",
"DMIC",
};
static const struct soc_enum es8375_dmic_mux_enum =
SOC_ENUM_SINGLE(ES8375_ADC1, ADC_SRC_SHIFT_7,
ARRAY_SIZE(es8375_dmic_mux_txt), es8375_dmic_mux_txt);
static const struct snd_kcontrol_new es8375_dmic_mux_controls =
SOC_DAPM_ENUM("ADC MUX", es8375_dmic_mux_enum);
static const struct snd_kcontrol_new es8375_snd_controls[] = {
SOC_SINGLE_TLV("ADC OSR Volume", ES8375_ADC_OSR_GAIN,
ADC_OSR_GAIN_SHIFT_0, ES8375_ADC_OSR_GAIN_MAX, 0,
es8375_adc_osr_gain_tlv),
SOC_SINGLE("ADC Invert Switch", ES8375_ADC1, ADC_INV_SHIFT_6, 1, 0),
SOC_SINGLE("ADC RAM Clear", ES8375_ADC1, ADC_RAMCLR_SHIFT_5, 1, 0),
SOC_ENUM("DMIC Polarity", es8375_dmic_pol),
Annotation
- Immediate include surface: `linux/gpio/consumer.h`, `linux/clk.h`, `linux/module.h`, `linux/kernel.h`, `linux/delay.h`, `linux/i2c.h`, `linux/regmap.h`, `linux/regulator/consumer.h`.
- Detected declarations: `struct es8375_priv`, `struct _coeff_div`, `function get_coeff`, `function es8375_hw_params`, `function es8375_set_sysclk`, `function es8375_set_dai_fmt`, `function es8375_set_bias_level`, `function es8375_mute`, `function es8375_init`, `function es8375_suspend`.
- Atlas domain: Driver Families / sound/soc.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.