sound/soc/codecs/es9356.c

Source file repositories/reference/linux-study-clean/sound/soc/codecs/es9356.c

File Facts

System
Linux kernel
Corpus path
sound/soc/codecs/es9356.c
Extension
.c
Size
34865 bytes
Lines
1143
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.

Dependency Surface

Detected Declarations

Annotated Snippet

struct  es9356_sdw_priv {
	struct sdw_slave *slave;
	struct device *dev;
	struct regmap *regmap;
	struct snd_soc_component *component;
	struct snd_soc_jack *hs_jack;

	/* lock for irq*/
	struct mutex disable_irq_lock;

	/* lock for pde*/
	struct mutex pde_lock;

	bool hw_init;
	bool first_hw_init;
	int jack_type;
	bool disable_irq;

	struct delayed_work interrupt_handle_work;
	struct delayed_work button_detect_work;
	unsigned int sdca_status;
};

static int es9356_sdw_component_probe(struct snd_soc_component *component)
{
	struct es9356_sdw_priv *es9356 = snd_soc_component_get_drvdata(component);

	es9356->component = component;

	return 0;
}

static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -9600, 12, 0);
static const DECLARE_TLV_DB_SCALE(amic_gain_tlv, 0, 3, 0);
static const DECLARE_TLV_DB_SCALE(dmic_gain_tlv, 0, 6, 0);

static const struct snd_kcontrol_new es9356_sdca_controls[] = {
	SDCA_SINGLE_Q78_TLV("FU41 Left Playback Volume",
		SDW_SDCA_CTL(FUNC_NUM_UAJ, ES9356_SDCA_ENT_FU41, ES9356_SDCA_CTL_FU_VOLUME, CH_L),
		ES9356_VOLUME_MIN, ES9356_VOLUME_MAX, ES9356_VOLUME_STEP, out_vol_tlv),
	SDCA_SINGLE_Q78_TLV("FU41 Right Playback Volume",
		SDW_SDCA_CTL(FUNC_NUM_UAJ, ES9356_SDCA_ENT_FU41, ES9356_SDCA_CTL_FU_VOLUME, CH_R),
		ES9356_VOLUME_MIN, ES9356_VOLUME_MAX, ES9356_VOLUME_STEP, out_vol_tlv),
	SDCA_SINGLE_Q78_TLV("FU36 Left Capture Volume",
		SDW_SDCA_CTL(FUNC_NUM_UAJ, ES9356_SDCA_ENT_FU36, ES9356_SDCA_CTL_FU_VOLUME, CH_L),
		ES9356_VOLUME_MIN, ES9356_VOLUME_MAX, ES9356_VOLUME_STEP, out_vol_tlv),
	SDCA_SINGLE_Q78_TLV("FU36 Right Capture Volume",
		SDW_SDCA_CTL(FUNC_NUM_UAJ, ES9356_SDCA_ENT_FU36, ES9356_SDCA_CTL_FU_VOLUME, CH_R),
		ES9356_VOLUME_MIN, ES9356_VOLUME_MAX, ES9356_VOLUME_STEP, out_vol_tlv),
	SDCA_SINGLE_Q78_TLV("FU33 Capture Volume",
		SDW_SDCA_CTL(FUNC_NUM_UAJ, ES9356_SDCA_ENT_FU33, ES9356_SDCA_CTL_FU_CH_GAIN, 0),
		ES9356_GAIN_MIN, ES9356_AMIC_GAIN_MAX, ES9356_AMIC_GAIN_STEP, amic_gain_tlv),
	SDCA_SINGLE_Q78_TLV("FU21 Left Playback Volume",
		SDW_SDCA_CTL(FUNC_NUM_AMP, ES9356_SDCA_ENT_FU21, ES9356_SDCA_CTL_FU_VOLUME, CH_L),
		ES9356_VOLUME_MIN, ES9356_VOLUME_MAX, ES9356_VOLUME_STEP, out_vol_tlv),
	SDCA_SINGLE_Q78_TLV("FU21 Right Playback Volume",
		SDW_SDCA_CTL(FUNC_NUM_AMP, ES9356_SDCA_ENT_FU21, ES9356_SDCA_CTL_FU_VOLUME, CH_R),
		ES9356_VOLUME_MIN, ES9356_VOLUME_MAX, ES9356_VOLUME_STEP, out_vol_tlv),
	SDCA_SINGLE_Q78_TLV("FU113 Left Capture Volume",
		SDW_SDCA_CTL(FUNC_NUM_MIC, ES9356_SDCA_ENT_FU113, ES9356_SDCA_CTL_FU_VOLUME, CH_L),
		ES9356_VOLUME_MIN, ES9356_VOLUME_MAX, ES9356_VOLUME_STEP, out_vol_tlv),
	SDCA_SINGLE_Q78_TLV("FU113 Right Capture Volume",
		SDW_SDCA_CTL(FUNC_NUM_MIC, ES9356_SDCA_ENT_FU113, ES9356_SDCA_CTL_FU_VOLUME, CH_R),
		ES9356_VOLUME_MIN, ES9356_VOLUME_MAX, ES9356_VOLUME_STEP, out_vol_tlv),
	SDCA_SINGLE_Q78_TLV("FU11 Capture Volume",
		SDW_SDCA_CTL(FUNC_NUM_MIC, ES9356_SDCA_ENT_FU11, ES9356_SDCA_CTL_FU_CH_GAIN, 0),
		ES9356_GAIN_MIN, ES9356_DMIC_GAIN_MAX, ES9356_DMIC_GAIN_STEP, dmic_gain_tlv),
};

static const char *const es9356_left_mux_txt[] = {
	"Left",
	"Right",
};

static const char *const es9356_right_mux_txt[] = {
	"Right",
	"Left",
};

static const struct soc_enum es9356_left_mux_enum =
	SOC_ENUM_SINGLE(ES9356_DAC_SWAP, 1,
			ARRAY_SIZE(es9356_left_mux_txt), es9356_left_mux_txt);
static const struct soc_enum es9356_right_mux_enum =
	SOC_ENUM_SINGLE(ES9356_DAC_SWAP, 0,
			ARRAY_SIZE(es9356_right_mux_txt), es9356_right_mux_txt);

static const struct snd_kcontrol_new es9356_left_mux_controls =
	SOC_DAPM_ENUM("Channel MUX", es9356_left_mux_enum);
static const struct snd_kcontrol_new es9356_right_mux_controls =
	SOC_DAPM_ENUM("Channel MUX", es9356_right_mux_enum);

Annotation

Implementation Notes