The RK3568 EVB uses a voltage divider to determine the hardware ID of the board. At the moment, the voltage levels for seven EVB variants are defined. This commit adds a late_initcall to the board code that reads out the voltage and populates the hardware ID as environment variable. Signed-off-by: Michael Riesch <michael.riesch@xxxxxxxxxxxxxx> --- v2: - add compatible check - return early in case the voltage cannot be read - populate hardware ID as environment variable arch/arm/boards/rockchip-rk3568-evb/board.c | 56 +++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/arch/arm/boards/rockchip-rk3568-evb/board.c b/arch/arm/boards/rockchip-rk3568-evb/board.c index 57c24ed3c..f8b257e57 100644 --- a/arch/arm/boards/rockchip-rk3568-evb/board.c +++ b/arch/arm/boards/rockchip-rk3568-evb/board.c @@ -2,7 +2,13 @@ #include <common.h> #include <init.h> #include <mach/bbu.h> +#include <aiodev.h> #include <bootsource.h> +#include <environment.h> +#include <globalvar.h> +#include <magicvar.h> + +static bool machine_is_rk3568_evb = false; static int rk3568_evb_probe(struct device_d *dev) { @@ -11,6 +17,7 @@ static int rk3568_evb_probe(struct device_d *dev) barebox_set_model("Rockchip RK3568 EVB"); barebox_set_hostname("rk3568-evb"); + machine_is_rk3568_evb = true; if (bootsource == BOOTSOURCE_MMC && instance == 1) of_device_enable_path("/chosen/environment-sd"); @@ -34,3 +41,52 @@ static struct driver_d rk3568_evb_board_driver = { .of_compatible = rk3568_evb_of_match, }; coredevice_platform_driver(rk3568_evb_board_driver); + +static int rk3568_evb_detect_hwid(void) +{ + int ret; + int evb_hwid_voltage; + struct aiochannel *evb_hwid_chan; + char *evb_hwid; + + if (!machine_is_rk3568_evb) + return 0; + + evb_hwid_chan = aiochannel_by_name("aiodev0.in_value1_mV"); + if (IS_ERR(evb_hwid_chan)) { + ret = PTR_ERR(evb_hwid_chan); + goto err_hwid; + } + + ret = aiochannel_get_value(evb_hwid_chan, &evb_hwid_voltage); + if (ret) + goto err_hwid; + + if (evb_hwid_voltage > 1650) { + evb_hwid = "1"; + } else if (evb_hwid_voltage > 1350) { + evb_hwid = "2"; + } else if (evb_hwid_voltage > 1050) { + evb_hwid = "3"; + } else if (evb_hwid_voltage > 750) { + evb_hwid = "4"; + } else if (evb_hwid_voltage > 450) { + evb_hwid = "5"; + } else if (evb_hwid_voltage > 150) { + evb_hwid = "6"; + } else { + evb_hwid = "7"; + } + pr_info("Detected RK3568 EVB%s\n", evb_hwid); + + globalvar_add_simple("board.hwid", evb_hwid); + + return 0; + +err_hwid: + pr_err("couldn't retrieve hardware ID"); + return ret; +} +late_initcall(rk3568_evb_detect_hwid); + +BAREBOX_MAGICVAR(global.board.hwid, "The board hardware ID"); -- 2.20.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox