/*
 * Copyright (c) 2021 Yonatan Schachter
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <arm/armv6-m.dtsi>
#include <zephyr/dt-bindings/adc/adc.h>
#include <zephyr/dt-bindings/gpio/gpio.h>
#include <zephyr/dt-bindings/i2c/i2c.h>
#include <zephyr/dt-bindings/regulator/rpi_pico.h>
#include <mem.h>

#include "rpi_pico_common.dtsi"

/ {
	aliases {
		die-temp0 = &die_temp;
	};

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

		cpu0: cpu@0 {
			compatible = "arm,cortex-m0+";
			reg = <0>;
		};

		cpu1: cpu@1 {
			compatible = "arm,cortex-m0+";
			reg = <1>;
		};
	};

	soc {
		sram0: memory@20000000 {
			compatible = "mmio-sram";
			reg = <0x20000000 DT_SIZE_K(264)>;
		};

		ssi: flash-controller@18000000 {
			compatible = "raspberrypi,pico-flash-controller";
			reg = <0x18000000 0xfc>;

			#address-cells = <1>;
			#size-cells = <1>;

			flash0: flash@10000000 {
				compatible = "soc-nv-flash";
				write-block-size = <1>;
				erase-block-size = <DT_SIZE_K(4)>;
			};
		};

		peripheral_clk: peripheral-clk {
			compatible = "fixed-clock";
			clock-frequency = <125000000>;
			#clock-cells = <0>;
		};

		system_clk: system-clk {
			compatible = "fixed-clock";
			clock-frequency = <125000000>;
			#clock-cells = <0>;
		};

		reset: reset-controller@4000c000 {
			compatible = "raspberrypi,pico-reset";
			reg = <0x4000c000 DT_SIZE_K(4)>;
			reg-width = <4>;
			active-low = <0>;
			#reset-cells = <1>;
		};

		gpio0: gpio@40014000 {
			compatible = "raspberrypi,pico-gpio";
			reg = <0x40014000 DT_SIZE_K(4)>;
			interrupts = <13 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
			gpio-controller;
			#gpio-cells = <2>;
			status = "disabled";
			ngpios = <30>;
		};

		uart0: uart@40034000 {
			compatible = "raspberrypi,pico-uart";
			reg = <0x40034000 DT_SIZE_K(4)>;
			clocks = <&peripheral_clk>;
			resets = <&reset RPI_PICO_RESETS_RESET_UART0>;
			interrupts = <20 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
			interrupt-names = "uart0";
			status = "disabled";
		};

		uart1: uart@40038000 {
			compatible = "raspberrypi,pico-uart";
			reg = <0x40038000 DT_SIZE_K(4)>;
			clocks = <&peripheral_clk>;
			resets = <&reset RPI_PICO_RESETS_RESET_UART1>;
			interrupts = <21 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
			interrupt-names = "uart1";
			status = "disabled";
		};

		spi0: spi@4003c000 {
			compatible = "raspberrypi,pico-spi", "arm,pl022";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x4003c000 DT_SIZE_K(4)>;
			clocks = <&peripheral_clk>;
			resets = <&reset RPI_PICO_RESETS_RESET_SPI0>;
			interrupts = <18 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
			interrupt-names = "spi0";
			status = "disabled";
		};

		spi1: spi@40040000 {
			compatible = "raspberrypi,pico-spi", "arm,pl022";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x40040000 DT_SIZE_K(4)>;
			resets = <&reset RPI_PICO_RESETS_RESET_SPI1>;
			clocks = <&peripheral_clk>;
			interrupts = <19 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
			interrupt-names = "spi1";
			status = "disabled";
		};

		adc: adc@4004c000 {
			compatible = "raspberrypi,pico-adc";
			reg = <0x4004c000 DT_SIZE_K(4)>;
			resets = <&reset RPI_PICO_RESETS_RESET_ADC>;
			interrupts = <22 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
			interrupt-names = "adc0";
			status = "disabled";
			#io-channel-cells = <1>;
		};

		i2c0: i2c@40044000 {
			compatible = "raspberrypi,pico-i2c", "snps,designware-i2c";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x40044000 DT_SIZE_K(4)>;
			resets = <&reset RPI_PICO_RESETS_RESET_I2C0>;
			clocks = <&system_clk>;
			interrupts = <23 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
			interrupt-names = "i2c0";
			status = "disabled";
		};

		i2c1: i2c@40048000 {
			compatible = "raspberrypi,pico-i2c", "snps,designware-i2c";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x40048000 DT_SIZE_K(4)>;
			resets = <&reset RPI_PICO_RESETS_RESET_I2C0>;
			clocks = <&system_clk>;
			interrupts = <24 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
			interrupt-names = "i2c1";
			status = "disabled";
		};

		wdt0: watchdog@40058000 {
			compatible = "raspberrypi,pico-watchdog";
			reg = <0x40058000 DT_SIZE_K(4)>;
			clocks = <&xtal_clk>;
			status = "disabled";
		};

		usbd: usbd@50100000 {
			compatible = "raspberrypi,pico-usbd";
			reg = <0x50100000 0x10000>;
			resets = <&reset RPI_PICO_RESETS_RESET_USBCTRL>;
			interrupts = <5 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
			interrupt-names = "usbctrl";
			num-bidir-endpoints = <16>;
			status = "disabled";
		};

		pwm: pwm@40050000 {
			compatible = "raspberrypi,pico-pwm";
			reg = <0x40050000 DT_SIZE_K(4)>;
			resets = <&reset RPI_PICO_RESETS_RESET_PWM>;
			clocks = <&system_clk>;
			interrupts = <4 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
			interrupt-names = "PWM_IRQ_WRAP";
			status = "disabled";
			#pwm-cells = <3>;
		};

		timer: timer@40054000 {
			compatible = "raspberrypi,pico-timer";
			reg = <0x40054000 DT_SIZE_K(4)>;
			resets = <&reset RPI_PICO_RESETS_RESET_TIMER>;
			clocks = <&xtal_clk>;
			interrupts = <0 RPI_PICO_DEFAULT_IRQ_PRIORITY>,
				     <1 RPI_PICO_DEFAULT_IRQ_PRIORITY>,
				     <2 RPI_PICO_DEFAULT_IRQ_PRIORITY>,
				     <3 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
			interrupt-names = "TIMER_IRQ_0",
					  "TIMER_IRQ_1",
					  "TIMER_IRQ_2",
					  "TIMER_IRQ_3";
			status = "disabled";
		};

		dma: dma@50000000 {
			compatible = "raspberrypi,pico-dma";
			reg = <0x50000000 DT_SIZE_K(64)>;
			resets = <&reset RPI_PICO_RESETS_RESET_DMA>;
			clocks = <&system_clk>;
			interrupts = <11 RPI_PICO_DEFAULT_IRQ_PRIORITY>,
				     <12 RPI_PICO_DEFAULT_IRQ_PRIORITY>;
			interrupt-names = "dma0", "dma1";
			dma-channels = <12>;
			status = "disabled";
			#dma-cells = <3>;
		};

		vreg: vreg@40064000 {
			compatible = "raspberrypi,core-supply-regulator";
			reg = <0x40064000 1>;
			status = "okay";
			raspberrypi,brown-out-detection;
			raspberrypi,brown-out-threshold = <860000>;
		};

		pio0: pio@50200000 {
			compatible = "raspberrypi,pico-pio";
			reg = <0x50200000 DT_SIZE_K(4)>;
			clocks = <&system_clk>;
			resets = <&reset RPI_PICO_RESETS_RESET_PIO0>;
			status = "disabled";
		};

		pio1: pio@50300000 {
			compatible = "raspberrypi,pico-pio";
			reg = <0x50300000 DT_SIZE_K(4)>;
			clocks = <&system_clk>;
			resets = <&reset RPI_PICO_RESETS_RESET_PIO1>;
			status = "disabled";
		};
	};

	pinctrl: pin-controller {
		compatible = "raspberrypi,pico-pinctrl";
	};

	die_temp: dietemp {
		compatible = "raspberrypi,pico-temp";
		io-channels = <&adc 4>;
		status = "disabled";
	};
};

&nvic {
	arm,num-irq-priority-bits = <3>;
};
