rv1126-uboot/drivers/irq/irq-gpio-switch.h

53 lines
1.3 KiB
C

/*
* (C) Copyright 2017 Rockchip Electronics Co., Ltd
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef _IRQ_GPIO_SWITCH_H_
#define _IRQ_GPIO_SWITCH_H_
#include <asm/io.h>
#include <common.h>
#include <irq-platform.h>
/* bank and pin bit mask */
#define GPIO_BANK_MASK 0xFFFFFF00
#define GPIO_BANK_OFFSET 8
#define GPIO_PIN_MASK 0x000000FF
#define GPIO_PIN_OFFSET 0
#define EINVAL_GPIO -1
#define PIN_BASE GIC_IRQS_NR
struct gpio_bank {
char *name;
void __iomem *regbase;
int id;
int irq_base;
int ngpio;
};
#define GPIO_BANK_REGISTER(ID, GPIO_BANK_NUM) \
{ \
.name = __stringify(gpio##ID), \
.regbase = (unsigned char __iomem *)GPIO##ID##_PHYS, \
.id = ID, \
.irq_base = PIN_BASE + (ID) * (GPIO_BANK_NUM), \
.ngpio = GPIO_BANK_NUM, \
}
/* gpio bank[31:8] and pin[7:0] */
#define GPIO_BANK(gpio) ((gpio & GPIO_BANK_MASK) >> GPIO_BANK_OFFSET)
#define GPIO_PIN(gpio) ((gpio & GPIO_PIN_MASK) >> GPIO_PIN_OFFSET)
#define GPIO_BANK_VALID(gpio) (GPIO_BANK(gpio) < GPIO_BANK_NUM)
#define GPIO_PIN_VALID(gpio) (GPIO_PIN(gpio) < GPIO_BANK_PINS)
int hard_gpio_to_irq(u32 gpio);
int irq_to_gpio(int irq);
struct gpio_bank *gpio_id_to_bank(unsigned int id);
struct gpio_bank *gpio_to_bank(unsigned gpio);
#endif /* _IRQ_GPIO_SWITCH_H_ */