Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

Pull devicetree updates from Rob Herring:
"DT Bindings:

- Convert samsung,exynos5-dp, atmel,lcdc, aspeed,ast2400-wdt bindings
to schemas

- Add bindings for Allwinner H616 NMI controller, Renesas r8a779g0
irqc, Renesas R-Car V4M TMU and CMT timers, Freescale S32G3
linflexuart, and Mediatek MT7988 XHCI

- Add 'reg' constraints on DSI and SPI display panels

- More dropping of unnecessary quotes in schemas

- Use full paths rather than relative paths in schema $refs

- Drop redundant storing of phandle for reserved memory

DT Core:

- Use scope based cleanups for kfree() and of_node_put()

- Track interrupt-map and power-supplies for fw_devlink

- Add buffer overflow check in of_modalias()

- Add and use __of_prop_free() helper for freeing struct property"

* tag 'devicetree-for-6.10' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux: (25 commits)
of: property: Add fw_devlink support for interrupt-map property
dt-bindings: display: panel: constrain 'reg' in DSI panels
dt-bindings: display: panel: constrain 'reg' in SPI panels
dt-bindings: display: samsung,ams495qa01: add missing SPI properties ref
dt-bindings: Use full path to other schemas
dt-bindings: PCI: qcom,pcie-sm8350: Drop redundant 'oneOf' sub-schema
of: module: add buffer overflow check in of_modalias()
dt-bindings: PCI: microchip: increase number of items in ranges property
dt-bindings: Drop unnecessary quotes on keys
dt-bindings: interrupt-controller: mediatek,mt6577-sysirq: Drop unnecessary quotes
of: property: Use scope based cleanup on port_node
of: reserved_mem: Remove the use of phandle from the reserved_mem APIs
of: property: fw_devlink: Add support for "power-supplies" binding
dt-bindings: watchdog: aspeed,ast2400-wdt: Convert to DT schema
dt-bindings: irq: sun7i-nmi: Add binding for the H616 NMI controller
dt-bindings: interrupt-controller: renesas,irqc: Add r8a779g0 support
dt-bindings: timer: renesas,tmu: Add R-Car V4M support
dt-bindings: timer: renesas,cmt: Add R-Car V4M support
of: Use scope based of_node_put() cleanups
of: Use scope based kfree() cleanups
...

