1 // SPDX-License-Identifier: GPL-2.0-only << 2 /* 1 /* 3 * Copyright (c) 2015, The Linux Foundation. A 2 * Copyright (c) 2015, The Linux Foundation. All rights reserved. >> 3 * >> 4 * This program is free software; you can redistribute it and/or modify >> 5 * it under the terms of the GNU General Public License version 2 and >> 6 * only version 2 as published by the Free Software Foundation. >> 7 * >> 8 * This program is distributed in the hope that it will be useful, >> 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of >> 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> 11 * GNU General Public License for more details. 4 */ 12 */ 5 13 6 /dts-v1/; 14 /dts-v1/; 7 15 8 #include "msm8916-pm8916.dtsi" !! 16 #include "apq8016-sbc.dtsi" 9 #include <dt-bindings/gpio/gpio.h> << 10 #include <dt-bindings/input/input.h> << 11 #include <dt-bindings/leds/common.h> << 12 #include <dt-bindings/pinctrl/qcom,pmic-gpio.h << 13 #include <dt-bindings/pinctrl/qcom,pmic-mpp.h> << 14 #include <dt-bindings/sound/apq8016-lpass.h> << 15 17 16 / { 18 / { 17 model = "Qualcomm Technologies, Inc. A 19 model = "Qualcomm Technologies, Inc. APQ 8016 SBC"; 18 compatible = "qcom,apq8016-sbc", "qcom !! 20 compatible = "qcom,apq8016-sbc", "qcom,apq8016", "qcom,sbc"; 19 << 20 aliases { << 21 mmc0 = &sdhc_1; /* eMMC */ << 22 mmc1 = &sdhc_2; /* SD card */ << 23 serial0 = &blsp_uart2; << 24 serial1 = &blsp_uart1; << 25 usid0 = &pm8916_0; << 26 i2c0 = &blsp_i2c2; << 27 i2c1 = &blsp_i2c6; << 28 i2c3 = &blsp_i2c4; << 29 spi0 = &blsp_spi5; << 30 spi1 = &blsp_spi3; << 31 }; << 32 << 33 chosen { << 34 stdout-path = "serial0"; << 35 }; << 36 << 37 reserved-memory { << 38 ramoops@bff00000 { << 39 compatible = "ramoops" << 40 reg = <0x0 0xbff00000 << 41 << 42 record-size = <0x20000 << 43 console-size = <0x2000 << 44 ftrace-size = <0x20000 << 45 }; << 46 }; << 47 << 48 usb2513 { << 49 compatible = "smsc,usb3503"; << 50 reset-gpios = <&pm8916_gpios 3 << 51 initial-mode = <1>; << 52 }; << 53 << 54 usb_id: usb-id { << 55 compatible = "linux,extcon-usb << 56 id-gpios = <&tlmm 121 GPIO_ACT << 57 pinctrl-names = "default"; << 58 pinctrl-0 = <&usb_id_default>; << 59 }; << 60 << 61 hdmi-out { << 62 compatible = "hdmi-connector"; << 63 type = "a"; << 64 << 65 port { << 66 hdmi_con: endpoint { << 67 remote-endpoin << 68 }; << 69 }; << 70 }; << 71 << 72 gpio-keys { << 73 compatible = "gpio-keys"; << 74 autorepeat; << 75 << 76 pinctrl-names = "default"; << 77 pinctrl-0 = <&msm_key_volp_n_d << 78 << 79 button { << 80 label = "Volume Up"; << 81 linux,code = <KEY_VOLU << 82 gpios = <&tlmm 107 GPI << 83 }; << 84 }; << 85 << 86 leds { << 87 pinctrl-names = "default"; << 88 pinctrl-0 = <&tlmm_leds>, << 89 <&pm8916_gpios_led << 90 <&pm8916_mpps_leds << 91 << 92 compatible = "gpio-leds"; << 93 << 94 led-1 { << 95 label = "apq8016-sbc:g << 96 function = LED_FUNCTIO << 97 color = <LED_COLOR_ID_ << 98 gpios = <&tlmm 21 GPIO << 99 linux,default-trigger << 100 default-state = "off"; << 101 }; << 102 << 103 led-2 { << 104 label = "apq8016-sbc:g << 105 function = LED_FUNCTIO << 106 color = <LED_COLOR_ID_ << 107 gpios = <&tlmm 120 GPI << 108 linux,default-trigger << 109 default-state = "off"; << 110 }; << 111 << 112 led-3 { << 113 label = "apq8016-sbc:g << 114 function = LED_FUNCTIO << 115 color = <LED_COLOR_ID_ << 116 gpios = <&pm8916_gpios << 117 linux,default-trigger << 118 default-state = "off"; << 119 }; << 120 << 121 led-4 { << 122 label = "apq8016-sbc:g << 123 color = <LED_COLOR_ID_ << 124 gpios = <&pm8916_gpios << 125 linux,default-trigger << 126 panic-indicator; << 127 default-state = "off"; << 128 }; << 129 << 130 led-5 { << 131 label = "apq8016-sbc:y << 132 function = LED_FUNCTIO << 133 color = <LED_COLOR_ID_ << 134 gpios = <&pm8916_mpps << 135 linux,default-trigger << 136 default-state = "off"; << 137 }; << 138 << 139 led-6 { << 140 label = "apq8016-sbc:b << 141 function = LED_FUNCTIO << 142 color = <LED_COLOR_ID_ << 143 gpios = <&pm8916_mpps << 144 linux,default-trigger << 145 default-state = "off"; << 146 }; << 147 }; << 148 }; << 149 << 150 &blsp_i2c2 { << 151 /* On Low speed expansion: LS-I2C0 */ << 152 status = "okay"; << 153 }; << 154 << 155 &blsp_i2c4 { << 156 /* On High speed expansion: HS-I2C2 */ << 157 status = "okay"; << 158 << 159 adv_bridge: bridge@39 { << 160 status = "okay"; << 161 << 162 compatible = "adi,adv7533"; << 163 reg = <0x39>; << 164 << 165 interrupt-parent = <&tlmm>; << 166 interrupts = <31 IRQ_TYPE_EDGE << 167 << 168 adi,dsi-lanes = <4>; << 169 clocks = <&rpmcc RPM_SMD_BB_CL << 170 clock-names = "cec"; << 171 << 172 pd-gpios = <&tlmm 32 GPIO_ACTI << 173 << 174 avdd-supply = <&pm8916_l6>; << 175 a2vdd-supply = <&pm8916_l6>; << 176 dvdd-supply = <&pm8916_l6>; << 177 pvdd-supply = <&pm8916_l6>; << 178 v1p2-supply = <&pm8916_l6>; << 179 v3p3-supply = <&pm8916_l17>; << 180 << 181 pinctrl-names = "default","sle << 182 pinctrl-0 = <&adv7533_int_acti << 183 pinctrl-1 = <&adv7533_int_susp << 184 #sound-dai-cells = <1>; << 185 << 186 ports { << 187 #address-cells = <1>; << 188 #size-cells = <0>; << 189 << 190 port@0 { << 191 reg = <0>; << 192 adv7533_in: en << 193 remote << 194 }; << 195 }; << 196 << 197 port@1 { << 198 reg = <1>; << 199 adv7533_out: e << 200 remote << 201 }; << 202 }; << 203 }; << 204 }; << 205 }; << 206 << 207 &blsp_i2c6 { << 208 /* On Low speed expansion: LS-I2C1 */ << 209 status = "okay"; << 210 }; << 211 << 212 &blsp_spi3 { << 213 /* On High speed expansion: HS-SPI1 */ << 214 status = "okay"; << 215 }; << 216 << 217 &blsp_spi5 { << 218 /* On Low speed expansion: LS-SPI0 */ << 219 status = "okay"; << 220 }; << 221 << 222 &blsp_uart1 { << 223 status = "okay"; << 224 label = "LS-UART0"; << 225 }; << 226 << 227 &blsp_uart2 { << 228 status = "okay"; << 229 label = "LS-UART1"; << 230 }; << 231 << 232 &camss { << 233 status = "okay"; << 234 }; << 235 << 236 &gpu { << 237 status = "okay"; << 238 }; << 239 << 240 &lpass { << 241 status = "okay"; << 242 }; << 243 << 244 &lpass_codec { << 245 status = "okay"; << 246 }; << 247 << 248 &mba_mem { << 249 status = "okay"; << 250 }; << 251 << 252 &mdss { << 253 status = "okay"; << 254 }; << 255 << 256 &mdss_dsi0_out { << 257 data-lanes = <0 1 2 3>; << 258 remote-endpoint = <&adv7533_in>; << 259 }; << 260 << 261 &mpss { << 262 status = "okay"; << 263 << 264 firmware-name = "qcom/apq8016/mba.mbn" << 265 }; << 266 << 267 &mpss_mem { << 268 status = "okay"; << 269 reg = <0x0 0x86800000 0x0 0x2b00000>; << 270 }; << 271 << 272 &pm8916_codec { << 273 status = "okay"; << 274 qcom,mbhc-vthreshold-low = <75 150 237 << 275 qcom,mbhc-vthreshold-high = <75 150 23 << 276 }; << 277 << 278 &pm8916_resin { << 279 status = "okay"; << 280 linux,code = <KEY_VOLUMEDOWN>; << 281 }; << 282 << 283 &pm8916_rpm_regulators { << 284 /* << 285 * The 96Boards specification expects << 286 * expansion connector that is able to << 287 * L15/L16 are connected in parallel t << 288 * must be specified to ensure the reg << 289 * would only provide 5 mA. << 290 */ << 291 pm8916_l15: l15 { << 292 regulator-min-microvolt = <180 << 293 regulator-max-microvolt = <180 << 294 regulator-system-load = <50000 << 295 regulator-allow-set-load; << 296 regulator-always-on; << 297 }; << 298 pm8916_l16: l16 { << 299 regulator-min-microvolt = <180 << 300 regulator-max-microvolt = <180 << 301 regulator-system-load = <50000 << 302 regulator-allow-set-load; << 303 regulator-always-on; << 304 }; << 305 << 306 pm8916_l17: l17 { << 307 regulator-min-microvolt = <330 << 308 regulator-max-microvolt = <330 << 309 }; << 310 }; << 311 << 312 &sdhc_1 { << 313 status = "okay"; << 314 }; << 315 << 316 &sdhc_2 { << 317 status = "okay"; << 318 << 319 pinctrl-names = "default", "sleep"; << 320 pinctrl-0 = <&sdc2_default &sdc2_cd_de << 321 pinctrl-1 = <&sdc2_sleep &sdc2_cd_defa << 322 << 323 cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; << 324 }; << 325 << 326 &sound { << 327 status = "okay"; << 328 << 329 pinctrl-0 = <&cdc_pdm_default &sec_mi2 << 330 pinctrl-1 = <&cdc_pdm_sleep &sec_mi2s_ << 331 pinctrl-names = "default", "sleep"; << 332 model = "DB410c"; << 333 audio-routing = << 334 "AMIC2", "MIC BIAS Internal2", << 335 "AMIC3", "MIC BIAS External1"; << 336 << 337 quaternary-dai-link { << 338 link-name = "ADV7533"; << 339 cpu { << 340 sound-dai = <&lpass MI << 341 }; << 342 codec { << 343 sound-dai = <&adv_brid << 344 }; << 345 }; << 346 << 347 primary-dai-link { << 348 link-name = "WCD"; << 349 cpu { << 350 sound-dai = <&lpass MI << 351 }; << 352 codec { << 353 sound-dai = <&lpass_co << 354 }; << 355 }; << 356 << 357 tertiary-dai-link { << 358 link-name = "WCD-Capture"; << 359 cpu { << 360 sound-dai = <&lpass MI << 361 }; << 362 codec { << 363 sound-dai = <&lpass_co << 364 }; << 365 }; << 366 }; << 367 << 368 &usb { << 369 status = "okay"; << 370 extcon = <&usb_id>, <&usb_id>; << 371 << 372 pinctrl-names = "default", "device"; << 373 pinctrl-0 = <&usb_sw_sel_pm &usb_hub_r << 374 pinctrl-1 = <&usb_sw_sel_pm_device &us << 375 }; << 376 << 377 &usb_hs_phy { << 378 extcon = <&usb_id>; << 379 }; << 380 << 381 &venus { << 382 status = "okay"; << 383 }; << 384 << 385 &venus_mem { << 386 status = "okay"; << 387 }; << 388 << 389 &wcnss { << 390 status = "okay"; << 391 firmware-name = "qcom/apq8016/wcnss.mb << 392 }; << 393 << 394 &wcnss_ctrl { << 395 firmware-name = "qcom/apq8016/WCNSS_qc << 396 }; << 397 << 398 &wcnss_iris { << 399 compatible = "qcom,wcn3620"; << 400 }; << 401 << 402 &wcnss_mem { << 403 status = "okay"; << 404 }; << 405 << 406 /* Enable CoreSight */ << 407 &cti0 { status = "okay"; }; << 408 &cti1 { status = "okay"; }; << 409 &cti12 { status = "okay"; }; << 410 &cti13 { status = "okay"; }; << 411 &cti14 { status = "okay"; }; << 412 &cti15 { status = "okay"; }; << 413 &debug0 { status = "okay"; }; << 414 &debug1 { status = "okay"; }; << 415 &debug2 { status = "okay"; }; << 416 &debug3 { status = "okay"; }; << 417 &etf { status = "okay"; }; << 418 &etm0 { status = "okay"; }; << 419 &etm1 { status = "okay"; }; << 420 &etm2 { status = "okay"; }; << 421 &etm3 { status = "okay"; }; << 422 &etr { status = "okay"; }; << 423 &funnel0 { status = "okay"; }; << 424 &funnel1 { status = "okay"; }; << 425 &replicator { status = "okay"; }; << 426 &stm { status = "okay"; }; << 427 &tpiu { status = "okay"; }; << 428 << 429 /* << 430 * 2mA drive strength is not enough when conne << 431 * I2C devices with different pull up resistor << 432 */ << 433 &blsp_i2c2_default { << 434 drive-strength = <16>; << 435 }; << 436 << 437 &blsp_i2c4_default { << 438 drive-strength = <16>; << 439 }; << 440 << 441 &blsp_i2c6_default { << 442 drive-strength = <16>; << 443 }; << 444 << 445 /* << 446 * GPIO name legend: proper name = the GPIO li << 447 * NC = not connected (pin out but not << 448 * anything the board) << 449 * "[PER]" = pin is muxed for [periphe << 450 * LSEC = Low Speed External Connector << 451 * HSEC = High Speed External Connecto << 452 * << 453 * Line names are taken from the schematic "Dr << 454 * dated monday, august 31, 2015. Page 5 in pa << 455 * << 456 * For the lines routed to the external connec << 457 * lines are named after the 96Boards CE Speci << 458 * Appendix "Expansion Connector Signal Descri << 459 * << 460 * When the 96Board naming of a line and the s << 461 * the same line are in conflict, the 96Board << 462 * takes precedence, which means that the exte << 463 * LSEC is named UART0 while the schematic and << 464 * UART3. This is only for the informational l << 465 * the GPIO named lines "GPIO-A" thru "GPIO-L" << 466 * ones actually used for GPIO. << 467 */ << 468 << 469 &tlmm { << 470 gpio-line-names = << 471 "[UART0_TX]", /* GPIO_0, LSEC << 472 "[UART0_RX]", /* GPIO_1, LSEC << 473 "[UART0_CTS_N]", /* GPIO_2, LS << 474 "[UART0_RTS_N]", /* GPIO_3, LS << 475 "[UART1_TX]", /* GPIO_4, LSEC << 476 "[UART1_RX]", /* GPIO_5, LSEC << 477 "[I2C0_SDA]", /* GPIO_8, LSEC << 478 "[I2C0_SCL]", /* GPIO_7, LSEC << 479 "[SPI1_DOUT]", /* SPI1_MOSI, H << 480 "[SPI1_DIN]", /* SPI1_MISO, HS << 481 "[SPI1_CS]", /* SPI1_CS_N, HSE << 482 "[SPI1_SCLK]", /* SPI1_CLK, HS << 483 "GPIO-B", /* LS_EXP_GPIO_B, LS << 484 "GPIO-C", /* LS_EXP_GPIO_C, LS << 485 "[I2C3_SDA]", /* HSEC pin 38 * << 486 "[I2C3_SCL]", /* HSEC pin 36 * << 487 "[SPI0_MOSI]", /* LSEC pin 14 << 488 "[SPI0_MISO]", /* LSEC pin 10 << 489 "[SPI0_CS_N]", /* LSEC pin 12 << 490 "[SPI0_CLK]", /* LSEC pin 8 */ << 491 "HDMI_HPD_N", /* GPIO 20 */ << 492 "USR_LED_1_CTRL", << 493 "[I2C1_SDA]", /* GPIO_22, LSEC << 494 "[I2C1_SCL]", /* GPIO_23, LSEC << 495 "GPIO-G", /* LS_EXP_GPIO_G, LS << 496 "GPIO-H", /* LS_EXP_GPIO_H, LS << 497 "[CSI0_MCLK]", /* HSEC pin 15 << 498 "[CSI1_MCLK]", /* HSEC pin 17 << 499 "GPIO-K", /* LS_EXP_GPIO_K, LS << 500 "[I2C2_SDA]", /* HSEC pin 34 * << 501 "[I2C2_SCL]", /* HSEC pin 32 * << 502 "DSI2HDMI_INT_N", << 503 "DSI_SW_SEL_APQ", << 504 "GPIO-L", /* LS_EXP_GPIO_L, LS << 505 "GPIO-J", /* LS_EXP_GPIO_J, LS << 506 "GPIO-I", /* LS_EXP_GPIO_I, LS << 507 "GPIO-A", /* LS_EXP_GPIO_A, LS << 508 "FORCED_USB_BOOT", << 509 "SD_CARD_DET_N", << 510 "[WCSS_BT_SSBI]", << 511 "[WCSS_WLAN_DATA_2]", /* GPIO << 512 "[WCSS_WLAN_DATA_1]", << 513 "[WCSS_WLAN_DATA_0]", << 514 "[WCSS_WLAN_SET]", << 515 "[WCSS_WLAN_CLK]", << 516 "[WCSS_FM_SSBI]", << 517 "[WCSS_FM_SDI]", << 518 "[WCSS_BT_DAT_CTL]", << 519 "[WCSS_BT_DAT_STB]", << 520 "NC", << 521 "NC", /* GPIO 50 */ << 522 "NC", << 523 "NC", << 524 "NC", << 525 "NC", << 526 "NC", << 527 "NC", << 528 "NC", << 529 "NC", << 530 "NC", << 531 "NC", /* GPIO 60 */ << 532 "NC", << 533 "NC", << 534 "[CDC_PDM0_CLK]", << 535 "[CDC_PDM0_SYNC]", << 536 "[CDC_PDM0_TX0]", << 537 "[CDC_PDM0_RX0]", << 538 "[CDC_PDM0_RX1]", << 539 "[CDC_PDM0_RX2]", << 540 "GPIO-D", /* LS_EXP_GPIO_D, LS << 541 "NC", /* GPIO 70 */ << 542 "NC", << 543 "NC", << 544 "NC", << 545 "NC", /* GPIO 74 */ << 546 "NC", << 547 "NC", << 548 "NC", << 549 "NC", << 550 "NC", << 551 "BOOT_CONFIG_0", /* GPIO 80 */ << 552 "BOOT_CONFIG_1", << 553 "BOOT_CONFIG_2", << 554 "BOOT_CONFIG_3", << 555 "NC", << 556 "NC", << 557 "BOOT_CONFIG_5", << 558 "NC", << 559 "NC", << 560 "NC", << 561 "NC", /* GPIO 90 */ << 562 "NC", << 563 "NC", << 564 "NC", << 565 "NC", << 566 "NC", << 567 "NC", << 568 "NC", << 569 "NC", << 570 "NC", << 571 "NC", /* GPIO 100 */ << 572 "NC", << 573 "NC", << 574 "NC", << 575 "SSBI_GPS", << 576 "NC", << 577 "NC", << 578 "KEY_VOLP_N", << 579 "NC", << 580 "NC", << 581 "[LS_EXP_MI2S_WS]", /* GPIO 11 << 582 "NC", << 583 "NC", << 584 "[LS_EXP_MI2S_SCK]", << 585 "[LS_EXP_MI2S_DATA0]", << 586 "GPIO-E", /* LS_EXP_GPIO_E, LS << 587 "NC", << 588 "[DSI2HDMI_MI2S_WS]", << 589 "[DSI2HDMI_MI2S_SCK]", << 590 "[DSI2HDMI_MI2S_DATA0]", << 591 "USR_LED_2_CTRL", /* GPIO 120 << 592 "SB_HS_ID"; << 593 << 594 sdc2_cd_default: sdc2-cd-default-state << 595 pins = "gpio38"; << 596 function = "gpio"; << 597 drive-strength = <2>; << 598 bias-disable; << 599 }; << 600 << 601 tlmm_leds: tlmm-leds-state { << 602 pins = "gpio21", "gpio120"; << 603 function = "gpio"; << 604 << 605 output-low; << 606 }; << 607 << 608 usb_id_default: usb-id-default-state { << 609 pins = "gpio121"; << 610 function = "gpio"; << 611 << 612 drive-strength = <8>; << 613 bias-pull-up; << 614 }; << 615 << 616 adv7533_int_active: adv533-int-active- << 617 pins = "gpio31"; << 618 function = "gpio"; << 619 << 620 drive-strength = <16>; << 621 bias-disable; << 622 }; << 623 << 624 adv7533_int_suspend: adv7533-int-suspe << 625 pins = "gpio31"; << 626 function = "gpio"; << 627 << 628 drive-strength = <2>; << 629 bias-disable; << 630 }; << 631 << 632 adv7533_switch_active: adv7533-switch- << 633 pins = "gpio32"; << 634 function = "gpio"; << 635 << 636 drive-strength = <16>; << 637 bias-disable; << 638 }; << 639 << 640 adv7533_switch_suspend: adv7533-switch << 641 pins = "gpio32"; << 642 function = "gpio"; << 643 << 644 drive-strength = <2>; << 645 bias-disable; << 646 }; << 647 << 648 msm_key_volp_n_default: msm-key-volp-n << 649 pins = "gpio107"; << 650 function = "gpio"; << 651 << 652 drive-strength = <8>; << 653 bias-pull-up; << 654 }; << 655 }; << 656 << 657 &pm8916_gpios { << 658 gpio-line-names = << 659 "USR_LED_3_CTRL", << 660 "USR_LED_4_CTRL", << 661 "USB_HUB_RESET_N_PM", << 662 "USB_SW_SEL_PM"; << 663 << 664 usb_hub_reset_pm: usb-hub-reset-pm-sta << 665 pins = "gpio3"; << 666 function = PMIC_GPIO_FUNC_NORM << 667 << 668 input-disable; << 669 output-high; << 670 }; << 671 << 672 usb_hub_reset_pm_device: usb-hub-reset << 673 pins = "gpio3"; << 674 function = PMIC_GPIO_FUNC_NORM << 675 << 676 output-low; << 677 }; << 678 << 679 usb_sw_sel_pm: usb-sw-sel-pm-state { << 680 pins = "gpio4"; << 681 function = PMIC_GPIO_FUNC_NORM << 682 << 683 power-source = <PM8916_GPIO_VP << 684 input-disable; << 685 output-high; << 686 }; << 687 << 688 usb_sw_sel_pm_device: usb-sw-sel-pm-de << 689 pins = "gpio4"; << 690 function = PMIC_GPIO_FUNC_NORM << 691 << 692 power-source = <PM8916_GPIO_VP << 693 input-disable; << 694 output-low; << 695 }; << 696 << 697 pm8916_gpios_leds: pm8916-gpios-leds-s << 698 pins = "gpio1", "gpio2"; << 699 function = PMIC_GPIO_FUNC_NORM << 700 << 701 output-low; << 702 }; << 703 }; << 704 << 705 &pm8916_mpps { << 706 gpio-line-names = << 707 "VDD_PX_BIAS", << 708 "WLAN_LED_CTRL", << 709 "BT_LED_CTRL", << 710 "GPIO-F"; /* LS_EXP_GPIO_F, LS << 711 << 712 pinctrl-names = "default"; << 713 pinctrl-0 = <&ls_exp_gpio_f>; << 714 << 715 ls_exp_gpio_f: pm8916-mpp4-state { << 716 pins = "mpp4"; << 717 function = "digital"; << 718 << 719 output-low; << 720 power-source = <PM8916_MPP_L5> << 721 }; << 722 << 723 pm8916_mpps_leds: pm8916-mpps-state { << 724 pins = "mpp2", "mpp3"; << 725 function = "digital"; << 726 << 727 output-low; << 728 }; << 729 }; 21 };
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.