[JASJAR, XDA Exec, MDA Pro General] cr2:
battery monitoring.

It is actually a DS2672 that does the monitoring, though

i have not seen this chip on the motherboard. Maybe it

is in the LCD part :)

If we assume the same EEPROM layout as on ipaq

(i have dumped the contents on my Universal),

then it looks so

int cc[5]; /* Charge capacity array - Fuel gauging full point */
u16 llcc; /* Last learn cycle count */
u32 tad; /* Total accumulated discharge */
int cb; /* Charging breakpoint */
int cbt[3]; /* Charging time breakpoint to full */
int cet[3]; /* Charging time empty to full */

u8 chemistry; /* Cell chemistry */
u8 manufacturer; /* Manufacturer */
u16 rated_cap; /* Rated cell capacity * 10 */
char current_offset; /* current offset */
u8 resistor; /* Sense resistor - 1/4 mOhm resolution */
u32 date;
u16 original_cap;
int d2[5];

...
result = ipaq_asic_owm_recall_bytes( NULL, DS2760_EEPROM_0 );
if ( result < 0 ) return result;
result = ipaq_asic_owm_read_bytes( NULL, DS2760_EEPROM_0, buf, 16 );
if ( result < 0 ) return result;

m->cc[0] = (buf[0] << 8) | buf[1];
m->cc[1] = m->cc[0] + buf[2];
m->cc[2] = m->cc[1] + buf[3];
m->cc[3] = m->cc[2] + buf[4];
m->cc[4] = m->cc[3] + buf[5];
m->llcc = buf[6] * 10;
m->tad = ((buf[7]<<8) | buf[8]) * 20;
m->cb = buf[9];
m->cbt[0] = buf[10];
m->cbt[1] = buf[11];
m->cbt[2] = buf[12];
m->cet[0] = buf[13];
m->cet[1] = buf[14];
m->cet[2] = buf[15];

result = ipaq_asic_owm_recall_bytes( NULL, DS2760_EEPROM_1 );
if ( result < 0 ) return result;
result = ipaq_asic_owm_read_bytes( NULL, DS2760_EEPROM_1, buf, 16 );
if ( result < 0 ) return result;

m->chemistry = (buf[0] & 0xc0) >> 6;
m->manufacturer = (buf[0] & 0x3c) >> 2;
m->rated_cap = buf[2] * 10;
m->current_offset = buf[3];
m->resistor = buf[4];
if ( m->resistor == 0 )
m->resistor = 100; /* 25 ohms internal */
m->date = (buf[8] << 24) | (buf[7] << 16) | (buf[6] << 8) | buf[5];
m->original_cap = buf[9] * 10;
m->d2[4] = buf[15];
m->d2[3] = m->d2[4] + buf[14];
m->d2[2] = m->d2[3] + buf[13];
m->d2[1] = m->d2[2] + buf[12];
m->d2[0] = m->d2[1] + buf[11];

p += sprintf(p, " Charge capacity by temperature : %d %d %d %d %d (mAh)\n",
ds->cc[0],ds->cc[1],ds->cc[2],ds->cc[3],ds->cc[4]);
p += sprintf(p, " Last learn cycle count : %d (cycles)\n", ds->llcc );
p += sprintf(p, " Total accumulated discharge : %d (mAh)\n", ds->tad );
p += sprintf(p, " Charging breakpoint : %d (mAh)\n", ds->cb );
p += sprintf(p, " Charge time breakpoint to full : %d %d %d (min)\n", ds->cbt[0],ds->cbt[1],ds->cbt[2]);
p += sprintf(p, " Charge time empty to full : %d %d %d (min)\n", ds->cet[0],ds->cet[1],ds->cet[2]);

p += sprintf(p, " Cell chemistry : %d\n", ds->chemistry );
p += sprintf(p, " Manufacturer : %d\n", ds->manufacturer );
p += sprintf(p, " Rated cell capacity : %d (mAh)\n", ds->rated_cap );
p += sprintf(p, " Current offset : 0x%02x\n", ds->current_offset );
p += sprintf(p, " Sense resistor : %d (%d.%02d mOhm)\n",
ds->resistor, ds->resistor / 4, (ds->resistor % 4) * 25);
p += sprintf(p, " Manufacture date : %d (seconds from 1970)\n", ds->date );
p += sprintf(p, " Original capacity : %d (mAh)\n", ds->original_cap );
p += sprintf(p, " Active empty level by temp : %d %d %d %d %d (mAh)\n",
ds->d2[0],ds->d2[1],ds->d2[2],ds->d2[3],ds->d2[4]);