// SPDX-License-Identifier: GPL-2.0
/*
 * at91-kizbox3.dts - Device Tree Include file for Overkiz Kizbox 3
 * family SoC boards
 *
 * Copyright (C) 2018 Overkiz SAS
 *
 * Authors: Dorian Rocipon <d.rocipon@overkiz.com>
 *          Kevin Carli <k.carli@overkiz.com>
 *          Mickael Gardet <m.gardet@overkiz.com>
 */
/dts-v1/;
#include "sama5d2.dtsi"
#include "sama5d2-pinfunc.h"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/mfd/atmel-flexcom.h>
#include <dt-bindings/pinctrl/at91.h>
#include <dt-bindings/pwm/pwm.h>

/ {
	model = "Overkiz Kizbox3";
	compatible = "overkiz,kizbox3", "atmel,sama5d2", "atmel,sama5";

	aliases {
		serial0 = &uart0;
		serial1 = &uart1;
		serial2 = &uart2;
		serial3 = &uart3;
		serial4 = &uart4;
		serial5 = &uart5;
		serial6 = &uart8;
	};

	chosen {
		bootargs = "ubi.mtd=ubi";
		stdout-path = "serial1:115200n8";
	};

	clocks {
		slow_xtal {
			clock-frequency = <32768>;
		};

		main_xtal {
			clock-frequency = <12000000>;
		};
	};

	vdd_adc_vddana: supply_3v3_ana {
		compatible = "regulator-fixed";
		regulator-name = "adc-vddana";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
	};

	vdd_adc_vref: supply_3v3_ref {
		compatible = "regulator-fixed";
		regulator-name = "adc-vref";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
	};

	led-controller-1 {
		compatible = "pwm-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_pwm0_pwm_h0
			     &pinctrl_pwm0_pwm_h1
			     &pinctrl_pwm0_pwm_h2
			     &pinctrl_pwm0_pwm_h3>;
		status = "disabled";

		led-1 {
			label = "pwm:red:user";
			pwms = <&pwm0 0 10000000 0>;
			max-brightness = <255>;
			linux,default-trigger = "default-on";
			status = "disabled";
		};

		led-2 {
			label = "pwm:green:user";
			pwms = <&pwm0 1 10000000 0>;
			max-brightness = <255>;
			linux,default-trigger = "default-on";
			status = "disabled";
		};

		led-3 {
			label = "pwm:blue:user";
			pwms = <&pwm0 2 10000000 0>;
			max-brightness = <255>;
			status = "disabled";
		};

		led-4 {
			label = "pwm:white:user";
			pwms = <&pwm0 3 10000000 0>;
			max-brightness = <255>;
			status = "disabled";
		};
	};
};

&ebi {
	status = "okay";
};

&nand_controller {
	status = "okay";

	nand@3 {
		pinctrl-0 = <&pinctrl_ebi_nand_addr>;
		pinctrl-names = "default";
		reg = <0x3 0x0 0x800000>;

		atmel,rb = <0>;
		nand-bus-width = <8>;
		nand-ecc-mode = "hw";
		nand-ecc-strength = <4>;
		nand-ecc-step-size = <512>;
		nand-on-flash-bbt;
		label = "atmel_nand";

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

			bootstrap@0 {
				label = "bootstrap";
				reg = <0x0 0x20000>;
			};

			u-boot@20000 {
				label = "u-boot";
				reg = <0x20000 0x140000>;
			};

			u-boot-factory@160000 {
				label = "u-boot-factory";
				reg = <0x160000 0x140000>;
			};

			ubi@2A0000 {
				label = "ubi";
				reg = <0x2A0000 0x7D60000>;
			};
		};

	};
};

&rtc {
	status = "okay";
};

