From c8d15c437519477dbcc2c5e909619aed3ae9df30 Mon Sep 17 00:00:00 2001 From: Joseph Chen Date: Mon, 30 Oct 2017 11:13:46 +0800 Subject: [PATCH] dm: pmic: add pmic_shutdown() interface Change-Id: I9bed8de6d3733ab90175f26f68160ddd8f12e295 Signed-off-by: Joseph Chen --- drivers/power/pmic/pmic-uclass.c | 11 +++++++++++ include/power/pmic.h | 9 +++++++++ 2 files changed, 20 insertions(+) diff --git a/drivers/power/pmic/pmic-uclass.c b/drivers/power/pmic/pmic-uclass.c index 953bbe5026..9b8d8571e2 100644 --- a/drivers/power/pmic/pmic-uclass.c +++ b/drivers/power/pmic/pmic-uclass.c @@ -163,6 +163,17 @@ int pmic_clrsetbits(struct udevice *dev, uint reg, uint clr, uint set) return pmic_reg_write(dev, reg, byte); } + +int pmic_shutdown(struct udevice *dev) +{ + const struct dm_pmic_ops *ops = dev_get_driver_ops(dev); + + if (!ops || !ops->shutdown) + return -ENOSYS; + + return ops->shutdown(dev); +} + UCLASS_DRIVER(pmic) = { .id = UCLASS_PMIC, .name = "pmic", diff --git a/include/power/pmic.h b/include/power/pmic.h index 4b34316427..980fd3e67d 100644 --- a/include/power/pmic.h +++ b/include/power/pmic.h @@ -164,6 +164,7 @@ struct dm_pmic_ops { int (*read)(struct udevice *dev, uint reg, uint8_t *buffer, int len); int (*write)(struct udevice *dev, uint reg, const uint8_t *buffer, int len); + int (*shutdown)(struct udevice *dev); }; /** @@ -297,6 +298,14 @@ int pmic_reg_write(struct udevice *dev, uint reg, uint value); */ int pmic_clrsetbits(struct udevice *dev, uint reg, uint clr, uint set); +/** + * pmic_shutdown() - power off supplies of PMIC + * + * @dev: PMIC device to update + * @return 0 on success or negative value of errno. + */ +int pmic_shutdown(struct udevice *dev); + #endif /* CONFIG_DM_PMIC */ #ifdef CONFIG_POWER