staticint mt8186_afe_gpio_select(struct device *dev, enum mt8186_afe_gpio type)
{ int ret = 0;
if (type < 0 || type >= MT8186_AFE_GPIO_GPIO_NUM) {
dev_dbg(dev, "%s(), error, invalid gpio type %d\n",
__func__, type); return -EINVAL;
}
if (!aud_gpios[type].gpio_prepare) {
dev_dbg(dev, "%s(), error, gpio type %d not prepared\n",
__func__, type); return -EIO;
}
ret = pinctrl_select_state(aud_pinctrl,
aud_gpios[type].gpioctrl); if (ret) {
dev_dbg(dev, "%s(), error, can not set gpio type %d\n",
__func__, type); return ret;
}
return 0;
}
staticint mt8186_afe_gpio_adda_dl(struct device *dev, bool enable)
{ int ret;
if (enable) {
ret = mt8186_afe_gpio_select(dev, MT8186_AFE_GPIO_CLK_MOSI_ON); if (ret) {
dev_dbg(dev, "%s(), MOSI CLK ON select fail!\n", __func__); return ret;
}
ret = mt8186_afe_gpio_select(dev, MT8186_AFE_GPIO_DAT_MOSI_ON); if (ret) {
dev_dbg(dev, "%s(), MOSI DAT ON select fail!\n", __func__); return ret;
}
} else {
ret = mt8186_afe_gpio_select(dev, MT8186_AFE_GPIO_DAT_MOSI_OFF); if (ret) {
dev_dbg(dev, "%s(), MOSI DAT OFF select fail!\n", __func__); return ret;
}
ret = mt8186_afe_gpio_select(dev, MT8186_AFE_GPIO_CLK_MOSI_OFF); if (ret) {
dev_dbg(dev, "%s(), MOSI CLK ON select fail!\n", __func__); return ret;
}
}
return 0;
}
staticint mt8186_afe_gpio_adda_ul(struct device *dev, bool enable)
{ int ret;
if (enable) {
ret = mt8186_afe_gpio_select(dev, MT8186_AFE_GPIO_CLK_MISO_ON); if (ret) {
dev_dbg(dev, "%s(), MISO CLK ON select fail!\n", __func__); return ret;
}
ret = mt8186_afe_gpio_select(dev, MT8186_AFE_GPIO_DAT_MISO_ON); if (ret) {
dev_dbg(dev, "%s(), MISO DAT ON select fail!\n", __func__); return ret;
}
} else {
ret = mt8186_afe_gpio_select(dev, MT8186_AFE_GPIO_DAT_MISO_OFF); if (ret) {
dev_dbg(dev, "%s(), MISO DAT OFF select fail!\n", __func__); return ret;
}
ret = mt8186_afe_gpio_select(dev, MT8186_AFE_GPIO_CLK_MISO_OFF); if (ret) {
dev_dbg(dev, "%s(), MISO CLK OFF select fail!\n", __func__); return ret;
}
}
return 0;
}
int mt8186_afe_gpio_request(struct device *dev, bool enable, int dai, int uplink)
{ enum mt8186_afe_gpio sel; int ret = -EINVAL;
mutex_lock(&gpio_request_mutex);
switch (dai) { case MT8186_DAI_ADDA: if (uplink)
ret = mt8186_afe_gpio_adda_ul(dev, enable); else
ret = mt8186_afe_gpio_adda_dl(dev, enable); goto unlock; case MT8186_DAI_I2S_0:
sel = enable ? MT8186_AFE_GPIO_I2S0_ON : MT8186_AFE_GPIO_I2S0_OFF; break; case MT8186_DAI_I2S_1:
sel = enable ? MT8186_AFE_GPIO_I2S1_ON : MT8186_AFE_GPIO_I2S1_OFF; break; case MT8186_DAI_I2S_2:
sel = enable ? MT8186_AFE_GPIO_I2S2_ON : MT8186_AFE_GPIO_I2S2_OFF; break; case MT8186_DAI_I2S_3:
sel = enable ? MT8186_AFE_GPIO_I2S3_ON : MT8186_AFE_GPIO_I2S3_OFF; break; case MT8186_DAI_TDM_IN:
sel = enable ? MT8186_AFE_GPIO_TDM_ON : MT8186_AFE_GPIO_TDM_OFF; break; case MT8186_DAI_PCM:
sel = enable ? MT8186_AFE_GPIO_PCM_ON : MT8186_AFE_GPIO_PCM_OFF; break; default:
dev_dbg(dev, "%s(), invalid dai %d\n", __func__, dai); goto unlock;
}
ret = mt8186_afe_gpio_select(dev, sel);
unlock:
mutex_unlock(&gpio_request_mutex);
return ret;
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.