svn commit: r356799 - head/sys/arm/allwinner
Emmanuel Vadot
manu at FreeBSD.org
Thu Jan 16 19:59:00 UTC 2020
Author: manu
Date: Thu Jan 16 19:59:00 2020
New Revision: 356799
URL: https://svnweb.freebsd.org/changeset/base/356799
Log:
axp8xx: Add a regnode_init method
This method will set the desired voltaged based on values in the DTS.
It will not enable the regulator, this is the job of either a consumer
or regnode_set_constraint SYSINIT if the regulator is boot_on or always_on.
MFC after: 2 weeks
Modified:
head/sys/arm/allwinner/axp81x.c
Modified: head/sys/arm/allwinner/axp81x.c
==============================================================================
--- head/sys/arm/allwinner/axp81x.c Thu Jan 16 19:57:38 2020 (r356798)
+++ head/sys/arm/allwinner/axp81x.c Thu Jan 16 19:59:00 2020 (r356799)
@@ -710,6 +710,8 @@ struct axp8xx_softc {
#define AXP_LOCK(sc) mtx_lock(&(sc)->mtx)
#define AXP_UNLOCK(sc) mtx_unlock(&(sc)->mtx)
+static int axp8xx_regnode_set_voltage(struct regnode *regnode, int min_uvolt,
+ int max_uvolt, int *udelay);
static int
axp8xx_read(device_t dev, uint8_t reg, uint8_t *data, uint8_t size)
@@ -754,6 +756,31 @@ axp8xx_write(device_t dev, uint8_t reg, uint8_t val)
}
static int
+axp8xx_regnode_init(struct regnode *regnode)
+{
+ struct axp8xx_reg_sc *sc;
+ struct regnode_std_param *param;
+ int rv, udelay;
+
+ sc = regnode_get_softc(regnode);
+ param = regnode_get_stdparam(regnode);
+ if (param->min_uvolt == 0)
+ return (0);
+
+ /*
+ * Set the regulator at the correct voltage
+ * Do not enable it, this is will be done either by a
+ * consumer or by regnode_set_constraint if boot_on is true
+ */
+ rv = axp8xx_regnode_set_voltage(regnode, param->min_uvolt,
+ param->max_uvolt, &udelay);
+ if (rv != 0)
+ DELAY(udelay);
+
+ return (rv);
+}
+
+static int
axp8xx_regnode_enable(struct regnode *regnode, bool enable, int *udelay)
{
struct axp8xx_reg_sc *sc;
@@ -870,6 +897,7 @@ axp8xx_regnode_get_voltage(struct regnode *regnode, in
static regnode_method_t axp8xx_regnode_methods[] = {
/* Regulator interface */
+ REGNODEMETHOD(regnode_init, axp8xx_regnode_init),
REGNODEMETHOD(regnode_enable, axp8xx_regnode_enable),
REGNODEMETHOD(regnode_set_voltage, axp8xx_regnode_set_voltage),
REGNODEMETHOD(regnode_get_voltage, axp8xx_regnode_get_voltage),
More information about the svn-src-all
mailing list