Review: Address @raiden00pl comments

The fix was ported from the STM32G0 to all the STM32 platforms,
as the code is mostly the same hence presents the same failure

Signed-off-by: Javier Alonso <javieralonso@geotab.com>
This commit is contained in:
Javier Alonso 2026-07-24 14:10:53 +02:00 committed by Alin Jerpelea
parent cacf519a96
commit ec83d9a3a7
8 changed files with 88 additions and 0 deletions

View file

@ -259,6 +259,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
xcpt_t handler;
int nshared;
int i;
int ret;
/* Select the interrupt handler for this EXTI pin */
@ -333,6 +334,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
if (i == nshared)
{
/* remove any leftover callback */
ret = irq_detach(irq);
if (ret < 0)
{
return ret;
}
/* disable the interrupt */
up_disable_irq(irq);
}
}

View file

@ -266,6 +266,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
xcpt_t handler;
int nshared;
int i;
int ret;
/* Select the interrupt handler for this EXTI pin */
@ -340,6 +341,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
if (i == nshared)
{
/* remove any leftover callback */
ret = irq_detach(irq);
if (ret < 0)
{
return ret;
}
/* disable the interrupt */
up_disable_irq(irq);
}
}

View file

@ -268,6 +268,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
xcpt_t handler;
int nshared;
int i;
int ret;
/* Select the interrupt handler for this EXTI pin */
@ -342,6 +343,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
if (i == nshared)
{
/* remove any leftover callback */
ret = irq_detach(irq);
if (ret < 0)
{
return ret;
}
/* disable the interrupt */
up_disable_irq(irq);
}
}

View file

@ -262,6 +262,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
xcpt_t handler;
int nshared;
int i;
int ret;
/* Select the interrupt handler for this EXTI pin */
@ -336,6 +337,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
if (i == nshared)
{
/* remove any leftover callback */
ret = irq_detach(irq);
if (ret < 0)
{
return ret;
}
/* disable the interrupt */
up_disable_irq(irq);
}
}

View file

@ -126,6 +126,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
uint32_t pin = pinset & GPIO_PIN_MASK;
uint32_t exti = 1 << pin;
int irq = STM32_IRQ_EXTI0 + pin;
int ret;
g_gpio_handlers[pin].callback = func;
g_gpio_handlers[pin].arg = arg;
@ -139,6 +140,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
}
else
{
/* remove any leftover callback */
ret = irq_detach(irq);
if (ret < 0)
{
return ret;
}
/* disable the interrupt */
up_disable_irq(irq);
}

View file

@ -126,6 +126,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
uint32_t pin = pinset & GPIO_PIN_MASK;
uint32_t exti = 1 << pin;
int irq = STM32_IRQ_EXTI0 + pin;
int ret;
g_gpio_handlers[pin].callback = func;
g_gpio_handlers[pin].arg = arg;
@ -139,6 +140,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
}
else
{
/* remove any leftover callback */
ret = irq_detach(irq);
if (ret < 0)
{
return ret;
}
/* disable the interrupt */
up_disable_irq(irq);
}

View file

@ -260,6 +260,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
xcpt_t handler;
int nshared;
int i;
int ret;
/* Select the interrupt handler for this EXTI pin */
@ -334,6 +335,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
if (i == nshared)
{
/* remove any leftover callback */
ret = irq_detach(irq);
if (ret < 0)
{
return ret;
}
/* disable the interrupt */
up_disable_irq(irq);
}
}

View file

@ -262,6 +262,7 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
xcpt_t handler;
int nshared;
int i;
int ret;
/* Select the interrupt handler for this EXTI pin */
@ -336,6 +337,16 @@ int stm32_gpiosetevent(uint32_t pinset, bool risingedge, bool fallingedge,
if (i == nshared)
{
/* remove any leftover callback */
ret = irq_detach(irq);
if (ret < 0)
{
return ret;
}
/* disable the interrupt */
up_disable_irq(irq);
}
}