Commit 6b867c47 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'gpio-fixes-for-v6.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux

Pull gpio fixes from Bartosz Golaszewski:
 "Apart from the gpio-exar fix which addresses an older issue, they all
  fix regressions from this release cycle:

   - fix missing GPIO chip labels in gpio-zevio and gpio-altera

   - for the latter: also set GPIO base to -1 to use dynamic range
     allocation

   - fix value setting with external pull-up/down resistor in gpio-exar

   - use the recommended IDA interfaces in gpio-mpsse"

* tag 'gpio-fixes-for-v6.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux:
  gpio: mpsse: Remove usage of the deprecated ida_simple_xx() API
  gpio: exar: set value when external pull-up or pull-down is present
  gpio: altera: Add missed base and label initialisations
  gpio: zevio: Add missed label initialisation
parents 2a50b1e7 f57c0849
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -261,6 +261,11 @@ static int altera_gpio_probe(struct platform_device *pdev)
	altera_gc->gc.set		= altera_gpio_set;
	altera_gc->gc.owner		= THIS_MODULE;
	altera_gc->gc.parent		= &pdev->dev;
	altera_gc->gc.base		= -1;

	altera_gc->gc.label = devm_kasprintf(dev, GFP_KERNEL, "%pfw", dev_fwnode(dev));
	if (!altera_gc->gc.label)
		return -ENOMEM;

	altera_gc->regs = devm_platform_ioremap_resource(pdev, 0);
	if (IS_ERR(altera_gc->regs))
+6 −4
Original line number Diff line number Diff line
@@ -99,11 +99,13 @@ static void exar_set_value(struct gpio_chip *chip, unsigned int offset,
	struct exar_gpio_chip *exar_gpio = gpiochip_get_data(chip);
	unsigned int addr = exar_offset_to_lvl_addr(exar_gpio, offset);
	unsigned int bit = exar_offset_to_bit(exar_gpio, offset);
	unsigned int bit_value = value ? BIT(bit) : 0;

	if (value)
		regmap_set_bits(exar_gpio->regmap, addr, BIT(bit));
	else
		regmap_clear_bits(exar_gpio->regmap, addr, BIT(bit));
	/*
	 * regmap_write_bits() forces value to be written when an external
	 * pull up/down might otherwise indicate value was already set.
	 */
	regmap_write_bits(exar_gpio->regmap, addr, BIT(bit), bit_value);
}

static int exar_direction_output(struct gpio_chip *chip, unsigned int offset,
+2 −2
Original line number Diff line number Diff line
@@ -403,7 +403,7 @@ static void gpio_mpsse_ida_remove(void *data)
{
	struct mpsse_priv *priv = data;

	ida_simple_remove(&gpio_mpsse_ida, priv->id);
	ida_free(&gpio_mpsse_ida, priv->id);
}

static int gpio_mpsse_probe(struct usb_interface *interface,
@@ -422,7 +422,7 @@ static int gpio_mpsse_probe(struct usb_interface *interface,
	priv->intf = interface;
	priv->intf_id = interface->cur_altsetting->desc.bInterfaceNumber;

	priv->id = ida_simple_get(&gpio_mpsse_ida, 0, 0, GFP_KERNEL);
	priv->id = ida_alloc(&gpio_mpsse_ida, GFP_KERNEL);
	if (priv->id < 0)
		return priv->id;

+6 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@
#include <linux/io.h>
#include <linux/mod_devicetable.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#include <linux/slab.h>
#include <linux/spinlock.h>

@@ -169,6 +170,7 @@ static const struct gpio_chip zevio_gpio_chip = {
/* Initialization */
static int zevio_gpio_probe(struct platform_device *pdev)
{
	struct device *dev = &pdev->dev;
	struct zevio_gpio *controller;
	int status, i;

@@ -180,6 +182,10 @@ static int zevio_gpio_probe(struct platform_device *pdev)
	controller->chip = zevio_gpio_chip;
	controller->chip.parent = &pdev->dev;

	controller->chip.label = devm_kasprintf(dev, GFP_KERNEL, "%pfw", dev_fwnode(dev));
	if (!controller->chip.label)
		return -ENOMEM;

	controller->regs = devm_platform_ioremap_resource(pdev, 0);
	if (IS_ERR(controller->regs))
		return dev_err_probe(&pdev->dev, PTR_ERR(controller->regs),