MTK外部音频功放gpio控制

添加控制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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值