On Fri, 18 Dec 2020, Jason Gunthorpe wrote:
On Fri, Dec 18, 2020 at 06:03:10PM +0000, Mark Brown wrote:
On Fri, Dec 18, 2020 at 12:28:17PM -0400, Jason Gunthorpe wrote:
On Fri, Dec 18, 2020 at 03:52:04PM +0000, Mark Brown wrote:
On Fri, Dec 18, 2020 at 10:08:54AM -0400, Jason Gunthorpe wrote:
I thought the recent LWN article summed it up nicely, auxillary bus is for gluing to subsystems together using a driver specific software API to connect to the HW, MFD is for splitting a physical HW into disjoint regions of HW.
This conflicts with the statements from Greg about not using the platform bus for things that aren't memory mapped or "direct firmware", a large proportion of MFD subfunctions are neither at least in so far as I can understand what direct firmware means.
I assume MFD will keep existing and it will somehow stop using platform device for the children it builds.
If it's not supposed to use platform devices so I'm assuming that the intention is that it should use aux devices, otherwise presumably it'd be making some new clone of the platform bus but I've not seen anyone suggesting this.
I wouldn't assume that, I certainly don't want to see all the HW related items in platform_device cloned roughly into aux device.
I've understood the bus type should be basically related to the thing that is creating the device. In a clean view platform code creates platform devices. DT should create DT devices, ACPI creates ACPI devices, PNP does pnp devices, etc
So, I strongly suspect, MFD should create mfd devices on a MFD bus type.
Alexandre's point is completely valid, and I think is the main challenge here, somehow avoiding duplication.
If we were to look at it with some OOP viewpoint I'd say the generic HW resource related parts should be some shared superclass between 'struct device' and 'struct platform/pnp/pci/acpi/mfd/etc_device'.
You're confusing things here.
ACPI, DT and MFD are not busses. They are just methods to describe/register devices which will operate on buses.
Busses include things like; I2C, SPI, PCI, USB and Platform (MMIO).