Commit a7b81372 authored by hmz007's avatar hmz007

[u-boot] merge commit 'ec031c85e905..650317a2f9e0'

Signed-off-by: 's avatarhmz007 <hmz007@gmail.com>
parent 967fb0e7
......@@ -64,8 +64,94 @@ int board_storage_init(void)
}
/* Board revision list: <GPIO4_D1 | GPIO4_D0>
/*
* ID info:
* ID : Volts : ADC value : Bucket
* == ===== ========= ===========
* 0 : 0.102V: 58 : 0 - 81
*
* ------------------------------------
* Reserved
* 1 : 0.211V: 120 : 82 - 150
* 2 : 0.319V: 181 : 151 - 211
* 3 : 0.427V: 242 : 212 - 274
* 4 : 0.542V: 307 : 275 - 342
* 5 : 0.666V: 378 : 343 - 411
* 6 : 0.781V: 444 : 412 - 477
* 7 : 0.900V: 511 : 478 - 545
* 8 : 1.023V: 581 : 546 - 613
* 9 : 1.137V: 646 : 614 - 675
* 10 : 1.240V: 704 : 676 - 733
* 11 : 1.343V: 763 : 734 - 795
* 12 : 1.457V: 828 : 796 - 861
* 13 : 1.576V: 895 : 862 - 925
* 14 : 1.684V: 956 : 926 - 989
* 15 : 1.800V: 1023 : 990 - 1023
*/
static const int id_readings[] = {
81, 150, 211, 274, 342, 411, 477, 545,
613, 675, 733, 795, 861, 925, 989, 1023
};
static int cached_board_id = -1;
#define SARADC_BASE 0xFF100000
#define SARADC_DATA (SARADC_BASE + 0)
#define SARADC_CTRL (SARADC_BASE + 8)
static u32 get_saradc_value(int chn)
{
int timeout = 0;
u32 adc_value;
writel(0, SARADC_CTRL);
udelay(2);
writel(0x28 | chn, SARADC_CTRL);
udelay(50);
timeout = 0;
do {
if (readl(SARADC_CTRL) & 0x40) {
adc_value = readl(SARADC_DATA) & 0x3FF;
return adc_value;
}
udelay(10);
} while (timeout++ < 100);
return -1;
}
static uint32_t get_adc_index(int chn)
{
int i;
int adc_reading;
if (cached_board_id != -1)
return cached_board_id;
adc_reading = get_saradc_value(chn);
for (i = 0; i < ARRAY_SIZE(id_readings); i++) {
if (adc_reading <= id_readings[i]) {
debug("ADC reading %d, ID %d\n", adc_reading, i);
cached_board_id = i;
return i;
}
}
/* should die for impossible value */
return 0;
}
/*
* Board revision list: <GPIO4_D1 | GPIO4_D0>
* 0b00 - NanoPC-T4
* 0b01 - NanoPi M4
*
* 0b03 - Extended by ADC_IN4
* 0b04 - NanoPi NEO4
*/
static int pcb_rev = -1;
......@@ -76,6 +162,9 @@ static void bd_hwrev_init(void)
pcb_rev = gpio_get_value(GPIO_BANK4 | GPIO_D0);
pcb_rev |= (gpio_get_value(GPIO_BANK4 | GPIO_D1) << 1);
if (pcb_rev == 0x3)
pcb_rev += get_adc_index(4) + 1;
}
/* To override __weak symbols */
......@@ -107,7 +196,8 @@ static void panel_pwm_status_init(void)
/* Supported panels and dpi for nanopi4 series */
static char *panels[] = {
"HD702E,213dpi",
"HD101B,160dpi",
"HD101B,180dpi",
"G101E,180dpi",
"S701,160dpi",
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment