1、常用引脚定义复用的文件:
pinctrl.c
2、RTC驱动文件,一般都在/drivers/rtc目录下,如pcf8563的驱动文件就在该目录下
3、设备信息一般在,arch/arm/目录下
一、pcf8563不好使,解决过程:
1、首先因为pcf8563属于I2C设备,首先看下硬件,使用的是I2C0还是I2C1。
2、查看内核驱动中,/drivers/rtc/目录下是否存在rtc-pcf8563.c的驱动文件,一般都会存在。
3、make menuconfig 确定内核配置中,pcf8563所在的i2c接口是配置上的。
4、驱动文件有了,内核对相应的i2c接口也使能了,去arch/arm/目录下我的在mx28_evk.c中,这个目录下一般都是核心板板载的设备信息文件的地方,mx28_evk.c貌似跟飞思卡尔有些关系,找到代码
static struct i2c_board_info __initdata mxs_i2c_device[] = { { I2C_BOARD_INFO("sgtl5000-i2c", 0xa), .flags = I2C_M_TEN } }; static void __init i2c_device_init(void) { i2c_register_board_info(0, mxs_i2c_device, ARRAY_SIZE(mxs_i2c_device)); }
发现并没有pcf8563对应的设备信息,即使有pcf8563的驱动,但因为没有将设备信息也加入到I2C总线上,因为总线无法进行将设备和驱动进行配对,所以导致pcf8563不好用。因此在定义一个设备,因为我的pcf8563用的是i2c1接口,所以为了加以区分,定义的名字该下,pcf8563的地址一般为0x51,如下
//static struct i2c_board_info __initdata mxs_i2c_device[] = { static struct i2c_board_info __initdata mxs_i2c_device0[] = { //why add 2017 03.31 { I2C_BOARD_INFO("sgtl5000-i2c", 0xa), .flags = I2C_M_TEN } }; /*****************why add pcf8563 devices info 2017. 03. 31.**********************/ static struct i2c_board_info __initdata mxs_i2c_device1[] = { {I2C_BOARD_INFO("pcf8563", 0x51),}, }; /**************************************************************************/ static void __init i2c_device_init(void) { //i2c_register_board_info(0, mxs_i2c_device, ARRAY_SIZE(mxs_i2c_device)); i2c_register_board_info(0, mxs_i2c_device0, ARRAY_SIZE(mxs_i2c_device0)); //why add 2017 03 31 i2c_register_board_info(1, mxs_i2c_device1, ARRAY_SIZE(mxs_i2c_device1)); //why add 2017 03 31 }
本文出自 “whylinux” 博客,谢绝转载!
原文:http://whylinux.blog.51cto.com/10900429/1912160