Changeset 86

Show
Ignore:
Timestamp:
12/18/98 03:43:48 (14 years ago)
Author:
phil
Message:

(Phil) Temp2 and 3 are working!!! :') No mutex on the bank setting
yet, though.

Location:
lm-sensors/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lm-sensors/trunk/kernel/chips/w83781d.c

    r85 r86  
    5353 
    5454#define W83781D_REG_TEMP23 0x50 
     55#define W83781D_REG_TEMP_HYST23 0x53 
     56#define W83781D_REG_TEMP_CONFIG23 0x52 
    5557#define W83781D_REG_TEMP_OVER23 0x55 
    56 #define W83781D_REG_TEMP_HYST23 0x53 
    5758#define W83781D_REG_TEMP 0x27 
    5859#define W83781D_REG_TEMP_OVER 0x39 
     
    657658  w83781d_write_value(client,W83781D_REG_FAN_MIN(3),FAN_TO_REG(W83781D_INIT_FAN_MIN_3)); 
    658659  /* Init Temp Sensor1 */ 
    659   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x01);/* Switch Banks! */ 
     660  w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x00);/* Switch Banks! */ 
    660661  w83781d_write_value(client,W83781D_REG_TEMP_OVER,TEMP_TO_REG(W83781D_INIT_TEMP_OVER)); 
    661662  w83781d_write_value(client,W83781D_REG_TEMP_HYST,TEMP_TO_REG(W83781D_INIT_TEMP_HYST)); 
     663  w83781d_write_value(client,W83781D_REG_TEMP_CONFIG,0x00); 
    662664  /* Init Temp Sensor2 */ 
     665  w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x01);/* Switch Banks! */ 
     666  w83781d_write_value(client,W83781D_REG_TEMP_OVER23,TEMP_TO_REG(W83781D_INIT_TEMP_OVER)); 
     667  w83781d_write_value(client,W83781D_REG_TEMP_OVER23 + 1,0); 
     668  w83781d_write_value(client,W83781D_REG_TEMP_HYST23,TEMP_TO_REG(W83781D_INIT_TEMP_HYST)); 
     669  w83781d_write_value(client,W83781D_REG_TEMP_HYST23 + 1,0); 
     670  w83781d_write_value(client,W83781D_REG_TEMP_CONFIG23,0x00); 
     671  /* Init Temp Sensor3 */ 
    663672  w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x02);/* Switch Banks! */ 
    664673  w83781d_write_value(client,W83781D_REG_TEMP_OVER23,TEMP_TO_REG(W83781D_INIT_TEMP_OVER)); 
     
    666675  w83781d_write_value(client,W83781D_REG_TEMP_HYST23,TEMP_TO_REG(W83781D_INIT_TEMP_HYST)); 
    667676  w83781d_write_value(client,W83781D_REG_TEMP_HYST23 + 1,0); 
    668   w83781d_write_value(client,W83781D_REG_TEMP_CONFIG,0x00); 
    669   /* Init Temp Sensor3 */ 
    670   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x04);/* Switch Banks! */ 
    671   w83781d_write_value(client,W83781D_REG_TEMP_OVER23,TEMP_TO_REG(W83781D_INIT_TEMP_OVER)); 
    672   w83781d_write_value(client,W83781D_REG_TEMP_OVER23 + 1,0); 
    673   w83781d_write_value(client,W83781D_REG_TEMP_HYST23,TEMP_TO_REG(W83781D_INIT_TEMP_HYST)); 
    674   w83781d_write_value(client,W83781D_REG_TEMP_HYST23 + 1,0); 
    675   w83781d_write_value(client,W83781D_REG_TEMP_CONFIG,0x00); 
     677  w83781d_write_value(client,W83781D_REG_TEMP_CONFIG23,0x00); 
    676678  w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x00);/* Switch Banks! */ 
    677679 
     
    704706      data->fan_min[i-1] = w83781d_read_value(client,W83781D_REG_FAN_MIN(i)); 
    705707    } 
    706     w83781d_write_value(client,W83781D_REG_TEMP_SEL,1);/* Switch Banks!! */ 
    707708    data->temp[0] = w83781d_read_value(client,W83781D_REG_TEMP); 
    708709    data->temp_over[0] = w83781d_read_value(client,W83781D_REG_TEMP_OVER); 
    709710    data->temp_hyst[0] = w83781d_read_value(client,W83781D_REG_TEMP_HYST); 
    710     for (i = 1; i <= 2; i++) { 
    711       w83781d_write_value(client,W83781D_REG_TEMP_SEL,1 << i);/* Switch Banks!! */ 
    712       data->temp[i] = w83781d_read_value(client,W83781D_REG_TEMP23); 
    713       data->temp_over[i] = w83781d_read_value(client,W83781D_REG_TEMP_OVER23); 
    714       data->temp_hyst[i] = w83781d_read_value(client,W83781D_REG_TEMP_HYST23); 
    715     } 
     711    w83781d_write_value(client,W83781D_REG_TEMP_SEL,1);/* Switch Banks!! */ 
     712    data->temp[1] = w83781d_read_value(client,W83781D_REG_TEMP23); 
     713    data->temp_over[1] = w83781d_read_value(client,W83781D_REG_TEMP_OVER23); 
     714    data->temp_hyst[1] = w83781d_read_value(client,W83781D_REG_TEMP_HYST23); 
     715    w83781d_write_value(client,W83781D_REG_TEMP_SEL,2);/* Switch Banks!! */ 
     716    data->temp[2] = w83781d_read_value(client,W83781D_REG_TEMP23); 
     717    data->temp_over[2] = w83781d_read_value(client,W83781D_REG_TEMP_OVER23); 
     718    data->temp_hyst[2] = w83781d_read_value(client,W83781D_REG_TEMP_HYST23); 
    716719    w83781d_write_value(client,W83781D_REG_TEMP_SEL,0);/* Switch Banks!! */ 
    717720    i = w83781d_read_value(client,W83781D_REG_VID_FANDIV); 
     
    799802  else if (operation == SENSORS_PROC_REAL_READ) { 
    800803    w83781d_update_client(client); 
    801     results[0] = TEMP_FROM_REG(data->temp_over[tempnum]); 
    802     results[1] = TEMP_FROM_REG(data->temp_hyst[tempnum]); 
    803     results[2] = TEMP_FROM_REG(data->temp[tempnum]); 
     804    results[0] = TEMP_FROM_REG(data->temp_over[tempnum - 1]); 
     805    results[1] = TEMP_FROM_REG(data->temp_hyst[tempnum - 1]); 
     806    results[2] = TEMP_FROM_REG(data->temp[tempnum - 1]); 
    804807    *nrels_mag = 3; 
    805808  } else if (operation == SENSORS_PROC_REAL_WRITE) { 
    806     if (tempnum >1) { 
     809    if (tempnum == 3) { 
     810     w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x02);/* Switch Banks!! */ 
    807811     if (*nrels_mag >= 1) { 
    808        data->temp_over[tempnum] = TEMP_TO_REG(results[0]); 
    809        w83781d_write_value(client,W83781D_REG_TEMP_OVER23,data->temp_over[tempnum]); 
     812       data->temp_over[2] = TEMP_TO_REG(results[0]); 
     813       w83781d_write_value(client,W83781D_REG_TEMP_OVER23,data->temp_over[2]); 
    810814       w83781d_write_value(client,W83781D_REG_TEMP_OVER23 + 1,0); 
    811815     } 
    812816     if (*nrels_mag >= 2) { 
    813        data->temp_hyst[tempnum] = TEMP_TO_REG(results[1]); 
    814        w83781d_write_value(client,W83781D_REG_TEMP_HYST23,data->temp_hyst[tempnum]); 
     817       data->temp_hyst[2] = TEMP_TO_REG(results[1]); 
     818       w83781d_write_value(client,W83781D_REG_TEMP_HYST23,data->temp_hyst[2]); 
    815819       w83781d_write_value(client,W83781D_REG_TEMP_HYST23 + 1,0); 
    816820     } 
     821     w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x0);/* Switch Banks!! */ 
     822    } else if (tempnum == 2) { 
     823     w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x01);/* Switch Banks!! */ 
     824     if (*nrels_mag >= 1) { 
     825       data->temp_over[1] = TEMP_TO_REG(results[0]); 
     826       w83781d_write_value(client,W83781D_REG_TEMP_OVER23,data->temp_over[1]); 
     827       w83781d_write_value(client,W83781D_REG_TEMP_OVER23 + 1,0); 
     828     } 
     829     if (*nrels_mag >= 2) { 
     830       data->temp_hyst[1] = TEMP_TO_REG(results[1]); 
     831       w83781d_write_value(client,W83781D_REG_TEMP_HYST23,data->temp_hyst[1]); 
     832       w83781d_write_value(client,W83781D_REG_TEMP_HYST23 + 1,0); 
     833     } 
     834     w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x0);/* Switch Banks!! */ 
    817835    } else { 
    818836     if (*nrels_mag >= 1) { 
    819        data->temp_over[tempnum] = TEMP_TO_REG(results[0]); 
    820        w83781d_write_value(client,W83781D_REG_TEMP_OVER,data->temp_over[tempnum]); 
     837       data->temp_over[0] = TEMP_TO_REG(results[0]); 
     838       w83781d_write_value(client,W83781D_REG_TEMP_OVER,data->temp_over[0]); 
    821839     } 
    822840     if (*nrels_mag >= 2) { 
    823        data->temp_hyst[tempnum] = TEMP_TO_REG(results[1]); 
    824        w83781d_write_value(client,W83781D_REG_TEMP_HYST,data->temp_hyst[tempnum]); 
     841       data->temp_hyst[0] = TEMP_TO_REG(results[1]); 
     842       w83781d_write_value(client,W83781D_REG_TEMP_HYST,data->temp_hyst[0]); 
    825843     } 
    826844    } 
     
    828846} 
    829847 
     848/* Change back! */ 
    830849 
    831850void w83781d_temp1(struct i2c_client *client, int operation, int ctl_name, 
    832851               int *nrels_mag, long *results) { 
    833852 
    834   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x01);/* Switch Banks!! */ 
    835853  w83781d_temp(client,operation,ctl_name,nrels_mag,results,1); 
    836   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x0);/* Switch Banks!! */ 
    837854} 
    838855 
     
    841858               int *nrels_mag, long *results) { 
    842859                
    843   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x02);/* Switch Banks!! */ 
    844860  w83781d_temp(client,operation,ctl_name,nrels_mag,results,2); 
    845   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x00);/* Switch Banks!! */ 
    846861} 
    847862 
     
    850865               int *nrels_mag, long *results) { 
    851866                
    852   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x04);/* Switch Banks!! */ 
    853867  w83781d_temp(client,operation,ctl_name,nrels_mag,results,3); 
    854   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x00);/* Switch Banks!! */ 
    855868} 
    856869 
  • lm-sensors/trunk/src/w83781d.c

    r85 r86  
    5353 
    5454#define W83781D_REG_TEMP23 0x50 
     55#define W83781D_REG_TEMP_HYST23 0x53 
     56#define W83781D_REG_TEMP_CONFIG23 0x52 
    5557#define W83781D_REG_TEMP_OVER23 0x55 
    56 #define W83781D_REG_TEMP_HYST23 0x53 
    5758#define W83781D_REG_TEMP 0x27 
    5859#define W83781D_REG_TEMP_OVER 0x39 
     
    657658  w83781d_write_value(client,W83781D_REG_FAN_MIN(3),FAN_TO_REG(W83781D_INIT_FAN_MIN_3)); 
    658659  /* Init Temp Sensor1 */ 
    659   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x01);/* Switch Banks! */ 
     660  w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x00);/* Switch Banks! */ 
    660661  w83781d_write_value(client,W83781D_REG_TEMP_OVER,TEMP_TO_REG(W83781D_INIT_TEMP_OVER)); 
    661662  w83781d_write_value(client,W83781D_REG_TEMP_HYST,TEMP_TO_REG(W83781D_INIT_TEMP_HYST)); 
     663  w83781d_write_value(client,W83781D_REG_TEMP_CONFIG,0x00); 
    662664  /* Init Temp Sensor2 */ 
     665  w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x01);/* Switch Banks! */ 
     666  w83781d_write_value(client,W83781D_REG_TEMP_OVER23,TEMP_TO_REG(W83781D_INIT_TEMP_OVER)); 
     667  w83781d_write_value(client,W83781D_REG_TEMP_OVER23 + 1,0); 
     668  w83781d_write_value(client,W83781D_REG_TEMP_HYST23,TEMP_TO_REG(W83781D_INIT_TEMP_HYST)); 
     669  w83781d_write_value(client,W83781D_REG_TEMP_HYST23 + 1,0); 
     670  w83781d_write_value(client,W83781D_REG_TEMP_CONFIG23,0x00); 
     671  /* Init Temp Sensor3 */ 
    663672  w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x02);/* Switch Banks! */ 
    664673  w83781d_write_value(client,W83781D_REG_TEMP_OVER23,TEMP_TO_REG(W83781D_INIT_TEMP_OVER)); 
     
    666675  w83781d_write_value(client,W83781D_REG_TEMP_HYST23,TEMP_TO_REG(W83781D_INIT_TEMP_HYST)); 
    667676  w83781d_write_value(client,W83781D_REG_TEMP_HYST23 + 1,0); 
    668   w83781d_write_value(client,W83781D_REG_TEMP_CONFIG,0x00); 
    669   /* Init Temp Sensor3 */ 
    670   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x04);/* Switch Banks! */ 
    671   w83781d_write_value(client,W83781D_REG_TEMP_OVER23,TEMP_TO_REG(W83781D_INIT_TEMP_OVER)); 
    672   w83781d_write_value(client,W83781D_REG_TEMP_OVER23 + 1,0); 
    673   w83781d_write_value(client,W83781D_REG_TEMP_HYST23,TEMP_TO_REG(W83781D_INIT_TEMP_HYST)); 
    674   w83781d_write_value(client,W83781D_REG_TEMP_HYST23 + 1,0); 
    675   w83781d_write_value(client,W83781D_REG_TEMP_CONFIG,0x00); 
     677  w83781d_write_value(client,W83781D_REG_TEMP_CONFIG23,0x00); 
    676678  w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x00);/* Switch Banks! */ 
    677679 
     
    704706      data->fan_min[i-1] = w83781d_read_value(client,W83781D_REG_FAN_MIN(i)); 
    705707    } 
    706     w83781d_write_value(client,W83781D_REG_TEMP_SEL,1);/* Switch Banks!! */ 
    707708    data->temp[0] = w83781d_read_value(client,W83781D_REG_TEMP); 
    708709    data->temp_over[0] = w83781d_read_value(client,W83781D_REG_TEMP_OVER); 
    709710    data->temp_hyst[0] = w83781d_read_value(client,W83781D_REG_TEMP_HYST); 
    710     for (i = 1; i <= 2; i++) { 
    711       w83781d_write_value(client,W83781D_REG_TEMP_SEL,1 << i);/* Switch Banks!! */ 
    712       data->temp[i] = w83781d_read_value(client,W83781D_REG_TEMP23); 
    713       data->temp_over[i] = w83781d_read_value(client,W83781D_REG_TEMP_OVER23); 
    714       data->temp_hyst[i] = w83781d_read_value(client,W83781D_REG_TEMP_HYST23); 
    715     } 
     711    w83781d_write_value(client,W83781D_REG_TEMP_SEL,1);/* Switch Banks!! */ 
     712    data->temp[1] = w83781d_read_value(client,W83781D_REG_TEMP23); 
     713    data->temp_over[1] = w83781d_read_value(client,W83781D_REG_TEMP_OVER23); 
     714    data->temp_hyst[1] = w83781d_read_value(client,W83781D_REG_TEMP_HYST23); 
     715    w83781d_write_value(client,W83781D_REG_TEMP_SEL,2);/* Switch Banks!! */ 
     716    data->temp[2] = w83781d_read_value(client,W83781D_REG_TEMP23); 
     717    data->temp_over[2] = w83781d_read_value(client,W83781D_REG_TEMP_OVER23); 
     718    data->temp_hyst[2] = w83781d_read_value(client,W83781D_REG_TEMP_HYST23); 
    716719    w83781d_write_value(client,W83781D_REG_TEMP_SEL,0);/* Switch Banks!! */ 
    717720    i = w83781d_read_value(client,W83781D_REG_VID_FANDIV); 
     
    799802  else if (operation == SENSORS_PROC_REAL_READ) { 
    800803    w83781d_update_client(client); 
    801     results[0] = TEMP_FROM_REG(data->temp_over[tempnum]); 
    802     results[1] = TEMP_FROM_REG(data->temp_hyst[tempnum]); 
    803     results[2] = TEMP_FROM_REG(data->temp[tempnum]); 
     804    results[0] = TEMP_FROM_REG(data->temp_over[tempnum - 1]); 
     805    results[1] = TEMP_FROM_REG(data->temp_hyst[tempnum - 1]); 
     806    results[2] = TEMP_FROM_REG(data->temp[tempnum - 1]); 
    804807    *nrels_mag = 3; 
    805808  } else if (operation == SENSORS_PROC_REAL_WRITE) { 
    806     if (tempnum >1) { 
     809    if (tempnum == 3) { 
     810     w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x02);/* Switch Banks!! */ 
    807811     if (*nrels_mag >= 1) { 
    808        data->temp_over[tempnum] = TEMP_TO_REG(results[0]); 
    809        w83781d_write_value(client,W83781D_REG_TEMP_OVER23,data->temp_over[tempnum]); 
     812       data->temp_over[2] = TEMP_TO_REG(results[0]); 
     813       w83781d_write_value(client,W83781D_REG_TEMP_OVER23,data->temp_over[2]); 
    810814       w83781d_write_value(client,W83781D_REG_TEMP_OVER23 + 1,0); 
    811815     } 
    812816     if (*nrels_mag >= 2) { 
    813        data->temp_hyst[tempnum] = TEMP_TO_REG(results[1]); 
    814        w83781d_write_value(client,W83781D_REG_TEMP_HYST23,data->temp_hyst[tempnum]); 
     817       data->temp_hyst[2] = TEMP_TO_REG(results[1]); 
     818       w83781d_write_value(client,W83781D_REG_TEMP_HYST23,data->temp_hyst[2]); 
    815819       w83781d_write_value(client,W83781D_REG_TEMP_HYST23 + 1,0); 
    816820     } 
     821     w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x0);/* Switch Banks!! */ 
     822    } else if (tempnum == 2) { 
     823     w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x01);/* Switch Banks!! */ 
     824     if (*nrels_mag >= 1) { 
     825       data->temp_over[1] = TEMP_TO_REG(results[0]); 
     826       w83781d_write_value(client,W83781D_REG_TEMP_OVER23,data->temp_over[1]); 
     827       w83781d_write_value(client,W83781D_REG_TEMP_OVER23 + 1,0); 
     828     } 
     829     if (*nrels_mag >= 2) { 
     830       data->temp_hyst[1] = TEMP_TO_REG(results[1]); 
     831       w83781d_write_value(client,W83781D_REG_TEMP_HYST23,data->temp_hyst[1]); 
     832       w83781d_write_value(client,W83781D_REG_TEMP_HYST23 + 1,0); 
     833     } 
     834     w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x0);/* Switch Banks!! */ 
    817835    } else { 
    818836     if (*nrels_mag >= 1) { 
    819        data->temp_over[tempnum] = TEMP_TO_REG(results[0]); 
    820        w83781d_write_value(client,W83781D_REG_TEMP_OVER,data->temp_over[tempnum]); 
     837       data->temp_over[0] = TEMP_TO_REG(results[0]); 
     838       w83781d_write_value(client,W83781D_REG_TEMP_OVER,data->temp_over[0]); 
    821839     } 
    822840     if (*nrels_mag >= 2) { 
    823        data->temp_hyst[tempnum] = TEMP_TO_REG(results[1]); 
    824        w83781d_write_value(client,W83781D_REG_TEMP_HYST,data->temp_hyst[tempnum]); 
     841       data->temp_hyst[0] = TEMP_TO_REG(results[1]); 
     842       w83781d_write_value(client,W83781D_REG_TEMP_HYST,data->temp_hyst[0]); 
    825843     } 
    826844    } 
     
    828846} 
    829847 
     848/* Change back! */ 
    830849 
    831850void w83781d_temp1(struct i2c_client *client, int operation, int ctl_name, 
    832851               int *nrels_mag, long *results) { 
    833852 
    834   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x01);/* Switch Banks!! */ 
    835853  w83781d_temp(client,operation,ctl_name,nrels_mag,results,1); 
    836   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x0);/* Switch Banks!! */ 
    837854} 
    838855 
     
    841858               int *nrels_mag, long *results) { 
    842859                
    843   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x02);/* Switch Banks!! */ 
    844860  w83781d_temp(client,operation,ctl_name,nrels_mag,results,2); 
    845   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x00);/* Switch Banks!! */ 
    846861} 
    847862 
     
    850865               int *nrels_mag, long *results) { 
    851866                
    852   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x04);/* Switch Banks!! */ 
    853867  w83781d_temp(client,operation,ctl_name,nrels_mag,results,3); 
    854   w83781d_write_value(client,W83781D_REG_TEMP_SEL,0x00);/* Switch Banks!! */ 
    855868} 
    856869