gpio: tle9104: support coexistance with other SPI devices
Release bus after use
This commit is contained in:
parent
6d6ed1aef0
commit
8a8463fc29
|
@ -54,6 +54,8 @@ static bool parityBit(uint16_t val) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t Tle9104::readWrite(uint8_t addr, uint8_t data) {
|
uint16_t Tle9104::readWrite(uint8_t addr, uint8_t data) {
|
||||||
|
SPIDriver *spi = cfg->spi_bus;
|
||||||
|
|
||||||
uint16_t tx = (addr << 8) + data;
|
uint16_t tx = (addr << 8) + data;
|
||||||
|
|
||||||
// set the parity bit appropriately
|
// set the parity bit appropriately
|
||||||
|
@ -61,9 +63,18 @@ uint16_t Tle9104::readWrite(uint8_t addr, uint8_t data) {
|
||||||
|
|
||||||
SPIDriver* spi = cfg->spi_bus;
|
SPIDriver* spi = cfg->spi_bus;
|
||||||
|
|
||||||
|
/* Acquire ownership of the bus. */
|
||||||
|
spiAcquireBus(spi);
|
||||||
|
/* Setup transfer parameters. */
|
||||||
|
spiStart(spi, &cfg->spi_config);
|
||||||
|
/* Slave Select assertion. */
|
||||||
spiSelect(spi);
|
spiSelect(spi);
|
||||||
|
/* Atomic transfer operations. */
|
||||||
uint16_t rx = spiPolledExchange(spi, tx);
|
uint16_t rx = spiPolledExchange(spi, tx);
|
||||||
|
/* Slave Select de-assertion. */
|
||||||
spiUnselect(spi);
|
spiUnselect(spi);
|
||||||
|
/* Ownership release. */
|
||||||
|
spiReleaseBus(spi);
|
||||||
|
|
||||||
/*bool parityOk = */parityBit(rx);
|
/*bool parityOk = */parityBit(rx);
|
||||||
|
|
||||||
|
@ -104,8 +115,6 @@ int Tle9104::init() {
|
||||||
m_resn.setValue(true);
|
m_resn.setValue(true);
|
||||||
chThdSleepMilliseconds(1);
|
chThdSleepMilliseconds(1);
|
||||||
|
|
||||||
spiStart(cfg->spi_bus, &cfg->spi_config);
|
|
||||||
|
|
||||||
// read ID register
|
// read ID register
|
||||||
uint16_t id = read(TLE9104_REG_ICVID);
|
uint16_t id = read(TLE9104_REG_ICVID);
|
||||||
|
|
||||||
|
@ -143,8 +152,6 @@ int Tle9104::writePad(size_t pin, int value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tle9104::updateDiagState() {
|
void Tle9104::updateDiagState() {
|
||||||
spiStart(cfg->spi_bus, &cfg->spi_config);
|
|
||||||
|
|
||||||
diag_on12 = read(TLE9104_REG_DIAG_OUT_1_2_ON);
|
diag_on12 = read(TLE9104_REG_DIAG_OUT_1_2_ON);
|
||||||
diag_on34 = read(TLE9104_REG_DIAG_OUT_3_4_ON);
|
diag_on34 = read(TLE9104_REG_DIAG_OUT_3_4_ON);
|
||||||
diag_off = read(TLE9104_REG_DIAG_OFF);
|
diag_off = read(TLE9104_REG_DIAG_OFF);
|
||||||
|
|
Loading…
Reference in New Issue