About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / power / regulator / machine.txt




Custom Search

Based on kernel version 3.13. Page generated on 2014-01-20 22:04 EST.

1	Regulator Machine Driver Interface
2	===================================
3	
4	The regulator machine driver interface is intended for board/machine specific
5	initialisation code to configure the regulator subsystem.
6	
7	Consider the following machine :-
8	
9	  Regulator-1 -+-> Regulator-2 --> [Consumer A @ 1.8 - 2.0V]
10	               |
11	               +-> [Consumer B @ 3.3V]
12	
13	The drivers for consumers A & B must be mapped to the correct regulator in
14	order to control their power supply. This mapping can be achieved in machine
15	initialisation code by creating a struct regulator_consumer_supply for
16	each regulator.
17	
18	struct regulator_consumer_supply {
19		const char *dev_name;	/* consumer dev_name() */
20		const char *supply;	/* consumer supply - e.g. "vcc" */
21	};
22	
23	e.g. for the machine above
24	
25	static struct regulator_consumer_supply regulator1_consumers[] = {
26	{
27		.dev_name	= "dev_name(consumer B)",
28		.supply		= "Vcc",
29	},};
30	
31	static struct regulator_consumer_supply regulator2_consumers[] = {
32	{
33		.dev	= "dev_name(consumer A"),
34		.supply	= "Vcc",
35	},};
36	
37	This maps Regulator-1 to the 'Vcc' supply for Consumer B and maps Regulator-2
38	to the 'Vcc' supply for Consumer A.
39	
40	Constraints can now be registered by defining a struct regulator_init_data
41	for each regulator power domain. This structure also maps the consumers
42	to their supply regulator :-
43	
44	static struct regulator_init_data regulator1_data = {
45		.constraints = {
46			.name = "Regulator-1",
47			.min_uV = 3300000,
48			.max_uV = 3300000,
49			.valid_modes_mask = REGULATOR_MODE_NORMAL,
50		},
51		.num_consumer_supplies = ARRAY_SIZE(regulator1_consumers),
52		.consumer_supplies = regulator1_consumers,
53	};
54	
55	The name field should be set to something that is usefully descriptive
56	for the board for configuration of supplies for other regulators and
57	for use in logging and other diagnostic output.  Normally the name
58	used for the supply rail in the schematic is a good choice.  If no
59	name is provided then the subsystem will choose one.
60	
61	Regulator-1 supplies power to Regulator-2. This relationship must be registered
62	with the core so that Regulator-1 is also enabled when Consumer A enables its
63	supply (Regulator-2). The supply regulator is set by the supply_regulator
64	field below and co:-
65	
66	static struct regulator_init_data regulator2_data = {
67		.supply_regulator = "Regulator-1",
68		.constraints = {
69			.min_uV = 1800000,
70			.max_uV = 2000000,
71			.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
72			.valid_modes_mask = REGULATOR_MODE_NORMAL,
73		},
74		.num_consumer_supplies = ARRAY_SIZE(regulator2_consumers),
75		.consumer_supplies = regulator2_consumers,
76	};
77	
78	Finally the regulator devices must be registered in the usual manner.
79	
80	static struct platform_device regulator_devices[] = {
81	{
82		.name = "regulator",
83		.id = DCDC_1,
84		.dev = {
85			.platform_data = &regulator1_data,
86		},
87	},
88	{
89		.name = "regulator",
90		.id = DCDC_2,
91		.dev = {
92			.platform_data = &regulator2_data,
93		},
94	},
95	};
96	/* register regulator 1 device */
97	platform_device_register(&regulator_devices[0]);
98	
99	/* register regulator 2 device */
100	platform_device_register(&regulator_devices[1]);
Hide Line Numbers
About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Information is copyright its respective author. All material is available from the Linux Kernel Source distributed under a GPL License. This page is provided as a free service by mjmwired.net.