Commit 878fb5dc authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'devicetree-for-4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux

Pull DeviceTree updates from Rob Herring:

 - update changeset documentation on locking to reflect current code

 - fix alphabetizing of vendor-prefixes.txt

 - add various vendor prefixes

 - add ESP8089 WiFi binding

 - add new variable sized array parsing functions

* tag 'devicetree-for-4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: (21 commits)
  DT: irqchip: renesas-irqc: document R8A7743/5 support
  dt-bindings: Add Keith&Koep vendor prefix
  dt-bindings: add vendor prefix for Auvidea GmbH
  of: Add vendor prefix for Engicam s.r.l company
  devicetree: Add vendor-prefix for Silead Inc.
  devicetree: bindings: Add vendor prefix for Topeet.
  dt-bindings: Add summit vendor id
  of/platform: Initialise dev->fwnode appropriately
  of: Add array read functions with min/max size limits
  of: Make of_find_property_value_of_size take a length range
  dt: net: enhance DWC EQoS binding to support Tegra186
  bindings: PCI: artpec: correct pci binding example
  Documentation: devicetree: Fix max77693 spelling errors
  dt: bindings: Add binding for ESP8089 wifi chips
  PCI: Xilinx NWL PCIe: Updating device tree documentation with prefetchable memory space
  Documentation: devicetree: spi: fix wrong spi-bus documentation
  dt-bindings: Add Japan Display Inc vendor id
  dt-bindings: vendor-prefixes: Add Sierra Wireless
  devicetree: Add vendor prefix for Shenzhen Sunchip Technology Co., Ltd
  devicetree: Sort vendor prefixes in alphabetical order
  ...