&pioA {
	pinctrl_ebi_nand_addr: ebi-addr-1 {
		pinmux = <PIN_PA0__D0>,
			<PIN_PA1__D1>,
			<PIN_PA2__D2>,
			<PIN_PA3__D3>,
			<PIN_PA4__D4>,
			<PIN_PA5__D5>,
			<PIN_PA6__D6>,
			<PIN_PA7__D7>,
			<PIN_PA8__NWE_NANDWE>,
			<PIN_PA9__NCS3>,
			<PIN_PA10__A21_NANDALE>,
			<PIN_PA11__A22_NANDCLE>,
			<PIN_PA21__NANDRDY>;
		bias-disable;
	};

	pinctrl_usart {
		pinctrl_usart_0: usart0-0 {
			pinmux = < PIN_PB26__URXD0>, <PIN_PB27__UTXD0>;
			bias-disable;
		};
		pinctrl_usart_1: usart1-0 {
			pinmux = < PIN_PD2__URXD1>, <PIN_PD3__UTXD1>;
			bias-disable;
		};
		pinctrl_usart_2: usart2-0 {
			pinmux = < PIN_PD4__URXD2>, <PIN_PD5__UTXD2>;
			bias-disable;
		};
		pinctrl_usart_3: usart3-0 {
			pinmux = < PIN_PC12__URXD3>, <PIN_PC13__UTXD3>;
			bias-disable;
		};
		pinctrl_usart_4: usart4-0 {
			pinmux = < PIN_PB3__URXD4>, <PIN_PB4__UTXD4>;
			bias-disable;
		};
		pinctrl_flx0_default: flx0_usart_default {
			pinmux = <PIN_PB28__FLEXCOM0_IO0>, //TX
			<PIN_PB29__FLEXCOM0_IO1>; //RX
			bias-disable;
		};
		pinctrl_flx3_default: flx3_usart_default {
			pinmux = <PIN_PB22__FLEXCOM3_IO1>, //RX
			<PIN_PB23__FLEXCOM3_IO0>; //TX
			bias-disable;
		};
	};

	pinctrl_flx4_default: flx4_i2c6_default {
		pinmux = <PIN_PD12__FLEXCOM4_IO0>, //DATA
		<PIN_PD13__FLEXCOM4_IO1>; //CLK
		bias-disable;
		drive-open-drain = <1>;
	};

	pinctrl_pwm0 {
		pinctrl_pwm0_pwm_h0: pwm0_pwm_h0 {
			pinmux = <PIN_PA30__PWMH0>;
			bias-disable;
		};
		pinctrl_pwm0_pwm_h1: pwm0_pwmh1 {
			pinmux = <PIN_PB0__PWMH1>;
			bias-disable;
		};
		pinctrl_pwm0_pwm_h2: pwm0_pwm_h2 {
			pinmux = <PIN_PB5__PWMH2>;
			bias-disable;
		};
		pinctrl_pwm0_pwm_h3: pwm0_pwm_h3 {
			pinmux = <PIN_PB7__PWMH3>;
			bias-disable;
		};
	};

	pinctrl_adc {
		pinctrl_adc2: adc2 {
			pinmux = <PIN_PD21__GPIO>;
			bias-disable;
		};
		pinctrl_adc3: adc3 {
			pinmux = <PIN_PD22__GPIO>;
			bias-disable;
		};
		pinctrl_adc4: adc4 {
			pinmux = <PIN_PD23__GPIO>;
			bias-disable;
		};
		pinctrl_adc5: adc5 {
			pinmux = <PIN_PD24__GPIO>;
			bias-disable;
		};
	};
};

&uart0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usart_0>;
	atmel,use-dma-rx;
	atmel,use-dma-tx;
	status = "disabled";
};

/* debug uart */
&uart1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usart_1>;
	atmel,use-dma-rx;
	atmel,use-dma-tx;
	status = "disabled";
};

&uart2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usart_2>;
	atmel,use-dma-rx;
	atmel,use-dma-tx;
	status = "disabled";
};

&uart3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usart_3>;
	atmel,use-dma-rx;
	atmel,use-dma-tx;
	status = "disabled";
};

&uart4 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usart_4>;
	atmel,use-dma-rx;
	atmel,use-dma-tx;
	status = "disabled";
};

&flx0 {
	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_USART>;
	status = "disabled";

	uart5: serial@200  {
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_flx0_default>;
		atmel,use-dma-rx;
		atmel,use-dma-tx;
		status = "disabled";
	};
};

&flx3 {
	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_USART>;
	status = "disabled";

	uart8: serial@200 {
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_flx3_default>;
		atmel,use-dma-rx;
		atmel,use-dma-tx;
		status = "disabled";
	};
};

&flx4 {
	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_TWI>;
	status = "disabled";

	i2c6: i2c@600 {
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_flx4_default>;
		status = "disabled";
	};
};

&pwm0 {
	status = "okay";
};

&shutdown_controller {
	debounce-delay-us = <976>;
	atmel,wakeup-rtc-timer;

	input@0 {
		reg = <0>;
	};
};

&watchdog {
	status = "okay";
};

&adc {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_adc2
		     &pinctrl_adc3
		     &pinctrl_adc4
		     &pinctrl_adc5>;

	vddana-supply = <&vdd_adc_vddana>;
	vref-supply = <&vdd_adc_vref>;
	status = "disabled";
};

&securam {
	export;

	/* export overkiz u-boot mode/version and factory */
	uboot@1400 {
		reg = <0x1400 0x20>;
		export;
	};
};