+853 -588
+103
Documentation/devicetree/bindings/display/atmel,lcdc-display.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/atmel,lcdc-display.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Microchip's LCDC Display 8 + 9 + maintainers: 10 + - Nicolas Ferre <nicolas.ferre@microchip.com> 11 + - Dharma Balasubiramani <dharma.b@microchip.com> 12 + 13 + description: 14 + The LCD Controller (LCDC) consists of logic for transferring LCD image data 15 + from an external display buffer to a TFT LCD panel. The LCDC has one display 16 + input buffer per layer that fetches pixels through the single bus host 17 + interface and a look-up table to allow palletized display configurations. The 18 + LCDC is programmable on a per layer basis, and supports different LCD 19 + resolutions, window sizes, image formats and pixel depths. 20 + 21 + # We need a select here since this schema is applicable only for nodes with the 22 + # following properties 23 + 24 + select: 25 + anyOf: 26 + - required: [ 'atmel,dmacon' ] 27 + - required: [ 'atmel,lcdcon2' ] 28 + - required: [ 'atmel,guard-time' ] 29 + 30 + properties: 31 + atmel,dmacon: 32 + $ref: /schemas/types.yaml#/definitions/uint32 33 + description: dma controller configuration 34 + 35 + atmel,lcdcon2: 36 + $ref: /schemas/types.yaml#/definitions/uint32 37 + description: lcd controller configuration 38 + 39 + atmel,guard-time: 40 + $ref: /schemas/types.yaml#/definitions/uint32 41 + description: lcd guard time (Delay in frame periods) 42 + maximum: 127 43 + 44 + bits-per-pixel: 45 + $ref: /schemas/types.yaml#/definitions/uint32 46 + description: lcd panel bit-depth. 47 + enum: [1, 2, 4, 8, 16, 24, 32] 48 + 49 + atmel,lcdcon-backlight: 50 + $ref: /schemas/types.yaml#/definitions/flag 51 + description: enable backlight 52 + 53 + atmel,lcdcon-backlight-inverted: 54 + $ref: /schemas/types.yaml#/definitions/flag 55 + description: invert backlight PWM polarity 56 + 57 + atmel,lcd-wiring-mode: 58 + $ref: /schemas/types.yaml#/definitions/string 59 + description: lcd wiring mode "RGB" or "BRG" 60 + enum: 61 + - RGB 62 + - BRG 63 + 64 + atmel,power-control-gpio: 65 + description: gpio to power on or off the LCD (as many as needed) 66 + maxItems: 1 67 + 68 + display-timings: 69 + $ref: panel/display-timings.yaml# 70 + 71 + required: 72 + - atmel,dmacon 73 + - atmel,lcdcon2 74 + - atmel,guard-time 75 + - bits-per-pixel 76 + 77 + additionalProperties: false 78 + 79 + examples: 80 + - | 81 + display: panel { 82 + bits-per-pixel = <32>; 83 + atmel,lcdcon-backlight; 84 + atmel,dmacon = <0x1>; 85 + atmel,lcdcon2 = <0x80008002>; 86 + atmel,guard-time = <9>; 87 + atmel,lcd-wiring-mode = "RGB"; 88 + 89 + display-timings { 90 + native-mode = <&timing0>; 91 + timing0: timing0 { 92 + clock-frequency = <9000000>; 93 + hactive = <480>; 94 + vactive = <272>; 95 + hback-porch = <1>; 96 + hfront-porch = <1>; 97 + vback-porch = <40>; 98 + vfront-porch = <1>; 99 + hsync-len = <45>; 100 + vsync-len = <1>; 101 + }; 102 + }; 103 + };
-87
Documentation/devicetree/bindings/display/atmel,lcdc.txt
··· 1 - Atmel LCDC Framebuffer 2 - ----------------------------------------------------- 3 - 4 - Required properties: 5 - - compatible : 6 - "atmel,at91sam9261-lcdc" , 7 - "atmel,at91sam9263-lcdc" , 8 - "atmel,at91sam9g10-lcdc" , 9 - "atmel,at91sam9g45-lcdc" , 10 - "atmel,at91sam9g45es-lcdc" , 11 - "atmel,at91sam9rl-lcdc" , 12 - - reg : Should contain 1 register ranges(address and length). 13 - Can contain an additional register range(address and length) 14 - for fixed framebuffer memory. Useful for dedicated memories. 15 - - interrupts : framebuffer controller interrupt 16 - - display: a phandle pointing to the display node 17 - 18 - Required nodes: 19 - - display: a display node is required to initialize the lcd panel 20 - This should be in the board dts. 21 - - default-mode: a videomode within the display with timing parameters 22 - as specified below. 23 - 24 - Optional properties: 25 - - lcd-supply: Regulator for LCD supply voltage. 26 - 27 - Example: 28 - 29 - fb0: fb@00500000 { 30 - compatible = "atmel,at91sam9g45-lcdc"; 31 - reg = <0x00500000 0x1000>; 32 - interrupts = <23 3 0>; 33 - pinctrl-names = "default"; 34 - pinctrl-0 = <&pinctrl_fb>; 35 - display = <&display0>; 36 - #address-cells = <1>; 37 - #size-cells = <1>; 38 - 39 - }; 40 - 41 - Example for fixed framebuffer memory: 42 - 43 - fb0: fb@00500000 { 44 - compatible = "atmel,at91sam9263-lcdc"; 45 - reg = <0x00700000 0x1000 0x70000000 0x200000>; 46 - [...] 47 - }; 48 - 49 - Atmel LCDC Display 50 - ----------------------------------------------------- 51 - Required properties (as per of_videomode_helper): 52 - 53 - - atmel,dmacon: dma controller configuration 54 - - atmel,lcdcon2: lcd controller configuration 55 - - atmel,guard-time: lcd guard time (Delay in frame periods) 56 - - bits-per-pixel: lcd panel bit-depth. 57 - 58 - Optional properties (as per of_videomode_helper): 59 - - atmel,lcdcon-backlight: enable backlight 60 - - atmel,lcdcon-backlight-inverted: invert backlight PWM polarity 61 - - atmel,lcd-wiring-mode: lcd wiring mode "RGB" or "BRG" 62 - - atmel,power-control-gpio: gpio to power on or off the LCD (as many as needed) 63 - 64 - Example: 65 - display0: display { 66 - bits-per-pixel = <32>; 67 - atmel,lcdcon-backlight; 68 - atmel,dmacon = <0x1>; 69 - atmel,lcdcon2 = <0x80008002>; 70 - atmel,guard-time = <9>; 71 - atmel,lcd-wiring-mode = <1>; 72 - 73 - display-timings { 74 - native-mode = <&timing0>; 75 - timing0: timing0 { 76 - clock-frequency = <9000000>; 77 - hactive = <480>; 78 - vactive = <272>; 79 - hback-porch = <1>; 80 - hfront-porch = <1>; 81 - vback-porch = <40>; 82 - vfront-porch = <1>; 83 - hsync-len = <45>; 84 - vsync-len = <1>; 85 - }; 86 - }; 87 - };
+70
Documentation/devicetree/bindings/display/atmel,lcdc.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/atmel,lcdc.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Microchip's LCDC Framebuffer 8 + 9 + maintainers: 10 + - Nicolas Ferre <nicolas.ferre@microchip.com> 11 + - Dharma Balasubiramani <dharma.b@microchip.com> 12 + 13 + description: 14 + The LCDC works with a framebuffer, which is a section of memory that contains 15 + a complete frame of data representing pixel values for the display. The LCDC 16 + reads the pixel data from the framebuffer and sends it to the LCD panel to 17 + render the image. 18 + 19 + properties: 20 + compatible: 21 + enum: 22 + - atmel,at91sam9261-lcdc 23 + - atmel,at91sam9263-lcdc 24 + - atmel,at91sam9g10-lcdc 25 + - atmel,at91sam9g45-lcdc 26 + - atmel,at91sam9g45es-lcdc 27 + - atmel,at91sam9rl-lcdc 28 + 29 + reg: 30 + maxItems: 1 31 + 32 + interrupts: 33 + maxItems: 1 34 + 35 + clocks: 36 + maxItems: 2 37 + 38 + clock-names: 39 + items: 40 + - const: hclk 41 + - const: lcdc_clk 42 + 43 + display: 44 + $ref: /schemas/types.yaml#/definitions/phandle 45 + description: A phandle pointing to the display node. 46 + 47 + required: 48 + - compatible 49 + - reg 50 + - interrupts 51 + - clocks 52 + - clock-names 53 + - display 54 + 55 + additionalProperties: false 56 + 57 + examples: 58 + - | 59 + #include <dt-bindings/clock/at91.h> 60 + #include <dt-bindings/interrupt-controller/irq.h> 61 + fb@500000 { 62 + compatible = "atmel,at91sam9g45-lcdc"; 63 + reg = <0x00500000 0x1000>; 64 + interrupts = <23 IRQ_TYPE_LEVEL_HIGH 0>; 65 + pinctrl-names = "default"; 66 + pinctrl-0 = <&pinctrl_fb>; 67 + clocks = <&pmc PMC_TYPE_PERIPHERAL 23>, <&pmc PMC_TYPE_PERIPHERAL 23>; 68 + clock-names = "hclk", "lcdc_clk"; 69 + display = <&display>; 70 + };
-112
Documentation/devicetree/bindings/display/exynos/exynos_dp.txt
··· 1 - The Exynos display port interface should be configured based on 2 - the type of panel connected to it. 3 - 4 - We use two nodes: 5 - -dp-controller node 6 - -dptx-phy node(defined inside dp-controller node) 7 - 8 - For the DP-PHY initialization, we use the dptx-phy node. 9 - Required properties for dptx-phy: deprecated, use phys and phy-names 10 - -reg: deprecated 11 - Base address of DP PHY register. 12 - -samsung,enable-mask: deprecated 13 - The bit-mask used to enable/disable DP PHY. 14 - 15 - For the Panel initialization, we read data from dp-controller node. 16 - Required properties for dp-controller: 17 - -compatible: 18 - should be "samsung,exynos5-dp". 19 - -reg: 20 - physical base address of the controller and length 21 - of memory mapped region. 22 - -interrupts: 23 - interrupt combiner values. 24 - -clocks: 25 - from common clock binding: handle to dp clock. 26 - -clock-names: 27 - from common clock binding: Shall be "dp". 28 - -phys: 29 - from general PHY binding: the phandle for the PHY device. 30 - -phy-names: 31 - from general PHY binding: Should be "dp". 32 - 33 - Optional properties for dp-controller: 34 - -interlaced: 35 - interlace scan mode. 36 - Progressive if defined, Interlaced if not defined 37 - -vsync-active-high: 38 - VSYNC polarity configuration. 39 - High if defined, Low if not defined 40 - -hsync-active-high: 41 - HSYNC polarity configuration. 42 - High if defined, Low if not defined 43 - -samsung,hpd-gpio: 44 - Hotplug detect GPIO. 45 - Indicates which GPIO should be used for hotplug 46 - detection 47 - -video interfaces: Device node can contain video interface port 48 - nodes according to [1]. 49 - - display-timings: timings for the connected panel as described by 50 - Documentation/devicetree/bindings/display/panel/display-timing.txt 51 - 52 - For the below properties, please refer to Analogix DP binding document: 53 - * Documentation/devicetree/bindings/display/bridge/analogix,dp.yaml 54 - -phys (required) 55 - -phy-names (required) 56 - -hpd-gpios (optional) 57 - force-hpd (optional) 58 - 59 - Deprecated properties for DisplayPort: 60 - -interlaced: deprecated prop that can parsed from drm_display_mode. 61 - -vsync-active-high: deprecated prop that can parsed from drm_display_mode. 62 - -hsync-active-high: deprecated prop that can parsed from drm_display_mode. 63 - -samsung,ycbcr-coeff: deprecated prop that can parsed from drm_display_mode. 64 - -samsung,dynamic-range: deprecated prop that can parsed from drm_display_mode. 65 - -samsung,color-space: deprecated prop that can parsed from drm_display_info. 66 - -samsung,color-depth: deprecated prop that can parsed from drm_display_info. 67 - -samsung,link-rate: deprecated prop that can reading from monitor by dpcd method. 68 - -samsung,lane-count: deprecated prop that can reading from monitor by dpcd method. 69 - -samsung,hpd-gpio: deprecated name for hpd-gpios. 70 - 71 - ------------------------------------------------------------------------------- 72 - 73 - Example: 74 - 75 - SOC specific portion: 76 - dp-controller { 77 - compatible = "samsung,exynos5-dp"; 78 - reg = <0x145b0000 0x10000>; 79 - interrupts = <10 3>; 80 - interrupt-parent = <&combiner>; 81 - clocks = <&clock 342>; 82 - clock-names = "dp"; 83 - 84 - phys = <&dp_phy>; 85 - phy-names = "dp"; 86 - }; 87 - 88 - Board Specific portion: 89 - dp-controller { 90 - display-timings { 91 - native-mode = <&lcd_timing>; 92 - lcd_timing: 1366x768 { 93 - clock-frequency = <70589280>; 94 - hactive = <1366>; 95 - vactive = <768>; 96 - hfront-porch = <40>; 97 - hback-porch = <40>; 98 - hsync-len = <32>; 99 - vback-porch = <10>; 100 - vfront-porch = <12>; 101 - vsync-len = <6>; 102 - }; 103 - }; 104 - 105 - ports { 106 - port@0 { 107 - dp_out: endpoint { 108 - remote-endpoint = <&bridge_in>; 109 - }; 110 - }; 111 - }; 112 - };
+3 -1
Documentation/devicetree/bindings/display/panel/abt,y030xx067a.yaml
··· 17 17 compatible: 18 18 const: abt,y030xx067a 19 19 20 + reg: 21 + maxItems: 1 22 + 20 23 backlight: true 21 24 port: true 22 25 power-supply: true 23 - reg: true 24 26 reset-gpios: true 25 27 26 28 required:
+4 -1
Documentation/devicetree/bindings/display/panel/asus,z00t-tm5p5-nt35596.yaml
··· 21 21 properties: 22 22 compatible: 23 23 const: asus,z00t-tm5p5-n35596 24 - reg: true 24 + 25 + reg: 26 + maxItems: 1 27 + 25 28 reset-gpios: true 26 29 vdd-supply: 27 30 description: core voltage supply
+3 -1
Documentation/devicetree/bindings/display/panel/boe,bf060y8m-aj0.yaml
··· 26 26 compatible: 27 27 const: boe,bf060y8m-aj0 28 28 29 + reg: 30 + maxItems: 1 31 + 29 32 elvdd-supply: 30 33 description: EL Driving positive (VDD) supply (4.40-4.80V) 31 34 elvss-supply: ··· 41 38 description: I/O voltage supply (1.62-1.98V) 42 39 43 40 port: true 44 - reg: true 45 41 reset-gpios: true 46 42 47 43 required:
+3 -1
Documentation/devicetree/bindings/display/panel/boe,himax8279d.yaml
··· 18 18 - const: boe,himax8279d8p 19 19 - const: boe,himax8279d10p 20 20 21 + reg: 22 + maxItems: 1 23 + 21 24 backlight: true 22 25 enable-gpios: true 23 - reg: true 24 26 25 27 pp33-gpios: 26 28 maxItems: 1
+3 -1
Documentation/devicetree/bindings/display/panel/boe,th101mb31ig002-28a.yaml
··· 18 18 # BOE TH101MB31IG002-28A 10.1" WXGA TFT LCD panel 19 19 - boe,th101mb31ig002-28a 20 20 21 - reg: true 21 + reg: 22 + maxItems: 1 23 + 22 24 backlight: true 23 25 enable-gpios: true 24 26 power-supply: true
+1 -1
Documentation/devicetree/bindings/display/panel/boe,tv101wum-nl6.yaml
··· 38 38 - starry,ili9882t 39 39 40 40 reg: 41 - description: the virtual channel number of a DSI peripheral 41 + maxItems: 1 42 42 43 43 enable-gpios: 44 44 description: a GPIO spec for the enable pin
+4 -1
Documentation/devicetree/bindings/display/panel/elida,kd35t133.yaml
··· 15 15 properties: 16 16 compatible: 17 17 const: elida,kd35t133 18 - reg: true 18 + 19 + reg: 20 + maxItems: 1 21 + 19 22 backlight: true 20 23 port: true 21 24 reset-gpios: true
+3
Documentation/devicetree/bindings/display/panel/fascontek,fs035vg158.yaml
··· 17 17 compatible: 18 18 const: fascontek,fs035vg158 19 19 20 + reg: 21 + maxItems: 1 22 + 20 23 spi-3wire: true 21 24 22 25 required:
+4 -1
Documentation/devicetree/bindings/display/panel/feixin,k101-im2ba02.yaml
··· 15 15 properties: 16 16 compatible: 17 17 const: feixin,k101-im2ba02 18 - reg: true 18 + 19 + reg: 20 + maxItems: 1 21 + 19 22 backlight: true 20 23 reset-gpios: true 21 24 avdd-supply:
+3 -1
Documentation/devicetree/bindings/display/panel/himax,hx83112a.yaml
··· 21 21 contains: 22 22 const: djn,9a-3r063-1102b 23 23 24 + reg: 25 + maxItems: 1 26 + 24 27 vdd1-supply: 25 28 description: Digital voltage rail 26 29 ··· 33 30 vsp-supply: 34 31 description: Negative source voltage rail 35 32 36 - reg: true 37 33 port: true 38 34 39 35 required:
+2 -1
Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml
··· 26 26 - powkiddy,x55-panel 27 27 - const: himax,hx8394 28 28 29 - reg: true 29 + reg: 30 + maxItems: 1 30 31 31 32 reset-gpios: true 32 33
+3 -1
Documentation/devicetree/bindings/display/panel/ilitek,ili9163.yaml
··· 24 24 - newhaven,1.8-128160EF 25 25 - const: ilitek,ili9163 26 26 27 + reg: 28 + maxItems: 1 29 + 27 30 spi-max-frequency: 28 31 maximum: 32000000 29 32 ··· 35 32 description: Display data/command selection (D/CX) 36 33 37 34 backlight: true 38 - reg: true 39 35 reset-gpios: true 40 36 rotation: true 41 37
+3
Documentation/devicetree/bindings/display/panel/ilitek,ili9322.yaml
··· 26 26 - dlink,dir-685-panel 27 27 - const: ilitek,ili9322 28 28 29 + reg: 30 + maxItems: 1 31 + 29 32 reset-gpios: true 30 33 port: true 31 34
+2 -1
Documentation/devicetree/bindings/display/panel/ilitek,ili9341.yaml
··· 28 28 - canaan,kd233-tft 29 29 - const: ilitek,ili9341 30 30 31 - reg: true 31 + reg: 32 + maxItems: 1 32 33 33 34 dc-gpios: 34 35 maxItems: 1
+3 -1
Documentation/devicetree/bindings/display/panel/ilitek,ili9805.yaml
··· 20 20 - tianma,tm041xdhg01 21 21 - const: ilitek,ili9805 22 22 23 + reg: 24 + maxItems: 1 25 + 23 26 avdd-supply: true 24 27 dvdd-supply: true 25 - reg: true 26 28 27 29 required: 28 30 - compatible
+3 -1
Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml
··· 24 24 - wanchanglong,w552946aba 25 25 - const: ilitek,ili9881c 26 26 27 + reg: 28 + maxItems: 1 29 + 27 30 backlight: true 28 31 power-supply: true 29 - reg: true 30 32 reset-gpios: true 31 33 rotation: true 32 34
+3 -1
Documentation/devicetree/bindings/display/panel/innolux,ej030na.yaml
··· 17 17 compatible: 18 18 const: innolux,ej030na 19 19 20 + reg: 21 + maxItems: 1 22 + 20 23 backlight: true 21 24 port: true 22 25 power-supply: true 23 - reg: true 24 26 reset-gpios: true 25 27 26 28 required:
+3 -1
Documentation/devicetree/bindings/display/panel/innolux,p097pfg.yaml
··· 16 16 compatible: 17 17 const: innolux,p097pfg 18 18 19 + reg: 20 + maxItems: 1 21 + 19 22 backlight: true 20 23 enable-gpios: true 21 - reg: true 22 24 23 25 avdd-supply: 24 26 description: The regulator that provides positive voltage
+2 -1
Documentation/devicetree/bindings/display/panel/jadard,jd9365da-h3.yaml
··· 21 21 - radxa,display-8hd-ad002 22 22 - const: jadard,jd9365da-h3 23 23 24 - reg: true 24 + reg: 25 + maxItems: 1 25 26 26 27 vdd-supply: 27 28 description: supply regulator for VDD, usually 3.3V
+3 -1
Documentation/devicetree/bindings/display/panel/jdi,lpm102a188a.yaml
··· 26 26 compatible: 27 27 const: jdi,lpm102a188a 28 28 29 - reg: true 29 + reg: 30 + maxItems: 1 31 + 30 32 enable-gpios: true 31 33 reset-gpios: true 32 34 power-supply: true
+3 -1
Documentation/devicetree/bindings/display/panel/jdi,lt070me05000.yaml
··· 16 16 compatible: 17 17 const: jdi,lt070me05000 18 18 19 + reg: 20 + maxItems: 1 21 + 19 22 enable-gpios: true 20 - reg: true 21 23 reset-gpios: true 22 24 23 25 vddp-supply:
+3 -1
Documentation/devicetree/bindings/display/panel/kingdisplay,kd035g6-54nt.yaml
··· 17 17 compatible: 18 18 const: kingdisplay,kd035g6-54nt 19 19 20 + reg: 21 + maxItems: 1 22 + 20 23 backlight: true 21 24 port: true 22 25 power-supply: true 23 - reg: true 24 26 reset-gpios: true 25 27 26 28 spi-3wire: true
+3
Documentation/devicetree/bindings/display/panel/leadtek,ltk035c5444t.yaml
··· 18 18 compatible: 19 19 const: leadtek,ltk035c5444t 20 20 21 + reg: 22 + maxItems: 1 23 + 21 24 spi-3wire: true 22 25 23 26 required:
+4 -1
Documentation/devicetree/bindings/display/panel/leadtek,ltk050h3146w.yaml
··· 18 18 - leadtek,ltk050h3146w 19 19 - leadtek,ltk050h3146w-a2 20 20 - leadtek,ltk050h3148w 21 - reg: true 21 + 22 + reg: 23 + maxItems: 1 24 + 22 25 backlight: true 23 26 reset-gpios: true 24 27 iovcc-supply:
+4 -1
Documentation/devicetree/bindings/display/panel/leadtek,ltk500hd1829.yaml
··· 17 17 enum: 18 18 - leadtek,ltk101b4029w 19 19 - leadtek,ltk500hd1829 20 - reg: true 20 + 21 + reg: 22 + maxItems: 1 23 + 21 24 backlight: true 22 25 reset-gpios: true 23 26 iovcc-supply:
+2 -1
Documentation/devicetree/bindings/display/panel/lg,lg4573.yaml
··· 21 21 compatible: 22 22 const: lg,lg4573 23 23 24 - reg: true 24 + reg: 25 + maxItems: 1 25 26 26 27 required: 27 28 - compatible
+3
Documentation/devicetree/bindings/display/panel/lgphilips,lb035q02.yaml
··· 17 17 compatible: 18 18 const: lgphilips,lb035q02 19 19 20 + reg: 21 + maxItems: 1 22 + 20 23 label: true 21 24 enable-gpios: true 22 25 port: true
+3 -1
Documentation/devicetree/bindings/display/panel/nec,nl8048hl11.yaml
··· 21 21 compatible: 22 22 const: nec,nl8048hl11 23 23 24 + reg: 25 + maxItems: 1 26 + 24 27 label: true 25 28 port: true 26 - reg: true 27 29 reset-gpios: true 28 30 29 31 spi-max-frequency:
+3 -1
Documentation/devicetree/bindings/display/panel/newvision,nv3051d.yaml
··· 24 24 - powkiddy,rk2023-panel 25 25 - const: newvision,nv3051d 26 26 27 - reg: true 27 + reg: 28 + maxItems: 1 29 + 28 30 backlight: true 29 31 port: true 30 32 reset-gpios:
+4 -1
Documentation/devicetree/bindings/display/panel/novatek,nt35510.yaml
··· 24 24 string determines how the NT35510 panel driver shall be configured 25 25 to work with the indicated panel. The novatek,nt35510 compatible shall 26 26 always be provided as a fallback. 27 - reg: true 27 + 28 + reg: 29 + maxItems: 1 30 + 28 31 reset-gpios: true 29 32 vdd-supply: 30 33 description: regulator that supplies the vdd voltage
+3 -1
Documentation/devicetree/bindings/display/panel/novatek,nt35950.yaml
··· 33 33 to work with the indicated panel. The novatek,nt35950 compatible shall 34 34 always be provided as a fallback. 35 35 36 + reg: 37 + maxItems: 1 38 + 36 39 reset-gpios: 37 40 maxItems: 1 38 41 description: phandle of gpio for reset line - This should be 8mA, gpio ··· 52 49 53 50 backlight: true 54 51 ports: true 55 - reg: true 56 52 57 53 required: 58 54 - compatible
+3 -1
Documentation/devicetree/bindings/display/panel/novatek,nt36523.yaml
··· 27 27 - lenovo,j606f-boe-nt36523w 28 28 - const: novatek,nt36523w 29 29 30 + reg: 31 + maxItems: 1 32 + 30 33 reset-gpios: 31 34 maxItems: 1 32 35 description: phandle of gpio for reset line - This should be 8mA ··· 37 34 vddio-supply: 38 35 description: regulator that supplies the I/O voltage 39 36 40 - reg: true 41 37 rotation: true 42 38 backlight: true 43 39
+3 -1
Documentation/devicetree/bindings/display/panel/novatek,nt36672a.yaml
··· 29 29 determines how the NT36672A panel driver is configured for the indicated 30 30 panel. The novatek,nt36672a compatible shall always be provided as a fallback. 31 31 32 + reg: 33 + maxItems: 1 34 + 32 35 reset-gpios: 33 36 maxItems: 1 34 37 description: phandle of gpio for reset line - This should be 8mA, gpio ··· 47 44 vddneg-supply: 48 45 description: phandle of the negative boost supply regulator 49 46 50 - reg: true 51 47 port: true 52 48 backlight: true 53 49
+3 -1
Documentation/devicetree/bindings/display/panel/olimex,lcd-olinuxino.yaml
··· 38 38 compatible: 39 39 const: olimex,lcd-olinuxino 40 40 41 + reg: 42 + maxItems: 1 43 + 41 44 backlight: true 42 45 enable-gpios: true 43 46 power-supply: true 44 - reg: true 45 47 46 48 required: 47 49 - compatible
+3
Documentation/devicetree/bindings/display/panel/panel-mipi-dbi-spi.yaml
··· 71 71 - shineworld,lh133k 72 72 - const: panel-mipi-dbi-spi 73 73 74 + reg: 75 + maxItems: 1 76 + 74 77 write-only: 75 78 type: boolean 76 79 description:
+3 -1
Documentation/devicetree/bindings/display/panel/raydium,rm67191.yaml
··· 16 16 compatible: 17 17 const: raydium,rm67191 18 18 19 - reg: true 19 + reg: 20 + maxItems: 1 21 + 20 22 port: true 21 23 reset-gpios: true 22 24 width-mm: true
+3 -1
Documentation/devicetree/bindings/display/panel/raydium,rm692e5.yaml
··· 22 22 - const: fairphone,fp5-rm692e5-boe 23 23 - const: raydium,rm692e5 24 24 25 + reg: 26 + maxItems: 1 27 + 25 28 dvdd-supply: 26 29 description: Digital voltage rail 27 30 ··· 34 31 vddio-supply: 35 32 description: I/O voltage rail 36 33 37 - reg: true 38 34 port: true 39 35 40 36 required:
+1 -1
Documentation/devicetree/bindings/display/panel/ronbo,rb070d30.yaml
··· 14 14 const: ronbo,rb070d30 15 15 16 16 reg: 17 - description: MIPI-DSI virtual channel 17 + maxItems: 1 18 18 19 19 power-gpios: 20 20 description: GPIO used for the power pin
+3 -1
Documentation/devicetree/bindings/display/panel/samsung,amoled-mipi-dsi.yaml
··· 33 33 # Samsung S6E3HF2 5.65" 1600x2560 AMOLED panel 34 34 - samsung,s6e3hf2 35 35 36 - reg: true 36 + reg: 37 + maxItems: 1 38 + 37 39 reset-gpios: true 38 40 enable-gpios: true 39 41 te-gpios: true
+4 -1
Documentation/devicetree/bindings/display/panel/samsung,ams495qa01.yaml
··· 11 11 12 12 allOf: 13 13 - $ref: panel-common.yaml# 14 + - $ref: /schemas/spi/spi-peripheral-props.yaml# 14 15 15 16 properties: 16 17 compatible: 17 18 const: samsung,ams495qa01 18 19 19 - reg: true 20 + reg: 21 + maxItems: 1 22 + 20 23 reset-gpios: 21 24 description: reset gpio, must be GPIO_ACTIVE_LOW 22 25 elvdd-supply:
+3 -1
Documentation/devicetree/bindings/display/panel/samsung,ld9040.yaml
··· 17 17 compatible: 18 18 const: samsung,ld9040 19 19 20 + reg: 21 + maxItems: 1 22 + 20 23 display-timings: true 21 24 port: true 22 - reg: true 23 25 reset-gpios: true 24 26 25 27 vdd3-supply:
+2 -1
Documentation/devicetree/bindings/display/panel/samsung,lms380kf01.yaml
··· 21 21 compatible: 22 22 const: samsung,lms380kf01 23 23 24 - reg: true 24 + reg: 25 + maxItems: 1 25 26 26 27 interrupts: 27 28 description: provides an optional ESD (electrostatic discharge)
+2 -1
Documentation/devicetree/bindings/display/panel/samsung,lms397kf04.yaml
··· 20 20 compatible: 21 21 const: samsung,lms397kf04 22 22 23 - reg: true 23 + reg: 24 + maxItems: 1 24 25 25 26 reset-gpios: true 26 27
+3 -1
Documentation/devicetree/bindings/display/panel/samsung,s6d16d0.yaml
··· 16 16 compatible: 17 17 const: samsung,s6d16d0 18 18 19 + reg: 20 + maxItems: 1 21 + 19 22 port: true 20 - reg: true 21 23 reset-gpios: true 22 24 23 25 vdd1-supply:
+2 -1
Documentation/devicetree/bindings/display/panel/samsung,s6d27a1.yaml
··· 20 20 compatible: 21 21 const: samsung,s6d27a1 22 22 23 - reg: true 23 + reg: 24 + maxItems: 1 24 25 25 26 interrupts: 26 27 description: provides an optional ESD (electrostatic discharge)
+2 -1
Documentation/devicetree/bindings/display/panel/samsung,s6d7aa0.yaml
··· 24 24 - samsung,ltl101at01 25 25 - const: samsung,s6d7aa0 26 26 27 - reg: true 27 + reg: 28 + maxItems: 1 28 29 29 30 backlight: 30 31 description:
+3 -1
Documentation/devicetree/bindings/display/panel/samsung,s6e63m0.yaml
··· 18 18 compatible: 19 19 const: samsung,s6e63m0 20 20 21 - reg: true 21 + reg: 22 + maxItems: 1 23 + 22 24 reset-gpios: true 23 25 port: true 24 26 default-brightness: true
+4 -1
Documentation/devicetree/bindings/display/panel/samsung,s6e88a0-ams452ef01.yaml
··· 15 15 properties: 16 16 compatible: 17 17 const: samsung,s6e88a0-ams452ef01 18 - reg: true 18 + 19 + reg: 20 + maxItems: 1 21 + 19 22 port: true 20 23 reset-gpios: true 21 24 vdd3-supply:
+3 -1
Documentation/devicetree/bindings/display/panel/samsung,s6e8aa0.yaml
··· 16 16 compatible: 17 17 const: samsung,s6e8aa0 18 18 19 - reg: true 19 + reg: 20 + maxItems: 1 21 + 20 22 reset-gpios: true 21 23 display-timings: true 22 24
+3 -1
Documentation/devicetree/bindings/display/panel/sharp,lq101r1sx01.yaml
··· 37 37 - enum: 38 38 - sharp,lq101r1sx01 39 39 40 - reg: true 40 + reg: 41 + maxItems: 1 42 + 41 43 power-supply: true 42 44 backlight: true 43 45
+3 -1
Documentation/devicetree/bindings/display/panel/sharp,ls043t1le01.yaml
··· 16 16 compatible: 17 17 const: sharp,ls043t1le01-qhd 18 18 19 - reg: true 19 + reg: 20 + maxItems: 1 21 + 20 22 backlight: true 21 23 reset-gpios: true 22 24 port: true
+3 -1
Documentation/devicetree/bindings/display/panel/sharp,ls060t1sx01.yaml
··· 16 16 compatible: 17 17 const: sharp,ls060t1sx01 18 18 19 - reg: true 19 + reg: 20 + maxItems: 1 21 + 20 22 backlight: true 21 23 reset-gpios: true 22 24 port: true
+3 -1
Documentation/devicetree/bindings/display/panel/sitronix,st7789v.yaml
··· 21 21 - jasonic,jt240mhqs-hwt-ek-e3 22 22 - sitronix,st7789v 23 23 24 - reg: true 24 + reg: 25 + maxItems: 1 26 + 25 27 reset-gpios: true 26 28 power-supply: true 27 29 backlight: true
+4 -1
Documentation/devicetree/bindings/display/panel/sony,acx424akp.yaml
··· 22 22 enum: 23 23 - sony,acx424akp 24 24 - sony,acx424akm 25 - reg: true 25 + 26 + reg: 27 + maxItems: 1 28 + 26 29 reset-gpios: true 27 30 vddi-supply: 28 31 description: regulator that supplies the vddi voltage
+3
Documentation/devicetree/bindings/display/panel/sony,acx565akm.yaml
··· 17 17 compatible: 18 18 const: sony,acx565akm 19 19 20 + reg: 21 + maxItems: 1 22 + 20 23 label: true 21 24 reset-gpios: true 22 25 port: true
+2 -1
Documentation/devicetree/bindings/display/panel/sony,td4353-jdi.yaml
··· 20 20 compatible: 21 21 const: sony,td4353-jdi-tama 22 22 23 - reg: true 23 + reg: 24 + maxItems: 1 24 25 25 26 backlight: true 26 27 width-mm: true
+2 -1
Documentation/devicetree/bindings/display/panel/sony,tulip-truly-nt35521.yaml
··· 21 21 compatible: 22 22 const: sony,tulip-truly-nt35521 23 23 24 - reg: true 24 + reg: 25 + maxItems: 1 25 26 26 27 positive5-supply: 27 28 description: Positive 5V supply
+4 -2
Documentation/devicetree/bindings/display/panel/synaptics,r63353.yaml
··· 19 19 - sharp,ls068b3sx02 20 20 - const: syna,r63353 21 21 22 + reg: 23 + maxItems: 1 24 + 22 25 avdd-supply: true 23 26 dvdd-supply: true 24 - reg: true 25 27 26 28 required: 27 29 - compatible 30 + - reg 28 31 - avdd-supply 29 32 - dvdd-supply 30 - - reg 31 33 - reset-gpios 32 34 - port 33 35 - backlight
+3 -1
Documentation/devicetree/bindings/display/panel/tpo,td.yaml
··· 22 22 # Toppoly TD043MTEA1 Panel 23 23 - tpo,td043mtea1 24 24 25 - reg: true 25 + reg: 26 + maxItems: 1 27 + 26 28 label: true 27 29 reset-gpios: true 28 30 backlight: true
+2 -1
Documentation/devicetree/bindings/display/panel/tpo,tpg110.yaml
··· 52 52 - const: tpo,tpg110 53 53 - const: tpo,tpg110 54 54 55 - reg: true 55 + reg: 56 + maxItems: 1 56 57 57 58 grestb-gpios: 58 59 maxItems: 1
+2 -1
Documentation/devicetree/bindings/display/panel/visionox,rm69299.yaml
··· 20 20 compatible: 21 21 const: visionox,rm69299-1080p-display 22 22 23 - reg: true 23 + reg: 24 + maxItems: 1 24 25 25 26 vdda-supply: 26 27 description: |
+4 -1
Documentation/devicetree/bindings/display/panel/xinpeng,xpp055c272.yaml
··· 15 15 properties: 16 16 compatible: 17 17 const: xinpeng,xpp055c272 18 - reg: true 18 + 19 + reg: 20 + maxItems: 1 21 + 19 22 backlight: true 20 23 port: true 21 24 reset-gpios: true
+163
Documentation/devicetree/bindings/display/samsung/samsung,exynos5-dp.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/samsung/samsung,exynos5-dp.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Samsung Exynos5250/Exynos5420 SoC Display Port 8 + 9 + maintainers: 10 + - Inki Dae <inki.dae@samsung.com> 11 + - Seung-Woo Kim <sw0312.kim@samsung.com> 12 + - Kyungmin Park <kyungmin.park@samsung.com> 13 + - Krzysztof Kozlowski <krzk@kernel.org> 14 + 15 + properties: 16 + compatible: 17 + const: samsung,exynos5-dp 18 + 19 + reg: 20 + maxItems: 1 21 + 22 + clocks: 23 + maxItems: 1 24 + 25 + clock-names: 26 + items: 27 + - const: dp 28 + 29 + display-timings: 30 + $ref: /schemas/display/panel/display-timings.yaml# 31 + 32 + interrupts: 33 + maxItems: 1 34 + 35 + hpd-gpios: 36 + description: 37 + Hotplug detect GPIO. 38 + Indicates which GPIO should be used for hotplug detection 39 + 40 + phys: 41 + maxItems: 1 42 + 43 + phy-names: 44 + items: 45 + - const: dp 46 + 47 + power-domains: 48 + maxItems: 1 49 + 50 + interlaced: 51 + type: boolean 52 + deprecated: true 53 + description: 54 + Interlace scan mode. Progressive if defined, interlaced if not defined. 55 + 56 + vsync-active-high: 57 + type: boolean 58 + deprecated: true 59 + description: 60 + VSYNC polarity configuration. High if defined, low if not defined 61 + 62 + hsync-active-high: 63 + type: boolean 64 + deprecated: true 65 + description: 66 + HSYNC polarity configuration. High if defined, low if not defined 67 + 68 + ports: 69 + $ref: /schemas/graph.yaml#/properties/ports 70 + 71 + properties: 72 + port: 73 + $ref: /schemas/graph.yaml#/properties/port 74 + description: 75 + Port node with one endpoint connected to a dp-connector node. 76 + 77 + required: 78 + - port 79 + 80 + samsung,hpd-gpios: 81 + maxItems: 1 82 + deprecated: true 83 + 84 + samsung,ycbcr-coeff: 85 + $ref: /schemas/types.yaml#/definitions/uint32 86 + deprecated: true 87 + description: 88 + Deprecated prop that can parsed from drm_display_mode. 89 + 90 + samsung,dynamic-range: 91 + $ref: /schemas/types.yaml#/definitions/uint32 92 + deprecated: true 93 + description: 94 + Deprecated prop that can parsed from drm_display_mode. 95 + 96 + samsung,color-space: 97 + $ref: /schemas/types.yaml#/definitions/uint32 98 + deprecated: true 99 + description: 100 + Deprecated prop that can parsed from drm_display_info. 101 + 102 + samsung,color-depth: 103 + $ref: /schemas/types.yaml#/definitions/uint32 104 + deprecated: true 105 + description: 106 + Deprecated prop that can parsed from drm_display_info. 107 + 108 + samsung,link-rate: 109 + $ref: /schemas/types.yaml#/definitions/uint32 110 + deprecated: true 111 + description: 112 + Deprecated prop that can reading from monitor by dpcd method. 113 + 114 + samsung,lane-count: 115 + $ref: /schemas/types.yaml#/definitions/uint32 116 + deprecated: true 117 + description: 118 + Deprecated prop that can reading from monitor by dpcd method. 119 + 120 + required: 121 + - compatible 122 + - reg 123 + - clocks 124 + - clock-names 125 + - interrupts 126 + - phys 127 + - phy-names 128 + 129 + additionalProperties: false 130 + 131 + examples: 132 + - | 133 + #include <dt-bindings/clock/exynos5250.h> 134 + #include <dt-bindings/gpio/gpio.h> 135 + #include <dt-bindings/interrupt-controller/arm-gic.h> 136 + 137 + dp-controller@145b0000 { 138 + compatible = "samsung,exynos5-dp"; 139 + reg = <0x145b0000 0x1000>; 140 + clocks = <&clock CLK_DP>; 141 + clock-names = "dp"; 142 + interrupts = <10 3>; 143 + interrupt-parent = <&combiner>; 144 + phys = <&dp_phy>; 145 + phy-names = "dp"; 146 + pinctrl-0 = <&dp_hpd>; 147 + pinctrl-names = "default"; 148 + power-domains = <&pd_disp1>; 149 + 150 + samsung,color-space = <0>; 151 + samsung,color-depth = <1>; 152 + samsung,link-rate = <0x0a>; 153 + samsung,lane-count = <2>; 154 + hpd-gpios = <&gpx0 7 GPIO_ACTIVE_HIGH>; 155 + 156 + ports { 157 + port { 158 + dp_out: endpoint { 159 + remote-endpoint = <&bridge_in>; 160 + }; 161 + }; 162 + }; 163 + };
+1 -1
Documentation/devicetree/bindings/input/azoteq,iqs7222.yaml
··· 784 784 gpio-2: GPIO4 785 785 786 786 allOf: 787 - - $ref: ../pinctrl/pincfg-node.yaml# 787 + - $ref: /schemas/pinctrl/pincfg-node.yaml# 788 788 789 789 properties: 790 790 drive-open-drain: true
+4 -4
Documentation/devicetree/bindings/interrupt-controller/allwinner,sun7i-a20-sc-nmi.yaml
··· 25 25 - const: allwinner,sun6i-a31-sc-nmi 26 26 deprecated: true 27 27 - const: allwinner,sun7i-a20-sc-nmi 28 - - items: 29 - - const: allwinner,sun8i-v3s-nmi 30 - - const: allwinner,sun9i-a80-nmi 31 28 - const: allwinner,sun9i-a80-nmi 32 29 - items: 33 - - const: allwinner,sun50i-a100-nmi 30 + - enum: 31 + - allwinner,sun8i-v3s-nmi 32 + - allwinner,sun50i-a100-nmi 33 + - allwinner,sun50i-h616-nmi 34 34 - const: allwinner,sun9i-a80-nmi 35 35 36 36 reg:
+1 -1
Documentation/devicetree/bindings/interrupt-controller/mediatek,mt6577-sysirq.yaml
··· 48 48 interrupt-controller: true 49 49 50 50 "#interrupt-cells": 51 - $ref: "arm,gic.yaml#/properties/#interrupt-cells" 51 + $ref: arm,gic.yaml#/properties/#interrupt-cells 52 52 53 53 required: 54 54 - reg
+1
Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.yaml
··· 39 39 - renesas,intc-ex-r8a779a0 # R-Car V3U 40 40 - renesas,intc-ex-r8a779f0 # R-Car S4-8 41 41 - renesas,intc-ex-r8a779g0 # R-Car V4H 42 + - renesas,intc-ex-r8a779h0 # R-Car V4M 42 43 - const: renesas,irqc 43 44 44 45 '#interrupt-cells':
+1 -1
Documentation/devicetree/bindings/media/amphion,vpu.yaml
··· 44 44 description: 45 45 Each vpu encoder or decoder correspond a MU, which used for communication 46 46 between driver and firmware. Implement via mailbox on driver. 47 - $ref: ../mailbox/fsl,mu.yaml# 47 + $ref: /schemas/mailbox/fsl,mu.yaml# 48 48 49 49 50 50 "^vpu-core@[0-9a-f]+$":
+2 -2
Documentation/devicetree/bindings/mtd/mtd.yaml
··· 48 48 type: object 49 49 50 50 allOf: 51 - - $ref: ../nvmem/nvmem.yaml# 52 - - $ref: ../nvmem/nvmem-deprecated-cells.yaml# 51 + - $ref: /schemas/nvmem/nvmem.yaml# 52 + - $ref: /schemas/nvmem/nvmem-deprecated-cells.yaml# 53 53 54 54 unevaluatedProperties: false 55 55
+6 -6
Documentation/devicetree/bindings/net/sff,sfp.yaml
··· 29 29 allowable by a module in the slot, in milli-Watts. Presently, modules can 30 30 be up to 1W, 1.5W or 2W. 31 31 32 - "mod-def0-gpios": 32 + mod-def0-gpios: 33 33 maxItems: 1 34 34 description: 35 35 GPIO phandle and a specifier of the MOD-DEF0 (AKA Mod_ABS) module 36 36 presence input gpio signal, active (module absent) high. Must not be 37 37 present for SFF modules 38 38 39 - "los-gpios": 39 + los-gpios: 40 40 maxItems: 1 41 41 description: 42 42 GPIO phandle and a specifier of the Receiver Loss of Signal Indication 43 43 input gpio signal, active (signal lost) high 44 44 45 - "tx-fault-gpios": 45 + tx-fault-gpios: 46 46 maxItems: 1 47 47 description: 48 48 GPIO phandle and a specifier of the Module Transmitter Fault input gpio 49 49 signal, active (fault condition) high 50 50 51 - "tx-disable-gpios": 51 + tx-disable-gpios: 52 52 maxItems: 1 53 53 description: 54 54 GPIO phandle and a specifier of the Transmitter Disable output gpio 55 55 signal, active (Tx disable) high 56 56 57 - "rate-select0-gpios": 57 + rate-select0-gpios: 58 58 maxItems: 1 59 59 description: 60 60 GPIO phandle and a specifier of the Rx Signaling Rate Select (AKA RS0) 61 61 output gpio signal, low - low Rx rate, high - high Rx rate Must not be 62 62 present for SFF modules 63 63 64 - "rate-select1-gpios": 64 + rate-select1-gpios: 65 65 maxItems: 1 66 66 description: 67 67 GPIO phandle and a specifier of the Tx Signaling Rate Select (AKA RS1)
+2 -1
Documentation/devicetree/bindings/pci/microchip,pcie-host.yaml
··· 65 65 - const: msi 66 66 67 67 ranges: 68 - maxItems: 1 68 + minItems: 1 69 + maxItems: 3 69 70 70 71 dma-ranges: 71 72 minItems: 1
-22
Documentation/devicetree/bindings/pci/qcom,pcie-sm8350.yaml
··· 71 71 items: 72 72 - const: pci 73 73 74 - oneOf: 75 - - properties: 76 - interrupts: 77 - maxItems: 1 78 - interrupt-names: 79 - items: 80 - - const: msi 81 - 82 - - properties: 83 - interrupts: 84 - minItems: 8 85 - interrupt-names: 86 - items: 87 - - const: msi0 88 - - const: msi1 89 - - const: msi2 90 - - const: msi3 91 - - const: msi4 92 - - const: msi5 93 - - const: msi6 94 - - const: msi7 95 - 96 74 allOf: 97 75 - $ref: qcom,pcie-common.yaml# 98 76
+5 -2
Documentation/devicetree/bindings/pci/xilinx-versal-cpm.yaml
··· 48 48 interrupt-controller: 49 49 description: Interrupt controller node for handling legacy PCI interrupts. 50 50 type: object 51 + additionalProperties: false 52 + 51 53 properties: 52 54 "#address-cells": 53 55 const: 0 56 + 54 57 "#interrupt-cells": 55 58 const: 1 56 - "interrupt-controller": true 57 - additionalProperties: false 59 + 60 + interrupt-controller: true 58 61 59 62 required: 60 63 - reg
+1 -1
Documentation/devicetree/bindings/pci/xlnx,nwl-pcie.yaml
··· 84 84 "#interrupt-cells": 85 85 const: 1 86 86 87 - "interrupt-controller": true 87 + interrupt-controller: true 88 88 89 89 required: 90 90 - "#address-cells"
+4 -4
Documentation/devicetree/bindings/phy/brcm,sata-phy.yaml
··· 59 59 "#phy-cells": 60 60 const: 0 61 61 62 - "brcm,enable-ssc": 62 + brcm,enable-ssc: 63 63 $ref: /schemas/types.yaml#/definitions/flag 64 64 description: | 65 65 Use spread spectrum clocking (SSC) on this port 66 66 This property is not applicable for "brcm,iproc-ns2-sata-phy", 67 67 "brcm,iproc-nsp-sata-phy" and "brcm,iproc-sr-sata-phy". 68 68 69 - "brcm,rxaeq-mode": 69 + brcm,rxaeq-mode: 70 70 $ref: /schemas/types.yaml#/definitions/string 71 71 description: 72 72 String that indicates the desired RX equalizer mode. ··· 75 75 - auto 76 76 - manual 77 77 78 - "brcm,rxaeq-value": 78 + brcm,rxaeq-value: 79 79 $ref: /schemas/types.yaml#/definitions/uint32 80 80 description: | 81 81 When 'brcm,rxaeq-mode' is set to "manual", provides the RX ··· 83 83 minimum: 0 84 84 maximum: 63 85 85 86 - "brcm,tx-amplitude-millivolt": 86 + brcm,tx-amplitude-millivolt: 87 87 description: | 88 88 Transmit amplitude voltage in millivolt. 89 89 $ref: /schemas/types.yaml#/definitions/uint32
+1 -1
Documentation/devicetree/bindings/regulator/ti,tps62864.yaml
··· 24 24 type: object 25 25 26 26 properties: 27 - "SW": 27 + SW: 28 28 type: object 29 29 $ref: regulator.yaml# 30 30 unevaluatedProperties: false
+3 -1
Documentation/devicetree/bindings/serial/fsl,s32-linflexuart.yaml
··· 23 23 oneOf: 24 24 - const: fsl,s32v234-linflexuart 25 25 - items: 26 - - const: nxp,s32g2-linflexuart 26 + - enum: 27 + - nxp,s32g2-linflexuart 28 + - nxp,s32g3-linflexuart 27 29 - const: fsl,s32v234-linflexuart 28 30 29 31 reg:
+3 -3
Documentation/devicetree/bindings/soc/tegra/nvidia,tegra20-pmc.yaml
··· 365 365 additionalProperties: false 366 366 367 367 dependencies: 368 - "nvidia,suspend-mode": ["nvidia,core-pwr-off-time", "nvidia,cpu-pwr-off-time"] 369 - "nvidia,core-pwr-off-time": ["nvidia,core-pwr-good-time"] 370 - "nvidia,cpu-pwr-off-time": ["nvidia,cpu-pwr-good-time"] 368 + nvidia,suspend-mode: ["nvidia,core-pwr-off-time", "nvidia,cpu-pwr-off-time"] 369 + nvidia,core-pwr-off-time: ["nvidia,core-pwr-good-time"] 370 + nvidia,cpu-pwr-off-time: ["nvidia,cpu-pwr-good-time"] 371 371 372 372 examples: 373 373 - |
+2
Documentation/devicetree/bindings/timer/renesas,cmt.yaml
··· 103 103 - renesas,r8a779a0-cmt0 # 32-bit CMT0 on R-Car V3U 104 104 - renesas,r8a779f0-cmt0 # 32-bit CMT0 on R-Car S4-8 105 105 - renesas,r8a779g0-cmt0 # 32-bit CMT0 on R-Car V4H 106 + - renesas,r8a779h0-cmt0 # 32-bit CMT0 on R-Car V4M 106 107 - const: renesas,rcar-gen4-cmt0 # 32-bit CMT0 on R-Car Gen4 107 108 108 109 - items: ··· 111 110 - renesas,r8a779a0-cmt1 # 48-bit CMT on R-Car V3U 112 111 - renesas,r8a779f0-cmt1 # 48-bit CMT on R-Car S4-8 113 112 - renesas,r8a779g0-cmt1 # 48-bit CMT on R-Car V4H 113 + - renesas,r8a779h0-cmt1 # 48-bit CMT on R-Car V4M 114 114 - const: renesas,rcar-gen4-cmt1 # 48-bit CMT on R-Car Gen4 115 115 116 116 reg:
+1
Documentation/devicetree/bindings/timer/renesas,tmu.yaml
··· 39 39 - renesas,tmu-r8a779a0 # R-Car V3U 40 40 - renesas,tmu-r8a779f0 # R-Car S4-8 41 41 - renesas,tmu-r8a779g0 # R-Car V4H 42 + - renesas,tmu-r8a779h0 # R-Car V4M 42 43 - const: renesas,tmu 43 44 44 45 reg:
+2 -2
Documentation/devicetree/bindings/tpm/ibm,vtpm.yaml
··· 33 33 reg: 34 34 maxItems: 1 35 35 36 - 'ibm,#dma-address-cells': 36 + ibm,#dma-address-cells: 37 37 description: 38 38 number of cells that are used to encode the physical address field of 39 39 dma-window properties 40 40 $ref: /schemas/types.yaml#/definitions/uint32-array 41 41 42 - 'ibm,#dma-size-cells': 42 + ibm,#dma-size-cells: 43 43 description: 44 44 number of cells that are used to encode the size field of 45 45 dma-window properties
+1
Documentation/devicetree/bindings/usb/mediatek,mtk-xhci.yaml
··· 29 29 - mediatek,mt7623-xhci 30 30 - mediatek,mt7629-xhci 31 31 - mediatek,mt7986-xhci 32 + - mediatek,mt7988-xhci 32 33 - mediatek,mt8173-xhci 33 34 - mediatek,mt8183-xhci 34 35 - mediatek,mt8186-xhci
+142
Documentation/devicetree/bindings/watchdog/aspeed,ast2400-wdt.yaml
··· 1 + # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/watchdog/aspeed,ast2400-wdt.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Aspeed watchdog timer controllers 8 + 9 + maintainers: 10 + - Andrew Jeffery <andrew@codeconstruct.com.au> 11 + 12 + properties: 13 + compatible: 14 + enum: 15 + - aspeed,ast2400-wdt 16 + - aspeed,ast2500-wdt 17 + - aspeed,ast2600-wdt 18 + 19 + reg: 20 + maxItems: 1 21 + 22 + clocks: 23 + maxItems: 1 24 + description: > 25 + The clock used to drive the watchdog counter. From the AST2500 no source 26 + other than the 1MHz clock can be selected, so the clocks property is 27 + optional. 28 + 29 + aspeed,reset-type: 30 + $ref: /schemas/types.yaml#/definitions/string 31 + enum: 32 + - cpu 33 + - soc 34 + - system 35 + - none 36 + default: system 37 + description: > 38 + The watchdog can be programmed to generate one of three different types of 39 + reset when a timeout occcurs. 40 + 41 + Specifying 'cpu' will only reset the processor on a timeout event. 42 + 43 + Specifying 'soc' will reset a configurable subset of the SoC's controllers 44 + on a timeout event. Controllers critical to the SoC's operation may remain 45 + untouched. The set of SoC controllers to reset may be specified via the 46 + aspeed,reset-mask property if the node has the aspeed,ast2500-wdt or 47 + aspeed,ast2600-wdt compatible. 48 + 49 + Specifying 'system' will reset all controllers on a timeout event, as if 50 + EXTRST had been asserted. 51 + 52 + Specifying 'none' will cause the timeout event to have no reset effect. 53 + Another watchdog engine on the chip must be used for chip reset operations. 54 + 55 + aspeed,alt-boot: 56 + $ref: /schemas/types.yaml#/definitions/flag 57 + description: > 58 + Direct the watchdog to configure the SoC to boot from the alternative boot 59 + region if a timeout occurs. 60 + 61 + aspeed,external-signal: 62 + $ref: /schemas/types.yaml#/definitions/flag 63 + description: > 64 + Assert the timeout event on an external signal pin associated with the 65 + watchdog controller instance. The pin must be muxed appropriately. 66 + 67 + aspeed,ext-pulse-duration: 68 + $ref: /schemas/types.yaml#/definitions/uint32 69 + description: > 70 + The duration, in microseconds, of the pulse emitted on the external signal 71 + pin. 72 + 73 + aspeed,ext-push-pull: 74 + $ref: /schemas/types.yaml#/definitions/flag 75 + description: > 76 + If aspeed,external-signal is specified in the node, set the external 77 + signal pin's drive type to push-pull. If aspeed,ext-push-pull is not 78 + specified then the pin is configured as open-drain. 79 + 80 + aspeed,ext-active-high: 81 + $ref: /schemas/types.yaml#/definitions/flag 82 + description: > 83 + If both aspeed,external-signal and aspeed,ext-push-pull are specified in 84 + the node, set the pulse polarity to active-high. If aspeed,ext-active-high 85 + is not specified then the pin is configured as active-low. 86 + 87 + aspeed,reset-mask: 88 + $ref: /schemas/types.yaml#/definitions/uint32-array 89 + minItems: 1 90 + maxItems: 2 91 + description: > 92 + A bitmask indicating which peripherals will be reset if the watchdog 93 + timer expires. On AST2500 SoCs this should be a single word defined using 94 + the AST2500_WDT_RESET_* macros; on AST2600 SoCs this should be a two-word 95 + array with the first word defined using the AST2600_WDT_RESET1_* macros, 96 + and the second word defined using the AST2600_WDT_RESET2_* macros. 97 + 98 + required: 99 + - compatible 100 + - reg 101 + 102 + allOf: 103 + - if: 104 + anyOf: 105 + - required: 106 + - aspeed,ext-push-pull 107 + - required: 108 + - aspeed,ext-active-high 109 + - required: 110 + - aspeed,reset-mask 111 + then: 112 + properties: 113 + compatible: 114 + enum: 115 + - aspeed,ast2500-wdt 116 + - aspeed,ast2600-wdt 117 + - if: 118 + required: 119 + - aspeed,ext-active-high 120 + then: 121 + required: 122 + - aspeed,ext-push-pull 123 + 124 + additionalProperties: false 125 + 126 + examples: 127 + - | 128 + watchdog@1e785000 { 129 + compatible = "aspeed,ast2400-wdt"; 130 + reg = <0x1e785000 0x1c>; 131 + aspeed,reset-type = "system"; 132 + aspeed,external-signal; 133 + }; 134 + - | 135 + #include <dt-bindings/watchdog/aspeed-wdt.h> 136 + watchdog@1e785040 { 137 + compatible = "aspeed,ast2600-wdt"; 138 + reg = <0x1e785040 0x40>; 139 + aspeed,reset-type = "soc"; 140 + aspeed,reset-mask = <AST2600_WDT_RESET1_DEFAULT 141 + (AST2600_WDT_RESET2_DEFAULT & ~AST2600_WDT_RESET2_LPC)>; 142 + };
-73
Documentation/devicetree/bindings/watchdog/aspeed-wdt.txt
··· 1 - Aspeed Watchdog Timer 2 - 3 - Required properties: 4 - - compatible: must be one of: 5 - - "aspeed,ast2400-wdt" 6 - - "aspeed,ast2500-wdt" 7 - - "aspeed,ast2600-wdt" 8 - 9 - - reg: physical base address of the controller and length of memory mapped 10 - region 11 - 12 - Optional properties: 13 - 14 - - aspeed,reset-type = "cpu|soc|system|none" 15 - 16 - Reset behavior - Whenever a timeout occurs the watchdog can be programmed 17 - to generate one of three different, mutually exclusive, types of resets. 18 - 19 - Type "none" can be specified to indicate that no resets are to be done. 20 - This is useful in situations where another watchdog engine on chip is 21 - to perform the reset. 22 - 23 - If 'aspeed,reset-type=' is not specified the default is to enable system 24 - reset. 25 - 26 - Reset types: 27 - 28 - - cpu: Reset CPU on watchdog timeout 29 - 30 - - soc: Reset 'System on Chip' on watchdog timeout 31 - 32 - - system: Reset system on watchdog timeout 33 - 34 - - none: No reset is performed on timeout. Assumes another watchdog 35 - engine is responsible for this. 36 - 37 - - aspeed,alt-boot: If property is present then boot from alternate block. 38 - - aspeed,external-signal: If property is present then signal is sent to 39 - external reset counter (only WDT1 and WDT2). If not 40 - specified no external signal is sent. 41 - - aspeed,ext-pulse-duration: External signal pulse duration in microseconds 42 - 43 - Optional properties for AST2500-compatible watchdogs: 44 - - aspeed,ext-push-pull: If aspeed,external-signal is present, set the pin's 45 - drive type to push-pull. The default is open-drain. 46 - - aspeed,ext-active-high: If aspeed,external-signal is present and and the pin 47 - is configured as push-pull, then set the pulse 48 - polarity to active-high. The default is active-low. 49 - 50 - Optional properties for AST2500- and AST2600-compatible watchdogs: 51 - - aspeed,reset-mask: A bitmask indicating which peripherals will be reset if 52 - the watchdog timer expires. On AST2500 this should be a 53 - single word defined using the AST2500_WDT_RESET_* macros; 54 - on AST2600 this should be a two-word array with the first 55 - word defined using the AST2600_WDT_RESET1_* macros and the 56 - second word defined using the AST2600_WDT_RESET2_* macros. 57 - 58 - Examples: 59 - 60 - wdt1: watchdog@1e785000 { 61 - compatible = "aspeed,ast2400-wdt"; 62 - reg = <0x1e785000 0x1c>; 63 - aspeed,reset-type = "system"; 64 - aspeed,external-signal; 65 - }; 66 - 67 - #include <dt-bindings/watchdog/aspeed-wdt.h> 68 - wdt2: watchdog@1e785040 { 69 - compatible = "aspeed,ast2600-wdt"; 70 - reg = <0x1e785040 0x40>; 71 - aspeed,reset-mask = <AST2600_WDT_RESET1_DEFAULT 72 - (AST2600_WDT_RESET2_DEFAULT & ~AST2600_WDT_RESET2_LPC)>; 73 - };
+39 -74
drivers/of/address.c
··· 486 486 * device that had registered logical PIO mapping, and the return code is 487 487 * relative to that node. 488 488 */ 489 - static u64 __of_translate_address(struct device_node *dev, 489 + static u64 __of_translate_address(struct device_node *node, 490 490 struct device_node *(*get_parent)(const struct device_node *), 491 491 const __be32 *in_addr, const char *rprop, 492 492 struct device_node **host) 493 493 { 494 - struct device_node *parent = NULL; 494 + struct device_node *dev __free(device_node) = of_node_get(node); 495 + struct device_node *parent __free(device_node) = get_parent(dev); 495 496 struct of_bus *bus, *pbus; 496 497 __be32 addr[OF_MAX_ADDR_CELLS]; 497 498 int na, ns, pna, pns; 498 - u64 result = OF_BAD_ADDR; 499 499 500 500 pr_debug("** translation for device %pOF **\n", dev); 501 501 502 - /* Increase refcount at current level */ 503 - of_node_get(dev); 504 - 505 502 *host = NULL; 506 - /* Get parent & match bus type */ 507 - parent = get_parent(dev); 503 + 508 504 if (parent == NULL) 509 - goto bail; 505 + return OF_BAD_ADDR; 510 506 bus = of_match_bus(parent); 511 507 512 508 /* Count address cells & copy address locally */ 513 509 bus->count_cells(dev, &na, &ns); 514 510 if (!OF_CHECK_COUNTS(na, ns)) { 515 511 pr_debug("Bad cell count for %pOF\n", dev); 516 - goto bail; 512 + return OF_BAD_ADDR; 517 513 } 518 514 memcpy(addr, in_addr, na * 4); 519 515 ··· 529 533 /* If root, we have finished */ 530 534 if (parent == NULL) { 531 535 pr_debug("reached root node\n"); 532 - result = of_read_number(addr, na); 533 - break; 536 + return of_read_number(addr, na); 534 537 } 535 538 536 539 /* ··· 538 543 */ 539 544 iorange = find_io_range_by_fwnode(&dev->fwnode); 540 545 if (iorange && (iorange->flags != LOGIC_PIO_CPU_MMIO)) { 541 - result = of_read_number(addr + 1, na - 1); 546 + u64 result = of_read_number(addr + 1, na - 1); 542 547 pr_debug("indirectIO matched(%pOF) 0x%llx\n", 543 548 dev, result); 544 - *host = of_node_get(dev); 545 - break; 549 + *host = no_free_ptr(dev); 550 + return result; 546 551 } 547 552 548 553 /* Get new parent bus and counts */ ··· 550 555 pbus->count_cells(dev, &pna, &pns); 551 556 if (!OF_CHECK_COUNTS(pna, pns)) { 552 557 pr_err("Bad cell count for %pOF\n", dev); 553 - break; 558 + return OF_BAD_ADDR; 554 559 } 555 560 556 561 pr_debug("parent bus is %s (na=%d, ns=%d) on %pOF\n", ··· 558 563 559 564 /* Apply bus translation */ 560 565 if (of_translate_one(dev, bus, pbus, addr, na, ns, pna, rprop)) 561 - break; 566 + return OF_BAD_ADDR; 562 567 563 568 /* Complete the move up one level */ 564 569 na = pna; ··· 567 572 568 573 of_dump_addr("one level translation:", addr, na); 569 574 } 570 - bail: 571 - of_node_put(parent); 572 - of_node_put(dev); 573 575 574 - return result; 576 + unreachable(); 575 577 } 576 578 577 579 u64 of_translate_address(struct device_node *dev, const __be32 *in_addr) ··· 646 654 const __be32 *of_translate_dma_region(struct device_node *dev, const __be32 *prop, 647 655 phys_addr_t *start, size_t *length) 648 656 { 649 - struct device_node *parent; 657 + struct device_node *parent __free(device_node) = __of_get_dma_parent(dev); 650 658 u64 address, size; 651 659 int na, ns; 652 660 653 - parent = __of_get_dma_parent(dev); 654 661 if (!parent) 655 662 return NULL; 656 663 657 664 na = of_bus_n_addr_cells(parent); 658 665 ns = of_bus_n_size_cells(parent); 659 - 660 - of_node_put(parent); 661 666 662 667 address = of_translate_dma_address(dev, prop); 663 668 if (address == OF_BAD_ADDR) ··· 677 688 { 678 689 const __be32 *prop; 679 690 unsigned int psize; 680 - struct device_node *parent; 691 + struct device_node *parent __free(device_node) = of_get_parent(dev); 681 692 struct of_bus *bus; 682 693 int onesize, i, na, ns; 683 694 684 - /* Get parent & match bus type */ 685 - parent = of_get_parent(dev); 686 695 if (parent == NULL) 687 696 return NULL; 697 + 698 + /* match the parent's bus type */ 688 699 bus = of_match_bus(parent); 689 - if (strcmp(bus->name, "pci") && (bar_no >= 0)) { 690 - of_node_put(parent); 700 + if (strcmp(bus->name, "pci") && (bar_no >= 0)) 691 701 return NULL; 692 - } 702 + 693 703 bus->count_cells(dev, &na, &ns); 694 - of_node_put(parent); 695 704 if (!OF_CHECK_ADDR_COUNT(na)) 696 705 return NULL; 697 706 ··· 875 888 */ 876 889 int of_dma_get_range(struct device_node *np, const struct bus_dma_region **map) 877 890 { 878 - struct device_node *node = of_node_get(np); 891 + struct device_node *node __free(device_node) = of_node_get(np); 879 892 const __be32 *ranges = NULL; 880 893 bool found_dma_ranges = false; 881 894 struct of_range_parser parser; 882 895 struct of_range range; 883 896 struct bus_dma_region *r; 884 897 int len, num_ranges = 0; 885 - int ret = 0; 886 898 887 899 while (node) { 888 900 ranges = of_get_property(node, "dma-ranges", &len); ··· 891 905 break; 892 906 893 907 /* Once we find 'dma-ranges', then a missing one is an error */ 894 - if (found_dma_ranges && !ranges) { 895 - ret = -ENODEV; 896 - goto out; 897 - } 908 + if (found_dma_ranges && !ranges) 909 + return -ENODEV; 910 + 898 911 found_dma_ranges = true; 899 912 900 913 node = of_get_next_dma_parent(node); ··· 901 916 902 917 if (!node || !ranges) { 903 918 pr_debug("no dma-ranges found for node(%pOF)\n", np); 904 - ret = -ENODEV; 905 - goto out; 919 + return -ENODEV; 906 920 } 907 - 908 921 of_dma_range_parser_init(&parser, node); 909 922 for_each_of_range(&parser, &range) { 910 923 if (range.cpu_addr == OF_BAD_ADDR) { ··· 913 930 num_ranges++; 914 931 } 915 932 916 - if (!num_ranges) { 917 - ret = -EINVAL; 918 - goto out; 919 - } 933 + if (!num_ranges) 934 + return -EINVAL; 920 935 921 936 r = kcalloc(num_ranges + 1, sizeof(*r), GFP_KERNEL); 922 - if (!r) { 923 - ret = -ENOMEM; 924 - goto out; 925 - } 937 + if (!r) 938 + return -ENOMEM; 926 939 927 940 /* 928 941 * Record all info in the generic DMA ranges array for struct device, ··· 936 957 r->size = range.size; 937 958 r++; 938 959 } 939 - out: 940 - of_node_put(node); 941 - return ret; 960 + return 0; 942 961 } 943 962 #endif /* CONFIG_HAS_DMA */ 944 963 ··· 993 1016 */ 994 1017 bool of_dma_is_coherent(struct device_node *np) 995 1018 { 996 - struct device_node *node; 997 - bool is_coherent = dma_default_coherent; 998 - 999 - node = of_node_get(np); 1019 + struct device_node *node __free(device_node) = of_node_get(np); 1000 1020 1001 1021 while (node) { 1002 - if (of_property_read_bool(node, "dma-coherent")) { 1003 - is_coherent = true; 1004 - break; 1005 - } 1006 - if (of_property_read_bool(node, "dma-noncoherent")) { 1007 - is_coherent = false; 1008 - break; 1009 - } 1022 + if (of_property_read_bool(node, "dma-coherent")) 1023 + return true; 1024 + 1025 + if (of_property_read_bool(node, "dma-noncoherent")) 1026 + return false; 1027 + 1010 1028 node = of_get_next_dma_parent(node); 1011 1029 } 1012 - of_node_put(node); 1013 - return is_coherent; 1030 + return dma_default_coherent; 1014 1031 } 1015 1032 EXPORT_SYMBOL_GPL(of_dma_is_coherent); 1016 1033 ··· 1020 1049 */ 1021 1050 static bool of_mmio_is_nonposted(struct device_node *np) 1022 1051 { 1023 - struct device_node *parent; 1024 - bool nonposted; 1025 - 1026 1052 if (!IS_ENABLED(CONFIG_ARCH_APPLE)) 1027 1053 return false; 1028 1054 1029 - parent = of_get_parent(np); 1055 + struct device_node *parent __free(device_node) = of_get_parent(np); 1030 1056 if (!parent) 1031 1057 return false; 1032 1058 1033 - nonposted = of_property_read_bool(parent, "nonposted-mmio"); 1034 - 1035 - of_node_put(parent); 1036 - return nonposted; 1059 + return of_property_read_bool(parent, "nonposted-mmio"); 1037 1060 } 1038 1061 1039 1062 static int __of_address_to_resource(struct device_node *dev, int index, int bar_no,
+8 -26
drivers/of/base.c
··· 16 16 17 17 #define pr_fmt(fmt) "OF: " fmt 18 18 19 + #include <linux/cleanup.h> 19 20 #include <linux/console.h> 20 21 #include <linux/ctype.h> 21 22 #include <linux/cpu.h> ··· 1394 1393 const char *stem_name, 1395 1394 int index, struct of_phandle_args *out_args) 1396 1395 { 1397 - char *cells_name, *map_name = NULL, *mask_name = NULL; 1398 - char *pass_name = NULL; 1396 + char *cells_name __free(kfree) = kasprintf(GFP_KERNEL, "#%s-cells", stem_name); 1397 + char *map_name __free(kfree) = kasprintf(GFP_KERNEL, "%s-map", stem_name); 1398 + char *mask_name __free(kfree) = kasprintf(GFP_KERNEL, "%s-map-mask", stem_name); 1399 + char *pass_name __free(kfree) = kasprintf(GFP_KERNEL, "%s-map-pass-thru", stem_name); 1399 1400 struct device_node *cur, *new = NULL; 1400 1401 const __be32 *map, *mask, *pass; 1401 1402 static const __be32 dummy_mask[] = { [0 ... MAX_PHANDLE_ARGS] = cpu_to_be32(~0) }; ··· 1410 1407 if (index < 0) 1411 1408 return -EINVAL; 1412 1409 1413 - cells_name = kasprintf(GFP_KERNEL, "#%s-cells", stem_name); 1414 - if (!cells_name) 1410 + if (!cells_name || !map_name || !mask_name || !pass_name) 1415 1411 return -ENOMEM; 1416 - 1417 - ret = -ENOMEM; 1418 - map_name = kasprintf(GFP_KERNEL, "%s-map", stem_name); 1419 - if (!map_name) 1420 - goto free; 1421 - 1422 - mask_name = kasprintf(GFP_KERNEL, "%s-map-mask", stem_name); 1423 - if (!mask_name) 1424 - goto free; 1425 - 1426 - pass_name = kasprintf(GFP_KERNEL, "%s-map-pass-thru", stem_name); 1427 - if (!pass_name) 1428 - goto free; 1429 1412 1430 1413 ret = __of_parse_phandle_with_args(np, list_name, cells_name, -1, index, 1431 1414 out_args); 1432 1415 if (ret) 1433 - goto free; 1416 + return ret; 1434 1417 1435 1418 /* Get the #<list>-cells property */ 1436 1419 cur = out_args->np; ··· 1433 1444 /* Get the <list>-map property */ 1434 1445 map = of_get_property(cur, map_name, &map_len); 1435 1446 if (!map) { 1436 - ret = 0; 1437 - goto free; 1447 + return 0; 1438 1448 } 1439 1449 map_len /= sizeof(u32); 1440 1450 ··· 1509 1521 put: 1510 1522 of_node_put(cur); 1511 1523 of_node_put(new); 1512 - free: 1513 - kfree(mask_name); 1514 - kfree(map_name); 1515 - kfree(cells_name); 1516 - kfree(pass_name); 1517 - 1518 1524 return ret; 1519 1525 } 1520 1526 EXPORT_SYMBOL(of_parse_phandle_with_args_map);
+16 -21
drivers/of/dynamic.c
··· 9 9 10 10 #define pr_fmt(fmt) "OF: " fmt 11 11 12 + #include <linux/cleanup.h> 12 13 #include <linux/device.h> 13 14 #include <linux/of.h> 14 15 #include <linux/spinlock.h> ··· 307 306 } 308 307 EXPORT_SYMBOL_GPL(of_detach_node); 309 308 309 + void __of_prop_free(struct property *prop) 310 + { 311 + kfree(prop->name); 312 + kfree(prop->value); 313 + kfree(prop); 314 + } 315 + 310 316 static void property_list_free(struct property *prop_list) 311 317 { 312 318 struct property *prop, *next; 313 319 314 320 for (prop = prop_list; prop != NULL; prop = next) { 315 321 next = prop->next; 316 - kfree(prop->name); 317 - kfree(prop->value); 318 - kfree(prop); 322 + __of_prop_free(prop); 319 323 } 320 324 } 321 325 ··· 433 427 return new; 434 428 435 429 err_free: 436 - kfree(new->name); 437 - kfree(new->value); 438 - kfree(new); 430 + __of_prop_free(new); 439 431 return NULL; 440 432 } 441 433 ··· 475 471 if (!new_pp) 476 472 goto err_prop; 477 473 if (__of_add_property(node, new_pp)) { 478 - kfree(new_pp->name); 479 - kfree(new_pp->value); 480 - kfree(new_pp); 474 + __of_prop_free(new_pp); 481 475 goto err_prop; 482 476 } 483 477 } ··· 935 933 return -ENOMEM; 936 934 937 935 ret = of_changeset_add_property(ocs, np, new_pp); 938 - if (ret) { 939 - kfree(new_pp->name); 940 - kfree(new_pp->value); 941 - kfree(new_pp); 942 - } 936 + if (ret) 937 + __of_prop_free(new_pp); 943 938 944 939 return ret; 945 940 } ··· 1032 1033 const u32 *array, size_t sz) 1033 1034 { 1034 1035 struct property prop; 1035 - __be32 *val; 1036 - int i, ret; 1036 + __be32 *val __free(kfree) = kcalloc(sz, sizeof(__be32), GFP_KERNEL); 1037 + int i; 1037 1038 1038 - val = kcalloc(sz, sizeof(__be32), GFP_KERNEL); 1039 1039 if (!val) 1040 1040 return -ENOMEM; 1041 1041 ··· 1044 1046 prop.length = sizeof(u32) * sz; 1045 1047 prop.value = (void *)val; 1046 1048 1047 - ret = of_changeset_add_prop_helper(ocs, np, &prop); 1048 - kfree(val); 1049 - 1050 - return ret; 1049 + return of_changeset_add_prop_helper(ocs, np, &prop); 1051 1050 } 1052 1051 EXPORT_SYMBOL_GPL(of_changeset_add_prop_u32_array);
+4 -3
drivers/of/module.c
··· 29 29 csize = snprintf(str, len, "of:N%pOFn%c%s", np, 'T', 30 30 of_node_get_device_type(np)); 31 31 tsize = csize; 32 + if (csize >= len) 33 + csize = len > 0 ? len - 1 : 0; 32 34 len -= csize; 33 - if (str) 34 - str += csize; 35 + str += csize; 35 36 36 37 of_property_for_each_string(np, "compatible", p, compat) { 37 38 csize = strlen(compat) + 1; 38 39 tsize += csize; 39 - if (csize > len) 40 + if (csize >= len) 40 41 continue; 41 42 42 43 csize = snprintf(str, len, "C%s", compat);
+1
drivers/of/of_private.h
··· 123 123 * own the devtree lock or work on detached trees only. 124 124 */ 125 125 struct property *__of_prop_dup(const struct property *prop, gfp_t allocflags); 126 + void __of_prop_free(struct property *prop); 126 127 struct device_node *__of_node_dup(const struct device_node *np, 127 128 const char *full_name); 128 129
+1 -21
drivers/of/of_reserved_mem.c
··· 437 437 for (i = 0; i < reserved_mem_count; i++) { 438 438 struct reserved_mem *rmem = &reserved_mem[i]; 439 439 unsigned long node = rmem->fdt_node; 440 - int len; 441 - const __be32 *prop; 442 440 int err = 0; 443 441 bool nomap; 444 442 445 443 nomap = of_get_flat_dt_prop(node, "no-map", NULL) != NULL; 446 - prop = of_get_flat_dt_prop(node, "phandle", &len); 447 - if (!prop) 448 - prop = of_get_flat_dt_prop(node, "linux,phandle", &len); 449 - if (prop) 450 - rmem->phandle = of_read_number(prop, len/4); 451 444 452 445 if (rmem->size == 0) 453 446 err = __reserved_mem_alloc_size(node, rmem->name, ··· 468 475 } 469 476 } 470 477 } 471 - } 472 - 473 - static inline struct reserved_mem *__find_rmem(struct device_node *node) 474 - { 475 - unsigned int i; 476 - 477 - if (!node->phandle) 478 - return NULL; 479 - 480 - for (i = 0; i < reserved_mem_count; i++) 481 - if (reserved_mem[i].phandle == node->phandle) 482 - return &reserved_mem[i]; 483 - return NULL; 484 478 } 485 479 486 480 struct rmem_assigned_device { ··· 514 534 return 0; 515 535 } 516 536 517 - rmem = __find_rmem(target); 537 + rmem = of_reserved_mem_lookup(target); 518 538 of_node_put(target); 519 539 520 540 if (!rmem || !rmem->ops || !rmem->ops->device_init)
+3 -8
drivers/of/overlay.c
··· 262 262 return new_prop; 263 263 264 264 err_free_new_prop: 265 - kfree(new_prop->name); 266 - kfree(new_prop->value); 267 - kfree(new_prop); 265 + __of_prop_free(new_prop); 268 266 err_free_target_path: 269 267 kfree(target_path); 270 268 ··· 359 361 pr_err("WARNING: memory leak will occur if overlay removed, property: %pOF/%s\n", 360 362 target->np, new_prop->name); 361 363 362 - if (ret) { 363 - kfree(new_prop->name); 364 - kfree(new_prop->value); 365 - kfree(new_prop); 366 - } 364 + if (ret) 365 + __of_prop_free(new_prop); 367 366 return ret; 368 367 } 369 368
+65 -22
drivers/of/property.c
··· 40 40 */ 41 41 bool of_graph_is_present(const struct device_node *node) 42 42 { 43 - struct device_node *ports, *port; 43 + struct device_node *ports __free(device_node) = of_get_child_by_name(node, "ports"); 44 44 45 - ports = of_get_child_by_name(node, "ports"); 46 45 if (ports) 47 46 node = ports; 48 47 49 - port = of_get_child_by_name(node, "port"); 50 - of_node_put(ports); 51 - of_node_put(port); 48 + struct device_node *port __free(device_node) = of_get_child_by_name(node, "port"); 52 49 53 50 return !!port; 54 51 } ··· 576 579 int of_graph_parse_endpoint(const struct device_node *node, 577 580 struct of_endpoint *endpoint) 578 581 { 579 - struct device_node *port_node = of_get_parent(node); 582 + struct device_node *port_node __free(device_node) = 583 + of_get_parent(node); 580 584 581 585 WARN_ONCE(!port_node, "%s(): endpoint %pOF has no parent node\n", 582 586 __func__, node); ··· 591 593 */ 592 594 of_property_read_u32(port_node, "reg", &endpoint->port); 593 595 of_property_read_u32(node, "reg", &endpoint->id); 594 - 595 - of_node_put(port_node); 596 596 597 597 return 0; 598 598 } ··· 606 610 */ 607 611 struct device_node *of_graph_get_port_by_id(struct device_node *parent, u32 id) 608 612 { 609 - struct device_node *node, *port; 613 + struct device_node *node __free(device_node) = of_get_child_by_name(parent, "ports"); 610 614 611 - node = of_get_child_by_name(parent, "ports"); 612 615 if (node) 613 616 parent = node; 614 617 615 - for_each_child_of_node(parent, port) { 618 + for_each_child_of_node_scoped(parent, port) { 616 619 u32 port_id = 0; 617 620 618 621 if (!of_node_name_eq(port, "port")) 619 622 continue; 620 623 of_property_read_u32(port, "reg", &port_id); 621 624 if (id == port_id) 622 - break; 625 + return_ptr(port); 623 626 } 624 627 625 - of_node_put(node); 626 - 627 - return port; 628 + return NULL; 628 629 } 629 630 EXPORT_SYMBOL(of_graph_get_port_by_id); 630 631 ··· 648 655 * parent port node. 649 656 */ 650 657 if (!prev) { 651 - struct device_node *node; 658 + struct device_node *node __free(device_node) = 659 + of_get_child_by_name(parent, "ports"); 652 660 653 - node = of_get_child_by_name(parent, "ports"); 654 661 if (node) 655 662 parent = node; 656 663 657 664 port = of_get_child_by_name(parent, "port"); 658 - of_node_put(node); 659 - 660 665 if (!port) { 661 666 pr_debug("graph: no port node found in %pOF\n", parent); 662 667 return NULL; ··· 1043 1052 struct fwnode_endpoint *endpoint) 1044 1053 { 1045 1054 const struct device_node *node = to_of_node(fwnode); 1046 - struct device_node *port_node = of_get_parent(node); 1055 + struct device_node *port_node __free(device_node) = of_get_parent(node); 1047 1056 1048 1057 endpoint->local_fwnode = fwnode; 1049 1058 1050 1059 of_property_read_u32(port_node, "reg", &endpoint->port); 1051 1060 of_property_read_u32(node, "reg", &endpoint->id); 1052 - 1053 - of_node_put(port_node); 1054 1061 1055 1062 return 0; 1056 1063 } ··· 1243 1254 DEFINE_SIMPLE_PROP(post_init_providers, "post-init-providers", NULL) 1244 1255 DEFINE_SIMPLE_PROP(access_controllers, "access-controllers", "#access-controller-cells") 1245 1256 DEFINE_SIMPLE_PROP(pses, "pses", "#pse-cells") 1257 + DEFINE_SIMPLE_PROP(power_supplies, "power-supplies", NULL) 1246 1258 DEFINE_SUFFIX_PROP(regulators, "-supply", NULL) 1247 1259 DEFINE_SUFFIX_PROP(gpio, "-gpio", "#gpio-cells") 1248 1260 ··· 1303 1313 return of_irq_parse_one(np, index, &sup_args) ? NULL : sup_args.np; 1304 1314 } 1305 1315 1316 + static struct device_node *parse_interrupt_map(struct device_node *np, 1317 + const char *prop_name, int index) 1318 + { 1319 + const __be32 *imap, *imap_end, *addr; 1320 + struct of_phandle_args sup_args; 1321 + u32 addrcells, intcells; 1322 + int i, imaplen; 1323 + 1324 + if (!IS_ENABLED(CONFIG_OF_IRQ)) 1325 + return NULL; 1326 + 1327 + if (strcmp(prop_name, "interrupt-map")) 1328 + return NULL; 1329 + 1330 + if (of_property_read_u32(np, "#interrupt-cells", &intcells)) 1331 + return NULL; 1332 + addrcells = of_bus_n_addr_cells(np); 1333 + 1334 + imap = of_get_property(np, "interrupt-map", &imaplen); 1335 + if (!imap || imaplen <= (addrcells + intcells)) 1336 + return NULL; 1337 + imap_end = imap + imaplen; 1338 + 1339 + while (imap < imap_end) { 1340 + addr = imap; 1341 + imap += addrcells; 1342 + 1343 + sup_args.np = np; 1344 + sup_args.args_count = intcells; 1345 + for (i = 0; i < intcells; i++) 1346 + sup_args.args[i] = be32_to_cpu(imap[i]); 1347 + imap += intcells; 1348 + 1349 + /* 1350 + * Upon success, the function of_irq_parse_raw() returns 1351 + * interrupt controller DT node pointer in sup_args.np. 1352 + */ 1353 + if (of_irq_parse_raw(addr, &sup_args)) 1354 + return NULL; 1355 + 1356 + if (!index) 1357 + return sup_args.np; 1358 + 1359 + of_node_put(sup_args.np); 1360 + imap += sup_args.args_count + 1; 1361 + index--; 1362 + } 1363 + 1364 + return NULL; 1365 + } 1366 + 1306 1367 static struct device_node *parse_remote_endpoint(struct device_node *np, 1307 1368 const char *prop_name, 1308 1369 int index) ··· 1401 1360 { .parse_prop = parse_panel, }, 1402 1361 { .parse_prop = parse_msi_parent, }, 1403 1362 { .parse_prop = parse_pses, }, 1363 + { .parse_prop = parse_power_supplies, }, 1404 1364 { .parse_prop = parse_gpio_compat, }, 1405 1365 { .parse_prop = parse_interrupts, }, 1366 + { .parse_prop = parse_interrupt_map, }, 1406 1367 { .parse_prop = parse_access_controllers, }, 1407 1368 { .parse_prop = parse_regulators, }, 1408 1369 { .parse_prop = parse_gpio, },
+13 -22
drivers/of/resolver.c
··· 8 8 9 9 #define pr_fmt(fmt) "OF: resolver: " fmt 10 10 11 + #include <linux/cleanup.h> 11 12 #include <linux/kernel.h> 12 13 #include <linux/module.h> 13 14 #include <linux/of.h> ··· 75 74 { 76 75 struct device_node *refnode; 77 76 struct property *prop; 78 - char *value, *cur, *end, *node_path, *prop_name, *s; 77 + char *value __free(kfree) = kmemdup(prop_fixup->value, prop_fixup->length, GFP_KERNEL); 78 + char *cur, *end, *node_path, *prop_name, *s; 79 79 int offset, len; 80 80 int err = 0; 81 81 82 - value = kmemdup(prop_fixup->value, prop_fixup->length, GFP_KERNEL); 83 82 if (!value) 84 83 return -ENOMEM; 85 84 ··· 90 89 91 90 node_path = cur; 92 91 s = strchr(cur, ':'); 93 - if (!s) { 94 - err = -EINVAL; 95 - goto err_fail; 96 - } 92 + if (!s) 93 + return -EINVAL; 97 94 *s++ = '\0'; 98 95 99 96 prop_name = s; 100 97 s = strchr(s, ':'); 101 - if (!s) { 102 - err = -EINVAL; 103 - goto err_fail; 104 - } 98 + if (!s) 99 + return -EINVAL; 105 100 *s++ = '\0'; 106 101 107 102 err = kstrtoint(s, 10, &offset); 108 103 if (err) 109 - goto err_fail; 104 + return err; 110 105 111 106 refnode = __of_find_node_by_full_path(of_node_get(overlay), node_path); 112 107 if (!refnode) ··· 114 117 } 115 118 of_node_put(refnode); 116 119 117 - if (!prop) { 118 - err = -ENOENT; 119 - goto err_fail; 120 - } 120 + if (!prop) 121 + return -ENOENT; 121 122 122 - if (offset < 0 || offset + sizeof(__be32) > prop->length) { 123 - err = -EINVAL; 124 - goto err_fail; 125 - } 123 + if (offset < 0 || offset + sizeof(__be32) > prop->length) 124 + return -EINVAL; 126 125 127 126 *(__be32 *)(prop->value + offset) = cpu_to_be32(phandle); 128 127 } 129 128 130 - err_fail: 131 - kfree(value); 132 - return err; 129 + return 0; 133 130 } 134 131 135 132 /* compare nodes taking into account that 'name' strips out the @ part */
+3 -9
drivers/of/unittest.c
··· 795 795 796 796 new = __of_prop_dup(&p1, GFP_KERNEL); 797 797 unittest(new && propcmp(&p1, new), "empty property didn't copy correctly\n"); 798 - kfree(new->value); 799 - kfree(new->name); 800 - kfree(new); 798 + __of_prop_free(new); 801 799 802 800 new = __of_prop_dup(&p2, GFP_KERNEL); 803 801 unittest(new && propcmp(&p2, new), "non-empty property didn't copy correctly\n"); 804 - kfree(new->value); 805 - kfree(new->name); 806 - kfree(new); 802 + __of_prop_free(new); 807 803 #endif 808 804 } 809 805 ··· 3714 3718 goto err_unlock; 3715 3719 } 3716 3720 if (__of_add_property(of_symbols, new_prop)) { 3717 - kfree(new_prop->name); 3718 - kfree(new_prop->value); 3719 - kfree(new_prop); 3721 + __of_prop_free(new_prop); 3720 3722 /* "name" auto-generated by unflatten */ 3721 3723 if (!strcmp(prop->name, "name")) 3722 3724 continue;
-1
include/linux/of_reserved_mem.h
··· 11 11 struct reserved_mem { 12 12 const char *name; 13 13 unsigned long fdt_node; 14 - unsigned long phandle; 15 14 const struct reserved_mem_ops *ops; 16 15 phys_addr_t base; 17 16 phys_addr_t size;