Hi! > +static int get_cpu_temp(void) > +{ > + int value; > + > + value = ec_read(REG_TEMPERATURE_VALUE); > + > + if (value & (1 << 7)) > + value = (value & 0x7f) - 128; > + else > + value = value & 0xff; wtf? Maybe value should be 's8'? > +static int get_battery_current(void) > +{ > + int value; > + > + value = (ec_read(REG_BAT_CURRENT_HIGH) << 8) | > + (ec_read(REG_BAT_CURRENT_LOW)); > + > + if (value & 0x8000) > + value = 0xffff - value; Another version of pair-complement conversion; this one is broken -- off by 1. > +static int parse_arg(const char *buf, unsigned long count, int *val) > +{ > + if (!count) > + return 0; > + if (sscanf(buf, "%i", val) != 1) > + return -EINVAL; > + return count; > +} We have strict_strtoul for a reason... Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html