| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- Multi-Function Devices (MFD)
- These devices comprise a nexus for heterogeneous hardware blocks containing
- more than one non-unique yet varying hardware functionality.
- A typical MFD can be:
- - A mixed signal ASIC on an external bus, sometimes a PMIC (Power Management
- Integrated Circuit) that is manufactured in a lower technology node (rough
- silicon) that handles analog drivers for things like audio amplifiers, LED
- drivers, level shifters, PHY (physical interfaces to things like USB or
- ethernet), regulators etc.
- - A range of memory registers containing "miscellaneous system registers" also
- known as a system controller "syscon" or any other memory range containing a
- mix of unrelated hardware devices.
- Optional properties:
- - compatible : "simple-mfd" - this signifies that the operating system
- should consider all subnodes of the MFD device as separate and independent
- devices, so not needing any resources to be provided by the parent device.
- Similarly to how "simple-bus" indicates when to see subnodes as children for
- a simple memory-mapped bus.
- For more complex devices, when the nexus driver has to probe registers to
- figure out what child devices exist etc, this should not be used. In the
- latter case the child devices will be determined by the operating system.
- - ranges: Describes the address mapping relationship to the parent. Should set
- the child's base address to 0, the physical address within parent's address
- space, and the length of the address map.
- - #address-cells: Specifies the number of cells used to represent physical base
- addresses. Must be present if ranges is used.
- - #size-cells: Specifies the number of cells used to represent the size of an
- address. Must be present if ranges is used.
- Example:
- foo@1000 {
- compatible = "syscon", "simple-mfd";
- reg = <0x01000 0x1000>;
- led@8.0 {
- compatible = "register-bit-led";
- offset = <0x08>;
- mask = <0x01>;
- label = "myled";
- default-state = "on";
- };
- };
|