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

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

Merge "asoc: sdm660: add support for gpio based jack detection"

parents a3b7574b 813c3d21
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -122,6 +122,10 @@ struct msm_asoc_mach_data {
	struct mutex cdc_int_mclk0_mutex;
	struct delayed_work disable_int_mclk0_work;
	struct afe_clk_set digital_cdc_core_clk;
	int gpio_linein_det;
	int gpio_lineout_det;
	int linein_det_swh;
	int lineout_det_swh;
};

int msm_common_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
+80 −0
Original line number Diff line number Diff line
@@ -112,6 +112,36 @@ static struct dev_config slim_tx_cfg[] = {
	[SLIM_TX_8] = {SAMPLING_RATE_48KHZ, SNDRV_PCM_FORMAT_S16_LE, 2},
};

static struct snd_soc_jack linein_jack;

static struct snd_soc_jack_pin linein_jack_pins[] = {
	{
		.pin = "Linein",
		.mask = SND_JACK_LINEIN,
	},
};

static struct snd_soc_jack_gpio linein_jack_gpio = {
	.name = "Linein detection",
	.report = SND_JACK_LINEIN,
	.debounce_time = 800,
};

static struct snd_soc_jack lineout_jack;

static struct snd_soc_jack_pin lineout_jack_pins[] = {
	{
		.pin = "Lineout",
		.mask = SND_JACK_LINEOUT,
	},
};

static struct snd_soc_jack_gpio lineout_jack_gpio = {
	.name = "Lineout detection",
	.report = SND_JACK_LINEOUT,
	.debounce_time = 800,
};

static int msm_vi_feed_tx_ch = 2;
static const char *const slim_rx_ch_text[] = {"One", "Two", "Three", "Four",
						"Five", "Six", "Seven",
@@ -1687,6 +1717,8 @@ static const struct snd_soc_dapm_widget msm_dapm_widgets[] = {
	SND_SOC_DAPM_MIC("Digital Mic4", NULL),
	SND_SOC_DAPM_MIC("Digital Mic5", NULL),
	SND_SOC_DAPM_MIC("Digital Mic6", NULL),
	SND_SOC_DAPM_HP("Lineout", NULL),
	SND_SOC_DAPM_MIC("Linein", NULL),
};

static struct snd_soc_dapm_route wcd_audio_paths_tasha[] = {
@@ -2024,6 +2056,26 @@ int msm_audrx_init(struct snd_soc_pcm_runtime *rtd)
		tasha_codec_info_create_codec_entry(pdata->codec_root, codec);
		tasha_mbhc_zdet_gpio_ctrl(msm_config_hph_en0_gpio, rtd->codec);
	}

	if (gpio_is_valid(pdata->gpio_linein_det)) {
		snd_soc_card_jack_new(rtd->card, "Linein", SND_JACK_LINEIN,
				      &linein_jack, linein_jack_pins,
				      ARRAY_SIZE(linein_jack_pins));

		linein_jack_gpio.invert = pdata->linein_det_swh;
		linein_jack_gpio.gpio = pdata->gpio_linein_det;
		snd_soc_jack_add_gpios(&linein_jack, 1, &linein_jack_gpio);
	}

	if (gpio_is_valid(pdata->gpio_lineout_det)) {
		snd_soc_card_jack_new(rtd->card, "Lineout", SND_JACK_LINEOUT,
				      &lineout_jack, lineout_jack_pins,
				      ARRAY_SIZE(lineout_jack_pins));

		lineout_jack_gpio.invert = pdata->lineout_det_swh;
		lineout_jack_gpio.gpio = pdata->gpio_lineout_det;
		snd_soc_jack_add_gpios(&lineout_jack, 1, &lineout_jack_gpio);
	}
done:
	msm_set_codec_reg_done(true);
	return 0;
@@ -2102,6 +2154,34 @@ int msm_ext_cdc_init(struct platform_device *pdev,
			"qcom,hph-en0-gpio", pdev->dev.of_node->full_name);
	}

	ret = of_property_read_u32(pdev->dev.of_node, "qcom,linein-det-swh",
				   &pdata->linein_det_swh);
	if (ret) {
		dev_dbg(&pdev->dev, "%s: missing %s in dt node\n",
			 __func__, "qcom,linein-det-swh");
	}

	ret = of_property_read_u32(pdev->dev.of_node, "qcom,lineout-det-swh",
				   &pdata->lineout_det_swh);
	if (ret) {
		dev_dbg(&pdev->dev, "%s: missing %s in dt node\n",
			 __func__, "qcom,lineout-det-swh");
	}

	pdata->gpio_linein_det = of_get_named_gpio(pdev->dev.of_node,
						   "qcom,linein-det-gpio", 0);
	if (pdata->gpio_linein_det < 0) {
		dev_dbg(&pdev->dev, "property %s not detected in node %s\n",
			"qcom,linein-det-gpio", pdev->dev.of_node->full_name);
	}

	pdata->gpio_lineout_det = of_get_named_gpio(pdev->dev.of_node,
						  "qcom,lineout-det-gpio", 0);
	if (pdata->gpio_lineout_det < 0) {
		dev_dbg(&pdev->dev, "property %s not detected in node %s\n",
			"qcom,lineout-det-gpio", pdev->dev.of_node->full_name);
	}

	ret = msm_ext_prepare_hifi(pdata);
	if (ret) {
		dev_dbg(&pdev->dev, "msm_ext_prepare_hifi failed (%d)\n",