]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - processor-sdk/pdk.git/commitdiff
PDK-11772: Board: Added board control API for j784s4 evm
authorM V Pratap Reddy <x0257344@ti.com>
Thu, 9 Jun 2022 13:40:28 +0000 (19:10 +0530)
committerRishabh Garg <rishabh@ti.com>
Fri, 10 Jun 2022 13:47:08 +0000 (08:47 -0500)
packages/ti/board/src/j784s4_evm/board_control.c
packages/ti/board/src/j784s4_evm/include/board_control.h

index ec91a71eceecb0a3b47e33dc751438f7efdb794a..2401eb390c4fcb05997ebd1ec4fcbc0cb4863282 100644 (file)
  */
 
 #include "board_control.h"
+/**
+ * \brief Configures IO expander pins
+ *
+ *  \return   Board_SOK in case of success or appropriate error code.
+ *
+ */
+static Board_STATUS Board_setIoExpPinOutput(Board_IoExpCfg_t *cfg)
+{
+    Board_I2cInitCfg_t i2cCfg;
+    Board_STATUS status;
+
+    i2cCfg.i2cInst    = cfg->i2cInst;
+    i2cCfg.socDomain  = cfg->socDomain;
+    i2cCfg.enableIntr = cfg->enableIntr;
+    Board_setI2cInitConfig(&i2cCfg);
+
+    status = Board_i2cIoExpInit();
+    if(status == BOARD_SOK)
+    {
+        /* Setting the pin direction as output */
+        status = Board_i2cIoExpSetPinDirection(cfg->slaveAddr,
+                                               cfg->ioExpType,
+                                               cfg->portNum,
+                                               cfg->pinNum,
+                                               PIN_DIRECTION_OUTPUT);
+        BOARD_delay(1000);
+        /* Setting the pin level */
+        status |= Board_i2cIoExpPinLevelSet(cfg->slaveAddr,
+                                            cfg->ioExpType,
+                                            cfg->portNum,
+                                            cfg->pinNum,
+                                            cfg->signalLevel);
+        BOARD_delay(1000);
+
+        Board_i2cIoExpDeInit();
+    }
+
+    return status;
+}
+
+/**
+ * \brief   Configures IO mux on the EVM
+ *
+ * \param   mask  [IN] Mask value for the IO expander pins to be configured
+ * \param   value [IN] Value to be written to IO expander pins
+ *
+ * \return  Board_SOK in case of success or appropriate error code.
+ *
+ */
+static Board_STATUS Board_setIOMux(uint8_t mask,
+                                    uint8_t value)
+{
+    Board_I2cInitCfg_t i2cCfg;
+    Board_STATUS status;
+    uint8_t ioExpData;
+
+    i2cCfg.i2cInst    = BOARD_I2C_IOEXP_DEVICE2_INSTANCE;
+    i2cCfg.socDomain  = BOARD_SOC_DOMAIN_MAIN;
+    i2cCfg.enableIntr = false;
+    Board_setI2cInitConfig(&i2cCfg);
+
+    status = Board_i2cIoExpInit();
+    if(status == BOARD_SOK)
+    {
+        /* Setting the port direction as output */
+        status = Board_i2cIoExpSetPortDirection(BOARD_I2C_IOEXP_DEVICE2_ADDR,
+                                                THREE_PORT_IOEXP,
+                                                PORTNUM_1,
+                                                0);
+        BOARD_delay(1000);
+
+        /* Reading the IO expander current port settings */
+        status |= Board_i2cIoExpReadOutputPort(BOARD_I2C_IOEXP_DEVICE2_ADDR,
+                                               THREE_PORT_IOEXP,
+                                               PORTNUM_1,
+                                               &ioExpData);
+        BOARD_delay(1000);
+
+        ioExpData = (ioExpData & ~(mask)) | value;
+
+        /* Modify the IO expander port settings to enable audio Mux */
+        status |= Board_i2cIoExpWritePort(BOARD_I2C_IOEXP_DEVICE2_ADDR,
+                                          THREE_PORT_IOEXP,
+                                          PORTNUM_1,
+                                          ioExpData);
+
+        BOARD_delay(1000);
+
+        Board_i2cIoExpDeInit();
+    }
+
+    return status;
+}
+
+/**
+ * \brief   Configures the mux on the board to route port A to Port B1
+ *
+ * \return  Board_SOK in case of success or appropriate error code.
+ *
+ */
+static Board_STATUS Board_setIOMUXPortB1(void)
+{
+    Board_STATUS status;
+
+    status = Board_setIOMux(BOARD_CTRL_CMD_IO_MUX_PORTB_MASK,
+                            BOARD_CTRL_CMD_IO_MUX_PORTB1_ENABLE);
+
+    return status;
+}
+
+/**
+ * \brief   Configures the mux on SoM board to route port A to Port B2
+ *
+ * \return  Board_SOK in case of success or appropriate error code.
+ *
+ */
+static Board_STATUS Board_setIOMUXPortB2(void)
+{
+    Board_STATUS status;
+
+    status = Board_setIOMux(BOARD_CTRL_CMD_IO_MUX_PORTB_MASK,
+                            BOARD_CTRL_CMD_IO_MUX_PORTB2_ENABLE);
+
+    return status;
+}
+
+/**
+ * \brief   Configures the mux on SoM board to route port A to Port B3
+ *
+ * \return  Board_SOK in case of success or appropriate error code.
+ *
+ */
+static Board_STATUS Board_setIOMUXPortB3(void)
+{
+    Board_STATUS status;
+
+    status = Board_setIOMux(BOARD_CTRL_CMD_IO_MUX_PORTB_MASK,
+                            BOARD_CTRL_CMD_IO_MUX_PORTB3_ENABLE);
+
+    return status;
+}
+
+/**
+ * \brief   Configures DSI to EDP bridge enable pin to high
+ *
+ * \return  Board_SOK in case of success or appropriate error code.
+ *
+ */
+static Board_STATUS Board_enableDSI2EDPBridge(void)
+{
+    Board_IoExpCfg_t ioExpCfg;
+    Board_STATUS status;
+
+    ioExpCfg.i2cInst     = BOARD_I2C_IOEXP_DEVICE4_INSTANCE;
+    ioExpCfg.socDomain   = BOARD_SOC_DOMAIN_MAIN;
+    ioExpCfg.slaveAddr   = BOARD_I2C_IOEXP_DEVICE4_ADDR;
+    ioExpCfg.enableIntr  = false;
+    ioExpCfg.ioExpType   = ONE_PORT_IOEXP;
+    ioExpCfg.portNum     = PORTNUM_0;
+    ioExpCfg.pinNum      = PIN_NUM_2;
+    ioExpCfg.signalLevel = GPIO_SIGNAL_LEVEL_HIGH;
+
+    status = Board_setIoExpPinOutput(&ioExpCfg);
+    if(status != BOARD_SOK)
+    {
+        return status;
+    }
+
+    return status;
+}
 
 /**
  * \brief Board control function
  * \param   arg  [IN]  Control command argument. 
  *                     Changes based on the command
  *
- * \return   TRUE if the given board is detected else 0.
- *           SoM board will be always connected to the base board.
- *           For SoM boardID return value TRUE indicates dual PMIC
- *           SoM and FALSE indicates alternate PMIC SoM
+ * \return   Board_SOK in case of success or appropriate error code.
  *
  */
 Board_STATUS Board_control(uint32_t cmd, void *arg)
 {
-    return BOARD_SOK;
+    Board_STATUS status;
+
+    switch (cmd)
+    {
+        case BOARD_CTRL_CMD_SET_IO_EXP_PIN_OUT:
+            status = Board_setIoExpPinOutput((Board_IoExpCfg_t *)arg);
+            break;
+
+        case BOARD_CTRL_CMD_SET_IO_MUX_PORTB1:
+            status = Board_setIOMUXPortB1();
+            break;
+
+        case BOARD_CTRL_CMD_SET_IO_MUX_PORTB2:
+            status = Board_setIOMUXPortB2();
+            break;
+
+        case BOARD_CTRL_CMD_SET_IO_MUX_PORTB3:
+            status = Board_setIOMUXPortB3();
+            break;
+
+        case BOARD_CTRL_CMD_ENABLE_DSI2DP_BRIDGE:
+            status = Board_enableDSI2EDPBridge();
+            break;
+
+        default:
+            status = BOARD_INVALID_PARAM;
+            break;
+    }
+
+    return status;
 }
