/*
 * 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 <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;
	};
};

&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";
		label = "VBUS";
		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";
};
