xref: /openbmc/linux/include/sound/soc-card.h (revision fb3618f6)
11793936bSKuninori Morimoto /* SPDX-License-Identifier: GPL-2.0
21793936bSKuninori Morimoto  *
31793936bSKuninori Morimoto  * soc-card.h
41793936bSKuninori Morimoto  *
51793936bSKuninori Morimoto  * Copyright (C) 2019 Renesas Electronics Corp.
61793936bSKuninori Morimoto  * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
71793936bSKuninori Morimoto  */
81793936bSKuninori Morimoto #ifndef __SOC_CARD_H
91793936bSKuninori Morimoto #define __SOC_CARD_H
101793936bSKuninori Morimoto 
11bf5bb8dbSKuninori Morimoto enum snd_soc_card_subclass {
120f3b8184SKuninori Morimoto 	SND_SOC_CARD_CLASS_ROOT		= 0,
13bf5bb8dbSKuninori Morimoto 	SND_SOC_CARD_CLASS_RUNTIME	= 1,
14bf5bb8dbSKuninori Morimoto };
15bf5bb8dbSKuninori Morimoto 
snd_soc_card_mutex_lock_root(struct snd_soc_card * card)160f3b8184SKuninori Morimoto static inline void snd_soc_card_mutex_lock_root(struct snd_soc_card *card)
170f3b8184SKuninori Morimoto {
180f3b8184SKuninori Morimoto 	mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_ROOT);
190f3b8184SKuninori Morimoto }
200f3b8184SKuninori Morimoto 
snd_soc_card_mutex_lock(struct snd_soc_card * card)210f3b8184SKuninori Morimoto static inline void snd_soc_card_mutex_lock(struct snd_soc_card *card)
220f3b8184SKuninori Morimoto {
230f3b8184SKuninori Morimoto 	mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
240f3b8184SKuninori Morimoto }
250f3b8184SKuninori Morimoto 
snd_soc_card_mutex_unlock(struct snd_soc_card * card)260f3b8184SKuninori Morimoto static inline void snd_soc_card_mutex_unlock(struct snd_soc_card *card)
270f3b8184SKuninori Morimoto {
280f3b8184SKuninori Morimoto 	mutex_unlock(&card->mutex);
290f3b8184SKuninori Morimoto }
300f3b8184SKuninori Morimoto 
31209c6cdfSKuninori Morimoto struct snd_kcontrol *snd_soc_card_get_kcontrol(struct snd_soc_card *soc_card,
32209c6cdfSKuninori Morimoto 					       const char *name);
33*fb3618f6SRichard Fitzgerald struct snd_kcontrol *snd_soc_card_get_kcontrol_locked(struct snd_soc_card *soc_card,
34*fb3618f6SRichard Fitzgerald 						      const char *name);
353359e9b6SKuninori Morimoto int snd_soc_card_jack_new(struct snd_soc_card *card, const char *id, int type,
3619aed2d6SAkihiko Odaki 			  struct snd_soc_jack *jack);
3719aed2d6SAkihiko Odaki int snd_soc_card_jack_new_pins(struct snd_soc_card *card, const char *id,
3819aed2d6SAkihiko Odaki 			       int type, struct snd_soc_jack *jack,
3919aed2d6SAkihiko Odaki 			       struct snd_soc_jack_pin *pins,
4019aed2d6SAkihiko Odaki 			       unsigned int num_pins);
41209c6cdfSKuninori Morimoto 
42130dc08cSKuninori Morimoto int snd_soc_card_suspend_pre(struct snd_soc_card *card);
43d17b60b2SKuninori Morimoto int snd_soc_card_suspend_post(struct snd_soc_card *card);
44934c752cSKuninori Morimoto int snd_soc_card_resume_pre(struct snd_soc_card *card);
45739443d1SKuninori Morimoto int snd_soc_card_resume_post(struct snd_soc_card *card);
46130dc08cSKuninori Morimoto 
4773de4b02SKuninori Morimoto int snd_soc_card_probe(struct snd_soc_card *card);
485c0eac03SKuninori Morimoto int snd_soc_card_late_probe(struct snd_soc_card *card);
49df4d27b1SMartin Povišer void snd_soc_card_fixup_controls(struct snd_soc_card *card);
50b0275d95SKuninori Morimoto int snd_soc_card_remove(struct snd_soc_card *card);
5173de4b02SKuninori Morimoto 
5239caefdaSKuninori Morimoto int snd_soc_card_set_bias_level(struct snd_soc_card *card,
5339caefdaSKuninori Morimoto 				struct snd_soc_dapm_context *dapm,
5439caefdaSKuninori Morimoto 				enum snd_soc_bias_level level);
55d41278eaSKuninori Morimoto int snd_soc_card_set_bias_level_post(struct snd_soc_card *card,
56d41278eaSKuninori Morimoto 				     struct snd_soc_dapm_context *dapm,
57d41278eaSKuninori Morimoto 				     enum snd_soc_bias_level level);
5839caefdaSKuninori Morimoto 
59cbc7a6b5SKuninori Morimoto int snd_soc_card_add_dai_link(struct snd_soc_card *card,
60cbc7a6b5SKuninori Morimoto 			      struct snd_soc_dai_link *dai_link);
61fcbbcc32SKuninori Morimoto void snd_soc_card_remove_dai_link(struct snd_soc_card *card,
62fcbbcc32SKuninori Morimoto 				  struct snd_soc_dai_link *dai_link);
63cbc7a6b5SKuninori Morimoto 
64c766264eSRichard Fitzgerald #ifdef CONFIG_PCI
snd_soc_card_set_pci_ssid(struct snd_soc_card * card,unsigned short vendor,unsigned short device)65c766264eSRichard Fitzgerald static inline void snd_soc_card_set_pci_ssid(struct snd_soc_card *card,
66c766264eSRichard Fitzgerald 					     unsigned short vendor,
67c766264eSRichard Fitzgerald 					     unsigned short device)
68c766264eSRichard Fitzgerald {
69c766264eSRichard Fitzgerald 	card->pci_subsystem_vendor = vendor;
70c766264eSRichard Fitzgerald 	card->pci_subsystem_device = device;
71c766264eSRichard Fitzgerald 	card->pci_subsystem_set = true;
72c766264eSRichard Fitzgerald }
73c766264eSRichard Fitzgerald 
snd_soc_card_get_pci_ssid(struct snd_soc_card * card,unsigned short * vendor,unsigned short * device)74c766264eSRichard Fitzgerald static inline int snd_soc_card_get_pci_ssid(struct snd_soc_card *card,
75c766264eSRichard Fitzgerald 					    unsigned short *vendor,
76c766264eSRichard Fitzgerald 					    unsigned short *device)
77c766264eSRichard Fitzgerald {
78c766264eSRichard Fitzgerald 	if (!card->pci_subsystem_set)
79c766264eSRichard Fitzgerald 		return -ENOENT;
80c766264eSRichard Fitzgerald 
81c766264eSRichard Fitzgerald 	*vendor = card->pci_subsystem_vendor;
82c766264eSRichard Fitzgerald 	*device = card->pci_subsystem_device;
83c766264eSRichard Fitzgerald 
84c766264eSRichard Fitzgerald 	return 0;
85c766264eSRichard Fitzgerald }
86c766264eSRichard Fitzgerald #else /* !CONFIG_PCI */
snd_soc_card_set_pci_ssid(struct snd_soc_card * card,unsigned short vendor,unsigned short device)87c766264eSRichard Fitzgerald static inline void snd_soc_card_set_pci_ssid(struct snd_soc_card *card,
88c766264eSRichard Fitzgerald 					     unsigned short vendor,
89c766264eSRichard Fitzgerald 					     unsigned short device)
90c766264eSRichard Fitzgerald {
91c766264eSRichard Fitzgerald }
92c766264eSRichard Fitzgerald 
snd_soc_card_get_pci_ssid(struct snd_soc_card * card,unsigned short * vendor,unsigned short * device)93c766264eSRichard Fitzgerald static inline int snd_soc_card_get_pci_ssid(struct snd_soc_card *card,
94c766264eSRichard Fitzgerald 					    unsigned short *vendor,
95c766264eSRichard Fitzgerald 					    unsigned short *device)
96c766264eSRichard Fitzgerald {
97c766264eSRichard Fitzgerald 	return -ENOENT;
98c766264eSRichard Fitzgerald }
99c766264eSRichard Fitzgerald #endif /* CONFIG_PCI */
100c766264eSRichard Fitzgerald 
10163efed58SKuninori Morimoto /* device driver data */
snd_soc_card_set_drvdata(struct snd_soc_card * card,void * data)10263efed58SKuninori Morimoto static inline void snd_soc_card_set_drvdata(struct snd_soc_card *card,
10363efed58SKuninori Morimoto 					    void *data)
10463efed58SKuninori Morimoto {
10563efed58SKuninori Morimoto 	card->drvdata = data;
10663efed58SKuninori Morimoto }
10763efed58SKuninori Morimoto 
snd_soc_card_get_drvdata(struct snd_soc_card * card)10863efed58SKuninori Morimoto static inline void *snd_soc_card_get_drvdata(struct snd_soc_card *card)
10963efed58SKuninori Morimoto {
11063efed58SKuninori Morimoto 	return card->drvdata;
11163efed58SKuninori Morimoto }
11263efed58SKuninori Morimoto 
11365a75718SKuninori Morimoto static inline
snd_soc_card_get_codec_dai(struct snd_soc_card * card,const char * dai_name)11465a75718SKuninori Morimoto struct snd_soc_dai *snd_soc_card_get_codec_dai(struct snd_soc_card *card,
11565a75718SKuninori Morimoto 					       const char *dai_name)
11665a75718SKuninori Morimoto {
11765a75718SKuninori Morimoto 	struct snd_soc_pcm_runtime *rtd;
11865a75718SKuninori Morimoto 
11965a75718SKuninori Morimoto 	for_each_card_rtds(card, rtd) {
120c92c96cdSKuninori Morimoto 		if (!strcmp(snd_soc_rtd_to_codec(rtd, 0)->name, dai_name))
121c92c96cdSKuninori Morimoto 			return snd_soc_rtd_to_codec(rtd, 0);
12265a75718SKuninori Morimoto 	}
12365a75718SKuninori Morimoto 
12465a75718SKuninori Morimoto 	return NULL;
12565a75718SKuninori Morimoto }
12665a75718SKuninori Morimoto 
1271793936bSKuninori Morimoto #endif /* __SOC_CARD_H */
128