1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (C) 2019 Stephan Gerhold 4 */ 5 6/dts-v1/; 7 8#include "msm8916-pm8916.dtsi" 9#include "msm8916-modem-qdsp6.dtsi" 10 11#include <dt-bindings/gpio/gpio.h> 12#include <dt-bindings/input/input.h> 13#include <dt-bindings/interrupt-controller/irq.h> 14 15/* 16 * NOTE: The original firmware from Samsung can only boot ARM32 kernels. 17 * Unfortunately, the firmware is signed and cannot be replaced easily. 18 * There seems to be no way to boot ARM64 kernels on this device at the moment, 19 * even though the hardware would support it. 20 * 21 * However, it is possible to use this device tree by compiling an ARM32 kernel 22 * instead. For clarity and build testing this device tree is maintained next 23 * to the other MSM8916 device trees. However, it is actually used through 24 * arch/arm/boot/dts/qcom-msm8916-samsung-serranove.dts 25 */ 26 27/ { 28 model = "Samsung Galaxy S4 Mini Value Edition"; 29 compatible = "samsung,serranove", "qcom,msm8916"; 30 chassis-type = "handset"; 31 32 aliases { 33 mmc0 = &sdhc_1; /* eMMC */ 34 mmc1 = &sdhc_2; /* SD card */ 35 serial0 = &blsp_uart2; 36 }; 37 38 chosen { 39 stdout-path = "serial0"; 40 }; 41 42 reserved-memory { 43 /* Additional memory used by Samsung firmware modifications */ 44 tz-apps@85500000 { 45 reg = <0x0 0x85500000 0x0 0xb00000>; 46 no-map; 47 }; 48 }; 49 50 gpio-keys { 51 compatible = "gpio-keys"; 52 53 pinctrl-names = "default"; 54 pinctrl-0 = <&gpio_keys_default>; 55 56 label = "GPIO Buttons"; 57 58 button-volume-up { 59 label = "Volume Up"; 60 gpios = <&tlmm 107 GPIO_ACTIVE_LOW>; 61 linux,code = <KEY_VOLUMEUP>; 62 }; 63 64 button-home { 65 label = "Home"; 66 gpios = <&tlmm 109 GPIO_ACTIVE_LOW>; 67 linux,code = <KEY_HOMEPAGE>; 68 }; 69 }; 70 71 gpio-hall-sensor { 72 compatible = "gpio-keys"; 73 74 pinctrl-names = "default"; 75 pinctrl-0 = <&gpio_hall_sensor_default>; 76 77 label = "GPIO Hall Effect Sensor"; 78 79 event-hall-sensor { 80 label = "Hall Effect Sensor"; 81 gpios = <&tlmm 52 GPIO_ACTIVE_LOW>; 82 linux,input-type = <EV_SW>; 83 linux,code = <SW_LID>; 84 linux,can-disable; 85 }; 86 }; 87 88 reg_vdd_tsp: regulator-vdd-tsp { 89 compatible = "regulator-fixed"; 90 regulator-name = "vdd_tsp"; 91 regulator-min-microvolt = <3300000>; 92 regulator-max-microvolt = <3300000>; 93 94 gpio = <&tlmm 73 GPIO_ACTIVE_HIGH>; 95 enable-active-high; 96 97 pinctrl-names = "default"; 98 pinctrl-0 = <&tsp_en_default>; 99 }; 100 101 reg_touch_key: regulator-touch-key { 102 compatible = "regulator-fixed"; 103 regulator-name = "touch_key"; 104 regulator-min-microvolt = <2800000>; 105 regulator-max-microvolt = <2800000>; 106 107 gpio = <&tlmm 86 GPIO_ACTIVE_HIGH>; 108 enable-active-high; 109 110 pinctrl-names = "default"; 111 pinctrl-0 = <&tkey_en_default>; 112 }; 113 114 reg_key_led: regulator-key-led { 115 compatible = "regulator-fixed"; 116 regulator-name = "key_led"; 117 regulator-min-microvolt = <3300000>; 118 regulator-max-microvolt = <3300000>; 119 120 gpio = <&tlmm 60 GPIO_ACTIVE_HIGH>; 121 enable-active-high; 122 123 pinctrl-names = "default"; 124 pinctrl-0 = <&tkey_led_en_default>; 125 }; 126 127 i2c-muic { 128 compatible = "i2c-gpio"; 129 sda-gpios = <&tlmm 105 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; 130 scl-gpios = <&tlmm 106 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; 131 132 pinctrl-names = "default"; 133 pinctrl-0 = <&muic_i2c_default>; 134 135 #address-cells = <1>; 136 #size-cells = <0>; 137 138 muic: extcon@14 { 139 compatible = "siliconmitus,sm5504-muic"; 140 reg = <0x14>; 141 142 interrupt-parent = <&tlmm>; 143 interrupts = <12 IRQ_TYPE_EDGE_FALLING>; 144 145 pinctrl-names = "default"; 146 pinctrl-0 = <&muic_irq_default>; 147 148 usb_con: connector { 149 compatible = "usb-b-connector"; 150 label = "micro-USB"; 151 type = "micro"; 152 }; 153 }; 154 }; 155 156 i2c-tkey { 157 compatible = "i2c-gpio"; 158 sda-gpios = <&tlmm 16 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; 159 scl-gpios = <&tlmm 17 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; 160 161 pinctrl-names = "default"; 162 pinctrl-0 = <&tkey_i2c_default>; 163 164 #address-cells = <1>; 165 #size-cells = <0>; 166 167 touchkey@20 { 168 compatible = "coreriver,tc360-touchkey"; 169 reg = <0x20>; 170 171 interrupt-parent = <&tlmm>; 172 interrupts = <98 IRQ_TYPE_EDGE_FALLING>; 173 174 vcc-supply = <®_touch_key>; 175 vdd-supply = <®_key_led>; 176 vddio-supply = <&pm8916_l6>; 177 178 linux,keycodes = <KEY_APPSELECT KEY_BACK>; 179 180 pinctrl-names = "default"; 181 pinctrl-0 = <&tkey_default>; 182 }; 183 }; 184 185 i2c-nfc { 186 compatible = "i2c-gpio"; 187 sda-gpios = <&tlmm 0 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; 188 scl-gpios = <&tlmm 1 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; 189 190 pinctrl-names = "default"; 191 pinctrl-0 = <&nfc_i2c_default>; 192 193 #address-cells = <1>; 194 #size-cells = <0>; 195 196 nfc@2b { 197 compatible = "nxp,pn547", "nxp,nxp-nci-i2c"; 198 reg = <0x2b>; 199 200 interrupt-parent = <&tlmm>; 201 interrupts = <21 IRQ_TYPE_EDGE_RISING>; 202 203 enable-gpios = <&tlmm 20 GPIO_ACTIVE_HIGH>; 204 firmware-gpios = <&tlmm 49 GPIO_ACTIVE_HIGH>; 205 206 pinctrl-names = "default"; 207 pinctrl-0 = <&nfc_default>; 208 }; 209 }; 210 211 battery: battery { 212 compatible = "simple-battery"; 213 precharge-current-microamp = <450000>; 214 constant-charge-current-max-microamp = <1000000>; 215 charge-term-current-microamp = <150000>; 216 precharge-upper-limit-microvolt = <3500000>; 217 constant-charge-voltage-max-microvolt = <4350000>; 218 }; 219}; 220 221&blsp_i2c2 { 222 status = "okay"; 223 224 imu@6b { 225 compatible = "st,lsm6ds3"; 226 reg = <0x6b>; 227 228 interrupt-parent = <&tlmm>; 229 interrupts = <115 IRQ_TYPE_EDGE_RISING>; 230 231 pinctrl-names = "default"; 232 pinctrl-0 = <&imu_irq_default>; 233 }; 234 235 magnetometer@2e { 236 compatible = "yamaha,yas537"; 237 reg = <0x2e>; 238 239 mount-matrix = "0", "1", "0", 240 "1", "0", "0", 241 "0", "0", "-1"; 242 }; 243}; 244 245&blsp_i2c4 { 246 status = "okay"; 247 248 fuel-gauge@35 { 249 compatible = "richtek,rt5033-battery"; 250 reg = <0x35>; 251 252 interrupt-parent = <&tlmm>; 253 interrupts = <121 IRQ_TYPE_EDGE_FALLING>; 254 255 pinctrl-names = "default"; 256 pinctrl-0 = <&fg_alert_default>; 257 258 power-supplies = <&rt5033_charger>; 259 }; 260}; 261 262&blsp_i2c5 { 263 status = "okay"; 264 265 touchscreen@20 { 266 compatible = "zinitix,bt541"; 267 reg = <0x20>; 268 269 interrupt-parent = <&tlmm>; 270 interrupts = <13 IRQ_TYPE_EDGE_FALLING>; 271 272 touchscreen-size-x = <540>; 273 touchscreen-size-y = <960>; 274 275 vdd-supply = <®_vdd_tsp>; 276 vddo-supply = <&pm8916_l6>; 277 278 pinctrl-names = "default"; 279 pinctrl-0 = <&tsp_irq_default>; 280 }; 281}; 282 283&blsp_i2c6 { 284 status = "okay"; 285 286 pmic@34 { 287 compatible = "richtek,rt5033"; 288 reg = <0x34>; 289 290 interrupt-parent = <&tlmm>; 291 interrupts = <62 IRQ_TYPE_EDGE_FALLING>; 292 293 pinctrl-names = "default"; 294 pinctrl-0 = <&pmic_int_default>; 295 296 regulators { 297 rt5033_reg_safe_ldo: SAFE_LDO { 298 regulator-min-microvolt = <4900000>; 299 regulator-max-microvolt = <4900000>; 300 regulator-always-on; 301 }; 302 rt5033_reg_ldo: LDO { 303 regulator-min-microvolt = <2800000>; 304 regulator-max-microvolt = <2800000>; 305 }; 306 rt5033_reg_buck: BUCK { 307 regulator-min-microvolt = <1200000>; 308 regulator-max-microvolt = <1200000>; 309 }; 310 }; 311 312 rt5033_charger: charger { 313 compatible = "richtek,rt5033-charger"; 314 monitored-battery = <&battery>; 315 richtek,usb-connector = <&usb_con>; 316 }; 317 }; 318}; 319 320&blsp_uart2 { 321 status = "okay"; 322}; 323 324&mpss_mem { 325 reg = <0x0 0x86800000 0x0 0x5a00000>; 326}; 327 328&pm8916_resin { 329 status = "okay"; 330 linux,code = <KEY_VOLUMEDOWN>; 331}; 332 333&pm8916_vib { 334 status = "okay"; 335}; 336 337&sdhc_1 { 338 status = "okay"; 339}; 340 341&sdhc_2 { 342 status = "okay"; 343 non-removable; 344 345 /* 346 * FIXME: Disable UHS-I modes since tuning fails with: 347 * 348 * sdhci_msm 7864900.sdhci: mmc1: No tuning point found 349 * mmc1: tuning execution failed: -5 350 * mmc1: error -5 whilst initialising SD card 351 * 352 * This is the quirk used on downstream, which suggests this is 353 * a hardware limitation. However, probing a card using DDR50 works 354 * (without tuning), so maybe only tuning is broken? 355 */ 356 no-1-8-v; 357}; 358 359&sound { 360 audio-routing = 361 "AMIC1", "MIC BIAS External1", 362 "AMIC2", "MIC BIAS Internal2", 363 "AMIC3", "MIC BIAS External1"; 364}; 365 366&usb { 367 status = "okay"; 368 extcon = <&muic>, <&muic>; 369}; 370 371&usb_hs_phy { 372 extcon = <&muic>; 373}; 374 375&venus { 376 status = "okay"; 377}; 378 379&venus_mem { 380 status = "okay"; 381}; 382 383&wcnss { 384 status = "okay"; 385}; 386 387&wcnss_iris { 388 compatible = "qcom,wcn3660b"; 389}; 390 391&wcnss_mem { 392 status = "okay"; 393}; 394 395&tlmm { 396 fg_alert_default: fg-alert-default-state { 397 pins = "gpio121"; 398 function = "gpio"; 399 400 drive-strength = <2>; 401 bias-disable; 402 }; 403 404 gpio_keys_default: gpio-keys-default-state { 405 pins = "gpio107", "gpio109"; 406 function = "gpio"; 407 408 drive-strength = <2>; 409 bias-pull-up; 410 }; 411 412 gpio_hall_sensor_default: gpio-hall-sensor-default-state { 413 pins = "gpio52"; 414 function = "gpio"; 415 416 drive-strength = <2>; 417 bias-disable; 418 }; 419 420 imu_irq_default: imu-irq-default-state { 421 pins = "gpio115"; 422 function = "gpio"; 423 424 drive-strength = <2>; 425 bias-disable; 426 }; 427 428 muic_i2c_default: muic-i2c-default-state { 429 pins = "gpio105", "gpio106"; 430 function = "gpio"; 431 432 drive-strength = <2>; 433 bias-disable; 434 }; 435 436 muic_irq_default: muic-irq-default-state { 437 pins = "gpio12"; 438 function = "gpio"; 439 440 drive-strength = <2>; 441 bias-disable; 442 }; 443 444 nfc_default: nfc-default-state { 445 nfc-pins { 446 pins = "gpio20", "gpio49"; 447 function = "gpio"; 448 449 drive-strength = <2>; 450 bias-disable; 451 }; 452 irq-pins { 453 pins = "gpio21"; 454 function = "gpio"; 455 456 drive-strength = <2>; 457 bias-pull-down; 458 }; 459 }; 460 461 nfc_i2c_default: nfc-i2c-default-state { 462 pins = "gpio0", "gpio1"; 463 function = "gpio"; 464 465 drive-strength = <2>; 466 bias-disable; 467 }; 468 469 pmic_int_default: pmic-int-default-state { 470 pins = "gpio62"; 471 function = "gpio"; 472 473 drive-strength = <2>; 474 bias-disable; 475 }; 476 477 tkey_default: tkey-default-state { 478 pins = "gpio98"; 479 function = "gpio"; 480 481 drive-strength = <2>; 482 bias-disable; 483 }; 484 485 tkey_en_default: tkey-en-default-state { 486 pins = "gpio86"; 487 function = "gpio"; 488 489 drive-strength = <2>; 490 bias-disable; 491 }; 492 493 tkey_i2c_default: tkey-i2c-default-state { 494 pins = "gpio16", "gpio17"; 495 function = "gpio"; 496 497 drive-strength = <2>; 498 bias-disable; 499 }; 500 501 tkey_led_en_default: tkey-led-en-default-state { 502 pins = "gpio60"; 503 function = "gpio"; 504 505 drive-strength = <2>; 506 bias-disable; 507 }; 508 509 tsp_en_default: tsp-en-default-state { 510 pins = "gpio73"; 511 function = "gpio"; 512 513 drive-strength = <2>; 514 bias-disable; 515 }; 516 517 tsp_irq_default: tsp-irq-default-state { 518 pins = "gpio13"; 519 function = "gpio"; 520 521 drive-strength = <2>; 522 bias-disable; 523 }; 524}; 525