提交 81a8aa3a 编写于 作者: C Chen-Yu Tsai 提交者: Hans de Goede

sunxi: axp: Generalize register macros for VBUS drive GPIO

VBUS drive is supported on AXP221 and later PMICs. Rework the macros
so we can support this on later PMICs without too much work.
Signed-off-by: NChen-Yu Tsai <wens@csie.org>
Reviewed-by: NHans de Goede <hdegoede@redhat.com>
Signed-off-by: NHans de Goede <hdegoede@redhat.com>
上级 96fccb17
...@@ -59,10 +59,11 @@ static int axp_gpio_direction_output(struct udevice *dev, unsigned pin, ...@@ -59,10 +59,11 @@ static int axp_gpio_direction_output(struct udevice *dev, unsigned pin,
u8 reg; u8 reg;
switch (pin) { switch (pin) {
#ifdef CONFIG_AXP221_POWER /* Only available on axp221/axp223 */ #ifdef AXP_MISC_CTRL_N_VBUSEN_FUNC
/* Only available on later PMICs */
case SUNXI_GPIO_AXP0_VBUS_ENABLE: case SUNXI_GPIO_AXP0_VBUS_ENABLE:
ret = pmic_bus_clrbits(AXP221_MISC_CTRL, ret = pmic_bus_clrbits(AXP_MISC_CTRL,
AXP221_MISC_CTRL_N_VBUSEN_FUNC); AXP_MISC_CTRL_N_VBUSEN_FUNC);
if (ret) if (ret)
return ret; return ret;
...@@ -90,10 +91,11 @@ static int axp_gpio_get_value(struct udevice *dev, unsigned pin) ...@@ -90,10 +91,11 @@ static int axp_gpio_get_value(struct udevice *dev, unsigned pin)
mask = AXP_POWER_STATUS_VBUS_PRESENT; mask = AXP_POWER_STATUS_VBUS_PRESENT;
break; break;
#endif #endif
#ifdef CONFIG_AXP221_POWER /* Only available on axp221/axp223 */ #ifdef AXP_MISC_CTRL_N_VBUSEN_FUNC
/* Only available on later PMICs */
case SUNXI_GPIO_AXP0_VBUS_ENABLE: case SUNXI_GPIO_AXP0_VBUS_ENABLE:
ret = pmic_bus_read(AXP221_VBUS_IPSOUT, &val); ret = pmic_bus_read(AXP_VBUS_IPSOUT, &val);
mask = AXP221_VBUS_IPSOUT_DRIVEBUS; mask = AXP_VBUS_IPSOUT_DRIVEBUS;
break; break;
#endif #endif
default: default:
...@@ -115,14 +117,15 @@ static int axp_gpio_set_value(struct udevice *dev, unsigned pin, int val) ...@@ -115,14 +117,15 @@ static int axp_gpio_set_value(struct udevice *dev, unsigned pin, int val)
u8 reg; u8 reg;
switch (pin) { switch (pin) {
#ifdef CONFIG_AXP221_POWER /* Only available on axp221/axp223 */ #ifdef AXP_MISC_CTRL_N_VBUSEN_FUNC
/* Only available on later PMICs */
case SUNXI_GPIO_AXP0_VBUS_ENABLE: case SUNXI_GPIO_AXP0_VBUS_ENABLE:
if (val) if (val)
return pmic_bus_setbits(AXP221_VBUS_IPSOUT, return pmic_bus_setbits(AXP_VBUS_IPSOUT,
AXP221_VBUS_IPSOUT_DRIVEBUS); AXP_VBUS_IPSOUT_DRIVEBUS);
else else
return pmic_bus_clrbits(AXP221_VBUS_IPSOUT, return pmic_bus_clrbits(AXP_VBUS_IPSOUT,
AXP221_VBUS_IPSOUT_DRIVEBUS); AXP_VBUS_IPSOUT_DRIVEBUS);
#endif #endif
default: default:
reg = axp_get_gpio_ctrl_reg(pin); reg = axp_get_gpio_ctrl_reg(pin);
......
...@@ -43,12 +43,8 @@ ...@@ -43,12 +43,8 @@
#define AXP221_ALDO1_CTRL 0x28 #define AXP221_ALDO1_CTRL 0x28
#define AXP221_ALDO2_CTRL 0x29 #define AXP221_ALDO2_CTRL 0x29
#define AXP221_ALDO3_CTRL 0x2a #define AXP221_ALDO3_CTRL 0x2a
#define AXP221_VBUS_IPSOUT 0x30
#define AXP221_VBUS_IPSOUT_DRIVEBUS (1 << 2)
#define AXP221_SHUTDOWN 0x32 #define AXP221_SHUTDOWN 0x32
#define AXP221_SHUTDOWN_POWEROFF (1 << 7) #define AXP221_SHUTDOWN_POWEROFF (1 << 7)
#define AXP221_MISC_CTRL 0x8f
#define AXP221_MISC_CTRL_N_VBUSEN_FUNC (1 << 4)
#define AXP221_PAGE 0xff #define AXP221_PAGE 0xff
/* Page 1 addresses */ /* Page 1 addresses */
...@@ -57,6 +53,10 @@ ...@@ -57,6 +53,10 @@
/* For axp_gpio.c */ /* For axp_gpio.c */
#define AXP_POWER_STATUS 0x00 #define AXP_POWER_STATUS 0x00
#define AXP_POWER_STATUS_VBUS_PRESENT (1 << 5) #define AXP_POWER_STATUS_VBUS_PRESENT (1 << 5)
#define AXP_VBUS_IPSOUT 0x30
#define AXP_VBUS_IPSOUT_DRIVEBUS (1 << 2)
#define AXP_MISC_CTRL 0x8f
#define AXP_MISC_CTRL_N_VBUSEN_FUNC (1 << 4)
#define AXP_GPIO0_CTRL 0x90 #define AXP_GPIO0_CTRL 0x90
#define AXP_GPIO1_CTRL 0x92 #define AXP_GPIO1_CTRL 0x92
#define AXP_GPIO_CTRL_OUTPUT_LOW 0x00 /* Drive pin low */ #define AXP_GPIO_CTRL_OUTPUT_LOW 0x00 /* Drive pin low */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册