forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/thermal/qcom/tsens-8960.c
....@@ -1,15 +1,6 @@
1
+// SPDX-License-Identifier: GPL-2.0
12 /*
23 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
3
- *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License version 2 and
6
- * only version 2 as published by the Free Software Foundation.
7
- *
8
- * This program is distributed in the hope that it will be useful,
9
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- * GNU General Public License for more details.
12
- *
134 */
145
156 #include <linux/platform_device.h>
....@@ -65,21 +56,21 @@
6556 #define TRDY_MASK BIT(7)
6657 #define TIMEOUT_US 100
6758
68
-static int suspend_8960(struct tsens_device *tmdev)
59
+static int suspend_8960(struct tsens_priv *priv)
6960 {
7061 int ret;
7162 unsigned int mask;
72
- struct regmap *map = tmdev->map;
63
+ struct regmap *map = priv->tm_map;
7364
74
- ret = regmap_read(map, THRESHOLD_ADDR, &tmdev->ctx.threshold);
65
+ ret = regmap_read(map, THRESHOLD_ADDR, &priv->ctx.threshold);
7566 if (ret)
7667 return ret;
7768
78
- ret = regmap_read(map, CNTL_ADDR, &tmdev->ctx.control);
69
+ ret = regmap_read(map, CNTL_ADDR, &priv->ctx.control);
7970 if (ret)
8071 return ret;
8172
82
- if (tmdev->num_sensors > 1)
73
+ if (priv->num_sensors > 1)
8374 mask = SLP_CLK_ENA | EN;
8475 else
8576 mask = SLP_CLK_ENA_8660 | EN;
....@@ -91,10 +82,10 @@
9182 return 0;
9283 }
9384
94
-static int resume_8960(struct tsens_device *tmdev)
85
+static int resume_8960(struct tsens_priv *priv)
9586 {
9687 int ret;
97
- struct regmap *map = tmdev->map;
88
+ struct regmap *map = priv->tm_map;
9889
9990 ret = regmap_update_bits(map, CNTL_ADDR, SW_RST, SW_RST);
10091 if (ret)
....@@ -104,80 +95,80 @@
10495 * Separate CONFIG restore is not needed only for 8660 as
10596 * config is part of CTRL Addr and its restored as such
10697 */
107
- if (tmdev->num_sensors > 1) {
98
+ if (priv->num_sensors > 1) {
10899 ret = regmap_update_bits(map, CONFIG_ADDR, CONFIG_MASK, CONFIG);
109100 if (ret)
110101 return ret;
111102 }
112103
113
- ret = regmap_write(map, THRESHOLD_ADDR, tmdev->ctx.threshold);
104
+ ret = regmap_write(map, THRESHOLD_ADDR, priv->ctx.threshold);
114105 if (ret)
115106 return ret;
116107
117
- ret = regmap_write(map, CNTL_ADDR, tmdev->ctx.control);
108
+ ret = regmap_write(map, CNTL_ADDR, priv->ctx.control);
118109 if (ret)
119110 return ret;
120111
121112 return 0;
122113 }
123114
124
-static int enable_8960(struct tsens_device *tmdev, int id)
115
+static int enable_8960(struct tsens_priv *priv, int id)
125116 {
126117 int ret;
127118 u32 reg, mask;
128119
129
- ret = regmap_read(tmdev->map, CNTL_ADDR, &reg);
120
+ ret = regmap_read(priv->tm_map, CNTL_ADDR, &reg);
130121 if (ret)
131122 return ret;
132123
133124 mask = BIT(id + SENSOR0_SHIFT);
134
- ret = regmap_write(tmdev->map, CNTL_ADDR, reg | SW_RST);
125
+ ret = regmap_write(priv->tm_map, CNTL_ADDR, reg | SW_RST);
135126 if (ret)
136127 return ret;
137128
138
- if (tmdev->num_sensors > 1)
129
+ if (priv->num_sensors > 1)
139130 reg |= mask | SLP_CLK_ENA | EN;
140131 else
141132 reg |= mask | SLP_CLK_ENA_8660 | EN;
142133
143
- ret = regmap_write(tmdev->map, CNTL_ADDR, reg);
134
+ ret = regmap_write(priv->tm_map, CNTL_ADDR, reg);
144135 if (ret)
145136 return ret;
146137
147138 return 0;
148139 }
149140
150
-static void disable_8960(struct tsens_device *tmdev)
141
+static void disable_8960(struct tsens_priv *priv)
151142 {
152143 int ret;
153144 u32 reg_cntl;
154145 u32 mask;
155146
156
- mask = GENMASK(tmdev->num_sensors - 1, 0);
147
+ mask = GENMASK(priv->num_sensors - 1, 0);
157148 mask <<= SENSOR0_SHIFT;
158149 mask |= EN;
159150
160
- ret = regmap_read(tmdev->map, CNTL_ADDR, &reg_cntl);
151
+ ret = regmap_read(priv->tm_map, CNTL_ADDR, &reg_cntl);
161152 if (ret)
162153 return;
163154
164155 reg_cntl &= ~mask;
165156
166
- if (tmdev->num_sensors > 1)
157
+ if (priv->num_sensors > 1)
167158 reg_cntl &= ~SLP_CLK_ENA;
168159 else
169160 reg_cntl &= ~SLP_CLK_ENA_8660;
170161
171
- regmap_write(tmdev->map, CNTL_ADDR, reg_cntl);
162
+ regmap_write(priv->tm_map, CNTL_ADDR, reg_cntl);
172163 }
173164
174
-static int init_8960(struct tsens_device *tmdev)
165
+static int init_8960(struct tsens_priv *priv)
175166 {
176167 int ret, i;
177168 u32 reg_cntl;
178169
179
- tmdev->map = dev_get_regmap(tmdev->dev, NULL);
180
- if (!tmdev->map)
170
+ priv->tm_map = dev_get_regmap(priv->dev, NULL);
171
+ if (!priv->tm_map)
181172 return -ENODEV;
182173
183174 /*
....@@ -186,21 +177,21 @@
186177 * but the control registers stay in the same place, i.e
187178 * directly after the first 5 status registers.
188179 */
189
- for (i = 0; i < tmdev->num_sensors; i++) {
180
+ for (i = 0; i < priv->num_sensors; i++) {
190181 if (i >= 5)
191
- tmdev->sensor[i].status = S0_STATUS_ADDR + 40;
192
- tmdev->sensor[i].status += i * 4;
182
+ priv->sensor[i].status = S0_STATUS_ADDR + 40;
183
+ priv->sensor[i].status += i * 4;
193184 }
194185
195186 reg_cntl = SW_RST;
196
- ret = regmap_update_bits(tmdev->map, CNTL_ADDR, SW_RST, reg_cntl);
187
+ ret = regmap_update_bits(priv->tm_map, CNTL_ADDR, SW_RST, reg_cntl);
197188 if (ret)
198189 return ret;
199190
200
- if (tmdev->num_sensors > 1) {
191
+ if (priv->num_sensors > 1) {
201192 reg_cntl |= SLP_CLK_ENA | (MEASURE_PERIOD << 18);
202193 reg_cntl &= ~SW_RST;
203
- ret = regmap_update_bits(tmdev->map, CONFIG_ADDR,
194
+ ret = regmap_update_bits(priv->tm_map, CONFIG_ADDR,
204195 CONFIG_MASK, CONFIG);
205196 } else {
206197 reg_cntl |= SLP_CLK_ENA_8660 | (MEASURE_PERIOD << 16);
....@@ -208,35 +199,37 @@
208199 reg_cntl |= CONFIG_8660 << CONFIG_SHIFT_8660;
209200 }
210201
211
- reg_cntl |= GENMASK(tmdev->num_sensors - 1, 0) << SENSOR0_SHIFT;
212
- ret = regmap_write(tmdev->map, CNTL_ADDR, reg_cntl);
202
+ reg_cntl |= GENMASK(priv->num_sensors - 1, 0) << SENSOR0_SHIFT;
203
+ ret = regmap_write(priv->tm_map, CNTL_ADDR, reg_cntl);
213204 if (ret)
214205 return ret;
215206
216207 reg_cntl |= EN;
217
- ret = regmap_write(tmdev->map, CNTL_ADDR, reg_cntl);
208
+ ret = regmap_write(priv->tm_map, CNTL_ADDR, reg_cntl);
218209 if (ret)
219210 return ret;
220211
221212 return 0;
222213 }
223214
224
-static int calibrate_8960(struct tsens_device *tmdev)
215
+static int calibrate_8960(struct tsens_priv *priv)
225216 {
226217 int i;
227218 char *data;
228219
229
- ssize_t num_read = tmdev->num_sensors;
230
- struct tsens_sensor *s = tmdev->sensor;
220
+ ssize_t num_read = priv->num_sensors;
221
+ struct tsens_sensor *s = priv->sensor;
231222
232
- data = qfprom_read(tmdev->dev, "calib");
223
+ data = qfprom_read(priv->dev, "calib");
233224 if (IS_ERR(data))
234
- data = qfprom_read(tmdev->dev, "calib_backup");
225
+ data = qfprom_read(priv->dev, "calib_backup");
235226 if (IS_ERR(data))
236227 return PTR_ERR(data);
237228
238229 for (i = 0; i < num_read; i++, s++)
239230 s->offset = data[i];
231
+
232
+ kfree(data);
240233
241234 return 0;
242235 }
....@@ -252,21 +245,21 @@
252245 return adc_code * slope + offset;
253246 }
254247
255
-static int get_temp_8960(struct tsens_device *tmdev, int id, int *temp)
248
+static int get_temp_8960(const struct tsens_sensor *s, int *temp)
256249 {
257250 int ret;
258251 u32 code, trdy;
259
- const struct tsens_sensor *s = &tmdev->sensor[id];
252
+ struct tsens_priv *priv = s->priv;
260253 unsigned long timeout;
261254
262255 timeout = jiffies + usecs_to_jiffies(TIMEOUT_US);
263256 do {
264
- ret = regmap_read(tmdev->map, INT_STATUS_ADDR, &trdy);
257
+ ret = regmap_read(priv->tm_map, INT_STATUS_ADDR, &trdy);
265258 if (ret)
266259 return ret;
267260 if (!(trdy & TRDY_MASK))
268261 continue;
269
- ret = regmap_read(tmdev->map, s->status, &code);
262
+ ret = regmap_read(priv->tm_map, s->status, &code);
270263 if (ret)
271264 return ret;
272265 *temp = code_to_mdegC(code, s);
....@@ -286,7 +279,7 @@
286279 .resume = resume_8960,
287280 };
288281
289
-const struct tsens_data data_8960 = {
282
+struct tsens_plat_data data_8960 = {
290283 .num_sensors = 11,
291284 .ops = &ops_8960,
292285 };