Android(安卓)2.2和2.3 的wm8976的驱动解析
最近做了wm8976的驱动,现在就想说说自己了解的地方,希望对家有一点帮助
在我的android的2.2里面,主要要做的事情是:
1:在Mach-smdk210.c里面添加
/* I2C1 */
static struct i2c_board_info i2c_devs1[] __initdata = {
{ I2C_BOARD_INFO("mma7660", 0x4C), },
{ I2C_BOARD_INFO("wm8976", 0x1a), },
{ I2C_BOARD_INFO("ft5x0x_ts", 0x38), },
{ I2C_BOARD_INFO("uor6x5x_ts", 0x48), },
{ I2C_BOARD_INFO("pixcir168", 0x5c), },
{ I2C_BOARD_INFO("egalax_i2c", 0x04), },
{ I2C_BOARD_INFO("ata2538", 0x68), },
{ I2C_BOARD_INFO("Goodix-TS", 0x55), /*.irq = IRQ_EINT(8),*/ },
{ I2C_BOARD_INFO("hx8520x_ts", (0x94>>1)), },
{ I2C_BOARD_INFO("pm28g_ts", (0xc0>>1)), },
{ I2C_BOARD_INFO("ft5x0x_asb_ts", 0x39), },
{ I2C_BOARD_INFO("msti2c_ts", (0x5c>>1)), },
{ I2C_BOARD_INFO("IT7260_ts", (0x46)), },
{ I2C_BOARD_INFO("uc6511", (0x0a)), },
};
以上是S5PV210的I2C1接口外围芯片的设备地址的数组。
这里主要是因为我的wm8976的接口用的是I2C1,所以把在wm8976的设备地址着这里添加链接
static void __init smdkv210_machine_init(void)
{
/* Find out S5PC110 chip version */
_hw_version_check();
/* OneNAND */
#ifdef CONFIG_MTD_ONENAND
//s3c_device_onenand.dev.platform_data = &s5p_onenand_data;
#endif
#ifdef CONFIG_MTD_NAND
//s3c_device_nand.dev.platform_data = &s5p_nand_data;
#endif
#ifdef CONFIG_DM9000
smdkv210_dm9000_set();
#endif
#ifdef CONFIG_ANDROID_PMEM
android_pmem_set_platdata();
#endif
/* i2c */
s3c_i2c0_set_platdata(NULL);
s3c_i2c1_set_platdata(NULL);
s3c_i2c2_set_platdata(NULL);
i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));//添加I2C0接口芯片的设备地址
i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));//添加I2C1接口芯片的设备地址
}
2:在sound/soc/s3c24xx/smdkv2xx_wm8976.c
这个文件主要是wm8976的链接文件,是和aspcm有关系的,主要是加载wm8976以及控制时钟,和一些链接,对该文件注意的地方主要就是
static struct snd_soc_dai_link smdk64xx_dai[] = {
{
.name = "WM8976 PAIF RX",//名字要和wm8976.c里面的链接名字一样哦
.stream_name = "Playback",//同上
.cpu_dai = &s3c64xx_i2s_dai[I2S_NUM],//这个比较重要的选择,I2S_NUM=2,IIS2我们用的是iis2时钟信号,录音和放音的时钟
///s3c64xx_i2s_dai是链接文件主要是控制时钟的东东,记得2.2和2.3用的是不一样的,2.3的是.cpu_dai = &s3c64xx_i2s_v4_dai[S5PV210_I2S_NUM], 所以大家在移植wm8976到2.3上面还要注意哦,有时间我在讲一下。
.codec_dai = &wm8976_dai,
.init = s3C6410_wm8976_init,
.ops = &s3C6410_hifi_ops,
},
3:sound/soc/codes/wm8976.c
里面基本上市没有上面要改的了,主要是写寄存器,要打开一些我们需要的通路
小结:记得MCLK的时钟也是很重要的哦,没有打开这个时钟老是读写错误
对这个时钟的控制就是在s3c64xx_i2s_dai[的这个文件里面,请大家调试的时候注意一下!
还有就是wm8976是没有ID的,同时wm8976是不可以读寄存器的,只是可以写寄存器。
如果大家在调试的过程中遇到什么问题,可以给我留言。谢谢!
更多相关文章
- Android(安卓)获取指向Resource的URI[转]
- How to use HTC on Ubuntu 12.04 to test Android(安卓)Apps?
- android:WebView在没有网络情况下,点击当前页面内链接不跳转并弹
- php脚本生成google play url的下载链接,下载apk并自动反编译后获
- 【Android(安卓)NDK 开发】Android(安卓)Studio 使用 CMake 导入
- 链接:NFC:NFC基础
- Android(安卓)通过URL scheme 实现点击浏览器中的URL链接,启动特
- android Https请求的使用
- VINS在Android上的实现