1/* SPDX-License-Identifier: GPL-2.0 2 * 3 * soc-card.h 4 * 5 * Copyright (C) 2019 Renesas Electronics Corp. 6 * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 7 */ 8#ifndef __SOC_CARD_H 9#define __SOC_CARD_H 10 11enum snd_soc_card_subclass { 12 SND_SOC_CARD_CLASS_INIT = 0, 13 SND_SOC_CARD_CLASS_RUNTIME = 1, 14}; 15 16struct snd_kcontrol *snd_soc_card_get_kcontrol(struct snd_soc_card *soc_card, 17 const char *name); 18int snd_soc_card_jack_new(struct snd_soc_card *card, const char *id, int type, 19 struct snd_soc_jack *jack, 20 struct snd_soc_jack_pin *pins, unsigned int num_pins); 21 22int snd_soc_card_suspend_pre(struct snd_soc_card *card); 23int snd_soc_card_suspend_post(struct snd_soc_card *card); 24int snd_soc_card_resume_pre(struct snd_soc_card *card); 25int snd_soc_card_resume_post(struct snd_soc_card *card); 26 27int snd_soc_card_probe(struct snd_soc_card *card); 28int snd_soc_card_late_probe(struct snd_soc_card *card); 29int snd_soc_card_remove(struct snd_soc_card *card); 30 31int snd_soc_card_set_bias_level(struct snd_soc_card *card, 32 struct snd_soc_dapm_context *dapm, 33 enum snd_soc_bias_level level); 34int snd_soc_card_set_bias_level_post(struct snd_soc_card *card, 35 struct snd_soc_dapm_context *dapm, 36 enum snd_soc_bias_level level); 37 38int snd_soc_card_add_dai_link(struct snd_soc_card *card, 39 struct snd_soc_dai_link *dai_link); 40void snd_soc_card_remove_dai_link(struct snd_soc_card *card, 41 struct snd_soc_dai_link *dai_link); 42 43#ifdef CONFIG_PCI 44static inline void snd_soc_card_set_pci_ssid(struct snd_soc_card *card, 45 unsigned short vendor, 46 unsigned short device) 47{ 48 card->pci_subsystem_vendor = vendor; 49 card->pci_subsystem_device = device; 50 card->pci_subsystem_set = true; 51} 52 53static inline int snd_soc_card_get_pci_ssid(struct snd_soc_card *card, 54 unsigned short *vendor, 55 unsigned short *device) 56{ 57 if (!card->pci_subsystem_set) 58 return -ENOENT; 59 60 *vendor = card->pci_subsystem_vendor; 61 *device = card->pci_subsystem_device; 62 63 return 0; 64} 65#else /* !CONFIG_PCI */ 66static inline void snd_soc_card_set_pci_ssid(struct snd_soc_card *card, 67 unsigned short vendor, 68 unsigned short device) 69{ 70} 71 72static inline int snd_soc_card_get_pci_ssid(struct snd_soc_card *card, 73 unsigned short *vendor, 74 unsigned short *device) 75{ 76 return -ENOENT; 77} 78#endif /* CONFIG_PCI */ 79 80/* device driver data */ 81static inline void snd_soc_card_set_drvdata(struct snd_soc_card *card, 82 void *data) 83{ 84 card->drvdata = data; 85} 86 87static inline void *snd_soc_card_get_drvdata(struct snd_soc_card *card) 88{ 89 return card->drvdata; 90} 91 92static inline 93struct snd_soc_dai *snd_soc_card_get_codec_dai(struct snd_soc_card *card, 94 const char *dai_name) 95{ 96 struct snd_soc_pcm_runtime *rtd; 97 98 for_each_card_rtds(card, rtd) { 99 if (!strcmp(asoc_rtd_to_codec(rtd, 0)->name, dai_name)) 100 return asoc_rtd_to_codec(rtd, 0); 101 } 102 103 return NULL; 104} 105 106#endif /* __SOC_CARD_H */ 107