113 lines
2.7 KiB
C++
113 lines
2.7 KiB
C++
/*
|
|
* @file smart_gpio.cpp
|
|
*
|
|
* @date Apr 13, 2019
|
|
* @author Andrey Belomutskiy, (c) 2012-2019
|
|
*/
|
|
|
|
#include "global.h"
|
|
|
|
#if EFI_PROD_CODE
|
|
#include "smart_gpio.h"
|
|
#include "efi_gpio.h"
|
|
#include "engine_configuration.h"
|
|
#include "gpio_ext.h"
|
|
#include "drivers/gpio/tle6240.h"
|
|
#include "drivers/gpio/mc33972.h"
|
|
#include "drivers/gpio/tle8888.h"
|
|
|
|
EXTERN_CONFIG;
|
|
|
|
#if (BOARD_TLE6240_COUNT > 0)
|
|
const struct tle6240_config tle6240 = {
|
|
.spi_bus = NULL /* TODO software lookup &SPID4 */,
|
|
.spi_config = {
|
|
.circular = false,
|
|
.end_cb = NULL,
|
|
.ssport = GPIOF,
|
|
.sspad = 0U,
|
|
.cr1 =
|
|
SPI_CR1_SSM |
|
|
SPI_CR1_SSI |
|
|
/* SPI_CR1_LSBFIRST | */
|
|
((3 << SPI_CR1_BR_Pos) & SPI_CR1_BR) | /* div = 16 */
|
|
SPI_CR1_MSTR |
|
|
/* SPI_CR1_CPOL | */ // = 0
|
|
SPI_CR1_CPHA | // = 1
|
|
0,
|
|
.cr2 = SPI_CR2_16BIT_MODE
|
|
},
|
|
.direct_io = {
|
|
/* IN1 - D_TACH_OUT */
|
|
[0] = {.port = GPIOG, .pad = 2},
|
|
/* IN2..4 grounded */
|
|
[1] = {.port = NULL},
|
|
[2] = {.port = NULL},
|
|
[3] = {.port = NULL},
|
|
/* IN9 - D_INJ_5 */
|
|
[4] = {.port = GPIOD, .pad = 15},
|
|
/* IN10 - D_WASTGATE */
|
|
[5] = {.port = GPIOD, .pad = 14},
|
|
/* IN11 - D_IDLE_OPEN */
|
|
[6] = {.port = GPIOC, .pad = 6},
|
|
/* IN12 - D_IDLE_CLOSE */
|
|
[7] = {.port = GPIOC, .pad = 7},
|
|
},
|
|
.reset = {.port = GPIOG, .pad = 3}
|
|
};
|
|
#endif /* (BOARD_TLE6240_COUNT > 0) */
|
|
|
|
#if (BOARD_MC33972_COUNT > 0)
|
|
const struct mc33972_config mc33972 = {
|
|
.spi_bus = NULL /* TODO software lookup &SPID4 */,
|
|
.spi_config = {
|
|
.circular = false,
|
|
.end_cb = NULL,
|
|
.ssport = GPIOB,
|
|
.sspad = 4U,
|
|
.cr1 =
|
|
SPI_CR1_SSM |
|
|
SPI_CR1_SSI |
|
|
/* SPI_CR1_LSBFIRST | */
|
|
((3 << SPI_CR1_BR_Pos) & SPI_CR1_BR) | /* div = 16 */
|
|
SPI_CR1_MSTR |
|
|
/* SPI_CR1_CPOL | */ /* = 0 */
|
|
SPI_CR1_CPHA | /* = 1 */
|
|
0,
|
|
.cr2 = SPI_CR2_24BIT_MODE
|
|
},
|
|
};
|
|
#endif /* (BOARD_MC33972_COUNT > 0) */
|
|
|
|
void initSmartGpio() {
|
|
|
|
#if (BOARD_TLE6240_COUNT > 0)
|
|
tle6240.spi_bus = getSpiDevice(engineConfiguration->tle6240spiDevice);
|
|
tle6240_add(0, &tle6240);
|
|
#else
|
|
gpiochip_use_gpio_base(TLE6240_OUTPUTS);
|
|
#endif /* (BOARD_TLE6240_COUNT > 0) */
|
|
|
|
#if (BOARD_MC33972_COUNT > 0)
|
|
mc33972.spi_bus = getSpiDevice(engineConfiguration->mc33972spiDevice);
|
|
// todo: propogate 'basePinOffset' parameter
|
|
mc33972_add(0, &mc33972);
|
|
#else
|
|
gpiochip_use_gpio_base(MC33972_INPUTS);
|
|
#endif /* (BOARD_MC33972_COUNT > 0) */
|
|
|
|
|
|
#if (BOARD_TLE6240_COUNT > 0)
|
|
if (engineConfiguration->tle8888_cs != GPIO_UNASSIGNED) {
|
|
static OutputPin tle8888Cs;
|
|
// // SPI pins are enabled in initSpiModules()
|
|
tle8888Cs.initPin("tle8888 CS", engineConfiguration->tle8888_cs,
|
|
&engineConfiguration->tle8888_csPinMode);
|
|
}
|
|
|
|
initTle8888(PASS_ENGINE_PARAMETER_SIGNATURE);
|
|
#endif /* (BOARD_TLE6240_COUNT > 0) */
|
|
}
|
|
|
|
#endif /* EFI_PROD_CODE */
|