From: Yegor Yefremov <yegorslists@xxxxxxxxxxxxxx> Some device in the OnRISC device family provide four DIP switches. Read them and provide their value as a hex in the global variable "board.dip". Signed-off-by: Yegor Yefremov <yegorslists@xxxxxxxxxxxxxx> --- arch/arm/boards/vscom-baltos/board.c | 42 ++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/arch/arm/boards/vscom-baltos/board.c b/arch/arm/boards/vscom-baltos/board.c index 800f42df3..59782d299 100644 --- a/arch/arm/boards/vscom-baltos/board.c +++ b/arch/arm/boards/vscom-baltos/board.c @@ -45,6 +45,43 @@ struct bsp_vs_hwparam { uint8_t MAC3[6]; } __attribute__ ((packed)); +static uint8_t get_dip_switch(uint16_t id, uint32_t rev) +{ + uint16_t maj, min; + uint8_t dip = 0; + + maj = rev >> 16; + min = rev & 0xffff; + + if ((id == 220 || id == 222) && (maj == 1 && min == 2)) + id = 214; + + switch(id) { + case 214: + case 215: + dip = !gpio_get_value(44); + dip += !gpio_get_value(45) << 1; + dip += !gpio_get_value(46) << 2; + dip += !gpio_get_value(47) << 3; + break; + case 212: + case 221: + case 223: + case 224: + case 225: + case 226: + case 227: + case 230: + dip = !gpio_get_value(82); + dip += !gpio_get_value(83) << 1; + dip += !gpio_get_value(105) << 2; + dip += !gpio_get_value(106) << 3; + break; + } + + return dip; +} + static int baltos_read_eeprom(void) { struct bsp_vs_hwparam hw_param; @@ -52,6 +89,7 @@ static int baltos_read_eeprom(void) char *buf, var_buf[32]; int rc; unsigned char mac_addr[6]; + uint8_t dip; if (!of_machine_is_compatible("vscom,onrisc")) return 0; @@ -109,6 +147,10 @@ static int baltos_read_eeprom(void) gpio_direction_output(135, 0); } + dip = get_dip_switch(hw_param.SystemId, hw_param.HwRev); + sprintf(var_buf, "%02x", dip); + globalvar_add_simple("board.dip", var_buf); + return 0; } environment_initcall(baltos_read_eeprom); -- 2.17.0 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox