// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * pxa2xx.dtsi - Device Tree Include file for Marvell PXA2xx family SoC
 *
 * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
 */

#include "dt-bindings/clock/pxa-clock.h"

#define PMGROUP(pin) #pin
#define PMMUX(func, pin, af)			\
	mux- ## func {				\
		groups = PMGROUP(P ## pin);	\
		function = #af;			\
	}
#define PMMUX_LPM_LOW(func, pin, af)		\
	mux- ## func {				\
		groups = PMGROUP(P ## pin);	\
		function = #af;			\
		low-power-disable;		\
	}
#define PMMUX_LPM_HIGH(func, pin, af)		\
	mux- ## func {				\
		groups = PMGROUP(P ## pin);	\
		function = #af;			\
		low-power-enable;		\
	}

/ {
	#address-cells = <1>;
	#size-cells = <1>;
	model = "Marvell PXA2xx family SoC";
	compatible = "marvell,pxa2xx";
	interrupt-parent = <&pxairq>;

	aliases {
		serial0 = &ffuart;
		serial1 = &btuart;
		serial2 = &stuart;
		serial3 = &hwuart;
		i2c0 = &pwri2c;
		i2c1 = &pxai2c1;
	};

	cpus {
		cpu {
			compatible = "marvell,xscale";
			device_type = "cpu";
		};
	};

	pxabus {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;

		pxairq: interrupt-controller@40d00000 {
			#interrupt-cells = <1>;
			compatible = "marvell,pxa-intc";
			interrupt-controller;
			interrupt-parent;
			marvell,intc-nr-irqs = <32>;
			reg = <0x40d00000 0xd0>;
		};

		gpio: gpio@40e00000 {
			compatible = "mrvl,pxa-gpio";
			#address-cells = <0x1>;
			#size-cells = <0x1>;
			reg = <0x40e00000 0x10000>;
			gpio-controller;
			#gpio-cells = <0x2>;
			interrupts = <8>, <9>, <10>;
			interrupt-names = "gpio0", "gpio1", "gpio_mux";
			interrupt-controller;
			#interrupt-cells = <0x2>;
			ranges;

			gcb0: gpio@40e00000 {
				reg = <0x40e00000 0x4>;
			};

			gcb1: gpio@40e00004 {
				reg = <0x40e00004 0x4>;
			};

			gcb2: gpio@40e00008 {
				reg = <0x40e00008 0x4>;
			};
			gcb3: gpio@40e0000c {
				reg = <0x40e0000c 0x4>;
			};
		};

		ffuart: serial@40100000 {
			compatible = "mrvl,pxa-uart";
			reg = <0x40100000 0x30>;
			interrupts = <22>;
			clocks = <&clks CLK_FFUART>;
			status = "disabled";
		};

		btuart: serial@40200000 {
			compatible = "mrvl,pxa-uart";
			reg = <0x40200000 0x30>;
			interrupts = <21>;
			clocks = <&clks CLK_BTUART>;
			status = "disabled";
		};

		stuart: serial@40700000 {
			compatible = "mrvl,pxa-uart";
			reg = <0x40700000 0x30>;
			interrupts = <20>;
			clocks = <&clks CLK_STUART>;
			status = "disabled";
		};

		hwuart: serial@41600000 {
			compatible = "mrvl,pxa-uart";
			reg = <0x41600000 0x30>;
			interrupts = <7>;
			status = "disabled";
		};

		pxai2c1: i2c@40301680 {
			compatible = "mrvl,pxa-i2c";
			reg = <0x40301680 0x30>;
			interrupts = <18>;
			clocks = <&clks CLK_I2C>;
			#address-cells = <0x1>;
			#size-cells = <0>;
			status = "disabled";
		};

		mmc0: mmc@41100000 {
			compatible = "marvell,pxa-mmc";
			reg = <0x41100000 0x1000>;
			interrupts = <23>;
			clocks = <&clks CLK_MMC>;
			dmas = <&pdma 21 3
				&pdma 22 3>;
			dma-names = "rx", "tx";
			status = "disabled";
		};

		rtc@40900000 {
			compatible = "marvell,pxa-rtc";
			reg = <0x40900000 0x3c>;
			interrupts = <30 31>;
		};

		lcdc: lcd-controller@40500000 {
			compatible = "marvell,pxa2xx-lcdc";
			reg = <0x44000000 0x10000>;
			interrupts = <17>;
			clocks = <&clks CLK_LCD>;
			status = "disabled";
		};
	};
};
