| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Driver for Linear Technology LTC2945 I2C Power Monitor |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * 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. |
|---|
| 15 | 6 | */ |
|---|
| 16 | 7 | |
|---|
| 17 | 8 | #include <linux/kernel.h> |
|---|
| .. | .. |
|---|
| 226 | 217 | return val; |
|---|
| 227 | 218 | } |
|---|
| 228 | 219 | |
|---|
| 229 | | -static ssize_t ltc2945_show_value(struct device *dev, |
|---|
| 220 | +static ssize_t ltc2945_value_show(struct device *dev, |
|---|
| 230 | 221 | struct device_attribute *da, char *buf) |
|---|
| 231 | 222 | { |
|---|
| 232 | 223 | struct sensor_device_attribute *attr = to_sensor_dev_attr(da); |
|---|
| .. | .. |
|---|
| 238 | 229 | return snprintf(buf, PAGE_SIZE, "%lld\n", value); |
|---|
| 239 | 230 | } |
|---|
| 240 | 231 | |
|---|
| 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) |
|---|
| 244 | 235 | { |
|---|
| 245 | 236 | struct sensor_device_attribute *attr = to_sensor_dev_attr(da); |
|---|
| 246 | 237 | struct regmap *regmap = dev_get_drvdata(dev); |
|---|
| .. | .. |
|---|
| 273 | 264 | return ret < 0 ? ret : count; |
|---|
| 274 | 265 | } |
|---|
| 275 | 266 | |
|---|
| 276 | | -static ssize_t ltc2945_reset_history(struct device *dev, |
|---|
| 267 | +static ssize_t ltc2945_history_store(struct device *dev, |
|---|
| 277 | 268 | struct device_attribute *da, |
|---|
| 278 | 269 | const char *buf, size_t count) |
|---|
| 279 | 270 | { |
|---|
| .. | .. |
|---|
| 326 | 317 | return ret ? : count; |
|---|
| 327 | 318 | } |
|---|
| 328 | 319 | |
|---|
| 329 | | -static ssize_t ltc2945_show_bool(struct device *dev, |
|---|
| 320 | +static ssize_t ltc2945_bool_show(struct device *dev, |
|---|
| 330 | 321 | struct device_attribute *da, char *buf) |
|---|
| 331 | 322 | { |
|---|
| 332 | 323 | struct sensor_device_attribute *attr = to_sensor_dev_attr(da); |
|---|
| .. | .. |
|---|
| 347 | 338 | |
|---|
| 348 | 339 | /* Input voltages */ |
|---|
| 349 | 340 | |
|---|
| 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); |
|---|
| 341 | +static SENSOR_DEVICE_ATTR_RO(in1_input, ltc2945_value, LTC2945_VIN_H); |
|---|
| 342 | +static SENSOR_DEVICE_ATTR_RW(in1_min, ltc2945_value, LTC2945_MIN_VIN_THRES_H); |
|---|
| 343 | +static SENSOR_DEVICE_ATTR_RW(in1_max, ltc2945_value, LTC2945_MAX_VIN_THRES_H); |
|---|
| 344 | +static SENSOR_DEVICE_ATTR_RO(in1_lowest, ltc2945_value, LTC2945_MIN_VIN_H); |
|---|
| 345 | +static SENSOR_DEVICE_ATTR_RO(in1_highest, ltc2945_value, LTC2945_MAX_VIN_H); |
|---|
| 346 | +static SENSOR_DEVICE_ATTR_WO(in1_reset_history, ltc2945_history, |
|---|
| 347 | + LTC2945_MIN_VIN_H); |
|---|
| 362 | 348 | |
|---|
| 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); |
|---|
| 349 | +static SENSOR_DEVICE_ATTR_RO(in2_input, ltc2945_value, LTC2945_ADIN_H); |
|---|
| 350 | +static SENSOR_DEVICE_ATTR_RW(in2_min, ltc2945_value, LTC2945_MIN_ADIN_THRES_H); |
|---|
| 351 | +static SENSOR_DEVICE_ATTR_RW(in2_max, ltc2945_value, LTC2945_MAX_ADIN_THRES_H); |
|---|
| 352 | +static SENSOR_DEVICE_ATTR_RO(in2_lowest, ltc2945_value, LTC2945_MIN_ADIN_H); |
|---|
| 353 | +static SENSOR_DEVICE_ATTR_RO(in2_highest, ltc2945_value, LTC2945_MAX_ADIN_H); |
|---|
| 354 | +static SENSOR_DEVICE_ATTR_WO(in2_reset_history, ltc2945_history, |
|---|
| 355 | + LTC2945_MIN_ADIN_H); |
|---|
| 375 | 356 | |
|---|
| 376 | 357 | /* Voltage alarms */ |
|---|
| 377 | 358 | |
|---|
| 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); |
|---|
| 359 | +static SENSOR_DEVICE_ATTR_RO(in1_min_alarm, ltc2945_bool, FAULT_VIN_UV); |
|---|
| 360 | +static SENSOR_DEVICE_ATTR_RO(in1_max_alarm, ltc2945_bool, FAULT_VIN_OV); |
|---|
| 361 | +static SENSOR_DEVICE_ATTR_RO(in2_min_alarm, ltc2945_bool, FAULT_ADIN_UV); |
|---|
| 362 | +static SENSOR_DEVICE_ATTR_RO(in2_max_alarm, ltc2945_bool, FAULT_ADIN_OV); |
|---|
| 386 | 363 | |
|---|
| 387 | 364 | /* Currents (via sense resistor) */ |
|---|
| 388 | 365 | |
|---|
| 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); |
|---|
| 366 | +static SENSOR_DEVICE_ATTR_RO(curr1_input, ltc2945_value, LTC2945_SENSE_H); |
|---|
| 367 | +static SENSOR_DEVICE_ATTR_RW(curr1_min, ltc2945_value, |
|---|
| 368 | + LTC2945_MIN_SENSE_THRES_H); |
|---|
| 369 | +static SENSOR_DEVICE_ATTR_RW(curr1_max, ltc2945_value, |
|---|
| 370 | + LTC2945_MAX_SENSE_THRES_H); |
|---|
| 371 | +static SENSOR_DEVICE_ATTR_RO(curr1_lowest, ltc2945_value, LTC2945_MIN_SENSE_H); |
|---|
| 372 | +static SENSOR_DEVICE_ATTR_RO(curr1_highest, ltc2945_value, |
|---|
| 373 | + LTC2945_MAX_SENSE_H); |
|---|
| 374 | +static SENSOR_DEVICE_ATTR_WO(curr1_reset_history, ltc2945_history, |
|---|
| 375 | + LTC2945_MIN_SENSE_H); |
|---|
| 401 | 376 | |
|---|
| 402 | 377 | /* Current alarms */ |
|---|
| 403 | 378 | |
|---|
| 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); |
|---|
| 379 | +static SENSOR_DEVICE_ATTR_RO(curr1_min_alarm, ltc2945_bool, FAULT_SENSE_UV); |
|---|
| 380 | +static SENSOR_DEVICE_ATTR_RO(curr1_max_alarm, ltc2945_bool, FAULT_SENSE_OV); |
|---|
| 408 | 381 | |
|---|
| 409 | 382 | /* Power */ |
|---|
| 410 | 383 | |
|---|
| 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); |
|---|
| 384 | +static SENSOR_DEVICE_ATTR_RO(power1_input, ltc2945_value, LTC2945_POWER_H); |
|---|
| 385 | +static SENSOR_DEVICE_ATTR_RW(power1_min, ltc2945_value, |
|---|
| 386 | + LTC2945_MIN_POWER_THRES_H); |
|---|
| 387 | +static SENSOR_DEVICE_ATTR_RW(power1_max, ltc2945_value, |
|---|
| 388 | + LTC2945_MAX_POWER_THRES_H); |
|---|
| 389 | +static SENSOR_DEVICE_ATTR_RO(power1_input_lowest, ltc2945_value, |
|---|
| 390 | + LTC2945_MIN_POWER_H); |
|---|
| 391 | +static SENSOR_DEVICE_ATTR_RO(power1_input_highest, ltc2945_value, |
|---|
| 392 | + LTC2945_MAX_POWER_H); |
|---|
| 393 | +static SENSOR_DEVICE_ATTR_WO(power1_reset_history, ltc2945_history, |
|---|
| 394 | + LTC2945_MIN_POWER_H); |
|---|
| 423 | 395 | |
|---|
| 424 | 396 | /* Power alarms */ |
|---|
| 425 | 397 | |
|---|
| 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); |
|---|
| 398 | +static SENSOR_DEVICE_ATTR_RO(power1_min_alarm, ltc2945_bool, FAULT_POWER_UV); |
|---|
| 399 | +static SENSOR_DEVICE_ATTR_RO(power1_max_alarm, ltc2945_bool, FAULT_POWER_OV); |
|---|
| 430 | 400 | |
|---|
| 431 | 401 | static struct attribute *ltc2945_attrs[] = { |
|---|
| 432 | 402 | &sensor_dev_attr_in1_input.dev_attr.attr, |
|---|
| .. | .. |
|---|
| 475 | 445 | .max_register = LTC2945_MIN_ADIN_THRES_L, |
|---|
| 476 | 446 | }; |
|---|
| 477 | 447 | |
|---|
| 478 | | -static int ltc2945_probe(struct i2c_client *client, |
|---|
| 479 | | - const struct i2c_device_id *id) |
|---|
| 448 | +static int ltc2945_probe(struct i2c_client *client) |
|---|
| 480 | 449 | { |
|---|
| 481 | 450 | struct device *dev = &client->dev; |
|---|
| 482 | 451 | struct device *hwmon_dev; |
|---|
| .. | .. |
|---|
| 508 | 477 | .driver = { |
|---|
| 509 | 478 | .name = "ltc2945", |
|---|
| 510 | 479 | }, |
|---|
| 511 | | - .probe = ltc2945_probe, |
|---|
| 480 | + .probe_new = ltc2945_probe, |
|---|
| 512 | 481 | .id_table = ltc2945_id, |
|---|
| 513 | 482 | }; |
|---|
| 514 | 483 | |
|---|