162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/spi/spi-mux.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Generic SPI Multiplexer
862306a36Sopenharmony_ci
962306a36Sopenharmony_cidescription: |
1062306a36Sopenharmony_ci  This binding describes a SPI bus multiplexer to route the SPI chip select
1162306a36Sopenharmony_ci  signals. This can be used when you need more devices than the SPI controller
1262306a36Sopenharmony_ci  has chip selects available. An example setup is shown in ASCII art; the actual
1362306a36Sopenharmony_ci  setting of the multiplexer to a channel needs to be done by a specific SPI mux
1462306a36Sopenharmony_ci  driver.
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci        MOSI /--------------------------------+--------+--------+--------\
1762306a36Sopenharmony_ci        MISO |/------------------------------+|-------+|-------+|-------\|
1862306a36Sopenharmony_ci         SCL ||/----------------------------+||------+||------+||------\||
1962306a36Sopenharmony_ci             |||                            |||      |||      |||      |||
2062306a36Sopenharmony_ci      +------------+                        |||      |||      |||      |||
2162306a36Sopenharmony_ci      | SoC  |||   |                      +-+++-+  +-+++-+  +-+++-+  +-+++-+
2262306a36Sopenharmony_ci      |      |||   |                      | dev |  | dev |  | dev |  | dev |
2362306a36Sopenharmony_ci      |   +--+++-+ | CS-X  +------+\      +--+--+  +--+--+  +--+--+  +--+--+
2462306a36Sopenharmony_ci      |   | SPI  +-|-------+ Mux  |\\   CS-0 |        |        |        |
2562306a36Sopenharmony_ci      |   +------+ |       +--+---+\\\-------/   CS-1 |        |        |
2662306a36Sopenharmony_ci      |            |          |    \\\----------------/   CS-2 |        |
2762306a36Sopenharmony_ci      |   +------+ |          |     \\-------------------------/   CS-3 |
2862306a36Sopenharmony_ci      |   | ?    +-|----------/      \----------------------------------/
2962306a36Sopenharmony_ci      |   +------+ |
3062306a36Sopenharmony_ci      +------------+
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ciallOf:
3362306a36Sopenharmony_ci  - $ref: /schemas/spi/spi-controller.yaml#
3462306a36Sopenharmony_ci  - $ref: /schemas/spi/spi-peripheral-props.yaml#
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cimaintainers:
3762306a36Sopenharmony_ci  - Chris Packham <chris.packham@alliedtelesis.co.nz>
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ciproperties:
4062306a36Sopenharmony_ci  compatible:
4162306a36Sopenharmony_ci    const: spi-mux
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci  mux-controls:
4462306a36Sopenharmony_ci    maxItems: 1
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_cirequired:
4762306a36Sopenharmony_ci  - compatible
4862306a36Sopenharmony_ci  - reg
4962306a36Sopenharmony_ci  - spi-max-frequency
5062306a36Sopenharmony_ci  - mux-controls
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciunevaluatedProperties: false
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ciexamples:
5562306a36Sopenharmony_ci  - |
5662306a36Sopenharmony_ci    #include <dt-bindings/gpio/gpio.h>
5762306a36Sopenharmony_ci    mux: mux-controller {
5862306a36Sopenharmony_ci        compatible = "gpio-mux";
5962306a36Sopenharmony_ci        #mux-control-cells = <0>;
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci        mux-gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>;
6262306a36Sopenharmony_ci    };
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci    spi {
6562306a36Sopenharmony_ci        #address-cells = <1>;
6662306a36Sopenharmony_ci        #size-cells = <0>;
6762306a36Sopenharmony_ci        spi@0 {
6862306a36Sopenharmony_ci            compatible = "spi-mux";
6962306a36Sopenharmony_ci            reg = <0>;
7062306a36Sopenharmony_ci            #address-cells = <1>;
7162306a36Sopenharmony_ci            #size-cells = <0>;
7262306a36Sopenharmony_ci            spi-max-frequency = <100000000>;
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci            mux-controls = <&mux>;
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci            flash@0 {
7762306a36Sopenharmony_ci                compatible = "jedec,spi-nor";
7862306a36Sopenharmony_ci                reg = <0>;
7962306a36Sopenharmony_ci                spi-max-frequency = <40000000>;
8062306a36Sopenharmony_ci            };
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci            sensor@1 {
8362306a36Sopenharmony_ci                compatible = "bosch,bme680";
8462306a36Sopenharmony_ci                reg = <1>;
8562306a36Sopenharmony_ci                spi-max-frequency = <10000000>;
8662306a36Sopenharmony_ci            };
8762306a36Sopenharmony_ci        };
8862306a36Sopenharmony_ci    };
89