mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge tag 'gpio-v5.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio
Pull GPIO updates from Linus Walleij:
"This is the bulk of GPIO changes for the v5.5 kernel cycle
Core changes:
- Expose pull up/down flags for the GPIO character device to
userspace.
After clear input from the RaspberryPi and Beagle communities, it
has been established that prototyping, industrial automation and
make communities strongly need this feature, and as we want people
to use the character device, we have implemented the simple pull
up/down interface for GPIO lines.
This means we can specify that a (chip-specific) pull up/down
resistor can be enabled, but does not offer fine-grained control
such as cases where the resistance of the same pull resistor can be
controlled (yet).
- Introduce devm_fwnode_gpiod_get_index() and start to phase out the
old symbol devm_fwnode_get_index_gpiod_from_child().
- A bit of documentation clean-up work.
- Introduce a define for GPIO line directions and deploy it in all
GPIO drivers in the drivers/gpio directory.
- Add a special callback to populate pin ranges when cooperating with
the pin control subsystem and registering ranges as part of adding
a gpiolib driver and a gpio_irq_chip driver at the same time. This
is also deployed in the Intel Merrifield driver.
New drivers:
- RDA Micro GPIO controller.
- XGS-iproc GPIO driver.
Driver improvements:
- Wake event and debounce support on the Tegra 186 driver.
- Finalize the Aspeed SGPIO driver.
- MPC8xxx uses a normal IRQ handler rather than a chained handler"
* tag 'gpio-v5.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-gpio: (64 commits)
gpio: Add TODO item for regmap helper
Documentation: gpio: driver.rst: Fix warnings
gpio: of: Fix bogus reference to gpiod_get_count()
gpiolib: Grammar s/manager/managed/
gpio: lynxpoint: Setup correct IRQ handlers
MAINTAINERS: Replace my email by one @kernel.org
gpiolib: acpi: Make acpi_gpiochip_alloc_event always return AE_OK
gpio/mpc8xxx: fix qoriq GPIO reading
gpio: mpc8xxx: Don't overwrite default irq_set_type callback
gpiolib: acpi: Print pin number on acpi_gpiochip_alloc_event errors
gpiolib: fix coding style in gpiod_hog()
drm/bridge: ti-tfp410: switch to using fwnode_gpiod_get_index()
gpio: merrifield: Pass irqchip when adding gpiochip
gpio: merrifield: Add GPIO <-> pin mapping ranges via callback
gpiolib: Introduce ->add_pin_ranges() callback
gpio: mmio: remove untrue leftover comment
gpio: em: Use platform_get_irq() to obtain interrupts
gpio: tegra186: Add debounce support
gpio: tegra186: Program interrupt route mapping
gpio: tegra186: Derive register offsets from bank/port
...
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/gpio/brcm,xgs-iproc-gpio.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Broadcom XGS iProc GPIO controller
|
||||
|
||||
maintainers:
|
||||
- Chris Packham <chris.packham@alliedtelesis.co.nz>
|
||||
|
||||
description: |
|
||||
This controller is the Chip Common A GPIO present on a number of Broadcom
|
||||
switch ASICs with integrated SoCs.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: brcm,iproc-gpio-cca
|
||||
|
||||
reg:
|
||||
items:
|
||||
- description: the I/O address containing the GPIO controller
|
||||
registers.
|
||||
- description: the I/O address containing the Chip Common A interrupt
|
||||
registers.
|
||||
|
||||
gpio-controller: true
|
||||
|
||||
'#gpio-cells':
|
||||
const: 2
|
||||
|
||||
ngpios:
|
||||
minimum: 0
|
||||
maximum: 32
|
||||
|
||||
interrupt-controller: true
|
||||
|
||||
'#interrupt-cells':
|
||||
const: 2
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- "#gpio-cells"
|
||||
- gpio-controller
|
||||
|
||||
dependencies:
|
||||
interrupt-controller: [ interrupts ]
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
gpio@18000060 {
|
||||
compatible = "brcm,iproc-gpio-cca";
|
||||
#gpio-cells = <2>;
|
||||
reg = <0x18000060 0x50>,
|
||||
<0x18000000 0x50>;
|
||||
ngpios = <12>;
|
||||
gpio-controller;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
interrupts = <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>;
|
||||
};
|
||||
|
||||
|
||||
...
|
||||
50
Documentation/devicetree/bindings/gpio/gpio-rda.yaml
Normal file
50
Documentation/devicetree/bindings/gpio/gpio-rda.yaml
Normal file
@@ -0,0 +1,50 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/gpio/gpio-rda.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: RDA Micro GPIO controller
|
||||
|
||||
maintainers:
|
||||
- Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: rda,8810pl-gpio
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
gpio-controller: true
|
||||
|
||||
"#gpio-cells":
|
||||
const: 2
|
||||
|
||||
ngpios:
|
||||
description:
|
||||
Number of available gpios in a bank.
|
||||
minimum: 1
|
||||
maximum: 32
|
||||
|
||||
interrupt-controller: true
|
||||
|
||||
"#interrupt-cells":
|
||||
const: 2
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- gpio-controller
|
||||
- "#gpio-cells"
|
||||
- ngpios
|
||||
- interrupt-controller
|
||||
- "#interrupt-cells"
|
||||
- interrupts
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
...
|
||||
@@ -8,6 +8,7 @@ Required Properties:
|
||||
- "renesas,gpio-r8a7745": for R8A7745 (RZ/G1E) compatible GPIO controller.
|
||||
- "renesas,gpio-r8a77470": for R8A77470 (RZ/G1C) compatible GPIO controller.
|
||||
- "renesas,gpio-r8a774a1": for R8A774A1 (RZ/G2M) compatible GPIO controller.
|
||||
- "renesas,gpio-r8a774b1": for R8A774B1 (RZ/G2N) compatible GPIO controller.
|
||||
- "renesas,gpio-r8a774c0": for R8A774C0 (RZ/G2E) compatible GPIO controller.
|
||||
- "renesas,gpio-r8a7778": for R8A7778 (R-Car M1) compatible GPIO controller.
|
||||
- "renesas,gpio-r8a7779": for R8A7779 (R-Car H1) compatible GPIO controller.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
A driver for a selfmade cheap BT8xx based PCI GPIO-card (bt8xxgpio)
|
||||
===================================================================
|
||||
|
||||
For advanced documentation, see http://www.bu3sch.de/btgpio.php
|
||||
For advanced documentation, see https://bues.ch/cms/unmaintained/btgpio.html
|
||||
|
||||
A generic digital 24-port PCI GPIO card can be built out of an ordinary
|
||||
Brooktree bt848, bt849, bt878 or bt879 based analog TV tuner card. The
|
||||
@@ -5,7 +5,7 @@ GPIO Driver Interface
|
||||
This document serves as a guide for writers of GPIO chip drivers.
|
||||
|
||||
Each GPIO controller driver needs to include the following header, which defines
|
||||
the structures used to define a GPIO driver:
|
||||
the structures used to define a GPIO driver::
|
||||
|
||||
#include <linux/gpio/driver.h>
|
||||
|
||||
@@ -398,12 +398,15 @@ provided. A big portion of overhead code will be managed by gpiolib,
|
||||
under the assumption that your interrupts are 1-to-1-mapped to the
|
||||
GPIO line index:
|
||||
|
||||
GPIO line offset Hardware IRQ
|
||||
0 0
|
||||
1 1
|
||||
2 2
|
||||
... ...
|
||||
ngpio-1 ngpio-1
|
||||
.. csv-table::
|
||||
:header: GPIO line offset, Hardware IRQ
|
||||
|
||||
0,0
|
||||
1,1
|
||||
2,2
|
||||
...,...
|
||||
ngpio-1, ngpio-1
|
||||
|
||||
|
||||
If some GPIO lines do not have corresponding IRQs, the bitmask valid_mask
|
||||
and the flag need_valid_mask in gpio_irq_chip can be used to mask off some
|
||||
@@ -413,7 +416,9 @@ The preferred way to set up the helpers is to fill in the
|
||||
struct gpio_irq_chip inside struct gpio_chip before adding the gpio_chip.
|
||||
If you do this, the additional irq_chip will be set up by gpiolib at the
|
||||
same time as setting up the rest of the GPIO functionality. The following
|
||||
is a typical example of a cascaded interrupt handler using gpio_irq_chip:
|
||||
is a typical example of a cascaded interrupt handler using gpio_irq_chip::
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/* Typical state container with dynamic irqchip */
|
||||
struct my_gpio {
|
||||
@@ -448,7 +453,9 @@ is a typical example of a cascaded interrupt handler using gpio_irq_chip:
|
||||
return devm_gpiochip_add_data(dev, &g->gc, g);
|
||||
|
||||
The helper support using hierarchical interrupt controllers as well.
|
||||
In this case the typical set-up will look like this:
|
||||
In this case the typical set-up will look like this::
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
/* Typical state container with dynamic irqchip */
|
||||
struct my_gpio {
|
||||
|
||||
@@ -13,6 +13,7 @@ Contents:
|
||||
board
|
||||
drivers-on-gpio
|
||||
legacy
|
||||
bt8xxgpio
|
||||
|
||||
Core
|
||||
====
|
||||
|
||||
@@ -70,7 +70,6 @@ available subsections can be seen below.
|
||||
fpga/index
|
||||
acpi/index
|
||||
backlight/lp855x-driver.rst
|
||||
bt8xxgpio
|
||||
connector
|
||||
console
|
||||
dcdbas
|
||||
|
||||
@@ -2183,9 +2183,11 @@ L: linux-unisoc@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: arch/arm/boot/dts/rda8810pl-*
|
||||
F: drivers/clocksource/timer-rda.c
|
||||
F: drivers/gpio/gpio-rda.c
|
||||
F: drivers/irqchip/irq-rda-intc.c
|
||||
F: drivers/tty/serial/rda-uart.c
|
||||
F: Documentation/devicetree/bindings/arm/rda.yaml
|
||||
F: Documentation/devicetree/bindings/gpio/gpio-rda.yaml
|
||||
F: Documentation/devicetree/bindings/interrupt-controller/rda,8810pl-intc.txt
|
||||
F: Documentation/devicetree/bindings/serial/rda,8810pl-uart.txt
|
||||
F: Documentation/devicetree/bindings/timer/rda,8810pl-timer.txt
|
||||
@@ -8329,7 +8331,7 @@ F: Documentation/fb/intelfb.rst
|
||||
F: drivers/video/fbdev/intelfb/
|
||||
|
||||
INTEL GPIO DRIVERS
|
||||
M: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
M: Andy Shevchenko <andy@kernel.org>
|
||||
L: linux-gpio@vger.kernel.org
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel.git
|
||||
@@ -8483,7 +8485,7 @@ F: arch/x86/include/asm/intel_pmc_ipc.h
|
||||
F: arch/x86/include/asm/intel_punit_ipc.h
|
||||
|
||||
INTEL PMIC GPIO DRIVERS
|
||||
M: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
M: Andy Shevchenko <andy@kernel.org>
|
||||
S: Maintained
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel.git
|
||||
F: drivers/gpio/gpio-*cove.c
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/ahci_platform.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
#include <linux/mfd/syscon/imx6q-iomuxc-gpr.h>
|
||||
#include <linux/libata.h>
|
||||
@@ -100,7 +100,7 @@ struct imx_ahci_priv {
|
||||
struct clk *phy_pclk0;
|
||||
struct clk *phy_pclk1;
|
||||
void __iomem *phy_base;
|
||||
int clkreq_gpio;
|
||||
struct gpio_desc *clkreq_gpiod;
|
||||
struct regmap *gpr;
|
||||
bool no_device;
|
||||
bool first_time;
|
||||
@@ -980,7 +980,6 @@ static struct scsi_host_template ahci_platform_sht = {
|
||||
|
||||
static int imx8_sata_probe(struct device *dev, struct imx_ahci_priv *imxpriv)
|
||||
{
|
||||
int ret;
|
||||
struct resource *phy_res;
|
||||
struct platform_device *pdev = imxpriv->ahci_pdev;
|
||||
struct device_node *np = dev->of_node;
|
||||
@@ -1033,20 +1032,12 @@ static int imx8_sata_probe(struct device *dev, struct imx_ahci_priv *imxpriv)
|
||||
}
|
||||
|
||||
/* Fetch GPIO, then enable the external OSC */
|
||||
imxpriv->clkreq_gpio = of_get_named_gpio(np, "clkreq-gpio", 0);
|
||||
if (gpio_is_valid(imxpriv->clkreq_gpio)) {
|
||||
ret = devm_gpio_request_one(dev, imxpriv->clkreq_gpio,
|
||||
GPIOF_OUT_INIT_LOW,
|
||||
"SATA CLKREQ");
|
||||
if (ret == -EBUSY) {
|
||||
dev_info(dev, "clkreq had been initialized.\n");
|
||||
} else if (ret) {
|
||||
dev_err(dev, "%d unable to get clkreq.\n", ret);
|
||||
return ret;
|
||||
}
|
||||
} else if (imxpriv->clkreq_gpio == -EPROBE_DEFER) {
|
||||
return imxpriv->clkreq_gpio;
|
||||
}
|
||||
imxpriv->clkreq_gpiod = devm_gpiod_get_optional(dev, "clkreq",
|
||||
GPIOD_OUT_LOW | GPIOD_FLAGS_BIT_NONEXCLUSIVE);
|
||||
if (IS_ERR(imxpriv->clkreq_gpiod))
|
||||
return PTR_ERR(imxpriv->clkreq_gpiod);
|
||||
if (imxpriv->clkreq_gpiod)
|
||||
gpiod_set_consumer_name(imxpriv->clkreq_gpiod, "SATA CLKREQ");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -120,6 +120,14 @@ config GPIO_ASPEED
|
||||
help
|
||||
Say Y here to support Aspeed AST2400 and AST2500 GPIO controllers.
|
||||
|
||||
config GPIO_ASPEED_SGPIO
|
||||
bool "Aspeed SGPIO support"
|
||||
depends on (ARCH_ASPEED || COMPILE_TEST) && OF_GPIO
|
||||
select GPIO_GENERIC
|
||||
select GPIOLIB_IRQCHIP
|
||||
help
|
||||
Say Y here to support Aspeed AST2500 SGPIO functionality.
|
||||
|
||||
config GPIO_ATH79
|
||||
tristate "Atheros AR71XX/AR724X/AR913X GPIO support"
|
||||
default y if ATH79
|
||||
@@ -147,6 +155,15 @@ config GPIO_BCM_KONA
|
||||
help
|
||||
Turn on GPIO support for Broadcom "Kona" chips.
|
||||
|
||||
config GPIO_BCM_XGS_IPROC
|
||||
tristate "BRCM XGS iProc GPIO support"
|
||||
depends on OF_GPIO && (ARCH_BCM_IPROC || COMPILE_TEST)
|
||||
select GPIO_GENERIC
|
||||
select GPIOLIB_IRQCHIP
|
||||
default ARCH_BCM_IPROC
|
||||
help
|
||||
Say yes here to enable GPIO support for Broadcom XGS iProc SoCs.
|
||||
|
||||
config GPIO_BRCMSTB
|
||||
tristate "BRCMSTB GPIO support"
|
||||
default y if (ARCH_BRCMSTB || BMIPS_GENERIC)
|
||||
@@ -435,6 +452,15 @@ config GPIO_RCAR
|
||||
help
|
||||
Say yes here to support GPIO on Renesas R-Car SoCs.
|
||||
|
||||
config GPIO_RDA
|
||||
bool "RDA Micro GPIO controller support"
|
||||
depends on ARCH_RDA || COMPILE_TEST
|
||||
depends on OF_GPIO
|
||||
select GPIO_GENERIC
|
||||
select GPIOLIB_IRQCHIP
|
||||
help
|
||||
Say Y here to support RDA Micro GPIO controller.
|
||||
|
||||
config GPIO_REG
|
||||
bool
|
||||
help
|
||||
@@ -531,6 +557,7 @@ config GPIO_TEGRA186
|
||||
depends on ARCH_TEGRA_186_SOC || COMPILE_TEST
|
||||
depends on OF_GPIO
|
||||
select GPIOLIB_IRQCHIP
|
||||
select IRQ_DOMAIN_HIERARCHY
|
||||
help
|
||||
Say yes here to support GPIO pins on NVIDIA Tegra186 SoCs.
|
||||
|
||||
@@ -1320,7 +1347,7 @@ config GPIO_BT8XX
|
||||
The card needs to be physically altered for using it as a
|
||||
GPIO card. For more information on how to build a GPIO card
|
||||
from a BT8xx TV card, see the documentation file at
|
||||
Documentation/driver-api/bt8xxgpio.rst
|
||||
Documentation/driver-api/gpio/bt8xxgpio.rst
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
|
||||
@@ -32,8 +32,10 @@ obj-$(CONFIG_GPIO_AMD_FCH) += gpio-amd-fch.o
|
||||
obj-$(CONFIG_GPIO_AMDPT) += gpio-amdpt.o
|
||||
obj-$(CONFIG_GPIO_ARIZONA) += gpio-arizona.o
|
||||
obj-$(CONFIG_GPIO_ASPEED) += gpio-aspeed.o
|
||||
obj-$(CONFIG_GPIO_ASPEED_SGPIO) += gpio-aspeed-sgpio.o
|
||||
obj-$(CONFIG_GPIO_ATH79) += gpio-ath79.o
|
||||
obj-$(CONFIG_GPIO_BCM_KONA) += gpio-bcm-kona.o
|
||||
obj-$(CONFIG_GPIO_BCM_XGS_IPROC) += gpio-xgs-iproc.o
|
||||
obj-$(CONFIG_GPIO_BD70528) += gpio-bd70528.o
|
||||
obj-$(CONFIG_GPIO_BD9571MWV) += gpio-bd9571mwv.o
|
||||
obj-$(CONFIG_GPIO_BRCMSTB) += gpio-brcmstb.o
|
||||
@@ -115,6 +117,7 @@ obj-$(CONFIG_GPIO_PXA) += gpio-pxa.o
|
||||
obj-$(CONFIG_GPIO_RASPBERRYPI_EXP) += gpio-raspberrypi-exp.o
|
||||
obj-$(CONFIG_GPIO_RC5T583) += gpio-rc5t583.o
|
||||
obj-$(CONFIG_GPIO_RCAR) += gpio-rcar.o
|
||||
obj-$(CONFIG_GPIO_RDA) += gpio-rda.o
|
||||
obj-$(CONFIG_GPIO_RDC321X) += gpio-rdc321x.o
|
||||
obj-$(CONFIG_GPIO_REG) += gpio-reg.o
|
||||
obj-$(CONFIG_ARCH_SA1100) += gpio-sa1100.o
|
||||
|
||||
@@ -80,6 +80,10 @@ Work items:
|
||||
- Look over and identify any remaining easily converted drivers and
|
||||
dry-code conversions to MMIO GPIO for maintainers to test
|
||||
|
||||
- Expand the MMIO GPIO or write a new library for regmap-based I/O
|
||||
helpers for GPIO drivers on regmap that simply use offsets
|
||||
0..n in some register to drive GPIO lines
|
||||
|
||||
- Expand the MMIO GPIO or write a new library for port-mapped I/O
|
||||
helpers (x86 inb()/outb()) and convert port-mapped I/O drivers to use
|
||||
this with dry-coding and sending to maintainers to test
|
||||
|
||||
@@ -59,7 +59,10 @@ static int dio48e_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
|
||||
const unsigned port = offset / 8;
|
||||
const unsigned mask = BIT(offset % 8);
|
||||
|
||||
return !!(dio48egpio->io_state[port] & mask);
|
||||
if (dio48egpio->io_state[port] & mask)
|
||||
return GPIO_LINE_DIRECTION_IN;
|
||||
|
||||
return GPIO_LINE_DIRECTION_OUT;
|
||||
}
|
||||
|
||||
static int dio48e_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
|
||||
|
||||
@@ -53,7 +53,7 @@ struct idi_48_gpio {
|
||||
|
||||
static int idi_48_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
return 1;
|
||||
return GPIO_LINE_DIRECTION_IN;
|
||||
}
|
||||
|
||||
static int idi_48_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
|
||||
@@ -65,7 +65,7 @@ static int idi_48_gpio_get(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
struct idi_48_gpio *const idi48gpio = gpiochip_get_data(chip);
|
||||
unsigned i;
|
||||
const unsigned register_offset[6] = { 0, 1, 2, 4, 5, 6 };
|
||||
static const unsigned int register_offset[6] = { 0, 1, 2, 4, 5, 6 };
|
||||
unsigned base_offset;
|
||||
unsigned mask;
|
||||
|
||||
|
||||
@@ -51,9 +51,9 @@ struct idio_16_gpio {
|
||||
static int idio_16_gpio_get_direction(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
if (offset > 15)
|
||||
return 1;
|
||||
return GPIO_LINE_DIRECTION_IN;
|
||||
|
||||
return 0;
|
||||
return GPIO_LINE_DIRECTION_OUT;
|
||||
}
|
||||
|
||||
static int idio_16_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
|
||||
|
||||
@@ -77,7 +77,10 @@ static int mmio_74xx_get_direction(struct gpio_chip *gc, unsigned offset)
|
||||
{
|
||||
struct mmio_74xx_gpio_priv *priv = gpiochip_get_data(gc);
|
||||
|
||||
return !(priv->flags & MMIO_74XX_DIR_OUT);
|
||||
if (priv->flags & MMIO_74XX_DIR_OUT)
|
||||
return GPIO_LINE_DIRECTION_OUT;
|
||||
|
||||
return GPIO_LINE_DIRECTION_IN;
|
||||
}
|
||||
|
||||
static int mmio_74xx_dir_in(struct gpio_chip *gc, unsigned int gpio)
|
||||
|
||||
@@ -92,7 +92,7 @@ static int amd_fch_gpio_get_direction(struct gpio_chip *gc, unsigned int gpio)
|
||||
ret = (readl_relaxed(ptr) & AMD_FCH_GPIO_FLAG_DIRECTION);
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
return ret;
|
||||
return ret ? GPIO_LINE_DIRECTION_IN : GPIO_LINE_DIRECTION_OUT;
|
||||
}
|
||||
|
||||
static void amd_fch_gpio_set(struct gpio_chip *gc,
|
||||
|
||||
@@ -487,10 +487,10 @@ static int aspeed_gpio_get_direction(struct gpio_chip *gc, unsigned int offset)
|
||||
u32 val;
|
||||
|
||||
if (!have_input(gpio, offset))
|
||||
return 0;
|
||||
return GPIO_LINE_DIRECTION_OUT;
|
||||
|
||||
if (!have_output(gpio, offset))
|
||||
return 1;
|
||||
return GPIO_LINE_DIRECTION_IN;
|
||||
|
||||
spin_lock_irqsave(&gpio->lock, flags);
|
||||
|
||||
@@ -498,8 +498,7 @@ static int aspeed_gpio_get_direction(struct gpio_chip *gc, unsigned int offset)
|
||||
|
||||
spin_unlock_irqrestore(&gpio->lock, flags);
|
||||
|
||||
return !val;
|
||||
|
||||
return val ? GPIO_LINE_DIRECTION_OUT : GPIO_LINE_DIRECTION_IN;
|
||||
}
|
||||
|
||||
static inline int irqd_to_aspeed_gpio_data(struct irq_data *d,
|
||||
|
||||
@@ -226,7 +226,6 @@ static int ath79_gpio_probe(struct platform_device *pdev)
|
||||
struct device_node *np = dev->of_node;
|
||||
struct ath79_gpio_ctrl *ctrl;
|
||||
struct gpio_irq_chip *girq;
|
||||
struct resource *res;
|
||||
u32 ath79_gpio_count;
|
||||
bool oe_inverted;
|
||||
int err;
|
||||
@@ -256,12 +255,9 @@ static int ath79_gpio_probe(struct platform_device *pdev)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!res)
|
||||
return -EINVAL;
|
||||
ctrl->base = devm_ioremap_nocache(dev, res->start, resource_size(res));
|
||||
if (!ctrl->base)
|
||||
return -ENOMEM;
|
||||
ctrl->base = devm_platform_ioremap_resource(pdev, 0);
|
||||
if (IS_ERR(ctrl->base))
|
||||
return PTR_ERR(ctrl->base);
|
||||
|
||||
raw_spin_lock_init(&ctrl->lock);
|
||||
err = bgpio_init(&ctrl->gc, dev, 4,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user