Commit 29d9983b authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull pin control updates from Linus Walleij:
 "Core changes:

   - None really.

  New drivers:

   - AMD ISP411 "AMD ISP" driver

   - Exynos 2200 and 7870 SoC subdrivers

   - Sophgo RISC-V SG2042 and SG2044 subdrivers

   - Amlogic A4 subdriver

   - Rockchip RK3528 subdriver

   - Broadcom BCM21664 subdriver

   - Allwinner A523/T527 subdriver

   - Ingenic X1600 subdriver

   - Microchip SAMA7D65 subdriver, essentially a re-branded Atmel AT91
     PIO4 driver, but nowadays a Microschip SoC line

  Improvements:

   - Bring in the devm_kmemdup_array() helper and use it throughout,
     also bring in changes to other subsystems for this to establish
     this helper

   - Support EGPIO on the Qualcomm SA8775P SoC

   - Extend EINT support in the Mediatek driver"

* tag 'pinctrl-v6.15-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: (101 commits)
  pinctrl: mediatek: Add EINT support for multiple addresses
  pinctrl: amlogic-a4: Drop surplus semicolon
  pinctrl: nuvoton: Reduce use of OF-specific APIs
  pinctrl: nuvoton: Convert to use struct group_desc
  pinctrl: nuvoton: Make use of struct pinfunction and PINCTRL_PINFUNCTION()
  pinctrl: nuvoton: Convert to use struct pingroup and PINCTRL_PINGROUP()
  pinctrl: npcm8xx: Fix incorrect struct npcm8xx_pincfg assignment
  pinctrl: tegra: Fix off by one in tegra_pinctrl_get_group()
  pinctrl: PINCTRL_AMDISP should depend on DRM_AMD_ISP
  pinctrl: qcom: sa8775p: Enable egpio function
  dt-bindings: pinctrl: qcom: Add egpio function for sa8775p
  pinctrl: qcom: tlmm-test: Validate irq_enable delivers edge irqs
  pinctrl: qcom: Clear latched interrupt status when changing IRQ type
  dt-bindings: pinctrl: airoha: Add missing gpio-ranges property
  pinctrl: bcm281xx: Add missing assignment in bcm21664_pinctrl_lock_all()
  pinctrl: amd: isp411: Fix IS_ERR() vs NULL check in probe()
  dt-bindings: pinctrl: at91-pio4: add microchip,sama7d65-pinctrl
  pinctrl: tegra: Set SFIO mode to Mux Register
  pinctrl-tegra: Restore SFSEL bit when freeing pins
  pinctrl: tegra: Add descriptions for SoC data fields
  ...
parents 93d52288 3ef9f710
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -24,6 +24,9 @@ properties:
  '#gpio-cells':
    const: 2

  gpio-ranges:
    maxItems: 1

  interrupt-controller: true

  '#interrupt-cells':
+175 −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/pinctrl/allwinner,sun55i-a523-pinctrl.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Allwinner A523 Pin Controller

maintainers:
  - Andre Przywara <andre.przywara@arm.com>

properties:
  "#gpio-cells":
    const: 3
    description:
      GPIO consumers must use three arguments, first the number of the
      bank, then the pin number inside that bank, and finally the GPIO
      flags.

  "#interrupt-cells":
    const: 3
    description:
      Interrupts consumers must use three arguments, first the number
      of the bank, then the pin number inside that bank, and finally
      the interrupts flags.

  compatible:
    enum:
      - allwinner,sun55i-a523-pinctrl
      - allwinner,sun55i-a523-r-pinctrl

  reg:
    maxItems: 1

  interrupts:
    minItems: 2
    maxItems: 10
    description:
      One interrupt per external interrupt bank supported on the
      controller, sorted by bank number ascending order.

  clocks:
    items:
      - description: Bus Clock
      - description: High Frequency Oscillator
      - description: Low Frequency Oscillator

  clock-names:
    items:
      - const: apb
      - const: hosc
      - const: losc

  gpio-controller: true
  interrupt-controller: true
  gpio-line-names: true

  input-debounce:
    description:
      Debouncing periods in microseconds, one period per interrupt
      bank found in the controller
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 2
    maxItems: 10

