gpio-bcm-kona.c (4f2c0a4acffbec01079c28f839422e64ddeff004) gpio-bcm-kona.c (c9ab610e5cd98f7fe0213b382870437368f11457)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Broadcom Kona GPIO Driver
4 *
5 * Author: Broadcom Corporation <bcm-kernel-feedback-list@broadcom.com>
6 * Copyright (C) 2012-2014 Broadcom Corporation
7 */
8
9#include <linux/bitops.h>
10#include <linux/err.h>
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Broadcom Kona GPIO Driver
4 *
5 * Author: Broadcom Corporation <bcm-kernel-feedback-list@broadcom.com>
6 * Copyright (C) 2012-2014 Broadcom Corporation
7 */
8
9#include <linux/bitops.h>
10#include <linux/err.h>
11#include <linux/io.h>
12#include <linux/gpio/driver.h>
11#include <linux/gpio/driver.h>
13#include <linux/of_device.h>
14#include <linux/init.h>
12#include <linux/init.h>
13#include <linux/io.h>
15#include <linux/irqdomain.h>
16#include <linux/irqchip/chained_irq.h>
14#include <linux/irqdomain.h>
15#include <linux/irqchip/chained_irq.h>
16#include <linux/mod_devicetable.h>
17#include <linux/platform_device.h>
18#include <linux/property.h>
17
18#define BCM_GPIO_PASSWD 0x00a5a501
19#define GPIO_PER_BANK 32
20#define GPIO_MAX_BANK_NUM 8
21
22#define GPIO_BANK(gpio) ((gpio) >> 5)
23#define GPIO_BIT(gpio) ((gpio) & (GPIO_PER_BANK - 1))
24

--- 526 unchanged lines hidden (view full) ---

551 /* Now re-lock the bank */
552 bcm_kona_gpio_write_lock_regs(reg_base, i, LOCK_CODE);
553 }
554}
555
556static int bcm_kona_gpio_probe(struct platform_device *pdev)
557{
558 struct device *dev = &pdev->dev;
19
20#define BCM_GPIO_PASSWD 0x00a5a501
21#define GPIO_PER_BANK 32
22#define GPIO_MAX_BANK_NUM 8
23
24#define GPIO_BANK(gpio) ((gpio) >> 5)
25#define GPIO_BIT(gpio) ((gpio) & (GPIO_PER_BANK - 1))
26

--- 526 unchanged lines hidden (view full) ---

553 /* Now re-lock the bank */
554 bcm_kona_gpio_write_lock_regs(reg_base, i, LOCK_CODE);
555 }
556}
557
558static int bcm_kona_gpio_probe(struct platform_device *pdev)
559{
560 struct device *dev = &pdev->dev;
559 const struct of_device_id *match;
560 struct bcm_kona_gpio_bank *bank;
561 struct bcm_kona_gpio *kona_gpio;
562 struct gpio_chip *chip;
563 int ret;
564 int i;
565
561 struct bcm_kona_gpio_bank *bank;
562 struct bcm_kona_gpio *kona_gpio;
563 struct gpio_chip *chip;
564 int ret;
565 int i;
566
566 match = of_match_device(bcm_kona_gpio_of_match, dev);
567 if (!match) {
568 dev_err(dev, "Failed to find gpio controller\n");
569 return -ENODEV;
570 }
571
572 kona_gpio = devm_kzalloc(dev, sizeof(*kona_gpio), GFP_KERNEL);
573 if (!kona_gpio)
574 return -ENOMEM;
575
576 kona_gpio->gpio_chip = template_chip;
577 chip = &kona_gpio->gpio_chip;
578 ret = platform_irq_count(pdev);
579 if (!ret) {

--- 16 unchanged lines hidden (view full) ---

596 if (!kona_gpio->banks)
597 return -ENOMEM;
598
599 kona_gpio->pdev = pdev;
600 platform_set_drvdata(pdev, kona_gpio);
601 chip->parent = dev;
602 chip->ngpio = kona_gpio->num_bank * GPIO_PER_BANK;
603
567 kona_gpio = devm_kzalloc(dev, sizeof(*kona_gpio), GFP_KERNEL);
568 if (!kona_gpio)
569 return -ENOMEM;
570
571 kona_gpio->gpio_chip = template_chip;
572 chip = &kona_gpio->gpio_chip;
573 ret = platform_irq_count(pdev);
574 if (!ret) {

--- 16 unchanged lines hidden (view full) ---

591 if (!kona_gpio->banks)
592 return -ENOMEM;
593
594 kona_gpio->pdev = pdev;
595 platform_set_drvdata(pdev, kona_gpio);
596 chip->parent = dev;
597 chip->ngpio = kona_gpio->num_bank * GPIO_PER_BANK;
598
604 kona_gpio->irq_domain = irq_domain_add_linear(dev->of_node,
605 chip->ngpio,
606 &bcm_kona_irq_ops,
607 kona_gpio);
599 kona_gpio->irq_domain = irq_domain_create_linear(dev_fwnode(dev),
600 chip->ngpio,
601 &bcm_kona_irq_ops,
602 kona_gpio);
608 if (!kona_gpio->irq_domain) {
609 dev_err(dev, "Couldn't allocate IRQ domain\n");
610 return -ENXIO;
611 }
612
613 kona_gpio->reg_base = devm_platform_ioremap_resource(pdev, 0);
614 if (IS_ERR(kona_gpio->reg_base)) {
615 ret = PTR_ERR(kona_gpio->reg_base);

--- 49 unchanged lines hidden ---
603 if (!kona_gpio->irq_domain) {
604 dev_err(dev, "Couldn't allocate IRQ domain\n");
605 return -ENXIO;
606 }
607
608 kona_gpio->reg_base = devm_platform_ioremap_resource(pdev, 0);
609 if (IS_ERR(kona_gpio->reg_base)) {
610 ret = PTR_ERR(kona_gpio->reg_base);

--- 49 unchanged lines hidden ---