Introducing the MFD subsystem and Syscon APIs
Prior to delving into the syscon framework and its APIs, we will cover MFDs. There are peripherals or hardware blocks exposing more than a single functionality by means of subdevices they embed into them and that are handled by separate subsystems in the kernel. That being said, a subdevice is a dedicated entity in a so-called multifunction device, responsible for a specific task, and managed through a reduced set of registers, in the chip's register map. ADP5520
is a typical example of an MFD device, as it contains a backlight, a keypad, LEDs, and GPIO controllers. Each of these is then considered as a subdevice, and as you can see, each of these falls into a different subsystem. The MFD subsystem, defined in include/linux/mfd/core.h
and implemented in drivers/mfd/mfd-core.c
, has been created to deal with these devices, allowing the following features:
- Registering the same device with multiple subsystems
- Multiplexing bus...