From 96f25d50e2352922e16ae74bb16fd8b6985f0f66 Mon Sep 17 00:00:00 2001 From: Phil Elwell Date: Wed, 30 Sep 2020 12:17:48 +0100 Subject: [PATCH] overlays: Add ghost-amp overlay Add an overlay for the Ghost amplifier. Signed-off-by: Phil Elwell --- arch/arm/boot/dts/overlays/Makefile | 1 + arch/arm/boot/dts/overlays/README | 7 ++ .../boot/dts/overlays/ghost-amp-overlay.dts | 119 ++++++++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 arch/arm/boot/dts/overlays/ghost-amp-overlay.dts --- a/arch/arm/boot/dts/overlays/Makefile +++ b/arch/arm/boot/dts/overlays/Makefile @@ -45,6 +45,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ exc3000.dtbo \ fe-pi-audio.dtbo \ fsm-demo.dtbo \ + ghost-amp.dtbo \ goodix.dtbo \ googlevoicehat-soundcard.dtbo \ gpio-fan.dtbo \ --- a/arch/arm/boot/dts/overlays/README +++ b/arch/arm/boot/dts/overlays/README @@ -775,6 +775,13 @@ Load: dtoverlay=fsm-demo,= Params: fsm_debug Enable debug logging (default off) +Name: ghost-amp +Info: An overlay for the Ghost amplifier. +Load: dtoverlay=ghost-amp,= +Params: fsm_debug Enable debug logging of the GPIO FSM (default + off) + + Name: goodix Info: Enables I2C connected Goodix gt9271 multiple touch controller using GPIOs 4 and 17 (pins 7 and 11 on GPIO header) for interrupt and reset. --- /dev/null +++ b/arch/arm/boot/dts/overlays/ghost-amp-overlay.dts @@ -0,0 +1,119 @@ +// Overlay for the PCM5122-based Ghost amplifier using gpio-fsm +/dts-v1/; +/plugin/; + +#include + +#define ENABLE GF_SW(0) +#define FAULT GF_IP(0) // GPIO5 +#define RELAY1 GF_OP(0) // GPIO22 +#define RELAY2 GF_OP(1) // GPIO23 + +/ { + compatible = "brcm,bcm2835"; + + fragment@0 { + target = <&i2s>; + __overlay__ { + status = "okay"; + }; + }; + + fragment@1 { + target = <&i2c1>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + + pcm5122@4c { + #sound-dai-cells = <0>; + compatible = "ti,pcm5122"; + reg = <0x4c>; + AVDD-supply = <&vdd_3v3_reg>; + DVDD-supply = <&vdd_3v3_reg>; + CPVDD-supply = <&vdd_3v3_reg>; + status = "okay"; + }; + }; + }; + + fragment@2 { + target = <&sound>; + iqaudio_dac: __overlay__ { + compatible = "iqaudio,iqaudio-dac"; + i2s-controller = <&i2s>; + mute-gpios = <& 0 0>; + iqaudio-dac,auto-mute-amp; + status = "okay"; + }; + }; + + fragment@3 { + target-path = "/"; + __overlay__ { + amp: ghost-amp { + compatible = "rpi,gpio-fsm"; + + debug = <0>; + gpio-controller; + #gpio-cells = <2>; + num-soft-gpios = <1>; + gpio-line-names = "enable"; + input-gpios = <&gpio 5 1>; // FAULT (active low) + output-gpios = <&gpio 22 0>, // RELAY1 + <&gpio 23 0>; // RELAY2 + shutdown-timeout-ms = <1000>; + + amp_off { + start_state; + shutdown_state; + + set = , + ; + amp_on_1 = ; + fault = ; + }; + + amp_on_1 { + set = ; + amp_on = ; + amp_off = ; + fault = ; + }; + + amp_on { + set = ; + amp_off_wait = ; + fault = ; + }; + + amp_off_wait { + amp_off_1 = , + ; + amp_on = ; + fault = ; + }; + + amp_off_1 { + set = ; + amp_on = ; + amp_off = ; + fault = ; + }; + + // Keep this a distinct state to prevent + // changes and for the diagnostic output + fault { + set = , + ; + shutdown_state; + }; + }; + }; + }; + + __overrides__ { + fsm_debug = <&>,"debug:0"; + }; +};