index cc189054b715c3211cc15e24891686c2558fba0f..27dd3b7d118bf8c92fc88d3759adbbff2e53a797 100644 (file)
@@ -62,6 +62,41 @@ extern "C" {
 
 #define BOARD_CTRL_CMD_SET_IO_EXP_PIN_OUT       (0U)
 
+/*
+ * Enables Port A to Port B1 routing on IO Mux which enables below IOs
+ *  - Debug Trace Data
+ *  - McASP
+ */
+#define BOARD_CTRL_CMD_SET_IO_MUX_PORTB1       (1U)
+
+/*
+ * Enables Port A to Port B2 routing on IO Mux which enables below IOs
+ *  - UARTs for LIN
+ *  - MCAN3, MCAN4, MCAN5
+ *  - I2C1, I2C3
+ *  - UART8 CTS & RTS
+ *  - GPIO0_18 (DP0_HPD)
+ *  - GPIO0_23 (GPIO_RGMII1_INT#)
+ *  - GPIO0_26 (CSI2_EXP_A_GPIO2)
+ *  - GPIO0_28 (CSI2_EXP_A_GPIO4)
+ */
+#define BOARD_CTRL_CMD_SET_IO_MUX_PORTB2       (2U)
+
+/*
+ * Enables Port A to Port B3 routing on IO Mux which enables below IOs
+ *  - Hyperlink0, Hyperlink1
+ *  - SPI5
+ */
+#define BOARD_CTRL_CMD_SET_IO_MUX_PORTB3       (3U)
+
+/* Enables the DSI to eDP bridge */
+#define BOARD_CTRL_CMD_ENABLE_DSI2DP_BRIDGE     (4U)
+
+#define BOARD_CTRL_CMD_IO_MUX_PORTB_MASK       (0xE0U)
+#define BOARD_CTRL_CMD_IO_MUX_PORTB1_ENABLE    (0xC0U)
+#define BOARD_CTRL_CMD_IO_MUX_PORTB2_ENABLE    (0xE0U)
+#define BOARD_CTRL_CMD_IO_MUX_PORTB3_ENABLE    (0x50U)
+
 /**
  * \brief Structure to configure the board I2C parameters
  */
@@ -92,10 +127,7 @@ typedef struct Board_IoExpCfg_s
  * \param   arg  [IN]  Control command argument. 
  *                     Changes based on the command
  *
- * \return   TRUE if the given board is detected else 0.
- *           SoM board will be always connected to the base board.
- *           For SoM boardID return value TRUE indicates dual PMIC
- *           SoM and FALSE indicates alternate PMIC SoM
+ * \return   Board_SOK in case of success or appropriate error code.
  *
  */
 Board_STATUS Board_control(uint32_t cmd, void *arg);