]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
mfd: Add base driver for qnap-mcu devices
authorHeiko Stuebner <heiko@sntech.de>
Thu, 7 Nov 2024 11:47:07 +0000 (12:47 +0100)
committerLee Jones <lee@kernel.org>
Tue, 17 Dec 2024 13:14:33 +0000 (13:14 +0000)
commit998f70d1806bb718a7565f350283e4a79c8cbb4b
treed182f6326857ab87405b63df22cdde7b03a5c084
parent3f674e74570e82100aa20aae82da742f07b9310c
mfd: Add base driver for qnap-mcu devices

These microcontroller units are used in network-attached-storage devices
made by QNAP and provide additional functionality to the system.

This adds the base driver that implements the serial protocol via
serdev and additionally hooks into the poweroff handlers to turn
off the parts of the system not supplied by the general PMIC.

Turning off (at least the TSx33 devices using Rockchip SoCs) consists of
two separate actions. Turning off the MCU alone does not turn off the main
SoC and turning off only the SoC/PMIC does not turn off the hard-drives.
Also if the MCU is not turned off, the system also won't start again until
it is unplugged from power.

So on shutdown the MCU needs to be turned off separately before the
main PMIC.

The protocol spoken by the MCU is sadly not documented, but was
obtained by listening to the chatter on the serial port, as thankfully
the "hal_app" program from QNAPs firmware allows triggering all/most
MCU actions from the command line.

The implementation of how to talk to the serial device got some
inspiration from the rave-sp servdev driver.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://lore.kernel.org/r/20241107114712.538976-5-heiko@sntech.de
Signed-off-by: Lee Jones <lee@kernel.org>
MAINTAINERS
drivers/mfd/Kconfig
drivers/mfd/Makefile
drivers/mfd/qnap-mcu.c [new file with mode: 0644]
include/linux/mfd/qnap-mcu.h [new file with mode: 0644]