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
- }
来源: http://www.bubuko.com/infodetail-2003771.html