162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Device Tree for the ARM Integrator/AP platform
462306a36Sopenharmony_ci * with the IM-PD1 example logical module mounted.
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include "integratorap.dts"
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci/ {
1062306a36Sopenharmony_ci	model = "ARM Integrator/AP with IM-PD1";
1162306a36Sopenharmony_ci	compatible = "arm,integrator-ap";
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci	reserved-memory {
1462306a36Sopenharmony_ci		#address-cells = <1>;
1562306a36Sopenharmony_ci		#size-cells = <1>;
1662306a36Sopenharmony_ci		ranges;
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci		impd1_ram: vram@c2000000 {
1962306a36Sopenharmony_ci			/* 1 MB of designated video RAM on the IM-PD1 */
2062306a36Sopenharmony_ci			compatible = "shared-dma-pool";
2162306a36Sopenharmony_ci			reg = <0xc2000000 0x00100000>;
2262306a36Sopenharmony_ci			no-map;
2362306a36Sopenharmony_ci		};
2462306a36Sopenharmony_ci	};
2562306a36Sopenharmony_ci};
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci&lm0 {
2862306a36Sopenharmony_ci	syscon@0 {
2962306a36Sopenharmony_ci		compatible = "arm,im-pd1-syscon", "syscon";
3062306a36Sopenharmony_ci		reg = <0x00000000 0x1000>;
3162306a36Sopenharmony_ci		ranges;
3262306a36Sopenharmony_ci		#address-cells = <1>;
3362306a36Sopenharmony_ci		#size-cells = <1>;
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci		vco1: clock-controller@0 {
3662306a36Sopenharmony_ci			compatible = "arm,impd1-vco1";
3762306a36Sopenharmony_ci			reg = <0x00 0x04>;
3862306a36Sopenharmony_ci			#clock-cells = <0>;
3962306a36Sopenharmony_ci			lock-offset = <0x08>;
4062306a36Sopenharmony_ci			vco-offset = <0x00>;
4162306a36Sopenharmony_ci			clocks = <&sysclk>;
4262306a36Sopenharmony_ci			clock-output-names = "IM-PD1-VCO1";
4362306a36Sopenharmony_ci		};
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci		vco2: clock-controller@4 {
4662306a36Sopenharmony_ci			compatible = "arm,impd1-vco2";
4762306a36Sopenharmony_ci			reg = <0x04 0x04>;
4862306a36Sopenharmony_ci			#clock-cells = <0>;
4962306a36Sopenharmony_ci			lock-offset = <0x08>;
5062306a36Sopenharmony_ci			vco-offset = <0x04>;
5162306a36Sopenharmony_ci			clocks = <&sysclk>;
5262306a36Sopenharmony_ci			clock-output-names = "IM-PD1-VCO2";
5362306a36Sopenharmony_ci		};
5462306a36Sopenharmony_ci	};
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci	/* Also used for the Smart Card Interface SCI */
5762306a36Sopenharmony_ci	impd1_uartclk: clock@1_4 {
5862306a36Sopenharmony_ci		compatible = "fixed-factor-clock";
5962306a36Sopenharmony_ci		#clock-cells = <0>;
6062306a36Sopenharmony_ci		clock-div = <4>;
6162306a36Sopenharmony_ci		clock-mult = <1>;
6262306a36Sopenharmony_ci		clocks = <&vco2>;
6362306a36Sopenharmony_ci		clock-output-names = "VCO2_DIV4";
6462306a36Sopenharmony_ci	};
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_ci	/* For the SSP the clock is divided by 64 */
6762306a36Sopenharmony_ci	impd1_sspclk: clock@1_64 {
6862306a36Sopenharmony_ci		compatible = "fixed-factor-clock";
6962306a36Sopenharmony_ci		#clock-cells = <0>;
7062306a36Sopenharmony_ci		clock-div = <64>;
7162306a36Sopenharmony_ci		clock-mult = <1>;
7262306a36Sopenharmony_ci		clocks = <&vco2>;
7362306a36Sopenharmony_ci		clock-output-names = "VCO2_DIV64";
7462306a36Sopenharmony_ci	};
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci	/* Fixed regulator for the MMC */
7762306a36Sopenharmony_ci	impd1_3v3: regulator {
7862306a36Sopenharmony_ci		compatible = "regulator-fixed";
7962306a36Sopenharmony_ci		regulator-name = "3V3";
8062306a36Sopenharmony_ci		regulator-min-microvolt = <3300000>;
8162306a36Sopenharmony_ci		regulator-max-microvolt = <3300000>;
8262306a36Sopenharmony_ci		regulator-always-on;
8362306a36Sopenharmony_ci	};
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci	/* Push buttons on the IM-PD1 */
8662306a36Sopenharmony_ci	gpio_keys {
8762306a36Sopenharmony_ci		compatible = "gpio-keys";
8862306a36Sopenharmony_ci		#address-cells = <1>;
8962306a36Sopenharmony_ci		#size-cells = <0>;
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci		button@0 {
9262306a36Sopenharmony_ci			debounce-interval = <50>;
9362306a36Sopenharmony_ci			linux,code = <KEY_UP>;
9462306a36Sopenharmony_ci			label = "UP";
9562306a36Sopenharmony_ci			gpios = <&impd1_gpio1 0 GPIO_ACTIVE_HIGH>;
9662306a36Sopenharmony_ci		};
9762306a36Sopenharmony_ci		button@1 {
9862306a36Sopenharmony_ci			debounce-interval = <50>;
9962306a36Sopenharmony_ci			linux,code = <KEY_DOWN>;
10062306a36Sopenharmony_ci			label = "DOWN";
10162306a36Sopenharmony_ci			gpios = <&impd1_gpio1 1 GPIO_ACTIVE_HIGH>;
10262306a36Sopenharmony_ci		};
10362306a36Sopenharmony_ci		button@2 {
10462306a36Sopenharmony_ci			debounce-interval = <50>;
10562306a36Sopenharmony_ci			linux,code = <KEY_LEFT>;
10662306a36Sopenharmony_ci			label = "LEFT";
10762306a36Sopenharmony_ci			gpios = <&impd1_gpio1 2 GPIO_ACTIVE_HIGH>;
10862306a36Sopenharmony_ci		};
10962306a36Sopenharmony_ci		button@3 {
11062306a36Sopenharmony_ci			debounce-interval = <50>;
11162306a36Sopenharmony_ci			linux,code = <KEY_RIGHT>;
11262306a36Sopenharmony_ci			label = "UP";
11362306a36Sopenharmony_ci			gpios = <&impd1_gpio1 3 GPIO_ACTIVE_HIGH>;
11462306a36Sopenharmony_ci		};
11562306a36Sopenharmony_ci		button@4 {
11662306a36Sopenharmony_ci			debounce-interval = <50>;
11762306a36Sopenharmony_ci			linux,code = <KEY_ESC>;
11862306a36Sopenharmony_ci			label = "ESC";
11962306a36Sopenharmony_ci			gpios = <&impd1_gpio1 4 GPIO_ACTIVE_HIGH>;
12062306a36Sopenharmony_ci		};
12162306a36Sopenharmony_ci		button@5 {
12262306a36Sopenharmony_ci			debounce-interval = <50>;
12362306a36Sopenharmony_ci			linux,code = <KEY_ENTER>;
12462306a36Sopenharmony_ci			label = "ENTER";
12562306a36Sopenharmony_ci			gpios = <&impd1_gpio1 5 GPIO_ACTIVE_HIGH>;
12662306a36Sopenharmony_ci		};
12762306a36Sopenharmony_ci	};
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_ci	bridge {
13162306a36Sopenharmony_ci		compatible = "ti,ths8134b", "ti,ths8134";
13262306a36Sopenharmony_ci		#address-cells = <1>;
13362306a36Sopenharmony_ci		#size-cells = <0>;
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ci		ports {
13662306a36Sopenharmony_ci			#address-cells = <1>;
13762306a36Sopenharmony_ci			#size-cells = <0>;
13862306a36Sopenharmony_ci			port@0 {
13962306a36Sopenharmony_ci				reg = <0>;
14062306a36Sopenharmony_ci					vga_bridge_in: endpoint {
14162306a36Sopenharmony_ci					remote-endpoint = <&clcd_pads_vga_dac>;
14262306a36Sopenharmony_ci				};
14362306a36Sopenharmony_ci			};
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci			port@1 {
14662306a36Sopenharmony_ci				reg = <1>;
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci				vga_bridge_out: endpoint {
14962306a36Sopenharmony_ci					remote-endpoint = <&vga_con_in>;
15062306a36Sopenharmony_ci				};
15162306a36Sopenharmony_ci			};
15262306a36Sopenharmony_ci		};
15362306a36Sopenharmony_ci	};
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ci	vga {
15662306a36Sopenharmony_ci		compatible = "vga-connector";
15762306a36Sopenharmony_ci
15862306a36Sopenharmony_ci		port {
15962306a36Sopenharmony_ci			vga_con_in: endpoint {
16062306a36Sopenharmony_ci				remote-endpoint = <&vga_bridge_out>;
16162306a36Sopenharmony_ci			};
16262306a36Sopenharmony_ci		};
16362306a36Sopenharmony_ci	};
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_ci	serial@100000 {
16662306a36Sopenharmony_ci		compatible = "arm,pl011", "arm,primecell";
16762306a36Sopenharmony_ci		reg = <0x00100000 0x1000>;
16862306a36Sopenharmony_ci		interrupts-extended = <&impd1_vic 1>;
16962306a36Sopenharmony_ci		clocks = <&impd1_uartclk>, <&sysclk>;
17062306a36Sopenharmony_ci		clock-names = "uartclk", "apb_pclk";
17162306a36Sopenharmony_ci	};
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ci	serial@200000 {
17462306a36Sopenharmony_ci		compatible = "arm,pl011", "arm,primecell";
17562306a36Sopenharmony_ci		reg = <0x00200000 0x1000>;
17662306a36Sopenharmony_ci		interrupts-extended = <&impd1_vic 2>;
17762306a36Sopenharmony_ci		clocks = <&impd1_uartclk>, <&sysclk>;
17862306a36Sopenharmony_ci		clock-names = "uartclk", "apb_pclk";
17962306a36Sopenharmony_ci	};
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci	spi@300000 {
18262306a36Sopenharmony_ci		compatible = "arm,pl022", "arm,primecell";
18362306a36Sopenharmony_ci		reg = <0x00300000 0x1000>;
18462306a36Sopenharmony_ci		interrupts-extended = <&impd1_vic 3>;
18562306a36Sopenharmony_ci		clocks = <&impd1_sspclk>, <&sysclk>;
18662306a36Sopenharmony_ci		clock-names = "sspclk", "apb_pclk";
18762306a36Sopenharmony_ci	};
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ci	impd1_gpio0: gpio@400000 {
19062306a36Sopenharmony_ci		compatible = "arm,pl061", "arm,primecell";
19162306a36Sopenharmony_ci		reg = <0x00400000 0x1000>;
19262306a36Sopenharmony_ci		gpio-controller;
19362306a36Sopenharmony_ci		#gpio-cells = <2>;
19462306a36Sopenharmony_ci		interrupt-controller;
19562306a36Sopenharmony_ci		#interrupt-cells = <2>;
19662306a36Sopenharmony_ci		interrupts-extended = <&impd1_vic 4>;
19762306a36Sopenharmony_ci		clocks = <&sysclk>;
19862306a36Sopenharmony_ci		clock-names = "apb_pclk";
19962306a36Sopenharmony_ci	};
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_ci	impd1_gpio1: gpio@500000 {
20262306a36Sopenharmony_ci		compatible = "arm,pl061", "arm,primecell";
20362306a36Sopenharmony_ci		reg = <0x00500000 0x1000>;
20462306a36Sopenharmony_ci		gpio-controller;
20562306a36Sopenharmony_ci		#gpio-cells = <2>;
20662306a36Sopenharmony_ci		interrupt-controller;
20762306a36Sopenharmony_ci		#interrupt-cells = <2>;
20862306a36Sopenharmony_ci		interrupts-extended = <&impd1_vic 5>;
20962306a36Sopenharmony_ci		clocks = <&sysclk>;
21062306a36Sopenharmony_ci		clock-names = "apb_pclk";
21162306a36Sopenharmony_ci	};
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_ci	rtc@600000 {
21462306a36Sopenharmony_ci		compatible = "arm,pl030", "arm,primecell";
21562306a36Sopenharmony_ci		reg = <0x00600000 0x1000>;
21662306a36Sopenharmony_ci		interrupts-extended = <&impd1_vic 6>;
21762306a36Sopenharmony_ci		clocks = <&sysclk>;
21862306a36Sopenharmony_ci		clock-names = "apb_pclk";
21962306a36Sopenharmony_ci	};
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ci	mmc@700000 {
22262306a36Sopenharmony_ci		compatible = "arm,pl181", "arm,primecell";
22362306a36Sopenharmony_ci		reg = <0x00700000 0x1000>;
22462306a36Sopenharmony_ci		interrupts-extended = <&impd1_vic 7>,
22562306a36Sopenharmony_ci				    <&impd1_vic 8>;
22662306a36Sopenharmony_ci		clocks = <&sysclk>, <&sysclk>;
22762306a36Sopenharmony_ci		clock-names = "mclk", "apb_pclk";
22862306a36Sopenharmony_ci		bus-width = <1>;
22962306a36Sopenharmony_ci		max-frequency = <515633>;
23062306a36Sopenharmony_ci		vmmc-supply = <&impd1_3v3>;
23162306a36Sopenharmony_ci		wp-gpios = <&impd1_gpio0 3 GPIO_ACTIVE_HIGH>;
23262306a36Sopenharmony_ci		cd-gpios = <&impd1_gpio0 4 GPIO_ACTIVE_LOW>;
23362306a36Sopenharmony_ci	};
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_ci	aaci@800000 {
23662306a36Sopenharmony_ci		compatible = "arm,pl041", "arm,primecell";
23762306a36Sopenharmony_ci		reg = <0x00800000 0x1000>;
23862306a36Sopenharmony_ci		interrupts-extended = <&impd1_vic 9>;
23962306a36Sopenharmony_ci		clocks = <&sysclk>;
24062306a36Sopenharmony_ci		clock-names = "apb_pclk";
24162306a36Sopenharmony_ci	};
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_ci	display@1000000 {
24462306a36Sopenharmony_ci		compatible = "arm,pl110", "arm,primecell";
24562306a36Sopenharmony_ci		reg = <0x01000000 0x1000>;
24662306a36Sopenharmony_ci		interrupts-extended = <&impd1_vic 11>;
24762306a36Sopenharmony_ci		clocks = <&vco1>, <&sysclk>;
24862306a36Sopenharmony_ci		clock-names = "clcdclk", "apb_pclk";
24962306a36Sopenharmony_ci		/* 640x480 16bpp @ 25.175MHz is 36827428 bytes/s */
25062306a36Sopenharmony_ci		max-memory-bandwidth = <40000000>;
25162306a36Sopenharmony_ci		memory-region = <&impd1_ram>;
25262306a36Sopenharmony_ci		dma-ranges;
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ci		port@0 {
25562306a36Sopenharmony_ci			#address-cells = <1>;
25662306a36Sopenharmony_ci			#size-cells = <0>;
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ci			clcd_pads_vga_dac: endpoint@0 {
25962306a36Sopenharmony_ci				reg = <0>;
26062306a36Sopenharmony_ci				remote-endpoint = <&vga_bridge_in>;
26162306a36Sopenharmony_ci				arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
26262306a36Sopenharmony_ci			};
26362306a36Sopenharmony_ci		};
26462306a36Sopenharmony_ci	};
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_ci	impd1_vic: interrupt-controller@3000000 {
26762306a36Sopenharmony_ci		compatible = "arm,pl192-vic";
26862306a36Sopenharmony_ci		interrupt-controller;
26962306a36Sopenharmony_ci		#interrupt-cells = <1>;
27062306a36Sopenharmony_ci		reg = <0x03000000 0x1000>;
27162306a36Sopenharmony_ci		/* Valid interrupts, 0-9 and 11 */
27262306a36Sopenharmony_ci		valid-mask = <0x00000bff>;
27362306a36Sopenharmony_ci		/* LM site 0 has IRQ 9 on the PIC */
27462306a36Sopenharmony_ci		interrupts-extended = <&pic 9>;
27562306a36Sopenharmony_ci	};
27662306a36Sopenharmony_ci};
277