Commit 5fd6badb authored by Simon Glass's avatar Simon Glass

dm: Add a power sequencing uclass

Some devices need special sequences to be used when starting up. Add a
uclass for this. Drivers can be added to provide specific features as
needed.
Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
parent e1227764
......@@ -90,6 +90,24 @@ config MXC_OCOTP
Programmable memory pages that are stored on the some
Freescale i.MX processors.
config PWRSEQ
bool "Enable power-sequencing drivers"
depends on DM
help
Power-sequencing drivers provide support for controlling power for
devices. They are typically referenced by a phandle from another
device. When the device is started up, its power sequence can be
initiated.
config SPL_PWRSEQ
bool "Enable power-sequencing drivers for SPL"
depends on PWRSEQ
help
Power-sequencing drivers provide support for controlling power for
devices. They are typically referenced by a phandle from another
device. When the device is started up, its power sequence can be
initiated.
config PCA9551_LED
bool "Enable PCA9551 LED driver"
help
......
......@@ -24,6 +24,7 @@ obj-$(CONFIG_MXC_OCOTP) += mxc_ocotp.o
obj-$(CONFIG_MXS_OCOTP) += mxs_ocotp.o
obj-$(CONFIG_NS87308) += ns87308.o
obj-$(CONFIG_PDSP188x) += pdsp188x.o
obj-$(CONFIG_$(SPL_)PWRSEQ) += pwrseq-uclass.o
obj-$(CONFIG_SANDBOX) += reset_sandbox.o
ifdef CONFIG_DM_I2C
obj-$(CONFIG_SANDBOX) += i2c_eeprom_emul.o
......
/*
* Copyright (c) 2015 Google, Inc
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <dm.h>
#include <pwrseq.h>
int pwrseq_set_power(struct udevice *dev, bool enable)
{
struct pwrseq_ops *ops = pwrseq_get_ops(dev);
if (!ops->set_power)
return -ENOSYS;
return ops->set_power(dev, enable);
}
UCLASS_DRIVER(pwrseq) = {
.id = UCLASS_PWRSEQ,
.name = "pwrseq",
};
......@@ -51,6 +51,7 @@ enum uclass_id {
UCLASS_PINCTRL, /* Pinctrl (pin muxing/configuration) device */
UCLASS_PINCONFIG, /* Pin configuration node device */
UCLASS_PMIC, /* PMIC I/O device */
UCLASS_PWRSEQ, /* Power sequence device */
UCLASS_REGULATOR, /* Regulator device */
UCLASS_RESET, /* Reset device */
UCLASS_REMOTEPROC, /* Remote Processor device */
......
/*
* Copyright (c) 2013 Google, Inc
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef __pwrseq_h
#define __pwrseq_h
struct pwrseq_ops {
int (*set_power)(struct udevice *dev, bool enable);
};
#define pwrseq_get_ops(dev) ((struct pwrseq_ops *)(dev)->driver->ops)
int pwrseq_set_power(struct udevice *dev, bool enable);
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment