瑞芯微Rockchip开发者社区
直播中

李猛

7年用户 1507经验值
私信 关注
[问答]

​请问怎样在RK3328 Android10上对es7243进行调试呢

​请问怎样在RK3328 Android10上对es7243进行调试呢?有哪些调试步骤?

回帖(1)

曹雪琰

2022-3-9 14:34:55
一、es7243威廉希尔官方网站 图。



二、修改的部分,解决没有mclk的问题。

commit b86b0275bf898fcc61abd48c776186e901bceac7
Author: xxx @192.168.2.82:xxx/xxx.git>
Date:   Mon Jun 7 10:02:10 2021 +0800

    es7243 recording function is ok now .

diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3328.dtsi
index db9df63..5d9cb89 100755
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3328.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3328.dtsi
@@ -242,8 +242,8 @@
                compatible = "rockchip,rk3328-i2s", "rockchip,rk3066-i2s";
                reg = <0x0 0xff010000 0x0 0x1000>;
                interrupts = ;
-                clocks = <&cru SCLK_I2S1>, <&cru HCLK_I2S1_8CH>;
-                clock-names = "i2s_clk", "i2s_hclk";
+                clocks = <&cru SCLK_I2S1>, <&cru HCLK_I2S1_8CH>,<&cru SCLK_I2S1_OUT>;
+                clock-names = "i2s_clk", "i2s_hclk","i2s_mclk";
                dmas = <&dmac 14>, <&dmac 15>;
                dma-names = "tx", "rx";
                resets = <&cru SRST_I2S1>, <&cru SRST_I2S1_H>;
@@ -1080,8 +1080,8 @@
                compatible = "rockchip,rk3328-codec";
                reg = <0x0 0xff410000 0x0 0x1000>;
                rockchip,grf = <&grf>;
-                clocks = <&cru PCLK_ACODEC>, <&cru SCLK_I2S1>;
-                clock-names = "pclk", "mclk";
+                clocks = <&cru PCLK_ACODEC>, <&cru SCLK_I2S1>, <&cru SCLK_I2S1_OUT>;
+                clock-names = "pclk", "mclk","i2s1_mclk";
                status = "disabled";
        };
diff --git a/kernel/sound/soc/codecs/rk3328_codec.c b/kernel/sound/soc/codecs/rk3328_codec.c
old mode 100644
new mode 100755
index 5a4184a..6c5cbde
--- a/kernel/sound/soc/codecs/rk3328_codec.c
+++ b/kernel/sound/soc/codecs/rk3328_codec.c
@@ -42,6 +42,9 @@
#define RK3328_GRF_SOC_CON10        (0x0428)
#define INITIAL_FREQ        (11289600)

+extern int es7243_standby(void);
+extern int es7243_start(void);
+
struct rk3328_codec_priv {
        struct regmap *regmap;
        struct regmap *grf;
@@ -50,6 +53,7 @@ struct rk3328_codec_priv {
        unsigned int sclk;
        int spk_depop_time; /* msec */
};
+struct clk *i2s1_mclk;
static const struct reg_default rk3328_codec_reg_defaults[] = {
        { CODEC_RESET, 0x03 },
@@ -322,13 +326,29 @@ static int rk3328_hw_params(struct snd_pcm_substream *substream,
static int rk3328_pcm_startup(struct snd_pcm_substream *substream,
                              struct snd_soc_dai *dai)
{
-        return rk3328_codec_open_playback(dai->component);
+        printk("rn rk3328_pcm_startup substream->stream=%d rn",substream->stream);
+         if(substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+                 return rk3328_codec_open_playback(dai->component);
+        else {
+                printk("%s--es7243_start---n",__func__);
+            clk_prepare_enable(i2s1_mclk);
+            clk_set_rate(i2s1_mclk, INITIAL_FREQ);
+            es7243_start();
+        return 0;
+    }      
}

static void rk3328_pcm_shutdown(struct snd_pcm_substream *substream,
                                struct snd_soc_dai *dai)
{
-        rk3328_codec_close_playback(dai->component);
+        printk("rn rk3328_pcm_shutdown substream->stream=%d rn",substream->stream);
+        if(substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+           rk3328_codec_close_playback(dai->component);
+    else {
+            printk("%s--es7243_standbyn",__func__);
+            es7243_standby();
+            clk_disable_unprepare(i2s1_mclk);
+    }
}
static const struct snd_soc_dai_ops rk3328_dai_ops = {
@@ -473,9 +493,11 @@ static int rk3328_platform_probe(struct platform_device *pdev)
        rk3328_analog_output(rk3328, 0);

        rk3328->mclk = devm_clk_get(&pdev->dev, "mclk");
+        i2s1_mclk = devm_clk_get(&pdev->dev, "i2s1_mclk");
        if (IS_ERR(rk3328->mclk))
                return PTR_ERR(rk3328->mclk);

+
        ret = clk_prepare_enable(rk3328->mclk);
        if (ret)
                return ret;

三、测试命令 tinycap /sdcard/rec0.wav   -D 0 -d 0 –c 2 –r 44100 –b 16 –p 1024 –n 3

四、es7243驱动在附件,下载地址





举报

更多回帖

发帖
×
20
完善资料,
赚取积分