1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2017 Google, Inc
4 * Written by Simon Glass <sjg@chromium.org>
6 * Placeholder regulator driver for as3722.
12 #include <power/as3722.h>
13 #include <power/pmic.h>
14 #include <power/regulator.h>
16 static int stepdown_get_value(struct udevice
*dev
)
21 static int stepdown_set_value(struct udevice
*dev
, int uvolt
)
26 static int stepdown_set_enable(struct udevice
*dev
, bool enable
)
28 struct udevice
*pmic
= dev_get_parent(dev
);
29 int sd
= dev
->driver_data
;
32 ret
= pmic_clrsetbits(pmic
, AS3722_SD_CONTROL
, 0, 1 << sd
);
34 debug("%s: failed to write SD control register: %d", __func__
,
42 static int stepdown_get_enable(struct udevice
*dev
)
44 struct udevice
*pmic
= dev_get_parent(dev
);
45 int sd
= dev
->driver_data
;
48 ret
= pmic_reg_read(pmic
, AS3722_SD_CONTROL
);
50 debug("%s: failed to read SD control register: %d", __func__
,
55 return ret
& (1 << sd
) ? true : false;
58 static int ldo_get_value(struct udevice
*dev
)
63 static int ldo_set_value(struct udevice
*dev
, int uvolt
)
68 static int ldo_set_enable(struct udevice
*dev
, bool enable
)
70 struct udevice
*pmic
= dev_get_parent(dev
);
71 int ldo
= dev
->driver_data
;
74 ret
= pmic_clrsetbits(pmic
, AS3722_LDO_CONTROL
, 0, 1 << ldo
);
76 debug("%s: failed to write LDO control register: %d", __func__
,
84 static int ldo_get_enable(struct udevice
*dev
)
86 struct udevice
*pmic
= dev_get_parent(dev
);
87 int ldo
= dev
->driver_data
;
90 ret
= pmic_reg_read(pmic
, AS3722_LDO_CONTROL
);
92 debug("%s: failed to read SD control register: %d", __func__
,
97 return ret
& (1 << ldo
) ? true : false;
100 static int as3722_stepdown_probe(struct udevice
*dev
)
102 struct dm_regulator_uclass_platdata
*uc_pdata
;
104 uc_pdata
= dev_get_uclass_platdata(dev
);
106 uc_pdata
->type
= REGULATOR_TYPE_BUCK
;
111 static int as3722_ldo_probe(struct udevice
*dev
)
113 struct dm_regulator_uclass_platdata
*uc_pdata
;
115 uc_pdata
= dev_get_uclass_platdata(dev
);
117 uc_pdata
->type
= REGULATOR_TYPE_LDO
;
122 static const struct dm_regulator_ops as3722_stepdown_ops
= {
123 .get_value
= stepdown_get_value
,
124 .set_value
= stepdown_set_value
,
125 .get_enable
= stepdown_get_enable
,
126 .set_enable
= stepdown_set_enable
,
129 static const struct dm_regulator_ops as3722_ldo_ops
= {
130 .get_value
= ldo_get_value
,
131 .set_value
= ldo_set_value
,
132 .get_enable
= ldo_get_enable
,
133 .set_enable
= ldo_set_enable
,
136 U_BOOT_DRIVER(as3722_stepdown
) = {
137 .name
= "as3722_stepdown",
138 .id
= UCLASS_REGULATOR
,
139 .ops
= &as3722_stepdown_ops
,
140 .probe
= as3722_stepdown_probe
,
143 U_BOOT_DRIVER(as3722_ldo
) = {
144 .name
= "as3722_ldo",
145 .id
= UCLASS_REGULATOR
,
146 .ops
= &as3722_ldo_ops
,
147 .probe
= as3722_ldo_probe
,