Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b764c33c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "asoc: Add codec entry node for wcd937x to support ADIE RTAC"

parents 4427c8b0 4ae32fc3
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -72,6 +72,11 @@ struct wcd937x_priv {
	struct codec_port_info
	struct codec_port_info
			rx_port_mapping[MAX_PORT][MAX_CH_PER_PORT];
			rx_port_mapping[MAX_PORT][MAX_CH_PER_PORT];
	struct regulator_bulk_data *supplies;
	struct regulator_bulk_data *supplies;

	u32 version;
	/* Entry for version info */
	struct snd_info_entry *entry;
	struct snd_info_entry *version_entry;
};
};


struct wcd937x_micbias_setting {
struct wcd937x_micbias_setting {
@@ -128,4 +133,6 @@ extern int wcd937x_mbhc_micb_adjust_voltage(struct snd_soc_codec *codec,
extern int wcd937x_get_micb_vout_ctl_val(u32 micb_mv);
extern int wcd937x_get_micb_vout_ctl_val(u32 micb_mv);
extern int wcd937x_micbias_control(struct snd_soc_codec *codec, int micb_num,
extern int wcd937x_micbias_control(struct snd_soc_codec *codec, int micb_num,
			int req, bool is_dapm);
			int req, bool is_dapm);
extern int wcd937x_info_create_codec_entry(struct snd_info_entry *codec_root,
				    struct snd_soc_codec *codec);
#endif
#endif
+93 −0
Original line number Original line Diff line number Diff line
@@ -36,6 +36,9 @@


#define NUM_SWRS_DT_PARAMS 5
#define NUM_SWRS_DT_PARAMS 5


#define WCD937X_VERSION_1_0 1
#define WCD937X_VERSION_ENTRY_SIZE 32

enum {
enum {
	CODEC_TX = 0,
	CODEC_TX = 0,
	CODEC_RX,
	CODEC_RX,
@@ -1564,6 +1567,95 @@ static const struct snd_soc_dapm_route wcd9375_audio_map[] = {


};
};


static ssize_t wcd937x_version_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_VERSION_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->version) {
	case WCD937X_VERSION_1_0:
		len = snprintf(buffer, sizeof(buffer), "WCD937X_1_0\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_info_ops = {
	.read = wcd937x_version_read,
};

/*
 * wcd937x_info_create_codec_entry - creates wcd937x module
 * @codec_root: The parent directory
 * @codec: Codec instance
 *
 * Creates wcd937x module and version entry under the given
 * parent directory.
 *
 * Return: 0 on success or negative error code on failure.
 */
int wcd937x_info_create_codec_entry(struct snd_info_entry *codec_root,
				   struct snd_soc_codec *codec)
{
	struct snd_info_entry *version_entry;
	struct wcd937x_priv *priv;
	struct snd_soc_card *card;

	if (!codec_root || !codec)
		return -EINVAL;

	priv = snd_soc_codec_get_drvdata(codec);
	if (priv->entry) {
		dev_dbg(priv->dev,
			"%s:wcd937x module already created\n", __func__);
		return 0;
	}
	card = codec->component.card;
	priv->entry = snd_info_create_subdir(codec_root->module,
					     "wcd937x", codec_root);
	if (!priv->entry) {
		dev_dbg(codec->dev, "%s: failed to create wcd937x entry\n",
			__func__);
		return -ENOMEM;
	}
	version_entry = snd_info_create_card_entry(card->snd_card,
						   "version",
						   priv->entry);
	if (!version_entry) {
		dev_dbg(codec->dev, "%s: failed to create wcd937x version entry\n",
			__func__);
		return -ENOMEM;
	}

	version_entry->private_data = priv;
	version_entry->size = WCD937X_VERSION_ENTRY_SIZE;
	version_entry->content = SNDRV_INFO_CONTENT_DATA;
	version_entry->c.ops = &wcd937x_info_ops;

	if (snd_info_register(version_entry) < 0) {
		snd_info_free_entry(version_entry);
		return -ENOMEM;
	}
	priv->version_entry = version_entry;

	return 0;
}
EXPORT_SYMBOL(wcd937x_info_create_codec_entry);

static int wcd937x_soc_codec_probe(struct snd_soc_codec *codec)
static int wcd937x_soc_codec_probe(struct snd_soc_codec *codec)
{
{
	struct wcd937x_priv *wcd937x = snd_soc_codec_get_drvdata(codec);
	struct wcd937x_priv *wcd937x = snd_soc_codec_get_drvdata(codec);
@@ -1630,6 +1722,7 @@ static int wcd937x_soc_codec_probe(struct snd_soc_codec *codec)
			goto err_hwdep;
			goto err_hwdep;
		}
		}
	}
	}
	wcd937x->version = WCD937X_VERSION_1_0;
	return ret;
	return ret;


err_hwdep:
err_hwdep:
+43 −12
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@
#include "codecs/bolero/bolero-cdc.h"
#include "codecs/bolero/bolero-cdc.h"
#include <dt-bindings/sound/audio-codec-port-types.h>
#include <dt-bindings/sound/audio-codec-port-types.h>
#include "codecs/bolero/wsa-macro.h"
#include "codecs/bolero/wsa-macro.h"
#include "codecs/wcd937x/internal.h"


#define DRV_NAME "sm6150-asoc-snd"
#define DRV_NAME "sm6150-asoc-snd"


@@ -4915,6 +4916,7 @@ static int msm_int_audrx_init(struct snd_soc_pcm_runtime *rtd)
		}
		}
	}
	}
	card = rtd->card->snd_card;
	card = rtd->card->snd_card;
	if (!pdata->codec_root) {
		entry = snd_info_create_subdir(card->module, "codecs",
		entry = snd_info_create_subdir(card->module, "codecs",
						 card->proc_root);
						 card->proc_root);
		if (!entry) {
		if (!entry) {
@@ -4924,6 +4926,7 @@ static int msm_int_audrx_init(struct snd_soc_pcm_runtime *rtd)
			goto err;
			goto err;
		}
		}
		pdata->codec_root = entry;
		pdata->codec_root = entry;
	}
	bolero_info_create_codec_entry(pdata->codec_root, codec);
	bolero_info_create_codec_entry(pdata->codec_root, codec);
	codec_reg_done = true;
	codec_reg_done = true;
	return 0;
	return 0;
