1// SPDX-License-Identifier: BSD-3-Clause 2/* 3 * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org> 4 */ 5 6#include <dt-bindings/regulator/qcom,rpmh-regulator.h> 7#include "sm8250.dtsi" 8#include "pm8150.dtsi" 9#include "pm8150b.dtsi" 10#include "pm8150l.dtsi" 11#include "pm8009.dtsi" 12 13/delete-node/ &adsp_mem; 14/delete-node/ &spss_mem; 15/delete-node/ &cdsp_secure_heap; 16 17/ { 18 qcom,msm-id = <356 0x20001>; /* SM8250 v2.1 */ 19 qcom,board-id = <0x10008 0>; 20 21 chosen { 22 #address-cells = <2>; 23 #size-cells = <2>; 24 ranges; 25 26 framebuffer: framebuffer@9c000000 { 27 compatible = "simple-framebuffer"; 28 reg = <0 0x9c000000 0 0x2300000>; 29 width = <1644>; 30 height = <3840>; 31 stride = <(1644 * 4)>; 32 format = "a8r8g8b8"; 33 /* 34 * That's a lot of clocks, but it's necessary due 35 * to unused clk cleanup & no panel driver yet.. 36 */ 37 clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>, 38 <&gcc GCC_DISP_HF_AXI_CLK>, 39 <&gcc GCC_DISP_SF_AXI_CLK>, 40 <&dispcc DISP_CC_MDSS_VSYNC_CLK>, 41 <&dispcc DISP_CC_MDSS_MDP_CLK>, 42 <&dispcc DISP_CC_MDSS_BYTE0_CLK>, 43 <&dispcc DISP_CC_MDSS_BYTE0_INTF_CLK>, 44 <&dispcc DISP_CC_MDSS_PCLK0_CLK>, 45 <&dispcc DISP_CC_MDSS_ESC0_CLK>; 46 power-domains = <&dispcc MDSS_GDSC>; 47 }; 48 }; 49 50 gpio_keys: gpio-keys { 51 compatible = "gpio-keys"; 52 53 /* 54 * Camera focus (light press) and camera snapshot (full press) 55 * seem not to work properly.. Adding the former one stalls the CPU 56 * and the latter kills the volume down key for whatever reason. In any 57 * case, they are both on &pm8150b_gpios: camera focus(2), camera snapshot(1). 58 */ 59 60 key-vol-down { 61 label = "Volume Down"; 62 linux,code = <KEY_VOLUMEDOWN>; 63 gpios = <&pm8150_gpios 1 GPIO_ACTIVE_LOW>; 64 debounce-interval = <15>; 65 linux,can-disable; 66 gpio-key,wakeup; 67 }; 68 }; 69 70 vph_pwr: vph-pwr-regulator { 71 compatible = "regulator-fixed"; 72 regulator-name = "vph_pwr"; 73 regulator-min-microvolt = <3700000>; 74 regulator-max-microvolt = <3700000>; 75 }; 76 77 /* S6c is really ebi.lvl but it's there for supply map completeness sake. */ 78 vreg_s6c_0p88: smpc6-regulator { 79 compatible = "regulator-fixed"; 80 regulator-name = "vreg_s6c_0p88"; 81 82 regulator-min-microvolt = <880000>; 83 regulator-max-microvolt = <880000>; 84 regulator-always-on; 85 vin-supply = <&vph_pwr>; 86 }; 87 88 reserved-memory { 89 adsp_mem: memory@8a100000 { 90 reg = <0x0 0x8a100000 0x0 0x2500000>; 91 no-map; 92 }; 93 94 spss_mem: memory@8c600000 { 95 reg = <0x0 0x8c600000 0x0 0x100000>; 96 no-map; 97 }; 98 99 cdsp_secure_heap: memory@8c700000 { 100 reg = <0x0 0x8c700000 0x0 0x4600000>; 101 no-map; 102 }; 103 104 cont_splash_mem: memory@9c000000 { 105 reg = <0x0 0x9c000000 0x0 0x2300000>; 106 no-map; 107 }; 108 109 ramoops@ffc00000 { 110 compatible = "ramoops"; 111 reg = <0x0 0xffc00000 0x0 0x100000>; 112 record-size = <0x1000>; 113 console-size = <0x40000>; 114 msg-size = <0x20000 0x20000>; 115 ecc-size = <16>; 116 no-map; 117 }; 118 }; 119}; 120 121&adsp { 122 status = "okay"; 123}; 124 125&apps_rsc { 126 pm8150-rpmh-regulators { 127 compatible = "qcom,pm8150-rpmh-regulators"; 128 qcom,pmic-id = "a"; 129 130 vdd-s1-supply = <&vph_pwr>; 131 vdd-s2-supply = <&vph_pwr>; 132 vdd-s3-supply = <&vph_pwr>; 133 vdd-s4-supply = <&vph_pwr>; 134 vdd-s5-supply = <&vph_pwr>; 135 vdd-s6-supply = <&vph_pwr>; 136 vdd-s7-supply = <&vph_pwr>; 137 vdd-s8-supply = <&vph_pwr>; 138 vdd-s9-supply = <&vph_pwr>; 139 vdd-s10-supply = <&vph_pwr>; 140 vdd-l1-l8-l11-supply = <&vreg_s6c_0p88>; 141 vdd-l2-l10-supply = <&vreg_bob>; 142 vdd-l3-l4-l5-l18-supply = <&vreg_s6a_0p6>; 143 vdd-l6-l9-supply = <&vreg_s8c_1p2>; 144 vdd-l7-l12-l14-l15-supply = <&vreg_s5a_1p9>; 145 vdd-l13-l16-l17-supply = <&vreg_bob>; 146 147 /* (S1+S2+S3) - cx.lvl (ARC) */ 148 149 vreg_s4a_1p8: smps4 { 150 regulator-name = "vreg_s4a_1p8"; 151 regulator-min-microvolt = <1800000>; 152 regulator-max-microvolt = <1920000>; 153 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 154 }; 155 156 vreg_s5a_1p9: smps5 { 157 regulator-name = "vreg_s5a_1p9"; 158 regulator-min-microvolt = <1824000>; 159 regulator-max-microvolt = <2040000>; 160 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 161 }; 162 163 vreg_s6a_0p6: smps6 { 164 regulator-name = "vreg_s6a_0p6"; 165 regulator-min-microvolt = <600000>; 166 regulator-max-microvolt = <1128000>; 167 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 168 }; 169 170 vreg_l2a_3p1: ldo2 { 171 regulator-name = "vreg_l2a_3p1"; 172 regulator-min-microvolt = <3072000>; 173 regulator-max-microvolt = <3072000>; 174 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 175 }; 176 177 vreg_l3a_0p9: ldo3 { 178 regulator-name = "vreg_l3a_0p9"; 179 regulator-min-microvolt = <928000>; 180 regulator-max-microvolt = <932000>; 181 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 182 }; 183 184 /* L4 - lmx.lvl (ARC) */ 185 186 vreg_l5a_0p88: ldo5 { 187 regulator-name = "vreg_l5a_0p88"; 188 regulator-min-microvolt = <880000>; 189 regulator-max-microvolt = <880000>; 190 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 191 }; 192 193 vreg_l6a_1p2: ldo6 { 194 regulator-name = "vreg_l6a_1p2"; 195 regulator-min-microvolt = <1200000>; 196 regulator-max-microvolt = <1200000>; 197 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 198 }; 199 200 /* L7 is unused. */ 201 202 vreg_l9a_1p2: ldo9 { 203 regulator-name = "vreg_l9a_1p2"; 204 regulator-min-microvolt = <1200000>; 205 regulator-max-microvolt = <1200000>; 206 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 207 }; 208 209 /* L10 is unused, L11 - lcx.lvl (ARC) */ 210 211 vreg_l12a_1p8: ldo12 { 212 regulator-name = "vreg_l12a_1p8"; 213 regulator-min-microvolt = <1800000>; 214 regulator-max-microvolt = <1800000>; 215 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 216 }; 217 218 /* L13 is unused. */ 219 220 vreg_l14a_1p8: ldo14 { 221 regulator-name = "vreg_l14a_1p8"; 222 regulator-min-microvolt = <1800000>; 223 regulator-max-microvolt = <1880000>; 224 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 225 }; 226 227 /* L15 & L16 are unused. */ 228 229 vreg_l17a_3p0: ldo17 { 230 regulator-name = "vreg_l17a_3p0"; 231 regulator-min-microvolt = <2496000>; 232 regulator-max-microvolt = <3008000>; 233 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 234 }; 235 236 vreg_l18a_0p9: ldo18 { 237 regulator-name = "vreg_l18a_0p9"; 238 regulator-min-microvolt = <800000>; 239 regulator-max-microvolt = <920000>; 240 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 241 }; 242 }; 243 244 /* 245 * Remaining regulators that are not yet supported: 246 * OLEDB: 4925000-8100000 247 * ab: 4600000-6100000 248 * ibb: 800000-5400000 249 */ 250 pm8150l-rpmh-regulators { 251 compatible = "qcom,pm8150l-rpmh-regulators"; 252 qcom,pmic-id = "c"; 253 254 vdd-s1-supply = <&vph_pwr>; 255 vdd-s2-supply = <&vph_pwr>; 256 vdd-s3-supply = <&vph_pwr>; 257 vdd-s4-supply = <&vph_pwr>; 258 vdd-s5-supply = <&vph_pwr>; 259 vdd-s6-supply = <&vph_pwr>; 260 vdd-s7-supply = <&vph_pwr>; 261 vdd-s8-supply = <&vph_pwr>; 262 vdd-l1-l8-supply = <&vreg_s4a_1p8>; 263 vdd-l2-l3-supply = <&vreg_s8c_1p2>; 264 vdd-l4-l5-l6-supply = <&vreg_bob>; 265 vdd-l7-l11-supply = <&vreg_bob>; 266 vdd-l9-l10-supply = <&vreg_bob>; 267 vdd-bob-supply = <&vph_pwr>; 268 269 vreg_bob: bob { 270 regulator-name = "vreg_bob"; 271 regulator-min-microvolt = <3350000>; 272 regulator-max-microvolt = <3960000>; 273 regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>; 274 }; 275 276 /* 277 * S1-S6 are ARCs: 278 * (S1+S2) - gfx.lvl, 279 * S3 - mx.lvl, 280 * (S4+S5) - mmcx.lvl, 281 * S6 - ebi.lvl 282 */ 283 284 vreg_s7c_0p35: smps7 { 285 regulator-name = "vreg_s7c_0p35"; 286 regulator-min-microvolt = <348000>; 287 regulator-max-microvolt = <1000000>; 288 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 289 }; 290 291 vreg_s8c_1p2: smps8 { 292 regulator-name = "vreg_s8c_1p2"; 293 regulator-min-microvolt = <1200000>; 294 regulator-max-microvolt = <1400000>; 295 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 296 }; 297 298 vreg_l1c_1p8: ldo1 { 299 regulator-name = "vreg_l1c_1p8"; 300 regulator-min-microvolt = <1800000>; 301 regulator-max-microvolt = <1800000>; 302 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 303 }; 304 305 /* L2-4 are unused. */ 306 307 vreg_l5c_1p8: ldo5 { 308 regulator-name = "vreg_l5c_1p8"; 309 regulator-min-microvolt = <1800000>; 310 regulator-max-microvolt = <2800000>; 311 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 312 }; 313 314 vreg_l6c_2p9: ldo6 { 315 regulator-name = "vreg_l6c_2p9"; 316 regulator-min-microvolt = <1800000>; 317 regulator-max-microvolt = <2960000>; 318 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 319 regulator-allow-set-load; 320 regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM 321 RPMH_REGULATOR_MODE_HPM>; 322 }; 323 324 vreg_l7c_2p85: ldo7 { 325 regulator-name = "vreg_l7c_2p85"; 326 regulator-min-microvolt = <2856000>; 327 regulator-max-microvolt = <3104000>; 328 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 329 }; 330 331 vreg_l8c_1p8: ldo8 { 332 regulator-name = "vreg_l8c_1p8"; 333 regulator-min-microvolt = <1800000>; 334 regulator-max-microvolt = <1800000>; 335 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 336 }; 337 338 vreg_l9c_2p9: ldo9 { 339 regulator-name = "vreg_l9c_2p9"; 340 regulator-min-microvolt = <2704000>; 341 regulator-max-microvolt = <2960000>; 342 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 343 regulator-allow-set-load; 344 regulator-allowed-modes = <RPMH_REGULATOR_MODE_LPM 345 RPMH_REGULATOR_MODE_HPM>; 346 }; 347 348 vreg_l10c_3p3: ldo10 { 349 regulator-name = "vreg_l10c_3p3"; 350 regulator-min-microvolt = <3296000>; 351 regulator-max-microvolt = <3296000>; 352 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 353 }; 354 355 vreg_l11c_3p0: ldo11 { 356 regulator-name = "vreg_l11c_3p0"; 357 regulator-min-microvolt = <3000000>; 358 regulator-max-microvolt = <3000000>; 359 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 360 }; 361 }; 362 363 pm8009-rpmh-regulators { 364 compatible = "qcom,pm8009-rpmh-regulators"; 365 qcom,pmic-id = "f"; 366 367 vdd-s1-supply = <&vph_pwr>; 368 vdd-s2-supply = <&vreg_bob>; 369 vdd-l2-supply = <&vreg_s8c_1p2>; 370 vdd-l5-l6-supply = <&vreg_bob>; 371 vdd-l7-supply = <&vreg_s4a_1p8>; 372 373 vreg_s1f_1p2: smps1 { 374 regulator-name = "vreg_s1f_1p2"; 375 regulator-min-microvolt = <1200000>; 376 regulator-max-microvolt = <1200000>; 377 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 378 }; 379 380 vreg_s2f_0p5: smps2 { 381 regulator-name = "vreg_s2f_0p5"; 382 regulator-min-microvolt = <512000>; 383 regulator-max-microvolt = <1100000>; 384 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 385 }; 386 387 /* L1 is unused. */ 388 389 vreg_l2f_1p3: ldo2 { 390 regulator-name = "vreg_l2f_1p3"; 391 regulator-min-microvolt = <1304000>; 392 regulator-max-microvolt = <1304000>; 393 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 394 }; 395 396 /* L3 & L4 are unused. */ 397 398 vreg_l5f_2p8: ldo5 { 399 regulator-name = "vreg_l5f_2p85"; 400 regulator-min-microvolt = <2800000>; 401 regulator-max-microvolt = <2800000>; 402 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 403 }; 404 405 vreg_l6f_2p8: ldo6 { 406 regulator-name = "vreg_l6f_2p8"; 407 regulator-min-microvolt = <2800000>; 408 regulator-max-microvolt = <2800000>; 409 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 410 }; 411 412 vreg_l7f_1p8: ldo7 { 413 regulator-name = "vreg_l7f_1p8"; 414 regulator-min-microvolt = <1800000>; 415 regulator-max-microvolt = <1800000>; 416 regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>; 417 }; 418 }; 419}; 420 421&cdsp { 422 status = "okay"; 423}; 424 425&gpi_dma0 { 426 status = "okay"; 427}; 428 429&gpi_dma1 { 430 status = "okay"; 431}; 432 433&gpi_dma2 { 434 status = "okay"; 435}; 436 437&i2c1 { 438 status = "okay"; 439 clock-frequency = <400000>; 440 441 nfc@28 { 442 compatible = "nxp,nxp-nci-i2c"; 443 reg = <0x28>; 444 445 interrupt-parent = <&tlmm>; 446 interrupts = <111 IRQ_TYPE_EDGE_RISING>; 447 448 enable-gpios = <&tlmm 6 GPIO_ACTIVE_HIGH>; 449 firmware-gpios = <&tlmm 110 GPIO_ACTIVE_HIGH>; 450 }; 451}; 452 453&i2c2 { 454 status = "okay"; 455 clock-frequency = <1000000>; 456 457 cs35l41_l: cs35l41@40 { 458 compatible = "cirrus,cs35l41"; 459 reg = <0x40>; 460 interrupt-parent = <&tlmm>; 461 interrupts = <11 IRQ_TYPE_LEVEL_LOW>; 462 reset-gpios = <&tlmm 10 GPIO_ACTIVE_HIGH>; 463 cirrus,boost-peak-milliamp = <4000>; 464 cirrus,boost-ind-nanohenry = <1000>; 465 cirrus,boost-cap-microfarad = <15>; 466 cirrus,asp-sdout-hiz = <3>; 467 cirrus,gpio2-src-select = <2>; 468 cirrus,gpio2-output-enable; 469 #sound-dai-cells = <1>; 470 }; 471 472 cs35l41_r: cs35l41@41 { 473 compatible = "cirrus,cs35l41"; 474 reg = <0x41>; 475 interrupt-parent = <&tlmm>; 476 interrupts = <11 IRQ_TYPE_LEVEL_LOW>; 477 reset-gpios = <&tlmm 10 GPIO_ACTIVE_HIGH>; 478 cirrus,boost-peak-milliamp = <4000>; 479 cirrus,boost-ind-nanohenry = <1000>; 480 cirrus,boost-cap-microfarad = <15>; 481 cirrus,asp-sdout-hiz = <3>; 482 cirrus,gpio2-src-select = <2>; 483 cirrus,gpio2-output-enable; 484 #sound-dai-cells = <1>; 485 }; 486}; 487 488&i2c5 { 489 status = "okay"; 490 clock-frequency = <400000>; 491 492 /* Dialog SLG51000 CMIC @ 75 */ 493}; 494 495&i2c9 { 496 status = "okay"; 497 clock-frequency = <400000>; 498 499 /* AMS TCS3490 RGB+IR color sensor @ 72 */ 500}; 501 502&i2c13 { 503 status = "okay"; 504 clock-frequency = <400000>; 505 506 touchscreen@48 { 507 compatible = "samsung,s6sy761"; 508 reg = <0x48>; 509 interrupt-parent = <&tlmm>; 510 interrupts = <39 0x2008>; 511 /* It's "vddio" downstream but it works anyway! */ 512 vdd-supply = <&vreg_l1c_1p8>; 513 avdd-supply = <&vreg_l10c_3p3>; 514 515 pinctrl-names = "default"; 516 pinctrl-0 = <&ts_int_default>; 517 }; 518}; 519 520&i2c15 { 521 status = "okay"; 522 clock-frequency = <400000>; 523 524 /* Qcom SMB1390 @ 10 */ 525 /* Silicon Labs SI4704 FM Radio Receiver @ 11 */ 526 /* Qcom SMB1390_slave @ 18 */ 527 /* HALO HL6111R Qi charger @ 25 */ 528 /* Richwave RTC6226 FM Radio Receiver @ 64 */ 529}; 530 531&pcie0 { 532 status = "okay"; 533}; 534 535&pcie0_phy { 536 status = "okay"; 537 538 vdda-phy-supply = <&vreg_l5a_0p88>; 539 vdda-pll-supply = <&vreg_l9a_1p2>; 540}; 541 542&pcie2 { 543 status = "okay"; 544 545 pinctrl-0 = <&pcie2_default_state &mdm2ap_default &ap2mdm_default>; 546}; 547 548&pcie2_phy { 549 status = "okay"; 550 551 vdda-phy-supply = <&vreg_l5a_0p88>; 552 vdda-pll-supply = <&vreg_l9a_1p2>; 553}; 554 555&pon_pwrkey { 556 status = "okay"; 557}; 558 559&pon_resin { 560 status = "okay"; 561 562 linux,code = <KEY_VOLUMEUP>; 563}; 564 565&qupv3_id_0 { 566 status = "okay"; 567}; 568 569&qupv3_id_1 { 570 status = "okay"; 571}; 572 573&qupv3_id_2 { 574 status = "okay"; 575}; 576 577&sdhc_2 { 578 status = "okay"; 579 580 cd-gpios = <&tlmm 77 GPIO_ACTIVE_HIGH>; 581 pinctrl-names = "default", "sleep"; 582 pinctrl-0 = <&sdc2_default_state &sdc2_card_det_n>; 583 pinctrl-1 = <&sdc2_sleep_state &sdc2_card_det_n>; 584 vmmc-supply = <&vreg_l9c_2p9>; 585 vqmmc-supply = <&vreg_l6c_2p9>; 586 bus-width = <4>; 587 no-sdio; 588 no-mmc; 589}; 590 591&slpi { 592 status = "okay"; 593}; 594 595&tlmm { 596 gpio-reserved-ranges = <40 4>, <52 4>; 597 598 sdc2_default_state: sdc2-default-state { 599 clk-pins { 600 pins = "sdc2_clk"; 601 drive-strength = <16>; 602 bias-disable; 603 }; 604 605 cmd-pins { 606 pins = "sdc2_cmd"; 607 drive-strength = <16>; 608 bias-pull-up; 609 }; 610 611 data-pins { 612 pins = "sdc2_data"; 613 drive-strength = <16>; 614 bias-pull-up; 615 }; 616 }; 617 618 mdm2ap_default: mdm2ap-default-state { 619 pins = "gpio1", "gpio3"; 620 function = "gpio"; 621 drive-strength = <8>; 622 bias-disable; 623 }; 624 625 ts_int_default: ts-int-default-state { 626 pins = "gpio39"; 627 function = "gpio"; 628 drive-strength = <2>; 629 bias-disable; 630 input-enable; 631 }; 632 633 ap2mdm_default: ap2mdm-default-state { 634 pins = "gpio56", "gpio57"; 635 function = "gpio"; 636 drive-strength = <16>; 637 bias-disable; 638 }; 639 640 sdc2_card_det_n: sd-card-det-n-state { 641 pins = "gpio77"; 642 function = "gpio"; 643 bias-pull-up; 644 drive-strength = <2>; 645 }; 646}; 647 648&uart12 { 649 status = "okay"; 650}; 651 652/* BIG WARNING! DO NOT TOUCH UFS, YOUR DEVICE WILL DIE! */ 653&ufs_mem_hc { status = "disabled"; }; 654&ufs_mem_phy { status = "disabled"; }; 655 656&usb_1 { 657 status = "okay"; 658}; 659 660&usb_1_dwc3 { 661 dr_mode = "peripheral"; 662}; 663 664&usb_1_hsphy { 665 status = "okay"; 666 667 vdda-pll-supply = <&vreg_l5a_0p88>; 668 vdda18-supply = <&vreg_l12a_1p8>; 669 vdda33-supply = <&vreg_l2a_3p1>; 670}; 671 672&usb_1_qmpphy { 673 status = "okay"; 674 675 vdda-phy-supply = <&vreg_l9a_1p2>; 676 vdda-pll-supply = <&vreg_l18a_0p9>; 677}; 678