summaryrefslogtreecommitdiffstats
path: root/arch/arm/boards
diff options
context:
space:
mode:
authorYegor Yefremov <yegorslists@googlemail.com>2020-07-17 20:04:43 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2020-08-11 09:36:39 +0200
commit5d0857d599776920876d5ee8ad3be63b844146d9 (patch)
tree961da5c3d6c3da36c3d19d691ed8d70a395efd8e /arch/arm/boards
parentda7c135a056fb6bfc034aacfe4f52dea899655b9 (diff)
downloadbarebox-5d0857d599776920876d5ee8ad3be63b844146d9.tar.gz
barebox-5d0857d599776920876d5ee8ad3be63b844146d9.tar.xz
arm: baltos: export DIP switch value
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@googlemail.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/boards')
-rw-r--r--arch/arm/boards/vscom-baltos/board.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/arch/arm/boards/vscom-baltos/board.c b/arch/arm/boards/vscom-baltos/board.c
index 800f42df3a..59782d2990 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);