asoc: codecs: Add variant entry support for wcd937x and wcd938x

Add variant entry support for wcd937x and wcd938x codecs to
differentiate between wcd9370/80 and wcd9375/85 variants.

Change-Id: Ife20d14462a0b0968e0458471af3823872592e10
Signed-off-by: Aditya Bavanari <abavanar@codeaurora.org>
This commit is contained in:
Aditya Bavanari
2019-07-08 18:30:19 +05:30
parent f57dd4262b
commit d37e02049c
4 changed files with 116 additions and 2 deletions

View File

@@ -29,6 +29,7 @@
#define WCD9370_VARIANT 0
#define WCD9375_VARIANT 5
#define WCD937X_VARIANT_ENTRY_SIZE 32
#define NUM_SWRS_DT_PARAMS 5
@@ -2200,12 +2201,46 @@ static struct snd_info_entry_ops wcd937x_info_ops = {
.read = wcd937x_version_read,
};
static ssize_t wcd937x_variant_read(struct snd_info_entry *entry,
void *file_private_data,
struct file *file,
char __user *buf, size_t count,
loff_t pos)
{
struct wcd937x_priv *priv;
char buffer[WCD937X_VARIANT_ENTRY_SIZE];
int len = 0;
priv = (struct wcd937x_priv *) entry->private_data;
if (!priv) {
pr_err("%s: wcd937x priv is null\n", __func__);
return -EINVAL;
}
switch (priv->variant) {
case WCD9370_VARIANT:
len = snprintf(buffer, sizeof(buffer), "WCD9370\n");
break;
case WCD9375_VARIANT:
len = snprintf(buffer, sizeof(buffer), "WCD9375\n");
break;
default:
len = snprintf(buffer, sizeof(buffer), "VER_UNDEFINED\n");
}
return simple_read_from_buffer(buf, count, &pos, buffer, len);
}
static struct snd_info_entry_ops wcd937x_variant_ops = {
.read = wcd937x_variant_read,
};
/*
* wcd937x_info_create_codec_entry - creates wcd937x module
* @codec_root: The parent directory
* @component: component instance
*
* Creates wcd937x module and version entry under the given
* Creates wcd937x module, variant and version entry under the given
* parent directory.
*
* Return: 0 on success or negative error code on failure.
@@ -2214,6 +2249,7 @@ int wcd937x_info_create_codec_entry(struct snd_info_entry *codec_root,
struct snd_soc_component *component)
{
struct snd_info_entry *version_entry;
struct snd_info_entry *variant_entry;
struct wcd937x_priv *priv;
struct snd_soc_card *card;
@@ -2254,6 +2290,25 @@ int wcd937x_info_create_codec_entry(struct snd_info_entry *codec_root,
}
priv->version_entry = version_entry;
variant_entry = snd_info_create_card_entry(card->snd_card,
"variant",
priv->entry);
if (!variant_entry) {
dev_dbg(codec->dev, "%s: failed to create wcd937x variant entry\n",
__func__);
return -ENOMEM;
}
variant_entry->private_data = priv;
variant_entry->size = WCD937X_VARIANT_ENTRY_SIZE;
variant_entry->content = SNDRV_INFO_CONTENT_DATA;
variant_entry->c.ops = &wcd937x_variant_ops;
if (snd_info_register(variant_entry) < 0) {
snd_info_free_entry(variant_entry);
return -ENOMEM;
}
priv->variant_entry = variant_entry;
return 0;
}
EXPORT_SYMBOL(wcd937x_info_create_codec_entry);