Commit 576db734 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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

Pull gpio updates from Bartosz Golaszewski:
 "We have two new drivers, an assortment of updates and cleanups to many
  others, and first part of the big rework of the core GPIOLIB that's
  currently underway.

  Add to that some code shrink in the character device module and
  updates to DT bindings and that's pretty much it.

  Core GPIOLIB:
   - protect the global list of GPIO devices with a read-write semaphore
     as it is rarely modified but can be traversed by multiple readers
     at once
   - remove GPIO devices from the global list when they are
     *unregistered* and not when they are *released* (which only happens
     when the last reference is dropped) as this may lead to a
     successful lookup of an unregistered device
   - remove the unnecessary "extra_checks" switch
   - rename functions that are called with a lock taken
   - remove duplicate includes

  Character device handling:
   - use locking guards to reduce the code size
   - allocate the big linereq structure using the more suitable
     kvzalloc()
   - redulce the size of critical sections
   - improve documentation
   - move the debounce_period_us field out of struct gpio_desc

  New drivers:
   - Nuvoton NPCM SGPIO driver for BMC NPCM7xx/NPCM8xx
   - Realtek DHC (Digital Home Center) SoC GPIO driver

  Driver improvements:
   - replace gpiochip_is_requested() with a safer alternative in the
     form of gpiochip_dup_line_label() as the former returns a pointer
     to a string that can be deleted
   - implement the dbg_show() callback in gpio-sim
   - improve the coding style for local variables by removing
     unnecessary tabs
   - use generic device properties instead of OF variants in gpio-mmio
   - use the preferred coding style for __free() in gpio-mockup
   - reuse PM ops from the gpio-tangier in gpio-elkhartlake
   - rework PM and use cleanup helpers in gpio-tangier
   - fix the EIC configuration in gpio-pmic-eic-sprd
   - remove the unneeded call to platform_set_drvdata() in gpio-sifive
   - use generic GPIO helpers for driver callbacks in gpio-dwapb
   - add clock support on certain pins of gpio-ixp4xx
   - don't use the core-specific DEBUG_GPIO switch in drivers
   - kerneldoc improvements

  DT bindings:
   - add bindings for the new Realtek and Nuvoton devices
   - allow gpio-ranges in gpio-dwapb
   - support GPIO hogs in gpio-rockchip
   - describe the label property in gpio-zynqmp-modepin

  Other:
   - header cleanups
   - forward declarations cleanups"

* tag 'gpio-updates-for-v6.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux: (55 commits)
  gpiolib: replace the GPIO device mutex with a read-write semaphore
  gpiolib: remove the GPIO device from the list when it's unregistered
  gpio: nuvoton: Add Nuvoton NPCM sgpio driver
  dt-bindings: gpio: add NPCM sgpio driver bindings
  gpio: rtd: Add support for Realtek DHC(Digital Home Center) RTD SoCs
  dt-bindings: gpio: realtek: Add realtek,rtd-gpio
  gpio: pmic-eic-sprd: Configure the bit corresponding to the EIC through offset
  gpio: dwapb: Use generic request, free and set_config
  gpio: sysfs: drop tabs from local variable declarations
  gpiolib: drop tabs from local variable declarations
  gpiolib: remove extra_checks
  gpio: tps65219: don't use CONFIG_DEBUG_GPIO
  gpiolib: cdev: replace locking wrappers for gpio_device with guards
  gpiolib: cdev: replace locking wrappers for config_mutex with guards
  gpiolib: cdev: allocate linereq using kvzalloc()
  gpiolib: cdev: include overflow.h
  gpiolib: cdev: reduce locking in gpio_desc_to_lineinfo()
  gpiolib: cdev: improve documentation of get/set values
  gpiolib: cdev: fully adopt guard() and scoped_guard()
  gpiolib: remove debounce_period_us from struct gpio_desc
  ...
parents 61f4c3e6 1979a280
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ required:
  - reg
  - gpio-controller
  - "#gpio-cells"
  - "brcm,gpio-bank-widths"
  - brcm,gpio-bank-widths

additionalProperties: false

+87 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/gpio/nuvoton,sgpio.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Nuvoton SGPIO controller

maintainers:
  - Jim LIU <JJLIU0@nuvoton.com>

