Changeset 5151
- Timestamp:
- 03/19/08 15:43:04 (8 months ago)
- Files:
-
- i2c-tools/trunk/CHANGES (modified) (1 diff)
- i2c-tools/trunk/tools/i2cdump.8 (modified) (2 diffs)
- i2c-tools/trunk/tools/i2cdump.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
i2c-tools/trunk/CHANGES
r5140 r5151 11 11 i2cdump: Fix I2C block mode error code 12 12 Remove man page reference to hardware monitoring chips 13 Let the user specify a register range 13 14 i2cset: Final status messages go to stdout 14 15 Return success even when readback fails or doesn't match i2c-tools/trunk/tools/i2cdump.8
r5140 r5151 6 6 .B i2cdump 7 7 .RB [ -f ] 8 .RB [ "-r first-last" ] 8 9 .RB [ -y ] 9 10 .I i2cbus … … 30 31 kernel driver in question. It can also cause i2cdump to return invalid 31 32 results. So use at your own risk and only if you know what you're doing. 33 .TP 34 .B -r first-last 35 Limit the range of registers being accessed. This option is only available 36 with modes \fBb\fP, \fBw\fP, \fBc\fP and \fBW\fP. For mode \fBW\fP, 37 \fBfirst\fR must be even and \fBlast\fR must be odd. 32 38 .TP 33 39 .B -y i2c-tools/trunk/tools/i2cdump.c
r5073 r5151 3 3 Copyright (C) 2002-2003 Frodo Looijaard <frodol@dds.nl>, and 4 4 Mark D. Studebaker <mdsxyz123@yahoo.com> 5 Copyright (C) 2004-200 7Jean Delvare <khali@linux-fr.org>5 Copyright (C) 2004-2008 Jean Delvare <khali@linux-fr.org> 6 6 7 7 This program is free software; you can redistribute it and/or modify … … 32 32 static void help(void) 33 33 { 34 fprintf(stderr, "Syntax: i2cdump [-f] [- y] I2CBUS ADDRESS [MODE]"35 " [BANK [BANKREG]]\n"34 fprintf(stderr, "Syntax: i2cdump [-f] [-r first-last] [-y] I2CBUS " 35 "ADDRESS [MODE] [BANK [BANKREG]]\n" 36 36 " i2cdump -V\n" 37 37 " MODE is one of:\n" … … 62 62 int flags = 0; 63 63 int force = 0, yes = 0, version = 0; 64 const char *range = NULL; 65 int first = 0x00, last = 0xff; 64 66 65 67 /* handle (optional) flags first */ … … 68 70 case 'V': version = 1; break; 69 71 case 'f': force = 1; break; 72 case 'r': range = argv[1+(++flags)]; break; 70 73 case 'y': yes = 1; break; 71 74 default: … … 180 183 } 181 184 185 /* Parse optional range string */ 186 if (range) { 187 char *dash; 188 189 first = strtol(range, &dash, 0); 190 if (dash == range || *dash != '-' 191 || first < 0 || first > 0xff) { 192 fprintf(stderr, "Error: Invalid range parameter!\n"); 193 exit(1); 194 } 195 last = strtol(++dash, &end, 0); 196 if (end == dash || *end != '\0' 197 || last < first || last > 0xff) { 198 fprintf(stderr, "Error: Invalid range parameter!\n"); 199 exit(1); 200 } 201 202 /* Check mode constraints */ 203 switch (size) { 204 case I2C_SMBUS_BYTE: 205 case I2C_SMBUS_BYTE_DATA: 206 break; 207 case I2C_SMBUS_WORD_DATA: 208 if (!even || (!(first%2) && last%2)) 209 break; 210 /* Fall through */ 211 default: 212 fprintf(stderr, 213 "Error: Range parameter not compatible with selected mode!\n"); 214 exit(1); 215 } 216 } 217 182 218 file = open_i2c_dev(i2cbus, filename, 0); 183 219 if (file < 0) { … … 274 310 "register 0x%02x.\n", bank, bankreg); 275 311 } 312 if (range) { 313 fprintf(stderr, 314 "Probe range limited to 0x%02x-0x%02x.\n", 315 first, last); 316 } 276 317 277 318 fprintf(stderr, "Continue? [Y/n] "); … … 335 376 336 377 if (size == I2C_SMBUS_BYTE) { 337 res = i2c_smbus_write_byte(file, 0);378 res = i2c_smbus_write_byte(file, first); 338 379 if(res != 0) { 339 380 fprintf(stderr, "Error: Write start address " … … 348 389 if (size == I2C_SMBUS_BLOCK_DATA && i >= s_length) 349 390 break; 391 if (i/16 < first/16) 392 continue; 393 if (i/16 > last/16) 394 break; 395 350 396 printf("%02x: ", i); 351 397 for (j = 0; j < 16; j++) { 352 398 fflush(stdout); 399 /* Skip unwanted registers */ 400 if (i+j < first || i+j > last) { 401 printf(" "); 402 if (size == I2C_SMBUS_WORD_DATA) { 403 printf(" "); 404 j++; 405 } 406 continue; 407 } 408 353 409 if (size == I2C_SMBUS_BYTE_DATA) { 354 410 block[i+j] = res = … … 391 447 && i+j >= s_length) 392 448 break; 449 /* Skip unwanted registers */ 450 if (i+j < first || i+j > last) { 451 printf(" "); 452 continue; 453 } 393 454 394 455 res = block[i+j]; … … 411 472 printf(" 0,8 1,9 2,a 3,b 4,c 5,d 6,e 7,f\n"); 412 473 for (i = 0; i < 256; i+=8) { 474 if (i/8 < first/8) 475 continue; 476 if (i/8 > last/8) 477 break; 478 413 479 printf("%02x: ", i); 414 480 for (j = 0; j < 8; j++) { 481 /* Skip unwanted registers */ 482 if (i+j < first || i+j > last) { 483 printf(" "); 484 continue; 485 } 486 415 487 res = i2c_smbus_read_word_data(file, i+j); 416 488 if (res < 0)
