mirror of
https://github.com/smaeul/u-boot.git
synced 2025-10-14 12:56:00 +01:00
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:
parent
6e46bf87dd
commit
05552f2ef0
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user