patternProperties:
  # It's pretty scary, but the basic idea is that:
  #   - One node name can start with either s- or r- for PRCM nodes,
  #   - Then, the name itself can be any repetition of <string>- (to
  #     accommodate with nodes like uart4-rts-cts-pins), where each
  #     string can be either starting with 'p' but in a string longer
  #     than 3, or something that doesn't start with 'p',
  #   - Then, the bank name is optional and will be between pa and pm.
  #     Some pins groups that have several options will have the pin
  #     numbers then,
  #   - Finally, the name will end with either -pin or pins.

  "^([rs]-)?(([a-z0-9]{3,}|[a-oq-z][a-z0-9]*?)?-)+?(p[a-m][0-9]*?-)??pins?$":
    type: object

    properties:
      pins: true
      function: true
      bias-disable: true
      bias-pull-up: true
      bias-pull-down: true

      drive-strength:
        $ref: /schemas/types.yaml#/definitions/uint32
        enum: [10, 20, 30, 40]

      allwinner,pinmux:
        $ref: /schemas/types.yaml#/definitions/uint32-array
        description:
          Pinmux selector value, for each pin. Almost every time this value
          is the same for all pins, so any array shorter than the number of
          pins will repeat the last value, to allow just specifying a single
          cell, for all cells.

    required:
      - pins
      - allwinner,pinmux
      - function

    additionalProperties: false

  "^vcc-p[a-m]-supply$":
    description:
      Power supplies for pin banks.

required:
  - "#gpio-cells"
  - compatible
  - reg
  - clocks
  - clock-names
  - gpio-controller
  - "#interrupt-cells"
  - interrupts
  - interrupt-controller

allOf:
  - $ref: pinctrl.yaml#
  - if:
      properties:
        compatible:
          enum:
            - allwinner,sun55i-a523-pinctrl

    then:
      properties:
        interrupts:
          minItems: 10
          maxItems: 10

  - if:
      properties:
        compatible:
          enum:
            - allwinner,sun55i-a523-r-pinctrl

    then:
      properties:
        interrupts:
          minItems: 2
          maxItems: 2

additionalProperties: false

examples:
  - |
    r_pio: pinctrl@7022000 {
        compatible = "allwinner,sun55i-a523-r-pinctrl";
        reg = <0x7022000 0x800>;
        interrupts = <0 159 4>, <0 161 4>;
        clocks = <&r_ccu 1>, <&osc24M>, <&osc32k>;
        clock-names = "apb", "hosc", "losc";
        gpio-controller;
        #gpio-cells = <3>;
        interrupt-controller;
        #interrupt-cells = <3>;

        r_i2c_pins: r-i2c-pins {
            pins = "PL0", "PL1";
            allwinner,pinmux = <2>;
            function = "r_i2c0";
            bias-pull-up;
        };

        r_spi_pins: r-spi-pins {
            pins = "PL11" ,"PL12", "PL13";
            allwinner,pinmux = <6>;
            function = "r_spi";
        };
    };
+126 −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/pinctrl/amlogic,pinctrl-a4.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Amlogic pinmux controller

maintainers:
  - Xianwei Zhao <xianwei.zhao@amlogic.com>

allOf:
  - $ref: pinctrl.yaml#

properties:
  compatible:
    const: amlogic,pinctrl-a4

  "#address-cells":
    const: 2

  "#size-cells":
    const: 2

  ranges: true

