Commit e8da9ed0 authored by Benjamin Gaignard's avatar Benjamin Gaignard Committed by Lee Jones
Browse files

dt-bindings: mfd: Convert stmfx bindings to json-schema



Convert stmfx bindings to json-schema.

Signed-off-by: default avatarBenjamin Gaignard <benjamin.gaignard@st.com>
Reviewed-by: default avatarRob Herring <robh@kernel.org>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent c61e1658
Loading
Loading
Loading
Loading
+124 −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/mfd/st,stmfx.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: STMicroelectonics Multi-Function eXpander (STMFX) bindings

description: ST Multi-Function eXpander (STMFX) is a slave controller using I2C for
               communication with the main MCU. Its main features are GPIO expansion,
               main MCU IDD measurement (IDD is the amount of current that flows
               through VDD) and resistive touchscreen controller.

maintainers:
  - Amelie Delaunay <amelie.delaunay@st.com>

properties:
  compatible:
    const: st,stmfx-0300

  reg:
    enum: [ 0x42, 0x43 ]

  interrupts:
    maxItems: 1

  drive-open-drain: true

  vdd-supply:
    maxItems: 1

  pinctrl:
    type: object

    properties:
      compatible:
        const: st,stmfx-0300-pinctrl

      "#gpio-cells":
        const: 2

      "#interrupt-cells":
        const: 2

      gpio-controller: true

      interrupt-controller: true

      gpio-ranges:
        description: if all STMFX pins[24:0] are available (no other STMFX function in use),
                     you should use gpio-ranges = <&stmfx_pinctrl 0 0 24>;
                     if agpio[3:0] are not available (STMFX Touchscreen function in use),
                     you should use gpio-ranges = <&stmfx_pinctrl 0 0 16>, <&stmfx_pinctrl 20 20 4>;
                     if agpio[7:4] are not available (STMFX IDD function in use),
                     you should use gpio-ranges = <&stmfx_pinctrl 0 0 20>;
        maxItems: 1

    patternProperties:
      "^[a-zA-Z]*-pins$":
        type: object

        allOf:
          - $ref: ../pinctrl/pinmux-node.yaml

        properties:
          pins: true
          bias-disable: true
          bias-pull-up: true
          bias-pull-pin-default: true
          bias-pull-down: true
          drive-open-drain: true
          drive-push-pull: true
          output-high: true
          output-low: true

      additionalProperties: false

    additionalProperties: false

    required:
      - compatible
      - "#gpio-cells"
      - "#interrupt-cells"
      - gpio-controller
      - interrupt-controller
      - gpio-ranges

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    i2c@0 {
      #address-cells = <1>;
      #size-cells = <0>;
      stmfx@42 {
        compatible = "st,stmfx-0300";
        reg = <0x42>;
        interrupts = <8 IRQ_TYPE_EDGE_RISING>;
        interrupt-parent = <&gpioi>;
        vdd-supply = <&v3v3>;

        stmfx_pinctrl: pinctrl {
          compatible = "st,stmfx-0300-pinctrl";
          #gpio-cells = <2>;
          #interrupt-cells = <2>;
          gpio-controller;
          interrupt-controller;
          gpio-ranges = <&stmfx_pinctrl 0 0 24>;

          joystick_pins: joystick-pins {
            pins = "gpio0", "gpio1", "gpio2", "gpio3", "gpio4";
            drive-push-pull;
            bias-pull-up;
          };
        };
      };
    };
...
+0 −28
Original line number Diff line number Diff line
STMicroelectonics Multi-Function eXpander (STMFX) Core bindings

ST Multi-Function eXpander (STMFX) is a slave controller using I2C for
communication with the main MCU. Its main features are GPIO expansion, main
MCU IDD measurement (IDD is the amount of current that flows through VDD) and
resistive touchscreen controller.

Required properties:
- compatible: should be "st,stmfx-0300".
- reg: I2C slave address of the device.
- interrupts: interrupt specifier triggered by MFX_IRQ_OUT signal.
  Please refer to ../interrupt-controller/interrupt.txt

Optional properties:
- drive-open-drain: configure MFX_IRQ_OUT as open drain.
- vdd-supply: phandle of the regulator supplying STMFX.

Example:

	stmfx: stmfx@42 {
		compatible = "st,stmfx-0300";
		reg = <0x42>;
		interrupts = <8 IRQ_TYPE_EDGE_RISING>;
		interrupt-parent = <&gpioi>;
		vdd-supply = <&v3v3>;
	};

