mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-12 00:34:43 +08:00
8f2cade5da
In some cases, it is required to provide the state to which the mux controller has to be set to, from the consumer device tree node. Document the property mux-states that can be used for adding this support. Signed-off-by: Aswath Govindraju <a-govindraju@ti.com> Reviewed-by: Rob Herring <robh@kernel.org> Signed-off-by: Peter Rosin <peda@axentia.se> Link: https://lore.kernel.org/r/f4d02ac8-23ee-d891-4056-75c672cc59c9@axentia.se Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
207 lines
5.9 KiB
YAML
207 lines
5.9 KiB
YAML
# SPDX-License-Identifier: GPL-2.0
|
|
%YAML 1.2
|
|
---
|
|
$id: http://devicetree.org/schemas/mux/mux-controller.yaml#
|
|
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
|
|
|
title: Common multiplexer controller provider bindings
|
|
|
|
maintainers:
|
|
- Peter Rosin <peda@axentia.se>
|
|
|
|
description: |
|
|
A multiplexer (or mux) controller will have one, or several, consumer devices
|
|
that uses the mux controller. Thus, a mux controller can possibly control
|
|
several parallel multiplexers. Presumably there will be at least one
|
|
multiplexer needed by each consumer, but a single mux controller can of course
|
|
control several multiplexers for a single consumer.
|
|
|
|
A mux controller provides a number of states to its consumers, and the state
|
|
space is a simple zero-based enumeration. I.e. 0-1 for a 2-way multiplexer,
|
|
0-7 for an 8-way multiplexer, etc.
|
|
|
|
|
|
Mux controller nodes
|
|
--------------------
|
|
|
|
Mux controller nodes must specify the number of cells used for the
|
|
specifier using the '#mux-control-cells' or '#mux-state-cells' property.
|
|
The value of '#mux-state-cells' will always be one greater than the value
|
|
of '#mux-control-cells'.
|
|
|
|
Optionally, mux controller nodes can also specify the state the mux should
|
|
have when it is idle. The idle-state property is used for this. If the
|
|
idle-state is not present, the mux controller is typically left as is when
|
|
it is idle. For multiplexer chips that expose several mux controllers, the
|
|
idle-state property is an array with one idle state for each mux controller.
|
|
|
|
The special value (-1) may be used to indicate that the mux should be left
|
|
as is when it is idle. This is the default, but can still be useful for
|
|
mux controller chips with more than one mux controller, particularly when
|
|
there is a need to "step past" a mux controller and set some other idle
|
|
state for a mux controller with a higher index.
|
|
|
|
Some mux controllers have the ability to disconnect the input/output of the
|
|
multiplexer. Using this disconnected high-impedance state as the idle state
|
|
is indicated with idle state (-2).
|
|
|
|
These constants are available in
|
|
|
|
#include <dt-bindings/mux/mux.h>
|
|
|
|
as MUX_IDLE_AS_IS (-1) and MUX_IDLE_DISCONNECT (-2).
|
|
|
|
An example mux controller node look like this (the adg972a chip is a triple
|
|
4-way multiplexer):
|
|
|
|
mux: mux-controller@50 {
|
|
compatible = "adi,adg792a";
|
|
reg = <0x50>;
|
|
#mux-control-cells = <1>;
|
|
|
|
idle-state = <MUX_IDLE_DISCONNECT MUX_IDLE_AS_IS 2>;
|
|
};
|
|
|
|
select:
|
|
anyOf:
|
|
- properties:
|
|
$nodename:
|
|
pattern: '^mux-controller'
|
|
- required:
|
|
- '#mux-control-cells'
|
|
- required:
|
|
- '#mux-state-cells'
|
|
|
|
properties:
|
|
$nodename:
|
|
pattern: '^mux-controller(@.*|-[0-9a-f]+)?$'
|
|
|
|
'#mux-control-cells':
|
|
enum: [ 0, 1 ]
|
|
|
|
'#mux-state-cells':
|
|
enum: [ 1, 2 ]
|
|
|
|
idle-state:
|
|
$ref: /schemas/types.yaml#/definitions/int32
|
|
minimum: -2
|
|
|
|
idle-states:
|
|
description: |
|
|
Mux controller nodes can specify the state the mux should have when it is
|
|
idle. If the idle-state is not present, the mux controller is typically
|
|
left as is when it is idle. For multiplexer chips that expose several mux
|
|
controllers, the idle-state property is an array with one idle state for
|
|
each mux controller.
|
|
|
|
The special value (-1) may be used to indicate that the mux should be left
|
|
as is when it is idle. This is the default, but can still be useful for
|
|
mux controller chips with more than one mux controller, particularly when
|
|
there is a need to "step past" a mux controller and set some other idle
|
|
state for a mux controller with a higher index.
|
|
|
|
Some mux controllers have the ability to disconnect the input/output of the
|
|
multiplexer. Using this disconnected high-impedance state as the idle state
|
|
is indicated with idle state (-2).
|
|
$ref: /schemas/types.yaml#/definitions/int32-array
|
|
items:
|
|
minimum: -2
|
|
|
|
additionalProperties: true
|
|
|
|
examples:
|
|
- |
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
|
|
/* One consumer of a 2-way mux controller (one GPIO-line) */
|
|
mux: mux-controller {
|
|
compatible = "gpio-mux";
|
|
#mux-control-cells = <0>;
|
|
|
|
mux-gpios = <&pioA 0 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
|
|
adc-mux {
|
|
compatible = "io-channel-mux";
|
|
io-channels = <&adc 0>;
|
|
io-channel-names = "parent";
|
|
|
|
mux-controls = <&mux>;
|
|
mux-control-names = "adc";
|
|
|
|
channels = "sync", "in";
|
|
};
|
|
|
|
- |
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
|
|
/*
|
|
* Two consumers (one for an ADC line and one for an i2c bus) of
|
|
* parallel 4-way multiplexers controlled by the same two GPIO-lines.
|
|
*/
|
|
mux2: mux-controller {
|
|
compatible = "gpio-mux";
|
|
#mux-control-cells = <0>;
|
|
|
|
mux-gpios = <&pioA 0 GPIO_ACTIVE_HIGH>,
|
|
<&pioA 1 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
|
|
adc-mux {
|
|
compatible = "io-channel-mux";
|
|
io-channels = <&adc 0>;
|
|
io-channel-names = "parent";
|
|
|
|
mux-controls = <&mux2>;
|
|
|
|
channels = "sync-1", "in", "out", "sync-2";
|
|
};
|
|
|
|
i2c-mux {
|
|
compatible = "i2c-mux";
|
|
i2c-parent = <&i2c1>;
|
|
|
|
mux-controls = <&mux2>;
|
|
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
i2c@0 {
|
|
reg = <0>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
ssd1307: oled@3c {
|
|
reg = <0x3c>;
|
|
};
|
|
};
|
|
|
|
i2c@3 {
|
|
reg = <3>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
pca9555: pca9555@20 {
|
|
reg = <0x20>;
|
|
};
|
|
};
|
|
};
|
|
|
|
- |
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
|
|
mux1: mux-controller {
|
|
compatible = "gpio-mux";
|
|
#mux-state-cells = <1>;
|
|
mux-gpios = <&exp_som 2 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
|
|
transceiver4: can-phy4 {
|
|
compatible = "ti,tcan1042";
|
|
#phy-cells = <0>;
|
|
max-bitrate = <5000000>;
|
|
standby-gpios = <&exp_som 7 GPIO_ACTIVE_HIGH>;
|
|
mux-states = <&mux1 1>;
|
|
};
|
|
...
|