On Mon, Nov 5, 2018 at 1:41 PM Daniel Mack <daniel@xxxxxxxxxx> wrote: > > This patch adds a set of DTS files that support all PXA3xx based Raumfeld > audio hardware devices. > > Common nodes are factored out into 'common' and 'tuneable-clock' include > files to keep the top-level DTS files smaller. > > Signed-off-by: Daniel Mack <daniel@xxxxxxxxxx> > --- > arch/arm/boot/dts/Makefile | 7 + > arch/arm/boot/dts/pxa300-raumfeld-common.dtsi | 405 ++++++++++++++++++ > .../boot/dts/pxa300-raumfeld-connector.dts | 73 ++++ > .../boot/dts/pxa300-raumfeld-controller.dts | 267 ++++++++++++ > .../boot/dts/pxa300-raumfeld-speaker-l.dts | 11 + > .../boot/dts/pxa300-raumfeld-speaker-m.dts | 11 + > .../boot/dts/pxa300-raumfeld-speaker-one.dts | 137 ++++++ > .../boot/dts/pxa300-raumfeld-speaker-s.dts | 11 + > .../dts/pxa300-raumfeld-tuneable-clock.dtsi | 85 ++++ > 9 files changed, 1007 insertions(+) > create mode 100644 arch/arm/boot/dts/pxa300-raumfeld-common.dtsi > create mode 100644 arch/arm/boot/dts/pxa300-raumfeld-connector.dts > create mode 100644 arch/arm/boot/dts/pxa300-raumfeld-controller.dts > create mode 100644 arch/arm/boot/dts/pxa300-raumfeld-speaker-l.dts > create mode 100644 arch/arm/boot/dts/pxa300-raumfeld-speaker-m.dts > create mode 100644 arch/arm/boot/dts/pxa300-raumfeld-speaker-one.dts > create mode 100644 arch/arm/boot/dts/pxa300-raumfeld-speaker-s.dts > create mode 100644 arch/arm/boot/dts/pxa300-raumfeld-tuneable-clock.dtsi > > diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile > index b0e966d625b9..a4c921fe325f 100644 > --- a/arch/arm/boot/dts/Makefile > +++ b/arch/arm/boot/dts/Makefile > @@ -778,6 +778,13 @@ dtb-$(CONFIG_ARCH_ACTIONS) += \ > owl-s500-sparky.dtb > dtb-$(CONFIG_ARCH_PRIMA2) += \ > prima2-evb.dtb > +dtb-$(CONFIG_ARCH_PXA) += \ > + pxa300-raumfeld-connector.dtb \ > + pxa300-raumfeld-controller.dtb \ > + pxa300-raumfeld-speaker-s.dtb \ > + pxa300-raumfeld-speaker-m.dtb \ > + pxa300-raumfeld-speaker-l.dtb \ > + pxa300-raumfeld-speaker-one.dtb > dtb-$(CONFIG_ARCH_OXNAS) += \ > ox810se-wd-mbwe.dtb \ > ox820-cloudengines-pogoplug-series-3.dtb > diff --git a/arch/arm/boot/dts/pxa300-raumfeld-common.dtsi b/arch/arm/boot/dts/pxa300-raumfeld-common.dtsi > new file mode 100644 > index 000000000000..55c436546528 > --- /dev/null > +++ b/arch/arm/boot/dts/pxa300-raumfeld-common.dtsi > @@ -0,0 +1,405 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +#include "pxa3xx.dtsi" > +#include <dt-bindings/gpio/gpio.h> > +#include <dt-bindings/input/input.h> > +#include <dt-bindings/interrupt-controller/irq.h> > + > +/ { > + /* Will be overridden by bootloader */ > + hw-revision = <0>; > + > + chosen { > + bootargs = "console=ttyS0,115200 root=ubi0:RootFS rootfstype=ubifs rw ubi.mtd=3"; You can drop console since you have stdout-path. > + stdout-path = &ffuart; > + }; > + > + memory { > + reg = <0xa0000000 0x8000000>; /* 128 MB */ > + }; > + > + reg_3v3: regulator-3v3 { > + compatible = "regulator-fixed"; > + regulator-name = "3v3-fixed-supply"; > + regulator-min-microvolt = <3300000>; > + regulator-max-microvolt = <3300000>; > + regulator-always-on; > + }; > + > + reg_1v8: regulator-1v8 { > + compatible = "regulator-fixed"; > + regulator-name = "1v8-fixed-supply"; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + regulator-always-on; > + }; > + > + reg_va_5v0: regulator-va-5v0 { > + compatible = "regulator-fixed"; > + regulator-name = "va-5v0-fixed-supply"; > + regulator-min-microvolt = <5000000>; > + regulator-max-microvolt = <5000000>; > + gpio = <&gpio 124 GPIO_ACTIVE_HIGH>; > + enable-active-high; > + }; > + > + ssp_dai0: ssp-dai@0 { > + compatible = "mrvl,pxa-ssp-dai"; > + pinctrl-names = "default"; > + pinctrl-0 = <&ssp0_dai_pins>; > + port = <&ssp1>; > + #sound-dai-cells = <0>; > + dmas = <&pdma 13 3 > + &pdma 14 3>; > + dma-names = "rx", "tx"; > + clock-names = "extclk"; > + }; > + > + ssp_dai1: ssp-dai@1 { > + compatible = "mrvl,pxa-ssp-dai"; > + pinctrl-names = "default"; > + pinctrl-0 = <&ssp1_dai_pins>; > + port = <&ssp2>; > + #sound-dai-cells = <0>; > + dmas = <&pdma 15 3 > + &pdma 16 3>; > + dma-names = "rx", "tx"; > + clock-names = "extclk"; > + }; > + > + spi: spi { > + status = "okay"; Don't need this. > + compatible = "spi-gpio"; > + #address-cells = <0x1>; > + #size-cells = <0>; > + pinctrl-names = "default"; > + pinctrl-0 = <&spi_pins>; > + gpio-sck = <&gpio 95 GPIO_ACTIVE_HIGH>; > + gpio-miso = <&gpio 98 GPIO_ACTIVE_HIGH>; > + gpio-mosi = <&gpio 97 GPIO_ACTIVE_HIGH>; > + cs-gpios = < > + &gpio 34 GPIO_ACTIVE_HIGH > + &gpio 125 GPIO_ACTIVE_HIGH > + &gpio 96 GPIO_ACTIVE_HIGH > + >; > + num-chipselects = <3>; Why do we have this when we can just get the length of cs-gpios? > + > + dac: dac@2 { > + compatible = "ti,dac7512"; > + reg = <2>; > + spi-max-frequency = <1000000>; > + vcc-supply = <®_3v3>; > + }; > + }; > + > + keys: gpio-keys { > + compatible = "gpio-keys"; > + pinctrl-names = "default"; > + pinctrl-0 = <&gpio_keys_pins>; > + > + on-off { > + label = "on_off button"; > + gpios = <&gpio 14 GPIO_ACTIVE_LOW>; > + linux,code = <KEY_F6>; > + }; > + > + rescue-boot { > + label = "rescue boot button"; > + gpios = <&gpio 115 GPIO_ACTIVE_HIGH>; > + linux,code = <KEY_F4>; > + }; > + > + setup { > + label = "setup"; > + gpios = <&gpio 119 GPIO_ACTIVE_HIGH>; > + linux,code = <KEY_F3>; > + }; > + }; > + > + rotary: rotary-encoder { > + compatible = "rotary-encoder"; > + gpios = < > + &gpio 19 GPIO_ACTIVE_LOW > + &gpio 20 GPIO_ACTIVE_HIGH > + >; > + linux,axis = <REL_X>; > + rotary-encoder,relative-axis; > + }; > + > + leds: leds { > + compatible = "gpio-leds"; > + pinctrl-names = "default"; > + pinctrl-0 = <&led_pins_a &led_pins_b>; > + > + left { > + label = "raumfeld:1"; > + gpios = <&gpio 36 GPIO_ACTIVE_LOW>; > + }; > + > + right { > + label = "raumfeld:2"; > + gpios = <&gpio 35 GPIO_ACTIVE_HIGH>; > + }; > + }; > + > + poweroff { > + compatible = "gpio-poweroff"; > + pinctrl-names = "default"; > + pinctrl-0 = <&poweroff_pins>; > + gpios = <&gpio 16 GPIO_ACTIVE_HIGH>; > + }; > + > + mmc0_pwrseq: mmc-pwrseq { > + compatible = "mmc-pwrseq-simple"; > + pinctrl-names = "default"; > + pinctrl-0 = <&mmc0_pwrseq_pins>; > + reset-gpios = < > + &gpio 113 GPIO_ACTIVE_LOW /* W2W_RESET */ > + &gpio 114 GPIO_ACTIVE_LOW /* W2W_PDN */ > + >; > + }; > + > + ethernet: ethernet-controller@10000000 { ethernet@... > + compatible = "smsc,lan9115"; > + pinctrl-names = "default"; > + pinctrl-0 = <&smsc_pins &smsc_bus_pins>; > + reg = <0x10000000 0x100000>; > + phy-mode = "mii"; > + interrupt-parent = <&gpio>; > + interrupts = <40 IRQ_TYPE_EDGE_FALLING>; > + vdd33a-supply = <®_3v3>; > + vddvario-supply = <®_1v8>; > + reset-gpio = <&gpio 39 GPIO_ACTIVE_LOW>; reset-gpios > + reg-io-width = <4>; > + smsc,save-mac-address; > + smsc,irq-push-pull; > + }; > +}; > + > +&ffuart { > + status = "okay"; > +}; > + > +&pwri2c { > + status = "okay"; > + > + max8660: regulator@34 { > + compatible = "maxim,max8660"; > + reg = <0x34>; > + > + regulators { > + regulator@0 { Drop the unit-address as there is no reg property. Build your DT with W=12 and fix any new warnings these new files add (probably some are from the SoC dtsi). > + regulator-compatible= "V3(DCDC)"; > + regulator-min-microvolt = <725000>; > + regulator-max-microvolt = <1800000>; > + }; > + > + regulator@1 { > + regulator-compatible= "V4(DCDC)"; > + regulator-min-microvolt = <725000>; > + regulator-max-microvolt = <1800000>; > + }; > + > + regulator@2 { > + regulator-compatible= "V5(LDO)"; > + regulator-min-microvolt = <1700000>; > + regulator-max-microvolt = <2000000>; > + }; > + > + reg_vcc_sdio: regulator@3 { > + regulator-compatible= "V6(LDO)"; > + regulator-min-microvolt = <3300000>; > + regulator-max-microvolt = <3300000>; > + }; > + > + regulator@4 { > + regulator-compatible= "V7(LDO)"; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <3300000>; > + }; > + }; > + }; > +}; > + > +&pxai2c1 { > + status = "okay"; > + mrvl,i2c-fast-mode; > + pinctrl-names = "default"; > + pinctrl-0 = <&pxai2c1_pins>; > +}; > + > +&ssp1 { > + status = "okay"; > +}; > + > +&ssp2 { > + status = "okay"; > +}; > + > +&nand_controller { > + status = "okay"; > + > + nand@0 { > + reg = <0>; > + nand-rb = <0>; > + nand-ecc-mode = "hw"; > + marvell,nand-keep-config; > + > + partitions { > + compatible = "fixed-partitions"; > + #address-cells = <1>; > + #size-cells = <1>; > + > + partition@0 { > + label = "Bootloader"; > + reg = <0x0000000 0xa0000>; > + read-only; > + }; > + > + partition@a0000 { > + label = "BootloaderEnvironment"; > + reg = <0x0a0000 0x20000>; > + }; > + > + partition@c0000 { > + label = "BootloaderSplashScreen"; > + reg = <0x0c0000 0x60000>; > + }; > + > + partition@120000 { > + label = "UBI"; > + reg = <0x120000 0x7ee0000>; > + }; > + }; > + }; > +}; > + > +&pxa3xx_ohci { > + status = "okay"; > + marvell,enable-port1; > + marvell,port-mode = <2>; /* PMM_GLOBAL_MODE */ > + pinctrl-names = "default"; > + pinctrl-0 = <&pxa3xx_ohci_pins>; > +}; > + > +&mmc0 { > + status = "okay"; > + pinctrl-names = "default"; > + pinctrl-0 = <&mmc0_pins>; > + pxa-mmc,detect-delay-ms = <200>; > + vmmc-supply = <®_vcc_sdio>; > + mmc-pwrseq = <&mmc0_pwrseq>; > + non-removable; > + bus-width = <4>; > +}; > + > +&pinctrl { > + poweroff_pins: poweroff_pins { > + pinctrl-single,pins = <MFP_PIN_PXA300(16) MFP_AF0>; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT); > + }; > + > + led_pins_a: led_pins_a { > + pinctrl-single,pins = <MFP_PIN_PXA300(35) MFP_AF0>; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > + > + led_pins_b: led_pins_b { > + pinctrl-single,pins = <MFP_PIN_PXA300(36) MFP_AF0>; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_DRIVE_HIGH); > + }; > + > + pxai2c1_pins: pxai2c1_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(21) MFP_AF1 /* I2C_SCL */ > + MFP_PIN_PXA300(22) MFP_AF1 /* I2C_SDA */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_HIGH); > + }; > + > + gpio_keys_pins: gpio_keys_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(14) MFP_AF0 /* SCK */ > + MFP_PIN_PXA300(115) MFP_AF0 /* MOSI */ > + MFP_PIN_PXA300(119) MFP_AF0 /* MISO */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT); > + }; > + > + spi_pins: spi_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(95) MFP_AF0 /* SCK */ > + MFP_PIN_PXA300(97) MFP_AF0 /* MOSI */ > + MFP_PIN_PXA300(98) MFP_AF0 /* MISO */ > + MFP_PIN_PXA300(34) MFP_AF0 /* CS#0 */ > + MFP_PIN_PXA300(125) MFP_AF0 /* CS#1 */ > + MFP_PIN_PXA300(96) MFP_AF0 /* CS#2 */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > + > + pxa3xx_ohci_pins: pxa3xx_ohci_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300_2(0) MFP_AF1 /* USBHPEN */ > + MFP_PIN_PXA300_2(1) MFP_AF1 /* USBHPWR */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > + > + smsc_pins: smsc_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(39) MFP_AF0 /* RESET */ > + MFP_PIN_PXA300(40) MFP_AF0 /* IRQ */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > + > + smsc_bus_pins: smsc_bus_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(1) MFP_AF1 /* nCS2 */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT); > + }; > + > + mmc0_pins: mmc0_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(3) MFP_AF4 /* MMC1_DAT0 */ > + MFP_PIN_PXA300(4) MFP_AF4 /* MMC1_DAT1 */ > + MFP_PIN_PXA300(5) MFP_AF4 /* MMC1_DAT2 */ > + MFP_PIN_PXA300(6) MFP_AF4 /* MMC1_DAT3 */ > + MFP_PIN_PXA300(7) MFP_AF4 /* MMC1_CLK */ > + MFP_PIN_PXA300(8) MFP_AF4 /* MMC1_CMD */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_DRIVE_HIGH); > + }; > + > + mmc0_pwrseq_pins: mmc0_pwrseq_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(113) MFP_AF0 /* W2W_RESET */ > + MFP_PIN_PXA300(114) MFP_AF0 /* W2W_PDN */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT); > + }; > + > + ssp0_dai_pins: ssp0_dai_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(85) MFP_AF1 /* SSP1_SCLK */ > + MFP_PIN_PXA300(86) MFP_AF1 /* SSP1_FRM */ > + MFP_PIN_PXA300(87) MFP_AF1 /* SSP1_TXD */ > + MFP_PIN_PXA300(88) MFP_AF1 /* SSP1_RXD */ > + MFP_PIN_PXA300(89) MFP_AF1 /* SSP1_EXTCLK */ > + MFP_PIN_PXA300(90) MFP_AF1 /* SSP1_SYSCLK */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > + > + ssp1_dai_pins: ssp1_dai_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(25) MFP_AF2 /* SSP2_SCLK */ > + MFP_PIN_PXA300(26) MFP_AF2 /* SSP2_FRM */ > + MFP_PIN_PXA300(27) MFP_AF2 /* SSP2_TXD */ > + MFP_PIN_PXA300(29) MFP_AF2 /* SSP2_EXTCLK */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > +}; > diff --git a/arch/arm/boot/dts/pxa300-raumfeld-connector.dts b/arch/arm/boot/dts/pxa300-raumfeld-connector.dts > new file mode 100644 > index 000000000000..4cc3b1070949 > --- /dev/null > +++ b/arch/arm/boot/dts/pxa300-raumfeld-connector.dts > @@ -0,0 +1,73 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +/dts-v1/; > + > +#include "pxa300-raumfeld-common.dtsi" > +#include "pxa300-raumfeld-tuneable-clock.dtsi" > + > +/ { > + model = "Raumfeld Connector (PXA3xx)"; > + compatible = "raumfeld,raumfeld-connector-pxa303", "marvell,pxa300"; > + > + sound { > + compatible = "simple-audio-card"; > + simple-audio-card,name = "Raumfeld Connector"; > + #address-cells = <1>; > + #size-cells = <0>; > + > + simple-audio-card,dai-link@0 { > + reg = <0>; > + format = "i2s"; > + bitclock-master = <&dailink_master_analog>; > + frame-master = <&dailink_master_analog>; > + mclk-fs = <256>; > + > + dailink_master_analog: cpu { > + sound-dai = <&ssp_dai0>; > + }; > + > + codec { > + sound-dai = <&cs4270>; > + }; > + }; > + > + simple-audio-card,dai-link@1 { > + reg = <1>; > + format = "i2s"; > + bitclock-master = <&dailink_master_digital>; > + frame-master = <&dailink_master_digital>; > + mclk-fs = <256>; > + > + dailink_master_digital: cpu { > + sound-dai = <&ssp_dai1>; > + }; > + > + codec { > + sound-dai = <&ak4104>; > + }; > + }; > + }; > +}; > + > +&ssp1 { > + status = "okay"; > +}; > + > +&ssp2 { > + status = "okay"; > +}; > + > +&spi { > + ak4104: optical-transmitter@0 { > + compatible = "asahi-kasei,ak4104"; > + reg = <0>; > + vdd-supply = <®_3v3>; > + spi-max-frequency = <5000000>; > + reset-gpio = <&gpio 38 GPIO_ACTIVE_HIGH>; reset-gpios > + #sound-dai-cells = <0>; > + }; > +}; > + > +&rotary { > + status = "disabled"; > +}; > diff --git a/arch/arm/boot/dts/pxa300-raumfeld-controller.dts b/arch/arm/boot/dts/pxa300-raumfeld-controller.dts > new file mode 100644 > index 000000000000..dd85aaee8b79 > --- /dev/null > +++ b/arch/arm/boot/dts/pxa300-raumfeld-controller.dts > @@ -0,0 +1,267 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +/dts-v1/; > + > +#include "pxa300-raumfeld-common.dtsi" > + > +/ { > + model = "Raumfeld Controller (PXA3xx)"; > + compatible = "raumfeld,raumfeld-controller-pxa303", "marvell,pxa300"; > + > + reg_vbatt: regulator-vbatt { > + compatible = "regulator-fixed"; > + regulator-name = "vbatt-fixed-supply"; > + regulator-min-microvolt = <3700000>; > + regulator-max-microvolt = <3700000>; > + regulator-always-on; > + }; > + > + lcd_supply: regulator-va-tft { > + compatible = "regulator-fixed"; > + regulator-name = "va-tft-fixed-supply"; > + regulator-min-microvolt = <5000000>; > + regulator-max-microvolt = <5000000>; > + gpio = <&gpio 33 GPIO_ACTIVE_HIGH>; > + enable-active-high; > + }; > + > + onewire { > + compatible = "w1-gpio"; > + pinctrl-names = "default"; > + pinctrl-0 = <&w1_pins>; > + gpios = < > + &gpio 126 GPIO_OPEN_DRAIN /* W1 I/O */ > + &gpio 105 GPIO_ACTIVE_HIGH /* pullup */ > + >; > + > + w1_ds2760: slave@0 { > + compatible = "maxim,ds2760"; > + power-supplies = <&charger>; > + }; > + }; > + > + charger: charger { > + compatible = "gpio-charger"; > + charger-type = "mains"; > + gpios = <&gpio 101 GPIO_ACTIVE_LOW>; > + }; > + > + /* > + * One of the following two will be set to "okay" by the bootloader, > + * depending on the hardware revision. > + */ > + backlight-controller-pwm { > + compatible = "pwm-backlight"; > + pinctrl-names = "default"; > + pinctrl-0 = <&pwm0_pins>; > + pwms = <&pwm0 10000>; > + power-supply = <®_vbatt>; > + status = "disabled"; > + > + brightness-levels = < > + 0 1 2 3 4 5 6 7 8 9 > + 10 11 12 13 14 15 16 17 18 19 > + 20 21 22 23 24 25 26 27 28 29 > + 30 31 32 33 34 35 36 37 38 39 > + 40 41 42 43 44 45 46 47 48 49 > + 50 51 52 53 54 55 56 57 58 59 > + 60 61 62 63 64 65 66 67 68 69 > + 70 71 72 73 74 75 76 77 78 79 > + 80 81 82 83 84 85 86 87 88 89 > + 90 91 92 93 94 95 96 97 98 99 > + 100 > + >; > + default-brightness-level = <100>; > + }; > + > + backlight-controller { > + compatible = "lltc,lt3593"; > + pinctrl-names = "default"; > + pinctrl-0 = <<3593_pins>; > + lltc,ctrl-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>; > + status = "disabled"; > + > + led { > + label = "backlight"; > + default-state = "on"; > + }; > + }; > +}; > + > +®_va_5v0 { > + status = "disabled"; > +}; > + > +ðernet { > + status = "disabled"; > +}; > + > +&leds { > + status = "disabled"; > +}; > + > +&dac { > + status = "disabled"; > +}; > + > +&pwm0 { > + status = "okay"; > +}; > + > +&keys { > + dock-detect { > + label = "dock detect"; > + gpios = <&gpio 116 GPIO_ACTIVE_HIGH>; > + linux,code = <KEY_F5>; > + }; > +}; > + > +&spi { > + accelerometer@1 { > + compatible = "st,lis302dl-spi"; > + pinctrl-names = "default"; > + pinctrl-0 = <&lis302_pins>; > + reg = <1>; > + spi-max-frequency = <1000000>; > + interrupt-parent = <&gpio>; > + interrupts = <104 IRQ_TYPE_EDGE_FALLING>; > + > + st,click-single-x; > + st,click-single-y; > + st,click-single-z; > + st,click-thresh-x = <10>; > + st,click-thresh-y = <10>; > + st,click-thresh-z = <10>; > + st,irq1-click; > + st,irq2-click; > + st,wakeup-x-lo; > + st,wakeup-x-hi; > + st,wakeup-y-lo; > + st,wakeup-y-hi; > + st,wakeup-z-lo; > + st,wakeup-z-hi; > + }; > +}; > + > +&lcdc { > + status = "okay"; > + pinctrl-names = "default"; > + pinctrl-0 = <&lcdc_pins>; > + lcd-supply = <&lcd_supply>; > + enable-acceleration; Not documented. > + > + port { > + lcdc_out: endpoint { > + remote-endpoint = <&panel_in>; > + bus-width = <16>; > + }; > + }; > + > + panel { > + /* Sharp lq043t3dx0 */ This should have a panel specific compatible. > + display-timings { > + native-mode = <&timing0>; > + timing0: timing { > + clock-frequency = <9009000>; > + pixelclk-active = <0>; /* negative edge */ > + hactive = <480>; > + vactive = <272>; > + hsync-len = <41>; > + hback-porch = <2>; > + hfront-porch = <1>; > + vsync-len = <10>; > + vback-porch = <3>; > + vfront-porch = <1>; > + }; > + }; > + > + port { > + panel_in: endpoint { > + remote-endpoint = <&lcdc_out>; > + }; > + }; > + }; > +}; > + > +&gcu { > + status = "okay"; > +}; > + > +&pxai2c1 { > + touchscreen@a { > + compatible = "eeti,exc3000-i2c"; > + pinctrl-names = "default"; > + pinctrl-0 = <&eeti_ts_pins>; > + reg = <0xa>; > + interrupt-parent = <&gpio>; > + interrupts = <32 IRQ_TYPE_EDGE_RISING>; > + attn-gpios = <&gpio 32 GPIO_ACTIVE_HIGH>; > + touchscreen-inverted-y; > + }; > +}; > + > +&pinctrl { > + lis302_pins: lis302_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(104) MFP_AF0 /* IRQ */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > + > + eeti_ts_pins: eeti_ts_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(32) MFP_AF0 /* IRQ */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT); > + }; > + > + lt3593_pins: lt3593_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(17) MFP_AF0 /* Backlight */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > + > + pwm0_pins: pwm0_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(17) MFP_AF1 /* PWM */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > + > + w1_pins: w1_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(126) MFP_AF0 /* PWM */ > + MFP_PIN_PXA300(105) MFP_AF0 /* PWM */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT); > + }; > + > + lcdc_pins: lcdc_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(54) MFP_AF1 /* LDD_0 */ > + MFP_PIN_PXA300(55) MFP_AF1 /* LDD_1 */ > + MFP_PIN_PXA300(56) MFP_AF1 /* LDD_2 */ > + MFP_PIN_PXA300(57) MFP_AF1 /* LDD_3 */ > + MFP_PIN_PXA300(58) MFP_AF1 /* LDD_4 */ > + MFP_PIN_PXA300(59) MFP_AF1 /* LDD_5 */ > + MFP_PIN_PXA300(60) MFP_AF1 /* LDD_6 */ > + MFP_PIN_PXA300(61) MFP_AF1 /* LDD_7 */ > + MFP_PIN_PXA300(62) MFP_AF1 /* LDD_8 */ > + MFP_PIN_PXA300(63) MFP_AF1 /* LDD_9 */ > + MFP_PIN_PXA300(64) MFP_AF1 /* LDD_10 */ > + MFP_PIN_PXA300(65) MFP_AF1 /* LDD_11 */ > + MFP_PIN_PXA300(66) MFP_AF1 /* LDD_12 */ > + MFP_PIN_PXA300(67) MFP_AF1 /* LDD_13 */ > + MFP_PIN_PXA300(68) MFP_AF1 /* LDD_14 */ > + MFP_PIN_PXA300(69) MFP_AF1 /* LDD_15 */ > + MFP_PIN_PXA300(70) MFP_AF1 /* LDD_16 */ > + MFP_PIN_PXA300(71) MFP_AF1 /* LDD_17 */ > + MFP_PIN_PXA300(72) MFP_AF1 /* LCD_FCLK */ > + MFP_PIN_PXA300(73) MFP_AF1 /* LCD_LCLK */ > + MFP_PIN_PXA300(74) MFP_AF1 /* LCD_PCLK */ > + MFP_PIN_PXA300(75) MFP_AF1 /* LCD_BIAS */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > +}; > diff --git a/arch/arm/boot/dts/pxa300-raumfeld-speaker-l.dts b/arch/arm/boot/dts/pxa300-raumfeld-speaker-l.dts > new file mode 100644 > index 000000000000..5a0f7f17856f > --- /dev/null > +++ b/arch/arm/boot/dts/pxa300-raumfeld-speaker-l.dts > @@ -0,0 +1,11 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +/dts-v1/; > + > +#include "pxa300-raumfeld-common.dtsi" > +#include "pxa300-raumfeld-tuneable-clock.dtsi" > + > +/ { > + model = "Raumfeld Speaker L (PXA3xx)"; > + compatible = "raumfeld,raumfeld-speaker-l-pxa303", "marvell,pxa300"; > +}; > diff --git a/arch/arm/boot/dts/pxa300-raumfeld-speaker-m.dts b/arch/arm/boot/dts/pxa300-raumfeld-speaker-m.dts > new file mode 100644 > index 000000000000..fa10d896282c > --- /dev/null > +++ b/arch/arm/boot/dts/pxa300-raumfeld-speaker-m.dts > @@ -0,0 +1,11 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +/dts-v1/; > + > +#include "pxa300-raumfeld-common.dtsi" > +#include "pxa300-raumfeld-tuneable-clock.dtsi" > + > +/ { > + model = "Raumfeld Speaker M (PXA3xx)"; > + compatible = "raumfeld,raumfeld-speaker-m-pxa303", "marvell,pxa300"; > +}; > diff --git a/arch/arm/boot/dts/pxa300-raumfeld-speaker-one.dts b/arch/arm/boot/dts/pxa300-raumfeld-speaker-one.dts > new file mode 100644 > index 000000000000..8dd6611c2809 > --- /dev/null > +++ b/arch/arm/boot/dts/pxa300-raumfeld-speaker-one.dts > @@ -0,0 +1,137 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +/dts-v1/; > + > +#include "pxa300-raumfeld-common.dtsi" > + > +/ { > + model = "Raumfeld Speaker One (PXA3xx)"; > + compatible = "raumfeld,raumfeld-speaker-one-pxa303", "marvell,pxa300"; > + > + wm8782: wm8782 { > + compatible = "wm8782"; > + #sound-dai-cells = <0>; > + Vdd-supply = <®_3v3>; > + Vdda-supply = <®_va_5v0>; > + }; > + > + xo_11mhz: oscillator-11mhz { > + compatible = "fixed-clock"; > + #clock-cells = <0>; > + clock-frequency = <11289600>; > + clock-accuracy = <100>; > + }; > + > + xo_audio: clock-gate { > + compatible = "gpio-gate-clock"; > + pinctrlnames = "default"; > + pinctrl-0 = <&xo_audio_pins>; > + clocks = <&xo_11mhz>; > + #clock-cells = <0>; > + enable-gpios = <&gpio 111 GPIO_ACTIVE_HIGH>; > + }; > + > + reg_va_30v0: regulator-va-30v0 { > + compatible = "regulator-fixed"; > + regulator-name = "va-30v0-fixed-supply"; > + regulator-min-microvolt = <30000000>; > + regulator-max-microvolt = <30000000>; > + }; > + > + sound { > + compatible = "simple-audio-card"; > + simple-audio-card,name = "Raumfeld Speaker"; > + #address-cells = <1>; > + #size-cells = <0>; > + > + simple-audio-card,dai-link@0 { > + reg = <0>; > + format = "i2s"; > + bitclock-master = <&dailink_master_analog_out>; > + frame-master = <&dailink_master_analog_out>; > + mclk-fs = <256>; > + > + dailink_master_analog_out: cpu { > + sound-dai = <&ssp_dai0>; > + }; > + > + codec { > + sound-dai = <&sta320>; > + }; > + }; > + > + simple-audio-card,dai-link@1 { > + reg = <1>; > + format = "i2s"; > + bitclock-master = <&dailink_master_analog_in>; > + frame-master = <&dailink_master_analog_in>; > + mclk-fs = <256>; > + > + dailink_master_analog_in: cpu { > + sound-dai = <&ssp_dai0>; > + }; > + > + codec { > + sound-dai = <&wm8782>; > + }; > + }; > + }; > +}; > + > +&ssp_dai0 { > + clocks = <&xo_audio>; > +}; > + > +&spi { > + dac@2 { > + compatible = "ti,dac7512"; > + reg = <2>; > + spi-max-frequency = <1000000>; > + vcc-supply = <®_3v3>; > + }; > +}; > + > +&rotary { > + status = "okay"; > +}; > + > +&pxai2c1 { > + sta320: codec@1a { > + compatible = "st,sta32x"; > + reg = <0x1a>; > + pinctrl-names = "default"; > + pinctrl-0 = <&sta320_pins>; > + clocks = <&xo_audio>; > + clock-names = "xti"; > + reset-gpios = <&gpio 120 GPIO_ACTIVE_HIGH>; > + Vdda-supply = <®_3v3>; > + Vdd3-supply = <®_3v3>; > + Vcc-supply = <®_va_30v0>; > + #sound-dai-cells = <0>; > + st,thermal-warning-adjustment; > + st,thermal-warning-recovery; > + st,fault-detect-recovery; > + st,drop-compensation-ns = <80>; > + st,max-power-use-mpcc; > + st,invalid-input-detect-mute; > + /* 2 (half-bridge) and 1 (full-bridge) on-board power */ > + st,output-conf = /bits/ 8 <0x1>; > + st,needs_esd_watchdog; > + }; > +}; > + > +&pinctrl { > + xo_audio_pins: xo_audio_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(111) MFP_AF0 /* ENABLE */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > + > + sta320_pins: sta320_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(120) MFP_AF0 /* CODEC_RESET */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_FLOAT); > + }; > +}; > diff --git a/arch/arm/boot/dts/pxa300-raumfeld-speaker-s.dts b/arch/arm/boot/dts/pxa300-raumfeld-speaker-s.dts > new file mode 100644 > index 000000000000..36e20cbf8704 > --- /dev/null > +++ b/arch/arm/boot/dts/pxa300-raumfeld-speaker-s.dts > @@ -0,0 +1,11 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +/dts-v1/; > + > +#include "pxa300-raumfeld-common.dtsi" > +#include "pxa300-raumfeld-tuneable-clock.dtsi" > + > +/ { > + model = "Raumfeld Speaker S (PXA3xx)"; > + compatible = "raumfeld,raumfeld-speaker-s-pxa303", "marvell,pxa300"; > +}; > diff --git a/arch/arm/boot/dts/pxa300-raumfeld-tuneable-clock.dtsi b/arch/arm/boot/dts/pxa300-raumfeld-tuneable-clock.dtsi > new file mode 100644 > index 000000000000..e267ef48c879 > --- /dev/null > +++ b/arch/arm/boot/dts/pxa300-raumfeld-tuneable-clock.dtsi > @@ -0,0 +1,85 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +#include <dt-bindings/clock/maxim,max9485.h> > + > +/ { > + xo_27mhz: oscillator-27mhz { > + compatible = "fixed-clock"; > + #clock-cells = <0>; > + clock-frequency = <27000000>; > + clock-accuracy = <100>; > + }; > + > + sound { > + compatible = "simple-audio-card"; > + simple-audio-card,name = "Raumfeld Speaker"; > + #address-cells = <1>; > + #size-cells = <0>; > + > + simple-audio-card,dai-link@0 { > + reg = <0>; > + format = "i2s"; > + bitclock-master = <&dailink_master_analog>; > + frame-master = <&dailink_master_analog>; > + mclk-fs = <256>; > + > + dailink_master_analog: cpu { > + sound-dai = <&ssp_dai0>; > + }; > + > + codec { > + sound-dai = <&cs4270>; > + }; > + }; > + }; > +}; > + > +&ssp_dai0 { > + clocks = <&max9485 MAX9485_CLKOUT1>; > +}; > + > +&ssp_dai1 { > + clocks = <&max9485 MAX9485_CLKOUT1>; > +}; > + > +&pxai2c1 { > + cs4270: codec@48 { > + compatible = "cirrus,cs4270"; > + pinctrl-names = "default"; > + pinctrl-0 = <&cs4270_pins>; > + reg = <0x48>; > + va-supply = <®_va_5v0>; > + vd-supply = <®_3v3>; > + vlc-supply = <®_3v3>; > + reset-gpio = <&gpio 120 GPIO_ACTIVE_HIGH>; > + #sound-dai-cells = <0>; > + }; > + > + max9485: clock-generator@63 { > + compatible = "maxim,max9485"; > + pinctrl-names = "default"; > + pinctrl-0 = <&max9485_pins>; > + reg = <0x63>; > + vdd-supply = <®_3v3>; > + clock-names = "xclk"; > + clocks = <&xo_27mhz>; > + reset-gpios = <&gpio 111 GPIO_ACTIVE_HIGH>; > + #clock-cells = <1>; > + }; > +}; > + > +&pinctrl { > + cs4270_pins: cs4270_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(120) MFP_AF0 /* RESET */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > + > + max9485_pins: max9485_pins { > + pinctrl-single,pins = < > + MFP_PIN_PXA300(111) MFP_AF0 /* RESET */ > + >; > + pinctrl-single,low-power-mode = MFP_LPM(MFP_LPM_PULL_LOW); > + }; > +}; > -- > 2.17.2 >