/*
 * Copyright (c) 2020 Seagate Technology LLC
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;

#include <nxp/nxp_lpc11u67.dtsi>
#include <zephyr/dt-bindings/led/led.h>
#include <zephyr/dt-bindings/input/input-event-codes.h>

#include "faze-pinctrl.dtsi"

/ {
	model = "Seagate FireCuda Gaming SSD (FaZe)";
	compatible = "faze", "seagate,faze";

	chosen {
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;
	};

	/* These aliases are provided for compatibility with samples. */
	aliases {
		led0 = &sata_led;
		sw0 = &usb_sleep_button;
		eeprom-0 = &eeprom0;
		led-controller-0 = &led_controller_0;
	};

	gpio_keys {
		compatible = "gpio-keys";

		/* Handle the USB_SLEEP GPIO as a button. */
		usb_sleep_button: button_0 {
			gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>;
			label = "USB sleep button";
			zephyr,code = <INPUT_KEY_SLEEP>;
		};
	};

	leds {
		compatible = "gpio-leds";

		sata_led: led_0 {
			gpios = <&gpio1 23 GPIO_ACTIVE_LOW>;
			label = "SSD activity LED";
		};
	};
};

&uart0 {
	pinctrl-0 = <&uart0_default>;
	pinctrl-names = "default";
	current-speed = <115200>;
	status = "okay";
};

&i2c0 {
	pinctrl-0 = <&i2c0_default>;
	pinctrl-1 = <&i2c0_fast>;
	pinctrl-names = "default", "fast-plus";
	status = "okay";

	asm2364: asm2364@30 {
		compatible = "asmedia,asm2364";
		int-gpios = <&gpio0 2 0>;
		reg = <0x30>;
	};
};

&i2c1 {
	pinctrl-0 = <&i2c1_default>;
	pinctrl-1 = <&i2c1_fast>;
	pinctrl-names = "default", "fast-plus";
	status = "okay";

	/* TI LP5030 LED controller connected to I2C1. */
	led_controller_0: lp5030@30 {
		compatible = "ti,lp5030";
		reg = <0x30>;

		led0: led_0 {
			label = "LED LP5030 0";
			index = <0>;
			color-mapping =
				<LED_COLOR_ID_RED>,
				<LED_COLOR_ID_GREEN>,
				<LED_COLOR_ID_BLUE>;
		};
		led1: led_1 {
			label = "LED LP5030 1";
			index = <1>;
			color-mapping =
				<LED_COLOR_ID_RED>,
				<LED_COLOR_ID_GREEN>,
				<LED_COLOR_ID_BLUE>;
		};
		led2: led_2 {
			label = "LED LP5030 2";
			index = <2>;
			color-mapping =
				<LED_COLOR_ID_RED>,
				<LED_COLOR_ID_GREEN>,
				<LED_COLOR_ID_BLUE>;
		};
		led3: led_3 {
			label = "LED LP5030 3";
			index = <3>;
			color-mapping =
				<LED_COLOR_ID_RED>,
				<LED_COLOR_ID_GREEN>,
				<LED_COLOR_ID_BLUE>;
		};
		led4: led_4 {
			label = "LED LP5030 4";
			index = <4>;
			color-mapping =
				<LED_COLOR_ID_RED>,
				<LED_COLOR_ID_GREEN>,
				<LED_COLOR_ID_BLUE>;
		};
		led5: led_5 {
			label = "LED LP5030 5";
			index = <5>;
			color-mapping =
				<LED_COLOR_ID_RED>,
				<LED_COLOR_ID_GREEN>,
				<LED_COLOR_ID_BLUE>;
		};
	};
};

&syscon {
	pinctrl-0 = <&syscon_default>;
	pinctrl-names = "default";
};

&cpu0 {
	clock-frequency = <48000000>;
};

&gpio0 {
	status = "okay";
};

&gpio1 {
	status = "okay";
};

&gpio2 {
	status = "okay";
};
