1. 前言
限于作者能力水平,本文可能存在的谬误,因此而给读者带来的损失,作者不做任何承诺。
2. 背景
移植 RTC 芯片HYM8563
驱动移植到 S5P4418 + Linux 3.4.y
系统。
3. 适配和测试
3.1 适配
(1) 拷贝rtc-HYM8563.c
, rtc-HYM8563.h
到目录drivers/rtc
;
(2) 修改文件drivers/rtc/Kconfig
,增加如下内容:
if I2C
...
config RTC_DRV_HYM8563
tristate "H&M SEMI RTC HYM8563"
endif # I2C
(3) 修改文件drivers/rtc/Makefile
,增加如下内容:
obj-$(CONFIG_RTC_DRV_HYM8563) += rtc-HYM8563.o
(4) 运行 make menuconfig 修改内核配置,使能rtc hym8563驱动:
Device Drivers
-> Real Time Clock
-> <*> H&M SEMI RTC HYM8563
同时,关闭SoC RTC
Device Drivers
-> Real Time Clock
-> <> SLsiAP RTC
(5) 修改文件arch/arm/plat-s5p4418/nanopi2/device.c
,注册HYM8563 I2C设备到I2C总线:
#if defined(CONFIG_RTC_DRV_HYM8563)
#define HYM8563_I2C_BUS (1)
static struct i2c_board_info __initdata hym8563_i2c_bdi = {
I2C_BOARD_INFO("rtc_hym8563", 0x51),
.irq = -1/*PB_PIO_IRQ(CFG_IO_RTC_INT)*/,
};
#endif
void __init nxp_board_devices_register(void)
{
...
#if defined(CONFIG_RTC_DRV_HYM8563)
printk("plat: add hym8563 device\n");
i2c_register_board_info(HYM8563_I2C_BUS, &hym8563_i2c_bdi, 1);
#endif
...
}
(6) 修改文件arch/arm/plat-s5p4418/nanopi2/include/cfg_gpio.h
,适配HYM8563中断引脚:
/* RTC_INT gpio, RTC_INT IRQ number. */
#define CFG_RTC_IRQ (IRQ_GPIO_C_START + 25)
#define CFG_IO_RTC_INT (PAD_GPIO_C + 25)
3.2 测试
用hwclock
和date
命令测试RTC的:
date -s 2017.06.13-15:12 # 设置系统时钟
hwclock -w # 把系统时间写回rtc芯片
之后就可以重启或重新上电系统,然后查看时间或rtc芯片时间,看rtc有没有正常工作
hwclock -r
date