/*
 * Copyright 2021 The Chromium OS Authors
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <st/g0/stm32g071Xb.dtsi>
#include <st/g0/stm32g071r(6-8-b)tx-pinctrl.dtsi>
#include <zephyr/dt-bindings/sensor/ina230.h>

/ {
	model = "STM32G071B DEMO board";
	compatible = "st,stm32g071-demo";

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

	leds {
		compatible = "gpio-leds";
		red_led_4: led4 {
			gpios = <&gpiod 9 GPIO_ACTIVE_HIGH>;
			label = "TO_REC";
		};
		red_led_5: led5 {
			gpios = <&gpiod 8 GPIO_ACTIVE_HIGH>;
			label = "TO_PLUG";
		};
		green_led_6: led6 {
			gpios = <&gpiod 5 GPIO_ACTIVE_HIGH>;
			label = "SINK_SPY";
		};
		green_led_7: led7 {
			gpios = <&gpioc 12 GPIO_ACTIVE_HIGH>;
			label = "SOURCE";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		joy_sel: button0 {
			label = "JOY_SEL";
			gpios = <&gpioc 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
		};
		joy_left: button1 {
			label = "JOY_LEFT";
			gpios = <&gpioc 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
		};
		joy_down: button2 {
			label = "JOY_DOWN";
			gpios = <&gpioc 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
		};
		joy_right: button3 {
			label = "JOY_RIGHT";
			gpios = <&gpioc 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
		};
		joy_up: button4 {
			label = "JOY_UP";
			gpios = <&gpioc 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
		};
	};

	cc_config {
		compatible = "gpio-leds";
		encc1 {
			gpios = <&gpiob 10 GPIO_ACTIVE_HIGH>;
			label = "ENCC1";
		};

		encc2 {
			gpios = <&gpiob 11 GPIO_ACTIVE_HIGH>;
			label = "ENCC2";
		};

		rdcc1 {
			gpios = <&gpiob 12 GPIO_ACTIVE_LOW>;
			label = "RDCC1";
		};
	};

	aliases {
		led0 = &red_led_4;
		led1 = &red_led_5;
		led2 = &green_led_6;
		led3 = &green_led_7;
		sw0 = &joy_sel;
		sw1 = &joy_left;
		sw2 = &joy_down;
		sw3 = &joy_right;
		sw4 = &joy_up;
		watchdog0 = &iwdg;
	};
};

&clk_hsi {
	status = "okay";
};

&pll {
	div-m = <1>;
	mul-n = <8>;
	div-p = <2>;
	div-q = <2>;
	div-r = <2>;
	clocks = <&clk_hsi>;
	status = "okay";
};

&rcc {
	clocks = <&pll>;
	clock-frequency = <DT_FREQ_M(64)>;
	ahb-prescaler = <1>;
	apb1-prescaler = <1>;
};

&usart3 {
	pinctrl-0 = <&usart3_tx_pc10 &usart3_rx_pc11>;
	pinctrl-names = "default";
	current-speed = <115200>;
	status = "okay";
};

&i2c1 {
	status = "okay";
	pinctrl-0 = <&i2c1_scl_pb6 &i2c1_sda_pb7>;
	pinctrl-names = "default";
	status = "okay";
	clock-frequency = <I2C_BITRATE_FAST>;

	/*
	 * Use U10, INA230 to measure VBUS. I2C Address: 0x40
	 */
	vbus_meas: ina230@40 {
		status = "okay";
		compatible = "ti,ina230";
		reg = <0x40>;
		config = <INA230_CONFIG(
			INA230_OPER_MODE_BUS_VOLTAGE_CONT,
			INA230_CONV_TIME_1100,
			INA230_CONV_TIME_1100,
			INA230_AVG_MODE_1)>;
		/* Set current LSB to 1mA */
		current-lsb = <1>;
		/* Set shunt resistor value to 15 milliohms */
		rshunt = <15>;
	};
};

&ucpd1 {
	status = "okay";

	/*
	 * UCPD is fed directly from HSI which is @ 16MHz. The ucpd_clk goes to
	 * a prescaler who's output feeds the 'half-bit' divider which is used
	 * to generate clock for delay counters and BMC Rx/Tx blocks. The rx is
	 * designed to work in freq ranges of 6 <--> 18 MHz, however recommended
	 * range is 9 <--> 18 MHz.
	 *
	 *          +-------+ @ 16 MHz +-------+   @ ~600 kHz   +-----------+
	 * HSI ---->| /psc  |--------->| /hbit |--------------->| trans_cnt |
	 *          +-------+          +-------+   |            +-----------+
	 *                                         |            +-----------+
	 *                                         +----------->| ifrgap_cnt|
	 *                                                      +-----------+
	 * Requirements:
	 *   1. hbit_clk ~= 600 kHz: 16 MHz / 600 kHz = 26.67
	 *   2. tTransitionWindow - 12 to 20 uSec
	 *   3. tInterframGap - uSec
	 *
	 * hbit_clk = HSI_clk / 27 = 592.6 kHz = 1.687 uSec period
	 * tTransitionWindow = 1.687 uS * 8 = 13.5 uS
	 * tInterFrameGap = 1.687 uS * 17 = 28.68 uS
	 */
	psc-ucpdclk = <1>;
	hbitclkdiv = <27>;
};

&iwdg {
	status = "okay";
};
