Changeset 1890
- Timestamp:
- 07/21/03 11:15:19 (10 years ago)
- Files:
-
- 1 modified
-
lm-sensors/trunk/kernel/chips/lm83.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lm-sensors/trunk/kernel/chips/lm83.c
r1863 r1890 75 75 76 76 /* 77 * Conversions and initial values77 * Conversions, initial values and various macros 78 78 * The LM83 uses normal signed 8-bit values. We use the default initial 79 79 * values. … … 82 82 #define TEMP_FROM_REG(val) (val > 127 ? val-256 : val) 83 83 #define TEMP_TO_REG(val) (val < 0 ? val+256 : val) 84 84 85 #define LM83_INIT_HIGH 127 86 87 static const u8 LM83_REG_W_HIGH[] = { 88 LM83_REG_W_LOCAL_HIGH, 89 LM83_REG_W_REMOTE1_HIGH, 90 LM83_REG_W_REMOTE2_HIGH, 91 LM83_REG_W_REMOTE3_HIGH 92 }; 85 93 86 94 /* … … 93 101 static void lm83_init_client(struct i2c_client *client); 94 102 static int lm83_detach_client(struct i2c_client *client); 95 static int lm83_read_value(struct i2c_client *client, u8 reg); 96 static int lm83_write_value(struct i2c_client *client, u8 reg, u8 value); 97 static void lm83_local_temp(struct i2c_client *client, int operation, int 98 ctl_name, int *nrels_mag, long *results); 99 static void lm83_remote1_temp(struct i2c_client *client, int operation, int 100 ctl_name, int *nrels_mag, long *results); 101 static void lm83_remote2_temp(struct i2c_client *client, int operation, int 102 ctl_name, int *nrels_mag, long *results); 103 static void lm83_remote3_temp(struct i2c_client *client, int operation, int 103 static void lm83_temp(struct i2c_client *client, int operation, int 104 104 ctl_name, int *nrels_mag, long *results); 105 105 … … 130 130 131 131 /* registers values */ 132 u8 local_temp, local_high; 133 u8 remote1_temp, remote1_high; 134 u8 remote2_temp, remote2_high; 135 u8 remote3_temp, remote3_high; 132 u8 temp[4], temp_high[4]; 136 133 }; 137 134 … … 154 151 { 155 152 {LM83_SYSCTL_LOCAL_TEMP, "temp1", NULL, 0, 0644, NULL, 156 &i2c_proc_real, &i2c_sysctl_real, NULL, &lm83_ local_temp},153 &i2c_proc_real, &i2c_sysctl_real, NULL, &lm83_temp}, 157 154 {LM83_SYSCTL_REMOTE1_TEMP, "temp2", NULL, 0, 0644, NULL, 158 &i2c_proc_real, &i2c_sysctl_real, NULL, &lm83_ remote1_temp},155 &i2c_proc_real, &i2c_sysctl_real, NULL, &lm83_temp}, 159 156 {LM83_SYSCTL_REMOTE2_TEMP, "temp3", NULL, 0, 0644, NULL, 160 &i2c_proc_real, &i2c_sysctl_real, NULL, &lm83_ remote2_temp},157 &i2c_proc_real, &i2c_sysctl_real, NULL, &lm83_temp}, 161 158 {LM83_SYSCTL_REMOTE3_TEMP, "temp4", NULL, 0, 0644, NULL, 162 &i2c_proc_real, &i2c_sysctl_real, NULL, &lm83_ remote3_temp},159 &i2c_proc_real, &i2c_sysctl_real, NULL, &lm83_temp}, 163 160 {0} 164 161 }; … … 243 240 if (kind < 0) /* detection */ 244 241 { 245 if ((( lm83_read_value(new_client, LM83_REG_R_STATUS1)242 if (((i2c_smbus_read_byte_data(new_client, LM83_REG_R_STATUS1) 246 243 & 0xA8) != 0x00) 247 || (( lm83_read_value(new_client, LM83_REG_R_STATUS2)244 || ((i2c_smbus_read_byte_data(new_client, LM83_REG_R_STATUS2) 248 245 & 0x48) != 0x00) 249 || (( lm83_read_value(new_client, LM83_REG_R_CONFIG)246 || ((i2c_smbus_read_byte_data(new_client, LM83_REG_R_CONFIG) 250 247 & 0x41) != 0x00)) 251 248 { … … 263 260 unsigned char man_id; 264 261 265 man_id = lm83_read_value(new_client, LM83_REG_R_MAN_ID);262 man_id = i2c_smbus_read_byte_data(new_client, LM83_REG_R_MAN_ID); 266 263 if (man_id == 0x01) /* National Semiconductor */ 267 264 kind = lm83; … … 334 331 static void lm83_init_client(struct i2c_client *client) 335 332 { 336 lm83_write_value(client, LM83_REG_W_LOCAL_HIGH,333 i2c_smbus_write_byte_data(client, LM83_REG_W_LOCAL_HIGH, 337 334 TEMP_TO_REG(LM83_INIT_HIGH)); 338 lm83_write_value(client, LM83_REG_W_REMOTE1_HIGH,335 i2c_smbus_write_byte_data(client, LM83_REG_W_REMOTE1_HIGH, 339 336 TEMP_TO_REG(LM83_INIT_HIGH)); 340 lm83_write_value(client, LM83_REG_W_REMOTE2_HIGH,337 i2c_smbus_write_byte_data(client, LM83_REG_W_REMOTE2_HIGH, 341 338 TEMP_TO_REG(LM83_INIT_HIGH)); 342 lm83_write_value(client, LM83_REG_W_REMOTE3_HIGH,339 i2c_smbus_write_byte_data(client, LM83_REG_W_REMOTE3_HIGH, 343 340 TEMP_TO_REG(LM83_INIT_HIGH)); 344 341 } … … 360 357 } 361 358 362 static int lm83_read_value(struct i2c_client *client, u8 reg)363 {364 return i2c_smbus_read_byte_data(client, reg);365 }366 367 static int lm83_write_value(struct i2c_client *client, u8 reg, u8 value)368 {369 return i2c_smbus_write_byte_data(client, reg, value);370 }371 372 359 static void lm83_update_client(struct i2c_client *client) 373 360 { … … 382 369 printk("lm83.o: Updating LM83 data.\n"); 383 370 #endif 384 data-> local_temp=385 lm83_read_value(client, LM83_REG_R_LOCAL_TEMP);386 data-> remote1_temp=387 lm83_read_value(client, LM83_REG_R_REMOTE1_TEMP);388 data-> remote2_temp=389 lm83_read_value(client, LM83_REG_R_REMOTE2_TEMP);390 data-> remote3_temp=391 lm83_read_value(client, LM83_REG_R_REMOTE3_TEMP);392 data-> local_high=393 lm83_read_value(client, LM83_REG_R_LOCAL_HIGH);394 data-> remote1_high=395 lm83_read_value(client, LM83_REG_R_REMOTE1_HIGH);396 data-> remote2_high=397 lm83_read_value(client, LM83_REG_R_REMOTE2_HIGH);398 data-> remote3_high=399 lm83_read_value(client, LM83_REG_R_REMOTE3_HIGH);371 data->temp[0] = 372 i2c_smbus_read_byte_data(client, LM83_REG_R_LOCAL_TEMP); 373 data->temp[1] = 374 i2c_smbus_read_byte_data(client, LM83_REG_R_REMOTE1_TEMP); 375 data->temp[2] = 376 i2c_smbus_read_byte_data(client, LM83_REG_R_REMOTE2_TEMP); 377 data->temp[3] = 378 i2c_smbus_read_byte_data(client, LM83_REG_R_REMOTE3_TEMP); 379 data->temp_high[0] = 380 i2c_smbus_read_byte_data(client, LM83_REG_R_LOCAL_HIGH); 381 data->temp_high[1] = 382 i2c_smbus_read_byte_data(client, LM83_REG_R_REMOTE1_HIGH); 383 data->temp_high[2] = 384 i2c_smbus_read_byte_data(client, LM83_REG_R_REMOTE2_HIGH); 385 data->temp_high[3] = 386 i2c_smbus_read_byte_data(client, LM83_REG_R_REMOTE3_HIGH); 400 387 data->last_updated = jiffies; 401 388 data->valid = 1; … … 405 392 } 406 393 407 static void lm83_ local_temp(struct i2c_client *client, int operation, int394 static void lm83_temp(struct i2c_client *client, int operation, int 408 395 ctl_name, int *nrels_mag, long *results) 409 396 { 410 397 struct lm83_data *data = client->data; 398 int nr = ctl_name - LM83_SYSCTL_LOCAL_TEMP; 399 411 400 if (operation == SENSORS_PROC_REAL_INFO) 412 *nrels_mag = 0; 401 *nrels_mag = 0; /* magnitude */ 413 402 else if (operation == SENSORS_PROC_REAL_READ) 414 403 { 415 404 lm83_update_client(client); 416 results[0] = TEMP_FROM_REG(data-> local_high);417 results[1] = TEMP_FROM_REG(data-> local_temp);405 results[0] = TEMP_FROM_REG(data->temp_high[nr]); 406 results[1] = TEMP_FROM_REG(data->temp[nr]); 418 407 *nrels_mag = 2; 419 408 } … … 422 411 if (*nrels_mag >= 1) 423 412 { 424 data->local_high = TEMP_TO_REG(results[0]); 425 lm83_write_value(client, LM83_REG_W_LOCAL_HIGH, 426 data->local_high); 427 } 428 } 429 } 430 431 static void lm83_remote1_temp(struct i2c_client *client, int operation, int 432 ctl_name, int *nrels_mag, long *results) 433 { 434 struct lm83_data *data = client->data; 435 if (operation == SENSORS_PROC_REAL_INFO) 436 *nrels_mag = 0; 437 else if (operation == SENSORS_PROC_REAL_READ) 438 { 439 lm83_update_client(client); 440 results[0] = TEMP_FROM_REG(data->remote1_high); 441 results[1] = TEMP_FROM_REG(data->remote1_temp); 442 *nrels_mag = 2; 443 } 444 else if (operation == SENSORS_PROC_REAL_WRITE) 445 { 446 if (*nrels_mag >= 1) 447 { 448 data->remote1_high = TEMP_TO_REG(results[0]); 449 lm83_write_value(client, LM83_REG_W_REMOTE1_HIGH, 450 data->remote1_high); 451 } 452 } 453 } 454 455 static void lm83_remote2_temp(struct i2c_client *client, int operation, int 456 ctl_name, int *nrels_mag, long *results) 457 { 458 struct lm83_data *data = client->data; 459 if (operation == SENSORS_PROC_REAL_INFO) 460 *nrels_mag = 0; 461 else if (operation == SENSORS_PROC_REAL_READ) 462 { 463 lm83_update_client(client); 464 results[0] = TEMP_FROM_REG(data->remote2_high); 465 results[1] = TEMP_FROM_REG(data->remote2_temp); 466 *nrels_mag = 2; 467 } 468 else if (operation == SENSORS_PROC_REAL_WRITE) 469 { 470 if (*nrels_mag >= 1) 471 { 472 data->remote2_high = TEMP_TO_REG(results[0]); 473 lm83_write_value(client, LM83_REG_W_REMOTE2_HIGH, 474 data->remote2_high); 475 } 476 } 477 } 478 479 static void lm83_remote3_temp(struct i2c_client *client, int operation, int 480 ctl_name, int *nrels_mag, long *results) 481 { 482 struct lm83_data *data = client->data; 483 if (operation == SENSORS_PROC_REAL_INFO) 484 *nrels_mag = 0; 485 else if (operation == SENSORS_PROC_REAL_READ) 486 { 487 lm83_update_client(client); 488 results[0] = TEMP_FROM_REG(data->remote3_high); 489 results[1] = TEMP_FROM_REG(data->remote3_temp); 490 *nrels_mag = 2; 491 } 492 else if (operation == SENSORS_PROC_REAL_WRITE) 493 { 494 if (*nrels_mag >= 1) 495 { 496 data->remote3_high = TEMP_TO_REG(results[0]); 497 lm83_write_value(client, LM83_REG_W_REMOTE3_HIGH, 498 data->remote3_high); 413 data->temp_high[nr] = TEMP_TO_REG(results[0]); 414 i2c_smbus_write_byte_data(client, LM83_REG_W_HIGH[nr], 415 data->temp_high[nr]); 499 416 } 500 417 }
