On Mon, 2009-12-07 at 09:04 +0100, Pavel Machek wrote: > > > What is going on here? I thought the value is already in two's > > > complement... Is the above equivalent of > > > > > > if (value < 0) > > > value = -value; > > > > > > ? If so, why? If not, can you add a comment? > > > > Right, then, will use this instead: > > > > static int get_battery_current(void) > > { > > s16 value; > > > > value = (ec_read(REG_BAT_CURRENT_HIGH) << 8) | > > (ec_read(REG_BAT_CURRENT_LOW)); > > > > return abs(value); > > } > > That's certainly better. But... why not return signed value? Current > flowing from the battery is certainly very different from current > flowing into it... You are totally right ;) Just test it, when flowing from the battery, the value is negative, and when flowing into the battery, the value is positive, so, no abs() needed. thanks! BTW: This part of source code was written by another EC guy, not checked it carefully, sorry ;) Best Regards, Wu Zhangjin