From 3fa3f1ab8c248a8a155bda82955601cfdb84d2ae Mon Sep 17 00:00:00 2001 From: Andrey Gusakov Date: Mon, 24 Jun 2024 00:36:13 +0300 Subject: [PATCH] gpio: core: implement debug() hook for gpio chips --- firmware/hw_layer/drivers/gpio/core.cpp | 20 ++++++++++++++++++++ firmware/hw_layer/drivers/gpio/gpio_ext.h | 3 +++ firmware/hw_layer/pin_repository.cpp | 2 ++ 3 files changed, 25 insertions(+) diff --git a/firmware/hw_layer/drivers/gpio/core.cpp b/firmware/hw_layer/drivers/gpio/core.cpp index efb5450250..915191f19b 100644 --- a/firmware/hw_layer/drivers/gpio/core.cpp +++ b/firmware/hw_layer/drivers/gpio/core.cpp @@ -402,6 +402,21 @@ int gpiochips_get_total_pins(void) return cnt; } +void gpiochips_debug(void) +{ + int i; + + for (i = 0; i < BOARD_EXT_GPIOCHIPS; i++) { + gpiochip *chip = &chips[i]; + + if (chip->base == Gpio::Unassigned) + continue; + + efiPrintf("%s (base %d, size %d):\n", chip->name, (int)chip->base, chip->size); + chip->chip->debug(); + } +} + #if EFI_PROD_CODE /** @@ -476,4 +491,9 @@ int gpiochips_get_total_pins(void) return 0; } +void gpiochips_debug(void) +{ + return 0; +} + #endif /* BOARD_EXT_GPIOCHIPS > 0 */ diff --git a/firmware/hw_layer/drivers/gpio/gpio_ext.h b/firmware/hw_layer/drivers/gpio/gpio_ext.h index 67f5d2773f..221e1cb338 100644 --- a/firmware/hw_layer/drivers/gpio/gpio_ext.h +++ b/firmware/hw_layer/drivers/gpio/gpio_ext.h @@ -30,6 +30,7 @@ struct GpioChip { virtual int setPadPWM(size_t /*pin*/, float /*frequency*/, float /*duty*/) { return -1; } virtual brain_pin_diag_e getDiag(size_t /*pin*/) { return PIN_OK; } virtual int deinit() { return 0; } + virtual void debug() { } /* chip needs reinitialization due to some critical issue */ bool need_init; @@ -57,6 +58,8 @@ int gpiochips_writePad(brain_pin_e pin, int value); int gpiochips_readPad(brain_pin_e pin); brain_pin_diag_e gpiochips_getDiag(brain_pin_e pin); +void gpiochips_debug(); + #if EFI_PROD_CODE hardware_pwm* gpiochip_tryInitPwm(const char* msg, brain_pin_e pin, float frequency, float duty); #endif diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp index de36d1e516..9916b6fb3d 100644 --- a/firmware/hw_layer/pin_repository.cpp +++ b/firmware/hw_layer/pin_repository.cpp @@ -186,6 +186,8 @@ static void reportPins() { #endif efiPrintf("Total pins used: %d", totalPinsUsed); + + gpiochips_debug(); } __attribute__((weak)) const char * getBoardSpecificPinName(brain_pin_e /*brainPin*/) {