1. 前言
限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。
2. 背景
将电源管理芯片 AXP-228 适配到 S5P4418 + Linux 3.4.y 系统。
3. 适配过程
电源管理芯片AXP-228是挂接在I2C总线上,电源管理芯片AXP-228的I2C接口使用的复用GPIO为:
PMIC_SCL: GPIOE30
PMIC_SDA: GPIOE31
电源管理芯片还有个中断信号脚,其PIN脚为:
GPIO Alive 4
3.1 配置电源管理芯片挂接的I2C总线
/* @arch/arm/plat-s5p4418/nanopi2/include/cfg_main.h */
/* AXP228 PMIC */
#define CFG_PMIC_I2_CBUS 3 /* i2c channel */
#define CFG_BATTERY_CAP 3000 /* Battery Capacity */
/* PMIC Common */
#define CFG_GPIO_PMIC_INTR (PAD_GPIO_ALV + 4) /* PMIC Interrupt */
#define CONFIG_ENABLE_INIT_VOLTAGE /* Enalbe init voltage for ARM, CORE */
/* @arch/arm/plat-s5p4418/nanopi2/include/axp22-cfg.h */
/*
* Config Value
*/
/* i2c channel */
#define AXP_I2CBUS 3
/* interrupt */
#define AXP_IRQNO CFG_GPIO_PMIC_INTR // 164
3.2 适配 AXP-228 I2C 客户端信息
/* @drivers/power/axp_power/axp22-board.c */
static struct i2c_board_info __initdata
axp_mfd_i2c_board_info[] = {
{
.type = "axp22_mfd",
.addr = AXP_DEVICES_ADDR,
.platform_data = &axp_pdata,
.irq = AXP_IRQNO,
},
};
3.3 配置 AXP-228 I2C 地址
/* @drivers/power/axp_power/axp-cfg.h */
/* i2c slave address */
#define AXP_DEVICES_ADDR (0x68 >> 1)
3.4 注册 AXP-228 I2C 客户端到总线
/* @arch/arm/plat-s5p4418/nanopi2/device.c */
/*------------------------------------------------------------------------------
* register board platform devices
*/
void __init nxp_board_devices_register(void)
{
…
#if 0
if (board_is_nanopi()) {
#if defined(CONFIG_REGULATOR_FIXED_VOLTAGE)
printk("plat: add device fixed voltage\n");
platform_device_register(&fixed_supply_dummy_device);
#endif
} else {
#endif
#if defined(CONFIG_I2C_NXP_PORT3)
platform_add_devices(i2c_devices, ARRAY_SIZE(i2c_devices));
#endif
#if 0
}
#endif
…
}
3.5 I2C PIN脚GPIO复用适配
/* @arch/arm/plat-s5p4418/nanopi2/include/cfg_gpio.h */
#define PAD_GPIOE30 (PAD_MODE_OUT | PAD_FUNC_ALT1 |
PAD_LEVEL_LOW | PAD_PULL_OFF |
PAD_STRENGTH_0)
// 0: MCUS_nSOE
// 1: GPIO,
// 2:_,
// 3:_ =
// PMIC_SCL
#define PAD_GPIOE31 (PAD_MODE_IN | PAD_FUNC_ALT1 |
PAD_LEVEL_LOW | PAD_PULL_OFF |
PAD_STRENGTH_0)
// 0: MCUS_nSWE
// 1: GPIO,
// 2:_,
// 3:_ =
// PMIC_SDA