summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLuo Ji <ji.luo@nxp.com>2018-06-26 18:07:17 +0800
committerJi Luo <ji.luo@nxp.com>2018-08-20 21:25:47 +0800
commit23c5c1858c55ffc06fa012a14d2faa87dfe42168 (patch)
tree35e299815b9466935d18374aacf5def869fca8f8 /drivers
parenta2511066236be654594b61e933012d80b710f6aa (diff)
[iot] Add fastboot variable 'baseboard_id' for imx8m
We have different baseboard for same imx8m SoM, add fastboot variable 'baseboard_id' to distinguish different boards. Test: "fastboot getvar baseboard_id" shows "0x0" for imx8m_wibo board and shows "0x40" for imx8m_enterprise board. Change-Id: Iec24aa52ae5de546594dd3ce602efb6dcaa60660 Signed-off-by: Luo Ji <ji.luo@nxp.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/gadget/f_fastboot.c81
1 files changed, 79 insertions, 2 deletions
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
index 7b0416fdfb..985d4523ec 100644
--- a/drivers/usb/gadget/f_fastboot.c
+++ b/drivers/usb/gadget/f_fastboot.c
@@ -62,6 +62,7 @@ extern bool tos_flashed;
#ifdef CONFIG_ANDROID_RECOVERY
#include <recovery.h>
#endif
+#endif
#ifdef CONFIG_BCB_SUPPORT
#include "bcb.h"
@@ -72,14 +73,23 @@ extern bool tos_flashed;
#include <fsl_avb.h>
#endif
+#ifdef CONFIG_ANDROID_THINGS_SUPPORT
+#include <asm-generic/gpio.h>
+#include <asm/mach-imx/gpio.h>
+#endif
+
#define FASTBOOT_VERSION "0.4"
#ifdef CONFIG_FASTBOOT_LOCK
#include "fastboot_lock_unlock.h"
#endif
+
+#if defined(CONFIG_ANDROID_THINGS_SUPPORT) && defined(CONFIG_ARCH_IMX8M)
+#define FASTBOOT_COMMON_VAR_NUM 14
+#else
+#define FASTBOOT_COMMON_VAR_NUM 13
#endif
-#define FASTBOOT_COMMON_VAR_NUM 13
#define FASTBOOT_VAR_YES "yes"
#define FASTBOOT_VAR_NO "no"
#define FASTBOOT_INTERFACE_CLASS 0xff
@@ -121,6 +131,16 @@ struct fastboot_device_info fastboot_firmwareinfo;
#define ZIMAGE_START_ADDR 10
#define ZIMAGE_END_ADDR 11
+#if defined(CONFIG_ANDROID_THINGS_SUPPORT) && defined(CONFIG_ARCH_IMX8M)
+#define IMX8MQ_GPIO3_IO25 IMX_GPIO_NR(3, 25) //board_id[6]:6
+#define IMX8MQ_GPIO3_IO19 IMX_GPIO_NR(3, 19) //board_id[6]:5
+#define IMX8MQ_GPIO3_IO20 IMX_GPIO_NR(3, 20) //board_id[6]:4
+#define IMX8MQ_GPIO3_IO24 IMX_GPIO_NR(3, 24) //board_id[6]:3
+#define IMX8MQ_GPIO3_IO23 IMX_GPIO_NR(3, 23) //board_id[6]:2
+#define IMX8MQ_GPIO3_IO22 IMX_GPIO_NR(3, 22) //board_id[6]:1
+#define IMX8MQ_GPIO3_IO21 IMX_GPIO_NR(3, 21) //board_id[6]:0
+#endif
+
/* common variables of fastboot getvar command */
char *fastboot_common_var[FASTBOOT_COMMON_VAR_NUM] = {
"version",
@@ -135,7 +155,10 @@ char *fastboot_common_var[FASTBOOT_COMMON_VAR_NUM] = {
"off-mode-charge",
"battery-voltage",
"variant",
- "battery-soc-ok"
+ "battery-soc-ok",
+#if defined(CONFIG_ANDROID_THINGS_SUPPORT) && defined(CONFIG_ARCH_IMX8M)
+ "baseboard_id"
+#endif
};
/* Boot metric variables */
@@ -2825,6 +2848,47 @@ static void uuid_hex2string(uint8_t *uuid, char* buf, uint32_t uuid_len, uint32_
}
#endif
+#if defined(CONFIG_ANDROID_THINGS_SUPPORT) && defined(CONFIG_ARCH_IMX8M)
+static int get_imx8m_baseboard_id(void)
+{
+ int i = 0, value = 0;
+ int baseboard_id;
+ int pin[7];
+
+ /* initialize the pin array */
+ pin[0] = IMX8MQ_GPIO3_IO21;
+ pin[1] = IMX8MQ_GPIO3_IO22;
+ pin[2] = IMX8MQ_GPIO3_IO23;
+ pin[3] = IMX8MQ_GPIO3_IO24;
+ pin[4] = IMX8MQ_GPIO3_IO20;
+ pin[5] = IMX8MQ_GPIO3_IO19;
+ pin[6] = IMX8MQ_GPIO3_IO25;
+
+ /* request gpio */
+ gpio_request(IMX8MQ_GPIO3_IO21, "GPIO3_IO21");
+ gpio_request(IMX8MQ_GPIO3_IO22, "GPIO3_IO22");
+ gpio_request(IMX8MQ_GPIO3_IO23, "GPIO3_IO23");
+ gpio_request(IMX8MQ_GPIO3_IO24, "GPIO3_IO24");
+ gpio_request(IMX8MQ_GPIO3_IO20, "GPIO3_IO20");
+ gpio_request(IMX8MQ_GPIO3_IO19, "GPIO3_IO19");
+ gpio_request(IMX8MQ_GPIO3_IO25, "GPIO3_IO25");
+
+ /* Set gpio direction as input and get the input value */
+ baseboard_id = 0;
+ for (i = 0; i < 7; i++) {
+ gpio_direction_input(pin[i]);
+ if ((value = gpio_get_value(pin[i])) < 0) {
+ printf("Error! Read gpio port: %d failed!\n", pin[i]);
+ return -1;
+ }
+ else
+ baseboard_id |= ((value & 0x01) << i);
+ }
+
+ return baseboard_id;
+}
+#endif
+
static int get_single_var(char *cmd, char *response)
{
char *str = cmd;
@@ -2937,6 +3001,19 @@ static int get_single_var(char *cmd, char *response)
strncat(response, FASTBOOT_VAR_NO, chars_left);
#endif
}
+#if defined(CONFIG_ANDROID_THINGS_SUPPORT) && defined(CONFIG_ARCH_IMX8M)
+ else if (!strcmp_l1("baseboard_id", cmd)) {
+ int baseboard_id;
+
+ baseboard_id = get_imx8m_baseboard_id();
+ if (baseboard_id < 0) {
+ printf("Get baseboard id failed!\n");
+ strncat(response, "Get baseboard id failed!", chars_left);
+ return -1;
+ } else
+ snprintf(response + strlen(response), chars_left, "0x%x", baseboard_id);
+ }
+#endif
else {
char envstr[32];