patternProperties:
  "^gpio@[0-9a-f]+$":
    type: object

    additionalProperties: false
    properties:
      reg:
        minItems: 1
        items:
          - description: pin config register
          - description: pin mux setting register (some special pin fixed function)
          - description: pin drive strength register (optional)

      reg-names:
        minItems: 1
        items:
          - const: gpio
          - const: mux
          - const: ds

      gpio-controller: true

      "#gpio-cells":
        const: 2

      gpio-ranges:
        maxItems: 1

    required:
      - reg
      - reg-names
      - gpio-controller
      - "#gpio-cells"
      - gpio-ranges

  "^func-[0-9a-z-]+$":
    type: object
    additionalProperties: false
    patternProperties:
      "^group-[0-9a-z-]+$":
        type: object
        allOf:
          - $ref: /schemas/pinctrl/pincfg-node.yaml
          - $ref: /schemas/pinctrl/pinmux-node.yaml

        required:
          - pinmux

required:
  - compatible
  - "#address-cells"
  - "#size-cells"
  - ranges

additionalProperties: false

examples:
  - |
    #include <dt-bindings/pinctrl/amlogic,pinctrl.h>
    apb {
      #address-cells = <2>;
      #size-cells = <2>;
      periphs_pinctrl: pinctrl {
        compatible = "amlogic,pinctrl-a4";
        #address-cells = <2>;
        #size-cells = <2>;
        ranges;

        gpio@4240 {
          reg = <0 0x4240 0 0x40>, <0 0x4000 0 0x8>;
          reg-names = "gpio", "mux";
          gpio-controller;
          #gpio-cells = <2>;
          gpio-ranges = <&periphs_pinctrl 0 8 10>;
        };

        func-uart-b {
          group-default {
            pinmux = <AML_PINMUX(AMLOGIC_GPIO_B, 1, 4)>;
            bias-pull-up;
            drive-strength-microamp = <4000>;
          };

          group-pins1 {
            pinmux = <AML_PINMUX(AMLOGIC_GPIO_B, 5, 2)>;
            bias-pull-up;
            drive-strength-microamp = <4000>;
          };
        };

        func-uart-c {
          group-default {
            pinmux = <AML_PINMUX(AMLOGIC_GPIO_B, 3, 1)>,
                     <AML_PINMUX(AMLOGIC_GPIO_B, 2, 1)>;
            bias-pull-up;
            drive-strength-microamp = <4000>;
          };
        };
      };
    };
+1 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ configure it.
Required properties:
- compatible:
	"atmel,sama5d2-pinctrl"
	"microchip,sama7d65-pinctrl", "microchip,sama7g5-pinctrl"
	"microchip,sama7g5-pinctrl"
- reg: base address and length of the PIO controller.
- interrupts: interrupt outputs from the controller, one for each bank.
+152 −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/pinctrl/brcm,bcm21664-pinctrl.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Broadcom BCM21664 pin controller

maintainers:
  - Florian Fainelli <florian.fainelli@broadcom.com>
  - Ray Jui <rjui@broadcom.com>
  - Scott Branden <sbranden@broadcom.com>

allOf:
  - $ref: pinctrl.yaml#

properties:
  compatible:
    const: brcm,bcm21664-pinctrl

  reg:
    maxItems: 1

