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

Commit ee6367c5 authored by Aditya Bavanari's avatar Aditya Bavanari Committed by Gerrit - the friendly Code Review server
Browse files

asoc: Add support for rouleur codec in machine driver



Add rouleur codec support in bengal machine driver
to create codec entry and invoke mbhc hs detect
functions for respective codecs. Correct the logic
for headset detection pull up current and
volatile registers for digital part of rouleur codec.

Change-Id: I22545dc796c215c1501e883796546c97d8ca8698
Signed-off-by: default avatarAditya Bavanari <abavanar@codeaurora.org>
parent 29eea043
Loading
Loading
Loading
Loading
+43 −2
Original line number Diff line number Diff line
@@ -31,8 +31,10 @@
#include "asoc/msm-cdc-pinctrl.h"
#include "asoc/wcd-mbhc-v2.h"
#include "codecs/wcd937x/wcd937x-mbhc.h"
#include "codecs/rouleur/rouleur-mbhc.h"
#include "codecs/wsa881x-analog.h"
#include "codecs/wcd937x/wcd937x.h"
#include "codecs/rouleur/rouleur.h"
#include "codecs/bolero/bolero-cdc.h"
#include <dt-bindings/sound/audio-codec-port-types.h>
#include "bengal-port-config.h"
@@ -6054,9 +6056,13 @@ static int msm_aux_codec_init(struct snd_soc_component *component)
	struct snd_info_entry *entry;
	struct snd_card *card = component->card->snd_card;
	struct msm_asoc_mach_data *pdata;
	struct platform_device *pdev = NULL;
	char *data = NULL;
	int i = 0;

	snd_soc_dapm_ignore_suspend(dapm, "EAR");
	snd_soc_dapm_ignore_suspend(dapm, "AUX");
	snd_soc_dapm_ignore_suspend(dapm, "LO");
	snd_soc_dapm_ignore_suspend(dapm, "HPHL");
	snd_soc_dapm_ignore_suspend(dapm, "HPHR");
	snd_soc_dapm_ignore_suspend(dapm, "AMIC1");
@@ -6077,14 +6083,49 @@ static int msm_aux_codec_init(struct snd_soc_component *component)
		}
		pdata->codec_root = entry;
	}
	wcd937x_info_create_codec_entry(pdata->codec_root, component);

	for (i = 0; i < component->card->num_aux_devs; i++)
	{
		if (msm_aux_dev[i].name != NULL ) {
			if (strstr(msm_aux_dev[i].name, "wsa"))
				continue;
		}

		if (msm_aux_dev[i].codec_of_node) {
			pdev = of_find_device_by_node(
				msm_aux_dev[i].codec_of_node);
			if (pdev)
				data = (char*) of_device_get_match_data(
							&pdev->dev);

			if (data != NULL) {
				if (!strncmp(data, "wcd937x",
						sizeof("wcd937x"))) {
					wcd937x_info_create_codec_entry(
						pdata->codec_root, component);
					break;
				} else if (!strncmp(data, "rouleur",
						sizeof("rouleur"))) {
					rouleur_info_create_codec_entry(
						pdata->codec_root, component);
					break;
				}
			}
		}
	}

mbhc_cfg_cal:
	mbhc_calibration = def_wcd_mbhc_cal();
	if (!mbhc_calibration)
		return -ENOMEM;
	wcd_mbhc_cfg.calibration = mbhc_calibration;
        if (data != NULL) {
                if (!strncmp(data, "wcd937x", sizeof("wcd937x")))
                        ret = wcd937x_mbhc_hs_detect(component, &wcd_mbhc_cfg);
                else if (!strncmp( data, "rouleur", sizeof("rouleur")))
                        ret = rouleur_mbhc_hs_detect(component, &wcd_mbhc_cfg);
        }

	if (ret) {
		dev_err(component->dev, "%s: mbhc hs detect failed, err:%d\n",
			__func__, ret);
+2 −2
Original line number Diff line number Diff line
@@ -291,14 +291,14 @@ static void rouleur_mbhc_hph_l_pull_up_control(
	/* Default pull up current to 2uA */
	if (pull_up_cur < I_OFF || pull_up_cur > I_3P0_UA ||
	    pull_up_cur == I_DEFAULT)
		pull_up_cur = I_2P0_UA;
		pull_up_cur = I_3P0_UA;

	dev_dbg(component->dev, "%s: HS pull up current:%d\n",
		__func__, pull_up_cur);

	snd_soc_component_update_bits(component,
				ROULEUR_ANA_MBHC_PLUG_DETECT_CTL,
				0xC0, pull_up_cur);
				0xC0, pull_up_cur << 6);
}

static int rouleur_mbhc_request_micbias(struct snd_soc_component *component,
+0 −2
Original line number Diff line number Diff line
@@ -134,13 +134,11 @@ static bool rouleur_volatile_register(struct device *dev, unsigned int reg)
		if ((rouleur_reg_access_analog[ROULEUR_REG(reg)] & RD_REG)
		    && !(rouleur_reg_access_analog[ROULEUR_REG(reg)] & WR_REG))
			return true;
		return false;
	if (reg > ROULEUR_DIG_BASE_ADDR && reg <
					ROULEUR_DIGITAL_REGISTERS_MAX_SIZE)
		if ((rouleur_reg_access_digital[ROULEUR_REG(reg)] & RD_REG)
		    && !(rouleur_reg_access_digital[ROULEUR_REG(reg)] & WR_REG))
			return true;
		return false;
	return 0;
}

+1 −1
Original line number Diff line number Diff line
@@ -2392,7 +2392,7 @@ static void rouleur_unbind(struct device *dev)
}

static const struct of_device_id rouleur_dt_match[] = {
	{ .compatible = "qcom,rouleur-codec" },
	{ .compatible = "qcom,rouleur-codec" , .data = "rouleur" },
	{}
};

+1 −1
Original line number Diff line number Diff line
@@ -3132,7 +3132,7 @@ static void wcd937x_unbind(struct device *dev)
}

static const struct of_device_id wcd937x_dt_match[] = {
	{ .compatible = "qcom,wcd937x-codec" },
	{ .compatible = "qcom,wcd937x-codec" , .data = "wcd937x" },
	{}
};