最近做了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是不可以读寄存器的,只是可以写寄存器。

如果大家在调试的过程中遇到什么问题,可以给我留言。谢谢!

更多相关文章

  1. Android(安卓)获取指向Resource的URI[转]
  2. How to use HTC on Ubuntu 12.04 to test Android(安卓)Apps?
  3. android:WebView在没有网络情况下,点击当前页面内链接不跳转并弹
  4. php脚本生成google play url的下载链接,下载apk并自动反编译后获
  5. 【Android(安卓)NDK 开发】Android(安卓)Studio 使用 CMake 导入
  6. 链接:NFC:NFC基础
  7. Android(安卓)通过URL scheme 实现点击浏览器中的URL链接,启动特
  8. android Https请求的使用
  9. VINS在Android上的实现

随机推荐

  1. android AVD 详解
  2. 简单 4部 完成 android 二维码扫一扫功能
  3. greenDAO系列3--又是介绍
  4. Android http超时选项的测试
  5. android重要包的描述
  6. Android名词解释之什么是APK文件
  7. [对android程序作代码混淆]
  8. android的基本知识
  9. 阿福强烈推荐一个不错的技术网站,android
  10. Android 多媒体数据库