RK3566,ES7202声卡驱动添加

1. IIC驱动添加

设备树添加es7202的节点,内容如下

&i2c3 {
	status = "okay";
	clock-frequency = <400000>;

	es7202: es7202@37 {
		status = "okay";
		compatible = "ES7202_PDM_ADC_1";
		#sound-dai-cells = <0>;
		reg = <0x37>;
	};
};

2.添加声卡驱动

在设备树下添加声卡节点

	sound_es7202 {
		status = "okay";
		compatible = "simple-audio-card";

		simple-audio-card,format = "pdm";
		simple-audio-card,name = "rockchip,Es7202";
		simple-audio-card,mclk-fs = <256>;

		simple-audio-card,cpu {
			sound-dai = <&pdm>;
		};
		simple-audio-card,codec {
			sound-dai = <&es7202>;
		};

	};

3. pdm接口

设备树

&pdm {
	status = "okay";
	rockchip,path-map = <1 0 2 3>;
	clocks = <&cru MCLK_PDM>, <&cru HCLK_PDM>;
	clock-names = "pdm_clk", "pdm_hclk";
	pinctrl-names = "default";
	pinctrl-0 = <&pdmm0_clk1
			&pdmm0_sdi1>;
	//#sound-dai-cells = <0>;
};

这其中rockchip,path-map含义如下:

Optional properties:
- rockchip,path-map: This is a variable length array, that shows the mapping
  of SDIx to PATHx. By default, they are one-to-one mapping as follows:

   path0 <-- sdi0
   path1 <-- sdi1
   path2 <-- sdi2
   path3 <-- sdi3

  e.g. "rockchip,path-map = <3 2 1 0>" means the mapping as follows:

   path0 <-- sdi3
   path1 <-- sdi2
   path2 <-- sdi1
   path3 <-- sdi0

4.修改安卓hal层

在hardware/rockchip/audio/tinyalsa_hal/下的audio_hw.c,修改内容:

struct dev_proc_info MIC_IN_NAME[] =
  {
      {"realtekrt5616c", NULL,},                                                                                                                                          
      {"realtekrt5651co", "rt5651-aif1",},
      {"realtekrt5670c", NULL,},
      {"realtekrt5672c", NULL,},
      {"realtekrt5678co", NULL,},
      {"rockchipes8316c", NULL,},
      {"rockchipes8323c", NULL,},
      {"rockchipes8396c", NULL,},
      {"rockchipes7210", NULL,},
      {"rockchipes7243", NULL,},
      {"rockchiprk", NULL, },
      {"rockchiprk809co", NULL,},
      {"rockchiprk817co", NULL,},
      {"rockchiprt5640c", NULL,},
 	{"rockchiprt5670c", NULL,},
      {"rockchiprt5672c", NULL,},
      {"rockchipEs7202",NULL},    // es7202
      {NULL, NULL}, /* Note! Must end with NULL, else will cause crash */
  };

我的es7202的声卡名是"rockchipEs7202",依葫芦画瓢,复制一下上面的内容更改以下就可以了,

rk66_gnrc:/ $ cat proc/asound/cards                                                                                                                                         
 0 [rockchiprk817co]: rockchip_rk817- - rockchip,rk817-codec
                      rockchip,rk817-codec
 1 [rockchipEs7202 ]: rockchip_Es7202 - rockchip,Es7202
                      rockchip,Es7202
rk66_gnrc:/ $ 

这个名字是通过在adb终端cat查看的,我之前有加后缀太长发现不行,这个名字跟simple-audio-card,name = “rockchip,Es7202”;,有关我之前是:simple-audio-card,name = “rockchip,sound_es7202”; ,下面是我之前cat出来的信息:

rk66_gnrc:/ $ cat proc/asound/cards                                                                                                                                         
 0 [rockchiprk817co]: rockchip_rk817- - rockchip,rk817-codec
                      rockchip,rk817-codec
 1 [rockchipsoundes]: rockchip_sound_ - rockchip,sound_es7202
                      rockchip,sound_es7202

5.修改 es7202.c源码

将上面的添加好后发现用安卓里的录音APP录音没有反应,最后通过好几天的查找是es7202.c源码里有问题,内容如下

static int es7202_mute(struct snd_soc_dai *dai, int mute)
{
	if (mute) {
		es7202_multi_chips_update_bits(ES7202_PDM_INF_CTL_REG07, 0x03,0x03);
	} else if (dai->playback_active) {
		es7202_multi_chips_update_bits(ES7202_PDM_INF_CTL_REG07, 0x03,0x00);		
	}
	return 0;
}

#define es7202_RATES SNDRV_PCM_RATE_8000_96000

static struct snd_soc_dai_ops es7202_ops = {
	.digital_mute = es7202_mute,
};

更改如下:

static int es7202_mute_stream(struct snd_soc_dai *dai, int mute, int stream)
{
	printk("Vantron-------es7202_mute_stream------------------------\r\n");
 if (stream == SNDRV_PCM_STREAM_CAPTURE) {
               if (mute) {
                       es7202_multi_chips_update_bits(ES7202_PDM_INF_CTL_REG07, 0x03,0x03);
               } else {
                       msleep(150);
                       es7202_multi_chips_update_bits(ES7202_PDM_INF_CTL_REG07, 0x03,0x00);
               }
        }

	return 0;
}

#define es7202_RATES SNDRV_PCM_RATE_8000_96000

static struct snd_soc_dai_ops es7202_ops = {
	//.digital_mute = es7202_mute,
	.mute_stream = es7202_mute_stream,
};
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
RK3566是一款高性能的64位四核芯片,可提供丰富的接口和功能,广泛应用于各种嵌入式系统中。而RTL8211F是一款高集成度的Gigabit以太网PHY芯片,用于处理以太网通信。 要调试RK3566与RTL8211F的驱动,首先需要确保硬件连接正确。RTL8211F芯片通过PHY接口与RK3566芯片连接,需要将各个引脚正确连接,确保通信能够正常进行。 其次,需要加载正确的驱动程序。在RK3566的系统中,需要加载相应的网卡驱动程序,以支持与RTL8211F的通信。可以通过在系统中运行lspci命令来确认网卡设备的驱动程序是否正确加载。 接下来,可以通过网络配置工具来设置与RTL8211F的通信参数。在Linux系统中,可以使用ifconfig命令或者网络管理工具,如NetworkManager来配置网络接口。可以设置IP地址、子网掩码、网关等参数,确保RK3566能够与RTL8211F正常通信。 调试过程中,还可以使用网络诊断工具来检查网络连接是否正常。例如,可以使用ping命令来测试RK3566与另一个设备之间的连通性。如果ping命令成功返回,则表示网络连接正常。 最后,还可以使用网络分析工具来进行包的抓取和分析,以进一步调试和排查可能出现的问题。例如,可以使用Wireshark对网络数据包进行抓取和分析,以确认数据包的发送和接收情况。 总之,调试RK3566与RTL8211F的驱动需要确保硬件连接正确、加载正确的驱动程序、配置正确的网络参数,并使用网络诊断工具和分析工具进行进一步的调试和排查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值