162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci//
362306a36Sopenharmony_ci// mt8192-afe-gpio.c  --  Mediatek 8192 afe gpio ctrl
462306a36Sopenharmony_ci//
562306a36Sopenharmony_ci// Copyright (c) 2020 MediaTek Inc.
662306a36Sopenharmony_ci// Author: Shane Chien <shane.chien@mediatek.com>
762306a36Sopenharmony_ci//
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/gpio.h>
1062306a36Sopenharmony_ci#include <linux/pinctrl/consumer.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include "mt8192-afe-common.h"
1362306a36Sopenharmony_ci#include "mt8192-afe-gpio.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistatic struct pinctrl *aud_pinctrl;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cienum mt8192_afe_gpio {
1862306a36Sopenharmony_ci	MT8192_AFE_GPIO_DAT_MISO_OFF,
1962306a36Sopenharmony_ci	MT8192_AFE_GPIO_DAT_MISO_ON,
2062306a36Sopenharmony_ci	MT8192_AFE_GPIO_DAT_MOSI_OFF,
2162306a36Sopenharmony_ci	MT8192_AFE_GPIO_DAT_MOSI_ON,
2262306a36Sopenharmony_ci	MT8192_AFE_GPIO_DAT_MISO_CH34_OFF,
2362306a36Sopenharmony_ci	MT8192_AFE_GPIO_DAT_MISO_CH34_ON,
2462306a36Sopenharmony_ci	MT8192_AFE_GPIO_DAT_MOSI_CH34_OFF,
2562306a36Sopenharmony_ci	MT8192_AFE_GPIO_DAT_MOSI_CH34_ON,
2662306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S0_OFF,
2762306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S0_ON,
2862306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S1_OFF,
2962306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S1_ON,
3062306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S2_OFF,
3162306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S2_ON,
3262306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S3_OFF,
3362306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S3_ON,
3462306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S5_OFF,
3562306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S5_ON,
3662306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S6_OFF,
3762306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S6_ON,
3862306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S7_OFF,
3962306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S7_ON,
4062306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S8_OFF,
4162306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S8_ON,
4262306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S9_OFF,
4362306a36Sopenharmony_ci	MT8192_AFE_GPIO_I2S9_ON,
4462306a36Sopenharmony_ci	MT8192_AFE_GPIO_VOW_DAT_OFF,
4562306a36Sopenharmony_ci	MT8192_AFE_GPIO_VOW_DAT_ON,
4662306a36Sopenharmony_ci	MT8192_AFE_GPIO_VOW_CLK_OFF,
4762306a36Sopenharmony_ci	MT8192_AFE_GPIO_VOW_CLK_ON,
4862306a36Sopenharmony_ci	MT8192_AFE_GPIO_CLK_MOSI_OFF,
4962306a36Sopenharmony_ci	MT8192_AFE_GPIO_CLK_MOSI_ON,
5062306a36Sopenharmony_ci	MT8192_AFE_GPIO_TDM_OFF,
5162306a36Sopenharmony_ci	MT8192_AFE_GPIO_TDM_ON,
5262306a36Sopenharmony_ci	MT8192_AFE_GPIO_GPIO_NUM
5362306a36Sopenharmony_ci};
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_cistruct audio_gpio_attr {
5662306a36Sopenharmony_ci	const char *name;
5762306a36Sopenharmony_ci	bool gpio_prepare;
5862306a36Sopenharmony_ci	struct pinctrl_state *gpioctrl;
5962306a36Sopenharmony_ci};
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_cistatic struct audio_gpio_attr aud_gpios[MT8192_AFE_GPIO_GPIO_NUM] = {
6262306a36Sopenharmony_ci	[MT8192_AFE_GPIO_DAT_MISO_OFF] = {"aud_dat_miso_off", false, NULL},
6362306a36Sopenharmony_ci	[MT8192_AFE_GPIO_DAT_MISO_ON] = {"aud_dat_miso_on", false, NULL},
6462306a36Sopenharmony_ci	[MT8192_AFE_GPIO_DAT_MOSI_OFF] = {"aud_dat_mosi_off", false, NULL},
6562306a36Sopenharmony_ci	[MT8192_AFE_GPIO_DAT_MOSI_ON] = {"aud_dat_mosi_on", false, NULL},
6662306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S0_OFF] = {"aud_gpio_i2s0_off", false, NULL},
6762306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S0_ON] = {"aud_gpio_i2s0_on", false, NULL},
6862306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S1_OFF] = {"aud_gpio_i2s1_off", false, NULL},
6962306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S1_ON] = {"aud_gpio_i2s1_on", false, NULL},
7062306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S2_OFF] = {"aud_gpio_i2s2_off", false, NULL},
7162306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S2_ON] = {"aud_gpio_i2s2_on", false, NULL},
7262306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S3_OFF] = {"aud_gpio_i2s3_off", false, NULL},
7362306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S3_ON] = {"aud_gpio_i2s3_on", false, NULL},
7462306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S5_OFF] = {"aud_gpio_i2s5_off", false, NULL},
7562306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S5_ON] = {"aud_gpio_i2s5_on", false, NULL},
7662306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S6_OFF] = {"aud_gpio_i2s6_off", false, NULL},
7762306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S6_ON] = {"aud_gpio_i2s6_on", false, NULL},
7862306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S7_OFF] = {"aud_gpio_i2s7_off", false, NULL},
7962306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S7_ON] = {"aud_gpio_i2s7_on", false, NULL},
8062306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S8_OFF] = {"aud_gpio_i2s8_off", false, NULL},
8162306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S8_ON] = {"aud_gpio_i2s8_on", false, NULL},
8262306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S9_OFF] = {"aud_gpio_i2s9_off", false, NULL},
8362306a36Sopenharmony_ci	[MT8192_AFE_GPIO_I2S9_ON] = {"aud_gpio_i2s9_on", false, NULL},
8462306a36Sopenharmony_ci	[MT8192_AFE_GPIO_TDM_OFF] = {"aud_gpio_tdm_off", false, NULL},
8562306a36Sopenharmony_ci	[MT8192_AFE_GPIO_TDM_ON] = {"aud_gpio_tdm_on", false, NULL},
8662306a36Sopenharmony_ci	[MT8192_AFE_GPIO_VOW_DAT_OFF] = {"vow_dat_miso_off", false, NULL},
8762306a36Sopenharmony_ci	[MT8192_AFE_GPIO_VOW_DAT_ON] = {"vow_dat_miso_on", false, NULL},
8862306a36Sopenharmony_ci	[MT8192_AFE_GPIO_VOW_CLK_OFF] = {"vow_clk_miso_off", false, NULL},
8962306a36Sopenharmony_ci	[MT8192_AFE_GPIO_VOW_CLK_ON] = {"vow_clk_miso_on", false, NULL},
9062306a36Sopenharmony_ci	[MT8192_AFE_GPIO_DAT_MISO_CH34_OFF] = {"aud_dat_miso_ch34_off",
9162306a36Sopenharmony_ci					       false, NULL},
9262306a36Sopenharmony_ci	[MT8192_AFE_GPIO_DAT_MISO_CH34_ON] = {"aud_dat_miso_ch34_on",
9362306a36Sopenharmony_ci					      false, NULL},
9462306a36Sopenharmony_ci	[MT8192_AFE_GPIO_DAT_MOSI_CH34_OFF] = {"aud_dat_mosi_ch34_off",
9562306a36Sopenharmony_ci					       false, NULL},
9662306a36Sopenharmony_ci	[MT8192_AFE_GPIO_DAT_MOSI_CH34_ON] = {"aud_dat_mosi_ch34_on",
9762306a36Sopenharmony_ci					      false, NULL},
9862306a36Sopenharmony_ci	[MT8192_AFE_GPIO_CLK_MOSI_OFF] = {"aud_clk_mosi_off", false, NULL},
9962306a36Sopenharmony_ci	[MT8192_AFE_GPIO_CLK_MOSI_ON] = {"aud_clk_mosi_on", false, NULL},
10062306a36Sopenharmony_ci};
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_cistatic DEFINE_MUTEX(gpio_request_mutex);
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_cistatic int mt8192_afe_gpio_select(struct device *dev,
10562306a36Sopenharmony_ci				  enum mt8192_afe_gpio type)
10662306a36Sopenharmony_ci{
10762306a36Sopenharmony_ci	int ret;
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci	if (type < 0 || type >= MT8192_AFE_GPIO_GPIO_NUM) {
11062306a36Sopenharmony_ci		dev_err(dev, "%s(), error, invalid gpio type %d\n",
11162306a36Sopenharmony_ci			__func__, type);
11262306a36Sopenharmony_ci		return -EINVAL;
11362306a36Sopenharmony_ci	}
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci	if (!aud_gpios[type].gpio_prepare) {
11662306a36Sopenharmony_ci		dev_warn(dev, "%s(), error, gpio type %d not prepared\n",
11762306a36Sopenharmony_ci			 __func__, type);
11862306a36Sopenharmony_ci		return -EIO;
11962306a36Sopenharmony_ci	}
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci	ret = pinctrl_select_state(aud_pinctrl,
12262306a36Sopenharmony_ci				   aud_gpios[type].gpioctrl);
12362306a36Sopenharmony_ci	if (ret) {
12462306a36Sopenharmony_ci		dev_dbg(dev, "%s(), error, can not set gpio type %d\n",
12562306a36Sopenharmony_ci			__func__, type);
12662306a36Sopenharmony_ci	}
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci	return ret;
12962306a36Sopenharmony_ci}
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ciint mt8192_afe_gpio_init(struct device *dev)
13262306a36Sopenharmony_ci{
13362306a36Sopenharmony_ci	int i, ret;
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci	aud_pinctrl = devm_pinctrl_get(dev);
13662306a36Sopenharmony_ci	if (IS_ERR(aud_pinctrl)) {
13762306a36Sopenharmony_ci		ret = PTR_ERR(aud_pinctrl);
13862306a36Sopenharmony_ci		dev_err(dev, "%s(), ret %d, cannot get aud_pinctrl!\n",
13962306a36Sopenharmony_ci			__func__, ret);
14062306a36Sopenharmony_ci		return ret;
14162306a36Sopenharmony_ci	}
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(aud_gpios); i++) {
14462306a36Sopenharmony_ci		aud_gpios[i].gpioctrl = pinctrl_lookup_state(aud_pinctrl,
14562306a36Sopenharmony_ci							     aud_gpios[i].name);
14662306a36Sopenharmony_ci		if (IS_ERR(aud_gpios[i].gpioctrl)) {
14762306a36Sopenharmony_ci			ret = PTR_ERR(aud_gpios[i].gpioctrl);
14862306a36Sopenharmony_ci			dev_dbg(dev, "%s(), pinctrl_lookup_state %s fail, ret %d\n",
14962306a36Sopenharmony_ci				__func__, aud_gpios[i].name, ret);
15062306a36Sopenharmony_ci		} else {
15162306a36Sopenharmony_ci			aud_gpios[i].gpio_prepare = true;
15262306a36Sopenharmony_ci		}
15362306a36Sopenharmony_ci	}
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ci	mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_CLK_MOSI_ON);
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci	/* gpio status init */
15862306a36Sopenharmony_ci	mt8192_afe_gpio_request(dev, false, MT8192_DAI_ADDA, 0);
15962306a36Sopenharmony_ci	mt8192_afe_gpio_request(dev, false, MT8192_DAI_ADDA, 1);
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ci	return 0;
16262306a36Sopenharmony_ci}
16362306a36Sopenharmony_ciEXPORT_SYMBOL(mt8192_afe_gpio_init);
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_cistatic int mt8192_afe_gpio_adda_dl(struct device *dev, bool enable)
16662306a36Sopenharmony_ci{
16762306a36Sopenharmony_ci	if (enable) {
16862306a36Sopenharmony_ci		return mt8192_afe_gpio_select(dev,
16962306a36Sopenharmony_ci					      MT8192_AFE_GPIO_DAT_MOSI_ON);
17062306a36Sopenharmony_ci	} else {
17162306a36Sopenharmony_ci		return mt8192_afe_gpio_select(dev,
17262306a36Sopenharmony_ci					      MT8192_AFE_GPIO_DAT_MOSI_OFF);
17362306a36Sopenharmony_ci	}
17462306a36Sopenharmony_ci}
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_cistatic int mt8192_afe_gpio_adda_ul(struct device *dev, bool enable)
17762306a36Sopenharmony_ci{
17862306a36Sopenharmony_ci	if (enable) {
17962306a36Sopenharmony_ci		return mt8192_afe_gpio_select(dev,
18062306a36Sopenharmony_ci					      MT8192_AFE_GPIO_DAT_MISO_ON);
18162306a36Sopenharmony_ci	} else {
18262306a36Sopenharmony_ci		return mt8192_afe_gpio_select(dev,
18362306a36Sopenharmony_ci					      MT8192_AFE_GPIO_DAT_MISO_OFF);
18462306a36Sopenharmony_ci	}
18562306a36Sopenharmony_ci}
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_cistatic int mt8192_afe_gpio_adda_ch34_dl(struct device *dev, bool enable)
18862306a36Sopenharmony_ci{
18962306a36Sopenharmony_ci	if (enable) {
19062306a36Sopenharmony_ci		return mt8192_afe_gpio_select(dev,
19162306a36Sopenharmony_ci			MT8192_AFE_GPIO_DAT_MOSI_CH34_ON);
19262306a36Sopenharmony_ci	} else {
19362306a36Sopenharmony_ci		return mt8192_afe_gpio_select(dev,
19462306a36Sopenharmony_ci			MT8192_AFE_GPIO_DAT_MOSI_CH34_OFF);
19562306a36Sopenharmony_ci	}
19662306a36Sopenharmony_ci}
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_cistatic int mt8192_afe_gpio_adda_ch34_ul(struct device *dev, bool enable)
19962306a36Sopenharmony_ci{
20062306a36Sopenharmony_ci	if (enable) {
20162306a36Sopenharmony_ci		return mt8192_afe_gpio_select(dev,
20262306a36Sopenharmony_ci			MT8192_AFE_GPIO_DAT_MISO_CH34_ON);
20362306a36Sopenharmony_ci	} else {
20462306a36Sopenharmony_ci		return mt8192_afe_gpio_select(dev,
20562306a36Sopenharmony_ci			MT8192_AFE_GPIO_DAT_MISO_CH34_OFF);
20662306a36Sopenharmony_ci	}
20762306a36Sopenharmony_ci}
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ciint mt8192_afe_gpio_request(struct device *dev, bool enable,
21062306a36Sopenharmony_ci			    int dai, int uplink)
21162306a36Sopenharmony_ci{
21262306a36Sopenharmony_ci	mutex_lock(&gpio_request_mutex);
21362306a36Sopenharmony_ci	switch (dai) {
21462306a36Sopenharmony_ci	case MT8192_DAI_ADDA:
21562306a36Sopenharmony_ci		if (uplink)
21662306a36Sopenharmony_ci			mt8192_afe_gpio_adda_ul(dev, enable);
21762306a36Sopenharmony_ci		else
21862306a36Sopenharmony_ci			mt8192_afe_gpio_adda_dl(dev, enable);
21962306a36Sopenharmony_ci		break;
22062306a36Sopenharmony_ci	case MT8192_DAI_ADDA_CH34:
22162306a36Sopenharmony_ci		if (uplink)
22262306a36Sopenharmony_ci			mt8192_afe_gpio_adda_ch34_ul(dev, enable);
22362306a36Sopenharmony_ci		else
22462306a36Sopenharmony_ci			mt8192_afe_gpio_adda_ch34_dl(dev, enable);
22562306a36Sopenharmony_ci		break;
22662306a36Sopenharmony_ci	case MT8192_DAI_I2S_0:
22762306a36Sopenharmony_ci		if (enable)
22862306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S0_ON);
22962306a36Sopenharmony_ci		else
23062306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S0_OFF);
23162306a36Sopenharmony_ci		break;
23262306a36Sopenharmony_ci	case MT8192_DAI_I2S_1:
23362306a36Sopenharmony_ci		if (enable)
23462306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S1_ON);
23562306a36Sopenharmony_ci		else
23662306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S1_OFF);
23762306a36Sopenharmony_ci		break;
23862306a36Sopenharmony_ci	case MT8192_DAI_I2S_2:
23962306a36Sopenharmony_ci		if (enable)
24062306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S2_ON);
24162306a36Sopenharmony_ci		else
24262306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S2_OFF);
24362306a36Sopenharmony_ci		break;
24462306a36Sopenharmony_ci	case MT8192_DAI_I2S_3:
24562306a36Sopenharmony_ci		if (enable)
24662306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S3_ON);
24762306a36Sopenharmony_ci		else
24862306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S3_OFF);
24962306a36Sopenharmony_ci		break;
25062306a36Sopenharmony_ci	case MT8192_DAI_I2S_5:
25162306a36Sopenharmony_ci		if (enable)
25262306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S5_ON);
25362306a36Sopenharmony_ci		else
25462306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S5_OFF);
25562306a36Sopenharmony_ci		break;
25662306a36Sopenharmony_ci	case MT8192_DAI_I2S_6:
25762306a36Sopenharmony_ci		if (enable)
25862306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S6_ON);
25962306a36Sopenharmony_ci		else
26062306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S6_OFF);
26162306a36Sopenharmony_ci		break;
26262306a36Sopenharmony_ci	case MT8192_DAI_I2S_7:
26362306a36Sopenharmony_ci		if (enable)
26462306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S7_ON);
26562306a36Sopenharmony_ci		else
26662306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S7_OFF);
26762306a36Sopenharmony_ci		break;
26862306a36Sopenharmony_ci	case MT8192_DAI_I2S_8:
26962306a36Sopenharmony_ci		if (enable)
27062306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S8_ON);
27162306a36Sopenharmony_ci		else
27262306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S8_OFF);
27362306a36Sopenharmony_ci		break;
27462306a36Sopenharmony_ci	case MT8192_DAI_I2S_9:
27562306a36Sopenharmony_ci		if (enable)
27662306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S9_ON);
27762306a36Sopenharmony_ci		else
27862306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_I2S9_OFF);
27962306a36Sopenharmony_ci		break;
28062306a36Sopenharmony_ci	case MT8192_DAI_TDM:
28162306a36Sopenharmony_ci		if (enable)
28262306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_TDM_ON);
28362306a36Sopenharmony_ci		else
28462306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev, MT8192_AFE_GPIO_TDM_OFF);
28562306a36Sopenharmony_ci		break;
28662306a36Sopenharmony_ci	case MT8192_DAI_VOW:
28762306a36Sopenharmony_ci		if (enable) {
28862306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev,
28962306a36Sopenharmony_ci					       MT8192_AFE_GPIO_VOW_CLK_ON);
29062306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev,
29162306a36Sopenharmony_ci					       MT8192_AFE_GPIO_VOW_DAT_ON);
29262306a36Sopenharmony_ci		} else {
29362306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev,
29462306a36Sopenharmony_ci					       MT8192_AFE_GPIO_VOW_CLK_OFF);
29562306a36Sopenharmony_ci			mt8192_afe_gpio_select(dev,
29662306a36Sopenharmony_ci					       MT8192_AFE_GPIO_VOW_DAT_OFF);
29762306a36Sopenharmony_ci		}
29862306a36Sopenharmony_ci		break;
29962306a36Sopenharmony_ci	default:
30062306a36Sopenharmony_ci		mutex_unlock(&gpio_request_mutex);
30162306a36Sopenharmony_ci		dev_warn(dev, "%s(), invalid dai %d\n", __func__, dai);
30262306a36Sopenharmony_ci		return -EINVAL;
30362306a36Sopenharmony_ci	}
30462306a36Sopenharmony_ci	mutex_unlock(&gpio_request_mutex);
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_ci	return 0;
30762306a36Sopenharmony_ci}
30862306a36Sopenharmony_ciEXPORT_SYMBOL(mt8192_afe_gpio_request);
309