[PATCH] rockchip: board: Update Odroid Go2 to Support Additional Revisions
Kever Yang
kever.yang at rock-chips.com
Wed Jul 26 10:41:13 CEST 2023
On 2023/5/10 23:55, Chris Morgan wrote:
> From: Chris Morgan <macromorgan at hotmail.com>
>
> 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 at hotmail.com>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>
Thanks,
- Kever
> ---
> board/hardkernel/odroid_go2/go2.c | 103 ++++++++++++++++++++++++++++++
> configs/odroid-go2_defconfig | 1 +
> 2 files changed, 104 insertions(+)
>
> diff --git a/board/hardkernel/odroid_go2/go2.c b/board/hardkernel/odroid_go2/go2.c
> index 29464ae63e..a0338ead3b 100644
> --- a/board/hardkernel/odroid_go2/go2.c
> +++ b/board/hardkernel/odroid_go2/go2.c
> @@ -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 at 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;
> +}
> diff --git a/configs/odroid-go2_defconfig b/configs/odroid-go2_defconfig
> index 459ae3d59c..bdc2288af6 100644
> --- a/configs/odroid-go2_defconfig
> +++ b/configs/odroid-go2_defconfig
> @@ -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
More information about the U-Boot
mailing list