sprd_gpio
struct sprd_gpio *sprd_gpio = gpiochip_get_data(chip);
void __iomem *base = sprd_gpio_bank_base(sprd_gpio, bank);
struct sprd_gpio *sprd_gpio;
sprd_gpio = devm_kzalloc(&pdev->dev, sizeof(*sprd_gpio), GFP_KERNEL);
if (!sprd_gpio)
sprd_gpio->irq = platform_get_irq(pdev, 0);
if (sprd_gpio->irq < 0)
return sprd_gpio->irq;
sprd_gpio->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(sprd_gpio->base))
return PTR_ERR(sprd_gpio->base);
raw_spin_lock_init(&sprd_gpio->lock);
sprd_gpio->chip.label = dev_name(&pdev->dev);
sprd_gpio->chip.ngpio = SPRD_GPIO_NR;
sprd_gpio->chip.base = -1;
sprd_gpio->chip.parent = &pdev->dev;
sprd_gpio->chip.request = sprd_gpio_request;
sprd_gpio->chip.free = sprd_gpio_free;
sprd_gpio->chip.get = sprd_gpio_get;
sprd_gpio->chip.set = sprd_gpio_set;
sprd_gpio->chip.direction_input = sprd_gpio_direction_input;
sprd_gpio->chip.direction_output = sprd_gpio_direction_output;
irq = &sprd_gpio->chip.irq;
irq->parent_handler_data = sprd_gpio;
irq->parents = &sprd_gpio->irq;
return devm_gpiochip_add_data(&pdev->dev, &sprd_gpio->chip, sprd_gpio);
static inline void __iomem *sprd_gpio_bank_base(struct sprd_gpio *sprd_gpio,
return sprd_gpio->base + SPRD_GPIO_BANK_SIZE * bank;
struct sprd_gpio *sprd_gpio = gpiochip_get_data(chip);
void __iomem *base = sprd_gpio_bank_base(sprd_gpio,
raw_spin_lock_irqsave(&sprd_gpio->lock, flags);
raw_spin_unlock_irqrestore(&sprd_gpio->lock, flags);
struct sprd_gpio *sprd_gpio = gpiochip_get_data(chip);
void __iomem *base = sprd_gpio_bank_base(sprd_gpio,