Skip to content

Commit 87177d1

Browse files
Hoang Nguyencarlescufi
authored andcommitted
drivers: gpio: rz: improve gpio driver for Renesas RZ/A2M
- Adding support for GPIO_DISCONNECTED mode. - Removing redundant interrupt configuration logic from the .pin_configure API (already handled in pin_interrupt_configure). Signed-off-by: Hoang Nguyen <[email protected]> Signed-off-by: Tien Nguyen <[email protected]>
1 parent 7e3f581 commit 87177d1

File tree

2 files changed

+22
-34
lines changed

2 files changed

+22
-34
lines changed

drivers/gpio/gpio_renesas_rza2m.c

Lines changed: 21 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -320,43 +320,30 @@ static int gpio_rza2m_pin_configure(const struct device *port_dev, gpio_pin_t pi
320320
return -ENOTSUP;
321321
}
322322

323-
/* Configure pin direction */
324-
if (flags & GPIO_OUTPUT) {
325-
gpio_rza2m_pin_configure_as_gpio(port_dev, pin, RZA2M_PDR_OUTPUT);
326-
} else if (flags & GPIO_INPUT) {
327-
gpio_rza2m_pin_configure_as_gpio(port_dev, pin, RZA2M_PDR_INPUT);
328-
} else {
329-
return -ENOTSUP;
330-
}
331-
332-
/* Configure pin drive strength */
333-
ret = gpio_rza2m_pin_drive_set(port_dev, pin, flags);
334-
if (ret) {
335-
LOG_ERR("unable to set gpio drive level");
336-
return ret;
337-
}
338-
339-
/* Configure pin initial value */
340-
if (flags & GPIO_OUTPUT_INIT_HIGH) {
341-
ret = gpio_rza2m_port_set_bits_raw(port_dev, BIT(pin));
342-
} else if (flags & GPIO_OUTPUT_INIT_LOW) {
343-
ret = gpio_rza2m_port_clear_bits_raw(port_dev, BIT(pin));
344-
}
345-
346-
/* Configure pin interrupt */
347-
if (flags & GPIO_INT_ENABLE) {
348-
if (flags & GPIO_INT_LOW_0) {
349-
return -ENOTSUP;
323+
if (!flags) {
324+
/* Disconnected mode */
325+
gpio_rza2m_pin_configure_as_gpio(port_dev, pin, RZA2M_PDR_HIZ);
326+
} else if (!(flags & GPIO_OPEN_DRAIN)) {
327+
/* Configure pin direction */
328+
if (flags & GPIO_OUTPUT) {
329+
gpio_rza2m_pin_configure_as_gpio(port_dev, pin, RZA2M_PDR_OUTPUT);
330+
} else if (flags & GPIO_INPUT) {
331+
gpio_rza2m_pin_configure_as_gpio(port_dev, pin, RZA2M_PDR_INPUT);
350332
}
351333

352-
enum gpio_int_mode mode =
353-
(flags & GPIO_INT_EDGE) ? GPIO_INT_MODE_EDGE : GPIO_INT_MODE_LEVEL;
354-
enum gpio_int_trig trig = GPIO_INT_TRIG_HIGH;
334+
/* Configure pin drive strength */
335+
ret = gpio_rza2m_pin_drive_set(port_dev, pin, flags);
336+
if (ret) {
337+
LOG_ERR("unable to set gpio drive level");
338+
return ret;
339+
}
355340

356-
ret = gpio_rza2m_pin_interrupt_configure(port_dev, pin, mode, trig);
357-
} else if (flags & GPIO_INT_DISABLE) {
358-
ret = gpio_rza2m_pin_interrupt_configure(port_dev, pin, GPIO_INT_MODE_DISABLED,
359-
GPIO_INT_TRIG_HIGH);
341+
/* Configure pin initial value */
342+
if (flags & GPIO_OUTPUT_INIT_HIGH) {
343+
ret = gpio_rza2m_port_set_bits_raw(port_dev, BIT(pin));
344+
} else if (flags & GPIO_OUTPUT_INIT_LOW) {
345+
ret = gpio_rza2m_port_clear_bits_raw(port_dev, BIT(pin));
346+
}
360347
}
361348

362349
return ret;

drivers/gpio/gpio_renesas_rza2m.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#define RZA2M_GPIO_DRIVE_STRENGTH_NORMAL 0x01
3232
#define RZA2M_DSCR_MASK 0x03
3333
#define RZA2M_PDR_MASK 0x03
34+
#define RZA2M_PDR_HIZ 0x00
3435
#define RZA2M_PDR_INPUT 0x02
3536
#define RZA2M_PDR_OUTPUT 0x03
3637
#define RZA2M_PWPR_PFSWE_MASK 0x40

0 commit comments

Comments
 (0)