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

#include <freq.h>

#include <rpi_pico/rp2040.dtsi>
#include "rpi_pico-pinctrl.dtsi"
#include <zephyr/dt-bindings/pwm/pwm.h>

#include <zephyr/dt-bindings/i2c/i2c.h>


/ {
	chosen {
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
		zephyr,flash-controller = &ssi;
		zephyr,console = &uart0;
		zephyr,shell-uart = &uart0;
		zephyr,code-partition = &code_partition;
	};

	aliases {
		watchdog0 = &wdt0;
	};

	pico_header: connector {
		compatible = "raspberrypi,pico-header";
		#gpio-cells = <2>;
		gpio-map-mask = <0xffffffff 0xffffffc0>;
		gpio-map-pass-thru = <0 0x3f>;
		gpio-map = <0 0 &gpio0 0 0>,	/* GP0 */
			<1 0 &gpio0 1 0>,	/* GP1 */
			<2 0 &gpio0 2 0>,	/* GP2 */
			<3 0 &gpio0 3 0>,	/* GP3 */
			<4 0 &gpio0 4 0>,	/* GP4 */
			<5 0 &gpio0 5 0>,	/* GP5 */
			<6 0 &gpio0 6 0>,	/* GP6 */
			<7 0 &gpio0 7 0>,	/* GP7 */
			<8 0 &gpio0 8 0>,	/* GP8 */
			<9 0 &gpio0 9 0>,	/* GP9 */
			<10 0 &gpio0 10 0>,	/* GP10 */
			<11 0 &gpio0 11 0>,	/* GP11 */
			<12 0 &gpio0 12 0>,	/* GP12 */
			<13 0 &gpio0 13 0>,	/* GP13 */
			<14 0 &gpio0 14 0>,	/* GP14 */
			<15 0 &gpio0 15 0>,	/* GP15 */
			<16 0 &gpio0 16 0>,	/* GP16 */
			<17 0 &gpio0 17 0>,	/* GP17 */
			<18 0 &gpio0 18 0>,	/* GP18 */
			<19 0 &gpio0 19 0>,	/* GP19 */
			<20 0 &gpio0 20 0>,	/* GP20 */
			<21 0 &gpio0 21 0>,	/* GP21 */
			<22 0 &gpio0 22 0>,	/* GP22 */
			<26 0 &gpio0 26 0>,	/* GP26 */
			<27 0 &gpio0 27 0>,	/* GP27 */
			<28 0 &gpio0 28 0>;	/* GP28 */
	};
};

&flash0 {
	reg = <0x10000000 DT_SIZE_M(2)>;

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

		/* Reserved memory for the second stage bootloader */
		second_stage_bootloader: partition@0 {
			label = "second_stage_bootloader";
			reg = <0x00000000 0x100>;
			read-only;
		};

		/*
		 * Usable flash. Starts at 0x100, after the bootloader. The partition
		 * size is 2MB minus the 0x100 bytes taken by the bootloader.
		 */
		code_partition: partition@100 {
			label = "code-partition";
			reg = <0x100 (DT_SIZE_M(2) - 0x100)>;
			read-only;
		};
	};
};

&clocks {
	pinctrl-0 = <&clocks_default>;
	pinctrl-names = "default";
};

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

&gpio0 {
	status = "okay";
};

&i2c0 {
	clock-frequency = <I2C_BITRATE_STANDARD>;
	status = "okay";
	pinctrl-0 = <&i2c0_default>;
	pinctrl-names = "default";
};

&i2c1 {
	pinctrl-0 = <&i2c1_default>;
	pinctrl-names = "default";
	status = "disabled";
	clock-frequency = <I2C_BITRATE_FAST>;
};

&spi0 {
	clock-frequency = <DT_FREQ_M(8)>;
	status = "okay";
	pinctrl-0 = <&spi0_default>;
	pinctrl-names = "default";
};

&timer {
	status = "okay";
};

&wdt0 {
	status = "okay";
};

&adc {
	status = "okay";
	pinctrl-0 = <&adc_default>;
	pinctrl-names = "default";
};

zephyr_udc0: &usbd {
	status = "okay";
};

&pwm {
	pinctrl-0 = <&pwm_ch4b_default>;
	pinctrl-names = "default";
	divider-int-0 = <255>;
};

&vreg {
	regulator-always-on;
	regulator-allowed-modes = <REGULATOR_RPI_PICO_MODE_NORMAL>;
};

pico_spi: &spi0 {};
pico_i2c0: &i2c0 {};
pico_i2c1: &i2c1 {};
