mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-06 05:13:18 +00:00
ALSA: hda: Update and expose snd_hda_codec_device_init()
With few changes, snd_hda_codec_device_init() can be re-used by ASoC drivers. While at it, provide kernel doc for the exposed function. Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com> Link: https://lore.kernel.org/r/20220214101404.4074026-3-cezary.rojewski@intel.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
fefee95488
commit
595511a3ab
@ -306,6 +306,9 @@ struct hda_codec {
|
||||
/*
|
||||
* constructors
|
||||
*/
|
||||
__printf(3, 4) struct hda_codec *
|
||||
snd_hda_codec_device_init(struct hda_bus *bus, unsigned int codec_addr,
|
||||
const char *fmt, ...);
|
||||
int snd_hda_codec_new(struct hda_bus *bus, struct snd_card *card,
|
||||
unsigned int codec_addr, struct hda_codec **codecp);
|
||||
int snd_hda_codec_device_new(struct hda_bus *bus, struct snd_card *card,
|
||||
|
@ -877,36 +877,48 @@ static void snd_hda_codec_dev_release(struct device *dev)
|
||||
|
||||
#define DEV_NAME_LEN 31
|
||||
|
||||
static int snd_hda_codec_device_init(struct hda_bus *bus, struct snd_card *card,
|
||||
unsigned int codec_addr, struct hda_codec **codecp)
|
||||
/**
|
||||
* snd_hda_codec_device_init - allocate HDA codec device
|
||||
* @bus: codec's parent bus
|
||||
* @codec_addr: the codec address on the parent bus
|
||||
* @fmt: format string for the device's name
|
||||
*
|
||||
* Returns newly allocated codec device or ERR_PTR() on failure.
|
||||
*/
|
||||
struct hda_codec *
|
||||
snd_hda_codec_device_init(struct hda_bus *bus, unsigned int codec_addr,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
va_list vargs;
|
||||
char name[DEV_NAME_LEN];
|
||||
struct hda_codec *codec;
|
||||
int err;
|
||||
|
||||
dev_dbg(card->dev, "%s: entry\n", __func__);
|
||||
|
||||
if (snd_BUG_ON(!bus))
|
||||
return -EINVAL;
|
||||
return ERR_PTR(-EINVAL);
|
||||
if (snd_BUG_ON(codec_addr > HDA_MAX_CODEC_ADDRESS))
|
||||
return -EINVAL;
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
codec = kzalloc(sizeof(*codec), GFP_KERNEL);
|
||||
if (!codec)
|
||||
return -ENOMEM;
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
va_start(vargs, fmt);
|
||||
vsprintf(name, fmt, vargs);
|
||||
va_end(vargs);
|
||||
|
||||
sprintf(name, "hdaudioC%dD%d", card->number, codec_addr);
|
||||
err = snd_hdac_device_init(&codec->core, &bus->core, name, codec_addr);
|
||||
if (err < 0) {
|
||||
kfree(codec);
|
||||
return err;
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
codec->bus = bus;
|
||||
codec->core.type = HDA_DEV_LEGACY;
|
||||
*codecp = codec;
|
||||
|
||||
return err;
|
||||
return codec;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_hda_codec_device_init);
|
||||
|
||||
/**
|
||||
* snd_hda_codec_new - create a HDA codec
|
||||
@ -920,11 +932,13 @@ static int snd_hda_codec_device_init(struct hda_bus *bus, struct snd_card *card,
|
||||
int snd_hda_codec_new(struct hda_bus *bus, struct snd_card *card,
|
||||
unsigned int codec_addr, struct hda_codec **codecp)
|
||||
{
|
||||
int ret;
|
||||
struct hda_codec *codec;
|
||||
|
||||
ret = snd_hda_codec_device_init(bus, card, codec_addr, codecp);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
codec = snd_hda_codec_device_init(bus, codec_addr, "hdaudioC%dD%d",
|
||||
card->number, codec_addr);
|
||||
if (IS_ERR(codec))
|
||||
return PTR_ERR(codec);
|
||||
*codecp = codec;
|
||||
|
||||
return snd_hda_codec_device_new(bus, card, codec_addr, *codecp);
|
||||
}
|
||||
@ -951,7 +965,6 @@ int snd_hda_codec_device_new(struct hda_bus *bus, struct snd_card *card,
|
||||
codec->core.dev.release = snd_hda_codec_dev_release;
|
||||
codec->core.exec_verb = codec_exec_verb;
|
||||
|
||||
codec->bus = bus;
|
||||
codec->card = card;
|
||||
codec->addr = codec_addr;
|
||||
mutex_init(&codec->spdif_mutex);
|
||||
|
Loading…
Reference in New Issue
Block a user