Please refer to ../pinctrl/pinctrl-stmfx.txt for STMFX GPIO expander function bindings.
+0 −116
Original line number Diff line number Diff line
STMicroelectronics Multi-Function eXpander (STMFX) GPIO expander bindings

ST Multi-Function eXpander (STMFX) offers up to 24 GPIOs expansion.
Please refer to ../mfd/stmfx.txt for STMFX Core bindings.

Required properties:
- compatible: should be "st,stmfx-0300-pinctrl".
- #gpio-cells: should be <2>, the first cell is the GPIO number and the second
  cell is the gpio flags in accordance with <dt-bindings/gpio/gpio.h>.
- gpio-controller: marks the device as a GPIO controller.
- #interrupt-cells: should be <2>, the first cell is the GPIO number and the
  second cell is the interrupt flags in accordance with
  <dt-bindings/interrupt-controller/irq.h>.
- interrupt-controller: marks the device as an interrupt controller.
- gpio-ranges: specifies the mapping between gpio controller and pin
  controller pins. Check "Concerning gpio-ranges property" below.
Please refer to ../gpio/gpio.txt.

Please refer to pinctrl-bindings.txt for pin configuration.

Required properties for pin configuration sub-nodes:
- pins: list of pins to which the configuration applies.

Optional properties for pin configuration sub-nodes (pinconf-generic ones):
- bias-disable: disable any bias on the pin.
- bias-pull-up: the pin will be pulled up.
- bias-pull-pin-default: use the pin-default pull state.
- bias-pull-down: the pin will be pulled down.
- drive-open-drain: the pin will be driven with open drain.
- drive-push-pull: the pin will be driven actively high and low.
- output-high: the pin will be configured as an output driving high level.
- output-low: the pin will be configured as an output driving low level.

Note that STMFX pins[15:0] are called "gpio[15:0]", and STMFX pins[23:16] are
called "agpio[7:0]". Example, to refer to pin 18 of STMFX, use "agpio2".

Concerning gpio-ranges property:
- if all STMFX pins[24:0] are available (no other STMFX function in use), you
  should use gpio-ranges = <&stmfx_pinctrl 0 0 24>;
- if agpio[3:0] are not available (STMFX Touchscreen function in use), you
  should use gpio-ranges = <&stmfx_pinctrl 0 0 16>, <&stmfx_pinctrl 20 20 4>;
- if agpio[7:4] are not available (STMFX IDD function in use), you
  should use gpio-ranges = <&stmfx_pinctrl 0 0 20>;


Example:

	stmfx: stmfx@42 {
		...

		stmfx_pinctrl: stmfx-pin-controller {
			compatible = "st,stmfx-0300-pinctrl";
			#gpio-cells = <2>;
			#interrupt-cells = <2>;
			gpio-controller;
			interrupt-controller;
			gpio-ranges = <&stmfx_pinctrl 0 0 24>;

			joystick_pins: joystick {
				pins = "gpio0", "gpio1", "gpio2", "gpio3", "gpio4";
				drive-push-pull;
				bias-pull-up;
			};
		};
	};

Example of STMFX GPIO consumers:

	joystick {
		compatible = "gpio-keys";
		#address-cells = <1>;
		#size-cells = <0>;
		pinctrl-0 = <&joystick_pins>;
		pinctrl-names = "default";
		button-0 {
			label = "JoySel";
			linux,code = <KEY_ENTER>;
			interrupt-parent = <&stmfx_pinctrl>;
			interrupts = <0 IRQ_TYPE_EDGE_RISING>;
		};
		button-1 {
			label = "JoyDown";
			linux,code = <KEY_DOWN>;
			interrupt-parent = <&stmfx_pinctrl>;
			interrupts = <1 IRQ_TYPE_EDGE_RISING>;
		};
		button-2 {
			label = "JoyLeft";
			linux,code = <KEY_LEFT>;
			interrupt-parent = <&stmfx_pinctrl>;
			interrupts = <2 IRQ_TYPE_EDGE_RISING>;
		};
		button-3 {
			label = "JoyRight";
			linux,code = <KEY_RIGHT>;
			interrupt-parent = <&stmfx_pinctrl>;
			interrupts = <3 IRQ_TYPE_EDGE_RISING>;
		};
		button-4 {
			label = "JoyUp";
			linux,code = <KEY_UP>;
			interrupt-parent = <&stmfx_pinctrl>;
			interrupts = <4 IRQ_TYPE_EDGE_RISING>;
		};
	};

	leds {
		compatible = "gpio-leds";
		orange {
			gpios = <&stmfx_pinctrl 17 1>;
		};

		blue {
			gpios = <&stmfx_pinctrl 19 1>;
		};
	}