File 0004-imx-imx93-91-frdm-add-board-version-print.patch of Package uboot-imx

From 36b2627dfd409d2103267e911c6a4ca172194dc6 Mon Sep 17 00:00:00 2001
From: "haidong.zheng" <haidong.zheng@nxp.com>
Date: Tue, 24 Sep 2024 16:31:17 +0800
Subject: [PATCH 4/4] imx: imx93/91 frdm add board version print

Signed-off-by: haidong.zheng <haidong.zheng@nxp.com>
---
 board/freescale/imx91_frdm/imx91_frdm.c | 48 +++++++++++++++++++++++++
 board/freescale/imx93_frdm/imx93_frdm.c | 47 ++++++++++++++++++++++++
 2 files changed, 95 insertions(+)

diff --git a/board/freescale/imx91_frdm/imx91_frdm.c b/board/freescale/imx91_frdm/imx91_frdm.c
index b8498168533..a5faa55d9c9 100644
--- a/board/freescale/imx91_frdm/imx91_frdm.c
+++ b/board/freescale/imx91_frdm/imx91_frdm.c
@@ -21,6 +21,7 @@
 #include <usb.h>
 #include <dwc3-uboot.h>
 #include <asm/gpio.h>
+#include <adc.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -289,8 +290,55 @@ static void board_gpio_init(void)
 	dm_gpio_set_value(&ext_pwren_desc, 1);
 }
 
+static int print_board_version(void)
+{
+	int i, ret;
+	struct udevice *dev;
+	unsigned int rev[2];
+	unsigned int data[2];
+
+	ret = uclass_first_device_check(UCLASS_ADC, &dev);
+
+	if (dev) {
+		ret = adc_channel_single_shot(dev->name, 2, &data[0]);
+		if (ret) {
+			printf("BOARD: unknown\n");
+			return 0;
+		}
+		ret = adc_channel_single_shot(dev->name, 3, &data[1]);
+		if (ret) {
+			printf("BOARD: unknown\n");
+			return 0;
+		}
+
+		for (i = 0; i < 2; i++) {
+			if (data[i] < 500)
+				rev[i] = 0;
+			else if (data[i] < 700)
+				rev[i] = 1;
+			else if (data[i] < 1500)
+				rev[i] = 2;
+			else if (data[i] < 2300)
+				rev[i] = 3;
+			else if (data[i] < 3000)
+				rev[i] = 4;
+			else if (data[i] < 3600)
+				rev[i] = 5;
+			else
+				rev[i] = 6;
+		}
+		printf("BOARD: V%d.%d(ADC2:%d,ADC3:%d)\n", rev[0], rev[1], data[0], data[1]);
+	} else {
+		printf("BOARD: unknown\n");
+	}
+
+	return 0;
+}
+
 int board_init(void)
 {
+	print_board_version();
+
 #ifdef CONFIG_USB_TCPC
 	setup_typec();
 #endif
diff --git a/board/freescale/imx93_frdm/imx93_frdm.c b/board/freescale/imx93_frdm/imx93_frdm.c
index 37667d0c06b..1f514faf625 100644
--- a/board/freescale/imx93_frdm/imx93_frdm.c
+++ b/board/freescale/imx93_frdm/imx93_frdm.c
@@ -21,6 +21,7 @@
 #include <usb.h>
 #include <dwc3-uboot.h>
 #include <asm/gpio.h>
+#include <adc.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -263,11 +264,57 @@ static void board_gpio_init(void)
 	dm_gpio_set_value(&desc, 1);
 }
 
+static int print_board_version(void)
+{
+	int i, ret;
+	struct udevice *dev;
+	unsigned int rev[2];
+	unsigned int data[2];
+
+	ret = uclass_first_device_check(UCLASS_ADC, &dev);
+
+	if (dev) {
+		ret = adc_channel_single_shot(dev->name, 2, &data[0]);
+		if (ret) {
+			printf("BOARD: unknown\n");
+			return 0;
+		}
+		ret = adc_channel_single_shot(dev->name, 3, &data[1]);
+		if (ret) {
+			printf("BOARD: unknown\n");
+			return 0;
+		}
+
+		for (i = 0; i < 2; i++) {
+			if (data[i] < 500)
+				rev[i] = 0;
+			else if (data[i] < 700)
+				rev[i] = 1;
+			else if (data[i] < 1500)
+				rev[i] = 2;
+			else if (data[i] < 2300)
+				rev[i] = 3;
+			else if (data[i] < 3000)
+				rev[i] = 4;
+			else if (data[i] < 3600)
+				rev[i] = 5;
+			else
+				rev[i] = 6;
+		}
+		printf("BOARD: V%d.%d(ADC2:%d,ADC3:%d)\n", rev[0], rev[1], data[0], data[1]);
+	} else {
+		printf("BOARD: unknown\n");
+	}
+
+	return 0;
+}
+
 int board_init(void)
 {
 #ifdef CONFIG_USB_TCPC
 	setup_typec();
 #endif
+	print_board_version();
 
 	if (IS_ENABLED(CONFIG_FEC_MXC))
 		setup_fec();
-- 
2.25.1

openSUSE Build Service is sponsored by