Re: [PATCH v15 2/6] platform: misc: add NXP MC33978/MC34978 core driver

Lee Jones <[email protected]>
Newsgroups org.kernel.vger.linux-gpio,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-hwmon,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On Fri, 10 Jul 2026, Oleksij Rempel wrote:

> Add the core support module for the NXP MC33978 and MC34978 Multiple
> Switch Detection Interfaces (MSDI).
> 
> The MC33978/MC34978 devices provide 22 switch detection inputs, analog
> multiplexing (AMUX), and comprehensive hardware fault detection.
> 
> This core module handles:
> - SPI communications via a custom regmap bus to support the device's
>   pipelined two-frame MISO response requirement.
> - Interrupt demultiplexing, utilizing an irq_domain to provide 22 virtual
>   IRQs for switch state changes and 1 virtual IRQ for hardware faults.
> - Inline status harvesting from the SPI MSB to detect and trigger events
>   without requiring dedicated status register polling.
> 
> It exports mc33978_core_init(), called by the MFD driver added in the
> following patch. CONFIG_MC33978_CORE carries no prompt and is selected
> by CONFIG_MFD_MC33978, so this patch alone builds nothing new.
> 
> Note: The device currently lacks suspend/resume power management
> callbacks. If the system enters a sleep state cutting power to
> VDDQ/VBATP, the device will wake up in POR state with hardware interrupt
> masks reset. Power management support is intentionally deferred for now.
> 
> Signed-off-by: Oleksij Rempel <[email protected]>
> ---
> changes v15:
> - Split out of the MFD patch, as requested by Lee Jones. The register
>   definitions in include/linux/mfd/mc33978.h are carried here rather than
>   with the MFD driver because this module includes them, keeping every
>   commit individually buildable.

I can't help feeling that this is a hack.

When I suggested moving the functional parts out, I meant properly
separating off and compartmentalising.  Instead, a huge slice has been
taken out of the initial submission's MFD driver and dumped into the
wild west that is drivers/platform.  Worse still; we're masquerading as
the MFD since the MFD's 'dev' pointer is being passed through so
everything here is operating as though it's the parent device.  You've
created half library / half MFD.

I get that we're on v15 and there's still a lot to do, but I guess
that's what happens when 3500 lines of code is submitted at the same
time.

My suggestion is to return to first principles; what lives where?

Allocating of shared resources, including the various regmaps, IRQs and
domains should live in the MFD subsystem - that's literally what it's
for.  Anything that does-a-thing, should be allocated a proper subsystem
and platform drivers should be created.

Complicated platform / embedded-controller type work (events,
conditions, bespoke messaging, etc) that truly cannot live anywhere else
can live in drivers/platform, but perhaps don't invent a new
sub-sub-system here or create an extended MFD device here - it should be
a separate entity.

Take a look to see how the other drivers/platform dumpers work.

-- 
Lee Jones
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.