gpio: axp: Use DM_PMIC functions for register access

Now that the PMIC driver implements the DM_PMIC uclass, those functions
can be used instead of the platform-specific "pmic_bus" functions.

Since the driver still uses the single set of register definitions from
axpXXX.h (as selected by AXPxxx_POWER), it still depends on one of those
choices, and therefore also AXP_PMIC_BUS.

Signed-off-by: Samuel Holland <samuel@sholland.org>
This commit is contained in:
Samuel Holland 2021-08-17 20:01:55 -05:00
parent 6e46bf87dd
commit 05552f2ef0

View File

@ -6,11 +6,11 @@
*/ */
#include <common.h> #include <common.h>
#include <asm/arch/pmic_bus.h>
#include <asm/gpio.h> #include <asm/gpio.h>
#include <axp_pmic.h> #include <axp_pmic.h>
#include <dm.h> #include <dm.h>
#include <errno.h> #include <errno.h>
#include <power/pmic.h>
#define AXP_GPIO_PREFIX "AXP0-" #define AXP_GPIO_PREFIX "AXP0-"
#define AXP_GPIO_COUNT 4 #define AXP_GPIO_COUNT 4
@ -40,7 +40,7 @@ static int axp_gpio_direction_input(struct udevice *dev, unsigned pin)
if (reg == 0) if (reg == 0)
return -EINVAL; return -EINVAL;
return pmic_bus_write(reg, AXP_GPIO_CTRL_INPUT); return pmic_reg_write(dev->parent, reg, AXP_GPIO_CTRL_INPUT);
} }
static int axp_gpio_direction_output(struct udevice *dev, unsigned pin, static int axp_gpio_direction_output(struct udevice *dev, unsigned pin,
@ -52,26 +52,27 @@ static int axp_gpio_direction_output(struct udevice *dev, unsigned pin,
if (reg == 0) if (reg == 0)
return -EINVAL; return -EINVAL;
return pmic_bus_write(reg, val ? AXP_GPIO_CTRL_OUTPUT_HIGH : return pmic_reg_write(dev->parent, reg,
AXP_GPIO_CTRL_OUTPUT_LOW); val ? AXP_GPIO_CTRL_OUTPUT_HIGH :
AXP_GPIO_CTRL_OUTPUT_LOW);
} }
static int axp_gpio_get_value(struct udevice *dev, unsigned pin) static int axp_gpio_get_value(struct udevice *dev, unsigned pin)
{ {
u8 reg, val, mask; u8 reg, mask;
int ret; int ret;
reg = axp_get_gpio_ctrl_reg(pin); reg = axp_get_gpio_ctrl_reg(pin);
if (reg == 0) if (reg == 0)
return -EINVAL; return -EINVAL;
ret = pmic_bus_read(AXP_GPIO_STATE, &val); ret = pmic_reg_read(dev->parent, AXP_GPIO_STATE);
if (ret) if (ret < 0)
return ret; return ret;
mask = 1 << (pin + AXP_GPIO_STATE_OFFSET); mask = 1 << (pin + AXP_GPIO_STATE_OFFSET);
return (val & mask) ? 1 : 0; return (ret & mask) ? 1 : 0;
} }
static int axp_gpio_set_value(struct udevice *dev, unsigned pin, int val) static int axp_gpio_set_value(struct udevice *dev, unsigned pin, int val)
@ -82,8 +83,9 @@ static int axp_gpio_set_value(struct udevice *dev, unsigned pin, int val)
if (reg == 0) if (reg == 0)
return -EINVAL; return -EINVAL;
return pmic_bus_write(reg, val ? AXP_GPIO_CTRL_OUTPUT_HIGH : return pmic_reg_write(dev->parent, reg,
AXP_GPIO_CTRL_OUTPUT_LOW); val ? AXP_GPIO_CTRL_OUTPUT_HIGH :
AXP_GPIO_CTRL_OUTPUT_LOW);
} }
static const struct dm_gpio_ops axp_gpio_ops = { static const struct dm_gpio_ops axp_gpio_ops = {
@ -96,11 +98,6 @@ static const struct dm_gpio_ops axp_gpio_ops = {
static int axp_gpio_probe(struct udevice *dev) static int axp_gpio_probe(struct udevice *dev)
{ {
struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev); struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
int ret;
ret = pmic_bus_init();
if (ret)
return ret;
/* Tell the uclass how many GPIOs we have */ /* Tell the uclass how many GPIOs we have */
uc_priv->bank_name = AXP_GPIO_PREFIX; uc_priv->bank_name = AXP_GPIO_PREFIX;