include/sound/simple_card_utils.h

Source file repositories/reference/linux-study-clean/include/sound/simple_card_utils.h

File Facts

System
Linux kernel
Corpus path
include/sound/simple_card_utils.h
Extension
.h
Size
9796 bytes
Lines
303
Domain
Driver Families
Bucket
include/sound
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 simple_util_tdm_width_map {
	u8 sample_bits;
	u8 slot_count;
	u16 slot_width;
};

struct simple_util_dai {
	const char *name;
	unsigned int sysclk;
	int clk_direction;
	int slots;
	int slot_width;
	unsigned int tx_slot_mask;
	unsigned int rx_slot_mask;
	struct clk *clk;
	bool clk_fixed;
	struct simple_util_tdm_width_map *tdm_width_map;
	int n_tdm_widths;
};

struct simple_util_data {
	u32 convert_rate;
	u32 convert_channels;
	const char *convert_sample_format;
};

struct simple_util_jack {
	struct snd_soc_jack jack;
	struct snd_soc_jack_pin pin;
	struct snd_soc_jack_gpio gpio;
};

struct prop_nums {
	int cpus;
	int codecs;
	int platforms;
};

enum simple_util_sysclk_order {
	SIMPLE_SYSCLK_ORDER_CODEC_FIRST = 0,
	SIMPLE_SYSCLK_ORDER_CPU_FIRST,
};

struct simple_util_priv {
	struct snd_soc_card snd_card;
	struct simple_dai_props {
		struct simple_util_dai *cpu_dai;
		struct simple_util_dai *codec_dai;
		struct simple_util_data adata;
		struct snd_soc_codec_conf *codec_conf;
		struct prop_nums num;
		unsigned int mclk_fs;
		enum simple_util_sysclk_order sysclk_order;
	} *dai_props;
	struct simple_util_jack hp_jack;
	struct simple_util_jack mic_jack;
	struct snd_soc_jack *aux_jacks;
	struct snd_soc_dai_link *dai_link;
	struct simple_util_dai *dais;
	struct snd_soc_dai_link_component *dlcs;
	struct snd_soc_codec_conf *codec_conf;
	struct gpio_desc *pa_gpio;
	const struct snd_soc_ops *ops;
	unsigned int dpcm_selectable:1;
	unsigned int force_dpcm:1;
};
#define simple_priv_to_card(priv)	(&(priv)->snd_card)
#define simple_priv_to_props(priv, i)	((priv)->dai_props + (i))
#define simple_priv_to_dev(priv)	(simple_priv_to_card(priv)->dev)
#define simple_priv_to_link(priv, i)	(simple_priv_to_card(priv)->dai_link + (i))

#define simple_props_to_dlc_cpu(props, i)	((props)->cpus + i)
#define simple_props_to_dlc_codec(props, i)	((props)->codecs + i)
#define simple_props_to_dlc_platform(props, i)	((props)->platforms + i)

#define simple_props_to_dai_cpu(props, i)	((props)->cpu_dai + i)
#define simple_props_to_dai_codec(props, i)	((props)->codec_dai + i)
#define simple_props_to_codec_conf(props, i)	((props)->codec_conf + i)

/* has the same effect as simple_priv_to_props(). Preferred over
 * simple_priv_to_props() when dealing with PCM runtime data as
 * the ID stored in rtd->id may not be a valid array index.
 */
#define runtime_simple_priv_to_props(priv, rtd)				\
	((priv)->dai_props + ((rtd)->dai_link - (priv)->dai_link))

#define for_each_prop_dlc_cpus(props, i, cpu)				\
	for ((i) = 0;							\
	     ((i) < (props)->num.cpus) &&				\
		     ((cpu) = simple_props_to_dlc_cpu(props, i));	\

Annotation

Implementation Notes