]> Git Repo - linux.git/commitdiff
Merge tag 'devicetree-for-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <[email protected]>
Thu, 7 Sep 2017 21:43:33 +0000 (14:43 -0700)
committerLinus Torvalds <[email protected]>
Thu, 7 Sep 2017 21:43:33 +0000 (14:43 -0700)
Pull DeviceTree updates from Rob Herring:
 "There's a few orphans in the conversion to %pOF printf specifiers
  included here that no one else picked up.

  Summary:

   - Convert more DT code to use of_property_read_* API.

   - Improve DT overlay support when adding multiple overlays

   - Convert printk's to %pOF format specifiers. Most went via subsystem
     trees, but picked up the remaining orphans

   - Correct unittests to use preferred "okay" for "status" property
     value

   - Add a KASLR seed property

   - Vendor prefixes for Mellanox, Theobroma System, Adaptrum, Moxa

   - Fix modalias buffer handling

   - Clean-up of include paths for building dtbs

   - Add bindings for amc6821, isl1208, tsl2x7x, srf02, and srf10
     devices

   - Add nvmem bindings for MediaTek MT7623 and MT7622 SoC

   - Add compatible string for Allwinner H5 Mali-450 GPU

   - Fix links to old OpenFirmware docs with new mirror on
     devicetree.org

   - Remove status property from binding doc examples"

* tag 'devicetree-for-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: (45 commits)
  devicetree: Adjust status "ok" -> "okay" under drivers/of/
  dt-bindings: Remove "status" from examples
  dt-bindings: pinctrl: sh-pfc: Use generic node name
  dt-bindings: Add vendor Mellanox
  dt-binding: net/phy: fix interrupts description
  virt: Convert to using %pOF instead of full_name
  macintosh: Convert to using %pOF instead of full_name
  ide: pmac: Convert to using %pOF instead of full_name
  microblaze: Convert to using %pOF instead of full_name
  dt-bindings: usb: musb: Grammar s/the/to/, s/is/are/
  of: Use PLATFORM_DEVID_NONE definition
  of/device: Fix of_device_get_modalias() buffer handling
  of/device: Prevent buffer overflow in of_device_modalias()
  dt-bindings: add amc6821, isl1208 trivial bindings
  dt-bindings: add vendor prefix for Theobroma Systems
  of: search scripts/dtc/include-prefixes path for both CPP and DTC
  of: remove arch/$(SRCARCH)/boot/dts from include search path for CPP
  of: remove drivers/of/testcase-data from include search path for CPP
  of: return of_get_cpu_node from of_cpu_device_node_get if CPUs are not registered
  iio: srf08: add device tree binding for srf02 and srf10
  ...

24 files changed:
1  2 
Documentation/devicetree/bindings/crypto/inside-secure-safexcel.txt
Documentation/devicetree/bindings/display/rockchip/dw_hdmi-rockchip.txt
Documentation/devicetree/bindings/display/sunxi/sun4i-drm.txt
Documentation/devicetree/bindings/mfd/da9052-i2c.txt
Documentation/devicetree/bindings/mmc/zx-dw-mshc.txt
Documentation/devicetree/bindings/net/brcm,amac.txt
Documentation/devicetree/bindings/net/marvell-pp2.txt
Documentation/devicetree/bindings/net/phy.txt
Documentation/devicetree/bindings/net/rockchip-dwmac.txt
Documentation/devicetree/bindings/phy/phy-mtk-tphy.txt
Documentation/devicetree/bindings/phy/phy-rockchip-inno-usb2.txt
Documentation/devicetree/bindings/pinctrl/renesas,pfc-pinctrl.txt
Documentation/devicetree/bindings/pinctrl/rockchip,pinctrl.txt
Documentation/devicetree/bindings/ptp/brcm,ptp-dte.txt
Documentation/devicetree/bindings/sound/renesas,rsnd.txt
Documentation/devicetree/bindings/sound/rockchip,pdm.txt
Documentation/devicetree/bindings/spi/sh-msiof.txt
Documentation/devicetree/bindings/usb/keystone-usb.txt
Documentation/devicetree/bindings/usb/mediatek,mtu3.txt
Documentation/devicetree/bindings/vendor-prefixes.txt
drivers/of/device.c
drivers/of/irq.c
drivers/of/of_mdio.c
drivers/of/property.c

index 941bb6a6fb1304609bb3fa8a94520bfbdcca06f7,c08d5ad79b1f3bb89416cacc4f6872ed80b278ed..fbc07d12322f8020bc7a1ab282cd2eaffb587f9f
@@@ -8,6 -8,7 +8,6 @@@ Required properties
  
  Optional properties:
  - clocks: Reference to the crypto engine clock.
 -- dma-mask: The address mask limitation. Defaults to 64.
  
  Example:
  
@@@ -23,5 -24,5 +23,4 @@@
                interrupt-names = "mem", "ring0", "ring1", "ring2", "ring3",
                                  "eip";
                clocks = <&cpm_syscon0 1 26>;
-               status = "disabled";
 -              dma-mask = <0xff 0xffffffff>;
        };
index fad8b7619647661cac9de0df3a8bf1d0f1711074,82a348fad5d4fedd49129e7df32091de7aac0abe..adc94fc3c9f88543862821bbc0ac6f506f6cfc1c
@@@ -11,9 -11,7 +11,9 @@@ following device-specific properties
  
  Required properties:
  
 -- compatible: Shall contain "rockchip,rk3288-dw-hdmi".
 +- compatible: should be one of the following:
 +              "rockchip,rk3288-dw-hdmi"
 +              "rockchip,rk3399-dw-hdmi"
  - reg: See dw_hdmi.txt.
  - reg-io-width: See dw_hdmi.txt. Shall be 4.
  - interrupts: HDMI interrupt number
@@@ -32,8 -30,7 +32,8 @@@ Optional propertie
    I2C master controller.
  - clock-names: See dw_hdmi.txt. The "cec" clock is optional.
  - clock-names: May contain "cec" as defined in dw_hdmi.txt.
 -
 +- clock-names: May contain "grf", power for grf io.
 +- clock-names: May contain "vpll", external clock for some hdmi phy.
  
  Example:
  
@@@ -46,7 -43,6 +46,6 @@@ hdmi: hdmi@ff980000 
        interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&cru  PCLK_HDMI_CTRL>, <&cru SCLK_HDMI_HDCP>;
        clock-names = "iahb", "isfr";
-       status = "disabled";
        ports {
                hdmi_in: port {
                        #address-cells = <1>;
index 2ee6ff0ef98e7dcf6d16e977fa8dd852b10a247c,8ab9330ab27a10747d9ed2b6a099fd9b22994323..92441086cabad07cb9bfe44095cfbd605ef03e38
@@@ -4,33 -4,15 +4,33 @@@ Allwinner A10 Display Pipelin
  The Allwinner A10 Display pipeline is composed of several components
  that are going to be documented below:
  
 -For the input port of all components up to the TCON in the display
 -pipeline, if there are multiple components, the local endpoint IDs
 -must correspond to the index of the upstream block. For example, if
 -the remote endpoint is Frontend 1, then the local endpoint ID must
 -be 1.
 -
 -Conversely, for the output ports of the same group, the remote endpoint
 -ID must be the index of the local hardware block. If the local backend
 -is backend 1, then the remote endpoint ID must be 1.
 +For all connections between components up to the TCONs in the display
 +pipeline, when there are multiple components of the same type at the
 +same depth, the local endpoint ID must be the same as the remote
 +component's index. For example, if the remote endpoint is Frontend 1,
 +then the local endpoint ID must be 1.
 +
 +    Frontend 0  [0] ------- [0]  Backend 0  [0] ------- [0]  TCON 0
 +              [1] --   -- [1]             [1] --   -- [1]
 +                    \ /                         \ /
 +                     X                           X
 +                    / \                         / \
 +              [0] --   -- [0]             [0] --   -- [0]
 +    Frontend 1  [1] ------- [1]  Backend 1  [1] ------- [1]  TCON 1
 +
 +For a two pipeline system such as the one depicted above, the lines
 +represent the connections between the components, while the numbers
 +within the square brackets corresponds to the ID of the local endpoint.
 +
 +The same rule also applies to DE 2.0 mixer-TCON connections:
 +
 +    Mixer 0  [0] ----------- [0]  TCON 0
 +           [1] ----   ---- [1]
 +                   \ /
 +                    X
 +                   / \
 +           [0] ----   ---- [0]
 +    Mixer 1  [1] ----------- [1]  TCON 1
  
  HDMI Encoder
  ------------
@@@ -278,7 -260,6 +278,6 @@@ hdmi: hdmi@01c16000 
               <&dma SUN4I_DMA_NORMAL 16>,
               <&dma SUN4I_DMA_DEDICATED 24>;
        dma-names = "ddc-tx", "ddc-rx", "audio-tx";
-       status = "disabled";
  
        ports {
                #address-cells = <1>;
index 57fa74e65664aa32b773e086bb10c76d8a9ac507,d0d7fe4ddd1aa78ca03047145fe489bdeeb9d153..07c69c0c6624ce2e2d0adab034c4d10ce8b373e2
@@@ -4,14 -4,6 +4,14 @@@ Required properties
  - compatible : Should be "dlg,da9052", "dlg,da9053-aa",
                         "dlg,da9053-ab", or "dlg,da9053-bb"
  
 +Optional properties:
 +- dlg,tsi-as-adc : Boolean, if set the X+, X-, Y+, Y- touchscreen
 +                    input lines are used as general purpose analogue
 +                                      input.
 +- tsiref-supply: Phandle to the regulator, which provides the reference
 +                 voltage for the TSIREF pin. Must be provided when the
 +                           touchscreen pins are used for ADC purposes.
 +
  Sub-nodes:
  - regulators : Contain the regulator nodes. The DA9052/53 regulators are
    bound using their names as listed below:
@@@ -37,7 -29,6 +37,6 @@@
  Examples:
  
  i2c@63fc8000 { /* I2C1 */
-       status = "okay";
  
        pmic: dialog@48 {
                compatible = "dlg,da9053-aa";
index 906819a90c2bb6232f82f1549ea563c58132aec4,9d4b3fadb9a0082861f4e3142f377ae9258cc209..0f59bd5361f530c4c6b343a2b5a39396637940f5
@@@ -25,8 -25,8 +25,7 @@@ Example
                clock-frequency = <50000000>;
                clocks = <&topcrm SD0_AHB>, <&topcrm SD0_WCLK>;
                clock-names = "biu", "ciu";
 -              num-slots = <1>;
                max-frequency = <50000000>;
                cap-sdio-irq;
                cap-sd-highspeed;
-               status = "disabled";
        };
index ad16c1f481f77fed199e1c24bc3450aa75fbb970,ab6ef085389a4fa1a2b4b4fd16f5acda1c4ec078..0bfad656a9ff26fc4f672e06f1123198bb9259e7
@@@ -11,7 -11,6 +11,7 @@@ Required properties
   - reg-names: Names of the registers.
                "amac_base":    Address and length of the GMAC registers
                "idm_base":     Address and length of the GMAC IDM registers
 +                              (required for NSP and Northstar2)
                "nicpm_base":   Address and length of the NIC Port Manager
                                registers (required for Northstar2)
   - interrupts:        Interrupt number
@@@ -27,5 -26,4 +27,4 @@@ amac0: ethernet@18022000 
              <0x18110000 0x1000>;
        reg-names = "amac_base", "idm_base";
        interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>;
-       status = "disabled";
  };
index c78f3187dfeab24a4ed550887839c851fe1cdc45,f85a62ca9edd01d30a4cc64e7ea4dba89efb35b9..7e2dad08a12e92c1baa0290116cbd032f5bb1e88
@@@ -41,11 -41,6 +41,11 @@@ Optional properties (port)
  - marvell,loopback: port is loopback mode
  - phy: a phandle to a phy node defining the PHY address (as the reg
    property, a single integer).
 +- interrupt-names: if more than a single interrupt for rx is given, must
 +                   be the name associated to the interrupts listed. Valid
 +                   names are: "tx-cpu0", "tx-cpu1", "tx-cpu2", "tx-cpu3",
 +                 "rx-shared", "link".
 +- marvell,system-controller: a phandle to the system controller.
  
  Example for marvell,armada-375-pp2:
  
@@@ -57,12 -52,10 +57,10 @@@ ethernet@f0000 
              <0xc5000 0x100>;
        clocks = <&gateclk 3>, <&gateclk 19>;
        clock-names = "pp_clk", "gop_clk";
-       status = "okay";
  
        eth0: eth0@c4000 {
                interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
                port-id = <0>;
-               status = "okay";
                phy = <&phy0>;
                phy-mode = "gmii";
        };
@@@ -70,7 -63,6 +68,6 @@@
        eth1: eth1@c5000 {
                interrupts = <GIC_SPI 41 IRQ_TYPE_LEVEL_HIGH>;
                port-id = <1>;
-               status = "okay";
                phy = <&phy3>;
                phy-mode = "gmii";
        };
@@@ -85,37 -77,19 +82,37 @@@ cpm_ethernet: ethernet@0 
        clock-names = "pp_clk", "gop_clk", "gp_clk";
  
        eth0: eth0 {
 -              interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
 +              interrupts = <ICU_GRP_NSR 39 IRQ_TYPE_LEVEL_HIGH>,
 +                           <ICU_GRP_NSR 43 IRQ_TYPE_LEVEL_HIGH>,
 +                           <ICU_GRP_NSR 47 IRQ_TYPE_LEVEL_HIGH>,
 +                           <ICU_GRP_NSR 51 IRQ_TYPE_LEVEL_HIGH>,
 +                           <ICU_GRP_NSR 55 IRQ_TYPE_LEVEL_HIGH>;
 +              interrupt-names = "tx-cpu0", "tx-cpu1", "tx-cpu2",
 +                                "tx-cpu3", "rx-shared";
                port-id = <0>;
                gop-port-id = <0>;
        };
  
        eth1: eth1 {
 -              interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
 +              interrupts = <ICU_GRP_NSR 40 IRQ_TYPE_LEVEL_HIGH>,
 +                           <ICU_GRP_NSR 44 IRQ_TYPE_LEVEL_HIGH>,
 +                           <ICU_GRP_NSR 48 IRQ_TYPE_LEVEL_HIGH>,
 +                           <ICU_GRP_NSR 52 IRQ_TYPE_LEVEL_HIGH>,
 +                           <ICU_GRP_NSR 56 IRQ_TYPE_LEVEL_HIGH>;
 +              interrupt-names = "tx-cpu0", "tx-cpu1", "tx-cpu2",
 +                                "tx-cpu3", "rx-shared";
                port-id = <1>;
                gop-port-id = <2>;
        };
  
        eth2: eth2 {
 -              interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
 +              interrupts = <ICU_GRP_NSR 41 IRQ_TYPE_LEVEL_HIGH>,
 +                           <ICU_GRP_NSR 45 IRQ_TYPE_LEVEL_HIGH>,
 +                           <ICU_GRP_NSR 49 IRQ_TYPE_LEVEL_HIGH>,
 +                           <ICU_GRP_NSR 53 IRQ_TYPE_LEVEL_HIGH>,
 +                           <ICU_GRP_NSR 57 IRQ_TYPE_LEVEL_HIGH>;
 +              interrupt-names = "tx-cpu0", "tx-cpu1", "tx-cpu2",
 +                                "tx-cpu3", "rx-shared";
                port-id = <2>;
                gop-port-id = <3>;
        };
index d3c24d5ffa9ad6d10fb8d7439147c19f50ca478f,86ba72af6163f62c18d69b7e9a2f633a39a3d6b7..77d0b2a61ffa96fcd45375d62e9b911a4d6597df
@@@ -2,11 -2,7 +2,7 @@@ PHY node
  
  Required properties:
  
-  - interrupts : <a b> where a is the interrupt number and b is a
-    field that represents an encoding of the sense and level
-    information for the interrupt.  This should be encoded based on
-    the information in section 2) depending on the type of interrupt
-    controller you have.
+  - interrupts : interrupt specifier for the sole interrupt.
   - interrupt-parent : the phandle for the interrupt controller that
     services interrupts for this device.
   - reg : The ID number for the phy, usually a small integer
@@@ -52,16 -48,11 +48,16 @@@ Optional Properties
    Mark the corresponding energy efficient ethernet mode as broken and
    request the ethernet to stop advertising it.
  
 +- phy-is-integrated: If set, indicates that the PHY is integrated into the same
 +  physical package as the Ethernet MAC. If needed, muxers should be configured
 +  to ensure the integrated PHY is used. The absence of this property indicates
 +  the muxers should be configured so that the external PHY is used.
 +
  Example:
  
  ethernet-phy@0 {
        compatible = "ethernet-phy-id0141.0e90", "ethernet-phy-ieee802.3-c22";
-       interrupt-parent = <40000>;
-       interrupts = <35 1>;
+       interrupt-parent = <&PIC>;
+       interrupts = <35 IRQ_TYPE_EDGE_RISING>;
        reg = <0>;
  };
index c1325387632cb31555be0c81bae915a7e2fbad46,f4766855483e50911b4d6c265a3c6347961af563..6af8eed1adeb1429cf9bdda435ac4e7ab27c5c21
@@@ -10,7 -10,6 +10,7 @@@ Required properties
     "rockchip,rk3366-gmac": found on RK3366 SoCs
     "rockchip,rk3368-gmac": found on RK3368 SoCs
     "rockchip,rk3399-gmac": found on RK3399 SoCs
 +   "rockchip,rv1108-gmac": found on RV1108 SoCs
   - reg: addresses and length of the register sets for the device.
   - interrupts: Should contain the GMAC interrupts.
   - interrupt-names: Should contain the interrupt names "macirq".
@@@ -71,5 -70,4 +71,4 @@@ gmac: ethernet@ff290000 
        tx_delay = <0x30>;
        rx_delay = <0x10>;
  
-       status = "ok";
  };
index faf18084a33ad09411d0a17fdd7ac5d029eb3932,0000000000000000000000000000000000000000..41e09ed2ca70e2caaf7ee65b2f67651fba7bb9f4
mode 100644,000000..100644
--- /dev/null
@@@ -1,144 -1,0 +1,140 @@@
-       status = "okay";
 +MediaTek T-PHY binding
 +--------------------------
 +
 +T-phy controller supports physical layer functionality for a number of
 +controllers on MediaTek SoCs, such as, USB2.0, USB3.0, PCIe, and SATA.
 +
 +Required properties (controller (parent) node):
 + - compatible : should be one of
 +                "mediatek,generic-tphy-v1"
 +                "mediatek,generic-tphy-v2"
 +                "mediatek,mt2701-u3phy" (deprecated)
 +                "mediatek,mt2712-u3phy" (deprecated)
 +                "mediatek,mt8173-u3phy";
 +                make use of "mediatek,generic-tphy-v1" on mt2701 instead and
 +                "mediatek,generic-tphy-v2" on mt2712 instead.
 + - clocks     : (deprecated, use port's clocks instead) a list of phandle +
 +                clock-specifier pairs, one for each entry in clock-names
 + - clock-names        : (deprecated, use port's one instead) must contain
 +                "u3phya_ref": for reference clock of usb3.0 analog phy.
 +
 +Required nodes        : a sub-node is required for each port the controller
 +                provides. Address range information including the usual
 +                'reg' property is used inside these nodes to describe
 +                the controller's topology.
 +
 +Optional properties (controller (parent) node):
 + - reg                : offset and length of register shared by multiple ports,
 +                exclude port's private register. It is needed on mt2701
 +                and mt8173, but not on mt2712.
 +
 +Required properties (port (child) node):
 +- reg         : address and length of the register set for the port.
 +- clocks      : a list of phandle + clock-specifier pairs, one for each
 +                entry in clock-names
 +- clock-names : must contain
 +                "ref": 48M reference clock for HighSpeed analog phy; and 26M
 +                      reference clock for SuperSpeed analog phy, sometimes is
 +                      24M, 25M or 27M, depended on platform.
 +- #phy-cells  : should be 1 (See second example)
 +                cell after port phandle is phy type from:
 +                      - PHY_TYPE_USB2
 +                      - PHY_TYPE_USB3
 +                      - PHY_TYPE_PCIE
 +                      - PHY_TYPE_SATA
 +
 +Example:
 +
 +u3phy: usb-phy@11290000 {
 +      compatible = "mediatek,mt8173-u3phy";
 +      reg = <0 0x11290000 0 0x800>;
 +      #address-cells = <2>;
 +      #size-cells = <2>;
 +      ranges;
-               status = "okay";
 +
 +      u2port0: usb-phy@11290800 {
 +              reg = <0 0x11290800 0 0x100>;
 +              clocks = <&apmixedsys CLK_APMIXED_REF2USB_TX>;
 +              clock-names = "ref";
 +              #phy-cells = <1>;
-               status = "okay";
 +      };
 +
 +      u3port0: usb-phy@11290900 {
 +              reg = <0 0x11290800 0 0x700>;
 +              clocks = <&clk26m>;
 +              clock-names = "ref";
 +              #phy-cells = <1>;
-               status = "okay";
 +      };
 +
 +      u2port1: usb-phy@11291000 {
 +              reg = <0 0x11291000 0 0x100>;
 +              clocks = <&apmixedsys CLK_APMIXED_REF2USB_TX>;
 +              clock-names = "ref";
 +              #phy-cells = <1>;
 +      };
 +};
 +
 +Specifying phy control of devices
 +---------------------------------
 +
 +Device nodes should specify the configuration required in their "phys"
 +property, containing a phandle to the phy port node and a device type;
 +phy-names for each port are optional.
 +
 +Example:
 +
 +#include <dt-bindings/phy/phy.h>
 +
 +usb30: usb@11270000 {
 +      ...
 +      phys = <&u2port0 PHY_TYPE_USB2>, <&u3port0 PHY_TYPE_USB3>;
 +      phy-names = "usb2-0", "usb3-0";
 +      ...
 +};
 +
 +
 +Layout differences of banks between mt8173/mt2701 and mt2712
 +-------------------------------------------------------------
 +mt8173 and mt2701:
 +port        offset    bank
 +shared      0x0000    SPLLC
 +            0x0100    FMREG
 +u2 port0    0x0800    U2PHY_COM
 +u3 port0    0x0900    U3PHYD
 +            0x0a00    U3PHYD_BANK2
 +            0x0b00    U3PHYA
 +            0x0c00    U3PHYA_DA
 +u2 port1    0x1000    U2PHY_COM
 +u3 port1    0x1100    U3PHYD
 +            0x1200    U3PHYD_BANK2
 +            0x1300    U3PHYA
 +            0x1400    U3PHYA_DA
 +u2 port2    0x1800    U2PHY_COM
 +            ...
 +
 +mt2712:
 +port        offset    bank
 +u2 port0    0x0000    MISC
 +            0x0100    FMREG
 +            0x0300    U2PHY_COM
 +u3 port0    0x0700    SPLLC
 +            0x0800    CHIP
 +            0x0900    U3PHYD
 +            0x0a00    U3PHYD_BANK2
 +            0x0b00    U3PHYA
 +            0x0c00    U3PHYA_DA
 +u2 port1    0x1000    MISC
 +            0x1100    FMREG
 +            0x1300    U2PHY_COM
 +u3 port1    0x1700    SPLLC
 +            0x1800    CHIP
 +            0x1900    U3PHYD
 +            0x1a00    U3PHYD_BANK2
 +            0x1b00    U3PHYA
 +            0x1c00    U3PHYA_DA
 +u2 port2    0x2000    MISC
 +            ...
 +
 +    SPLLC shared by u3 ports and FMREG shared by u2 ports on
 +mt8173/mt2701 are put back into each port; a new bank MISC for
 +u2 ports and CHIP for u3 ports are added on mt2712.
index a67ef2a3874f43bc55d6a013298fa72743d89714,f6954b188cef7c983bdf05671cff1ab7bbf917de..074a7b3b0425ddadac96079d0cdd83f7f9352582
@@@ -6,7 -6,6 +6,7 @@@ Required properties (phy (parent) node)
        * "rockchip,rk3328-usb2phy"
        * "rockchip,rk3366-usb2phy"
        * "rockchip,rk3399-usb2phy"
 +      * "rockchip,rv1108-usb2phy"
   - reg : the address offset of grf for usb-phy configuration.
   - #clock-cells : should be 0.
   - clock-output-names : specify the 480m output clock name.
@@@ -19,10 -18,6 +19,10 @@@ Optional properties
                 usb-phy output 480m and xin24m.
                 Refer to clk/clock-bindings.txt for generic clock
                 consumer properties.
 + - rockchip,usbgrf : phandle to the syscon managing the "usb general
 +               register files". When set driver will request its
 +               phandle as one companion-grf for some special SoCs
 +               (e.g RV1108).
  
  Required nodes : a sub-node is required for each port the phy provides.
                 The sub-node name is used to identify host or otg port,
  Required properties (port (child) node):
   - #phy-cells : must be 0. See ./phy-bindings.txt for details.
   - interrupts : specify an interrupt for each entry in interrupt-names.
 - - interrupt-names : a list which shall be the following entries:
 + - interrupt-names : a list which should be one of the following cases:
 +      Regular case:
        * "otg-id" : for the otg id interrupt.
        * "otg-bvalid" : for the otg vbus interrupt.
        * "linestate" : for the host/otg linestate interrupt.
 +      Some SoCs use one interrupt with the above muxed together, so for these
 +      * "otg-mux" : otg-port interrupt, which mux otg-id/otg-bvalid/linestate
 +              to one.
  
  Optional properties:
   - phy-supply : phandle to a regulator that provides power to VBUS.
@@@ -67,14 -58,12 +67,12 @@@ grf: syscon@ff770000 
                                     <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>,
                                     <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "otg-id", "otg-bvalid", "linestate";
-                       status = "okay";
                };
  
                u2phy_host: host-port {
                        #phy-cells = <0>;
                        interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "linestate";
-                       status = "okay";
                };
        };
  };
index f4d127df980dccbc8826d204c650d90557c64f62,6fba875838f50e2e68a344aeeffdd181a82b1268..9b4f8041c36a62e7cdb4ddd77935e49c20dd8859
@@@ -24,7 -24,6 +24,7 @@@ Required Properties
      - "renesas,pfc-r8a7794": for R8A7794 (R-Car E2) compatible pin-controller.
      - "renesas,pfc-r8a7795": for R8A7795 (R-Car H3) compatible pin-controller.
      - "renesas,pfc-r8a7796": for R8A7796 (R-Car M3-W) compatible pin-controller.
 +    - "renesas,pfc-r8a77995": for R8A77995 (R-Car D3) compatible pin-controller.
      - "renesas,pfc-sh73a0": for SH73A0 (SH-Mobile AG5) compatible pin-controller.
  
    - reg: Base address and length of each memory resource used by the pin
@@@ -112,7 -111,7 +112,7 @@@ Example
  
  Example 1: SH73A0 (SH-Mobile AG5) pin controller node
  
-       pfc: pfc@e6050000 {
+       pfc: pin-controller@e6050000 {
                compatible = "renesas,pfc-sh73a0";
                reg = <0xe6050000 0x8000>,
                      <0xe605801c 0x1c>;
@@@ -173,5 -172,4 +173,4 @@@ Example 4: KZM-A9-GT (SH-Mobile AG5) de
  
                bus-width = <8>;
                vmmc-supply = <&reg_1p8v>;
-               status = "okay";
        };
index 58b7921b4fed97d4b4da1f9b46eff5d0029cc7d8,02c0388a12b2fd6e067e7709cfd3bd68d1a2f9f9..4864e3a74de311ff02e6f3c54a04ae2fbba5ae2d
@@@ -24,7 -24,6 +24,7 @@@ Required properties for iomux controlle
                "rockchip,rk2928-pinctrl":  for Rockchip RK2928
                "rockchip,rk3066a-pinctrl": for Rockchip RK3066a
                "rockchip,rk3066b-pinctrl": for Rockchip RK3066b
 +              "rockchip,rk3128-pinctrl":  for Rockchip RK3128
                "rockchip,rk3188-pinctrl":  for Rockchip RK3188
                "rockchip,rk3228-pinctrl":  for Rockchip RK3228
                "rockchip,rk3288-pinctrl":  for Rockchip RK3288
@@@ -121,7 -120,6 +121,6 @@@ uart2: serial@20064000 
        reg-shift = <2>;
        reg-io-width = <1>;
        clocks = <&mux_uart2>;
-       status = "okay";
  
        pinctrl-names = "default";
        pinctrl-0 = <&uart2_xfer>;
index 7c04e22a5d6af016fe8198d2d6d955011abc2173,16e3389c8118ad59c31f469d364c0e2babafb60e..6b1075ee8a3025f58c0609da564521afbec70ff7
@@@ -1,20 -1,12 +1,19 @@@
 -* Broadcom Digital Timing Engine(DTE) based PTP clock driver
 +* Broadcom Digital Timing Engine(DTE) based PTP clock
  
  Required properties:
 -- compatible: should be "brcm,ptp-dte"
 +- compatible: should contain the core compatibility string
 +              and the SoC compatibility string. The SoC
 +              compatibility string is to handle SoC specific
 +              hardware differences.
 +              Core compatibility string:
 +                 "brcm,ptp-dte"
 +              SoC compatibility strings:
 +                 "brcm,iproc-ptp-dte" - for iproc based SoC's
  - reg: address and length of the DTE block's NCO registers
  
  Example:
  
 -ptp_dte: ptp_dte@180af650 {
 -      compatible = "brcm,ptp-dte";
 +ptp: ptp-dte@180af650 {
 +      compatible = "brcm,iproc-ptp-dte", "brcm,ptp-dte";
        reg = <0x180af650 0x10>;
-       status = "okay";
  };
index a1536fdc60e62c4921ef01869c1da9fe4b31d69c,8fad27da9e9a7b1dfd7cbaad6c88e04236267d00..085bec364caf6592539535d13a6e50a05515c888
@@@ -199,10 -199,10 +199,10 @@@ Ex
        sound {
                compatible = "simple-scu-audio-card";
                ...
 -              simple-audio-card,cpu@0 {
 +              simple-audio-card,cpu-0 {
                        sound-dai = <&rcar_sound 0>;
                };
 -              simple-audio-card,cpu@1 {
 +              simple-audio-card,cpu-1 {
                        sound-dai = <&rcar_sound 1>;
                };
                simple-audio-card,codec {
@@@ -441,79 -441,79 +441,79 @@@ rcar_sound: sound@ec500000 
                        "clk_a", "clk_b", "clk_c", "clk_i";
  
        rcar_sound,dvc {
 -              dvc0: dvc@0 {
 +              dvc0: dvc-0 {
                        dmas = <&audma0 0xbc>;
                        dma-names = "tx";
                };
 -              dvc1: dvc@1 {
 +              dvc1: dvc-1 {
                        dmas = <&audma0 0xbe>;
                        dma-names = "tx";
                };
        };
  
        rcar_sound,mix {
 -              mix0: mix@0 { };
 -              mix1: mix@1 { };
 +              mix0: mix-0 { };
 +              mix1: mix-1 { };
        };
  
        rcar_sound,ctu {
 -              ctu00: ctu@0 { };
 -              ctu01: ctu@1 { };
 -              ctu02: ctu@2 { };
 -              ctu03: ctu@3 { };
 -              ctu10: ctu@4 { };
 -              ctu11: ctu@5 { };
 -              ctu12: ctu@6 { };
 -              ctu13: ctu@7 { };
 +              ctu00: ctu-0 { };
 +              ctu01: ctu-1 { };
 +              ctu02: ctu-2 { };
 +              ctu03: ctu-3 { };
 +              ctu10: ctu-4 { };
 +              ctu11: ctu-5 { };
 +              ctu12: ctu-6 { };
 +              ctu13: ctu-7 { };
        };
  
        rcar_sound,src {
 -              src0: src@0 {
 +              src0: src-0 {
                        interrupts = <0 352 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x85>, <&audma1 0x9a>;
                        dma-names = "rx", "tx";
                };
 -              src1: src@1 {
 +              src1: src-1 {
                        interrupts = <0 353 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x87>, <&audma1 0x9c>;
                        dma-names = "rx", "tx";
                };
 -              src2: src@2 {
 +              src2: src-2 {
                        interrupts = <0 354 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x89>, <&audma1 0x9e>;
                        dma-names = "rx", "tx";
                };
 -              src3: src@3 {
 +              src3: src-3 {
                        interrupts = <0 355 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x8b>, <&audma1 0xa0>;
                        dma-names = "rx", "tx";
                };
 -              src4: src@4 {
 +              src4: src-4 {
                        interrupts = <0 356 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x8d>, <&audma1 0xb0>;
                        dma-names = "rx", "tx";
                };
 -              src5: src@5 {
 +              src5: src-5 {
                        interrupts = <0 357 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x8f>, <&audma1 0xb2>;
                        dma-names = "rx", "tx";
                };
 -              src6: src@6 {
 +              src6: src-6 {
                        interrupts = <0 358 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x91>, <&audma1 0xb4>;
                        dma-names = "rx", "tx";
                };
 -              src7: src@7 {
 +              src7: src-7 {
                        interrupts = <0 359 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x93>, <&audma1 0xb6>;
                        dma-names = "rx", "tx";
                };
 -              src8: src@8 {
 +              src8: src-8 {
                        interrupts = <0 360 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x95>, <&audma1 0xb8>;
                        dma-names = "rx", "tx";
                };
 -              src9: src@9 {
 +              src9: src-9 {
                        interrupts = <0 361 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x97>, <&audma1 0xba>;
                        dma-names = "rx", "tx";
        };
  
        rcar_sound,ssi {
 -              ssi0: ssi@0 {
 +              ssi0: ssi-0 {
                        interrupts = <0 370 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x01>, <&audma1 0x02>, <&audma0 0x15>, <&audma1 0x16>;
                        dma-names = "rx", "tx", "rxu", "txu";
                };
 -              ssi1: ssi@1 {
 +              ssi1: ssi-1 {
                        interrupts = <0 371 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x03>, <&audma1 0x04>, <&audma0 0x49>, <&audma1 0x4a>;
                        dma-names = "rx", "tx", "rxu", "txu";
                };
 -              ssi2: ssi@2 {
 +              ssi2: ssi-2 {
                        interrupts = <0 372 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x05>, <&audma1 0x06>, <&audma0 0x63>, <&audma1 0x64>;
                        dma-names = "rx", "tx", "rxu", "txu";
                };
 -              ssi3: ssi@3 {
 +              ssi3: ssi-3 {
                        interrupts = <0 373 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x07>, <&audma1 0x08>, <&audma0 0x6f>, <&audma1 0x70>;
                        dma-names = "rx", "tx", "rxu", "txu";
                };
 -              ssi4: ssi@4 {
 +              ssi4: ssi-4 {
                        interrupts = <0 374 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x09>, <&audma1 0x0a>, <&audma0 0x71>, <&audma1 0x72>;
                        dma-names = "rx", "tx", "rxu", "txu";
                };
 -              ssi5: ssi@5 {
 +              ssi5: ssi-5 {
                        interrupts = <0 375 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x0b>, <&audma1 0x0c>, <&audma0 0x73>, <&audma1 0x74>;
                        dma-names = "rx", "tx", "rxu", "txu";
                };
 -              ssi6: ssi@6 {
 +              ssi6: ssi-6 {
                        interrupts = <0 376 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x0d>, <&audma1 0x0e>, <&audma0 0x75>, <&audma1 0x76>;
                        dma-names = "rx", "tx", "rxu", "txu";
                };
 -              ssi7: ssi@7 {
 +              ssi7: ssi-7 {
                        interrupts = <0 377 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x0f>, <&audma1 0x10>, <&audma0 0x79>, <&audma1 0x7a>;
                        dma-names = "rx", "tx", "rxu", "txu";
                };
 -              ssi8: ssi@8 {
 +              ssi8: ssi-8 {
                        interrupts = <0 378 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x11>, <&audma1 0x12>, <&audma0 0x7b>, <&audma1 0x7c>;
                        dma-names = "rx", "tx", "rxu", "txu";
                };
 -              ssi9: ssi@9 {
 +              ssi9: ssi-9 {
                        interrupts = <0 379 IRQ_TYPE_LEVEL_HIGH>;
                        dmas = <&audma0 0x13>, <&audma1 0x14>, <&audma0 0x7d>, <&audma1 0x7e>;
                        dma-names = "rx", "tx", "rxu", "txu";
@@@ -621,7 -621,6 +621,6 @@@ Example: simple sound car
        /* Single DAI */
        #sound-dai-cells = <0>;
  
-       status = "okay";
  
        rcar_sound,dai {
                dai0 {
@@@ -667,7 -666,6 +666,6 @@@ Example: simple sound card for Multi ch
        /* Single DAI */
        #sound-dai-cells = <0>;
  
-       status = "okay";
  
        rcar_sound,dai {
                dai0 {
index 2ad66f649a28fabed59c28e518a3b68f6d7c2973,beb32ca26e5d476661090b1c7574367d312c794c..47f164fbd1d72f80f8caedb7e6d62ad991351897
@@@ -29,14 -29,10 +29,13 @@@ pdm: pdm@ff040000 
        dma-names = "rx";
        pinctrl-names = "default", "sleep";
        pinctrl-0 = <&pdmm0_clk
 -                   &pdmm0_fsync
                     &pdmm0_sdi0
                     &pdmm0_sdi1
                     &pdmm0_sdi2
                     &pdmm0_sdi3>;
 -      pinctrl-1 = <&pdmm0_sleep>;
 +      pinctrl-1 = <&pdmm0_clk_sleep
 +                   &pdmm0_sdi0_sleep
 +                   &pdmm0_sdi1_sleep
 +                   &pdmm0_sdi2_sleep
 +                   &pdmm0_sdi3_sleep>;
-       status = "disabled";
  };
index 39e5ef7c5e71694eeb6d1ccba4499d0cdd8b125e,1dcd400eeea0f9e3801370985a2105ae98b550d3..e865855726a2b973a201ab1c3babc4df70451007
@@@ -6,7 -6,6 +6,7 @@@ Required properties
                         "renesas,msiof-r8a7792" (R-Car V2H)
                         "renesas,msiof-r8a7793" (R-Car M2-N)
                         "renesas,msiof-r8a7794" (R-Car E2)
 +                       "renesas,msiof-r8a7795" (R-Car H3)
                         "renesas,msiof-r8a7796" (R-Car M3-W)
                         "renesas,msiof-sh73a0" (SH-Mobile AG5)
                         "renesas,sh-mobile-msiof" (generic SH-Mobile compatibile device)
@@@ -79,5 -78,4 +79,4 @@@ Example
                dma-names = "tx", "rx";
                #address-cells = <1>;
                #size-cells = <0>;
-               status = "disabled";
        };
index 2d1bef16f1492a9c7699e84dd306b2694ff6aafe,ac2c7cc41f837faecb9361a1ce6c02a5eaa389bd..f96e09f784cc0c721dea4cb44dfa68debe27afb1
@@@ -12,21 -12,8 +12,21 @@@ Required properties
     MPU.
   - ranges: allows valid 1:1 translation between child's address space and
     parent's address space.
 - - clocks: Clock IDs array as required by the controller.
 - - clock-names: names of clocks correseponding to IDs in the clock property.
 +
 +SoC-specific Required Properties:
 +The following are mandatory properties for Keystone 2 66AK2HK, 66AK2L and 66AK2E
 +SoCs only:
 +
 +- clocks:             Clock ID for USB functional clock.
 +- clock-names:                Must be "usb".
 +
 +
 +The following are mandatory properties for Keystone 2 66AK2G SoCs only:
 +
 +- power-domains:      Should contain a phandle to a PM domain provider node
 +                      and an args specifier containing the USB device id
 +                      value. This property is as per the binding,
 +                      Documentation/devicetree/bindings/soc/ti/sci-pm-domain.txt
  
  Sub-nodes:
  The dwc3 core should be added as subnode to Keystone DWC3 glue.
@@@ -44,7 -31,6 +44,6 @@@ Example
                clock-names = "usb";
                interrupts = <GIC_SPI 393 IRQ_TYPE_EDGE_RISING>;
                ranges;
-               status = "disabled";
  
                dwc3@2690000 {
                        compatible = "synopsys,dwc3";
index 838ae48eafc159fe28f9cf4cc589a4db979f9881,0000000000000000000000000000000000000000..49f54767cd214e8d6d4ada2dcd1e133aa6ede4cc
mode 100644,000000..100644
--- /dev/null
@@@ -1,91 -1,0 +1,89 @@@
-       status = "disabled";
 +The device node for Mediatek USB3.0 DRD controller
 +
 +Required properties:
 + - compatible : should be "mediatek,<soc-model>-mtu3", "mediatek,mtu3",
 +      soc-model is the name of SoC, such as mt8173, mt2712 etc,
 +      when using "mediatek,mtu3" compatible string, you need SoC specific
 +      ones in addition, one of:
 +      - "mediatek,mt8173-mtu3"
 + - reg : specifies physical base address and size of the registers
 + - reg-names: should be "mac" for device IP and "ippc" for IP port control
 + - interrupts : interrupt used by the device IP
 + - power-domains : a phandle to USB power domain node to control USB's
 +      mtcmos
 + - vusb33-supply : regulator of USB avdd3.3v
 + - clocks : a list of phandle + clock-specifier pairs, one for each
 +      entry in clock-names
 + - clock-names : must contain "sys_ck" and "ref_ck" for clock of controller;
 +      "wakeup_deb_p0" and "wakeup_deb_p1" are optional, they are
 +      depends on "mediatek,enable-wakeup"
 + - phys : a list of phandle + phy specifier pairs
 + - dr_mode : should be one of "host", "peripheral" or "otg",
 +      refer to usb/generic.txt
 +
 +Optional properties:
 + - #address-cells, #size-cells : should be '2' if the device has sub-nodes
 +      with 'reg' property
 + - ranges : allows valid 1:1 translation between child's address space and
 +      parent's address space
 + - extcon : external connector for vbus and idpin changes detection, needed
 +      when supports dual-role mode.
 + - vbus-supply : reference to the VBUS regulator, needed when supports
 +      dual-role mode.
 + - pinctl-names : a pinctrl state named "default" must be defined,
 +      "id_float" and "id_ground" are optinal which depends on
 +      "mediatek,enable-manual-drd"
 + - pinctrl-0 : pin control group
 +      See: Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
 +
 + - maximum-speed : valid arguments are "super-speed", "high-speed" and
 +      "full-speed"; refer to usb/generic.txt
 + - enable-manual-drd : supports manual dual-role switch via debugfs; usually
 +      used when receptacle is TYPE-A and also wants to support dual-role
 +      mode.
 + - mediatek,enable-wakeup : supports ip sleep wakeup used by host mode
 + - mediatek,syscon-wakeup : phandle to syscon used to access USB wakeup
 +      control register, it depends on "mediatek,enable-wakeup".
 +
 +Sub-nodes:
 +The xhci should be added as subnode to mtu3 as shown in the following example
 +if host mode is enabled. The DT binding details of xhci can be found in:
 +Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.txt
 +
 +Example:
 +ssusb: usb@11271000 {
 +      compatible = "mediatek,mt8173-mtu3";
 +      reg = <0 0x11271000 0 0x3000>,
 +            <0 0x11280700 0 0x0100>;
 +      reg-names = "mac", "ippc";
 +      interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_LOW>;
 +      phys = <&phy_port0 PHY_TYPE_USB3>,
 +             <&phy_port1 PHY_TYPE_USB2>;
 +      power-domains = <&scpsys MT8173_POWER_DOMAIN_USB>;
 +      clocks = <&topckgen CLK_TOP_USB30_SEL>, <&clk26m>,
 +               <&pericfg CLK_PERI_USB0>,
 +               <&pericfg CLK_PERI_USB1>;
 +      clock-names = "sys_ck", "ref_ck",
 +                    "wakeup_deb_p0",
 +                    "wakeup_deb_p1";
 +      vusb33-supply = <&mt6397_vusb_reg>;
 +      vbus-supply = <&usb_p0_vbus>;
 +      extcon = <&extcon_usb>;
 +      dr_mode = "otg";
 +      mediatek,enable-wakeup;
 +      mediatek,syscon-wakeup = <&pericfg>;
 +      #address-cells = <2>;
 +      #size-cells = <2>;
 +      ranges;
-               status = "disabled";
 +
 +      usb_host: xhci@11270000 {
 +              compatible = "mediatek,mt8173-xhci";
 +              reg = <0 0x11270000 0 0x1000>;
 +              reg-names = "mac";
 +              interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_LOW>;
 +              power-domains = <&scpsys MT8173_POWER_DOMAIN_USB>;
 +              clocks = <&topckgen CLK_TOP_USB30_SEL>, <&clk26m>;
 +              clock-names = "sys_ck", "ref_ck";
 +              vusb33-supply = <&mt6397_vusb_reg>;
 +      };
 +};
index f58c9323b92bba75eb528dcfae552c16c6aadcbd,8730f332adc142c5d25e6396d3d715e8d23e5e02..401ed98cab1829f867b9be45af898e0f385308bc
@@@ -9,6 -9,7 +9,7 @@@ actions  Actions Semiconductor Co., Ltd
  active-semi   Active-Semi International Inc
  ad    Avionic Design GmbH
  adapteva      Adapteva, Inc.
+ adaptrum      Adaptrum, Inc.
  adh   AD Holdings Plc.
  adi   Analog Devices, Inc.
  advantech     Advantech Corporation
@@@ -88,7 -89,6 +89,7 @@@ dlg   Dialog Semiconducto
  dlink D-Link Corporation
  dmo   Data Modul AG
  domintech     Domintech Co., Ltd.
 +dongwoon      Dongwoon Anatech
  dptechnics    DPTechnics
  dragino       Dragino Technology Co., Limited
  ea    Embedded Artists AB
@@@ -176,7 -176,6 +177,7 @@@ kosagi     Sutajio Ko-Usagi PTE Ltd
  kyo   Kyocera Corporation
  lacie LaCie
  lantiq        Lantiq Semiconductor
 +lattice       Lattice Semiconductor
  lego  LEGO Systems A/S
  lenovo        Lenovo Group Ltd.
  lg    LG Corporation
@@@ -197,6 -196,7 +198,7 @@@ mediatek   MediaTek Inc
  megachips     MegaChips
  melexis       Melexis N.V.
  melfas        MELFAS Inc.
+ mellanox      Mellanox Technologies
  memsic        MEMSIC Inc.
  merrii        Merrii Technology Co., Ltd.
  micrel        Micrel Inc.
@@@ -208,7 -208,7 +210,7 @@@ miramems   MiraMEMS Sensing Technology Co
  mitsubishi    Mitsubishi Electric Corporation
  mosaixtech    Mosaix Technologies, Inc.
  motorola      Motorola, Inc.
- moxa  Moxa
+ moxa  Moxa Inc.
  mpl   MPL AG
  mqmaker       mqmaker Inc.
  msi   Micro-Star International Co. Ltd.
@@@ -251,7 -251,6 +253,7 @@@ oxsemi     Oxford Semiconductor, Ltd
  panasonic     Panasonic Corporation
  parade        Parade Technologies Inc.
  pericom       Pericom Technology Inc.
 +pervasive     Pervasive Displays, Inc.
  phytec        PHYTEC Messtechnik GmbH
  picochip      Picochip Ltd
  pine64        Pine64
@@@ -344,6 -343,7 +346,7 @@@ tpo        TP
  tronfy        Tronfy
  tronsmart     Tronsmart
  truly Truly Semiconductors Limited
+ tsd   Theobroma Systems Design und Consulting GmbH
  tyan  Tyan Computer Corporation
  ucrobotics    uCRobotics
  udoo  Udoo
diff --combined drivers/of/device.c
index e0a28ea341fe95e84a866559dad8e317c8056401,af31e6b9ac7491771e32c5cb03da0fb378e82095..17b66e9715d2d6fed228205702d552197ad98296
@@@ -58,7 -58,7 +58,7 @@@ int of_device_add(struct platform_devic
        /* name and id have to be set so that the platform bus doesn't get
         * confused on matching */
        ofdev->name = dev_name(&ofdev->dev);
-       ofdev->id = -1;
+       ofdev->id = PLATFORM_DEVID_NONE;
  
        /*
         * If this device has not binding numa node in devicetree, that is
@@@ -89,7 -89,6 +89,7 @@@ int of_dma_configure(struct device *dev
        bool coherent;
        unsigned long offset;
        const struct iommu_ops *iommu;
 +      u64 mask;
  
        /*
         * Set default coherent_dma_mask to 32 bit.  Drivers are expected to
         * Limit coherent and dma mask based on size and default mask
         * set by the driver.
         */
 -      dev->coherent_dma_mask = min(dev->coherent_dma_mask,
 -                                   DMA_BIT_MASK(ilog2(dma_addr + size)));
 -      *dev->dma_mask = min((*dev->dma_mask),
 -                           DMA_BIT_MASK(ilog2(dma_addr + size)));
 +      mask = DMA_BIT_MASK(ilog2(dma_addr + size - 1) + 1);
 +      dev->coherent_dma_mask &= mask;
 +      *dev->dma_mask &= mask;
  
        coherent = of_dma_is_coherent(np);
        dev_dbg(dev, "device is%sdma coherent\n",
@@@ -196,8 -196,10 +196,10 @@@ EXPORT_SYMBOL(of_device_get_match_data)
  static ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len)
  {
        const char *compat;
-       int cplen, i;
-       ssize_t tsize, csize, repend;
+       char *c;
+       struct property *p;
+       ssize_t csize;
+       ssize_t tsize;
  
        if ((!dev) || (!dev->of_node))
                return -ENODEV;
        /* Name & Type */
        csize = snprintf(str, len, "of:N%sT%s", dev->of_node->name,
                         dev->of_node->type);
-       /* Get compatible property if any */
-       compat = of_get_property(dev->of_node, "compatible", &cplen);
-       if (!compat)
-               return csize;
-       /* Find true end (we tolerate multiple \0 at the end */
-       for (i = (cplen - 1); i >= 0 && !compat[i]; i--)
-               cplen--;
-       if (!cplen)
-               return csize;
-       cplen++;
-       /* Check space (need cplen+1 chars including final \0) */
-       tsize = csize + cplen;
-       repend = tsize;
-       if (csize >= len)               /* @ the limit, all is already filled */
-               return tsize;
-       if (tsize >= len) {             /* limit compat list */
-               cplen = len - csize - 1;
-               repend = len;
-       }
-       /* Copy and do char replacement */
-       memcpy(&str[csize + 1], compat, cplen);
-       for (i = csize; i < repend; i++) {
-               char c = str[i];
-               if (c == '\0')
-                       str[i] = 'C';
-               else if (c == ' ')
-                       str[i] = '_';
+       tsize = csize;
+       len -= csize;
+       if (str)
+               str += csize;
+       of_property_for_each_string(dev->of_node, "compatible", p, compat) {
+               csize = strlen(compat) + 1;
+               tsize += csize;
+               if (csize > len)
+                       continue;
+               csize = snprintf(str, len, "C%s", compat);
+               for (c = str; c; ) {
+                       c = strchr(c, ' ');
+                       if (c)
+                               *c++ = '_';
+               }
+               len -= csize;
+               str += csize;
        }
  
-       return repend;
+       return tsize;
  }
  
  int of_device_request_module(struct device *dev)
@@@ -274,6 -262,8 +262,8 @@@ ssize_t of_device_modalias(struct devic
        ssize_t sl = of_device_get_modalias(dev, str, len - 2);
        if (sl < 0)
                return sl;
+       if (sl > len - 2)
+               return -ENOMEM;
  
        str[sl++] = '\n';
        str[sl] = 0;
@@@ -288,25 -278,22 +278,22 @@@ void of_device_uevent(struct device *de
  {
        const char *compat;
        struct alias_prop *app;
-       int seen = 0, cplen, sl;
+       struct property *p;
+       int seen = 0;
  
        if ((!dev) || (!dev->of_node))
                return;
  
        add_uevent_var(env, "OF_NAME=%s", dev->of_node->name);
-       add_uevent_var(env, "OF_FULLNAME=%s", dev->of_node->full_name);
+       add_uevent_var(env, "OF_FULLNAME=%pOF", dev->of_node);
        if (dev->of_node->type && strcmp("<NULL>", dev->of_node->type) != 0)
                add_uevent_var(env, "OF_TYPE=%s", dev->of_node->type);
  
        /* Since the compatible field can contain pretty much anything
         * it's not really legal to split it out with commas. We split it
         * up using a number of environment variables instead. */
-       compat = of_get_property(dev->of_node, "compatible", &cplen);
-       while (compat && *compat && cplen > 0) {
+       of_property_for_each_string(dev->of_node, "compatible", p, compat) {
                add_uevent_var(env, "OF_COMPATIBLE_%d=%s", seen, compat);
-               sl = strlen(compat) + 1;
-               compat += sl;
-               cplen -= sl;
                seen++;
        }
        add_uevent_var(env, "OF_COMPATIBLE_N=%d", seen);
diff --combined drivers/of/irq.c
index ab21c846eb273b515da3723b443bd6bbdfcb2c10,aa2a60c8868e95e7ff8c6d3d5a813836977e1a51..ec00ae7384c237eca360b5e7dd4e8f1eb5785b95
@@@ -59,20 -59,19 +59,19 @@@ EXPORT_SYMBOL_GPL(irq_of_parse_and_map)
  struct device_node *of_irq_find_parent(struct device_node *child)
  {
        struct device_node *p;
-       const __be32 *parp;
+       phandle parent;
  
        if (!of_node_get(child))
                return NULL;
  
        do {
-               parp = of_get_property(child, "interrupt-parent", NULL);
-               if (parp == NULL)
+               if (of_property_read_u32(child, "interrupt-parent", &parent)) {
                        p = of_get_parent(child);
-               else {
+               } else  {
                        if (of_irq_workarounds & OF_IMAP_NO_PHANDLE)
                                p = of_node_get(of_irq_dflt_pic);
                        else
-                               p = of_find_node_by_phandle(be32_to_cpup(parp));
+                               p = of_find_node_by_phandle(parent);
                }
                of_node_put(child);
                child = p;
@@@ -117,11 -116,8 +116,8 @@@ int of_irq_parse_raw(const __be32 *addr
         * is none, we are nice and just walk up the tree
         */
        do {
-               tmp = of_get_property(ipar, "#interrupt-cells", NULL);
-               if (tmp != NULL) {
-                       intsize = be32_to_cpu(*tmp);
+               if (!of_property_read_u32(ipar, "#interrupt-cells", &intsize))
                        break;
-               }
                tnode = ipar;
                ipar = of_irq_find_parent(ipar);
                of_node_put(tnode);
                goto fail;
        }
  
-       pr_debug("of_irq_parse_raw: ipar=%s, size=%d\n", of_node_full_name(ipar), intsize);
+       pr_debug("of_irq_parse_raw: ipar=%pOF, size=%d\n", ipar, intsize);
  
        if (out_irq->args_count != intsize)
                goto fail;
                /* Now check if cursor is an interrupt-controller and if it is
                 * then we are done
                 */
-               if (of_get_property(ipar, "interrupt-controller", NULL) !=
-                               NULL) {
+               if (of_property_read_bool(ipar, "interrupt-controller")) {
                        pr_debug(" -> got it !\n");
                        return 0;
                }
                        /* Get #interrupt-cells and #address-cells of new
                         * parent
                         */
-                       tmp = of_get_property(newpar, "#interrupt-cells", NULL);
-                       if (tmp == NULL) {
+                       if (of_property_read_u32(newpar, "#interrupt-cells",
+                                                &newintsize)) {
                                pr_debug(" -> parent lacks #interrupt-cells!\n");
                                goto fail;
                        }
-                       newintsize = be32_to_cpu(*tmp);
-                       tmp = of_get_property(newpar, "#address-cells", NULL);
-                       newaddrsize = (tmp == NULL) ? 0 : be32_to_cpu(*tmp);
+                       if (of_property_read_u32(newpar, "#address-cells",
+                                                &newaddrsize))
+                               newaddrsize = 0;
  
                        pr_debug(" -> newintsize=%d, newaddrsize=%d\n",
                            newintsize, newaddrsize);
        skiplevel:
                /* Iterate again with new parent */
                out_irq->np = newpar;
-               pr_debug(" -> new parent: %s\n", of_node_full_name(newpar));
+               pr_debug(" -> new parent: %pOF\n", newpar);
                of_node_put(ipar);
                ipar = newpar;
                newpar = NULL;
@@@ -297,11 -292,11 +292,11 @@@ EXPORT_SYMBOL_GPL(of_irq_parse_raw)
  int of_irq_parse_one(struct device_node *device, int index, struct of_phandle_args *out_irq)
  {
        struct device_node *p;
-       const __be32 *intspec, *tmp, *addr;
-       u32 intsize, intlen;
+       const __be32 *addr;
+       u32 intsize;
        int i, res;
  
-       pr_debug("of_irq_parse_one: dev=%s, index=%d\n", of_node_full_name(device), index);
+       pr_debug("of_irq_parse_one: dev=%pOF, index=%d\n", device, index);
  
        /* OldWorld mac stuff is "special", handle out of line */
        if (of_irq_workarounds & OF_IMAP_OLDWORLD_MAC)
        if (!res)
                return of_irq_parse_raw(addr, out_irq);
  
-       /* Get the interrupts property */
-       intspec = of_get_property(device, "interrupts", &intlen);
-       if (intspec == NULL)
-               return -EINVAL;
-       intlen /= sizeof(*intspec);
-       pr_debug(" intspec=%d intlen=%d\n", be32_to_cpup(intspec), intlen);
        /* Look for the interrupt parent. */
        p = of_irq_find_parent(device);
        if (p == NULL)
                return -EINVAL;
  
        /* Get size of interrupt specifier */
-       tmp = of_get_property(p, "#interrupt-cells", NULL);
-       if (tmp == NULL) {
+       if (of_property_read_u32(p, "#interrupt-cells", &intsize)) {
                res = -EINVAL;
                goto out;
        }
-       intsize = be32_to_cpu(*tmp);
  
-       pr_debug(" intsize=%d intlen=%d\n", intsize, intlen);
-       /* Check index */
-       if ((index + 1) * intsize > intlen) {
-               res = -EINVAL;
-               goto out;
-       }
+       pr_debug(" parent=%pOF, intsize=%d\n", p, intsize);
  
        /* Copy intspec into irq structure */
-       intspec += index * intsize;
        out_irq->np = p;
        out_irq->args_count = intsize;
-       for (i = 0; i < intsize; i++)
-               out_irq->args[i] = be32_to_cpup(intspec++);
+       for (i = 0; i < intsize; i++) {
+               res = of_property_read_u32_index(device, "interrupts",
+                                                (index * intsize) + i,
+                                                out_irq->args + i);
+               if (res)
+                       goto out;
+       }
+       pr_debug(" intspec=%d\n", *out_irq->args);
  
        /* Check if there are any interrupt-map translations to process */
        res = of_irq_parse_raw(addr, out_irq);
@@@ -476,7 -461,7 +461,7 @@@ int of_irq_to_resource_table(struct dev
        int i;
  
        for (i = 0; i < nr_irqs; i++, res++)
 -              if (!of_irq_to_resource(dev, i, res))
 +              if (of_irq_to_resource(dev, i, res) <= 0)
                        break;
  
        return i;
@@@ -508,7 -493,7 +493,7 @@@ void __init of_irq_init(const struct of
        INIT_LIST_HEAD(&intc_parent_list);
  
        for_each_matching_node_and_match(np, matches, &match) {
-               if (!of_find_property(np, "interrupt-controller", NULL) ||
+               if (!of_property_read_bool(np, "interrupt-controller") ||
                                !of_device_is_available(np))
                        continue;
  
  
                        of_node_set_flag(desc->dev, OF_POPULATED);
  
-                       pr_debug("of_irq_init: init %s (%p), parent %p\n",
-                                desc->dev->full_name,
+                       pr_debug("of_irq_init: init %pOF (%p), parent %p\n",
+                                desc->dev,
                                 desc->dev, desc->interrupt_parent);
                        ret = desc->irq_init_cb(desc->dev,
                                                desc->interrupt_parent);
diff --combined drivers/of/of_mdio.c
index b14a00034fb12a1b493e5f7afeceb7c094532e2b,754b9d6cd1cd8e64a80a2bc2bce5d77bdf99657b..d94dd8b77abd5140d52c6dfbdff249409225cbec
@@@ -166,8 -166,8 +166,8 @@@ static bool of_mdiobus_child_is_phy(str
  
        if (of_match_node(whitelist_phys, child)) {
                pr_warn(FW_WARN
-                       "%s: Whitelisted compatible string. Please remove\n",
-                       child->full_name);
+                       "%pOF: Whitelisted compatible string. Please remove\n",
+                       child);
                return true;
        }
  
@@@ -421,14 -421,19 +421,14 @@@ int of_phy_register_fixed_link(struct d
  {
        struct fixed_phy_status status = {};
        struct device_node *fixed_link_node;
 -      const __be32 *fixed_link_prop;
 -      int link_gpio;
 -      int len, err;
 -      struct phy_device *phy;
 +      u32 fixed_link_prop[5];
        const char *managed;
 +      int link_gpio = -1;
  
 -      err = of_property_read_string(np, "managed", &managed);
 -      if (err == 0) {
 -              if (strcmp(managed, "in-band-status") == 0) {
 -                      /* status is zeroed, namely its .link member */
 -                      phy = fixed_phy_register(PHY_POLL, &status, -1, np);
 -                      return PTR_ERR_OR_ZERO(phy);
 -              }
 +      if (of_property_read_string(np, "managed", &managed) == 0 &&
 +          strcmp(managed, "in-band-status") == 0) {
 +              /* status is zeroed, namely its .link member */
 +              goto register_phy;
        }
  
        /* New binding */
                if (link_gpio == -EPROBE_DEFER)
                        return -EPROBE_DEFER;
  
 -              phy = fixed_phy_register(PHY_POLL, &status, link_gpio, np);
 -              return PTR_ERR_OR_ZERO(phy);
 +              goto register_phy;
        }
  
        /* Old binding */
 -      fixed_link_prop = of_get_property(np, "fixed-link", &len);
 -      if (fixed_link_prop && len == (5 * sizeof(__be32))) {
 +      if (of_property_read_u32_array(np, "fixed-link", fixed_link_prop,
 +                                     ARRAY_SIZE(fixed_link_prop)) == 0) {
                status.link = 1;
 -              status.duplex = be32_to_cpu(fixed_link_prop[1]);
 -              status.speed = be32_to_cpu(fixed_link_prop[2]);
 -              status.pause = be32_to_cpu(fixed_link_prop[3]);
 -              status.asym_pause = be32_to_cpu(fixed_link_prop[4]);
 -              phy = fixed_phy_register(PHY_POLL, &status, -1, np);
 -              return PTR_ERR_OR_ZERO(phy);
 +              status.duplex = fixed_link_prop[1];
 +              status.speed  = fixed_link_prop[2];
 +              status.pause  = fixed_link_prop[3];
 +              status.asym_pause = fixed_link_prop[4];
 +              goto register_phy;
        }
  
        return -ENODEV;
 +
 +register_phy:
 +      return PTR_ERR_OR_ZERO(fixed_phy_register(PHY_POLL, &status, link_gpio,
 +                                                np));
  }
  EXPORT_SYMBOL(of_phy_register_fixed_link);
  
diff --combined drivers/of/property.c
index ed9c3827fad2c32d0ebccb34943177f7c0189ec6,9eb45f69db2fe0b68fa952b1c9289f28f28e9510..fbb72116e9d456b8a08672391de9e2cc144ed171
@@@ -55,8 -55,8 +55,8 @@@ int of_property_count_elems_of_size(con
                return -ENODATA;
  
        if (prop->length % elem_size != 0) {
-               pr_err("size of %s in node %s is not a multiple of %d\n",
-                      propname, np->full_name, elem_size);
+               pr_err("size of %s in node %pOF is not a multiple of %d\n",
+                      propname, np, elem_size);
                return -EINVAL;
        }
  
@@@ -537,8 -537,8 +537,8 @@@ int of_graph_parse_endpoint(const struc
  {
        struct device_node *port_node = of_get_parent(node);
  
-       WARN_ONCE(!port_node, "%s(): endpoint %s has no parent node\n",
-                 __func__, node->full_name);
+       WARN_ONCE(!port_node, "%s(): endpoint %pOF has no parent node\n",
+                 __func__, node);
  
        memset(endpoint, 0, sizeof(*endpoint));
  
@@@ -621,14 -621,13 +621,13 @@@ struct device_node *of_graph_get_next_e
                of_node_put(node);
  
                if (!port) {
-                       pr_err("graph: no port node found in %s\n",
-                              parent->full_name);
+                       pr_err("graph: no port node found in %pOF\n", parent);
                        return NULL;
                }
        } else {
                port = of_get_parent(prev);
-               if (WARN_ONCE(!port, "%s(): endpoint %s has no parent node\n",
-                             __func__, prev->full_name))
+               if (WARN_ONCE(!port, "%s(): endpoint %pOF has no parent node\n",
+                             __func__, prev))
                        return NULL;
        }
  
@@@ -708,15 -707,6 +707,15 @@@ struct device_node *of_graph_get_port_p
  {
        unsigned int depth;
  
 +      if (!node)
 +              return NULL;
 +
 +      /*
 +       * Preserve usecount for passed in node as of_get_next_parent()
 +       * will do of_node_put() on it.
 +       */
 +      of_node_get(node);
 +
        /* Walk 3 levels up only if there is 'ports' node. */
        for (depth = 3; depth && node; depth--) {
                node = of_get_next_parent(node);
@@@ -737,16 -727,12 +736,16 @@@ EXPORT_SYMBOL(of_graph_get_port_parent)
  struct device_node *of_graph_get_remote_port_parent(
                               const struct device_node *node)
  {
 -      struct device_node *np;
 +      struct device_node *np, *pp;
  
        /* Get remote endpoint node. */
        np = of_graph_get_remote_endpoint(node);
  
 -      return of_graph_get_port_parent(np);
 +      pp = of_graph_get_port_parent(np);
 +
 +      of_node_put(np);
 +
 +      return pp;
  }
  EXPORT_SYMBOL(of_graph_get_remote_port_parent);
  
@@@ -797,8 -783,8 +796,8 @@@ struct device_node *of_graph_get_remote
  
        endpoint_node = of_graph_get_endpoint_by_regs(node, port, endpoint);
        if (!endpoint_node) {
-               pr_debug("no valid endpoint (%d, %d) for node %s\n",
-                        port, endpoint, node->full_name);
+               pr_debug("no valid endpoint (%d, %d) for node %pOF\n",
+                        port, endpoint, node);
                return NULL;
        }
  
@@@ -828,23 -814,23 +827,23 @@@ static void of_fwnode_put(struct fwnode
        of_node_put(to_of_node(fwnode));
  }
  
 -static bool of_fwnode_device_is_available(struct fwnode_handle *fwnode)
 +static bool of_fwnode_device_is_available(const struct fwnode_handle *fwnode)
  {
        return of_device_is_available(to_of_node(fwnode));
  }
  
 -static bool of_fwnode_property_present(struct fwnode_handle *fwnode,
 +static bool of_fwnode_property_present(const struct fwnode_handle *fwnode,
                                       const char *propname)
  {
        return of_property_read_bool(to_of_node(fwnode), propname);
  }
  
 -static int of_fwnode_property_read_int_array(struct fwnode_handle *fwnode,
 +static int of_fwnode_property_read_int_array(const struct fwnode_handle *fwnode,
                                             const char *propname,
                                             unsigned int elem_size, void *val,
                                             size_t nval)
  {
 -      struct device_node *node = to_of_node(fwnode);
 +      const struct device_node *node = to_of_node(fwnode);
  
        if (!val)
                return of_property_count_elems_of_size(node, propname,
        return -ENXIO;
  }
  
 -static int of_fwnode_property_read_string_array(struct fwnode_handle *fwnode,
 -                                              const char *propname,
 -                                              const char **val, size_t nval)
 +static int
 +of_fwnode_property_read_string_array(const struct fwnode_handle *fwnode,
 +                                   const char *propname, const char **val,
 +                                   size_t nval)
  {
 -      struct device_node *node = to_of_node(fwnode);
 +      const struct device_node *node = to_of_node(fwnode);
  
        return val ?
                of_property_read_string_array(node, propname, val, nval) :
                of_property_count_strings(node, propname);
  }
  
 -static struct fwnode_handle *of_fwnode_get_parent(struct fwnode_handle *fwnode)
 +static struct fwnode_handle *
 +of_fwnode_get_parent(const struct fwnode_handle *fwnode)
  {
        return of_fwnode_handle(of_get_parent(to_of_node(fwnode)));
  }
  
  static struct fwnode_handle *
 -of_fwnode_get_next_child_node(struct fwnode_handle *fwnode,
 +of_fwnode_get_next_child_node(const struct fwnode_handle *fwnode,
                              struct fwnode_handle *child)
  {
        return of_fwnode_handle(of_get_next_available_child(to_of_node(fwnode),
  }
  
  static struct fwnode_handle *
 -of_fwnode_get_named_child_node(struct fwnode_handle *fwnode,
 +of_fwnode_get_named_child_node(const struct fwnode_handle *fwnode,
                               const char *childname)
  {
 -      struct device_node *node = to_of_node(fwnode);
 +      const struct device_node *node = to_of_node(fwnode);
        struct device_node *child;
  
        for_each_available_child_of_node(node, child)
        return NULL;
  }
  
 +static int
 +of_fwnode_get_reference_args(const struct fwnode_handle *fwnode,
 +                           const char *prop, const char *nargs_prop,
 +                           unsigned int nargs, unsigned int index,
 +                           struct fwnode_reference_args *args)
 +{
 +      struct of_phandle_args of_args;
 +      unsigned int i;
 +      int ret;
 +
 +      if (nargs_prop)
 +              ret = of_parse_phandle_with_args(to_of_node(fwnode), prop,
 +                                               nargs_prop, index, &of_args);
 +      else
 +              ret = of_parse_phandle_with_fixed_args(to_of_node(fwnode), prop,
 +                                                     nargs, index, &of_args);
 +      if (ret < 0)
 +              return ret;
 +      if (!args)
 +              return 0;
 +
 +      args->nargs = of_args.args_count;
 +      args->fwnode = of_fwnode_handle(of_args.np);
 +
 +      for (i = 0; i < NR_FWNODE_REFERENCE_ARGS; i++)
 +              args->args[i] = i < of_args.args_count ? of_args.args[i] : 0;
 +
 +      return 0;
 +}
 +
  static struct fwnode_handle *
 -of_fwnode_graph_get_next_endpoint(struct fwnode_handle *fwnode,
 +of_fwnode_graph_get_next_endpoint(const struct fwnode_handle *fwnode,
                                  struct fwnode_handle *prev)
  {
        return of_fwnode_handle(of_graph_get_next_endpoint(to_of_node(fwnode),
  }
  
  static struct fwnode_handle *
 -of_fwnode_graph_get_remote_endpoint(struct fwnode_handle *fwnode)
 +of_fwnode_graph_get_remote_endpoint(const struct fwnode_handle *fwnode)
  {
-       return of_fwnode_handle(of_parse_phandle(to_of_node(fwnode),
-                                                "remote-endpoint", 0));
+       return of_fwnode_handle(
+               of_graph_get_remote_endpoint(to_of_node(fwnode)));
  }
  
  static struct fwnode_handle *
@@@ -966,10 -920,10 +965,10 @@@ of_fwnode_graph_get_port_parent(struct 
        return of_fwnode_handle(of_get_next_parent(np));
  }
  
 -static int of_fwnode_graph_parse_endpoint(struct fwnode_handle *fwnode,
 +static int of_fwnode_graph_parse_endpoint(const struct fwnode_handle *fwnode,
                                          struct fwnode_endpoint *endpoint)
  {
 -      struct device_node *node = to_of_node(fwnode);
 +      const struct device_node *node = to_of_node(fwnode);
        struct device_node *port_node = of_get_parent(node);
  
        endpoint->local_fwnode = fwnode;
@@@ -992,10 -946,8 +991,10 @@@ const struct fwnode_operations of_fwnod
        .get_parent = of_fwnode_get_parent,
        .get_next_child_node = of_fwnode_get_next_child_node,
        .get_named_child_node = of_fwnode_get_named_child_node,
 +      .get_reference_args = of_fwnode_get_reference_args,
        .graph_get_next_endpoint = of_fwnode_graph_get_next_endpoint,
        .graph_get_remote_endpoint = of_fwnode_graph_get_remote_endpoint,
        .graph_get_port_parent = of_fwnode_graph_get_port_parent,
        .graph_parse_endpoint = of_fwnode_graph_parse_endpoint,
  };
 +EXPORT_SYMBOL_GPL(of_fwnode_ops);
This page took 0.172446 seconds and 4 git commands to generate.