| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * fschmd.c |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * Copyright (C) 2007 - 2009 Hans de Goede <hdegoede@redhat.com> |
|---|
| 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 | | - * |
|---|
| 16 | | - * You should have received a copy of the GNU General Public License |
|---|
| 17 | | - * along with this program; if not, write to the Free Software |
|---|
| 18 | | - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
|---|
| 19 | 6 | */ |
|---|
| 20 | 7 | |
|---|
| 21 | 8 | /* |
|---|
| .. | .. |
|---|
| 227 | 214 | * Functions declarations |
|---|
| 228 | 215 | */ |
|---|
| 229 | 216 | |
|---|
| 230 | | -static int fschmd_probe(struct i2c_client *client, |
|---|
| 231 | | - const struct i2c_device_id *id); |
|---|
| 217 | +static int fschmd_probe(struct i2c_client *client); |
|---|
| 232 | 218 | static int fschmd_detect(struct i2c_client *client, |
|---|
| 233 | 219 | struct i2c_board_info *info); |
|---|
| 234 | 220 | static int fschmd_remove(struct i2c_client *client); |
|---|
| .. | .. |
|---|
| 255 | 241 | .driver = { |
|---|
| 256 | 242 | .name = "fschmd", |
|---|
| 257 | 243 | }, |
|---|
| 258 | | - .probe = fschmd_probe, |
|---|
| 244 | + .probe_new = fschmd_probe, |
|---|
| 259 | 245 | .remove = fschmd_remove, |
|---|
| 260 | 246 | .id_table = fschmd_id, |
|---|
| 261 | 247 | .detect = fschmd_detect, |
|---|
| .. | .. |
|---|
| 331 | 317 | * Sysfs attr show / store functions |
|---|
| 332 | 318 | */ |
|---|
| 333 | 319 | |
|---|
| 334 | | -static ssize_t show_in_value(struct device *dev, |
|---|
| 335 | | - struct device_attribute *devattr, char *buf) |
|---|
| 320 | +static ssize_t in_value_show(struct device *dev, |
|---|
| 321 | + struct device_attribute *devattr, char *buf) |
|---|
| 336 | 322 | { |
|---|
| 337 | 323 | const int max_reading[3] = { 14200, 6600, 3300 }; |
|---|
| 338 | 324 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| .. | .. |
|---|
| 349 | 335 | |
|---|
| 350 | 336 | #define TEMP_FROM_REG(val) (((val) - 128) * 1000) |
|---|
| 351 | 337 | |
|---|
| 352 | | -static ssize_t show_temp_value(struct device *dev, |
|---|
| 353 | | - struct device_attribute *devattr, char *buf) |
|---|
| 338 | +static ssize_t temp_value_show(struct device *dev, |
|---|
| 339 | + struct device_attribute *devattr, char *buf) |
|---|
| 354 | 340 | { |
|---|
| 355 | 341 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| 356 | 342 | struct fschmd_data *data = fschmd_update_device(dev); |
|---|
| .. | .. |
|---|
| 358 | 344 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_act[index])); |
|---|
| 359 | 345 | } |
|---|
| 360 | 346 | |
|---|
| 361 | | -static ssize_t show_temp_max(struct device *dev, |
|---|
| 362 | | - struct device_attribute *devattr, char *buf) |
|---|
| 347 | +static ssize_t temp_max_show(struct device *dev, |
|---|
| 348 | + struct device_attribute *devattr, char *buf) |
|---|
| 363 | 349 | { |
|---|
| 364 | 350 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| 365 | 351 | struct fschmd_data *data = fschmd_update_device(dev); |
|---|
| .. | .. |
|---|
| 367 | 353 | return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[index])); |
|---|
| 368 | 354 | } |
|---|
| 369 | 355 | |
|---|
| 370 | | -static ssize_t store_temp_max(struct device *dev, struct device_attribute |
|---|
| 371 | | - *devattr, const char *buf, size_t count) |
|---|
| 356 | +static ssize_t temp_max_store(struct device *dev, |
|---|
| 357 | + struct device_attribute *devattr, |
|---|
| 358 | + const char *buf, size_t count) |
|---|
| 372 | 359 | { |
|---|
| 373 | 360 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| 374 | 361 | struct fschmd_data *data = dev_get_drvdata(dev); |
|---|
| .. | .. |
|---|
| 390 | 377 | return count; |
|---|
| 391 | 378 | } |
|---|
| 392 | 379 | |
|---|
| 393 | | -static ssize_t show_temp_fault(struct device *dev, |
|---|
| 394 | | - struct device_attribute *devattr, char *buf) |
|---|
| 380 | +static ssize_t temp_fault_show(struct device *dev, |
|---|
| 381 | + struct device_attribute *devattr, char *buf) |
|---|
| 395 | 382 | { |
|---|
| 396 | 383 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| 397 | 384 | struct fschmd_data *data = fschmd_update_device(dev); |
|---|
| .. | .. |
|---|
| 403 | 390 | return sprintf(buf, "1\n"); |
|---|
| 404 | 391 | } |
|---|
| 405 | 392 | |
|---|
| 406 | | -static ssize_t show_temp_alarm(struct device *dev, |
|---|
| 407 | | - struct device_attribute *devattr, char *buf) |
|---|
| 393 | +static ssize_t temp_alarm_show(struct device *dev, |
|---|
| 394 | + struct device_attribute *devattr, char *buf) |
|---|
| 408 | 395 | { |
|---|
| 409 | 396 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| 410 | 397 | struct fschmd_data *data = fschmd_update_device(dev); |
|---|
| .. | .. |
|---|
| 419 | 406 | |
|---|
| 420 | 407 | #define RPM_FROM_REG(val) ((val) * 60) |
|---|
| 421 | 408 | |
|---|
| 422 | | -static ssize_t show_fan_value(struct device *dev, |
|---|
| 423 | | - struct device_attribute *devattr, char *buf) |
|---|
| 409 | +static ssize_t fan_value_show(struct device *dev, |
|---|
| 410 | + struct device_attribute *devattr, char *buf) |
|---|
| 424 | 411 | { |
|---|
| 425 | 412 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| 426 | 413 | struct fschmd_data *data = fschmd_update_device(dev); |
|---|
| .. | .. |
|---|
| 428 | 415 | return sprintf(buf, "%u\n", RPM_FROM_REG(data->fan_act[index])); |
|---|
| 429 | 416 | } |
|---|
| 430 | 417 | |
|---|
| 431 | | -static ssize_t show_fan_div(struct device *dev, |
|---|
| 432 | | - struct device_attribute *devattr, char *buf) |
|---|
| 418 | +static ssize_t fan_div_show(struct device *dev, |
|---|
| 419 | + struct device_attribute *devattr, char *buf) |
|---|
| 433 | 420 | { |
|---|
| 434 | 421 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| 435 | 422 | struct fschmd_data *data = fschmd_update_device(dev); |
|---|
| .. | .. |
|---|
| 438 | 425 | return sprintf(buf, "%d\n", 1 << (data->fan_ripple[index] & 3)); |
|---|
| 439 | 426 | } |
|---|
| 440 | 427 | |
|---|
| 441 | | -static ssize_t store_fan_div(struct device *dev, struct device_attribute |
|---|
| 442 | | - *devattr, const char *buf, size_t count) |
|---|
| 428 | +static ssize_t fan_div_store(struct device *dev, |
|---|
| 429 | + struct device_attribute *devattr, |
|---|
| 430 | + const char *buf, size_t count) |
|---|
| 443 | 431 | { |
|---|
| 444 | 432 | u8 reg; |
|---|
| 445 | 433 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| .. | .. |
|---|
| 488 | 476 | return count; |
|---|
| 489 | 477 | } |
|---|
| 490 | 478 | |
|---|
| 491 | | -static ssize_t show_fan_alarm(struct device *dev, |
|---|
| 492 | | - struct device_attribute *devattr, char *buf) |
|---|
| 479 | +static ssize_t fan_alarm_show(struct device *dev, |
|---|
| 480 | + struct device_attribute *devattr, char *buf) |
|---|
| 493 | 481 | { |
|---|
| 494 | 482 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| 495 | 483 | struct fschmd_data *data = fschmd_update_device(dev); |
|---|
| .. | .. |
|---|
| 500 | 488 | return sprintf(buf, "0\n"); |
|---|
| 501 | 489 | } |
|---|
| 502 | 490 | |
|---|
| 503 | | -static ssize_t show_fan_fault(struct device *dev, |
|---|
| 504 | | - struct device_attribute *devattr, char *buf) |
|---|
| 491 | +static ssize_t fan_fault_show(struct device *dev, |
|---|
| 492 | + struct device_attribute *devattr, char *buf) |
|---|
| 505 | 493 | { |
|---|
| 506 | 494 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| 507 | 495 | struct fschmd_data *data = fschmd_update_device(dev); |
|---|
| .. | .. |
|---|
| 513 | 501 | } |
|---|
| 514 | 502 | |
|---|
| 515 | 503 | |
|---|
| 516 | | -static ssize_t show_pwm_auto_point1_pwm(struct device *dev, |
|---|
| 517 | | - struct device_attribute *devattr, char *buf) |
|---|
| 504 | +static ssize_t pwm_auto_point1_pwm_show(struct device *dev, |
|---|
| 505 | + struct device_attribute *devattr, |
|---|
| 506 | + char *buf) |
|---|
| 518 | 507 | { |
|---|
| 519 | 508 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| 520 | 509 | struct fschmd_data *data = fschmd_update_device(dev); |
|---|
| .. | .. |
|---|
| 527 | 516 | return sprintf(buf, "%d\n", val); |
|---|
| 528 | 517 | } |
|---|
| 529 | 518 | |
|---|
| 530 | | -static ssize_t store_pwm_auto_point1_pwm(struct device *dev, |
|---|
| 531 | | - struct device_attribute *devattr, const char *buf, size_t count) |
|---|
| 519 | +static ssize_t pwm_auto_point1_pwm_store(struct device *dev, |
|---|
| 520 | + struct device_attribute *devattr, |
|---|
| 521 | + const char *buf, size_t count) |
|---|
| 532 | 522 | { |
|---|
| 533 | 523 | int index = to_sensor_dev_attr(devattr)->index; |
|---|
| 534 | 524 | struct fschmd_data *data = dev_get_drvdata(dev); |
|---|
| .. | .. |
|---|
| 605 | 595 | static DEVICE_ATTR_RW(alert_led); |
|---|
| 606 | 596 | |
|---|
| 607 | 597 | static struct sensor_device_attribute fschmd_attr[] = { |
|---|
| 608 | | - SENSOR_ATTR(in0_input, 0444, show_in_value, NULL, 0), |
|---|
| 609 | | - SENSOR_ATTR(in1_input, 0444, show_in_value, NULL, 1), |
|---|
| 610 | | - SENSOR_ATTR(in2_input, 0444, show_in_value, NULL, 2), |
|---|
| 611 | | - SENSOR_ATTR(in3_input, 0444, show_in_value, NULL, 3), |
|---|
| 612 | | - SENSOR_ATTR(in4_input, 0444, show_in_value, NULL, 4), |
|---|
| 613 | | - SENSOR_ATTR(in5_input, 0444, show_in_value, NULL, 5), |
|---|
| 598 | + SENSOR_ATTR_RO(in0_input, in_value, 0), |
|---|
| 599 | + SENSOR_ATTR_RO(in1_input, in_value, 1), |
|---|
| 600 | + SENSOR_ATTR_RO(in2_input, in_value, 2), |
|---|
| 601 | + SENSOR_ATTR_RO(in3_input, in_value, 3), |
|---|
| 602 | + SENSOR_ATTR_RO(in4_input, in_value, 4), |
|---|
| 603 | + SENSOR_ATTR_RO(in5_input, in_value, 5), |
|---|
| 614 | 604 | }; |
|---|
| 615 | 605 | |
|---|
| 616 | 606 | static struct sensor_device_attribute fschmd_temp_attr[] = { |
|---|
| 617 | | - SENSOR_ATTR(temp1_input, 0444, show_temp_value, NULL, 0), |
|---|
| 618 | | - SENSOR_ATTR(temp1_max, 0644, show_temp_max, store_temp_max, 0), |
|---|
| 619 | | - SENSOR_ATTR(temp1_fault, 0444, show_temp_fault, NULL, 0), |
|---|
| 620 | | - SENSOR_ATTR(temp1_alarm, 0444, show_temp_alarm, NULL, 0), |
|---|
| 621 | | - SENSOR_ATTR(temp2_input, 0444, show_temp_value, NULL, 1), |
|---|
| 622 | | - SENSOR_ATTR(temp2_max, 0644, show_temp_max, store_temp_max, 1), |
|---|
| 623 | | - SENSOR_ATTR(temp2_fault, 0444, show_temp_fault, NULL, 1), |
|---|
| 624 | | - SENSOR_ATTR(temp2_alarm, 0444, show_temp_alarm, NULL, 1), |
|---|
| 625 | | - SENSOR_ATTR(temp3_input, 0444, show_temp_value, NULL, 2), |
|---|
| 626 | | - SENSOR_ATTR(temp3_max, 0644, show_temp_max, store_temp_max, 2), |
|---|
| 627 | | - SENSOR_ATTR(temp3_fault, 0444, show_temp_fault, NULL, 2), |
|---|
| 628 | | - SENSOR_ATTR(temp3_alarm, 0444, show_temp_alarm, NULL, 2), |
|---|
| 629 | | - SENSOR_ATTR(temp4_input, 0444, show_temp_value, NULL, 3), |
|---|
| 630 | | - SENSOR_ATTR(temp4_max, 0644, show_temp_max, store_temp_max, 3), |
|---|
| 631 | | - SENSOR_ATTR(temp4_fault, 0444, show_temp_fault, NULL, 3), |
|---|
| 632 | | - SENSOR_ATTR(temp4_alarm, 0444, show_temp_alarm, NULL, 3), |
|---|
| 633 | | - SENSOR_ATTR(temp5_input, 0444, show_temp_value, NULL, 4), |
|---|
| 634 | | - SENSOR_ATTR(temp5_max, 0644, show_temp_max, store_temp_max, 4), |
|---|
| 635 | | - SENSOR_ATTR(temp5_fault, 0444, show_temp_fault, NULL, 4), |
|---|
| 636 | | - SENSOR_ATTR(temp5_alarm, 0444, show_temp_alarm, NULL, 4), |
|---|
| 637 | | - SENSOR_ATTR(temp6_input, 0444, show_temp_value, NULL, 5), |
|---|
| 638 | | - SENSOR_ATTR(temp6_max, 0644, show_temp_max, store_temp_max, 5), |
|---|
| 639 | | - SENSOR_ATTR(temp6_fault, 0444, show_temp_fault, NULL, 5), |
|---|
| 640 | | - SENSOR_ATTR(temp6_alarm, 0444, show_temp_alarm, NULL, 5), |
|---|
| 641 | | - SENSOR_ATTR(temp7_input, 0444, show_temp_value, NULL, 6), |
|---|
| 642 | | - SENSOR_ATTR(temp7_max, 0644, show_temp_max, store_temp_max, 6), |
|---|
| 643 | | - SENSOR_ATTR(temp7_fault, 0444, show_temp_fault, NULL, 6), |
|---|
| 644 | | - SENSOR_ATTR(temp7_alarm, 0444, show_temp_alarm, NULL, 6), |
|---|
| 645 | | - SENSOR_ATTR(temp8_input, 0444, show_temp_value, NULL, 7), |
|---|
| 646 | | - SENSOR_ATTR(temp8_max, 0644, show_temp_max, store_temp_max, 7), |
|---|
| 647 | | - SENSOR_ATTR(temp8_fault, 0444, show_temp_fault, NULL, 7), |
|---|
| 648 | | - SENSOR_ATTR(temp8_alarm, 0444, show_temp_alarm, NULL, 7), |
|---|
| 649 | | - SENSOR_ATTR(temp9_input, 0444, show_temp_value, NULL, 8), |
|---|
| 650 | | - SENSOR_ATTR(temp9_max, 0644, show_temp_max, store_temp_max, 8), |
|---|
| 651 | | - SENSOR_ATTR(temp9_fault, 0444, show_temp_fault, NULL, 8), |
|---|
| 652 | | - SENSOR_ATTR(temp9_alarm, 0444, show_temp_alarm, NULL, 8), |
|---|
| 653 | | - SENSOR_ATTR(temp10_input, 0444, show_temp_value, NULL, 9), |
|---|
| 654 | | - SENSOR_ATTR(temp10_max, 0644, show_temp_max, store_temp_max, 9), |
|---|
| 655 | | - SENSOR_ATTR(temp10_fault, 0444, show_temp_fault, NULL, 9), |
|---|
| 656 | | - SENSOR_ATTR(temp10_alarm, 0444, show_temp_alarm, NULL, 9), |
|---|
| 657 | | - SENSOR_ATTR(temp11_input, 0444, show_temp_value, NULL, 10), |
|---|
| 658 | | - SENSOR_ATTR(temp11_max, 0644, show_temp_max, store_temp_max, 10), |
|---|
| 659 | | - SENSOR_ATTR(temp11_fault, 0444, show_temp_fault, NULL, 10), |
|---|
| 660 | | - SENSOR_ATTR(temp11_alarm, 0444, show_temp_alarm, NULL, 10), |
|---|
| 607 | + SENSOR_ATTR_RO(temp1_input, temp_value, 0), |
|---|
| 608 | + SENSOR_ATTR_RW(temp1_max, temp_max, 0), |
|---|
| 609 | + SENSOR_ATTR_RO(temp1_fault, temp_fault, 0), |
|---|
| 610 | + SENSOR_ATTR_RO(temp1_alarm, temp_alarm, 0), |
|---|
| 611 | + SENSOR_ATTR_RO(temp2_input, temp_value, 1), |
|---|
| 612 | + SENSOR_ATTR_RW(temp2_max, temp_max, 1), |
|---|
| 613 | + SENSOR_ATTR_RO(temp2_fault, temp_fault, 1), |
|---|
| 614 | + SENSOR_ATTR_RO(temp2_alarm, temp_alarm, 1), |
|---|
| 615 | + SENSOR_ATTR_RO(temp3_input, temp_value, 2), |
|---|
| 616 | + SENSOR_ATTR_RW(temp3_max, temp_max, 2), |
|---|
| 617 | + SENSOR_ATTR_RO(temp3_fault, temp_fault, 2), |
|---|
| 618 | + SENSOR_ATTR_RO(temp3_alarm, temp_alarm, 2), |
|---|
| 619 | + SENSOR_ATTR_RO(temp4_input, temp_value, 3), |
|---|
| 620 | + SENSOR_ATTR_RW(temp4_max, temp_max, 3), |
|---|
| 621 | + SENSOR_ATTR_RO(temp4_fault, temp_fault, 3), |
|---|
| 622 | + SENSOR_ATTR_RO(temp4_alarm, temp_alarm, 3), |
|---|
| 623 | + SENSOR_ATTR_RO(temp5_input, temp_value, 4), |
|---|
| 624 | + SENSOR_ATTR_RW(temp5_max, temp_max, 4), |
|---|
| 625 | + SENSOR_ATTR_RO(temp5_fault, temp_fault, 4), |
|---|
| 626 | + SENSOR_ATTR_RO(temp5_alarm, temp_alarm, 4), |
|---|
| 627 | + SENSOR_ATTR_RO(temp6_input, temp_value, 5), |
|---|
| 628 | + SENSOR_ATTR_RW(temp6_max, temp_max, 5), |
|---|
| 629 | + SENSOR_ATTR_RO(temp6_fault, temp_fault, 5), |
|---|
| 630 | + SENSOR_ATTR_RO(temp6_alarm, temp_alarm, 5), |
|---|
| 631 | + SENSOR_ATTR_RO(temp7_input, temp_value, 6), |
|---|
| 632 | + SENSOR_ATTR_RW(temp7_max, temp_max, 6), |
|---|
| 633 | + SENSOR_ATTR_RO(temp7_fault, temp_fault, 6), |
|---|
| 634 | + SENSOR_ATTR_RO(temp7_alarm, temp_alarm, 6), |
|---|
| 635 | + SENSOR_ATTR_RO(temp8_input, temp_value, 7), |
|---|
| 636 | + SENSOR_ATTR_RW(temp8_max, temp_max, 7), |
|---|
| 637 | + SENSOR_ATTR_RO(temp8_fault, temp_fault, 7), |
|---|
| 638 | + SENSOR_ATTR_RO(temp8_alarm, temp_alarm, 7), |
|---|
| 639 | + SENSOR_ATTR_RO(temp9_input, temp_value, 8), |
|---|
| 640 | + SENSOR_ATTR_RW(temp9_max, temp_max, 8), |
|---|
| 641 | + SENSOR_ATTR_RO(temp9_fault, temp_fault, 8), |
|---|
| 642 | + SENSOR_ATTR_RO(temp9_alarm, temp_alarm, 8), |
|---|
| 643 | + SENSOR_ATTR_RO(temp10_input, temp_value, 9), |
|---|
| 644 | + SENSOR_ATTR_RW(temp10_max, temp_max, 9), |
|---|
| 645 | + SENSOR_ATTR_RO(temp10_fault, temp_fault, 9), |
|---|
| 646 | + SENSOR_ATTR_RO(temp10_alarm, temp_alarm, 9), |
|---|
| 647 | + SENSOR_ATTR_RO(temp11_input, temp_value, 10), |
|---|
| 648 | + SENSOR_ATTR_RW(temp11_max, temp_max, 10), |
|---|
| 649 | + SENSOR_ATTR_RO(temp11_fault, temp_fault, 10), |
|---|
| 650 | + SENSOR_ATTR_RO(temp11_alarm, temp_alarm, 10), |
|---|
| 661 | 651 | }; |
|---|
| 662 | 652 | |
|---|
| 663 | 653 | static struct sensor_device_attribute fschmd_fan_attr[] = { |
|---|
| 664 | | - SENSOR_ATTR(fan1_input, 0444, show_fan_value, NULL, 0), |
|---|
| 665 | | - SENSOR_ATTR(fan1_div, 0644, show_fan_div, store_fan_div, 0), |
|---|
| 666 | | - SENSOR_ATTR(fan1_alarm, 0444, show_fan_alarm, NULL, 0), |
|---|
| 667 | | - SENSOR_ATTR(fan1_fault, 0444, show_fan_fault, NULL, 0), |
|---|
| 668 | | - SENSOR_ATTR(pwm1_auto_point1_pwm, 0644, show_pwm_auto_point1_pwm, |
|---|
| 669 | | - store_pwm_auto_point1_pwm, 0), |
|---|
| 670 | | - SENSOR_ATTR(fan2_input, 0444, show_fan_value, NULL, 1), |
|---|
| 671 | | - SENSOR_ATTR(fan2_div, 0644, show_fan_div, store_fan_div, 1), |
|---|
| 672 | | - SENSOR_ATTR(fan2_alarm, 0444, show_fan_alarm, NULL, 1), |
|---|
| 673 | | - SENSOR_ATTR(fan2_fault, 0444, show_fan_fault, NULL, 1), |
|---|
| 674 | | - SENSOR_ATTR(pwm2_auto_point1_pwm, 0644, show_pwm_auto_point1_pwm, |
|---|
| 675 | | - store_pwm_auto_point1_pwm, 1), |
|---|
| 676 | | - SENSOR_ATTR(fan3_input, 0444, show_fan_value, NULL, 2), |
|---|
| 677 | | - SENSOR_ATTR(fan3_div, 0644, show_fan_div, store_fan_div, 2), |
|---|
| 678 | | - SENSOR_ATTR(fan3_alarm, 0444, show_fan_alarm, NULL, 2), |
|---|
| 679 | | - SENSOR_ATTR(fan3_fault, 0444, show_fan_fault, NULL, 2), |
|---|
| 680 | | - SENSOR_ATTR(pwm3_auto_point1_pwm, 0644, show_pwm_auto_point1_pwm, |
|---|
| 681 | | - store_pwm_auto_point1_pwm, 2), |
|---|
| 682 | | - SENSOR_ATTR(fan4_input, 0444, show_fan_value, NULL, 3), |
|---|
| 683 | | - SENSOR_ATTR(fan4_div, 0644, show_fan_div, store_fan_div, 3), |
|---|
| 684 | | - SENSOR_ATTR(fan4_alarm, 0444, show_fan_alarm, NULL, 3), |
|---|
| 685 | | - SENSOR_ATTR(fan4_fault, 0444, show_fan_fault, NULL, 3), |
|---|
| 686 | | - SENSOR_ATTR(pwm4_auto_point1_pwm, 0644, show_pwm_auto_point1_pwm, |
|---|
| 687 | | - store_pwm_auto_point1_pwm, 3), |
|---|
| 688 | | - SENSOR_ATTR(fan5_input, 0444, show_fan_value, NULL, 4), |
|---|
| 689 | | - SENSOR_ATTR(fan5_div, 0644, show_fan_div, store_fan_div, 4), |
|---|
| 690 | | - SENSOR_ATTR(fan5_alarm, 0444, show_fan_alarm, NULL, 4), |
|---|
| 691 | | - SENSOR_ATTR(fan5_fault, 0444, show_fan_fault, NULL, 4), |
|---|
| 692 | | - SENSOR_ATTR(pwm5_auto_point1_pwm, 0644, show_pwm_auto_point1_pwm, |
|---|
| 693 | | - store_pwm_auto_point1_pwm, 4), |
|---|
| 694 | | - SENSOR_ATTR(fan6_input, 0444, show_fan_value, NULL, 5), |
|---|
| 695 | | - SENSOR_ATTR(fan6_div, 0644, show_fan_div, store_fan_div, 5), |
|---|
| 696 | | - SENSOR_ATTR(fan6_alarm, 0444, show_fan_alarm, NULL, 5), |
|---|
| 697 | | - SENSOR_ATTR(fan6_fault, 0444, show_fan_fault, NULL, 5), |
|---|
| 698 | | - SENSOR_ATTR(pwm6_auto_point1_pwm, 0644, show_pwm_auto_point1_pwm, |
|---|
| 699 | | - store_pwm_auto_point1_pwm, 5), |
|---|
| 700 | | - SENSOR_ATTR(fan7_input, 0444, show_fan_value, NULL, 6), |
|---|
| 701 | | - SENSOR_ATTR(fan7_div, 0644, show_fan_div, store_fan_div, 6), |
|---|
| 702 | | - SENSOR_ATTR(fan7_alarm, 0444, show_fan_alarm, NULL, 6), |
|---|
| 703 | | - SENSOR_ATTR(fan7_fault, 0444, show_fan_fault, NULL, 6), |
|---|
| 704 | | - SENSOR_ATTR(pwm7_auto_point1_pwm, 0644, show_pwm_auto_point1_pwm, |
|---|
| 705 | | - store_pwm_auto_point1_pwm, 6), |
|---|
| 654 | + SENSOR_ATTR_RO(fan1_input, fan_value, 0), |
|---|
| 655 | + SENSOR_ATTR_RW(fan1_div, fan_div, 0), |
|---|
| 656 | + SENSOR_ATTR_RO(fan1_alarm, fan_alarm, 0), |
|---|
| 657 | + SENSOR_ATTR_RO(fan1_fault, fan_fault, 0), |
|---|
| 658 | + SENSOR_ATTR_RW(pwm1_auto_point1_pwm, pwm_auto_point1_pwm, 0), |
|---|
| 659 | + SENSOR_ATTR_RO(fan2_input, fan_value, 1), |
|---|
| 660 | + SENSOR_ATTR_RW(fan2_div, fan_div, 1), |
|---|
| 661 | + SENSOR_ATTR_RO(fan2_alarm, fan_alarm, 1), |
|---|
| 662 | + SENSOR_ATTR_RO(fan2_fault, fan_fault, 1), |
|---|
| 663 | + SENSOR_ATTR_RW(pwm2_auto_point1_pwm, pwm_auto_point1_pwm, 1), |
|---|
| 664 | + SENSOR_ATTR_RO(fan3_input, fan_value, 2), |
|---|
| 665 | + SENSOR_ATTR_RW(fan3_div, fan_div, 2), |
|---|
| 666 | + SENSOR_ATTR_RO(fan3_alarm, fan_alarm, 2), |
|---|
| 667 | + SENSOR_ATTR_RO(fan3_fault, fan_fault, 2), |
|---|
| 668 | + SENSOR_ATTR_RW(pwm3_auto_point1_pwm, pwm_auto_point1_pwm, 2), |
|---|
| 669 | + SENSOR_ATTR_RO(fan4_input, fan_value, 3), |
|---|
| 670 | + SENSOR_ATTR_RW(fan4_div, fan_div, 3), |
|---|
| 671 | + SENSOR_ATTR_RO(fan4_alarm, fan_alarm, 3), |
|---|
| 672 | + SENSOR_ATTR_RO(fan4_fault, fan_fault, 3), |
|---|
| 673 | + SENSOR_ATTR_RW(pwm4_auto_point1_pwm, pwm_auto_point1_pwm, 3), |
|---|
| 674 | + SENSOR_ATTR_RO(fan5_input, fan_value, 4), |
|---|
| 675 | + SENSOR_ATTR_RW(fan5_div, fan_div, 4), |
|---|
| 676 | + SENSOR_ATTR_RO(fan5_alarm, fan_alarm, 4), |
|---|
| 677 | + SENSOR_ATTR_RO(fan5_fault, fan_fault, 4), |
|---|
| 678 | + SENSOR_ATTR_RW(pwm5_auto_point1_pwm, pwm_auto_point1_pwm, 4), |
|---|
| 679 | + SENSOR_ATTR_RO(fan6_input, fan_value, 5), |
|---|
| 680 | + SENSOR_ATTR_RW(fan6_div, fan_div, 5), |
|---|
| 681 | + SENSOR_ATTR_RO(fan6_alarm, fan_alarm, 5), |
|---|
| 682 | + SENSOR_ATTR_RO(fan6_fault, fan_fault, 5), |
|---|
| 683 | + SENSOR_ATTR_RW(pwm6_auto_point1_pwm, pwm_auto_point1_pwm, 5), |
|---|
| 684 | + SENSOR_ATTR_RO(fan7_input, fan_value, 6), |
|---|
| 685 | + SENSOR_ATTR_RW(fan7_div, fan_div, 6), |
|---|
| 686 | + SENSOR_ATTR_RO(fan7_alarm, fan_alarm, 6), |
|---|
| 687 | + SENSOR_ATTR_RO(fan7_fault, fan_fault, 6), |
|---|
| 688 | + SENSOR_ATTR_RW(pwm7_auto_point1_pwm, pwm_auto_point1_pwm, 6), |
|---|
| 706 | 689 | }; |
|---|
| 707 | 690 | |
|---|
| 708 | 691 | |
|---|
| .. | .. |
|---|
| 840 | 823 | watchdog_trigger(data); |
|---|
| 841 | 824 | filp->private_data = data; |
|---|
| 842 | 825 | |
|---|
| 843 | | - return nonseekable_open(inode, filp); |
|---|
| 826 | + return stream_open(inode, filp); |
|---|
| 844 | 827 | } |
|---|
| 845 | 828 | |
|---|
| 846 | 829 | static int watchdog_release(struct inode *inode, struct file *filp) |
|---|
| .. | .. |
|---|
| 970 | 953 | .release = watchdog_release, |
|---|
| 971 | 954 | .write = watchdog_write, |
|---|
| 972 | 955 | .unlocked_ioctl = watchdog_ioctl, |
|---|
| 956 | + .compat_ioctl = compat_ptr_ioctl, |
|---|
| 973 | 957 | }; |
|---|
| 974 | 958 | |
|---|
| 975 | 959 | |
|---|
| .. | .. |
|---|
| 1096 | 1080 | return 0; |
|---|
| 1097 | 1081 | } |
|---|
| 1098 | 1082 | |
|---|
| 1099 | | -static int fschmd_probe(struct i2c_client *client, |
|---|
| 1100 | | - const struct i2c_device_id *id) |
|---|
| 1083 | +static int fschmd_probe(struct i2c_client *client) |
|---|
| 1101 | 1084 | { |
|---|
| 1102 | 1085 | struct fschmd_data *data; |
|---|
| 1103 | 1086 | const char * const names[7] = { "Poseidon", "Hermes", "Scylla", |
|---|
| 1104 | 1087 | "Heracles", "Heimdall", "Hades", "Syleus" }; |
|---|
| 1105 | 1088 | const int watchdog_minors[] = { WATCHDOG_MINOR, 212, 213, 214, 215 }; |
|---|
| 1106 | 1089 | int i, err; |
|---|
| 1107 | | - enum chips kind = id->driver_data; |
|---|
| 1090 | + enum chips kind = i2c_match_id(fschmd_id, client)->driver_data; |
|---|
| 1108 | 1091 | |
|---|
| 1109 | 1092 | data = kzalloc(sizeof(struct fschmd_data), GFP_KERNEL); |
|---|
| 1110 | 1093 | if (!data) |
|---|
| .. | .. |
|---|
| 1169 | 1152 | for (i = 0; i < (FSCHMD_NO_TEMP_SENSORS[data->kind] * 4); i++) { |
|---|
| 1170 | 1153 | /* Poseidon doesn't have TEMP_LIMIT registers */ |
|---|
| 1171 | 1154 | if (kind == fscpos && fschmd_temp_attr[i].dev_attr.show == |
|---|
| 1172 | | - show_temp_max) |
|---|
| 1155 | + temp_max_show) |
|---|
| 1173 | 1156 | continue; |
|---|
| 1174 | 1157 | |
|---|
| 1175 | 1158 | if (kind == fscsyl) { |
|---|