// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * PHYTEC phyCORE-LPC3250 board
 *
 * Copyright (C) 2015-2019 Vladimir Zapolskiy <vz@mleia.com>
 * Copyright 2012 Roland Stigge <stigge@antcom.de>
 */

/dts-v1/;
#include "lpc32xx.dtsi"

/ {
	model = "PHYTEC phyCORE-LPC3250 board based on NXP LPC3250";
	compatible = "phytec,phy3250", "nxp,lpc3250";

	memory@80000000 {
		device_type = "memory";
		reg = <0x80000000 0x4000000>;
	};

	leds {
		compatible = "gpio-leds";

		led0 { /* red */
			gpios = <&gpio 5 1 0>; /* GPO_P3 1, GPIO 80, active high */
			default-state = "off";
		};

		led1 { /* green */
			gpios = <&gpio 5 14 0>; /* GPO_P3 14, GPIO 93, active high */
			linux,default-trigger = "heartbeat";
		};
	};

	panel: panel {
		compatible = "sharp,lq035q7db03";
		power-supply = <&reg_lcd>;

		port {
			panel_input: endpoint {
				remote-endpoint = <&cldc_output>;
			};
		};
	};

	reg_backlight: regulator-backlight {
		compatible = "regulator-fixed";
		regulator-name = "backlight";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		gpio = <&gpio 5 4 0>;
		enable-active-high;
		regulator-boot-on;
	};

	reg_lcd: regulator-lcd {
		compatible = "regulator-fixed";
		regulator-name = "lcd";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		gpio = <&gpio 5 0 0>;
		enable-active-high;
		regulator-boot-on;
	};

	reg_sd: regulator-sd {
		compatible = "regulator-fixed";
		regulator-name = "sd";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&gpio 5 5 0>;
		enable-active-high;
		regulator-boot-on;
	};
};

&clcd {
	max-memory-bandwidth = <18710000>;
	status = "okay";

	port {
		cldc_output: endpoint {
			remote-endpoint = <&panel_input>;
			arm,pl11x,tft-r0g0b0-pads = <0 8 16>;
		};
	};
};

&i2c1 {
	clock-frequency = <100000>;

	uda1380: uda1380@18 {
		compatible = "nxp,uda1380";
		reg = <0x18>;
		power-gpio = <&gpio 3 10 0>;
		reset-gpio = <&gpio 3 2 0>;
		dac-clk = "wspll";
	};

	pcf8563: rtc@51 {
		compatible = "nxp,pcf8563";
		reg = <0x51>;
	};
};

&i2c2 {
	clock-frequency = <100000>;
};

&i2cusb {
	clock-frequency = <100000>;

	isp1301: usb-transceiver@2c {
		compatible = "nxp,isp1301";
		reg = <0x2c>;
	};
};

&key {
	keypad,num-rows = <1>;
	keypad,num-columns = <1>;
	nxp,debounce-delay-ms = <3>;
	nxp,scan-delay-ms = <34>;
	linux,keymap = <0x00000002>;
	status = "okay";
};

&mac {
	phy-mode = "rmii";
	use-iram;
	status = "okay";
};

/* Here, choose exactly one from: ohci, usbd */
&ohci /* &usbd */ {
	transceiver = <&isp1301>;
	status = "okay";
};

&sd {
	wp-gpios = <&gpio 3 0 0>;
	cd-gpios = <&gpio 3 1 0>;
	cd-inverted;
	bus-width = <4>;
	vmmc-supply = <&reg_sd>;
	status = "okay";
};

/* 64MB Flash via SLC NAND controller */
&slc {
	status = "okay";

	nxp,wdr-clks = <14>;
	nxp,wwidth = <40000000>;
	nxp,whold = <100000000>;
	nxp,wsetup = <100000000>;
	nxp,rdr-clks = <14>;
	nxp,rwidth = <40000000>;
	nxp,rhold = <66666666>;
	nxp,rsetup = <100000000>;
	nand-on-flash-bbt;
	gpios = <&gpio 5 19 1>; /* GPO_P3 19, active low */

	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		mtd0@0 {
			label = "phy3250-boot";
			reg = <0x00000000 0x00064000>;
			read-only;
		};

		mtd1@64000 {
			label = "phy3250-uboot";
			reg = <0x00064000 0x00190000>;
			read-only;
		};

		mtd2@1f4000 {
			label = "phy3250-ubt-prms";
			reg = <0x001f4000 0x00010000>;
		};

		mtd3@204000 {
			label = "phy3250-kernel";
			reg = <0x00204000 0x00400000>;
		};

		mtd4@604000 {
			label = "phy3250-rootfs";
			reg = <0x00604000 0x039fc000>;
		};
	};
};

&ssp0 {
	num-cs = <1>;
	cs-gpios = <&gpio 3 5 0>;
	status = "okay";

	eeprom: at25@0 {
		compatible = "atmel,at25";
		reg = <0>;
		spi-max-frequency = <5000000>;

		pl022,interface = <0>;
		pl022,com-mode = <0>;
		pl022,rx-level-trig = <1>;
		pl022,tx-level-trig = <1>;
		pl022,ctrl-len = <11>;
		pl022,wait-state = <0>;
		pl022,duplex = <0>;

		at25,byte-len = <0x8000>;
		at25,addr-mode = <2>;
		at25,page-size = <64>;
	};
};

&tsc {
	status = "okay";
};

&uart2 {
	status = "okay";
};

&uart3 {
	status = "okay";
};

&uart5 {
	status = "okay";
};