// SPDX-License-Identifier: GPL-2.0
/*
 * at91-kizbox3-hs.dts - Device Tree file for Overkiz KIZBOX3-HS board
 *
 * 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 "at91-kizbox3_common.dtsi"

/ {
	model = "Overkiz KIZBOX3-HS";
	compatible = "overkiz,kizbox3-hs", "atmel,sama5d2", "atmel,sama5";

	led-controller-1 {
		status = "okay";

		led-1 {
			status = "okay";
		};

		led-2 {
			status = "okay";
		};

		led-3 {
			status = "okay";
		};

		led-4 {
			status = "okay";
		};
	};

	led-controller-2  {
		compatible = "gpio-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_led_red
			     &pinctrl_led_white>;
		status = "okay";

		led-5 {
			label = "pio:red:user";
			gpios = <&pioA PIN_PB1 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};

		led-6 {
			label = "pio:white:user";
			gpios = <&pioA PIN_PB8 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};
	};

	gpio-keys {
		compatible = "gpio-keys";
		pinctrl-names = "default" , "default", "default",
				"default", "default" ;
		pinctrl-0 = <&pinctrl_key_gpio_default>;
		pinctrl-1 = <&pinctrl_pio_rf &pinctrl_pio_wifi>;
		pinctrl-2 = <&pinctrl_pio_io_boot
			     &pinctrl_pio_io_reset
			     &pinctrl_pio_io_test_radio>;
		pinctrl-3 = <&pinctrl_pio_zbe_test_radio
			     &pinctrl_pio_zbe_rst>;
		pinctrl-4 = <&pinctrl_pio_input>;

		switch-1 {
			label = "SW1";
			gpios = <&pioA PIN_PA29 GPIO_ACTIVE_LOW>;
			linux,code = <0x101>;
			wakeup-source;
		};

		switch-2 {
			label = "SW2";
			gpios = <&pioA PIN_PA18 GPIO_ACTIVE_LOW>;
			linux,code = <0x102>;
			wakeup-source;
		};

		switch-3 {
			label = "SW3";
			gpios = <&pioA PIN_PA22 GPIO_ACTIVE_LOW>;
			linux,code = <0x103>;
			wakeup-source;
		};

		switch-7 {
			label = "SW7";
			gpios = <&pioA PIN_PA26 GPIO_ACTIVE_LOW>;
			linux,code = <0x107>;
			wakeup-source;
		};

		switch-8 {
			label = "SW8";
			gpios = <&pioA PIN_PA24 GPIO_ACTIVE_LOW>;
			linux,code = <0x108>;
			wakeup-source;
		};
	};

	gpios {
		compatible = "gpio";
		status = "okay";

		rf_on {
			label = "rf on";
			gpio = <&pioA PIN_PC19 GPIO_ACTIVE_HIGH>;
			output;
			init-low;
		};

		wifi_on {
			label = "wifi on";
			gpio = <&pioA PIN_PC20 GPIO_ACTIVE_HIGH>;
			output;
			init-low;
		};

		zbe_test_radio {
			label = "zbe test radio";
			gpio = <&pioA PIN_PB21 GPIO_ACTIVE_HIGH>;
			output;
			init-low;
		};

		zbe_rst {
			label = "zbe rst";
			gpio = <&pioA PIN_PB25 GPIO_ACTIVE_HIGH>;
			output;
			init-low;
		};

		io_reset {
			label = "io reset";
			gpio = <&pioA PIN_PB30 GPIO_ACTIVE_HIGH>;
			output;
			init-low;
		};

		io_test_radio {
			label = "io test radio";
			gpio = <&pioA PIN_PC9 GPIO_ACTIVE_HIGH>;
			output;
			init-low;
		};

		io_boot_0 {
			label = "io boot 0";
			gpio = <&pioA PIN_PC11 GPIO_ACTIVE_HIGH>;
			output;
			init-low;
		};

		io_boot_1 {
			label = "io boot 1";
			gpio = <&pioA PIN_PC17 GPIO_ACTIVE_HIGH>;
			output;
			init-low;
		};

		verbose_bootloader {
			label = "verbose bootloader";
			gpio = <&pioA PIN_PB11 GPIO_ACTIVE_HIGH>;
			input;
		};

		 nail_bed_detection  {
			label = "nail bed detection";
			gpio = <&pioA PIN_PB12 GPIO_ACTIVE_HIGH>;
			input;
		};

		 id_usba {
			label = "id usba";
			gpio = <&pioA PIN_PC0 GPIO_ACTIVE_LOW>;
			input;
		};
	};
};

&pioA {
	pinctrl_key_gpio_default: key_gpio_default {
		pinmux = <PIN_PA22__GPIO>,
		<PIN_PA24__GPIO>,
		<PIN_PA26__GPIO>,
		<PIN_PA29__GPIO>,
		<PIN_PA18__GPIO>;
		bias-disable;
		};

	pinctrl_gpio {
		pinctrl_pio_rf: gpio_rf {
			pinmux = <PIN_PC19__GPIO>;
			bias-disable;
		};
		pinctrl_pio_wifi: gpio_wifi {
			pinmux = <PIN_PC20__GPIO>;
			bias-disable;
		};
		pinctrl_pio_io_boot: gpio_io_boot {
			pinmux =
			<PIN_PC11__GPIO>,
			<PIN_PC17__GPIO>;
			bias-disable;
		};
		pinctrl_pio_io_test_radio: gpio_io_test_radio {
			pinmux = <PIN_PC9__GPIO>;
			bias-disable;
		};
		pinctrl_pio_zbe_test_radio: gpio_zbe_test_radio {
			pinmux = <PIN_PB21__GPIO>;
			bias-disable;
		};
		pinctrl_pio_zbe_rst: gpio_zbe_rst {
			pinmux = <PIN_PB25__GPIO>;
			bias-disable;
		};
		/* stm32 reset must be open drain (internal pull up) */
		pinctrl_pio_io_reset: gpio_io_reset {
			pinmux = <PIN_PB30__GPIO>;
			bias-disable;
			drive-open-drain = <1>;
			output-low;
		};
		pinctrl_pio_input: gpio_input {
			pinmux =
			<PIN_PB11__GPIO>,
			<PIN_PB12__GPIO>,
			<PIN_PC0__GPIO>;
			bias-disable;
		};
	};

	pinctrl_leds {
		pinctrl_led_red: led_red {
			pinmux = <PIN_PB1__GPIO>;
			bias-disable;
		};
		pinctrl_led_white: led_white {
			pinmux = <PIN_PB8__GPIO>;
			bias-disable;
		};
	};
};

&adc {
	status = "okay";
};

&uart0 {
	status = "okay";
};

&uart1 {
	status = "okay";
};

&uart2 {
	status = "okay";
};

&uart3 {
	status = "okay";
};

&uart4 {
	status = "okay";
};

&flx0 {
	status = "okay";

	uart5: serial@200  {
			status = "okay";
	};
};

&flx3 {
	status = "okay";
	uart8: serial@200 {
		status = "okay";
	};
};

&flx4 {
	status = "okay";

	i2c6: i2c@600 {
		status = "okay";
	};
};

&usb0 {
	status = "okay";
};

&usb1 {
	status = "okay";
};

&usb2 {
	status = "okay";
};
