From f0c0b18234418c6ed6d35fcf1c6e5b0cbdceed49 Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Tue, 21 Dec 2021 16:27:16 +0000 Subject: mvebu: puzzle-m902: add driver for MCU driving LEDs, fan and buzzer Backport MFD driver for communicating with the on-board MCU found on IEI World Puzzle appliances. Improve the driver to support multiple LEDs, apply a default state and let MCU take care of blinking if timing is within supported range. Wire up LEDs and fan for Puzzle M902 in device tree. Signed-off-by: Daniel Golle --- .../arm64/boot/dts/marvell/cn9132-puzzle-m902.dts | 74 +++++++++++++++++++++- .../linux/mvebu/files/include/linux/mfd/puzzle.h | 11 ++++ 2 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 target/linux/mvebu/files/include/linux/mfd/puzzle.h (limited to 'target/linux/mvebu/files') diff --git a/target/linux/mvebu/files/arch/arm64/boot/dts/marvell/cn9132-puzzle-m902.dts b/target/linux/mvebu/files/arch/arm64/boot/dts/marvell/cn9132-puzzle-m902.dts index dc4e6527f1..8d2d53d03c 100644 --- a/target/linux/mvebu/files/arch/arm64/boot/dts/marvell/cn9132-puzzle-m902.dts +++ b/target/linux/mvebu/files/arch/arm64/boot/dts/marvell/cn9132-puzzle-m902.dts @@ -38,7 +38,10 @@ ethernet8 = &cp2_eth2; spi1 = &cp0_spi0; spi2 = &cp0_spi1; - serial1 = &cp0_uart0; + led-boot = &led_power; + led-failsafe = &led_info; + led-running = &led_power; + led-upgrade = &led_info; }; memory@00000000 { @@ -91,6 +94,75 @@ &cp0_uart0 { status = "okay"; + + puzzle-mcu { + compatible = "iei,wt61p803-puzzle"; + #address-cells = <1>; + #size-cells = <1>; + current-speed = <115200>; + enable-beep; + status = "okay"; + + leds { + compatible = "iei,wt61p803-puzzle-leds"; + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + + led@0 { + reg = <0>; + label = "white:network"; + active-low; + }; + + led@1 { + reg = <1>; + label = "green:cloud"; + active-low; + }; + + led_info: led@2 { + reg = <2>; + label = "orange:info"; + active-low; + }; + + led_power: led@3 { + reg = <3>; + label = "yellow:power"; + active-low; + default-state = "on"; + }; + }; + + hwmon { + compatible = "iei,wt61p803-puzzle-hwmon"; + #address-cells = <1>; + #size-cells = <0>; + + chassis_fan_group0: fan-group@0 { + #cooling-cells = <2>; + reg = <0x00>; + cooling-levels = <64 102 170 230 250>; + }; + }; + }; +}; + +&ap_thermal_cpu1 { + trips { + cpu_active: cpu-active { + temperature = <44000>; + hysteresis = <2000>; + type = "active"; + }; + }; + cooling-maps { + fan-map { + trip = <&cpu_active>; + cooling-device = <&chassis_fan_group0 64 THERMAL_NO_LIMIT>; + }; + }; }; /* on-board eMMC - U9 */ diff --git a/target/linux/mvebu/files/include/linux/mfd/puzzle.h b/target/linux/mvebu/files/include/linux/mfd/puzzle.h new file mode 100644 index 0000000000..b0389f8705 --- /dev/null +++ b/target/linux/mvebu/files/include/linux/mfd/puzzle.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +#ifndef _LINUX_PUZZLE_H_ +#define _LINUX_PUZZLE_H_ + +struct puzzle; +int puzzle_led(struct puzzle *pz, u8 ledn, u8 ledmode); +int puzzle_fan(struct puzzle *pz, u8 speed); +int puzzle_buzzer(struct puzzle *pz, u8 len); + +#endif /* _LINUX_PUZZLE_H_ */ -- cgit v1.2.3