Lines Matching +full:sc9860 +full:- +full:gpio

1 // SPDX-License-Identifier: GPL-2.0
8 #include <linux/gpio/driver.h>
15 /* GPIO registers definition */
33 #define SPRD_GPIO_BIT(x) ((x) & (SPRD_GPIO_BANK_NR - 1))
45 return sprd_gpio->base + SPRD_GPIO_BANK_SIZE * bank; in sprd_gpio_bank_base()
57 spin_lock_irqsave(&sprd_gpio->lock, flags); in sprd_gpio_update()
66 spin_unlock_irqrestore(&sprd_gpio->lock, flags); in sprd_gpio_update()
183 return -EINVAL; in sprd_gpio_irq_set_type()
198 for (bank = 0; bank * SPRD_GPIO_BANK_NR < chip->ngpio; bank++) { in sprd_gpio_irq_handler()
204 generic_handle_domain_irq(chip->irq.domain, in sprd_gpio_irq_handler()
211 .name = "sprd-gpio",
225 sprd_gpio = devm_kzalloc(&pdev->dev, sizeof(*sprd_gpio), GFP_KERNEL); in sprd_gpio_probe()
227 return -ENOMEM; in sprd_gpio_probe()
229 sprd_gpio->irq = platform_get_irq(pdev, 0); in sprd_gpio_probe()
230 if (sprd_gpio->irq < 0) in sprd_gpio_probe()
231 return sprd_gpio->irq; in sprd_gpio_probe()
233 sprd_gpio->base = devm_platform_ioremap_resource(pdev, 0); in sprd_gpio_probe()
234 if (IS_ERR(sprd_gpio->base)) in sprd_gpio_probe()
235 return PTR_ERR(sprd_gpio->base); in sprd_gpio_probe()
237 spin_lock_init(&sprd_gpio->lock); in sprd_gpio_probe()
239 sprd_gpio->chip.label = dev_name(&pdev->dev); in sprd_gpio_probe()
240 sprd_gpio->chip.ngpio = SPRD_GPIO_NR; in sprd_gpio_probe()
241 sprd_gpio->chip.base = -1; in sprd_gpio_probe()
242 sprd_gpio->chip.parent = &pdev->dev; in sprd_gpio_probe()
243 sprd_gpio->chip.request = sprd_gpio_request; in sprd_gpio_probe()
244 sprd_gpio->chip.free = sprd_gpio_free; in sprd_gpio_probe()
245 sprd_gpio->chip.get = sprd_gpio_get; in sprd_gpio_probe()
246 sprd_gpio->chip.set = sprd_gpio_set; in sprd_gpio_probe()
247 sprd_gpio->chip.direction_input = sprd_gpio_direction_input; in sprd_gpio_probe()
248 sprd_gpio->chip.direction_output = sprd_gpio_direction_output; in sprd_gpio_probe()
250 irq = &sprd_gpio->chip.irq; in sprd_gpio_probe()
252 irq->handler = handle_bad_irq; in sprd_gpio_probe()
253 irq->default_type = IRQ_TYPE_NONE; in sprd_gpio_probe()
254 irq->parent_handler = sprd_gpio_irq_handler; in sprd_gpio_probe()
255 irq->parent_handler_data = sprd_gpio; in sprd_gpio_probe()
256 irq->num_parents = 1; in sprd_gpio_probe()
257 irq->parents = &sprd_gpio->irq; in sprd_gpio_probe()
259 return devm_gpiochip_add_data(&pdev->dev, &sprd_gpio->chip, sprd_gpio); in sprd_gpio_probe()
263 { .compatible = "sprd,sc9860-gpio", },
271 .name = "sprd-gpio",
278 MODULE_DESCRIPTION("Spreadtrum GPIO driver");