patternProperties:
  '-pins$':
    type: object
    additionalProperties: false

    patternProperties:
      '-grp[0-9]$':
        type: object

        properties:
          pins:
            description:
              Specifies the name(s) of one or more pins to be configured by
              this node.
            items:
              enum: [ adcsyn, batrm, bsc1clk, bsc1dat, camcs0, camcs1, clk32k,
                      clk_cx8, dclk1, dclk4, dclkreq1, dclkreq4, dmic0clk,
                      dmic0dq, dsi0te, gpio00, gpio01, gpio02, gpio03, gpio04,
                      gpio05, gpio06, gpio07, gpio08, gpio09, gpio10, gpio11,
                      gpio12, gpio13, gpio14, gpio15, gpio16, gpio17, gpio18,
                      gpio19, gpio20, gpio21, gpio22, gpio23, gpio24, gpio25,
                      gpio26, gpio27, gpio28, gpio32, gpio33, gpio34, gpio93,
                      gpio94, gps_calreq, gps_hostreq, gps_pablank, gps_tmark,
                      icusbdm, icusbdp, lcdcs0, lcdres, lcdscl, lcdsda, lcdte,
                      mdmgpio00, mdmgpio01, mdmgpio02, mdmgpio03, mdmgpio04,
                      mdmgpio05, mdmgpio06, mdmgpio07, mdmgpio08, mmc0ck,
                      mmc0cmd, mmc0dat0, mmc0dat1, mmc0dat2, mmc0dat3, mmc0dat4,
                      mmc0dat5, mmc0dat6, mmc0dat7, mmc0rst, mmc1ck, mmc1cmd,
                      mmc1dat0, mmc1dat1, mmc1dat2, mmc1dat3, mmc1dat4,
                      mmc1dat5, mmc1dat6, mmc1dat7, mmc1rst, pc1, pc2, pmbscclk,
                      pmbscdat, pmuint, resetn, rfst2g_mtsloten3g,
                      rtxdata2g_txdata3g1, rtxen2g_txdata3g2, rxdata3g0,
                      rxdata3g1, rxdata3g2, sdck, sdcmd, sddat0, sddat1, sddat2,
                      sddat3, simclk, simdat, simdet, simrst, spi0clk, spi0fss,
                      spi0rxd, spi0txd, sri_c, sri_d, sri_e, sspck, sspdi,
                      sspdo, sspsyn, stat1, stat2, swclktck, swdiotms, sysclken,
                      tdi, tdo, testmode, traceclk, tracedt00, tracedt01,
                      tracedt02, tracedt03, tracedt04, tracedt05, tracedt06,
                      tracedt07, tracedt08, tracedt09, tracedt10, tracedt11,
                      tracedt12, tracedt13, tracedt14, tracedt15, trstb,
                      txdata3g0, ubctsn, ubrtsn, ubrx, ubtx ]

          function:
            description:
              Specifies the pin mux selection.
            enum: [ alt1, alt2, alt3, alt4, alt5, alt6 ]

          bias-disable: true

          bias-pull-up:
            type: boolean

          bias-pull-down:
            type: boolean

          slew-rate:
            description: |
              Meaning depends on configured pin mux:
                bsc*clk/pmbscclk or bsc*dat/pmbscdat or gpio16/gpio17:
                  0: Standard (100 kbps) & Fast (400 kbps) mode
                  1: Highspeed (3.4 Mbps) mode
                Otherwise:
                  0: fast slew rate
                  1: normal slew rate

          drive-strength:
            enum: [ 2, 4, 6, 8, 10, 12, 14, 16 ]

          input-enable: true
          input-disable: true

          input-schmitt-enable: true
          input-schmitt-disable: true

        required:
          - pins

        additionalProperties: false

        allOf:
          - $ref: pincfg-node.yaml#
          # Limitations for I2C pins
          - if:
              properties:
                pins:
                  contains:
                    enum: [ bsc1clk, bsc1dat, gpio16, gpio17, pmbscclk,
                            pmbscdat ]
            then:
              properties:
                drive-strength: false
                bias-pull-down: false
                input-schmitt-enable: false
                input-schmitt-disable: false


required:
  - compatible
  - reg

unevaluatedProperties: false

examples:
  - |
    pinctrl@35004800 {
      compatible = "brcm,bcm21664-pinctrl";
      reg = <0x35004800 0x7f0>;

      dev-a-active-pins {
        /* group node defining 1 standard pin */
        std-grp0 {
          pins = "gpio00";
          function = "alt1";
          input-schmitt-enable;
          bias-disable;
          slew-rate = <1>;
          drive-strength = <4>;
        };

        /* group node defining 2 I2C pins */
        i2c-grp0 {
          pins = "bsc1clk", "bsc1dat";
          function = "alt2";
          bias-pull-up;
          input-enable;
        };
      };
    };
...
Loading