int snd_soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num);
#endif
+++++void snd_soc_disconnect_sync(struct device *dev);
+++++
struct snd_pcm_substream *snd_soc_get_dai_substream(struct snd_soc_card *card,
const char *dai_link, int stream);
struct snd_soc_pcm_runtime *snd_soc_get_pcm_runtime(struct snd_soc_card *card,
int (*suspend)(struct snd_soc_component *);
int (*resume)(struct snd_soc_component *);
+++++ unsigned int (*read)(struct snd_soc_component *, unsigned int);
+++++ int (*write)(struct snd_soc_component *, unsigned int, unsigned int);
+++++
/* pcm creation and destruction */
int (*pcm_new)(struct snd_soc_pcm_runtime *);
void (*pcm_free)(struct snd_pcm *);
struct list_head card_aux_list; /* for auxiliary bound components */
struct list_head card_list;
----- struct snd_soc_dai_driver *dai_drv;
----- int num_dai;
-----
const struct snd_soc_component_driver *driver;
struct list_head dai_list;
+++++ int num_dai;
int (*read)(struct snd_soc_component *, unsigned int, unsigned int *);
int (*write)(struct snd_soc_component *, unsigned int, unsigned int);
if (attr == &dev_attr_pmdown_time.attr)
return attr->mode; /* always visible */
----- return rtd->codec ? attr->mode : 0; /* enabled only with codec */
+++++ return rtd->num_codecs ? attr->mode : 0; /* enabled only with codec */
}
static const struct attribute_group soc_dapm_dev_group = {
return NULL;
}
+++++EXPORT_SYMBOL_GPL(snd_soc_rtdcom_lookup);
struct snd_pcm_substream *snd_soc_get_dai_substream(struct snd_soc_card *card,
const char *dai_link, int stream)
return 0;
}
+++++void snd_soc_disconnect_sync(struct device *dev)
+++++{
+++++ struct snd_soc_component *component = snd_soc_lookup_component(dev, NULL);
+++++
+++++ if (!component || !component->card)
+++++ return;
+++++
+++++ snd_card_disconnect_sync(component->card->snd_card);
+++++}
+++++
/**
* snd_soc_add_dai_link - Add a DAI link dynamically
* @card: The ASoC card to which the DAI link is added
}
/* Flip the polarity for the "CPU" end of a CODEC<->CODEC link */
----- if (cpu_dai->codec) {
+++++ /* the component which has non_legacy_dai_naming is Codec */
+++++ if (cpu_dai->codec ||
+++++ cpu_dai->component->driver->non_legacy_dai_naming) {
unsigned int inv_dai_fmt;
inv_dai_fmt = dai_fmt & ~SND_SOC_DAIFMT_MASTER_MASK;
if (!dai->driver->ops)
dai->driver->ops = &null_dai_ops;
----- list_add(&dai->list, &component->dai_list);
+++++ list_add_tail(&dai->list, &component->dai_list);
component->num_dai++;
dev_dbg(dev, "ASoC: Registered DAI '%s'\n", dai->name);
dev_dbg(dev, "ASoC: dai register %s #%zu\n", dev_name(dev), count);
----- component->dai_drv = dai_drv;
-----
for (i = 0; i < count; i++) {
dai = soc_add_dai(component, dai_drv + i,
args,
dai_name);
} else {
+++++ struct snd_soc_dai *dai;
int id = -1;
switch (args->args_count) {
ret = 0;
----- *dai_name = pos->dai_drv[id].name;
+++++ /* find target DAI */
+++++ list_for_each_entry(dai, &pos->dai_list, list) {
+++++ if (id == 0)
+++++ break;
+++++ id--;
+++++ }
+++++
+++++ *dai_name = dai->driver->name;
if (!*dai_name)
*dai_name = pos->name;
}