gpio: tle9104: codestyle align with other gpio drivers

This commit is contained in:
Andrey Gusakov 2024-06-21 00:21:20 +03:00 committed by rusefillc
parent 3f983f846c
commit d4a44e035b
1 changed files with 37 additions and 6 deletions

View File

@ -4,6 +4,20 @@
#if defined(BOARD_TLE9104_COUNT) && BOARD_TLE9104_COUNT > 0 #if defined(BOARD_TLE9104_COUNT) && BOARD_TLE9104_COUNT > 0
/*
* TODO list:
* - support driving outputs over SPI
* - count communication errors, POR events, etc
* - support WD functionality
* - implement direct-io mapping test. Check if user provides correct direct_io data
*/
/*==========================================================================*/
/* Driver local definitions. */
/*==========================================================================*/
#define DRIVER_NAME "tle9104"
/* IN MOSI and MISO a read is defined with a s0 and a write is defined with a 1. */ /* IN MOSI and MISO a read is defined with a s0 and a write is defined with a 1. */
#define TLE9104_WR_REG(addr, val) ((((addr) & 0x0f) << 8) | ((val) & 0xff)) #define TLE9104_WR_REG(addr, val) ((((addr) & 0x0f) << 8) | ((val) & 0xff))
#define TLE9104_RD_REG(addr) (BIT(15) | (((addr) & 0x0f) << 8)) #define TLE9104_RD_REG(addr) (BIT(15) | (((addr) & 0x0f) << 8))
@ -21,6 +35,14 @@
#define TLE9104_REG_GLOBAL_STATUS 0x07 #define TLE9104_REG_GLOBAL_STATUS 0x07
#define TLE9104_REG_ICVID 0x08 #define TLE9104_REG_ICVID 0x08
/*==========================================================================*/
/* Driver exported variables. */
/*==========================================================================*/
/*==========================================================================*/
/* Driver local variables and types. */
/*==========================================================================*/
struct Tle9104 : public GpioChip { struct Tle9104 : public GpioChip {
int init() override; int init() override;
@ -45,6 +67,12 @@ private:
uint8_t diag_on34; uint8_t diag_on34;
}; };
static Tle9104 chips[BOARD_TLE9104_COUNT];
/*==========================================================================*/
/* Driver local functions. */
/*==========================================================================*/
static bool parityBit(uint16_t val) { static bool parityBit(uint16_t val) {
// (1 + number of bits set) mod 2 = parity bit // (1 + number of bits set) mod 2 = parity bit
int count = 1; int count = 1;
@ -148,17 +176,22 @@ int Tle9104::chip_init() {
return 0; return 0;
} }
/*==========================================================================*/
/* Driver exported functions. */
/*==========================================================================*/
int Tle9104::init() { int Tle9104::init() {
int ret; int ret;
m_resn.initPin("TLE9104 RESN", cfg->resn); m_resn.initPin(DRIVER_NAME " RESN", cfg->resn);
m_en.initPin("TLE9104 EN", cfg->en); m_en.initPin(DRIVER_NAME " EN", cfg->en);
// disable outputs // disable outputs
m_en.setValue(false); m_en.setValue(false);
/* TODO: ensure all direct_io pins valid, otherwise support manipulationg output states over SPI */
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
gpio_pin_markUsed(cfg->direct_io[i].port, cfg->direct_io[i].pad, "TLE9104 Direct IO"); gpio_pin_markUsed(cfg->direct_io[i].port, cfg->direct_io[i].pad, DRIVER_NAME " Direct IO");
palSetPadMode(cfg->direct_io[i].port, cfg->direct_io[i].pad, PAL_MODE_OUTPUT_PUSHPULL); palSetPadMode(cfg->direct_io[i].port, cfg->direct_io[i].pad, PAL_MODE_OUTPUT_PUSHPULL);
// Ensure all outputs are off // Ensure all outputs are off
@ -301,8 +334,6 @@ brain_pin_diag_e Tle9104::getDiag(size_t pin) {
return (brain_pin_diag_e)result; return (brain_pin_diag_e)result;
} }
static Tle9104 chips[BOARD_TLE9104_COUNT];
int tle9104_add(Gpio base, int index, const tle9104_config* cfg) { int tle9104_add(Gpio base, int index, const tle9104_config* cfg) {
Tle9104& chip = chips[index]; Tle9104& chip = chips[index];
@ -313,7 +344,7 @@ int tle9104_add(Gpio base, int index, const tle9104_config* cfg) {
chip.cfg = cfg; chip.cfg = cfg;
return gpiochip_register(base, "TLE9104", chip, 4); return gpiochip_register(base, DRIVER_NAME, chip, 4);
} }
void updatetlediag() { void updatetlediag() {