pm_message_t state);
int (*resume)(struct snd_soc_codec *);
+ /* Default DAPM setup, added after probe() is run */
+ const struct snd_soc_dapm_widget *dapm_widgets;
+ int num_dapm_widgets;
+ const struct snd_soc_dapm_route *dapm_routes;
+ int num_dapm_routes;
+
/* codec IO */
unsigned int (*read)(struct snd_soc_codec *, unsigned int);
int (*write)(struct snd_soc_codec *, unsigned int, unsigned int);
struct snd_soc_codec *codec)
{
int ret = 0;
+ const struct snd_soc_codec_driver *driver = codec->driver;
codec->card = card;
codec->dapm.card = card;
if (!try_module_get(codec->dev->driver->owner))
return -ENODEV;
- if (codec->driver->probe) {
- ret = codec->driver->probe(codec);
+ if (driver->probe) {
+ ret = driver->probe(codec);
if (ret < 0) {
dev_err(codec->dev,
"asoc: failed to probe CODEC %s: %d\n",
}
}
+ if (driver->dapm_widgets)
+ snd_soc_dapm_new_controls(&codec->dapm, driver->dapm_widgets,
+ driver->num_dapm_widgets);
+ if (driver->dapm_routes)
+ snd_soc_dapm_add_routes(&codec->dapm, driver->dapm_routes,
+ driver->num_dapm_routes);
+
soc_init_codec_debugfs(codec);
/* mark codec as probed and add to card codec list */