board/kukui: Support ADC value for NC

When the components like LCM ID are not installed (i.e., NC), ADC will
return some value with much larger variation from standard value (out of
the tolerance we set). To support that, we should check tolerance only
on non-NC voltages.

Also improve the error messages so we can see the ADC raw values
instead of simple assertion error (which makes debugging more difficult
since we have to build another firmware image just to print the values).

BUG=None
TEST=Booted on Kukui and got correct SKU ID for NC LCMID.
BRANCH=None

Change-Id: I8d00956e0e3b48ddbcaa505dd3ade24720c3b4ad
Signed-off-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/32353
Reviewed-by: Julius Werner <jwerner@chromium.org>
Reviewed-by: You-Cheng Syu <youcheng@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
Hung-Te Lin 2019-04-18 17:31:55 +08:00 committed by Julius Werner
parent e3f5f2155a
commit 69eae2762f
1 changed files with 7 additions and 1 deletions

View File

@ -15,6 +15,7 @@
#include <assert.h>
#include <boardid.h>
#include <console/console.h>
#include <soc/auxadc.h>
#include <ec/google/chromeec/ec.h>
#include <stddef.h>
@ -82,8 +83,13 @@ static uint32_t get_adc_index(unsigned int channel)
if (value < (voltages[id] + voltages[id + 1]) / 2)
break;
/* The last level is NC and may be larger than standard tolerance. */
const int tolerance = 10000; /* 10,000 uV */
assert(ABS(value - voltages[id]) < tolerance);
if (id < ADC_LEVELS - 1 && ABS(value - voltages[id]) > tolerance) {
printk(BIOS_ERR, "ADC channel %u value out of range: %d\n",
channel, value);
assert(0);
}
return id;
}