// SPDX-License-Identifier: GPL-2.0+
/*
 * at91-nattis-2-natte-2.dts - Device Tree file for the Linea/Nattis board
 *
 * Copyright (C) 2017 Axentia Technologies AB
 *
 * Author: Peter Rosin <peda@axentia.se>
 */
/dts-v1/;
#include "at91-linea.dtsi"
#include "sama5d3_lcd.dtsi"
#include "at91-natte.dtsi"

/ {
	model = "Axentia Linea-Nattis v2 Natte v2";
	compatible = "axentia,nattis-2", "axentia,natte-2", "axentia,linea",
		     "atmel,sama5d31", "atmel,sama5d3", "atmel,sama5";

	gpio-keys {
		compatible = "gpio-keys";

		wakeup {
			label = "Wakeup";
			linux,code = <10>;
			wakeup-source;
			gpios = <&pioB 27 GPIO_ACTIVE_LOW>;
		};
	};

	panel_reg: panel-regulator {
		compatible = "regulator-fixed";
		regulator-name = "panel-VCC";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
	};

	bl_reg: backlight-regulator {
		compatible = "regulator-fixed";
		regulator-name = "panel-VDD";
		regulator-min-microvolt = <12000000>;
		regulator-max-microvolt = <12000000>;
	};

	panel_bl: backlight {
		compatible = "pwm-backlight";
		pwms = <&hlcdc_pwm 0 100000 0>;

		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 = <40>;

		power-supply = <&bl_reg>;
		enable-gpios = <&pioA 20 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_blon>;
	};

	panel: panel {
		compatible = "sharp,lq150x1lg11", "panel-lvds";

		backlight = <&panel_bl>;
		power-supply = <&panel_reg>;

		width-mm = <304>;
		height-mm = <228>;

		data-mapping = "jeida-18";

		panel-timing {
			// 1024x768 @ 60Hz (typical)
			clock-frequency = <50000000 65000000 80000000>;
			hactive = <1024>;
			vactive = <768>;
			hfront-porch = <48 88 88>;
			hback-porch = <96 168 168>;
			hsync-len = <32 64 64>;
			vsync-len = <3 13 74>;
			vfront-porch = <3 13 74>;
			vback-porch = <3 12 74>;
		};

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

	lvds-encoder {
		compatible = "ti,ds90c185", "lvds-encoder";

		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_lvds_prlud0 &pinctrl_lvds_hipow0>;

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@0 {
				reg = <0>;

				lvds_encoder_input: endpoint {
					remote-endpoint = <&hlcdc_output>;
				};
			};

			port@1 {
				reg = <1>;

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

	sound {
		compatible = "simple-audio-card";

		simple-audio-card,name = "nattis-tfa9879";
		simple-audio-card,format = "i2s";
		simple-audio-card,bitclock-master = <&cpu_dai>;
		simple-audio-card,frame-master = <&cpu_dai>;
		simple-audio-card,widgets = "Line", "Line Out Jack";
		simple-audio-card,routing = "Line Out Jack", "LINEOUT";

		cpu_dai: simple-audio-card,cpu {
			sound-dai = <&ssc0>;
		};

		simple-audio-card,codec {
			sound-dai = <&amp>;
		};
	};
};

&pinctrl {
	nattis {
		pinctrl_usba_vbus: usba_vbus {
			atmel,pins = <AT91_PIOD 28 AT91_PERIPH_GPIO
				      AT91_PINCTRL_DEGLITCH>;
		};

		pinctrl_mmc0_cd: mmc0_cd {
			atmel,pins = <AT91_PIOD  5 AT91_PERIPH_GPIO
				      AT91_PINCTRL_PULL_UP_DEGLITCH>;
		};

		pinctrl_lvds_prlud0: lvds_prlud0 {
			atmel,pins = <AT91_PIOA 21 AT91_PERIPH_GPIO
				      (AT91_PINCTRL_OUTPUT |
				       AT91_PINCTRL_OUTPUT_VAL(0))>;
		};

		pinctrl_lvds_hipow0: lvds_hipow0 {
			atmel,pins = <AT91_PIOA 23 AT91_PERIPH_GPIO
				      (AT91_PINCTRL_OUTPUT |
				       AT91_PINCTRL_OUTPUT_VAL(0))>;
		};

		pinctrl_blon: blon {
			atmel,pins = <AT91_PIOA 20 AT91_PERIPH_GPIO
				      (AT91_PINCTRL_OUTPUT |
				       AT91_PINCTRL_OUTPUT_VAL(0))>;
		};
	};
};

&watchdog {
	status = "okay";
};

&i2c0 {
	status = "okay";

	clock-frequency = <100000>;

	temp@18 {
		compatible = "nxp,se97b", "jedec,jc-42.4-temp";
		reg = <0x18>;
		smbus-timeout-disable;
	};

	eeprom@50 {
		compatible = "nxp,se97b", "atmel,24c02";
		reg = <0x50>;
		pagesize = <16>;
	};

	amp: amplifier@6c {
		 compatible = "nxp,tfa9879";
		 reg = <0x6c>;
		 #sound-dai-cells = <0>;
	};
};

&ssc0 {
	status = "okay";

	atmel,clk-from-rk-pin;
	#sound-dai-cells = <0>;
};

&hlcdc {
	status = "okay";

	hlcdc-display-controller {
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_lcd_base &pinctrl_lcd_rgb565>;

		port@0 {
			hlcdc_output: endpoint {
				remote-endpoint = <&lvds_encoder_input>;
				bus-width = <16>;
			};
		};
	};
};

&mmc0 {
	status = "okay";

	pinctrl-0 = <&pinctrl_mmc0_clk_cmd_dat0
		     &pinctrl_mmc0_dat1_3
		     &pinctrl_mmc0_cd>;

	slot@0 {
		reg = <0>;
		bus-width = <4>;
		cd-gpios = <&pioD 5 GPIO_ACTIVE_HIGH>;
		cd-inverted;
	};
};

&usart0 {
	status = "okay";

	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usart0>;
	atmel,use-dma-rx;
};

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

		at91bootstrap@0 {
			label = "at91bootstrap";
			reg = <0x0 0x40000>;
		};

		barebox@40000 {
			label = "barebox";
			reg = <0x40000 0x60000>;
		};

		bareboxenv@c0000 {
			label = "bareboxenv";
			reg = <0xc0000 0x40000>;
		};

		bareboxenv2@100000 {
			label = "bareboxenv2";
			reg = <0x100000 0x40000>;
		};

		oftree@180000 {
			label = "oftree";
			reg = <0x180000 0x20000>;
		};

		kernel@200000 {
			label = "kernel";
			reg = <0x200000 0x500000>;
		};

		rootfs@800000 {
			label = "rootfs";
			reg = <0x800000 0x1f800000>;
		};
	};
};

&dbgu {
	status = "okay";

	atmel,use-dma-rx;
};

&usb0 {
	status = "okay";

	atmel,vbus-gpio = <&pioD 28 GPIO_ACTIVE_HIGH>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usba_vbus>;
};
