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

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值