blob: 4daf4eab55d3d3f23f578e966ab8671f7b3be5cc [file] [log] [blame]
Xipeng Gu5affb812019-06-18 14:59:17 +08001/* Copyright (c) 2015, 2018-2019, The Linux Foundation. All rights reserved.
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +05302 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the distribution.
12 * * Neither the name of The Linux Fundation, Inc. nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30#include <regulator.h>
31#include <rpm-smd.h>
Casey Piperd2af07b2015-04-01 18:01:58 -070032#include <bits.h>
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +053033#include <debug.h>
Unnati Gandhi46edd9d2015-05-29 14:10:03 +053034#include <platform.h>
Xipeng Gu5affb812019-06-18 14:59:17 +080035#include <board.h>
Unnati Gandhi46edd9d2015-05-29 14:10:03 +053036
37
38static uint32_t ldo1[][11]=
39{
40 {
41 LDOA_RES_TYPE, 1,
42 KEY_SOFTWARE_ENABLE, 4, GENERIC_DISABLE,
43 KEY_MICRO_VOLT, 4, 0,
44 KEY_CURRENT, 4, 0,
45 },
46
47 {
48 LDOA_RES_TYPE, 1,
49 KEY_SOFTWARE_ENABLE, 4, GENERIC_ENABLE,
50 KEY_MICRO_VOLT, 4, 1200000,
51 KEY_CURRENT, 4, 40,
52 },
53};
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +053054
55static uint32_t ldo2[][11]=
56{
57 {
58 LDOA_RES_TYPE, 2,
59 KEY_SOFTWARE_ENABLE, 4, GENERIC_DISABLE,
60 KEY_MICRO_VOLT, 4, 0,
61 KEY_CURRENT, 4, 0,
62 },
63
64 {
65 LDOA_RES_TYPE, 2,
66 KEY_SOFTWARE_ENABLE, 4, GENERIC_ENABLE,
67 KEY_MICRO_VOLT, 4, 1200000,
68 KEY_CURRENT, 4, 40,
69 },
70};
71
Padmanabhan Komanduru2ab03a62018-05-17 14:38:59 +053072static uint32_t ldo5[][11] = {
73 {
74 LDOA_RES_TYPE, 5,
75 KEY_SOFTWARE_ENABLE, 4, GENERIC_DISABLE,
76 KEY_MICRO_VOLT, 4, 0,
77 KEY_CURRENT, 4, 0,
78 },
79
80 {
81 LDOA_RES_TYPE, 5,
82 KEY_SOFTWARE_ENABLE, 4, GENERIC_ENABLE,
83 KEY_MICRO_VOLT, 4, 1800000,
84 KEY_CURRENT, 4, 150,
85 },
86};
87
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +053088static uint32_t ldo6[][11]=
89{
90 {
91 LDOA_RES_TYPE, 6,
92 KEY_SOFTWARE_ENABLE, 4, GENERIC_DISABLE,
93 KEY_MICRO_VOLT, 4, 0,
94 KEY_CURRENT, 4, 0,
95 },
96
97 {
98 LDOA_RES_TYPE, 6,
99 KEY_SOFTWARE_ENABLE, 4, GENERIC_ENABLE,
100 KEY_MICRO_VOLT, 4, 1800000,
101 KEY_CURRENT, 4, 150,
102 },
103};
104
Xipeng Gu5affb812019-06-18 14:59:17 +0800105static uint32_t ldo6_pm660[][11]=
106{
107 {
108 LDOA_RES_TYPE, 6,
109 KEY_SOFTWARE_ENABLE, 4, GENERIC_DISABLE,
110 KEY_MICRO_VOLT, 4, 0,
111 KEY_CURRENT, 4, 0,
112 },
113
114 {
115 LDOA_RES_TYPE, 6,
116 KEY_SOFTWARE_ENABLE, 4, GENERIC_ENABLE,
117 KEY_MICRO_VOLT, 4, 800000,
118 KEY_CURRENT, 4, 150,
119 },
120};
121
122static uint32_t ldo13_pm660[][11]=
123{
124 {
125 LDOA_RES_TYPE, 13,
126 KEY_SOFTWARE_ENABLE, 4, GENERIC_DISABLE,
127 KEY_MICRO_VOLT, 4, 0,
128 KEY_CURRENT, 4, 0,
129 },
130
131 {
132 LDOA_RES_TYPE, 13,
133 KEY_SOFTWARE_ENABLE, 4, GENERIC_ENABLE,
134 KEY_MICRO_VOLT, 4, 1800000,
135 KEY_CURRENT, 4, 40,
136 },
137};
138
139static uint32_t ldo15_pm660[][11]=
140{
141 {
142 LDOA_RES_TYPE, 15,
143 KEY_SOFTWARE_ENABLE, 4, GENERIC_DISABLE,
144 KEY_MICRO_VOLT, 4, 0,
145 KEY_CURRENT, 4, 0,
146 },
147
148 {
149 LDOA_RES_TYPE, 15,
150 KEY_SOFTWARE_ENABLE, 4, GENERIC_ENABLE,
151 KEY_MICRO_VOLT, 4, 2800000,
152 KEY_CURRENT, 4, 40,
153 },
154};
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +0530155
156static uint32_t ldo17[][11]=
157{
158 {
159 LDOA_RES_TYPE, 17,
160 KEY_SOFTWARE_ENABLE, 4, GENERIC_DISABLE,
161 KEY_MICRO_VOLT, 4, 0,
162 KEY_CURRENT, 4, 0,
163 },
164
165 {
166 LDOA_RES_TYPE, 17,
167 KEY_SOFTWARE_ENABLE, 4, GENERIC_ENABLE,
168 KEY_MICRO_VOLT, 4, 2850000,
169 KEY_CURRENT, 4, 40,
170 },
171};
172
Casey Piperd2af07b2015-04-01 18:01:58 -0700173void regulator_enable(uint32_t enable)
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +0530174{
Xipeng Gu5affb812019-06-18 14:59:17 +0800175 uint32_t hw_subtype = board_hardware_subtype();
176
Padmanabhan Komanduru2ab03a62018-05-17 14:38:59 +0530177 if (platform_is_msm8956()) {
Unnati Gandhi46edd9d2015-05-29 14:10:03 +0530178 if (enable & REG_LDO1)
179 rpm_send_data(&ldo1[GENERIC_ENABLE][0], 36, RPM_REQUEST_TYPE);
180
Meng Jiang289a9812019-10-23 15:25:26 +0800181 } else if (platform_is_sdm439() || platform_is_sdm429() || platform_is_sdm429w() || platform_is_sda429w()) {
Padmanabhan Komanduru2ab03a62018-05-17 14:38:59 +0530182 if (enable & REG_LDO5)
183 rpm_send_data(&ldo5[GENERIC_ENABLE][0],
184 36, RPM_REQUEST_TYPE);
185 } else {
Unnati Gandhi46edd9d2015-05-29 14:10:03 +0530186 if (enable & REG_LDO2)
187 rpm_send_data(&ldo2[GENERIC_ENABLE][0], 36, RPM_REQUEST_TYPE);
188 }
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +0530189
Meng Jiang289a9812019-10-23 15:25:26 +0800190 if ((platform_is_sdm429() && (board_hardware_subtype() == HW_PLATFORM_SUBTYPE_429W_PM660)) || platform_is_sdm429w() || platform_is_sda429w()) {
Xipeng Gu5affb812019-06-18 14:59:17 +0800191 if (enable & REG_LDO13)
192 rpm_send_data(&ldo13_pm660[GENERIC_ENABLE][0],
193 36, RPM_REQUEST_TYPE);
194 if (enable & REG_LDO15)
195 rpm_send_data(&ldo15_pm660[GENERIC_ENABLE][0],
196 36, RPM_REQUEST_TYPE);
197 }
198
Casey Piperd2af07b2015-04-01 18:01:58 -0700199 if (enable & REG_LDO17)
200 rpm_send_data(&ldo17[GENERIC_ENABLE][0], 36, RPM_REQUEST_TYPE);
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +0530201
Xipeng Gu5affb812019-06-18 14:59:17 +0800202 if (enable & REG_LDO6) {
Meng Jiang289a9812019-10-23 15:25:26 +0800203 if ((platform_is_sdm429() || platform_is_sdm429w() || platform_is_sda429w()) && hw_subtype
Xipeng Gu5affb812019-06-18 14:59:17 +0800204 == HW_PLATFORM_SUBTYPE_429W_PM660)
205 rpm_send_data(&ldo6_pm660[GENERIC_ENABLE][0], 36, RPM_REQUEST_TYPE);
206 else
207 rpm_send_data(&ldo6[GENERIC_ENABLE][0], 36, RPM_REQUEST_TYPE);
208 }
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +0530209}
210
Casey Piperd2af07b2015-04-01 18:01:58 -0700211void regulator_disable(uint32_t enable)
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +0530212{
Padmanabhan Komanduru2ab03a62018-05-17 14:38:59 +0530213 if (platform_is_msm8956()) {
Unnati Gandhi46edd9d2015-05-29 14:10:03 +0530214 if (enable & REG_LDO1)
215 rpm_send_data(&ldo1[GENERIC_DISABLE][0], 36, RPM_REQUEST_TYPE);
216
Meng Jiang289a9812019-10-23 15:25:26 +0800217 } else if (platform_is_sdm439() || platform_is_sdm429() || platform_is_sdm429w() || platform_is_sda429w()) {
Padmanabhan Komanduru2ab03a62018-05-17 14:38:59 +0530218 if (enable & REG_LDO5)
219 rpm_send_data(&ldo5[GENERIC_DISABLE][0],
220 36, RPM_REQUEST_TYPE);
221 } else {
Unnati Gandhi46edd9d2015-05-29 14:10:03 +0530222 if (enable & REG_LDO2)
223 rpm_send_data(&ldo2[GENERIC_DISABLE][0], 36, RPM_REQUEST_TYPE);
224 }
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +0530225
Padmanabhan Komanduru7cd26232015-04-16 10:43:29 -0700226 if (enable & REG_LDO17)
Casey Piperd2af07b2015-04-01 18:01:58 -0700227 rpm_send_data(&ldo17[GENERIC_DISABLE][0], 36, RPM_REQUEST_TYPE);
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +0530228
Padmanabhan Komanduru7cd26232015-04-16 10:43:29 -0700229 if (enable & REG_LDO6)
Casey Piperd2af07b2015-04-01 18:01:58 -0700230 rpm_send_data(&ldo6[GENERIC_DISABLE][0], 36, RPM_REQUEST_TYPE);
Aparna Mallavarapufa5f8a72015-03-31 06:21:36 +0530231}