Changeset 2481
- Timestamp:
- 04/26/04 19:53:43 (9 years ago)
- Files:
-
- 1 modified
-
lm-sensors/trunk/kernel/chips/pc87360.c (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lm-sensors/trunk/kernel/chips/pc87360.c
r2479 r2481 85 85 } 86 86 87 /* 88 * Logical devices 89 */ 90 87 91 #define PC87360_EXTENT 0x10 92 #define PC87365_REG_BANK 0x09 93 #define NO_BANK 0xff 88 94 89 95 /* … … 120 126 */ 121 127 122 #define PC87365_REG_IN_BANK 0x09123 124 128 /* nr has to be 0 to 11 (PC87365/87366) */ 125 129 #define PC87365_REG_IN 0x0B … … 139 143 */ 140 144 141 #define PC87365_REG_TEMP_BANK 0x09142 143 145 /* nr has to be 0 to 1 (PC87365) or 2 (PC87366) */ 144 146 #define PC87365_REG_TEMP 0x0B … … 192 194 static int pc87360_detach_client(struct i2c_client *client); 193 195 194 static int pc87360_read_value(struct pc87360_data *data, int ldi, u8 reg); 195 static int pc87360_write_value(struct pc87360_data *data, int ldi, u8 reg, 196 u8 value); 196 static int pc87360_read_value(struct pc87360_data *data, u8 ldi, u8 bank, 197 u8 reg); 198 static void pc87360_write_value(struct pc87360_data *data, u8 ldi, u8 bank, 199 u8 reg, u8 value); 197 200 static void pc87360_update_client(struct i2c_client *client); 198 201 static int pc87360_find(u8 *devid, int *address); … … 463 466 "ctrl=%d inv=%d\n", (fanconf[0]>>8)&1, 464 467 (fanconf[0]>>9)&1, (fanconf[0]>>10)&1); 465 }466 468 #endif 469 } 467 470 } 468 471 … … 598 601 } 599 602 603 #define LD_FAN 0 604 #define LD_IN 1 605 #define LD_TEMP 2 606 600 607 /* ldi is the logical device index: 601 0: fans 602 1: voltages 603 2: temperatures */ 604 static int pc87360_read_value(struct pc87360_data *data, int ldi, u8 reg) 608 bank is for voltages and temperatures only. */ 609 static int pc87360_read_value(struct pc87360_data *data, u8 ldi, u8 bank, 610 u8 reg) 605 611 { 606 612 int res; 607 613 608 614 down(&(data->lock)); 615 if (bank != NO_BANK) { 616 outb_p(bank, data->address[ldi] + PC87365_REG_BANK); 617 } 609 618 res = inb_p(data->address[ldi] + reg); 610 619 up(&(data->lock)); … … 612 621 } 613 622 614 static int pc87360_write_value(struct pc87360_data *data, int ldi, u8 reg,615 u8 value)623 static void pc87360_write_value(struct pc87360_data *data, u8 ldi, u8 bank, 624 u8 reg, u8 value) 616 625 { 617 626 down(&(data->lock)); 627 if (bank != NO_BANK) { 628 outb_p(bank, data->address[ldi] + PC87365_REG_BANK); 629 } 618 630 outb_p(value, data->address[ldi] + reg); 619 631 up(&(data->lock)); 620 return 0;621 632 } 622 633 … … 624 635 { 625 636 struct pc87360_data *data = client->data; 626 inti;637 u8 i; 627 638 628 639 down(&data->update_lock); … … 636 647 /* Fans */ 637 648 for (i = 0; i < data->fannr; i++) { 638 data->fan[i] = pc87360_read_value(data, 0, 639 PC87360_REG_FAN(i)); 640 data->fan_min[i] = pc87360_read_value(data, 0, 641 PC87360_REG_FAN_MIN(i)); 642 data->fan_status[i] = pc87360_read_value(data, 0, 649 data->fan[i] = pc87360_read_value(data, LD_FAN, 650 NO_BANK, PC87360_REG_FAN(i)); 651 data->fan_min[i] = pc87360_read_value(data, LD_FAN, 652 NO_BANK, PC87360_REG_FAN_MIN(i)); 653 data->fan_status[i] = pc87360_read_value(data, LD_FAN, 654 NO_BANK, 643 655 PC87360_REG_FAN_STATUS(i)); 644 data->pwm[i] = pc87360_read_value(data, 0,645 PC87360_REG_PWM(i));656 data->pwm[i] = pc87360_read_value(data, LD_FAN, 657 NO_BANK, PC87360_REG_PWM(i)); 646 658 } 647 659 648 660 /* Voltages */ 649 661 for (i = 0; i < data->innr; i++) { 650 pc87360_write_value(data, 1, PC87365_REG_IN_BANK, i); 651 data->in_status[i] = pc87360_read_value(data, 1, 662 data->in_status[i] = pc87360_read_value(data, LD_IN, i, 652 663 PC87365_REG_IN_STATUS); 653 664 /* Clear bits */ 654 pc87360_write_value(data, 1, PC87365_REG_IN_STATUS, 665 pc87360_write_value(data, LD_IN, i, 666 PC87365_REG_IN_STATUS, 655 667 data->in_status[i] | 0x86); 656 668 if (data->in_status[i] & 0x01) { 657 data->in[i] = pc87360_read_value(data, 1, 658 PC87365_REG_IN); 659 data->in_min[i] = pc87360_read_value(data, 1, 669 data->in[i] = pc87360_read_value(data, LD_IN, 670 i, PC87365_REG_IN); 671 data->in_min[i] = pc87360_read_value(data, 672 LD_IN, i, 660 673 PC87365_REG_IN_MIN); 661 data->in_max[i] = pc87360_read_value(data, 1, 674 data->in_max[i] = pc87360_read_value(data, 675 LD_IN, i, 662 676 PC87365_REG_IN_MAX); 663 677 } 664 data->in_alarms = pc87360_read_value(data, 1,665 PC87365_REG_IN_ALARMS1)666 | (pc87360_read_value(data, 1,667 PC87365_REG_IN_ALARMS2) << 8);668 }678 } 679 data->in_alarms = pc87360_read_value(data, LD_IN, NO_BANK, 680 PC87365_REG_IN_ALARMS1) 681 | (pc87360_read_value(data, LD_IN, NO_BANK, 682 PC87365_REG_IN_ALARMS2) << 8); 669 683 670 684 /* Temperatures */ 671 685 for (i = 0; i < data->tempnr; i++) { 672 pc87360_write_value(data, 2, PC87365_REG_TEMP_BANK, i);673 data->temp_status[i] = pc87360_read_value(data, 2,686 data->temp_status[i] = pc87360_read_value(data, 687 LD_TEMP, i, 674 688 PC87365_REG_TEMP_STATUS); 675 689 /* Clear bits */ 676 pc87360_write_value(data, 2, PC87365_REG_TEMP_STATUS, 690 pc87360_write_value(data, LD_TEMP, i, 691 PC87365_REG_TEMP_STATUS, 677 692 data->temp_status[i] | 0xCE); 678 693 if (data->temp_status[i] & 0x01) { 679 data->temp[i] = pc87360_read_value(data, 2, 694 data->temp[i] = pc87360_read_value(data, 695 LD_TEMP, i, 680 696 PC87365_REG_TEMP); 681 data->temp_min[i] = pc87360_read_value(data, 2, 697 data->temp_min[i] = pc87360_read_value(data, 698 LD_TEMP, i, 682 699 PC87365_REG_TEMP_MIN); 683 data->temp_max[i] = pc87360_read_value(data, 2, 700 data->temp_max[i] = pc87360_read_value(data, 701 LD_TEMP, i, 684 702 PC87365_REG_TEMP_MAX); 685 data->temp_crit[i] = pc87360_read_value(data, 2, 703 data->temp_crit[i] = pc87360_read_value(data, 704 LD_TEMP, i, 686 705 PC87365_REG_TEMP_CRIT); 687 706 } 688 data->temp_alarms = pc87360_read_value(data, 2,689 PC87365_REG_TEMP_ALARMS);690 }707 } 708 data->temp_alarms = pc87360_read_value(data, LD_TEMP, NO_BANK, 709 PC87365_REG_TEMP_ALARMS); 691 710 692 711 data->last_updated = jiffies; … … 736 755 data->fan_min[nr] = FAN_TO_REG(results[0], 737 756 FAN_DIV_FROM_REG(data->fan_status[nr])); 738 pc87360_write_value(data, 0, PC87360_REG_FAN_MIN(nr), 757 pc87360_write_value(data, LD_FAN, NO_BANK, 758 PC87360_REG_FAN_MIN(nr), 739 759 data->fan_min[nr]); 740 760 } … … 765 785 data->fan_status[i] = (data->fan_status[i] & 0x9F) 766 786 | FAN_DIV_TO_REG(results[i]); 767 pc87360_write_value(data, 0, PC87360_REG_FAN_STATUS(i), 787 pc87360_write_value(data, LD_FAN, NO_BANK, 788 PC87360_REG_FAN_STATUS(i), 768 789 data->fan_status[i]); 769 790 data->fan_min[i] = FAN_TO_REG(fan_min, 770 791 FAN_DIV_FROM_REG(data->fan_status[i])); 771 pc87360_write_value(data, 0, PC87360_REG_FAN_MIN(i), 792 pc87360_write_value(data, LD_FAN, NO_BANK, 793 PC87360_REG_FAN_MIN(i), 772 794 data->fan_min[i]); 773 795 } … … 795 817 data->pwm[nr] = PWM_TO_REG(results[0], 796 818 FAN_CONFIG_INVERT(data->fan_conf[0], nr)); 797 pc87360_write_value(data, 0, PC87360_REG_PWM(nr), 819 pc87360_write_value(data, LD_FAN, NO_BANK, 820 PC87360_REG_PWM(nr), 798 821 data->pwm[nr]); 799 822 } … … 834 857 if (*nrels_mag >= 1) { 835 858 data->in_min[nr] = IN_TO_REG(results[0]); 836 pc87360_write_value(data, 1, PC87365_REG_IN_BANK, nr);837 pc87360_write_value(data, 1,PC87365_REG_IN_MIN,859 pc87360_write_value(data, LD_IN, nr, 860 PC87365_REG_IN_MIN, 838 861 data->in_min[nr]); 839 862 } 840 863 if (*nrels_mag >= 2) { 841 864 data->in_max[nr] = IN_TO_REG(results[1]); 842 pc87360_write_value(data, 1, PC87365_REG_IN_MAX, 865 pc87360_write_value(data, LD_IN, nr, 866 PC87365_REG_IN_MAX, 843 867 data->in_max[nr]); 844 868 } … … 881 905 return; 882 906 if (*nrels_mag >= 1) { 883 pc87360_write_value(data, 2, PC87365_REG_TEMP_BANK, nr);884 907 data->temp_max[nr] = TEMP_TO_REG(results[0]); 885 pc87360_write_value(data, 2, PC87365_REG_TEMP_MAX, 908 pc87360_write_value(data, LD_TEMP, nr, 909 PC87365_REG_TEMP_MAX, 886 910 data->temp_max[nr]); 887 911 } 888 912 if (*nrels_mag >= 2) { 889 913 data->temp_min[nr] = TEMP_TO_REG(results[1]); 890 pc87360_write_value(data, 2, PC87365_REG_TEMP_MIN, 914 pc87360_write_value(data, LD_TEMP, nr, 915 PC87365_REG_TEMP_MIN, 891 916 data->temp_min[nr]); 892 917 } 893 918 if (*nrels_mag >= 3) { 894 919 data->temp_crit[nr] = TEMP_TO_REG(results[2]); 895 pc87360_write_value(data, 2, PC87365_REG_TEMP_CRIT, 920 pc87360_write_value(data, LD_TEMP, nr, 921 PC87365_REG_TEMP_CRIT, 896 922 data->temp_crit[nr]); 897 923 }
