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