@@ -7878,6 +7881,8 @@ static int msm_wsa881x_init(struct snd_soc_component *component)
	struct snd_soc_codec *codec = snd_soc_component_to_codec(component);
	struct snd_soc_codec *codec = snd_soc_component_to_codec(component);
	struct msm_asoc_mach_data *pdata;
	struct msm_asoc_mach_data *pdata;
	struct snd_soc_dapm_context *dapm;
	struct snd_soc_dapm_context *dapm;
	struct snd_card *card = component->card->snd_card;
	struct snd_info_entry *entry;
	int ret = 0;
	int ret = 0;


	if (!codec) {
	if (!codec) {
@@ -7914,10 +7919,19 @@ static int msm_wsa881x_init(struct snd_soc_component *component)
		goto err;
		goto err;
	}
	}
	pdata = snd_soc_card_get_drvdata(component->card);
	pdata = snd_soc_card_get_drvdata(component->card);
	if (pdata && pdata->codec_root)
	if (!pdata->codec_root) {
		entry = snd_info_create_subdir(card->module, "codecs",
						 card->proc_root);
		if (!entry) {
			pr_err("%s: Cannot create codecs module entry\n",
				 __func__);
			ret = 0;
			goto err;
		}
		pdata->codec_root = entry;
	}
	wsa881x_codec_info_create_codec_entry(pdata->codec_root,
	wsa881x_codec_info_create_codec_entry(pdata->codec_root,
					      codec);
					      codec);

err:
err:
	return ret;
	return ret;
}
}
@@ -7928,6 +7942,9 @@ static int msm_aux_codec_init(struct snd_soc_component *component)
	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
	struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
	int ret = 0;
	int ret = 0;
	void *mbhc_calibration;
	void *mbhc_calibration;
	struct snd_info_entry *entry;
	struct snd_card *card = component->card->snd_card;
	struct msm_asoc_mach_data *pdata;


	snd_soc_dapm_ignore_suspend(dapm, "EAR");
	snd_soc_dapm_ignore_suspend(dapm, "EAR");
	snd_soc_dapm_ignore_suspend(dapm, "AUX");
	snd_soc_dapm_ignore_suspend(dapm, "AUX");
@@ -7939,6 +7956,20 @@ static int msm_aux_codec_init(struct snd_soc_component *component)
	snd_soc_dapm_ignore_suspend(dapm, "AMIC4");
	snd_soc_dapm_ignore_suspend(dapm, "AMIC4");
	snd_soc_dapm_sync(dapm);
	snd_soc_dapm_sync(dapm);


	pdata = snd_soc_card_get_drvdata(component->card);
	if (!pdata->codec_root) {
		entry = snd_info_create_subdir(card->module, "codecs",
						 card->proc_root);
		if (!entry) {
			pr_err("%s: Cannot create codecs module entry\n",
				 __func__);
			ret = 0;
			goto codec_root_err;
		}
		pdata->codec_root = entry;
	}
	wcd937x_info_create_codec_entry(pdata->codec_root, codec);
codec_root_err:
	mbhc_calibration = def_wcd_mbhc_cal();
	mbhc_calibration = def_wcd_mbhc_cal();
	if (!mbhc_calibration) {
	if (!mbhc_calibration) {
		return -ENOMEM;
		return -ENOMEM;