description: |
  This SGPIO controller is for NUVOTON NPCM7xx and NPCM8xx SoC and detailed
  information is in the NPCM7XX/8XX SERIAL I/O EXPANSION INTERFACE section.
  Nuvoton NPCM7xx SGPIO module is combines a serial to parallel IC (HC595)
  and a parallel to serial IC (HC165).
  Clock is a division of the APB3 clock.
  This interface has 4 pins (D_out , D_in, S_CLK, LDSH).
  NPCM7xx/NPCM8xx have two sgpio modules. Each module can support up
  to 64 output pins, and up to 64 input pins, the pin is only for GPI or GPO.
  GPIO pins can be programmed to support the following options
  - Support interrupt option for each input port and various interrupt
    sensitivity options (level-high, level-low, edge-high, edge-low)
  - ngpios is number of nuvoton,input-ngpios GPIO lines and nuvoton,output-ngpios GPIO lines.
    nuvoton,input-ngpios GPIO lines is only for GPI.
    nuvoton,output-ngpios GPIO lines is only for GPO.

properties:
  compatible:
    enum:
      - nuvoton,npcm750-sgpio
      - nuvoton,npcm845-sgpio

  reg:
    maxItems: 1

  gpio-controller: true

  '#gpio-cells':
    const: 2

  interrupts:
    maxItems: 1

  clocks:
    maxItems: 1

  nuvoton,input-ngpios:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      The numbers of GPIO's exposed. GPIO lines are only for GPI.
    minimum: 0
    maximum: 64

  nuvoton,output-ngpios:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      The numbers of GPIO's exposed. GPIO lines are only for GPO.
    minimum: 0
    maximum: 64

required:
  - compatible
  - reg
  - gpio-controller
  - '#gpio-cells'
  - interrupts
  - nuvoton,input-ngpios
  - nuvoton,output-ngpios
  - clocks

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/nuvoton,npcm7xx-clock.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    gpio8: gpio@101000 {
        compatible = "nuvoton,npcm750-sgpio";
        reg = <0x101000 0x200>;
        clocks = <&clk NPCM7XX_CLK_APB3>;
        interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
        gpio-controller;
        #gpio-cells = <2>;
        nuvoton,input-ngpios = <64>;
        nuvoton,output-ngpios = <64>;
    };
+69 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
# Copyright 2023 Realtek Semiconductor Corporation
%YAML 1.2
---
$id: http://devicetree.org/schemas/gpio/realtek,rtd-gpio.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Realtek DHC GPIO controller

maintainers:
  - Tzuyi Chang <tychang@realtek.com>

description:
  The GPIO controller is designed for the Realtek DHC (Digital Home Center)
  RTD series SoC family, which are high-definition media processor SoCs.

properties:
  compatible:
    enum:
      - realtek,rtd1295-misc-gpio
      - realtek,rtd1295-iso-gpio
      - realtek,rtd1315e-iso-gpio
      - realtek,rtd1319-iso-gpio
      - realtek,rtd1319d-iso-gpio
      - realtek,rtd1395-iso-gpio
      - realtek,rtd1619-iso-gpio
      - realtek,rtd1619b-iso-gpio

  reg:
    items:
      - description: GPIO controller registers
      - description: GPIO interrupt registers

  interrupts:
    items:
      - description: Interrupt number of the assert GPIO interrupt, which is
                     triggered when there is a rising edge.
      - description: Interrupt number of the deassert GPIO interrupt, which is
                     triggered when there is a falling edge.

  gpio-ranges: true

  gpio-controller: true

  "#gpio-cells":
    const: 2

required:
  - compatible
  - reg
  - interrupts
  - gpio-ranges
  - gpio-controller
  - "#gpio-cells"

additionalProperties: false

examples:
  - |
    gpio@100 {
      compatible = "realtek,rtd1319d-iso-gpio";
      reg = <0x100 0x100>,
            <0x0 0xb0>;
      interrupt-parent = <&iso_irq_mux>;
      interrupts = <19>, <20>;
      gpio-ranges = <&pinctrl 0 0 82>;
      gpio-controller;
      #gpio-cells = <2>;
    };
+7 −0
Original line number Diff line number Diff line
@@ -41,6 +41,13 @@ properties:
  "#interrupt-cells":
    const: 2

patternProperties:
  "^.+-hog(-[0-9]+)?$":
    type: object

    required:
      - gpio-hog

required:
  - compatible
  - reg
+2 −0
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@ patternProperties:
        minItems: 1
        maxItems: 32

      gpio-ranges: true

      ngpios:
        default: 32
        minimum: 1
Loading