一些笔记:关于mt7628 openwrt 音频调试

本文记录了在MT7628芯片上使用OpenWrt进行音频调试的历程,包括遇到的SDK问题、设备树配置、GPIO、I2C和I2S的调试,以及codec驱动的分析。在不同SDK版本中尝试配置WM8960 codec,但最终因硬件设计和驱动问题未能成功。后续发现硬件冲突和官方SDK的I2C驱动问题导致调试困难。
摘要由CSDN通过智能技术生成

没有做过比这版更烂的开发,坑还在,开发还在继续,记一下笔记吧,或许找到一些灵感。

先用 mtk-openwrt-sdk-20160324-8f8e4f1e.tar.bz2 这版官方SDK(从官方网站上看这是最新的一版openwrt SDK,2016年的,是的,你没看错),然后i2c都巨艰难的调试出来,因为makefile里dev-i2c.o都被屏蔽了,坑。再接着发现虽说kernel 是 linux-3.10.14,但驱动写法居然是2.6,连dts设备树都没有。

换开源的lede-17.01,有设备树,熟悉的感觉。复制target\linux\ramips\dts\MT7628.dts到自己创建的设备树文件,修改target/linux/ramips/image/mt7628.mk 增加自己的产品平台。在根节点增加 :

	sound {
		compatible = "simple-audio-card";
		simple-audio-card,name = "Audio-I2S";
		simple-audio-card,format = "i2s";
		simple-audio-card,bitclock-master = <&dailink0_master>;
		simple-audio-card,frame-master = <&dailink0_master>;
		simple-audio-card,widgets = 
			"Microphone", "Microphone Jack",
			"Headphone", "Headphone Jack";
		simple-audio-card,routing =
			"LINPUT1", "Microphone Jack",
			"RINPUT1", "Microphone Jack",
			"Headphone Jack", "HP_L",
			"Headphone Jack", "HP_R";
		simple-audio-card,mclk-fs = <256>;

		simple-audio-card,cpu {
			sound-dai = <&i2s>;
		};

		dailink0_master: simple-audio-card,codec {
			sound-dai = <&codec>;
		};
	};

enable i2c i2s,并在i2c下挂上 wm8960:

&i2c {
	status = "okay";
	
	codec: wm8960@1a {
		#sound-dai-cells = <0>;
		compatible = "wlf,wm8960";
		reg = <0x1a>;
		wlf,shared-lrclk;
	};
};

&i2s {
	status = "okay";
	
	#sound-dai-cells = <0>;
	status = "okay";
	pinctrl-names = "default";
	pinctrl-0 = <&wm8960_mclk_pins>;
};

接着配置pinctrl了:

	i2s_pins: i2s {
		i2s {
			ralink,group = "i2s";
			ralink,function = "i2s";
		};
	};
		
	wm8960_mclk_pins: wm8960_mclk {
		wm8960_mclk {
			ralink,group = "refclk";
			ralink,function = "refclk";
		};
	};

结果是未找到声卡,怀疑是pinctrl配置和硬件有差异,待查验。同时由于wifi驱动比较难在这版SDK上移植过来,遂放弃这版SDK。

找到官方SDK MediaTek_APSoC_SDK5030_20170331.tar.bz2, 看了下代码,跟官方openwrt差不多,在3.10kernel上用2.6的写法。由于其他开发组需要很多应用是基于openwrt的,官方SDK只做参考,不做开发了。

突然听闻有人在开源分支chaos_calmer上配置7688音频成功了。下载编译调试,如果7628也是配置成功的,那就找到配置的关键点了,但最终结果是未找到声卡。这版SDK更奇葩一点,部分硬件资源放在dts上,部分写在C代码里。因为未配置7628音频成功,不继续下去了,专心弄官方的openwrt SDK。

小道消息知道,江湖上还流传着 mtk-openwrt-sdk-20170518-1443366e.tar.xz 这版SDK。遂专心在这版上开发调试,i2c,i2s,codec的节点都生成出来了,但还是功亏一篑。下面记录下这版开发的一些笔记吧。

1. 修改uboot和kernel波特率为115200:

uboot/src/include/configs/rt2880.h
#define CONFIG_BAUDRATE        115200

linux-3.10.14/arch/mips/ralink/cmdline.c
char rt2880_cmdline[]="console=ttyS1,115200n8 root=/dev/mtdblock5";

2.  GPIO的配置方式。

调试外设第一步应该知道GPIO是如何配置的。找到MTK 的gpio 驱动文件 drivers/char/ralink_gpio.c,并不是按照linux的gpio子系统那套写法,这年头见到这种写法也是比较难得的,够奇葩。里面注册字符设备和配置GPIO复用。

int __init ralink_gpio_init(void)
	register_chrdev(ralink_gpio_major, RALINK_GPIO_DEVNAME,&ralink_gpio_fops);  --- 注册字符设备
	gpiomode = le32_to_cpu(*(volatile u32 *)(RALINK_REG_GPIOMODE));
	gpiomode |= RALINK_GPIOMODE_DFT;					    --- 配置GPIO复用方式
	*(volatile u32 *)(RALINK_REG_GPIOMODE) = cpu_to_le32(gpiomode);		    --- 写到寄存器

在 arch/mips/include/asm/mach-ralink/rt_mmap.h 里定义了基地址:

#define RALINK_SYSCTL_BASE		0xB0000000
#define RALINK_PIO_BASE			0xB0000600
#define RALINK_I2C_BASE			0xB0000900
#define RALINK_I2S_BASE			0xB0000A00

在 drivers/char/ralink_gpio.h定义了GPIO相关头

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值