52 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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 devices akin 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";
 | 
						|
	};
 | 
						|
};
 |