ASoC: rockchip: i2s: switch BCLK to GPIO
authorMark Brown <broonie@kernel.org>
Wed, 22 Jun 2022 16:40:22 +0000 (17:40 +0100)
committerMark Brown <broonie@kernel.org>
Wed, 22 Jun 2022 16:40:22 +0000 (17:40 +0100)
Merge series from Judy Hsiao <judyhsiao@chromium.org>:

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.

1  2 
sound/soc/rockchip/rockchip_i2s.c

index 9fa8ffd712ea00fecdef7f584723b669df7d0d8a,aa7d9984022a3224a981b6dfc4af3b32f6b0e394..d300eee9ddaae0110acb45ce2baabd95a6f58d13
@@@ -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);