Part 1
요약·해설
공식 예제 3개, API group 전체와 Zephyr chosen property 표 31행을 보존했습니다.
ID · PROP · REG · IRQ
DT_DRV_COMPAT
CAN · DMA · GPIO · SPI
31 properties
Part 2
접을 수 있는 영어 원문 전체
영어 원문 전체 펼치기
8A474A4CDA8F9A595C714FA0E3EDF503E30FA432467E1130987D78827665FEFA
.. _devicetree_api:
Devicetree API
##############
This is a reference page for the ``<zephyr/devicetree.h>`` API. The API is macro
based. Use of these macros has no impact on scheduling. They can be used from
any calling context and at file scope.
Some of these -- the ones beginning with ``DT_INST_`` -- require a special
macro named ``DT_DRV_COMPAT`` to be defined before they can be used; these are
discussed individually below. These macros are generally meant for use within
:ref:`device drivers <device_model_api>`, though they can be used outside of
drivers with appropriate care.
.. contents:: Contents
:local:
.. _devicetree-generic-apis:
Generic APIs
************
The APIs in this section can be used anywhere and do not require
``DT_DRV_COMPAT`` to be defined.
Node identifiers and helpers
============================
A *node identifier* is a way to refer to a devicetree node at C preprocessor
time. While node identifiers are not C values, you can use them to access
devicetree data in C rvalue form using, for example, the
:ref:`devicetree-property-access` API.
The root node ``/`` has node identifier ``DT_ROOT``. You can create node
identifiers for other devicetree nodes using :c:func:`DT_PATH`,
:c:func:`DT_NODELABEL`, :c:func:`DT_ALIAS`, and :c:func:`DT_INST`.
There are also :c:func:`DT_PARENT` and :c:func:`DT_CHILD` macros which can be
used to create node identifiers for a given node's parent node or a particular
child node, respectively.
The following macros create or operate on node identifiers.
.. doxygengroup:: devicetree-generic-id
.. _devicetree-property-access:
Property access
===============
The following general-purpose macros can be used to access node properties.
There are special-purpose APIs for accessing the :ref:`devicetree-ranges-property`,
:ref:`devicetree-reg-property` and :ref:`devicetree-interrupts-property`.
Property values can be read using these macros even if the node is disabled,
as long as it has a matching binding.
.. doxygengroup:: devicetree-generic-prop
.. _devicetree-ranges-property:
``ranges`` property
===================
Use these APIs instead of :ref:`devicetree-property-access` to access the
``ranges`` property. Because this property's semantics are defined by the
devicetree specification, these macros can be used even for nodes without
matching bindings. However, they take on special semantics when the node's
binding indicates it is a PCIe bus node, as defined in the
`PCI Bus Binding to: IEEE Std 1275-1994 Standard for Boot (Initialization Configuration) Firmware`_
.. _PCI Bus Binding to\: IEEE Std 1275-1994 Standard for Boot (Initialization Configuration) Firmware:
https://www.openfirmware.info/data/docs/bus.pci.pdf
.. doxygengroup:: devicetree-ranges-prop
.. _devicetree-reg-property:
``reg`` property
================
Use these APIs instead of :ref:`devicetree-property-access` to access the
``reg`` property. Because this property's semantics are defined by the
devicetree specification, these macros can be used even for nodes without
matching bindings.
.. doxygengroup:: devicetree-reg-prop
.. _devicetree-interrupts-property:
``interrupts`` property
=======================
Use these APIs instead of :ref:`devicetree-property-access` to access the
``interrupts`` property.
Because this property's semantics are defined by the devicetree specification,
some of these macros can be used even for nodes without matching bindings. This
does not apply to macros which take cell names as arguments.
.. doxygengroup:: devicetree-interrupts-prop
For-each macros
===============
There is currently only one "generic" for-each macro,
:c:func:`DT_FOREACH_CHILD`, which allows iterating over the children of a
devicetree node.
There are special-purpose for-each macros, like
:c:func:`DT_INST_FOREACH_STATUS_OKAY`, but these require ``DT_DRV_COMPAT`` to
be defined before use.
.. doxygengroup:: devicetree-generic-foreach
Existence checks
================
This section documents miscellaneous macros that can be used to test if a node
exists, how many nodes of a certain type exist, whether a node has certain
properties, etc. Some macros used for special purposes (such as
:c:func:`DT_IRQ_HAS_IDX` and all macros which require ``DT_DRV_COMPAT``) are
documented elsewhere on this page.
.. doxygengroup:: devicetree-generic-exist
.. _devicetree-dep-ord:
Inter-node dependencies
=======================
The ``devicetree.h`` API has some support for tracking dependencies between
nodes. Dependency tracking relies on a binary "depends on" relation between
devicetree nodes, which is defined as the `transitive closure
<https://en.wikipedia.org/wiki/Transitive_closure>`_ of the following "directly
depends on" relation:
- every non-root node directly depends on its parent node
- a node directly depends on any nodes its properties refer to by phandle
- a node directly depends on its ``interrupt-parent`` if it has an
``interrupts`` property
- a parent node inherits all dependencies from its child nodes
A *dependency ordering* of a devicetree is a list of its nodes, where each node
``n`` appears earlier in the list than any nodes that depend on ``n``. A node's
*dependency ordinal* is then its zero-based index in that list. Thus, for two
distinct devicetree nodes ``n1`` and ``n2`` with dependency ordinals ``d1`` and
``d2``, we have:
- ``d1 != d2``
- if ``n1`` depends on ``n2``, then ``d1 > d2``
- ``d1 > d2`` does **not** necessarily imply that ``n1`` depends on ``n2``
The Zephyr build system chooses a dependency ordering of the final devicetree
and assigns a dependency ordinal to each node. Dependency related information
can be accessed using the following macros. The exact dependency ordering
chosen is an implementation detail, but cyclic dependencies are detected and
cause errors, so it's safe to assume there are none when using these macros.
There are instance number-based conveniences as well; see
:c:func:`DT_INST_DEP_ORD` and subsequent documentation.
.. doxygengroup:: devicetree-dep-ord
Bus helpers
===========
Zephyr's devicetree bindings language supports a ``bus:`` key which allows
bindings to declare that nodes with a given compatible describe system buses.
In this case, child nodes are considered to be on a bus of the given type, and
the following APIs may be used.
.. doxygengroup:: devicetree-generic-bus
.. _devicetree-inst-apis:
Instance-based APIs
*******************
These are recommended for use within device drivers. To use them, define
``DT_DRV_COMPAT`` to the lowercase-and-underscores compatible the device driver
implements support for. Here is an example devicetree fragment:
.. code-block:: devicetree
serial@40001000 {
compatible = "vnd,serial";
status = "okay";
current-speed = <115200>;
};
Example usage, assuming ``serial@40001000`` is the only enabled node
with compatible ``vnd,serial``:
.. code-block:: c
#define DT_DRV_COMPAT vnd_serial
DT_DRV_INST(0) // node identifier for serial@40001000
DT_INST_PROP(0, current_speed) // 115200
.. warning::
Be careful making assumptions about instance numbers. See :c:func:`DT_INST`
for the API guarantees.
As shown above, the ``DT_INST_*`` APIs are conveniences for addressing nodes by
instance number. They are almost all defined in terms of one of the
:ref:`devicetree-generic-apis`. The equivalent generic API can be found by
removing ``INST_`` from the macro name. For example, ``DT_INST_PROP(inst,
prop)`` is equivalent to ``DT_PROP(DT_DRV_INST(inst), prop)``. Similarly,
``DT_INST_REG_ADDR(inst)`` is equivalent to ``DT_REG_ADDR(DT_DRV_INST(inst))``,
and so on. There are some exceptions: :c:func:`DT_ANY_INST_ON_BUS_STATUS_OKAY`
and :c:func:`DT_INST_FOREACH_STATUS_OKAY` are special-purpose helpers without
straightforward generic equivalents.
Since ``DT_DRV_INST()`` requires ``DT_DRV_COMPAT`` to be defined, it's an error
to use any of these without that macro defined.
Note that there are also helpers available for
specific hardware; these are documented in :ref:`devicetree-hw-api`.
.. doxygengroup:: devicetree-inst
.. _devicetree-hw-api:
Hardware specific APIs
**********************
The following APIs can also be used by including ``<devicetree.h>``;
no additional include is needed.
.. _devicetree-can-api:
CAN
===
These conveniences may be used for nodes which describe CAN
controllers/transceivers, and properties related to them.
.. doxygengroup:: devicetree-can
Clocks
======
These conveniences may be used for nodes which describe clock sources, and
properties related to them.
.. doxygengroup:: devicetree-clocks
DMA
===
These conveniences may be used for nodes which describe direct memory access
controllers or channels, and properties related to them.
.. doxygengroup:: devicetree-dmas
.. _devicetree-flash-api:
Fixed flash partitions
======================
These conveniences may be used for the special-purpose ``fixed-partitions``
compatible used to encode information about flash memory partitions in the
device tree. See See :dtcompatible:`fixed-partition` for more details.
.. doxygengroup:: devicetree-fixed-partition
.. _devicetree-gpio-api:
GPIO
====
These conveniences may be used for nodes which describe GPIO controllers/pins,
and properties related to them.
.. doxygengroup:: devicetree-gpio
IO channels
===========
These are commonly used by device drivers which need to use IO
channels (e.g. ADC or DAC channels) for conversion.
.. doxygengroup:: devicetree-io-channels
.. _devicetree-mbox-api:
MBOX
====
These conveniences may be used for nodes which describe MBOX controllers/users,
and properties related to them.
.. doxygengroup:: devicetree-mbox
.. _devicetree-pinctrl-api:
Pinctrl (pin control)
=====================
These are used to access pin control properties by name or index.
Devicetree nodes may have properties which specify pin control (sometimes known
as pin mux) settings. These are expressed using ``pinctrl-<index>`` properties
within the node, where the ``<index>`` values are contiguous integers starting
from 0. These may also be named using the ``pinctrl-names`` property.
Here is an example:
.. code-block:: DTS
node {
...
pinctrl-0 = <&foo &bar ...>;
pinctrl-1 = <&baz ...>;
pinctrl-names = "default", "sleep";
};
Above, ``pinctrl-0`` has name ``"default"``, and ``pinctrl-1`` has name
``"sleep"``. The ``pinctrl-<index>`` property values contain phandles. The
``&foo``, ``&bar``, etc. phandles within the properties point to nodes whose
contents vary by platform, and which describe a pin configuration for the node.
.. doxygengroup:: devicetree-pinctrl
PWM
===
These conveniences may be used for nodes which describe PWM controllers and
properties related to them.
.. doxygengroup:: devicetree-pwms
Reset Controller
================
These conveniences may be used for nodes which describe reset controllers and
properties related to them.
.. doxygengroup:: devicetree-reset-controller
SPI
===
These conveniences may be used for nodes which describe either SPI controllers
or devices, depending on the case.
.. doxygengroup:: devicetree-spi
.. _devicetree-chosen-nodes:
Chosen nodes
************
The special ``/chosen`` node contains properties whose values describe
system-wide settings. The :c:func:`DT_CHOSEN()` macro can be used to get a node
identifier for a chosen node.
.. doxygengroup:: devicetree-generic-chosen
:project: Zephyr
Zephyr-specific chosen nodes
****************************
The following table documents some commonly used Zephyr-specific chosen nodes.
Sometimes, a chosen node's label property will be used to set the default value
of a Kconfig option which in turn configures a hardware-specific device. This
is usually for backwards compatibility in cases when the Kconfig option
predates devicetree support in Zephyr. In other cases, there is no Kconfig
option, and the devicetree node is used directly in the source code to select a
device.
.. Documentation maintainers: please keep this sorted by property name
.. list-table:: Zephyr-specific chosen properties
:header-rows: 1
:widths: 25 75
* - Property
- Purpose
* - zephyr,bt-c2h-uart
- Selects the UART used for host communication in the
:ref:`bluetooth-hci-uart-sample`
* - zephyr,bt-mon-uart
- Sets UART device used for the Bluetooth monitor logging
* - zephyr,bt-hci
- Selects the HCI device used by the Bluetooth host stack
* - zephyr,canbus
- Sets the default CAN controller
* - zephyr,ccm
- Core-Coupled Memory node on some STM32 SoCs
* - zephyr,code-partition
- Flash partition that the Zephyr image's text section should be linked
into
* - zephyr,console
- Sets UART device used by console driver
* - zephyr,display
- Sets the default display controller
* - zephyr,keyboard-scan
- Sets the default keyboard scan controller
* - zephyr,dtcm
- Data Tightly Coupled Memory node on some Arm SoCs
* - zephyr,entropy
- A device which can be used as a system-wide entropy source
* - zephyr,flash
- A node whose ``reg`` is sometimes used to set the defaults for
:kconfig:option:`CONFIG_FLASH_BASE_ADDRESS` and :kconfig:option:`CONFIG_FLASH_SIZE`
* - zephyr,flash-controller
- The node corresponding to the flash controller device for
the ``zephyr,flash`` node
* - zephyr,gdbstub-uart
- Sets UART device used by the :ref:`gdbstub` subsystem
* - zephyr,ieee802154
- Used by the networking subsystem to set the IEEE 802.15.4 device
* - zephyr,ipc
- Used by the OpenAMP subsystem to specify the inter-process communication
(IPC) device
* - zephyr,ipc_shm
- A node whose ``reg`` is used by the OpenAMP subsystem to determine the
base address and size of the shared memory (SHM) usable for
interprocess-communication (IPC)
* - zephyr,itcm
- Instruction Tightly Coupled Memory node on some Arm SoCs
* - zephyr,log-uart
- Sets the UART device(s) used by the logging subsystem's UART backend.
If defined, the UART log backend would output to the devices listed in this node.
* - zephyr,ocm
- On-chip memory node on Xilinx Zynq-7000 and ZynqMP SoCs
* - zephyr,osdp-uart
- Sets UART device used by OSDP subsystem
* - zephyr,ot-uart
- Used by the OpenThread to specify UART device for Spinel protocol
* - zephyr,pcie-controller
- The node corresponding to the PCIe Controller
* - zephyr,ppp-uart
- Sets UART device used by PPP
* - zephyr,settings-partition
- Fixed partition node. If defined this selects the partition used
by the NVS and FCB settings backends.
* - zephyr,shell-uart
- Sets UART device used by serial shell backend
* - zephyr,sram
- A node whose ``reg`` sets the base address and size of SRAM memory
available to the Zephyr image, used during linking
* - zephyr,tracing-uart
- Sets UART device used by tracing subsystem
* - zephyr,uart-mcumgr
- UART used for :ref:`device_mgmt`
* - zephyr,uart-pipe
- Sets UART device used by serial pipe driver
* - zephyr,usb-device
- USB device node. If defined and has a ``vbus-gpios`` property, these
will be used by the USB subsystem to enable/disable VBUS
Part 3
한국어 전문 번역
Devicetree API
이 페이지는 <zephyr/devicetree.h> macro API의 reference입니다. Macro는 scheduling에 영향을 주지 않으며 어떤 calling context와 file scope에서도 사용할 수 있습니다.
DT_INST_로 시작하는 일부 macro는 사용 전에 DT_DRV_COMPAT을 정의해야 합니다. 주 용도는 device driver지만 주의하면 driver 밖에서도 사용할 수 있습니다.
Generic API
이 절의 API는 어디서든 사용할 수 있고 DT_DRV_COMPAT을 요구하지 않습니다.
Node identifier와 helper
Node identifier는 C preprocessor 시점에 devicetree node를 참조하는 방법입니다. C value는 아니지만 property access API로 devicetree data를 C rvalue 형태로 얻을 수 있습니다.
Root node /의 identifier는 DT_ROOT입니다. 다른 node는 DT_PATH, DT_NODELABEL, DT_ALIAS, DT_INST로 만들고, parent와 child는 DT_PARENT, DT_CHILD로 만듭니다. 이 macro 묶음의 Doxygen group은 devicetree-generic-id입니다.
Property access
General-purpose macro는 node property를 읽습니다. ranges, reg, interrupts에는 별도 API가 있습니다. Node가 disabled 상태여도 matching binding이 있으면 property 값을 읽을 수 있습니다. Group: devicetree-generic-prop.
ranges property
Devicetree specification이 의미를 정의하므로 matching binding이 없는 node에도 사용할 수 있습니다. 다만 binding이 PCIe bus node라고 선언하면 IEEE 1275 PCI Bus Binding에 따른 special semantics를 적용합니다. Group: devicetree-ranges-prop.
reg property
General property API 대신 전용 macro를 사용합니다. Devicetree specification이 의미를 정의하므로 matching binding이 없어도 사용할 수 있습니다. Group: devicetree-reg-prop.
interrupts property
전용 API를 사용합니다. Specification이 정의한 부분은 binding이 없어도 접근할 수 있지만 cell 이름을 argument로 받는 macro에는 matching binding이 필요합니다. Group: devicetree-interrupts-prop.
For-each macro
현재 generic for-each는 node의 child를 순회하는 DT_FOREACH_CHILD 하나입니다. DT_INST_FOREACH_STATUS_OKAY 같은 전용 macro는 DT_DRV_COMPAT 정의가 필요합니다. Group: devicetree-generic-foreach.
존재 검사
Node 존재 여부, 특정 type의 node 수, property 보유 여부 등을 검사하는 macro입니다. DT_IRQ_HAS_IDX 같은 special-purpose macro와 instance API는 각 관련 절에 따로 설명됩니다. Group: devicetree-generic-exist.
Node 사이 dependency
devicetree.h는 node dependency 추적을 지원합니다. Binary ‘depends on’ relation은 다음 direct dependency의 transitive closure입니다.
- Root가 아닌 모든 node는 parent에 직접 의존합니다.
- Property가 phandle로 참조하는 모든 node에 직접 의존합니다.
interruptsproperty가 있으면interrupt-parent에 직접 의존합니다.- Parent node는 child의 모든 dependency를 상속합니다.
Dependency ordering은 어떤 node n도 자신에게 의존하는 node보다 앞에 오는 목록입니다. Dependency ordinal은 그 목록의 zero-based index입니다. 서로 다른 n1/n2의 ordinal d1/d2는 같지 않고, n1이 n2에 의존하면 d1 > d2입니다. 반대로 d1 > d2라는 사실만으로 dependency를 뜻하지는 않습니다.
Build system이 최종 devicetree ordering을 선택해 ordinal을 할당합니다. 정확한 순서는 implementation detail이지만 cycle은 error로 검출됩니다. Instance convenience로 DT_INST_DEP_ORD도 있습니다. Group: devicetree-dep-ord.
Bus helper
Binding의 bus: key가 compatible node를 system bus로 선언하면 child node를 해당 bus 위의 device로 간주하고 bus helper를 사용할 수 있습니다. Group: devicetree-generic-bus.
Instance 기반 API
Device driver 안에서는 이 API를 권장합니다. Driver가 지원하는 compatible을 lowercase+underscore로 바꿔 DT_DRV_COMPAT에 정의합니다.
serial@40001000 {
compatible = "vnd,serial";
status = "okay";
current-speed = <115200>;
};vnd,serial compatible의 enabled node가 하나뿐이라면 다음과 같이 사용합니다.
#define DT_DRV_COMPAT vnd_serial
DT_DRV_INST(0) // node identifier for serial@40001000
DT_INST_PROP(0, current_speed) // 115200DT_INST_* macro 대부분은 generic API의 convenience wrapper입니다. 이름에서 INST_를 빼면 대응 generic API를 찾을 수 있습니다. 예를 들어 DT_INST_PROP(inst, prop)은 DT_PROP(DT_DRV_INST(inst), prop), DT_INST_REG_ADDR(inst)은 DT_REG_ADDR(DT_DRV_INST(inst))과 같습니다. DT_ANY_INST_ON_BUS_STATUS_OKAY와 DT_INST_FOREACH_STATUS_OKAY처럼 직접 대응 항목이 없는 예외도 있습니다.
DT_DRV_INST()가 DT_DRV_COMPAT을 요구하므로 이 정의 없이 instance API를 쓰면 error입니다. Group: devicetree-inst.
Hardware-specific API
다음 convenience API도 <devicetree.h>만 include하면 사용할 수 있습니다.
- CAN: CAN controller/transceiver node와 관련 property. Group
devicetree-can. - Clock: Clock source node와 property. Group
devicetree-clocks. - DMA: Direct memory access controller/channel과 property. Group
devicetree-dmas. - Fixed flash partition: Flash partition을 표현하는
fixed-partitionscompatible. Groupdevicetree-fixed-partition. - GPIO: GPIO controller/pin과 property. Group
devicetree-gpio. - IO channel: ADC/DAC conversion channel을 사용하는 driver용. Group
devicetree-io-channels. - MBOX: Mailbox controller/user node와 property. Group
devicetree-mbox. - PWM: PWM controller와 property. Group
devicetree-pwms. - Reset controller: Reset controller node와 property. Group
devicetree-reset-controller. - SPI: 문맥에 따라 SPI controller 또는 device node. Group
devicetree-spi.
Pinctrl(pin control)
Pin control 또는 pin mux setting을 이름이나 index로 접근합니다. Node에는 0부터 연속된 integer index의 pinctrl-<index> property가 있고 pinctrl-names로 이름을 줄 수 있습니다.
node {
...
pinctrl-0 = <&foo &bar ...>;
pinctrl-1 = <&baz ...>;
pinctrl-names = "default", "sleep";
};여기서 pinctrl-0 이름은 default, pinctrl-1 이름은 sleep입니다. Property 안의 &foo, &bar, &baz phandle은 platform별 pin configuration node를 가리킵니다. Group: devicetree-pinctrl.
Chosen node
특별한 /chosen node는 system-wide setting을 설명하는 property를 가집니다. DT_CHOSEN()으로 chosen node identifier를 얻습니다. Generic group은 devicetree-generic-chosen입니다.
Zephyr 전용 chosen property
일부 chosen node label은 hardware device를 고르는 Kconfig option의 기본값을 정합니다. 이는 해당 Kconfig가 devicetree 지원보다 먼저 생긴 경우의 backward compatibility를 위한 경우가 많습니다. Kconfig option 없이 source code가 node를 직접 사용해 device를 선택하는 경우도 있습니다.
| Property | 용도 |
|---|---|
| zephyr,bt-c2h-uart | Bluetooth HCI UART sample에서 controller-to-host 통신에 사용할 UART 선택 |
| zephyr,bt-mon-uart | Bluetooth monitor logging에 사용할 UART device 설정 |
| zephyr,bt-hci | Bluetooth host stack이 사용할 HCI device 선택 |
| zephyr,canbus | Default CAN controller 설정 |
| zephyr,ccm | 일부 STM32 SoC의 Core-Coupled Memory node |
| zephyr,code-partition | Zephyr image text section을 link할 flash partition |
| zephyr,console | Console driver가 사용할 UART device 설정 |
| zephyr,display | Default display controller 설정 |
| zephyr,keyboard-scan | Default keyboard scan controller 설정 |
| zephyr,dtcm | 일부 Arm SoC의 Data Tightly Coupled Memory node |
| zephyr,entropy | System-wide entropy source로 사용할 수 있는 device |
| zephyr,flash | reg 값이 CONFIG_FLASH_BASE_ADDRESS와 CONFIG_FLASH_SIZE 기본값에 사용될 수 있는 node |
| zephyr,flash-controller | zephyr,flash node의 flash controller device에 대응하는 node |
| zephyr,gdbstub-uart | GDB stub subsystem이 사용할 UART device 설정 |
| zephyr,ieee802154 | Networking subsystem의 IEEE 802.15.4 device 설정 |
| zephyr,ipc | OpenAMP subsystem의 inter-process communication device 지정 |
| zephyr,ipc_shm | OpenAMP IPC용 shared memory의 base address와 size를 reg로 제공 |
| zephyr,itcm | 일부 Arm SoC의 Instruction Tightly Coupled Memory node |
| zephyr,log-uart | Logging subsystem UART backend의 출력 device 목록 설정 |
| zephyr,ocm | Xilinx Zynq-7000 및 ZynqMP SoC의 on-chip memory node |
| zephyr,osdp-uart | OSDP subsystem이 사용할 UART device 설정 |
| zephyr,ot-uart | OpenThread Spinel protocol용 UART device 지정 |
| zephyr,pcie-controller | PCIe controller에 대응하는 node |
| zephyr,ppp-uart | PPP가 사용할 UART device 설정 |
| zephyr,settings-partition | NVS와 FCB settings backend가 사용할 fixed partition 선택 |
| zephyr,shell-uart | Serial shell backend가 사용할 UART device 설정 |
| zephyr,sram | Link 시 Zephyr image가 사용할 SRAM base address와 size를 reg로 제공 |
| zephyr,tracing-uart | Tracing subsystem이 사용할 UART device 설정 |
| zephyr,uart-mcumgr | Device management subsystem용 UART |
| zephyr,uart-pipe | Serial pipe driver가 사용할 UART device 설정 |
| zephyr,usb-device | USB device node. vbus-gpios가 있으면 USB subsystem이 VBUS enable/disable에 사용 |
Source
출처
영어 원문에는 문단, 문서 지시문, 표, 코드, 코드 심벌, 경로를 그대로 보존했습니다.