parents 6a497e9d 87e5fc99
DT bindings for the R-Mobile/R-Car interrupt controller DT bindings for the R-Mobile/R-Car/RZ/G interrupt controller
Required properties: Required properties:
- compatible: has to be "renesas,irqc-<soctype>", "renesas,irqc" as fallback. - compatible: has to be "renesas,irqc-<soctype>", "renesas,irqc" as fallback.
Examples with soctypes are: Examples with soctypes are:
- "renesas,irqc-r8a73a4" (R-Mobile APE6) - "renesas,irqc-r8a73a4" (R-Mobile APE6)
- "renesas,irqc-r8a7743" (RZ/G1M)
- "renesas,irqc-r8a7745" (RZ/G1E)
- "renesas,irqc-r8a7790" (R-Car H2) - "renesas,irqc-r8a7790" (R-Car H2)
- "renesas,irqc-r8a7791" (R-Car M2-W) - "renesas,irqc-r8a7791" (R-Car M2-W)
- "renesas,irqc-r8a7792" (R-Car V2H) - "renesas,irqc-r8a7792" (R-Car V2H)
......
...@@ -17,28 +17,28 @@ Required properties: ...@@ -17,28 +17,28 @@ Required properties:
- interrupt-parent : The parent interrupt controller. - interrupt-parent : The parent interrupt controller.
Optional properties: Optional properties:
- regulators : The regulators of max77693 have to be instantiated under subnod - regulators : The regulators of max77693 have to be instantiated under subnode
named "regulators" using the following format. named "regulators" using the following format.
regulators { regulators {
regualtor-compatible = ESAFEOUT1/ESAFEOUT2/CHARGER regulator-compatible = ESAFEOUT1/ESAFEOUT2/CHARGER
standard regulator constratints[*]. standard regulator constraints[*].
}; };
[*] refer Documentation/devicetree/bindings/regulator/regulator.txt [*] refer Documentation/devicetree/bindings/regulator/regulator.txt
- haptic : The MAX77693 haptic device utilises a PWM controlled motor to provide - haptic : The MAX77693 haptic device utilises a PWM controlled motor to provide
users with tactile feedback. PWM period and duty-cycle are varied in users with tactile feedback. PWM period and duty-cycle are varied in
order to provide the approprite level of feedback. order to provide the appropriate level of feedback.
Required properties: Required properties:
- compatible : Must be "maxim,max77693-hpatic" - compatible : Must be "maxim,max77693-haptic"
- haptic-supply : power supply for the haptic motor - haptic-supply : power supply for the haptic motor
[*] refer Documentation/devicetree/bindings/regulator/regulator.txt [*] refer Documentation/devicetree/bindings/regulator/regulator.txt
- pwms : phandle to the physical PWM(Pulse Width Modulation) device. - pwms : phandle to the physical PWM(Pulse Width Modulation) device.
PWM properties should be named "pwms". And number of cell is different PWM properties should be named "pwms". And number of cell is different
for each pwm device. for each pwm device.
To get more informations, please refer to documentaion. To get more information, please refer to documentation.
[*] refer Documentation/devicetree/bindings/pwm/pwm.txt [*] refer Documentation/devicetree/bindings/pwm/pwm.txt
- charger : Node configuring the charger driver. - charger : Node configuring the charger driver.
......
* Synopsys DWC Ethernet QoS IP version 4.10 driver (GMAC) * Synopsys DWC Ethernet QoS IP version 4.10 driver (GMAC)
This binding supports the Synopsys Designware Ethernet QoS (Quality Of Service)
IP block. The IP supports multiple options for bus type, clocking and reset
structure, and feature list. Consequently, a number of properties and list
entries in properties are marked as optional, or only required in specific HW
configurations.
Required properties: Required properties:
- compatible: Should be "snps,dwc-qos-ethernet-4.10" - compatible: One of:
- "axis,artpec6-eqos", "snps,dwc-qos-ethernet-4.10"
Represents the IP core when integrated into the Axis ARTPEC-6 SoC.
- "nvidia,tegra186-eqos", "snps,dwc-qos-ethernet-4.10"
Represents the IP core when integrated into the NVIDIA Tegra186 SoC.
- "snps,dwc-qos-ethernet-4.10"
This combination is deprecated. It should be treated as equivalent to
"axis,artpec6-eqos", "snps,dwc-qos-ethernet-4.10". It is supported to be
compatible with earlier revisions of this binding.
- reg: Address and length of the register set for the device - reg: Address and length of the register set for the device
- clocks: Phandles to the reference clock and the bus clock - clocks: Phandle and clock specifiers for each entry in clock-names, in the
- clock-names: Should be "phy_ref_clk" for the reference clock and "apb_pclk" same order. See ../clock/clock-bindings.txt.
for the bus clock. - clock-names: May contain any/all of the following depending on the IP
configuration, in any order:
- "tx"
The EQOS transmit path clock. The HW signal name is clk_tx_i.
In some configurations (e.g. GMII/RGMII), this clock also drives the PHY TX
path. In other configurations, other clocks (such as tx_125, rmii) may
drive the PHY TX path.
- "rx"
The EQOS receive path clock. The HW signal name is clk_rx_i.
In some configurations (e.g. GMII/RGMII), this clock is derived from the
PHY's RX clock output. In other configurations, other clocks (such as
rx_125, rmii) may drive the EQOS RX path.
In cases where the PHY clock is directly fed into the EQOS receive path
without intervening logic, the DT need not represent this clock, since it
is assumed to be fully under the control of the PHY device/driver. In
cases where SoC integration adds additional logic to this path, such as a
SW-controlled clock gate, this clock should be represented in DT.
- "slave_bus"
The CPU/slave-bus (CSR) interface clock. This applies to any bus type;
APB, AHB, AXI, etc. The HW signal name is hclk_i (AHB) or clk_csr_i (other
buses).
- "master_bus"
The master bus interface clock. Only required in configurations that use a
separate clock for the master and slave bus interfaces. The HW signal name
is hclk_i (AHB) or aclk_i (AXI).
- "ptp_ref"
The PTP reference clock. The HW signal name is clk_ptp_ref_i.
- "phy_ref_clk"
This clock is deprecated and should not be used by new compatible values.
It is equivalent to "tx".
- "apb_pclk"
This clock is deprecated and should not be used by new compatible values.
It is equivalent to "slave_bus".
Note: Support for additional IP configurations may require adding the
following clocks to this list in the future: clk_rx_125_i, clk_tx_125_i,
clk_pmarx_0_i, clk_pmarx1_i, clk_rmii_i, clk_revmii_rx_i, clk_revmii_tx_i.
Configurations exist where multiple similar clocks are used at once, e.g. all
of clk_rx_125_i, clk_pmarx_0_i, clk_pmarx1_i. For this reason it is best to
extend the binding with a separate clock-names entry for each of those RX
clocks, rather than repurposing the existing "rx" clock-names entry as a
generic/logical clock in a similar fashion to "master_bus" and "slave_bus".
This will allow easy support for configurations that support multiple PHY
interfaces using a mux, and hence need to have explicit control over
specific RX clocks.
The following compatible values require the following set of clocks:
- "nvidia,tegra186-eqos", "snps,dwc-qos-ethernet-4.10":
- "slave_bus"
- "master_bus"
- "rx"
- "tx"
- "ptp_ref"
- "axis,artpec6-eqos", "snps,dwc-qos-ethernet-4.10":
- "slave_bus"
- "master_bus"
- "tx"
- "ptp_ref"
- "snps,dwc-qos-ethernet-4.10" (deprecated):
- "phy_ref_clk"
- "apb_clk"
- interrupt-parent: Should be the phandle for the interrupt controller - interrupt-parent: Should be the phandle for the interrupt controller
that services interrupts for this device that services interrupts for this device
- interrupts: Should contain the core's combined interrupt signal - interrupts: Should contain the core's combined interrupt signal
- phy-mode: See ethernet.txt file in the same directory - phy-mode: See ethernet.txt file in the same directory
- resets: Phandle and reset specifiers for each entry in reset-names, in the
same order. See ../reset/reset.txt.
- reset-names: May contain any/all of the following depending on the IP
configuration, in any order:
- "eqos". The reset to the entire module. The HW signal name is hreset_n
(AHB) or aresetn_i (AXI).
The following compatible values require the following set of resets:
(the reset properties may be omitted if empty)
- "nvidia,tegra186-eqos", "snps,dwc-qos-ethernet-4.10":
- "eqos".
- "axis,artpec6-eqos", "snps,dwc-qos-ethernet-4.10":
- None.
- "snps,dwc-qos-ethernet-4.10" (deprecated):
- None.
Optional properties: Optional properties:
- dma-coherent: Present if dma operations are coherent - dma-coherent: Present if dma operations are coherent
- mac-address: See ethernet.txt in the same directory - mac-address: See ethernet.txt in the same directory
- local-mac-address: See ethernet.txt in the same directory - local-mac-address: See ethernet.txt in the same directory
- phy-reset-gpios: Phandle and specifier for any GPIO used to reset the PHY.
See ../gpio/gpio.txt.
- snps,en-lpi: If present it enables use of the AXI low-power interface - snps,en-lpi: If present it enables use of the AXI low-power interface
- snps,write-requests: Number of write requests that the AXI port can issue. - snps,write-requests: Number of write requests that the AXI port can issue.
It depends on the SoC configuration. It depends on the SoC configuration.
...@@ -52,6 +142,7 @@ ethernet2@40010000 { ...@@ -52,6 +142,7 @@ ethernet2@40010000 {
reg = <0x40010000 0x4000>; reg = <0x40010000 0x4000>;
phy-handle = <&phy2>; phy-handle = <&phy2>;
phy-mode = "gmii"; phy-mode = "gmii";
phy-reset-gpios = <&gpioctlr 43 GPIO_ACTIVE_LOW>;
snps,en-tx-lpi-clockgating; snps,en-tx-lpi-clockgating;
snps,en-lpi; snps,en-lpi;
......
Espressif ESP8089 wireless SDIO devices
This node provides properties for controlling the ESP8089 wireless device.
The node is expected to be specified as a child node to the SDIO controller
that connects the device to the system.
Required properties:
- compatible : Should be "esp,esp8089".
Optional properties:
- esp,crystal-26M-en: Integer value for the crystal_26M_en firmware parameter
Example:
&mmc1 {
#address-cells = <1>;
#size-cells = <0>;
vmmc-supply = <&reg_dldo1>;
mmc-pwrseq = <&wifi_pwrseq>;
bus-width = <4>;
non-removable;
status = "okay";
esp8089: sdio_wifi@1 {
compatible = "esp,esp8089";
reg = <1>;
esp,crystal-26M-en = <2>;
};
};
...@@ -24,16 +24,17 @@ Example: ...@@ -24,16 +24,17 @@ Example:
compatible = "axis,artpec6-pcie", "snps,dw-pcie"; compatible = "axis,artpec6-pcie", "snps,dw-pcie";
reg = <0xf8050000 0x2000 reg = <0xf8050000 0x2000
0xf8040000 0x1000 0xf8040000 0x1000
0xc0000000 0x1000>; 0xc0000000 0x2000>;
reg-names = "dbi", "phy", "config"; reg-names = "dbi", "phy", "config";
#address-cells = <3>; #address-cells = <3>;
#size-cells = <2>; #size-cells = <2>;
device_type = "pci"; device_type = "pci";
/* downstream I/O */ /* downstream I/O */
ranges = <0x81000000 0 0x00010000 0xc0010000 0 0x00010000 ranges = <0x81000000 0 0 0xc0002000 0 0x00010000
/* non-prefetchable memory */ /* non-prefetchable memory */
0x82000000 0 0xc0020000 0xc0020000 0 0x1ffe0000>; 0x82000000 0 0xc0012000 0xc0012000 0 0x1ffee000>;
num-lanes = <2>; num-lanes = <2>;
bus-range = <0x00 0xff>;
interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>; interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "msi"; interrupt-names = "msi";
#interrupt-cells = <1>; #interrupt-cells = <1>;
......
...@@ -55,9 +55,10 @@ nwl_pcie: pcie@fd0e0000 { ...@@ -55,9 +55,10 @@ nwl_pcie: pcie@fd0e0000 {
msi-parent = <&nwl_pcie>; msi-parent = <&nwl_pcie>;
reg = <0x0 0xfd0e0000 0x0 0x1000>, reg = <0x0 0xfd0e0000 0x0 0x1000>,
<0x0 0xfd480000 0x0 0x1000>, <0x0 0xfd480000 0x0 0x1000>,
<0x0 0xe0000000 0x0 0x1000000>; <0x80 0x00000000 0x0 0x1000000>;
reg-names = "breg", "pcireg", "cfg"; reg-names = "breg", "pcireg", "cfg";
ranges = <0x02000000 0x00000000 0xe1000000 0x00000000 0xe1000000 0 0x0f000000>; ranges = <0x02000000 0x00000000 0xe0000000 0x00000000 0xe0000000 0x00000000 0x10000000 /* non-prefetchable memory */
0x43000000 0x00000006 0x00000000 0x00000006 0x00000000 0x00000002 0x00000000>;/* prefetchable memory */
pcie_intc: legacy-interrupt-controller { pcie_intc: legacy-interrupt-controller {
interrupt-controller; interrupt-controller;
......
...@@ -31,7 +31,7 @@ with max(cs-gpios > hw cs). ...@@ -31,7 +31,7 @@ with max(cs-gpios > hw cs).
So if for example the controller has 2 CS lines, and the cs-gpios So if for example the controller has 2 CS lines, and the cs-gpios
property looks like this: property looks like this:
cs-gpios = <&gpio1 0 0> <0> <&gpio1 1 0> <&gpio1 2 0>; cs-gpios = <&gpio1 0 0>, <0>, <&gpio1 1 0>, <&gpio1 2 0>;
Then it should be configured so that num_chipselect = 4 with the Then it should be configured so that num_chipselect = 4 with the
following mapping: following mapping:
......
...@@ -3,8 +3,8 @@ Device tree binding vendor prefix registry. Keep list in alphabetical order. ...@@ -3,8 +3,8 @@ Device tree binding vendor prefix registry. Keep list in alphabetical order.
This isn't an exhaustive list, but you should add new prefixes to it before This isn't an exhaustive list, but you should add new prefixes to it before
using them to avoid name-space collisions. using them to avoid name-space collisions.
abilis Abilis Systems
abcn Abracon Corporation abcn Abracon Corporation
abilis Abilis Systems
active-semi Active-Semi International Inc active-semi Active-Semi International Inc
ad Avionic Design GmbH ad Avionic Design GmbH
adapteva Adapteva, Inc. adapteva Adapteva, Inc.
...@@ -36,6 +36,7 @@ aspeed ASPEED Technology Inc. ...@@ -36,6 +36,7 @@ aspeed ASPEED Technology Inc.
atlas Atlas Scientific LLC atlas Atlas Scientific LLC
atmel Atmel Corporation atmel Atmel Corporation
auo AU Optronics Corporation auo AU Optronics Corporation
auvidea Auvidea GmbH
avago Avago Technologies avago Avago Technologies
avic Shanghai AVIC Optoelectronics Co., Ltd. avic Shanghai AVIC Optoelectronics Co., Ltd.
axis Axis Communications AB axis Axis Communications AB
...@@ -85,6 +86,7 @@ elan Elan Microelectronic Corp. ...@@ -85,6 +86,7 @@ elan Elan Microelectronic Corp.
embest Shenzhen Embest Technology Co., Ltd. embest Shenzhen Embest Technology Co., Ltd.
emmicro EM Microelectronic emmicro EM Microelectronic
energymicro Silicon Laboratories (formerly Energy Micro AS) energymicro Silicon Laboratories (formerly Energy Micro AS)
engicam Engicam S.r.l.
epcos EPCOS AG epcos EPCOS AG
epfl Ecole Polytechnique Fédérale de Lausanne epfl Ecole Polytechnique Fédérale de Lausanne
epson Seiko Epson Corp. epson Seiko Epson Corp.
...@@ -101,8 +103,8 @@ focaltech FocalTech Systems Co.,Ltd ...@@ -101,8 +103,8 @@ focaltech FocalTech Systems Co.,Ltd
fsl Freescale Semiconductor fsl Freescale Semiconductor
ge General Electric Company ge General Electric Company
geekbuying GeekBuying geekbuying GeekBuying
GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc.
gef GE Fanuc Intelligent Platforms Embedded Systems, Inc. gef GE Fanuc Intelligent Platforms Embedded Systems, Inc.
GEFanuc GE Fanuc Intelligent Platforms Embedded Systems, Inc.
geniatech Geniatech, Inc. geniatech Geniatech, Inc.
giantplus Giantplus Technology Co., Ltd. giantplus Giantplus Technology Co., Ltd.
globalscale Globalscale Technologies, Inc. globalscale Globalscale Technologies, Inc.
...@@ -126,7 +128,6 @@ i2se I2SE GmbH ...@@ -126,7 +128,6 @@ i2se I2SE GmbH
ibm International Business Machines (IBM) ibm International Business Machines (IBM)
idt Integrated Device Technologies, Inc. idt Integrated Device Technologies, Inc.
ifi Ingenieurburo Fur Ic-Technologie (I/F/I) ifi Ingenieurburo Fur Ic-Technologie (I/F/I)
iom Iomega Corporation
img Imagination Technologies Ltd. img Imagination Technologies Ltd.
infineon Infineon Technologies infineon Infineon Technologies
inforce Inforce Computing inforce Inforce Computing
...@@ -135,11 +136,14 @@ innolux Innolux Corporation ...@@ -135,11 +136,14 @@ innolux Innolux Corporation
intel Intel Corporation intel Intel Corporation
intercontrol Inter Control Group intercontrol Inter Control Group
invensense InvenSense Inc. invensense InvenSense Inc.
iom Iomega Corporation
isee ISEE 2007 S.L. isee ISEE 2007 S.L.
isil Intersil isil Intersil
issi Integrated Silicon Solutions Inc. issi Integrated Silicon Solutions Inc.
jdi Japan Display Inc.
jedec JEDEC Solid State Technology Association jedec JEDEC Solid State Technology Association
karo Ka-Ro electronics GmbH karo Ka-Ro electronics GmbH
keithkoep Keith & Koep GmbH
keymile Keymile GmbH keymile Keymile GmbH
kinetic Kinetic Technologies kinetic Kinetic Technologies
kosagi Sutajio Ko-Usagi PTE Ltd. kosagi Sutajio Ko-Usagi PTE Ltd.
...@@ -149,8 +153,8 @@ lantiq Lantiq Semiconductor ...@@ -149,8 +153,8 @@ lantiq Lantiq Semiconductor
lenovo Lenovo Group Ltd. lenovo Lenovo Group Ltd.
lg LG Corporation lg LG Corporation
linux Linux-specific binding linux Linux-specific binding
lsi LSI Corp. (LSI Logic)
lltc Linear Technology Corporation lltc Linear Technology Corporation
lsi LSI Corp. (LSI Logic)
marvell Marvell Technology Group Ltd. marvell Marvell Technology Group Ltd.
maxim Maxim Integrated Products maxim Maxim Integrated Products
meas Measurement Specialties meas Measurement Specialties
...@@ -190,20 +194,20 @@ onnn ON Semiconductor Corp. ...@@ -190,20 +194,20 @@ onnn ON Semiconductor Corp.
ontat On Tat Industrial Company ontat On Tat Industrial Company
opencores OpenCores.org opencores OpenCores.org
option Option NV option Option NV
ORCL Oracle Corporation
ortustech Ortus Technology Co., Ltd. ortustech Ortus Technology Co., Ltd.
ovti OmniVision Technologies ovti OmniVision Technologies
ORCL Oracle Corporation
oxsemi Oxford Semiconductor, Ltd. oxsemi Oxford Semiconductor, Ltd.
panasonic Panasonic Corporation panasonic Panasonic Corporation
parade Parade Technologies Inc. parade Parade Technologies Inc.
pericom Pericom Technology Inc. pericom Pericom Technology Inc.
phytec PHYTEC Messtechnik GmbH phytec PHYTEC Messtechnik GmbH
picochip Picochip Ltd picochip Picochip Ltd
pixcir PIXCIR MICROELECTRONICS Co., Ltd
plathome Plat'Home Co., Ltd. plathome Plat'Home Co., Ltd.
plda PLDA plda PLDA
pixcir PIXCIR MICROELECTRONICS Co., Ltd
pulsedlight PulsedLight, Inc
powervr PowerVR (deprecated, use img) powervr PowerVR (deprecated, use img)
pulsedlight PulsedLight, Inc
qca Qualcomm Atheros, Inc. qca Qualcomm Atheros, Inc.
qcom Qualcomm Technologies, Inc qcom Qualcomm Technologies, Inc
qemu QEMU, a generic and open source machine emulator and virtualizer qemu QEMU, a generic and open source machine emulator and virtualizer
...@@ -231,12 +235,13 @@ sgx SGX Sensortech ...@@ -231,12 +235,13 @@ sgx SGX Sensortech
sharp Sharp Corporation sharp Sharp Corporation
si-en Si-En Technology Ltd. si-en Si-En Technology Ltd.
sigma Sigma Designs, Inc. sigma Sigma Designs, Inc.
sii Seiko Instruments, Inc.
sil Silicon Image sil Silicon Image
silabs Silicon Laboratories silabs Silicon Laboratories
silead Silead Inc.
silergy Silergy Corp.
siliconmitus Silicon Mitus, Inc. siliconmitus Silicon Mitus, Inc.
simtek simtek
sii Seiko Instruments, Inc.
silergy Silergy Corp.
sirf SiRF Technology, Inc. sirf SiRF Technology, Inc.
sis Silicon Integrated Systems Corp. sis Silicon Integrated Systems Corp.
sitronix Sitronix Technology Corporation sitronix Sitronix Technology Corporation
...@@ -254,9 +259,12 @@ starry Starry Electronic Technology (ShenZhen) Co., LTD ...@@ -254,9 +259,12 @@ starry Starry Electronic Technology (ShenZhen) Co., LTD
startek Startek startek Startek
ste ST-Ericsson ste ST-Ericsson
stericsson ST-Ericsson stericsson ST-Ericsson
summit Summit microelectronics
sunchip Shenzhen Sunchip Technology Co., Ltd
SUNW Sun Microsystems, Inc
swir Sierra Wireless
syna Synaptics Inc. syna Synaptics Inc.
synology Synology, Inc. synology Synology, Inc.
SUNW Sun Microsystems, Inc
tbs TBS Technologies tbs TBS Technologies
tcg Trusted Computing Group tcg Trusted Computing Group
tcl Toby Churchill Ltd. tcl Toby Churchill Ltd.
...@@ -265,17 +273,18 @@ technologic Technologic Systems ...@@ -265,17 +273,18 @@ technologic Technologic Systems
thine THine Electronics, Inc. thine THine Electronics, Inc.
ti Texas Instruments ti Texas Instruments
tlm Trusted Logic Mobility tlm Trusted Logic Mobility
topeet Topeet
toradex Toradex AG toradex Toradex AG
toshiba Toshiba Corporation toshiba Toshiba Corporation
toumaz Toumaz toumaz Toumaz
tplink TP-LINK Technologies Co., Ltd.
tpk TPK U.S.A. LLC tpk TPK U.S.A. LLC
tplink TP-LINK Technologies Co., Ltd.
tronfy Tronfy tronfy Tronfy
tronsmart Tronsmart tronsmart Tronsmart
truly Truly Semiconductors Limited truly Truly Semiconductors Limited
tyan Tyan Computer Corporation tyan Tyan Computer Corporation
upisemi uPI Semiconductor Corp.
uniwest United Western Technologies Corp (UniWest) uniwest United Western Technologies Corp (UniWest)
upisemi uPI Semiconductor Corp.
urt United Radiant Technology Corporation urt United Radiant Technology Corporation
usi Universal Scientific Industrial Co., Ltd. usi Universal Scientific Industrial Co., Ltd.
v3 V3 Semiconductor v3 V3 Semiconductor
...@@ -293,7 +302,7 @@ x-powers X-Powers ...@@ -293,7 +302,7 @@ x-powers X-Powers
xes Extreme Engineering Solutions (X-ES) xes Extreme Engineering Solutions (X-ES)
xillybus Xillybus Ltd. xillybus Xillybus Ltd.
xlnx Xilinx xlnx Xilinx
zyxel ZyXEL Communications Corp.
zarlink Zarlink Semiconductor zarlink Zarlink Semiconductor
zii Zodiac Inflight Innovations zii Zodiac Inflight Innovations
zte ZTE Corp. zte ZTE Corp.
zyxel ZyXEL Communications Corp.
...@@ -21,20 +21,11 @@ a set of changes. No changes to the active tree are made at this point. ...@@ -21,20 +21,11 @@ a set of changes. No changes to the active tree are made at this point.
All the change operations are recorded in the of_changeset 'entries' All the change operations are recorded in the of_changeset 'entries'
list. list.
3. mutex_lock(of_mutex) - starts a changeset; The global of_mutex 3. of_changeset_apply() - Apply the changes to the tree. Either the
ensures there can only be one editor at a time.
4. of_changeset_apply() - Apply the changes to the tree. Either the
entire changeset will get applied, or if there is an error the tree will entire changeset will get applied, or if there is an error the tree will
be restored to the previous state be restored to the previous state. The core ensures proper serialization
through locking. An unlocked version __of_changeset_apply is available,
5. mutex_unlock(of_mutex) - All operations complete, release the mutex if needed.
If a successfully applied changeset needs to be removed, it can be done If a successfully applied changeset needs to be removed, it can be done
with the following sequence. with of_changeset_revert().
1. mutex_lock(of_mutex)
2. of_changeset_revert()
3. mutex_unlock(of_mutex)
This diff is collapsed.
...@@ -142,6 +142,7 @@ struct platform_device *of_device_alloc(struct device_node *np, ...@@ -142,6 +142,7 @@ struct platform_device *of_device_alloc(struct device_node *np,
} }
dev->dev.of_node = of_node_get(np); dev->dev.of_node = of_node_get(np);
dev->dev.fwnode = &np->fwnode;
dev->dev.parent = parent ? : &platform_bus; dev->dev.parent = parent ? : &platform_bus;
if (bus_id) if (bus_id)
...@@ -241,6 +242,7 @@ static struct amba_device *of_amba_device_create(struct device_node *node, ...@@ -241,6 +242,7 @@ static struct amba_device *of_amba_device_create(struct device_node *node,
/* setup generic device info */ /* setup generic device info */
dev->dev.of_node = of_node_get(node); dev->dev.of_node = of_node_get(node);
dev->dev.fwnode = &node->fwnode;
dev->dev.parent = parent ? : &platform_bus; dev->dev.parent = parent ? : &platform_bus;
dev->dev.platform_data = platform_data; dev->dev.platform_data = platform_data;
if (bus_id) if (bus_id)
......
...@@ -291,20 +291,24 @@ extern int of_property_count_elems_of_size(const struct device_node *np, ...@@ -291,20 +291,24 @@ extern int of_property_count_elems_of_size(const struct device_node *np,
extern int of_property_read_u32_index(const struct device_node *np, extern int of_property_read_u32_index(const struct device_node *np,
const char *propname, const char *propname,
u32 index, u32 *out_value); u32 index, u32 *out_value);
extern int of_property_read_u8_array(const struct device_node *np, extern int of_property_read_variable_u8_array(const struct device_node *np,
const char *propname, u8 *out_values, size_t sz); const char *propname, u8 *out_values,
extern int of_property_read_u16_array(const struct device_node *np, size_t sz_min, size_t sz_max);
const char *propname, u16 *out_values, size_t sz); extern int of_property_read_variable_u16_array(const struct device_node *np,
extern int of_property_read_u32_array(const struct device_node *np, const char *propname, u16 *out_values,
size_t sz_min, size_t sz_max);
extern int of_property_read_variable_u32_array(const struct device_node *np,
const char *propname, const char *propname,
u32 *out_values, u32 *out_values,
size_t sz); size_t sz_min,
size_t sz_max);
extern int of_property_read_u64(const struct device_node *np, extern int of_property_read_u64(const struct device_node *np,
const char *propname, u64 *out_value); const char *propname, u64 *out_value);
extern int of_property_read_u64_array(const struct device_node *np, extern int of_property_read_variable_u64_array(const struct device_node *np,
const char *propname, const char *propname,
u64 *out_values, u64 *out_values,
size_t sz); size_t sz_min,
size_t sz_max);
extern int of_property_read_string(const struct device_node *np, extern int of_property_read_string(const struct device_node *np,
const char *propname, const char *propname,
...@@ -380,6 +384,122 @@ extern int of_detach_node(struct device_node *); ...@@ -380,6 +384,122 @@ extern int of_detach_node(struct device_node *);
#define of_match_ptr(_ptr) (_ptr) #define of_match_ptr(_ptr) (_ptr)
/**
* of_property_read_u8_array - Find and read an array of u8 from a property.
*
* @np: device node from which the property value is to be read.
* @propname: name of the property to be searched.
* @out_values: pointer to return value, modified only if return value is 0.
* @sz: number of array elements to read
*
* Search for a property in a device node and read 8-bit value(s) from
* it. Returns 0 on success, -EINVAL if the property does not exist,
* -ENODATA if property does not have a value, and -EOVERFLOW if the
* property data isn't large enough.
*
* dts entry of array should be like:
* property = /bits/ 8 <0x50 0x60 0x70>;
*
* The out_values is modified only if a valid u8 value can be decoded.
*/
static inline int of_property_read_u8_array(const struct device_node *np,
const char *propname,
u8 *out_values, size_t sz)
{
int ret = of_property_read_variable_u8_array(np, propname, out_values,
sz, 0);
if (ret >= 0)
return 0;
else
return ret;
}
/**
* of_property_read_u16_array - Find and read an array of u16 from a property.
*
* @np: device node from which the property value is to be read.
* @propname: name of the property to be searched.
* @out_values: pointer to return value, modified only if return value is 0.
* @sz: number of array elements to read
*
* Search for a property in a device node and read 16-bit value(s) from
* it. Returns 0 on success, -EINVAL if the property does not exist,
* -ENODATA if property does not have a value, and -EOVERFLOW if the
* property data isn't large enough.
*
* dts entry of array should be like:
* property = /bits/ 16 <0x5000 0x6000 0x7000>;
*
* The out_values is modified only if a valid u16 value can be decoded.
*/
static inline int of_property_read_u16_array(const struct device_node *np,
const char *propname,
u16 *out_values, size_t sz)
{
int ret = of_property_read_variable_u16_array(np, propname, out_values,
sz, 0);
if (ret >= 0)
return 0;
else
return ret;
}
/**
* of_property_read_u32_array - Find and read an array of 32 bit integers
* from a property.
*
* @np: device node from which the property value is to be read.
* @propname: name of the property to be searched.
* @out_values: pointer to return value, modified only if return value is 0.
* @sz: number of array elements to read
*
* Search for a property in a device node and read 32-bit value(s) from
* it. Returns 0 on success, -EINVAL if the property does not exist,
* -ENODATA if property does not have a value, and -EOVERFLOW if the
* property data isn't large enough.
*
* The out_values is modified only if a valid u32 value can be decoded.
*/
static inline int of_property_read_u32_array(const struct device_node *np,
const char *propname,
u32 *out_values, size_t sz)
{
int ret = of_property_read_variable_u32_array(np, propname, out_values,
sz, 0);
if (ret >= 0)
return 0;
else
return ret;
}
/**
* of_property_read_u64_array - Find and read an array of 64 bit integers
* from a property.
*
* @np: device node from which the property value is to be read.
* @propname: name of the property to be searched.
* @out_values: pointer to return value, modified only if return value is 0.
* @sz: number of array elements to read
*
* Search for a property in a device node and read 64-bit value(s) from
* it. Returns 0 on success, -EINVAL if the property does not exist,
* -ENODATA if property does not have a value, and -EOVERFLOW if the
* property data isn't large enough.
*
* The out_values is modified only if a valid u64 value can be decoded.
*/
static inline int of_property_read_u64_array(const struct device_node *np,
const char *propname,
u64 *out_values, size_t sz)
{
int ret = of_property_read_variable_u64_array(np, propname, out_values,
sz, 0);
if (ret >= 0)
return 0;
else
return ret;
}
/* /*
* struct property *prop; * struct property *prop;
* const __be32 *p; * const __be32 *p;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment