添加控制gpio口 根据原理图gpio153 159
/* AUDIO GPIO standardization */
&audgpio {
pinctrl-names = "aud_clk_mosi_off",
"aud_clk_mosi_on",
"aud_clk_miso_off",
"aud_clk_miso_on",
"aud_dat_mosi_off",
"aud_dat_mosi_on",
"aud_dat_miso_off",
"aud_dat_miso_on",
"aud_smartpa_off",
"aud_smartpa_on",
"extamp-pullhigh",
"extamp-pulllow";
pinctrl-0 = <&aud_clk_mosi_off>;
pinctrl-1 = <&aud_clk_mosi_on>;
pinctrl-2 = <&aud_clk_miso_off>;
pinctrl-3 = <&aud_clk_miso_on>;
pinctrl-4 = <&aud_dat_mosi_off>;
pinctrl-5 = <&aud_dat_mosi_on>;
pinctrl-6 = <&aud_dat_miso_off>;
pinctrl-7 = <&aud_dat_miso_on>;
pinctrl-8 = <&aud_pins_smartpa_off>;
pinctrl-9 = <&aud_pins_smartpa_on>;
pinctrl-10 = <&extamp_pullhigh>;
pinctrl-11 = <&extamp_pulllow>;
status = "okay";
};
&pio {
aud_clk_mosi_off: aud_clk_mosi_off {
pins_cmd0_dat {
pinmux = <PINMUX_GPIO136__FUNC_GPIO136>;
};
};
aud_clk_mosi_on: aud_clk_mosi_on {
pins_cmd0_dat {
pinmux = <PINMUX_GPIO136__FUNC_AUD_CLK_MOSI>;
};
};
aud_clk_miso_off: aud_clk_miso_off {
pins_cmd0_dat {
pinmux = <PINMUX_GPIO140__FUNC_GPIO140>;
};
};
aud_clk_miso_on: aud_clk_miso_on {
pins_cmd0_dat {
pinmux = <PINMUX_GPIO140__FUNC_AUD_CLK_MISO>;
};
};
aud_dat_mosi_off: aud_dat_mosi_off {
pins_cmd1_dat {
pinmux = <PINMUX_GPIO138__FUNC_GPIO138>;
input-enable;
slew-rate = <0>;
bias-disable;
};
pins_cmd2_dat {
pinmux = <PINMUX_GPIO139__FUNC_GPIO139>;
input-enable;
slew-rate = <0>;
bias-disable;
};
};
aud_dat_mosi_on: aud_dat_mosi_on {
pins_cmd1_dat {
pinmux = <PINMUX_GPIO138__FUNC_AUD_DAT_MOSI0>;
};
pins_cmd2_dat {
pinmux = <PINMUX_GPIO139__FUNC_AUD_DAT_MOSI1>;
};
};
aud_dat_miso_off: aud_dat_miso_off {
pins_cmd1_dat {
pinmux = <PINMUX_GPIO142__FUNC_GPIO142>;
input-enable;
slew-rate = <0>;
bias-disable;
};
pins_cmd2_dat {
pinmux = <PINMUX_GPIO143__FUNC_GPIO143>;
input-enable;
slew-rate = <0>;
bias-disable;
};
};
aud_dat_miso_on: aud_dat_miso_on {
pins_cmd1_dat {
pinmux = <PINMUX_GPIO142__FUNC_AUD_DAT_MISO0>;
};
pins_cmd2_dat {
pinmux = <PINMUX_GPIO143__FUNC_AUD_DAT_MISO1>;
};
};
aud_pins_smartpa_off: aud_pins_smartpa_off {
pins_cmd0_dat {
pinmux = <PINMUX_GPIO17__FUNC_GPIO17>;
};
pins_cmd1_dat {
pinmux = <PINMUX_GPIO18__FUNC_GPIO18>;
};
pins_cmd2_dat {
pinmux = <PINMUX_GPIO19__FUNC_GPIO19>;
};
pins_cmd3_dat {
pinmux = <PINMUX_GPIO20__FUNC_GPIO20>;
};
};
aud_pins_smartpa_on: aud_pins_smartpa_on {
pins_cmd0_dat {
pinmux = <PINMUX_GPIO17__FUNC_I2S0_DI>;
};
pins_cmd1_dat {
pinmux = <PINMUX_GPIO18__FUNC_I2S3_BCK>;
};
pins_cmd2_dat {
pinmux = <PINMUX_GPIO19__FUNC_I2S3_LRCK>;
};
pins_cmd3_dat {
pinmux = <PINMUX_GPIO20__FUNC_I2S3_DO>;
};
};
extamp_pullhigh: extamp_pullhigh {
pins_cmd1_dat {
pinmux = <PINMUX_GPIO153__FUNC_GPIO153>;
slew-rate = <1>;
output-high;
};
pins_cmd2_dat {
pinmux = <PINMUX_GPIO159__FUNC_GPIO159>;
slew-rate = <1>;
output-high;
};
};
extamp_pulllow: extamp_pulllow {
pins_cmd1_dat {
pinmux = <PINMUX_GPIO153__FUNC_GPIO153>;
slew-rate = <1>;
output-low;
};
pins_cmd2_dat {
pinmux = <PINMUX_GPIO159__FUNC_GPIO159>;
slew-rate = <1>;
output-low;
};
};
};
/* AUDIO end */
控制方式 通过gpio控制脉冲信号控制音量大小。
static void Ext_Speaker_Amp_Change(bool enable)
{
pr_debug("%s(), enable %d\n", __func__, enable);
#define SPK_WARM_UP_TIME (25) /* unit is ms */
if (enable) {
AudDrv_GPIO_EXTAMP_Select(false, 4);
/*udelay(1000); */
usleep_range(1 * 1000, 2 * 1000);
AudDrv_GPIO_EXTAMP_Select(true, 4);
usleep_range(5 * 1000, 10 * 1000);
} else {
AudDrv_GPIO_EXTAMP_Select(false, 4);
udelay(500);
}
}
kernel-4.19/sound/soc/mediatek/codec/mt6357/mtk-soc-codec-6357.c
int AudDrv_GPIO_EXTAMP_Select(int bEnable, int mode)
{
int retval = 0;
#if MT6755_PIN
int extamp_mode;
int i;
mutex_lock(&gpio_request_mutex);
if (bEnable == 1) {
if (mode == 1)
extamp_mode = 1;
else if (mode == 2)
extamp_mode = 2;
else if (mode == 3)
extamp_mode = 3;
else
extamp_mode = 4; /* default mode is 3 */
if (aud_gpios[GPIO_EXTAMP_HIGH].gpio_prepare) {
for (i = 0; i < extamp_mode; i++) {
retval = pinctrl_select_state(pinctrlaud,aud_gpios[GPIO_EXTAMP_LOW].gpioctrl);
udelay(2);
retval = pinctrl_select_state(pinctrlaud,aud_gpios[GPIO_EXTAMP_HIGH].gpioctrl);
udelay(2);
}
}
} else {
if (aud_gpios[GPIO_EXTAMP_LOW].gpio_prepare) {
retval = pinctrl_select_state(pinctrlaud,aud_gpios[GPIO_EXTAMP_LOW].gpioctrl);
}
}
mutex_unlock(&gpio_request_mutex);
#endif
return retval;
}
kernel-4.19/sound/soc/mediatek/common_int/mtk-auddrv-gpio.c