]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
rockchip: board: Update Odroid Go2 to Support Additional Revisions
authorChris Morgan <macromorgan@hotmail.com>
Wed, 10 May 2023 15:55:50 +0000 (10:55 -0500)
committerKever Yang <kever.yang@rock-chips.com>
Fri, 28 Jul 2023 10:45:02 +0000 (18:45 +0800)
Update the board.c file for the Odroid Go Advance to support the
Black Edition and the Odroid Go Super. The Odroid Go Advance Black
Edition differs from the original model with the addition of 2
extra buttons and an ESP8266 WiFi module. The Odroid Go Super
adds an additional 2 buttons compared to the Black Edition, along
with a larger panel and larger battery.

This change uses the value of ADC0 to determine which of these
3 models it is, and then changes the ${fdtfile} environment variable
to match the proper devicetree name in mainline Linux.

Tested on an Odroid Go Advance (first revision) and an Odroid Go Super.
The correct ${fdtfile} variable was set for each device.

Signed-off-by: Chris Morgan <macromorgan@hotmail.com>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
board/hardkernel/odroid_go2/go2.c
configs/odroid-go2_defconfig

index 29464ae63ec7c6c9d6dd3498d60376310beb9a32..a0338ead3b5ac8fe93b5012b4cebb21065583111 100644 (file)
@@ -2,3 +2,106 @@
 /*
  * (C) Copyright 2019 Rockchip Electronics Co., Ltd
  */
+
+#include <linux/stddef.h>
+#include <adc.h>
+#include <asm/io.h>
+#include <dm.h>
+#include <env.h>
+#include <stdlib.h>
+
+#define DTB_DIR                        "rockchip/"
+
+struct oga_model {
+       const u16 adc_value;
+       const char *board;
+       const char *board_name;
+       const char *fdtfile;
+};
+
+enum oga_device_id {
+       OGA,
+       OGA_V11,
+       OGS,
+};
+
+/*
+ * All ADC values from schematic of Odroid Go Advance Black Edition.
+ * Value for OGS is inferred based on schematic and observed values.
+ */
+static const struct oga_model oga_model_details[] = {
+       [OGA] = {
+               856,
+               "rk3326-odroid-go2",
+               "ODROID-GO Advance",
+               DTB_DIR "rk3326-odroid-go2.dtb",
+       },
+       [OGA_V11] = {
+               677,
+               "rk3326-odroid-go2-v11",
+               "ODROID-GO Advance Black Edition",
+               DTB_DIR "rk3326-odroid-go2-v11.dtb",
+       },
+       [OGS] = {
+               85,
+               "rk3326-odroid-go3",
+               "ODROID-GO Super",
+               DTB_DIR "rk3326-odroid-go3.dtb",
+       },
+};
+
+/* Detect which Odroid Go Advance device we are using so as to load the
+ * correct devicetree for Linux. Set an environment variable once
+ * found. The detection depends on the value of ADC channel 0.
+ */
+int oga_detect_device(void)
+{
+       u32 adc_info;
+       int ret, i;
+       int board_id = -ENXIO;
+
+       ret = adc_channel_single_shot("saradc@ff288000", 0, &adc_info);
+       if (ret) {
+               printf("Read SARADC failed with error %d\n", ret);
+               return ret;
+       }
+
+       /*
+        * Get the correct device from the table. The ADC value is
+        * determined by a resistor on ADC channel 0. The manufacturer
+        * accounted for this with a 5% tolerance, so assume a +- value
+        * of 50 should be enough.
+        */
+       for (i = 0; i < ARRAY_SIZE(oga_model_details); i++) {
+               u32 adc_min = oga_model_details[i].adc_value - 50;
+               u32 adc_max = oga_model_details[i].adc_value + 50;
+
+               if (adc_min < adc_info && adc_max > adc_info) {
+                       board_id = i;
+                       break;
+               }
+       }
+
+       if (board_id < 0)
+               return board_id;
+
+       env_set("board", oga_model_details[board_id].board);
+       env_set("board_name",
+               oga_model_details[board_id].board_name);
+       env_set("fdtfile", oga_model_details[board_id].fdtfile);
+
+       return 0;
+}
+
+int rk_board_late_init(void)
+{
+       int ret;
+
+       ret = oga_detect_device();
+       if (ret) {
+               printf("Unable to detect device type: %d\n", ret);
+               return ret;
+       }
+
+       return 0;
+}
index 459ae3d59c6b7c522510b04bd0a22036d1898a8e..bdc2288af661390123d57e5eb046e0d32bd09f5f 100644 (file)
@@ -35,6 +35,7 @@ CONFIG_DEFAULT_FDT_FILE="rockchip/rk3326-odroid-go2.dtb"
 # CONFIG_CONSOLE_MUX is not set
 # CONFIG_DISPLAY_CPUINFO is not set
 CONFIG_DISPLAY_BOARDINFO_LATE=y
+CONFIG_BOARD_LATE_INIT=y
 CONFIG_MISC_INIT_R=y
 CONFIG_SPL_MAX_SIZE=0x20000
 CONFIG_SPL_PAD_TO=0x7f8000