hisi_gpio
struct hisi_gpio *hisi_gpio = irq_desc_get_handler_data(desc);
unsigned long irq_msk = hisi_gpio_read_reg(&hisi_gpio->chip.gc,
generic_handle_domain_irq(hisi_gpio->chip.gc.irq.domain,
static void hisi_gpio_init_irq(struct hisi_gpio *hisi_gpio)
struct gpio_chip *chip = &hisi_gpio->chip.gc;
girq_chip->parents = &hisi_gpio->irq;
girq_chip->parent_handler_data = hisi_gpio;
struct hisi_gpio *hisi_gpio)
&hisi_gpio->line_num)) {
hisi_gpio->line_num = HISI_GPIO_LINE_NUM_MAX;
if (WARN_ON(hisi_gpio->line_num > HISI_GPIO_LINE_NUM_MAX))
hisi_gpio->line_num = HISI_GPIO_LINE_NUM_MAX;
hisi_gpio->irq = platform_get_irq(pdev, idx);
hisi_gpio->line_num);
struct hisi_gpio *hisi_gpio;
hisi_gpio = devm_kzalloc(dev, sizeof(*hisi_gpio), GFP_KERNEL);
if (!hisi_gpio)
hisi_gpio->reg_base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(hisi_gpio->reg_base))
return PTR_ERR(hisi_gpio->reg_base);
hisi_gpio_get_pdata(dev, hisi_gpio);
hisi_gpio->dev = dev;
.dev = hisi_gpio->dev,
.dat = hisi_gpio->reg_base + HISI_GPIO_EXT_PORT_WX,
.set = hisi_gpio->reg_base + HISI_GPIO_SWPORT_DR_SET_WX,
.clr = hisi_gpio->reg_base + HISI_GPIO_SWPORT_DR_CLR_WX,
.dirout = hisi_gpio->reg_base + HISI_GPIO_SWPORT_DDR_SET_WX,
.dirin = hisi_gpio->reg_base + HISI_GPIO_SWPORT_DDR_CLR_WX,
ret = gpio_generic_chip_init(&hisi_gpio->chip, &config);
hisi_gpio->chip.gc.set_config = hisi_gpio_set_config;
hisi_gpio->chip.gc.ngpio = hisi_gpio->line_num;
hisi_gpio->chip.gc.base = -1;
if (hisi_gpio->irq > 0)
hisi_gpio_init_irq(hisi_gpio);
ret = devm_gpiochip_add_data(dev, &hisi_gpio->chip.gc, hisi_gpio);
struct hisi_gpio *hisi_gpio = container_of(to_gpio_generic_chip(chip),
struct hisi_gpio, chip);
void __iomem *reg = hisi_gpio->reg_base + off;
struct hisi_gpio *hisi_gpio = container_of(to_gpio_generic_chip(chip),
struct hisi_gpio, chip);
void __iomem *reg = hisi_gpio->reg_base + off;