[PATCH] arm: baltos: export DIP switch value
Oleksij Rempel
linux at rempel-privat.de
Fri Jul 17 15:07:16 EDT 2020
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 at googlemail.com:
> From: Yegor Yefremov <yegorslists at googlemail.com>
>
> 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 at googlemail.com>
> ---
> 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
More information about the barebox
mailing list