[Audio: I2S] Updated the reset API
authorcurry.zhang <curry.zhang@starfivetech.com>
Wed, 20 Jul 2022 01:36:38 +0000 (18:36 -0700)
committercurry.zhang <curry.zhang@starfivetech.com>
Thu, 21 Jul 2022 05:55:15 +0000 (22:55 -0700)
changed the standard reset API

Signed-off-by: curry.zhang <curry.zhang@starfivetech.com>
arch/riscv/boot/dts/starfive/jh7110.dtsi
sound/soc/dwc/dwc-i2s.c
sound/soc/dwc/local.h

index f4dbce8..9e969ff 100755 (executable)
                                        "rx-bclk", "rx-lrck";
                        resets = <&rstgen RSTN_U0_I2SRX_3CH_APB>,
                                 <&rstgen RSTN_U0_I2SRX_3CH_BCLK>;
-                       reset-names = "rst_apb_rx", "rst_bclk_rx";
                        dmas = <&dma 24 1>;
                        dma-names = "rx";
                        starfive,sys-syscon = <&sys_syscon 0x18 0x34>;
                                        "bclk0", "lrck0";
                        resets = <&rstgen RSTN_U0_I2STX_4CH_APB>,
                                 <&rstgen RSTN_U0_I2STX_4CH_BCLK>;
-                       reset-names = "rst_apb0", "rst_bclk0";
                        dmas = <&dma 47 1>;
                        dma-names = "tx";
                        #sound-dai-cells = <0>;
 
                        resets = <&rstgen RSTN_U1_I2STX_4CH_APB>,
                                 <&rstgen RSTN_U1_I2STX_4CH_BCLK>;
-                       reset-names = "rst_apb1", "rst_bclk1";
                        dmas = <&dma 48 1>;
                        dma-names = "tx";
                        #sound-dai-cells = <0>;
index ab8aaf1..468ba7e 100755 (executable)
 #include <linux/reset.h>
 #include "local.h"
 
-static const char * const rst_name[RST_AUDIO_NUM] = {
-       [RST_APB0_BUS] = "rst_apb0",
-       [RST_BCLK_0] = "rst_bclk0",
-       [RST_APB1_BUS] = "rst_apb1",
-       [RST_BCLK_1] = "rst_bclk1",
-       [RST_APB_RX] = "rst_apb_rx",
-       [RST_BCLK_RX] = "rst_bclk_rx",
-};
-
 #define CLOCK_BASE     0x13020000UL
 
 static void saif_set_reg(void __iomem *addr, u32 data, u32 shift, u32 mask)
@@ -593,24 +584,23 @@ static int dw_i2srx_clk_init(struct platform_device *pdev, struct dw_i2s_dev *de
        dev_dbg(&pdev->dev, "dev->clks[CLK_ADC_RX_BCLK] = %lu \n", clk_get_rate(dev->clks[CLK_ADC_RX_BCLK]));
        dev_dbg(&pdev->dev, "dev->clks[CLK_ADC_RX_LRCK] = %lu \n", clk_get_rate(dev->clks[CLK_ADC_RX_LRCK]));
 
-       dev->rstc[RST_APB_RX] = devm_reset_control_get_exclusive(&pdev->dev, rst_name[RST_APB_RX]);
-       if (IS_ERR(dev->rstc[RST_APB_RX])) {
-               dev_err(&pdev->dev, "%s: failed to get apb_i2srx reset control\n", __func__);
-                return PTR_ERR(dev->rstc[RST_APB_RX]);
+       dev->rstc_rx = devm_reset_control_array_get_exclusive(&pdev->dev);
+       if (IS_ERR(dev->rstc_rx)) {
+               dev_err(&pdev->dev, "%s: failed to get rstc_rx reset control\n", __func__);
+               goto disable_rx_lrclk;
        }
 
-       dev->rstc[RST_BCLK_RX] = devm_reset_control_get_exclusive(&pdev->dev, rst_name[RST_BCLK_RX]);
-       if (IS_ERR(dev->rstc[RST_BCLK_RX])) {
-               dev_err(&pdev->dev, "%s: failed to get i2s bclk rx reset control", __func__);
-                return PTR_ERR(dev->rstc[RST_BCLK_RX]);
+       ret = reset_control_assert(dev->rstc_rx);
+       if (ret) {
+               dev_err(&pdev->dev, "%s: failed to reset control assert rstc_rx\n", __func__);
+               goto disable_rx_lrclk;
        }
-       reset_control_assert(dev->rstc[RST_APB_RX]);
-       reset_control_assert(dev->rstc[RST_BCLK_RX]);
-
        udelay(5);
-
-       reset_control_deassert(dev->rstc[RST_APB_RX]);
-       reset_control_deassert(dev->rstc[RST_BCLK_RX]);
+       ret = reset_control_deassert(dev->rstc_rx);
+       if (ret) {
+               dev_err(&pdev->dev, "%s: failed to reset control deassert rstc_rx\n", __func__);
+               goto disable_rx_lrclk;
+       }
 
        /*i2srx_3ch_adc_enable*/
        regmap_update_bits(dev->syscon_base, dev->syscon_offset_18,
@@ -704,21 +694,18 @@ static int dw_i2stx_4ch0_clk_init(struct platform_device *pdev, struct dw_i2s_de
                goto disable_lrclk0;
        }
 
-       dev->rstc[RST_APB0_BUS] = devm_reset_control_get_exclusive(&pdev->dev, rst_name[RST_APB0_BUS]);
-       if (IS_ERR(dev->rstc[RST_APB0_BUS])) {
-               dev_err(&pdev->dev, "%s: failed to get apb_i2stx reset control\n", __func__);
-                return PTR_ERR(dev->rstc[RST_APB0_BUS]);
+       dev->rstc_ch0 = devm_reset_control_array_get_exclusive(&pdev->dev);
+       if (IS_ERR(dev->rstc_ch0)) {
+               dev_err(&pdev->dev, "%s: failed to get rstc_ch0 reset control\n", __func__);
+               goto disable_lrclk0;
        }
 
-       dev->rstc[RST_BCLK_0] = devm_reset_control_get_exclusive(&pdev->dev, rst_name[RST_BCLK_0]);
-       if (IS_ERR(dev->rstc[RST_BCLK_0])) {
-               dev_err(&pdev->dev, "%s: failed to get i2s bclk0 reset control\n", __func__);
-                return PTR_ERR(dev->rstc[RST_BCLK_0]);
+       ret = reset_control_deassert(dev->rstc_ch0);
+       if (ret) {
+               dev_err(&pdev->dev, "%s: failed to reset control deassert rstc_ch0\n", __func__);
+               goto disable_lrclk0;
        }
 
-       reset_control_deassert(dev->rstc[RST_APB0_BUS]);
-       reset_control_deassert(dev->rstc[RST_BCLK_0]);
-
        return 0;
 
 disable_lrclk0:
@@ -869,38 +856,21 @@ static int dw_i2stx_4ch1_clk_init(struct platform_device *pdev, struct dw_i2s_de
        dev_dbg(&pdev->dev, "dev->clks_apb0 = %lu \n", clk_get_rate(dev->clks_apb0));
        dev_dbg(&pdev->dev, "dev->clks_4ch_apb = %lu \n", clk_get_rate(dev->clks_4ch_apb));
 
-       dev->rstc[RST_APB1_BUS] = devm_reset_control_get_exclusive(&pdev->dev, rst_name[RST_APB1_BUS]);
-       if (IS_ERR(dev->rstc[RST_APB1_BUS])) {
-               dev_err(&pdev->dev, "%s: failed to get apb_i2stx reset control\n", __func__);
-                return PTR_ERR(dev->rstc[RST_APB1_BUS]);
-       }
-
-       dev->rstc[RST_BCLK_1] = devm_reset_control_get_exclusive(&pdev->dev, rst_name[RST_BCLK_1]);
-       if (IS_ERR(dev->rstc[RST_BCLK_1])) {
-               dev_err(&pdev->dev, "%s: failed to get i2s bclk1 reset control\n", __func__);
-                return PTR_ERR(dev->rstc[RST_BCLK_1]);
-       }
-
-       ret = reset_control_assert(dev->rstc[RST_APB1_BUS]);
-       if (ret) {
-               dev_err(&pdev->dev, "%s: failed to reset control assert RST_APB1_BUS\n", __func__);
-               goto disable_4ch_apb;
-       }
-       ret = reset_control_assert(dev->rstc[RST_BCLK_1]);
-       if (ret) {
-               dev_err(&pdev->dev, "%s: failed to reset control assert RST_BCLK_1\n", __func__);
+       dev->rstc_ch1 = devm_reset_control_array_get_exclusive(&pdev->dev);
+       if (IS_ERR(dev->rstc_ch1)) {
+               dev_err(&pdev->dev, "%s: failed to get rstc_ch1 reset control\n", __func__);
                goto disable_4ch_apb;
        }
 
-       ret = reset_control_deassert(dev->rstc[RST_APB1_BUS]);
+       ret = reset_control_assert(dev->rstc_ch1);
        if (ret) {
-               dev_err(&pdev->dev, "%s: failed to reset control deassert RST_APB1_BUS\n", __func__);
+               dev_err(&pdev->dev, "%s: failed to reset control assert rstc_ch1\n", __func__);
                goto disable_4ch_apb;
        }
 
-       ret = reset_control_deassert(dev->rstc[RST_BCLK_1]);
+       ret = reset_control_deassert(dev->rstc_ch1);
        if (ret) {
-               dev_err(&pdev->dev, "%s: failed to reset control deassert RST_APB1_BUS\n", __func__);
+               dev_err(&pdev->dev, "%s: failed to reset control deassert rstc_ch1\n", __func__);
                goto disable_4ch_apb;
        }
 
index 2836a69..eba6c08 100755 (executable)
@@ -146,7 +146,9 @@ struct dw_i2s_dev {
        struct clk *clks_mclk_out;
        struct clk *clks_apb0;
        struct clk *clks_4ch_apb;
-       struct reset_control *rstc[RST_AUDIO_NUM];
+       struct reset_control *rstc_rx;
+       struct reset_control *rstc_ch0;
+       struct reset_control *rstc_ch1;
 
        /* data related to DMA transfers b/w i2s and DMAC */
        union dw_i2s_snd_dma_data play_dma_data;