122869a9eSLinus WalleijMulti-Function Devices (MFD)
222869a9eSLinus Walleij
322869a9eSLinus WalleijThese devices comprise a nexus for heterogeneous hardware blocks containing
422869a9eSLinus Walleijmore than one non-unique yet varying hardware functionality.
522869a9eSLinus Walleij
622869a9eSLinus WalleijA typical MFD can be:
722869a9eSLinus Walleij
822869a9eSLinus Walleij- A mixed signal ASIC on an external bus, sometimes a PMIC (Power Management
922869a9eSLinus Walleij  Integrated Circuit) that is manufactured in a lower technology node (rough
1022869a9eSLinus Walleij  silicon) that handles analog drivers for things like audio amplifiers, LED
1122869a9eSLinus Walleij  drivers, level shifters, PHY (physical interfaces to things like USB or
1222869a9eSLinus Walleij  ethernet), regulators etc.
1322869a9eSLinus Walleij
1422869a9eSLinus Walleij- A range of memory registers containing "miscellaneous system registers" also
1522869a9eSLinus Walleij  known as a system controller "syscon" or any other memory range containing a
1622869a9eSLinus Walleij  mix of unrelated hardware devices.
1722869a9eSLinus Walleij
1822869a9eSLinus WalleijOptional properties:
1922869a9eSLinus Walleij
2022869a9eSLinus Walleij- compatible : "simple-mfd" - this signifies that the operating system should
2122869a9eSLinus Walleij  consider all subnodes of the MFD device as separate devices akin to how
22bbc741c6SAndrew Jeffery  "simple-bus" indicates when to see subnodes as children for a simple
2322869a9eSLinus Walleij  memory-mapped bus. For more complex devices, when the nexus driver has to
2422869a9eSLinus Walleij  probe registers to figure out what child devices exist etc, this should not
2522869a9eSLinus Walleij  be used. In the latter case the child devices will be determined by the
2622869a9eSLinus Walleij  operating system.
2722869a9eSLinus Walleij
280894e987SAndrew Jeffery- ranges: Describes the address mapping relationship to the parent. Should set
290894e987SAndrew Jeffery  the child's base address to 0, the physical address within parent's address
300894e987SAndrew Jeffery  space, and the length of the address map.
310894e987SAndrew Jeffery
320894e987SAndrew Jeffery- #address-cells: Specifies the number of cells used to represent physical base
330894e987SAndrew Jeffery  addresses. Must be present if ranges is used.
340894e987SAndrew Jeffery
350894e987SAndrew Jeffery- #size-cells: Specifies the number of cells used to represent the size of an
360894e987SAndrew Jeffery  address. Must be present if ranges is used.
370894e987SAndrew Jeffery
3822869a9eSLinus WalleijExample:
3922869a9eSLinus Walleij
4022869a9eSLinus Walleijfoo@1000 {
4122869a9eSLinus Walleij	compatible = "syscon", "simple-mfd";
4222869a9eSLinus Walleij	reg = <0x01000 0x1000>;
4322869a9eSLinus Walleij
4448c926cdSMarco Franchi	led@8.0 {
4522869a9eSLinus Walleij		compatible = "register-bit-led";
4622869a9eSLinus Walleij		offset = <0x08>;
4722869a9eSLinus Walleij		mask = <0x01>;
4822869a9eSLinus Walleij		label = "myled";
4922869a9eSLinus Walleij		default-state = "on";
5022869a9eSLinus Walleij	};
5122869a9eSLinus Walleij};
52