From: Mark Brown Date: Wed, 22 Jun 2022 16:40:22 +0000 (+0100) Subject: ASoC: rockchip: i2s: switch BCLK to GPIO X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=55e77abab2eebabf99820c2b2b3f6cdce0adbcf3;p=linux.git ASoC: rockchip: i2s: switch BCLK to GPIO Merge series from Judy Hsiao : The patches series is to fix the unexpected large DC output voltage of Max98357a that burns the speakers on the rockchip platform when BCLK and SD_MODE are ON but LRCLK is OFF. --- 55e77abab2eebabf99820c2b2b3f6cdce0adbcf3 diff --cc sound/soc/rockchip/rockchip_i2s.c index 9fa8ffd712ea0,aa7d9984022a3..d300eee9ddaae --- a/sound/soc/rockchip/rockchip_i2s.c +++ b/sound/soc/rockchip/rockchip_i2s.c @@@ -808,32 -800,20 +800,30 @@@ static int rockchip_i2s_probe(struct pl i2s->bclk_ratio = 64; i2s->pinctrl = devm_pinctrl_get(&pdev->dev); - if (IS_ERR(i2s->pinctrl)) { - if (IS_ERR(i2s->pinctrl)) -- dev_err(&pdev->dev, "failed to find i2s pinctrl\n"); - } else { - i2s->bclk_on = pinctrl_lookup_state(i2s->pinctrl, "bclk_on"); - if (IS_ERR_OR_NULL(i2s->bclk_on)) - dev_err(&pdev->dev, "failed to find i2s default state\n"); - else - dev_dbg(&pdev->dev, "find i2s bclk state\n"); - i2s->bclk_on = pinctrl_lookup_state(i2s->pinctrl, "bclk_on"); - if (!IS_ERR_OR_NULL(i2s->bclk_on)) { -- i2s->bclk_off = pinctrl_lookup_state(i2s->pinctrl, "bclk_off"); - if (IS_ERR_OR_NULL(i2s->bclk_off)) - dev_err(&pdev->dev, "failed to find i2s gpio state\n"); - else - dev_dbg(&pdev->dev, "find i2s bclk_off state\n"); - - i2s_pinctrl_select_bclk_off(i2s); - if (IS_ERR_OR_NULL(i2s->bclk_off)) { - dev_err(&pdev->dev, "failed to find i2s bclk_off\n"); - goto err_clk; ++ if (!IS_ERR(i2s->pinctrl)) { ++ i2s->bclk_on = pinctrl_lookup_state(i2s->pinctrl, "bclk_on"); ++ if (!IS_ERR_OR_NULL(i2s->bclk_on)) { ++ i2s->bclk_off = pinctrl_lookup_state(i2s->pinctrl, "bclk_off"); ++ if (IS_ERR_OR_NULL(i2s->bclk_off)) { ++ dev_err(&pdev->dev, "failed to find i2s bclk_off\n"); ++ goto err_clk; ++ } + } ++ } else { ++ dev_err(&pdev->dev, "failed to find i2s pinctrl\n"); } + i2s_pinctrl_select_bclk_off(i2s); + + i2s->playback_dma_data.addr = res->start + I2S_TXDR; + i2s->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; + i2s->playback_dma_data.maxburst = 4; + + i2s->capture_dma_data.addr = res->start + I2S_RXDR; + i2s->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; + i2s->capture_dma_data.maxburst = 4; + dev_set_drvdata(&pdev->dev, i2s); pm_runtime_enable(&pdev->dev);