sound/soc/codecs/jz4725b.c

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

File Facts

System
Linux kernel
Corpus path
sound/soc/codecs/jz4725b.c
Extension
.c
Size
18904 bytes
Lines
658
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 jz_icdc {
	struct regmap *regmap;
	void __iomem *base;
};

static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(jz4725b_adc_tlv,     0, 150, 0);
static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(jz4725b_dac_tlv, -2250, 150, 0);
static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(jz4725b_mix_tlv,
	 0, 11, TLV_DB_SCALE_ITEM(-2250,   0, 0),
	12, 31, TLV_DB_SCALE_ITEM(-2250, 150, 0),
);

static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(jz4725b_out_tlv,
	 0, 11, TLV_DB_SCALE_ITEM(-3350, 200, 0),
	12, 23, TLV_DB_SCALE_ITEM(-1050, 100, 0),
	24, 31, TLV_DB_SCALE_ITEM(  100,  50, 0),
);
static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(jz4725b_mic_boost_tlv, 0, 2000, 0);

static const char * const jz4725b_mic_mode_texts[] = {
	"Single Ended", "Differential",
};

static const struct soc_enum jz4725b_mic_mode_enum =
	SOC_ENUM_SINGLE(JZ4725B_CODEC_REG_CR3, REG_CR3_MICDIFF_OFFSET,
			2, jz4725b_mic_mode_texts);

static const struct snd_kcontrol_new jz4725b_codec_controls[] = {
	SOC_DOUBLE_TLV("DAC Playback Volume",
		       JZ4725B_CODEC_REG_CGR1,
		       REG_CGR1_GODL_OFFSET,
		       REG_CGR1_GODR_OFFSET,
		       0xf, 1, jz4725b_dac_tlv),
	SOC_DOUBLE_TLV("Master Capture Volume",
		       JZ4725B_CODEC_REG_CGR10,
		       REG_CGR10_GIL_OFFSET,
		       REG_CGR10_GIR_OFFSET,
		       0xf, 0, jz4725b_adc_tlv),
	SOC_DOUBLE_R_TLV("Mixer Line In Bypass Playback Volume",
			 JZ4725B_CODEC_REG_CGR3,
			 JZ4725B_CODEC_REG_CGR2,
			 REG_CGR2_GO1R_OFFSET,
			 0x1f, 1, jz4725b_mix_tlv),
	SOC_DOUBLE_R_TLV("Mixer Mic 1 Bypass Playback Volume",
			 JZ4725B_CODEC_REG_CGR5,
			 JZ4725B_CODEC_REG_CGR4,
			 REG_CGR4_GO2R_OFFSET,
			 0x1f, 1, jz4725b_mix_tlv),
	SOC_DOUBLE_R_TLV("Mixer Mic 2 Bypass Playback Volume",
			 JZ4725B_CODEC_REG_CGR7,
			 JZ4725B_CODEC_REG_CGR6,
			 REG_CGR6_GO3R_OFFSET,
			 0x1f, 1, jz4725b_mix_tlv),

	SOC_DOUBLE_R_TLV("Master Playback Volume",
			 JZ4725B_CODEC_REG_CGR9,
			 JZ4725B_CODEC_REG_CGR8,
			 REG_CGR8_GOR_OFFSET,
			 0x1f, 1, jz4725b_out_tlv),

	SOC_SINGLE("DAC Playback Switch", JZ4725B_CODEC_REG_CR1,
		   REG_CR1_DAC_MUTE_OFFSET, 1, 1),

	SOC_SINGLE("Deemphasize Filter Playback Switch",
		   JZ4725B_CODEC_REG_CR2,
		   REG_CR2_DAC_DEEMP_OFFSET, 1, 0),

	SOC_SINGLE("High-Pass Filter Capture Switch",
		   JZ4725B_CODEC_REG_CR2,
		   REG_CR2_ADC_HPF_OFFSET, 1, 0),

	SOC_ENUM("Mic Mode Capture Switch", jz4725b_mic_mode_enum),

	SOC_SINGLE_TLV("Mic1 Boost Capture Volume",
		       JZ4725B_CODEC_REG_PMR2,
		       REG_PMR2_GIM_OFFSET,
		       1, 0, jz4725b_mic_boost_tlv),
};

static const char * const jz4725b_codec_adc_src_texts[] = {
	"Mic 1", "Mic 2", "Line In", "Mixer",
};
static const unsigned int jz4725b_codec_adc_src_values[] = { 0, 1, 2, 3, };
static SOC_VALUE_ENUM_SINGLE_DECL(jz4725b_codec_adc_src_enum,
				  JZ4725B_CODEC_REG_CR3,
				  REG_CR3_INSEL_OFFSET,
				  REG_CR3_INSEL_MASK,
				  jz4725b_codec_adc_src_texts,
				  jz4725b_codec_adc_src_values);
static const struct snd_kcontrol_new jz4725b_codec_adc_src_ctrl =

Annotation

Implementation Notes