本文主要是介绍I.mx6s上移植wm8960驱动(基于linux3.0.101版本),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
I.mx6s上移植wm8960驱动
此篇博文只记录移植的步骤,其他不做分析。首先上一张wm8960的硬件连接图:
1 上电操作
配置wm8960的上电脚,文件位置:arch/arm/mach-mx6/board-mx6q_sabresd.c
另外,根据原理图可知上电脚为GPIO17,所以相关配置头文件里需将其配置为gpio口,文件位置:arch/arm/mach-mx6/board-mx6dl_sabresd.h
2:配置I2C,用于client的生成 ,文件位置:arch/arm/mach-mx6/board-mx6q_sabresd.c 需确认你的i2c是接的哪个控制器。
3: 修改wm8960 codec相关的数据结构,此处根据wm8962修改而来,文件位置: arch/arm/mach-mx6/board-mx6q_sabresd.c
以下是修改的地方
1 上电操作
配置wm8960的上电脚,文件位置:arch/arm/mach-mx6/board-mx6q_sabresd.c
#define SABRESD_CODEC_PWR_EN IMX_GPIO_NR(7, 12)440 /* Enable wm8960 power supply */441 gpio_request(SABRESD_CODEC_PWR_EN, "audio-power");442 gpio_direction_output(SABRESD_CODEC_PWR_EN, 1);443 msleep(1);444 gpio_set_value(SABRESD_CODEC_PWR_EN, 1);445 printk("Power up wm8960 successful %s\n", __FUNCTION__);
另外,根据原理图可知上电脚为GPIO17,所以相关配置头文件里需将其配置为gpio口,文件位置:arch/arm/mach-mx6/board-mx6dl_sabresd.h
236 /* CODEC_PWR_EN */
237 MX6DL_PAD_GPIO_17__GPIO_7_12,
2:配置I2C,用于client的生成 ,文件位置:arch/arm/mach-mx6/board-mx6q_sabresd.c 需确认你的i2c是接的哪个控制器。
805 static struct i2c_board_info mxc_i2c0_board_info[] __initdata = {806 {807 I2C_BOARD_INFO("wm8960", 0x1a),808 },
};
3: 修改wm8960 codec相关的数据结构,此处根据wm8962修改而来,文件位置: arch/arm/mach-mx6/board-mx6q_sabresd.c
以下是修改的地方
57 #include <sound/wm8962.h>58 #include <sound/wm8960.h>...省略部分内容...410 static struct platform_device mx6_sabresd_audio_wm8960_device = {411 .name = "imx-wm8960",412 };413 414 static struct mxc_audio_platform_data wm8960_data;415 416 static int wm8960_clk_enable(int enable)417 {418 if (enable) {419 clk_enable(clko);420 printk("%s:wm clk enable\n", __FUNCTION__);421 }422 else {423 clk_disable(clko);424 printk("%s:wm clk disable\n", __FUNCTION__);425 }426 return 0;427 }428429 static int mxc_wm8960_init(void)430 {431 int rate;432 433 clko = clk_get(NULL, "clko_clk");434 if (IS_ERR(clko)) {435 pr_err("can't get CLKO clock.\n");436 return PTR_ERR(clko);437 }438 /* both audio codec and comera use CLKO clk*/439 rate = clk_round_rate(clko, 24000000);440 clk_set_rate(clko, rate);441 442 wm8960_data.sysclk = rate;443 444 /* Enable wm8960 power supply */445 gpio_request(SABRESD_CODEC_PWR_EN, "audio-power");446 gpio_direction_output(SABRESD_CODEC_PWR_EN, 1);447 msl
这篇关于I.mx6s上移植wm8960驱动(基于linux3.0.101版本)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!