/*
 * Copyright 2023 The ChromiumOS Authors
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/dts-v1/;
#include <st/g0/stm32g0b1Xe.dtsi>
#include <st/g0/stm32g0b1r(b-c-e)ixn-pinctrl.dtsi>
#include <zephyr/dt-bindings/input/input-event-codes.h>

/ {
	model = "Google Twinkie V2";
	compatible = "google,twinkie-v2";

	chosen {
		zephyr,sram = &sram0;
		zephyr,flash = &flash0;
	};

	leds {
		compatible = "gpio-leds";
		red_led_0: led0 {
			gpios = <&gpioc 8 GPIO_ACTIVE_LOW>;
		};
		green_led_1: led1 {
			gpios = <&gpiob 6 GPIO_ACTIVE_LOW>;
		};
		blue_led_2: led2 {
			gpios = <&gpiob 7 GPIO_ACTIVE_LOW>;
		};
	};

	gpio_keys {
		compatible = "gpio-keys";

		/* does not go to an actual button in current hardware.
		 * short TP5 to TP6 to activate.
		 */
		dfu_detect: dfudetect {
			gpios = <&gpioa 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
			zephyr,code = <INPUT_KEY_0>;
		};
	};

	cc1_buf: cc1buf {
		compatible = "voltage-divider";
		io-channels = <&adc1 1>;
		output-ohms = <2000000000>;
	};

	cc2_buf: cc2buf {
		compatible = "voltage-divider";
		io-channels = <&adc1 3>;
		output-ohms = <2000000000>;
	};

	vbus_read_buf: vbusv {
		compatible = "voltage-divider";
		io-channels = <&adc1 15>;
		output-ohms = <68000>;
		full-ohms = <(2000000 + 68000)>;
	};

	csa_vbus: vbusc {
		compatible = "current-sense-amplifier";
		io-channels = <&adc1 17>;
		sense-resistor-micro-ohms = <3000>;
		sense-gain-mult = <100>;
	};

	csa_cc2: vconc {
		compatible = "current-sense-amplifier";
		io-channels = <&adc1 18>;
		sense-resistor-micro-ohms = <10000>;
		sense-gain-mult = <25>;
	};

	aliases {
		led0 = &red_led_0;
		led1 = &green_led_1;
		led2 = &blue_led_2;
		bootloader-led0 = &blue_led_2;
		vcc1 = &cc1_buf;
		vcc2 = &cc2_buf;
		vbus = &vbus_read_buf;
		cbus = &csa_vbus;
		ccon = &csa_cc2;
	};
};


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

	pinctrl-0 = <&adc1_in1_pa1	/* CC1_BUF	 */
		     &adc1_in3_pa3	/* CC2_BUF	 */
		     &adc1_in15_pb11	/* VBUS_READ_BUF */
		     &adc1_in17_pc4	/* CSA_VBUS	 */
		     &adc1_in18_pc5	/* CSA_CC2	 */
		    >;
	pinctrl-names = "default";
	st,adc-clock-source = <SYNC>;
	st,adc-prescaler = <4>;
	status = "okay";

	channel@1 {
		reg = <1>;
		zephyr,gain = "ADC_GAIN_1";
		zephyr,reference = "ADC_REF_INTERNAL";
		zephyr,vref-mv = <3300>;
		zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
		zephyr,resolution = <12>;
	};

	channel@3 {
		reg = <3>;
		zephyr,gain = "ADC_GAIN_1";
		zephyr,reference = "ADC_REF_INTERNAL";
		zephyr,vref-mv = <3300>;
		zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
		zephyr,resolution = <12>;
	};

	channel@15 {
		reg = <15>;
		zephyr,gain = "ADC_GAIN_1";
		zephyr,reference = "ADC_REF_INTERNAL";
		zephyr,vref-mv = <3300>;
		zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
		zephyr,resolution = <12>;
	};

	channel@17 {
		reg = <17>;
		zephyr,gain = "ADC_GAIN_1";
		zephyr,reference = "ADC_REF_INTERNAL";
		zephyr,vref-mv = <3300>;
		zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
		zephyr,resolution = <12>;
	};

	channel@18 {
		reg = <18>;
		zephyr,gain = "ADC_GAIN_1";
		zephyr,reference = "ADC_REF_INTERNAL";
		zephyr,vref-mv = <3300>;
		zephyr,acquisition-time = <ADC_ACQ_TIME_DEFAULT>;
		zephyr,resolution = <12>;
	};
};

&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>;
};

&iwdg {
	status = "okay";
};

&ucpd1 {
	status = "okay";

	psc-ucpdclk = <1>;
	hbitclkdiv = <27>;
	pinctrl-0 = <&ucpd1_cc1_pa8 &ucpd1_cc2_pb15>;
	pinctrl-names = "default";
};
