Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

141 lines
3.6 KiB

/*
* Copyright (c) 2025 Renesas Electronics Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_DRIVERS_GPIO_GPIO_RENESAS_RZA2M_H_
#define ZEPHYR_DRIVERS_GPIO_GPIO_RENESAS_RZA2M_H_
#include <zephyr/sys/device_mmio.h>
#define RZA2M_PDR_OFFSET 0x0000
#define RZA2M_PODR_OFFSET 0x0040
#define RZA2M_PIDR_OFFSET 0x0060
#define RZA2M_PMR_OFFSET 0x0080
#define RZA2M_DSCR_OFFSET 0x0140
#define RZA2M_PFS_OFFSET 0x0200
#define RZA2M_PWPR_OFFSET 0x02FF
#define RZA2M_PDR(dev, port) (DEVICE_MMIO_GET(dev) + RZA2M_PDR_OFFSET + ((port) * 2))
#define RZA2M_PODR(dev, port) (DEVICE_MMIO_GET(dev) + RZA2M_PODR_OFFSET + (port))
#define RZA2M_PIDR(dev, port) (DEVICE_MMIO_GET(dev) + RZA2M_PIDR_OFFSET + (port))
#define RZA2M_PMR(dev, port) (DEVICE_MMIO_GET(dev) + RZA2M_PMR_OFFSET + (port))
#define RZA2M_DSCR(dev, port) (DEVICE_MMIO_GET(dev) + RZA2M_DSCR_OFFSET + ((port) * 2))
#define RZA2M_PFS(dev, port, pin) (DEVICE_MMIO_GET(dev) + RZA2M_PFS_OFFSET + ((port) * 8) + (pin))
#define RZA2M_PWPR(dev) (DEVICE_MMIO_GET(dev) + RZA2M_PWPR_OFFSET)
#define RZA2M_GICD_ICFGR31 0xE8221C7C
#define RZA2M_GICD_ICFGR30 0xE8221C78
#define RZA2M_GPIO_DRIVE_STRENGTH_HIGH 0b11
#define RZA2M_GPIO_DRIVE_STRENGTH_NORMAL 0x01
#define RZA2M_DSCR_MASK 0x03
#define RZA2M_PDR_MASK 0x03
#define RZA2M_PDR_HIZ 0x00
#define RZA2M_PDR_INPUT 0x02
#define RZA2M_PDR_OUTPUT 0x03
#define RZA2M_PWPR_PFSWE_MASK 0x40
#define RZA2M_PWPR_B0WI_MASK 0x80
#define RZA2M_PFS_ISEL_MASK 0x40
/* As per Table 51.37 of the hardware manual, each TINT group supports up to 2 ports. */
#define RZA2M_MAX_PORTS_PER_TINT 2
#define TINT0 480
#define TINT1 481
#define TINT2 482
#define TINT3 483
#define TINT4 484
#define TINT5 485
#define TINT6 486
#define TINT7 487
#define TINT8 488
#define TINT9 489
#define TINT10 490
#define TINT11 491
#define TINT12 492
#define TINT13 493
#define TINT14 494
#define TINT15 495
#define TINT16 496
#define TINT17 497
#define TINT18 498
#define TINT19 499
#define TINT20 500
#define TINT21 501
#define TINT22 502
#define TINT23 503
#define TINT24 504
#define TINT25 505
#define TINT26 506
#define TINT27 507
#define TINT28 508
#define TINT29 509
#define TINT30 510
#define TINT31 511
#define PORT0 0x00
#define PORT1 0x01
#define PORT2 0x02
#define PORT3 0x03
#define PORT4 0x04
#define PORT5 0x05
#define PORT6 0x06
#define PORT7 0x07
#define PORT8 0x08
#define PORT9 0x09
#define PORTA 0x0A
#define PORTB 0x0B
#define PORTC 0x0C
#define PORTD 0x0D
#define PORTE 0x0E
#define PORTF 0x0F
#define PORTG 0x10
#define PORTH 0x11
#define PORTJ 0x12
#define PORTK 0x13
#define PORTL 0x14
#define PORTM 0x15
#define UNUSED_PORT 0xFF
#define UNUSED_MASK 0x00
struct gpio_rza2m_tint_config {
DEVICE_MMIO_ROM;
void (*gpio_int_init)(void);
};
struct gpio_rza2m_tint_data {
DEVICE_MMIO_RAM;
};
typedef struct gpio_rza2m_high_allowed_pin {
uint8_t port;
uint8_t mask;
} gpio_rza2m_high_allowed_pin_t;
struct gpio_rza2m_port_config {
struct gpio_driver_config common;
uint8_t port;
uint8_t ngpios;
const struct device *int_dev;
};
struct gpio_rza2m_port_data {
struct gpio_driver_data common;
sys_slist_t callbacks;
uint8_t mask_irq_en;
};
typedef struct gpio_rza2m_port_tint_map {
uint32_t tint;
uint32_t ports[RZA2M_MAX_PORTS_PER_TINT];
uint16_t masks[RZA2M_MAX_PORTS_PER_TINT];
} gpio_rza2m_port_tint_map_t;
enum gpio_rza2m_tint_sense {
RZA2M_GPIO_TINT_SENSE_HIGH_LEVEL,
RZA2M_GPIO_TINT_SENSE_RISING_EDGE,
};
#endif /* ZEPHYR_DRIVERS_GPIO_GPIO_RENESAS_RZA2M_H_ */