/*
* ======== I2CCC26XX_initIO ========
* This functions initializes the I2C IOs.
*
* @pre Function assumes that the I2C handle is pointing to a hardware
* module which has already been opened.
*/
static int I2CCC26XX_initIO(I2C_Handle handle, void *pinCfg) {
I2CCC26XX_Object *object;
I2CCC26XX_HWAttrsV1 const *hwAttrs;
I2CCC26XX_I2CPinCfg i2cPins;
PIN_Config i2cPinTable[3];
uint32_t i=0;
/* Get the pointer to the object and hwAttrs */
object = handle->object;
hwAttrs = handle->hwAttrs;
/* If the pinCfg pointer is NULL, use hwAttrs pins */
if (pinCfg == NULL) {
i2cPins.pinSDA = hwAttrs->sdaPin;
i2cPins.pinSCL = hwAttrs->sclPin;
} else {
i2cPins.pinSDA = ((I2CCC26XX_I2CPinCfg *)pinCfg)->pinSDA;
i2cPins.pinSCL = ((I2CCC26XX_I2CPinCfg *)pinCfg)->pinSCL;
}
/* Handle error */
if(i2cPins.pinSDA == PIN_UNASSIGNED || i2cPins.pinSCL == PIN_UNASSIGNED) {
return I2C_STATUS_ERROR;
}
/* Configure I2C pins SDA and SCL*/
i2cPinTable[i++] = i2cPins.pinSDA | PIN_INPUT_EN | PIN_PULLUP | PIN_OPENDRAIN;
i2cPinTable[i++] = i2cPins.pinSCL | PIN_INPUT_EN | PIN_PULLUP | PIN_OPENDRAIN;
i2cPinTable[i++] = PIN_TERMINATE;
/* Allocate pins*/
object->hPin = PIN_open(&object->pinState, i2cPinTable);
if (!object->hPin) {
return I2C_STATUS_ERROR;
}
/* Set IO muxing for the UART pins */
PINCC26XX_setMux(object->hPin, i2cPins.pinSDA, IOC_PORT_MCU_I2C_MSSDA);
PINCC26XX_setMux(object->hPin, i2cPins.pinSCL, IOC_PORT_MCU_I2C_MSSCL);
return I2C_STATUS_SUCCESS;
}