gpio fixes for v5.19-rc4
- make the irqchip immutable in gpio-realtek-otto - fix error code propagation in gpio-winbond - fix device removing in gpio-grgpio - fix a typo in gpio-mxs which indicates the driver is for a different model - documentation fixes - MAINTAINERS file updates -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEFp3rbAvDxGAT0sefEacuoBRx13IFAmK2Ra0ACgkQEacuoBRx 13JXoBAAiev+IHynWHmyv27EwIH5/oH3WaAPyri15NteOnRNUr9CjVbXKX1q0Qhn 3iAtQuydF3iqjqwZrSKZ01fiSJNPjnqEJigKXVDse75LmOzhlvpjGAmfiBGtrafA N5Xw1Z80hgAT450mRHqr4EJafVloApK0LI2DDFrqj9Q/venYZMfbrC3/FzpbiPaD ADnL6xmbNuG4R+UA/wIMCgaErmvCOMEupkiFUOdJ4UuEIzG42wHlWbWwohUyQ9SM O7S2MJds/mfH7tPpYCZL8FqOxZTfDHCPtnrhWdfVZFSRUClXDMnLdyk7PTu2nALo 6LZODL02ME5p9osRBymmYxqaUbfpR0rV6OJw+dGsZmdgw5s9Jv1HFn2Ph4C2+ul2 OrgQp/ZjR2LvSXDbORDX+QcsOv5V/tmEvRtZVX3UyERJ3NtArrXYk7A5EuayP3Sk nJ+bhrUwqdFWijoCCecvSGjVEj7SkIY9Og5clSktTKHz5ZBq65DOX1GtfllkufAi Cb6vt6IgUoKJOj2tGK8wRiiKYT6jNaDKFlW7BceTrrXcP3/AsF4fBs0KtAewJmA6 Szq4ys6SqiAEm1gQ6iq77d3+ZT8h5z+6Yzl1/FL+ii4PNjQGJ83P6GIzkJz+Oncf 0uTi6WJatx76Aw7kQyT4t2dWyMe2EPAv0JoMt1DV37qYPPHdkl8= =0wLZ -----END PGP SIGNATURE----- Merge tag 'gpio-fixes-for-v5.19-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux Pull gpio fixes from Bartosz Golaszewski: - make the irqchip immutable in gpio-realtek-otto - fix error code propagation in gpio-winbond - fix device removing in gpio-grgpio - fix a typo in gpio-mxs which indicates the driver is for a different model - documentation fixes - MAINTAINERS file updates * tag 'gpio-fixes-for-v5.19-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux: gpio: mxs: Fix header comment gpio: Fix kernel-doc comments to nested union gpio: grgpio: Fix device removing gpio: winbond: Fix error code in winbond_gpio_get() gpio: realtek-otto: Make the irqchip immutable docs: driver-api: gpio: Fix filename mismatch MAINTAINERS: add include/dt-bindings/gpio to GPIO SUBSYSTEM
This commit is contained in:
commit
8c23f235a6
|
@ -6,7 +6,7 @@ This document explains how GPIOs can be assigned to given devices and functions.
|
|||
|
||||
Note that it only applies to the new descriptor-based interface. For a
|
||||
description of the deprecated integer-based GPIO interface please refer to
|
||||
gpio-legacy.txt (actually, there is no real mapping possible with the old
|
||||
legacy.rst (actually, there is no real mapping possible with the old
|
||||
interface; you just fetch an integer from somewhere and request the
|
||||
corresponding GPIO).
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ GPIO Descriptor Consumer Interface
|
|||
|
||||
This document describes the consumer interface of the GPIO framework. Note that
|
||||
it describes the new descriptor-based interface. For a description of the
|
||||
deprecated integer-based GPIO interface please refer to gpio-legacy.txt.
|
||||
deprecated integer-based GPIO interface please refer to legacy.rst.
|
||||
|
||||
|
||||
Guidelines for GPIOs consumers
|
||||
|
@ -78,7 +78,7 @@ whether the line is configured active high or active low (see
|
|||
|
||||
The two last flags are used for use cases where open drain is mandatory, such
|
||||
as I2C: if the line is not already configured as open drain in the mappings
|
||||
(see board.txt), then open drain will be enforced anyway and a warning will be
|
||||
(see board.rst), then open drain will be enforced anyway and a warning will be
|
||||
printed that the board configuration needs to be updated to match the use case.
|
||||
|
||||
Both functions return either a valid GPIO descriptor, or an error code checkable
|
||||
|
@ -270,7 +270,7 @@ driven.
|
|||
The same is applicable for open drain or open source output lines: those do not
|
||||
actively drive their output high (open drain) or low (open source), they just
|
||||
switch their output to a high impedance value. The consumer should not need to
|
||||
care. (For details read about open drain in driver.txt.)
|
||||
care. (For details read about open drain in driver.rst.)
|
||||
|
||||
With this, all the gpiod_set_(array)_value_xxx() functions interpret the
|
||||
parameter "value" as "asserted" ("1") or "de-asserted" ("0"). The physical line
|
||||
|
|
|
@ -14,12 +14,12 @@ Due to the history of GPIO interfaces in the kernel, there are two different
|
|||
ways to obtain and use GPIOs:
|
||||
|
||||
- The descriptor-based interface is the preferred way to manipulate GPIOs,
|
||||
and is described by all the files in this directory excepted gpio-legacy.txt.
|
||||
and is described by all the files in this directory excepted legacy.rst.
|
||||
- The legacy integer-based interface which is considered deprecated (but still
|
||||
usable for compatibility reasons) is documented in gpio-legacy.txt.
|
||||
usable for compatibility reasons) is documented in legacy.rst.
|
||||
|
||||
The remainder of this document applies to the new descriptor-based interface.
|
||||
gpio-legacy.txt contains the same information applied to the legacy
|
||||
legacy.rst contains the same information applied to the legacy
|
||||
integer-based interface.
|
||||
|
||||
|
||||
|
|
|
@ -8498,6 +8498,7 @@ F: Documentation/devicetree/bindings/gpio/
|
|||
F: Documentation/driver-api/gpio/
|
||||
F: drivers/gpio/
|
||||
F: include/asm-generic/gpio.h
|
||||
F: include/dt-bindings/gpio/
|
||||
F: include/linux/gpio.h
|
||||
F: include/linux/gpio/
|
||||
F: include/linux/of_gpio.h
|
||||
|
|
|
@ -434,25 +434,13 @@ static int grgpio_probe(struct platform_device *ofdev)
|
|||
static int grgpio_remove(struct platform_device *ofdev)
|
||||
{
|
||||
struct grgpio_priv *priv = platform_get_drvdata(ofdev);
|
||||
int i;
|
||||
int ret = 0;
|
||||
|
||||
if (priv->domain) {
|
||||
for (i = 0; i < GRGPIO_MAX_NGPIO; i++) {
|
||||
if (priv->uirqs[i].refcnt != 0) {
|
||||
ret = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gpiochip_remove(&priv->gc);
|
||||
|
||||
if (priv->domain)
|
||||
irq_domain_remove(priv->domain);
|
||||
|
||||
out:
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id grgpio_match[] = {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
//
|
||||
// MXC GPIO support. (c) 2008 Daniel Mack <daniel@caiaq.de>
|
||||
// MXS GPIO support. (c) 2008 Daniel Mack <daniel@caiaq.de>
|
||||
// Copyright 2008 Juergen Beisert, kernel@pengutronix.de
|
||||
//
|
||||
// Based on code from Freescale,
|
||||
|
|
|
@ -172,6 +172,8 @@ static void realtek_gpio_irq_unmask(struct irq_data *data)
|
|||
unsigned long flags;
|
||||
u16 m;
|
||||
|
||||
gpiochip_enable_irq(&ctrl->gc, line);
|
||||
|
||||
raw_spin_lock_irqsave(&ctrl->lock, flags);
|
||||
m = ctrl->intr_mask[port];
|
||||
m |= realtek_gpio_imr_bits(port_pin, REALTEK_GPIO_IMR_LINE_MASK);
|
||||
|
@ -195,6 +197,8 @@ static void realtek_gpio_irq_mask(struct irq_data *data)
|
|||
ctrl->intr_mask[port] = m;
|
||||
realtek_gpio_write_imr(ctrl, port, ctrl->intr_type[port], m);
|
||||
raw_spin_unlock_irqrestore(&ctrl->lock, flags);
|
||||
|
||||
gpiochip_disable_irq(&ctrl->gc, line);
|
||||
}
|
||||
|
||||
static int realtek_gpio_irq_set_type(struct irq_data *data, unsigned int flow_type)
|
||||
|
@ -315,13 +319,15 @@ static int realtek_gpio_irq_init(struct gpio_chip *gc)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct irq_chip realtek_gpio_irq_chip = {
|
||||
static const struct irq_chip realtek_gpio_irq_chip = {
|
||||
.name = "realtek-otto-gpio",
|
||||
.irq_ack = realtek_gpio_irq_ack,
|
||||
.irq_mask = realtek_gpio_irq_mask,
|
||||
.irq_unmask = realtek_gpio_irq_unmask,
|
||||
.irq_set_type = realtek_gpio_irq_set_type,
|
||||
.irq_set_affinity = realtek_gpio_irq_set_affinity,
|
||||
.flags = IRQCHIP_IMMUTABLE,
|
||||
GPIOCHIP_IRQ_RESOURCE_HELPERS,
|
||||
};
|
||||
|
||||
static const struct of_device_id realtek_gpio_of_match[] = {
|
||||
|
@ -404,7 +410,7 @@ static int realtek_gpio_probe(struct platform_device *pdev)
|
|||
irq = platform_get_irq_optional(pdev, 0);
|
||||
if (!(dev_flags & GPIO_INTERRUPTS_DISABLED) && irq > 0) {
|
||||
girq = &ctrl->gc.irq;
|
||||
girq->chip = &realtek_gpio_irq_chip;
|
||||
gpio_irq_chip_set_chip(girq, &realtek_gpio_irq_chip);
|
||||
girq->default_type = IRQ_TYPE_NONE;
|
||||
girq->handler = handle_bad_irq;
|
||||
girq->parent_handler = realtek_gpio_irq_handler;
|
||||
|
|
|
@ -385,12 +385,13 @@ static int winbond_gpio_get(struct gpio_chip *gc, unsigned int offset)
|
|||
unsigned long *base = gpiochip_get_data(gc);
|
||||
const struct winbond_gpio_info *info;
|
||||
bool val;
|
||||
int ret;
|
||||
|
||||
winbond_gpio_get_info(&offset, &info);
|
||||
|
||||
val = winbond_sio_enter(*base);
|
||||
if (val)
|
||||
return val;
|
||||
ret = winbond_sio_enter(*base);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
winbond_sio_select_logical(*base, info->dev);
|
||||
|
||||
|
|
|
@ -167,21 +167,24 @@ struct gpio_irq_chip {
|
|||
*/
|
||||
irq_flow_handler_t parent_handler;
|
||||
|
||||
/**
|
||||
* @parent_handler_data:
|
||||
*
|
||||
* If @per_parent_data is false, @parent_handler_data is a single
|
||||
* pointer used as the data associated with every parent interrupt.
|
||||
*
|
||||
* @parent_handler_data_array:
|
||||
*
|
||||
* If @per_parent_data is true, @parent_handler_data_array is
|
||||
* an array of @num_parents pointers, and is used to associate
|
||||
* different data for each parent. This cannot be NULL if
|
||||
* @per_parent_data is true.
|
||||
*/
|
||||
union {
|
||||
/**
|
||||
* @parent_handler_data:
|
||||
*
|
||||
* If @per_parent_data is false, @parent_handler_data is a
|
||||
* single pointer used as the data associated with every
|
||||
* parent interrupt.
|
||||
*/
|
||||
void *parent_handler_data;
|
||||
|
||||
/**
|
||||
* @parent_handler_data_array:
|
||||
*
|
||||
* If @per_parent_data is true, @parent_handler_data_array is
|
||||
* an array of @num_parents pointers, and is used to associate
|
||||
* different data for each parent. This cannot be NULL if
|
||||
* @per_parent_data is true.
|
||||
*/
|
||||
void **parent_handler_data_array;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue