static inline unsigned vbatt_adjust(struct ads7846 *ts, ssize_t v) { unsigned retval = vaux_adjust(ts, v); /* ads7846 has a resistor ladder to scale this signal down */ if (ts->model == 7846) retval *= 4; return retval; }
static inline unsigned vbatt_adjust(struct ak4182 *ts, ssize_t v) { #if 0 unsigned retval = vaux_adjust(ts, v); /* ak4182 has a resistor ladder to scale this signal down */ if (ts->model == 4182) retval *= 4; return retval; #endif unsigned retval,vbatt[10],average; int i,delta; unsigned max = 0,min = 100000,sum =0; if (ts->model == 4182) { for (i=0;i<10;i++) { retval = vaux_adjust(ts,v); retval *= 4; vbatt[i] = retval; } } for (i=0;i<10;i++) { max = max > vbatt[i]? max : vbatt[i]; min = min < vbatt[i]? min : vbatt[i]; sum += vbatt[i]; } average = (sum -min -max) / 8; if (average <3250) delta = (-32)*average/44+2431; else if (average>=3250 && average <3487) delta = 36*average/237-425; else if (average>=3487 && average <3555) delta = (-24)*average/68+1334; else if (average>=3555 && average <3682) delta = 44*average/127-1151; else if (average>=3682 && average <3840) delta = (-100)*average/158+2454; else if (average>=3840 && average <4058) delta = 44*average/218-751; else delta=(-4)*average/108+218; delta = delta/2; if (abs(average - max)<delta && abs(average - min)<delta) { retval = 1000*(average - 139)/959; return retval; } else return 0; }