Hi! next week i wont to send a patch to introduce helper function to read array of gpios and covert them in to a value. May be it will reduce your code. Am 17.07.20 um 20:04 schrieb yegorslists@xxxxxxxxxxxxxx: > 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); > -- Regards, Oleksij _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox