1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/slab.h>
3 #include <linux/string.h>
4 #include <linux/platform_device.h>
5 #include <linux/regulator/machine.h>
6 #include <linux/regulator/fixed.h>
8 struct fixed_regulator_data
{
9 struct fixed_voltage_config cfg
;
10 struct regulator_init_data init_data
;
11 struct platform_device pdev
;
14 static void regulator_fixed_release(struct device
*dev
)
16 struct fixed_regulator_data
*data
= container_of(dev
,
17 struct fixed_regulator_data
, pdev
.dev
);
18 kfree(data
->cfg
.supply_name
);
23 * regulator_register_fixed_name - register a no-op fixed regulator
24 * @id: platform device id
25 * @name: name to be used for the regulator
26 * @supplies: consumers for this regulator
27 * @num_supplies: number of consumers
28 * @uv: voltage in microvolts
30 struct platform_device
*regulator_register_always_on(int id
, const char *name
,
31 struct regulator_consumer_supply
*supplies
, int num_supplies
, int uv
)
33 struct fixed_regulator_data
*data
;
35 data
= kzalloc(sizeof(*data
), GFP_KERNEL
);
39 data
->cfg
.supply_name
= kstrdup(name
, GFP_KERNEL
);
40 if (!data
->cfg
.supply_name
) {
45 data
->cfg
.microvolts
= uv
;
46 data
->cfg
.gpio
= -EINVAL
;
47 data
->cfg
.enabled_at_boot
= 1;
48 data
->cfg
.init_data
= &data
->init_data
;
50 data
->init_data
.constraints
.always_on
= 1;
51 data
->init_data
.consumer_supplies
= supplies
;
52 data
->init_data
.num_consumer_supplies
= num_supplies
;
54 data
->pdev
.name
= "reg-fixed-voltage";
56 data
->pdev
.dev
.platform_data
= &data
->cfg
;
57 data
->pdev
.dev
.release
= regulator_fixed_release
;
59 platform_device_register(&data
->pdev
);