xref: /linux/arch/arm64/boot/dts/exynos/exynos2200-g0s.dts (revision 115e74a29b530d121891238e9551c4bcdf7b04b5)
1*5430fd9eSIvaylo Ivanov// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2*5430fd9eSIvaylo Ivanov/*
3*5430fd9eSIvaylo Ivanov * Samsung Galaxy S22+ (g0s/SM-S906B) device tree source
4*5430fd9eSIvaylo Ivanov *
5*5430fd9eSIvaylo Ivanov * Copyright (c) 2025, Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com>
6*5430fd9eSIvaylo Ivanov */
7*5430fd9eSIvaylo Ivanov
8*5430fd9eSIvaylo Ivanov/dts-v1/;
9*5430fd9eSIvaylo Ivanov#include "exynos2200.dtsi"
10*5430fd9eSIvaylo Ivanov#include <dt-bindings/gpio/gpio.h>
11*5430fd9eSIvaylo Ivanov#include <dt-bindings/input/input.h>
12*5430fd9eSIvaylo Ivanov#include <dt-bindings/interrupt-controller/irq.h>
13*5430fd9eSIvaylo Ivanov
14*5430fd9eSIvaylo Ivanov/ {
15*5430fd9eSIvaylo Ivanov	model = "Samsung Galaxy S22+ (SM-S906B)";
16*5430fd9eSIvaylo Ivanov	compatible = "samsung,g0s", "samsung,exynos2200";
17*5430fd9eSIvaylo Ivanov	chassis-type = "handset";
18*5430fd9eSIvaylo Ivanov
19*5430fd9eSIvaylo Ivanov	chosen {
20*5430fd9eSIvaylo Ivanov		#address-cells = <2>;
21*5430fd9eSIvaylo Ivanov		#size-cells = <2>;
22*5430fd9eSIvaylo Ivanov		ranges;
23*5430fd9eSIvaylo Ivanov
24*5430fd9eSIvaylo Ivanov		framebuffer: framebuffer {
25*5430fd9eSIvaylo Ivanov			compatible = "simple-framebuffer";
26*5430fd9eSIvaylo Ivanov			memory-region = <&cont_splash_mem>;
27*5430fd9eSIvaylo Ivanov			width = <1080>;
28*5430fd9eSIvaylo Ivanov			height = <2340>;
29*5430fd9eSIvaylo Ivanov			stride = <(1080 * 4)>;
30*5430fd9eSIvaylo Ivanov			format = "a8r8g8b8";
31*5430fd9eSIvaylo Ivanov		};
32*5430fd9eSIvaylo Ivanov	};
33*5430fd9eSIvaylo Ivanov
34*5430fd9eSIvaylo Ivanov	/*
35*5430fd9eSIvaylo Ivanov	 * RTC clock (XrtcXTI); external, must be 32.768 kHz.
36*5430fd9eSIvaylo Ivanov	 *
37*5430fd9eSIvaylo Ivanov	 * TODO: Remove this once RTC clock is implemented properly as part of
38*5430fd9eSIvaylo Ivanov	 *       PMIC driver.
39*5430fd9eSIvaylo Ivanov	 */
40*5430fd9eSIvaylo Ivanov	rtcclk: clock-rtcclk {
41*5430fd9eSIvaylo Ivanov		compatible = "fixed-clock";
42*5430fd9eSIvaylo Ivanov		clock-output-names = "rtcclk";
43*5430fd9eSIvaylo Ivanov		#clock-cells = <0>;
44*5430fd9eSIvaylo Ivanov		clock-frequency = <32768>;
45*5430fd9eSIvaylo Ivanov	};
46*5430fd9eSIvaylo Ivanov
47*5430fd9eSIvaylo Ivanov	gpio-keys {
48*5430fd9eSIvaylo Ivanov		compatible = "gpio-keys";
49*5430fd9eSIvaylo Ivanov
50*5430fd9eSIvaylo Ivanov		pinctrl-0 = <&key_volup>;
51*5430fd9eSIvaylo Ivanov		pinctrl-names = "default";
52*5430fd9eSIvaylo Ivanov
53*5430fd9eSIvaylo Ivanov		volup-key {
54*5430fd9eSIvaylo Ivanov			label = "Volume Up";
55*5430fd9eSIvaylo Ivanov			linux,code = <KEY_VOLUMEUP>;
56*5430fd9eSIvaylo Ivanov			gpios = <&gpa3 0 GPIO_ACTIVE_LOW>;
57*5430fd9eSIvaylo Ivanov			wakeup-source;
58*5430fd9eSIvaylo Ivanov		};
59*5430fd9eSIvaylo Ivanov	};
60*5430fd9eSIvaylo Ivanov
61*5430fd9eSIvaylo Ivanov	memory@80000000 {
62*5430fd9eSIvaylo Ivanov		device_type = "memory";
63*5430fd9eSIvaylo Ivanov		reg = <0x0 0x80000000 0x0 0x80000000>,
64*5430fd9eSIvaylo Ivanov		      <0x8 0x80000000 0x1 0x7e000000>;
65*5430fd9eSIvaylo Ivanov	};
66*5430fd9eSIvaylo Ivanov
67*5430fd9eSIvaylo Ivanov	/* TODO: Remove this once PMIC is implemented  */
68*5430fd9eSIvaylo Ivanov	reg_dummy: regulator-0 {
69*5430fd9eSIvaylo Ivanov		compatible = "regulator-fixed";
70*5430fd9eSIvaylo Ivanov		regulator-name = "dummy_reg";
71*5430fd9eSIvaylo Ivanov	};
72*5430fd9eSIvaylo Ivanov
73*5430fd9eSIvaylo Ivanov	reserved-memory {
74*5430fd9eSIvaylo Ivanov		#address-cells = <2>;
75*5430fd9eSIvaylo Ivanov		#size-cells = <2>;
76*5430fd9eSIvaylo Ivanov		ranges;
77*5430fd9eSIvaylo Ivanov
78*5430fd9eSIvaylo Ivanov		cont_splash_mem: framebuffer@f6200000 {
79*5430fd9eSIvaylo Ivanov			reg = <0x0 0xf6200000 0x0 (1080 * 2340 * 4)>;
80*5430fd9eSIvaylo Ivanov			no-map;
81*5430fd9eSIvaylo Ivanov		};
82*5430fd9eSIvaylo Ivanov
83*5430fd9eSIvaylo Ivanov		debug_kinfo_reserved: debug-kinfo-reserved@fcfff000 {
84*5430fd9eSIvaylo Ivanov			reg = <0x0 0xfcfff000 0x0 0x1000>;
85*5430fd9eSIvaylo Ivanov			no-map;
86*5430fd9eSIvaylo Ivanov		};
87*5430fd9eSIvaylo Ivanov
88*5430fd9eSIvaylo Ivanov		log_itmon: log-itmon@fffe0000 {
89*5430fd9eSIvaylo Ivanov			reg = <0x0 0xfffe0000 0x0 0x20000>;
90*5430fd9eSIvaylo Ivanov			no-map;
91*5430fd9eSIvaylo Ivanov		};
92*5430fd9eSIvaylo Ivanov	};
93*5430fd9eSIvaylo Ivanov};
94*5430fd9eSIvaylo Ivanov
95*5430fd9eSIvaylo Ivanov&cmu_hsi0 {
96*5430fd9eSIvaylo Ivanov	clocks = <&xtcxo>,
97*5430fd9eSIvaylo Ivanov		 <&rtcclk>,
98*5430fd9eSIvaylo Ivanov		 <&cmu_top CLK_DOUT_CMU_HSI0_NOC>,
99*5430fd9eSIvaylo Ivanov		 <&cmu_top CLK_DOUT_CMU_HSI0_DPGTC>,
100*5430fd9eSIvaylo Ivanov		 <&cmu_top CLK_DOUT_CMU_HSI0_DPOSC>,
101*5430fd9eSIvaylo Ivanov		 <&cmu_top CLK_DOUT_CMU_HSI0_USB32DRD>;
102*5430fd9eSIvaylo Ivanov	clock-names = "oscclk", "rtcclk", "noc", "dpgtc", "dposc", "usb";
103*5430fd9eSIvaylo Ivanov};
104*5430fd9eSIvaylo Ivanov
105*5430fd9eSIvaylo Ivanov/*
106*5430fd9eSIvaylo Ivanov * cpu2 and cpu3 fail to come up consistently, which leads to a hang later
107*5430fd9eSIvaylo Ivanov * in the boot process. Disable them until the issue is figured out.
108*5430fd9eSIvaylo Ivanov */
109*5430fd9eSIvaylo Ivanov&cpu2 {
110*5430fd9eSIvaylo Ivanov	status = "fail";
111*5430fd9eSIvaylo Ivanov};
112*5430fd9eSIvaylo Ivanov
113*5430fd9eSIvaylo Ivanov&cpu3 {
114*5430fd9eSIvaylo Ivanov	status = "fail";
115*5430fd9eSIvaylo Ivanov};
116*5430fd9eSIvaylo Ivanov
117*5430fd9eSIvaylo Ivanov&ext_26m {
118*5430fd9eSIvaylo Ivanov	clock-frequency = <26000000>;
119*5430fd9eSIvaylo Ivanov};
120*5430fd9eSIvaylo Ivanov
121*5430fd9eSIvaylo Ivanov&ext_200m {
122*5430fd9eSIvaylo Ivanov	clock-frequency = <200000000>;
123*5430fd9eSIvaylo Ivanov};
124*5430fd9eSIvaylo Ivanov
125*5430fd9eSIvaylo Ivanov&mct_peris {
126*5430fd9eSIvaylo Ivanov	status = "okay";
127*5430fd9eSIvaylo Ivanov};
128*5430fd9eSIvaylo Ivanov
129*5430fd9eSIvaylo Ivanov&pinctrl_alive {
130*5430fd9eSIvaylo Ivanov	key_volup: key-volup-pins {
131*5430fd9eSIvaylo Ivanov		samsung,pins = "gpa3-0";
132*5430fd9eSIvaylo Ivanov		samsung,pin-function = <EXYNOS_PIN_FUNC_F>;
133*5430fd9eSIvaylo Ivanov		samsung,pin-pud = <EXYNOS_PIN_PULL_UP>;
134*5430fd9eSIvaylo Ivanov		samsung,pin-drv = <EXYNOS7_PIN_DRV_LV4>;
135*5430fd9eSIvaylo Ivanov	};
136*5430fd9eSIvaylo Ivanov};
137*5430fd9eSIvaylo Ivanov
138*5430fd9eSIvaylo Ivanov&ppi_cluster0 {
139*5430fd9eSIvaylo Ivanov	affinity = <&cpu0 &cpu1>;
140*5430fd9eSIvaylo Ivanov};
141*5430fd9eSIvaylo Ivanov
142*5430fd9eSIvaylo Ivanov&usb {
143*5430fd9eSIvaylo Ivanov	/* TODO: Replace these once PMIC is implemented  */
144*5430fd9eSIvaylo Ivanov	vdd10-supply = <&reg_dummy>;
145*5430fd9eSIvaylo Ivanov	vdd33-supply = <&reg_dummy>;
146*5430fd9eSIvaylo Ivanov	status = "okay";
147*5430fd9eSIvaylo Ivanov};
148*5430fd9eSIvaylo Ivanov
149*5430fd9eSIvaylo Ivanov&usb32drd {
150*5430fd9eSIvaylo Ivanov	status = "okay";
151*5430fd9eSIvaylo Ivanov};
152*5430fd9eSIvaylo Ivanov
153*5430fd9eSIvaylo Ivanov&usb_dwc3 {
154*5430fd9eSIvaylo Ivanov	dr_mode = "otg";
155*5430fd9eSIvaylo Ivanov	usb-role-switch;
156*5430fd9eSIvaylo Ivanov	role-switch-default-mode = "peripheral";
157*5430fd9eSIvaylo Ivanov	maximum-speed = "high-speed";
158*5430fd9eSIvaylo Ivanov};
159*5430fd9eSIvaylo Ivanov
160*5430fd9eSIvaylo Ivanov&usb_hsphy {
161*5430fd9eSIvaylo Ivanov	/* TODO: Replace these once PMIC is implemented  */
162*5430fd9eSIvaylo Ivanov	vdda12-supply = <&reg_dummy>;
163*5430fd9eSIvaylo Ivanov	vdd-supply = <&reg_dummy>;
164*5430fd9eSIvaylo Ivanov	status = "okay";
165*5430fd9eSIvaylo Ivanov};
166*5430fd9eSIvaylo Ivanov
167*5430fd9eSIvaylo Ivanov&xtcxo {
168*5430fd9eSIvaylo Ivanov	clock-frequency = <76800000>;
169*5430fd9eSIvaylo Ivanov};
170