forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 748e4f3d702def1a4bff191e0cf93b6a05340f01
kernel/drivers/hwmon/ltc2945.c
....@@ -1,17 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * Driver for Linear Technology LTC2945 I2C Power Monitor
34 *
45 * Copyright (c) 2014 Guenter Roeck
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
156 */
167
178 #include <linux/kernel.h>
....@@ -226,7 +217,7 @@
226217 return val;
227218 }
228219
229
-static ssize_t ltc2945_show_value(struct device *dev,
220
+static ssize_t ltc2945_value_show(struct device *dev,
230221 struct device_attribute *da, char *buf)
231222 {
232223 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
....@@ -238,9 +229,9 @@
238229 return snprintf(buf, PAGE_SIZE, "%lld\n", value);
239230 }
240231
241
-static ssize_t ltc2945_set_value(struct device *dev,
242
- struct device_attribute *da,
243
- const char *buf, size_t count)
232
+static ssize_t ltc2945_value_store(struct device *dev,
233
+ struct device_attribute *da,
234
+ const char *buf, size_t count)
244235 {
245236 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
246237 struct regmap *regmap = dev_get_drvdata(dev);
....@@ -257,6 +248,8 @@
257248
258249 /* convert to register value, then clamp and write result */
259250 regval = ltc2945_val_to_reg(dev, reg, val);
251
+ if (regval < 0)
252
+ return regval;
260253 if (is_power_reg(reg)) {
261254 regval = clamp_val(regval, 0, 0xffffff);
262255 regbuf[0] = regval >> 16;
....@@ -273,7 +266,7 @@
273266 return ret < 0 ? ret : count;
274267 }
275268
276
-static ssize_t ltc2945_reset_history(struct device *dev,
269
+static ssize_t ltc2945_history_store(struct device *dev,
277270 struct device_attribute *da,
278271 const char *buf, size_t count)
279272 {
....@@ -326,7 +319,7 @@
326319 return ret ? : count;
327320 }
328321
329
-static ssize_t ltc2945_show_bool(struct device *dev,
322
+static ssize_t ltc2945_bool_show(struct device *dev,
330323 struct device_attribute *da, char *buf)
331324 {
332325 struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
....@@ -347,86 +340,65 @@
347340
348341 /* Input voltages */
349342
350
-static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, ltc2945_show_value, NULL,
351
- LTC2945_VIN_H);
352
-static SENSOR_DEVICE_ATTR(in1_min, S_IRUGO | S_IWUSR, ltc2945_show_value,
353
- ltc2945_set_value, LTC2945_MIN_VIN_THRES_H);
354
-static SENSOR_DEVICE_ATTR(in1_max, S_IRUGO | S_IWUSR, ltc2945_show_value,
355
- ltc2945_set_value, LTC2945_MAX_VIN_THRES_H);
356
-static SENSOR_DEVICE_ATTR(in1_lowest, S_IRUGO, ltc2945_show_value, NULL,
357
- LTC2945_MIN_VIN_H);
358
-static SENSOR_DEVICE_ATTR(in1_highest, S_IRUGO, ltc2945_show_value, NULL,
359
- LTC2945_MAX_VIN_H);
360
-static SENSOR_DEVICE_ATTR(in1_reset_history, S_IWUSR, NULL,
361
- ltc2945_reset_history, LTC2945_MIN_VIN_H);
343
+static SENSOR_DEVICE_ATTR_RO(in1_input, ltc2945_value, LTC2945_VIN_H);
344
+static SENSOR_DEVICE_ATTR_RW(in1_min, ltc2945_value, LTC2945_MIN_VIN_THRES_H);
345
+static SENSOR_DEVICE_ATTR_RW(in1_max, ltc2945_value, LTC2945_MAX_VIN_THRES_H);
346
+static SENSOR_DEVICE_ATTR_RO(in1_lowest, ltc2945_value, LTC2945_MIN_VIN_H);
347
+static SENSOR_DEVICE_ATTR_RO(in1_highest, ltc2945_value, LTC2945_MAX_VIN_H);
348
+static SENSOR_DEVICE_ATTR_WO(in1_reset_history, ltc2945_history,
349
+ LTC2945_MIN_VIN_H);
362350
363
-static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, ltc2945_show_value, NULL,
364
- LTC2945_ADIN_H);
365
-static SENSOR_DEVICE_ATTR(in2_min, S_IRUGO | S_IWUSR, ltc2945_show_value,
366
- ltc2945_set_value, LTC2945_MIN_ADIN_THRES_H);
367
-static SENSOR_DEVICE_ATTR(in2_max, S_IRUGO | S_IWUSR, ltc2945_show_value,
368
- ltc2945_set_value, LTC2945_MAX_ADIN_THRES_H);
369
-static SENSOR_DEVICE_ATTR(in2_lowest, S_IRUGO, ltc2945_show_value, NULL,
370
- LTC2945_MIN_ADIN_H);
371
-static SENSOR_DEVICE_ATTR(in2_highest, S_IRUGO, ltc2945_show_value, NULL,
372
- LTC2945_MAX_ADIN_H);
373
-static SENSOR_DEVICE_ATTR(in2_reset_history, S_IWUSR, NULL,
374
- ltc2945_reset_history, LTC2945_MIN_ADIN_H);
351
+static SENSOR_DEVICE_ATTR_RO(in2_input, ltc2945_value, LTC2945_ADIN_H);
352
+static SENSOR_DEVICE_ATTR_RW(in2_min, ltc2945_value, LTC2945_MIN_ADIN_THRES_H);
353
+static SENSOR_DEVICE_ATTR_RW(in2_max, ltc2945_value, LTC2945_MAX_ADIN_THRES_H);
354
+static SENSOR_DEVICE_ATTR_RO(in2_lowest, ltc2945_value, LTC2945_MIN_ADIN_H);
355
+static SENSOR_DEVICE_ATTR_RO(in2_highest, ltc2945_value, LTC2945_MAX_ADIN_H);
356
+static SENSOR_DEVICE_ATTR_WO(in2_reset_history, ltc2945_history,
357
+ LTC2945_MIN_ADIN_H);
375358
376359 /* Voltage alarms */
377360
378
-static SENSOR_DEVICE_ATTR(in1_min_alarm, S_IRUGO, ltc2945_show_bool, NULL,
379
- FAULT_VIN_UV);
380
-static SENSOR_DEVICE_ATTR(in1_max_alarm, S_IRUGO, ltc2945_show_bool, NULL,
381
- FAULT_VIN_OV);
382
-static SENSOR_DEVICE_ATTR(in2_min_alarm, S_IRUGO, ltc2945_show_bool, NULL,
383
- FAULT_ADIN_UV);
384
-static SENSOR_DEVICE_ATTR(in2_max_alarm, S_IRUGO, ltc2945_show_bool, NULL,
385
- FAULT_ADIN_OV);
361
+static SENSOR_DEVICE_ATTR_RO(in1_min_alarm, ltc2945_bool, FAULT_VIN_UV);
362
+static SENSOR_DEVICE_ATTR_RO(in1_max_alarm, ltc2945_bool, FAULT_VIN_OV);
363
+static SENSOR_DEVICE_ATTR_RO(in2_min_alarm, ltc2945_bool, FAULT_ADIN_UV);
364
+static SENSOR_DEVICE_ATTR_RO(in2_max_alarm, ltc2945_bool, FAULT_ADIN_OV);
386365
387366 /* Currents (via sense resistor) */
388367
389
-static SENSOR_DEVICE_ATTR(curr1_input, S_IRUGO, ltc2945_show_value, NULL,
390
- LTC2945_SENSE_H);
391
-static SENSOR_DEVICE_ATTR(curr1_min, S_IRUGO | S_IWUSR, ltc2945_show_value,
392
- ltc2945_set_value, LTC2945_MIN_SENSE_THRES_H);
393
-static SENSOR_DEVICE_ATTR(curr1_max, S_IRUGO | S_IWUSR, ltc2945_show_value,
394
- ltc2945_set_value, LTC2945_MAX_SENSE_THRES_H);
395
-static SENSOR_DEVICE_ATTR(curr1_lowest, S_IRUGO, ltc2945_show_value, NULL,
396
- LTC2945_MIN_SENSE_H);
397
-static SENSOR_DEVICE_ATTR(curr1_highest, S_IRUGO, ltc2945_show_value, NULL,
398
- LTC2945_MAX_SENSE_H);
399
-static SENSOR_DEVICE_ATTR(curr1_reset_history, S_IWUSR, NULL,
400
- ltc2945_reset_history, LTC2945_MIN_SENSE_H);
368
+static SENSOR_DEVICE_ATTR_RO(curr1_input, ltc2945_value, LTC2945_SENSE_H);
369
+static SENSOR_DEVICE_ATTR_RW(curr1_min, ltc2945_value,
370
+ LTC2945_MIN_SENSE_THRES_H);
371
+static SENSOR_DEVICE_ATTR_RW(curr1_max, ltc2945_value,
372
+ LTC2945_MAX_SENSE_THRES_H);
373
+static SENSOR_DEVICE_ATTR_RO(curr1_lowest, ltc2945_value, LTC2945_MIN_SENSE_H);
374
+static SENSOR_DEVICE_ATTR_RO(curr1_highest, ltc2945_value,
375
+ LTC2945_MAX_SENSE_H);
376
+static SENSOR_DEVICE_ATTR_WO(curr1_reset_history, ltc2945_history,
377
+ LTC2945_MIN_SENSE_H);
401378
402379 /* Current alarms */
403380
404
-static SENSOR_DEVICE_ATTR(curr1_min_alarm, S_IRUGO, ltc2945_show_bool, NULL,
405
- FAULT_SENSE_UV);
406
-static SENSOR_DEVICE_ATTR(curr1_max_alarm, S_IRUGO, ltc2945_show_bool, NULL,
407
- FAULT_SENSE_OV);
381
+static SENSOR_DEVICE_ATTR_RO(curr1_min_alarm, ltc2945_bool, FAULT_SENSE_UV);
382
+static SENSOR_DEVICE_ATTR_RO(curr1_max_alarm, ltc2945_bool, FAULT_SENSE_OV);
408383
409384 /* Power */
410385
411
-static SENSOR_DEVICE_ATTR(power1_input, S_IRUGO, ltc2945_show_value, NULL,
412
- LTC2945_POWER_H);
413
-static SENSOR_DEVICE_ATTR(power1_min, S_IRUGO | S_IWUSR, ltc2945_show_value,
414
- ltc2945_set_value, LTC2945_MIN_POWER_THRES_H);
415
-static SENSOR_DEVICE_ATTR(power1_max, S_IRUGO | S_IWUSR, ltc2945_show_value,
416
- ltc2945_set_value, LTC2945_MAX_POWER_THRES_H);
417
-static SENSOR_DEVICE_ATTR(power1_input_lowest, S_IRUGO, ltc2945_show_value,
418
- NULL, LTC2945_MIN_POWER_H);
419
-static SENSOR_DEVICE_ATTR(power1_input_highest, S_IRUGO, ltc2945_show_value,
420
- NULL, LTC2945_MAX_POWER_H);
421
-static SENSOR_DEVICE_ATTR(power1_reset_history, S_IWUSR, NULL,
422
- ltc2945_reset_history, LTC2945_MIN_POWER_H);
386
+static SENSOR_DEVICE_ATTR_RO(power1_input, ltc2945_value, LTC2945_POWER_H);
387
+static SENSOR_DEVICE_ATTR_RW(power1_min, ltc2945_value,
388
+ LTC2945_MIN_POWER_THRES_H);
389
+static SENSOR_DEVICE_ATTR_RW(power1_max, ltc2945_value,
390
+ LTC2945_MAX_POWER_THRES_H);
391
+static SENSOR_DEVICE_ATTR_RO(power1_input_lowest, ltc2945_value,
392
+ LTC2945_MIN_POWER_H);
393
+static SENSOR_DEVICE_ATTR_RO(power1_input_highest, ltc2945_value,
394
+ LTC2945_MAX_POWER_H);
395
+static SENSOR_DEVICE_ATTR_WO(power1_reset_history, ltc2945_history,
396
+ LTC2945_MIN_POWER_H);
423397
424398 /* Power alarms */
425399
426
-static SENSOR_DEVICE_ATTR(power1_min_alarm, S_IRUGO, ltc2945_show_bool, NULL,
427
- FAULT_POWER_UV);
428
-static SENSOR_DEVICE_ATTR(power1_max_alarm, S_IRUGO, ltc2945_show_bool, NULL,
429
- FAULT_POWER_OV);
400
+static SENSOR_DEVICE_ATTR_RO(power1_min_alarm, ltc2945_bool, FAULT_POWER_UV);
401
+static SENSOR_DEVICE_ATTR_RO(power1_max_alarm, ltc2945_bool, FAULT_POWER_OV);
430402
431403 static struct attribute *ltc2945_attrs[] = {
432404 &sensor_dev_attr_in1_input.dev_attr.attr,
....@@ -475,8 +447,7 @@
475447 .max_register = LTC2945_MIN_ADIN_THRES_L,
476448 };
477449
478
-static int ltc2945_probe(struct i2c_client *client,
479
- const struct i2c_device_id *id)
450
+static int ltc2945_probe(struct i2c_client *client)
480451 {
481452 struct device *dev = &client->dev;
482453 struct device *hwmon_dev;
....@@ -508,7 +479,7 @@
508479 .driver = {
509480 .name = "ltc2945",
510481 },
511
- .probe = ltc2945_probe,
482
+ .probe_new = ltc2945_probe,
512483 .id_table = ltc2945_id,
513484 };
514485