xref: /linux/Documentation/devicetree/bindings/spi/spi-mux.yaml (revision e3b2949e3fa2fd8c19cd5fbb0424d38f70a70e9c)
1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/spi/spi-mux.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Generic SPI Multiplexer
8
9description: |
10  This binding describes a SPI bus multiplexer to route the SPI chip select
11  signals. This can be used when you need more devices than the SPI controller
12  has chip selects available. An example setup is shown in ASCII art; the actual
13  setting of the multiplexer to a channel needs to be done by a specific SPI mux
14  driver.
15
16        MOSI /--------------------------------+--------+--------+--------\
17        MISO |/------------------------------+|-------+|-------+|-------\|
18         SCL ||/----------------------------+||------+||------+||------\||
19             |||                            |||      |||      |||      |||
20      +------------+                        |||      |||      |||      |||
21      | SoC  |||   |                      +-+++-+  +-+++-+  +-+++-+  +-+++-+
22      |      |||   |                      | dev |  | dev |  | dev |  | dev |
23      |   +--+++-+ | CS-X  +------+\      +--+--+  +--+--+  +--+--+  +--+--+
24      |   | SPI  +-|-------+ Mux  |\\   CS-0 |        |        |        |
25      |   +------+ |       +--+---+\\\-------/   CS-1 |        |        |
26      |            |          |    \\\----------------/   CS-2 |        |
27      |   +------+ |          |     \\-------------------------/   CS-3 |
28      |   | ?    +-|----------/      \----------------------------------/
29      |   +------+ |
30      +------------+
31
32allOf:
33  - $ref: /schemas/spi/spi-controller.yaml#
34  - $ref: /schemas/spi/spi-peripheral-props.yaml#
35
36maintainers:
37  - Chris Packham <chris.packham@alliedtelesis.co.nz>
38
39properties:
40  compatible:
41    const: spi-mux
42
43  mux-controls:
44    maxItems: 1
45
46required:
47  - compatible
48  - reg
49  - spi-max-frequency
50  - mux-controls
51
52unevaluatedProperties: false
53
54examples:
55  - |
56    #include <dt-bindings/gpio/gpio.h>
57    mux: mux-controller {
58        compatible = "gpio-mux";
59        #mux-control-cells = <0>;
60
61        mux-gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>;
62    };
63
64    spi {
65        #address-cells = <1>;
66        #size-cells = <0>;
67        spi@0 {
68            compatible = "spi-mux";
69            reg = <0>;
70            #address-cells = <1>;
71            #size-cells = <0>;
72            spi-max-frequency = <100000000>;
73
74            mux-controls = <&mux>;
75
76            flash@0 {
77                compatible = "jedec,spi-nor";
78                reg = <0>;
79                spi-max-frequency = <40000000>;
80            };
81
82            sensor@1 {
83                compatible = "bosch,bme680";
84                reg = <1>;
85                spi-max-frequency = <10000000>;
86            };
87        };
88    };
89