[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