summaryrefslogtreecommitdiff
path: root/board/solidrun/mx6cuboxi/mx6cuboxi.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/solidrun/mx6cuboxi/mx6cuboxi.c')
-rw-r--r--board/solidrun/mx6cuboxi/mx6cuboxi.c136
1 files changed, 86 insertions, 50 deletions
diff --git a/board/solidrun/mx6cuboxi/mx6cuboxi.c b/board/solidrun/mx6cuboxi/mx6cuboxi.c
index 1fb3c69ede..1567cf0c91 100644
--- a/board/solidrun/mx6cuboxi/mx6cuboxi.c
+++ b/board/solidrun/mx6cuboxi/mx6cuboxi.c
@@ -57,6 +57,13 @@ DECLARE_GLOBAL_DATA_PTR;
#define ETH_PHY_RESET IMX_GPIO_NR(4, 15)
#define USB_H1_VBUS IMX_GPIO_NR(1, 0)
+enum board_type {
+ CUBOXI = 0x00,
+ HUMMINGBOARD = 0x01,
+ HUMMINGBOARD2 = 0x02,
+ UNKNOWN = 0x03,
+};
+
int dram_init(void)
{
gd->ram_size = imx_ddr_size();
@@ -77,10 +84,17 @@ static iomux_v3_cfg_t const usdhc2_pads[] = {
IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
};
-static iomux_v3_cfg_t const hb_cbi_sense[] = {
+static iomux_v3_cfg_t const board_detect[] = {
/* These pins are for sensing if it is a CuBox-i or a HummingBoard */
IOMUX_PADS(PAD_KEY_ROW1__GPIO4_IO09 | MUX_PAD_CTRL(UART_PAD_CTRL)),
IOMUX_PADS(PAD_EIM_DA4__GPIO3_IO04 | MUX_PAD_CTRL(UART_PAD_CTRL)),
+ IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | MUX_PAD_CTRL(UART_PAD_CTRL)),
+};
+
+static iomux_v3_cfg_t const som_rev_detect[] = {
+ /* These pins are for sensing if it is a CuBox-i or a HummingBoard */
+ IOMUX_PADS(PAD_CSI0_DAT14__GPIO6_IO00 | MUX_PAD_CTRL(UART_PAD_CTRL)),
+ IOMUX_PADS(PAD_CSI0_DAT18__GPIO6_IO04 | MUX_PAD_CTRL(UART_PAD_CTRL)),
};
static iomux_v3_cfg_t const usb_pads[] = {
@@ -333,88 +347,110 @@ int board_init(void)
return ret;
}
-static bool is_hummingboard(void)
+static enum board_type board_type(void)
{
- int val1, val2;
+ int val1, val2, val3;
- SETUP_IOMUX_PADS(hb_cbi_sense);
-
- gpio_direction_input(IMX_GPIO_NR(4, 9));
- gpio_direction_input(IMX_GPIO_NR(3, 4));
-
- val1 = gpio_get_value(IMX_GPIO_NR(4, 9));
- val2 = gpio_get_value(IMX_GPIO_NR(3, 4));
+ SETUP_IOMUX_PADS(board_detect);
/*
* Machine selection -
- * Machine val1, val2
- * -------------------------
- * HB2 x x
- * HB rev 3.x x 0
- * CBi 0 1
- * HB 1 1
+ * Machine val1, val2, val3
+ * ----------------------------
+ * HB2 x x 0
+ * HB rev 3.x x 0 x
+ * CBi 0 1 x
+ * HB 1 1 x
*/
- if (val2 == 0)
- return true;
- else if (val1 == 0)
- return false;
- else
- return true;
-}
+ gpio_direction_input(IMX_GPIO_NR(2, 8));
+ val3 = gpio_get_value(IMX_GPIO_NR(2, 8));
-static bool is_hummingboard2(void)
-{
- int val1;
+ if (val3 == 0)
+ return HUMMINGBOARD2;
- SETUP_IOMUX_PADS(hb_cbi_sense);
+ gpio_direction_input(IMX_GPIO_NR(3, 4));
+ val2 = gpio_get_value(IMX_GPIO_NR(3, 4));
- gpio_direction_input(IMX_GPIO_NR(2, 8));
+ if (val2 == 0)
+ return HUMMINGBOARD;
- val1 = gpio_get_value(IMX_GPIO_NR(2, 8));
+ gpio_direction_input(IMX_GPIO_NR(4, 9));
+ val1 = gpio_get_value(IMX_GPIO_NR(4, 9));
- /*
- * Machine selection -
- * Machine val1
- * -------------------
- * HB2 0
- * HB rev 3.x x
- * CBi x
- * HB x
- */
+ if (val1 == 0) {
+ return CUBOXI;
+ } else {
+ return HUMMINGBOARD;
+ }
+}
+
+static bool is_rev_15_som(void)
+{
+ int val1, val2;
+ SETUP_IOMUX_PADS(som_rev_detect);
- if (val1 == 0)
+ val1 = gpio_get_value(IMX_GPIO_NR(6, 0));
+ val2 = gpio_get_value(IMX_GPIO_NR(6, 4));
+
+ if (val1 == 1 && val2 == 0)
return true;
- else
- return false;
+
+ return false;
}
int checkboard(void)
{
- if (is_hummingboard2())
- puts("Board: MX6 Hummingboard2\n");
- else if (is_hummingboard())
- puts("Board: MX6 Hummingboard\n");
+ switch (board_type()) {
+ case CUBOXI:
+ puts("Board: MX6 Cubox-i");
+ break;
+ case HUMMINGBOARD:
+ puts("Board: MX6 HummingBoard");
+ break;
+ case HUMMINGBOARD2:
+ puts("Board: MX6 HummingBoard2");
+ break;
+ case UNKNOWN:
+ default:
+ puts("Board: Unknown\n");
+ goto out;
+ }
+
+ if (is_rev_15_som())
+ puts(" (som rev 1.5)\n");
else
- puts("Board: MX6 Cubox-i\n");
+ puts("\n");
+out:
return 0;
}
int board_late_init(void)
{
#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
- if (is_hummingboard2())
- env_set("board_name", "HUMMINGBOARD2");
- else if (is_hummingboard())
+ switch (board_type()) {
+ case CUBOXI:
+ env_set("board_name", "CUBOXI");
+ break;
+ case HUMMINGBOARD:
env_set("board_name", "HUMMINGBOARD");
- else
+ break;
+ case HUMMINGBOARD2:
+ env_set("board_name", "HUMMINGBOARD2");
+ break;
+ case UNKNOWN:
+ default:
env_set("board_name", "CUBOXI");
+ }
if (is_mx6dq())
env_set("board_rev", "MX6Q");
else
env_set("board_rev", "MX6DL");
+
+ if (is_rev_15_som())
+ env_set("som_rev", "V15");
#endif
return 0;