Commit 63758fec authored by Daniel Vetter's avatar Daniel Vetter

Merge tag 'drm-misc-next-2023-03-31' of git://anongit.freedesktop.org/drm/drm-misc into drm-next

drm-misc-next for v6.4-rc1:

Cross-subsystem Changes:
- DT bindings update for adding Mali MT81xx devices.
- Assorted DT binding updates.

Core Changes:
- Documentation update to scheduler.

Driver Changes:
- Add support for the same mali devices.
- Add support for speed binning to panfrost.
- Add B133UAN01.0 eDP panel.
- Assorted small fixes to bridge/ps8640, bridge/it6505, panel/magnachip.
- Use of_property_read_bool in ps8622 and ofdrm.
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/36f4efa4-26e9-49df-287e-d193422c990d@linux.intel.com
parents 82bbec18 7d690f93
...@@ -10,7 +10,7 @@ maintainers: ...@@ -10,7 +10,7 @@ maintainers:
- Robin van der Gracht <robin@protonic.nl> - Robin van der Gracht <robin@protonic.nl>
allOf: allOf:
- $ref: "/schemas/input/matrix-keymap.yaml#" - $ref: /schemas/input/matrix-keymap.yaml#
properties: properties:
compatible: compatible:
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
# Copyright 2019 BayLibre, SAS # Copyright 2019 BayLibre, SAS
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/display/amlogic,meson-dw-hdmi.yaml#" $id: http://devicetree.org/schemas/display/amlogic,meson-dw-hdmi.yaml#
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Amlogic specific extensions to the Synopsys Designware HDMI Controller title: Amlogic specific extensions to the Synopsys Designware HDMI Controller
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
# Copyright 2019 BayLibre, SAS # Copyright 2019 BayLibre, SAS
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/display/amlogic,meson-vpu.yaml#" $id: http://devicetree.org/schemas/display/amlogic,meson-vpu.yaml#
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Amlogic Meson Display Controller title: Amlogic Meson Display Controller
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
# Copyright 2019 Analogix Semiconductor, Inc. # Copyright 2019 Analogix Semiconductor, Inc.
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/display/bridge/analogix,anx7625.yaml#" $id: http://devicetree.org/schemas/display/bridge/analogix,anx7625.yaml#
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Analogix ANX7625 SlimPort (4K Mobile HD Transmitter) title: Analogix ANX7625 SlimPort (4K Mobile HD Transmitter)
......
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/display/bridge/cdns,mhdp8546.yaml#" $id: http://devicetree.org/schemas/display/bridge/cdns,mhdp8546.yaml#
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Cadence MHDP8546 bridge title: Cadence MHDP8546 bridge
......
...@@ -18,7 +18,7 @@ properties: ...@@ -18,7 +18,7 @@ properties:
maxItems: 1 maxItems: 1
edid-emulation: edid-emulation:
$ref: "/schemas/types.yaml#/definitions/uint32" $ref: /schemas/types.yaml#/definitions/uint32
description: description:
The EDID emulation entry to use The EDID emulation entry to use
Value Resolution Description Value Resolution Description
......
...@@ -23,7 +23,7 @@ properties: ...@@ -23,7 +23,7 @@ properties:
i2c address of the bridge, 0x68 or 0x0f, depending on bootstrap pins i2c address of the bridge, 0x68 or 0x0f, depending on bootstrap pins
clock-names: clock-names:
const: "ref" const: ref
clocks: clocks:
maxItems: 1 maxItems: 1
......
...@@ -26,7 +26,7 @@ description: ...@@ -26,7 +26,7 @@ description:
properties: properties:
$nodename: $nodename:
const: "aux-bus" const: aux-bus
panel: panel:
$ref: panel/panel-common.yaml# $ref: panel/panel-common.yaml#
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
# Copyright 2019 NXP # Copyright 2019 NXP
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/display/imx/nxp,imx8mq-dcss.yaml#" $id: http://devicetree.org/schemas/display/imx/nxp,imx8mq-dcss.yaml#
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: http://devicetree.org/meta-schemas/core.yaml#
title: iMX8MQ Display Controller Subsystem (DCSS) title: iMX8MQ Display Controller Subsystem (DCSS)
......
...@@ -50,7 +50,7 @@ properties: ...@@ -50,7 +50,7 @@ properties:
- const: hdmi - const: hdmi
mediatek,syscon-hdmi: mediatek,syscon-hdmi:
$ref: '/schemas/types.yaml#/definitions/phandle-array' $ref: /schemas/types.yaml#/definitions/phandle-array
items: items:
- items: - items:
- description: phandle to system configuration registers - description: phandle to system configuration registers
......
...@@ -74,7 +74,7 @@ properties: ...@@ -74,7 +74,7 @@ properties:
syscon-sfpb: syscon-sfpb:
description: A phandle to mmss_sfpb syscon node (only for DSIv2). description: A phandle to mmss_sfpb syscon node (only for DSIv2).
$ref: "/schemas/types.yaml#/definitions/phandle" $ref: /schemas/types.yaml#/definitions/phandle
qcom,dual-dsi-mode: qcom,dual-dsi-mode:
type: boolean type: boolean
...@@ -105,14 +105,14 @@ properties: ...@@ -105,14 +105,14 @@ properties:
type: object type: object
ports: ports:
$ref: "/schemas/graph.yaml#/properties/ports" $ref: /schemas/graph.yaml#/properties/ports
description: | description: |
Contains DSI controller input and output ports as children, each Contains DSI controller input and output ports as children, each
containing one endpoint subnode. containing one endpoint subnode.
properties: properties:
port@0: port@0:
$ref: "/schemas/graph.yaml#/$defs/port-base" $ref: /schemas/graph.yaml#/$defs/port-base
unevaluatedProperties: false unevaluatedProperties: false
description: | description: |
Input endpoints of the controller. Input endpoints of the controller.
...@@ -128,7 +128,7 @@ properties: ...@@ -128,7 +128,7 @@ properties:
enum: [ 0, 1, 2, 3 ] enum: [ 0, 1, 2, 3 ]
port@1: port@1:
$ref: "/schemas/graph.yaml#/$defs/port-base" $ref: /schemas/graph.yaml#/$defs/port-base
unevaluatedProperties: false unevaluatedProperties: false
description: | description: |
Output endpoints of the controller. Output endpoints of the controller.
......
...@@ -58,7 +58,7 @@ properties: ...@@ -58,7 +58,7 @@ properties:
maximum: 31 maximum: 31
qcom,phy-drive-ldo-level: qcom,phy-drive-ldo-level:
$ref: "/schemas/types.yaml#/definitions/uint32" $ref: /schemas/types.yaml#/definitions/uint32
description: description:
The PHY LDO has an amplitude tuning feature to adjust the LDO output The PHY LDO has an amplitude tuning feature to adjust the LDO output
for the HSTX drive. Use supported levels (mV) to offset the drive level for the HSTX drive. Use supported levels (mV) to offset the drive level
......
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/display/msm/gmu.yaml#" $id: http://devicetree.org/schemas/display/msm/gmu.yaml#
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: http://devicetree.org/meta-schemas/core.yaml#
title: GMU attached to certain Adreno GPUs title: GMU attached to certain Adreno GPUs
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/display/msm/gpu.yaml#" $id: http://devicetree.org/schemas/display/msm/gpu.yaml#
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Adreno or Snapdragon GPUs title: Adreno or Snapdragon GPUs
......
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/display/msm/mdp4.yaml#" $id: http://devicetree.org/schemas/display/msm/mdp4.yaml#
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Qualcomm Adreno/Snapdragon MDP4 display controller title: Qualcomm Adreno/Snapdragon MDP4 display controller
......
...@@ -55,6 +55,7 @@ properties: ...@@ -55,6 +55,7 @@ properties:
description: phandle of the backlight device attached to the panel description: phandle of the backlight device attached to the panel
port: true port: true
rotation: true
required: required:
- compatible - compatible
......
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/display/panel/innolux,p120zdg-bf1.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Innolux P120ZDG-BF1 12.02 inch eDP 2K display panel
maintainers:
- Sandeep Panda <spanda@codeaurora.org>
- Douglas Anderson <dianders@chromium.org>
allOf:
- $ref: panel-common.yaml#
properties:
compatible:
const: innolux,p120zdg-bf1
enable-gpios: true
power-supply: true
backlight: true
no-hpd: true
required:
- compatible
- power-supply
additionalProperties: false
examples:
- |
#include <dt-bindings/gpio/gpio.h>
panel_edp: panel-edp {
compatible = "innolux,p120zdg-bf1";
enable-gpios = <&msmgpio 31 GPIO_ACTIVE_LOW>;
power-supply = <&pm8916_l2>;
backlight = <&backlight>;
no-hpd;
};
...
...@@ -34,7 +34,7 @@ properties: ...@@ -34,7 +34,7 @@ properties:
description: phandle of gpio for reset line - This should be 8mA, gpio description: phandle of gpio for reset line - This should be 8mA, gpio
can be configured using mux, pinctrl, pinctrl-names (active high) can be configured using mux, pinctrl, pinctrl-names (active high)
vddi0-supply: vddio-supply:
description: phandle of the regulator that provides the supply voltage description: phandle of the regulator that provides the supply voltage
Power IC supply Power IC supply
...@@ -51,7 +51,7 @@ properties: ...@@ -51,7 +51,7 @@ properties:
required: required:
- compatible - compatible
- reg - reg
- vddi0-supply - vddio-supply
- vddpos-supply - vddpos-supply
- vddneg-supply - vddneg-supply
- reset-gpios - reset-gpios
...@@ -70,7 +70,7 @@ examples: ...@@ -70,7 +70,7 @@ examples:
panel@0 { panel@0 {
compatible = "tianma,fhd-video", "novatek,nt36672a"; compatible = "tianma,fhd-video", "novatek,nt36672a";
reg = <0>; reg = <0>;
vddi0-supply = <&vreg_l14a_1p88>; vddio-supply = <&vreg_l14a_1p88>;
vddpos-supply = <&lab>; vddpos-supply = <&lab>;
vddneg-supply = <&ibb>; vddneg-supply = <&ibb>;
......
...@@ -19,9 +19,6 @@ description: | ...@@ -19,9 +19,6 @@ description: |
If the panel is more advanced a dedicated binding file is required. If the panel is more advanced a dedicated binding file is required.
allOf:
- $ref: panel-common.yaml#
properties: properties:
compatible: compatible:
...@@ -67,12 +64,31 @@ properties: ...@@ -67,12 +64,31 @@ properties:
reset-gpios: true reset-gpios: true
port: true port: true
power-supply: true power-supply: true
vddio-supply: true
allOf:
- $ref: panel-common.yaml#
- if:
properties:
compatible:
enum:
- samsung,s6e3fc2x01
- samsung,sofef00
then:
properties:
power-supply: false
required:
- vddio-supply
else:
properties:
vddio-supply: false
required:
- power-supply
additionalProperties: false additionalProperties: false
required: required:
- compatible - compatible
- power-supply
- reg - reg
examples: examples:
......
...@@ -192,6 +192,8 @@ properties: ...@@ -192,6 +192,8 @@ properties:
- innolux,n125hce-gn1 - innolux,n125hce-gn1
# InnoLux 15.6" WXGA TFT LCD panel # InnoLux 15.6" WXGA TFT LCD panel
- innolux,n156bge-l21 - innolux,n156bge-l21
# Innolux P120ZDG-BF1 12.02 inch eDP 2K display panel
- innolux,p120zdg-bf1
# Innolux Corporation 7.0" WSVGA (1024x600) TFT LCD panel # Innolux Corporation 7.0" WSVGA (1024x600) TFT LCD panel
- innolux,zj070na-01p - innolux,zj070na-01p
# King & Display KD116N21-30NV-A010 eDP TFT LCD panel # King & Display KD116N21-30NV-A010 eDP TFT LCD panel
......
...@@ -37,7 +37,7 @@ properties: ...@@ -37,7 +37,7 @@ properties:
backlight: backlight:
description: Backlight used by the panel description: Backlight used by the panel
$ref: "/schemas/types.yaml#/definitions/phandle" $ref: /schemas/types.yaml#/definitions/phandle
required: required:
- compatible - compatible
......
...@@ -16,6 +16,7 @@ properties: ...@@ -16,6 +16,7 @@ properties:
compatible: compatible:
const: samsung,s6e88a0-ams452ef01 const: samsung,s6e88a0-ams452ef01
reg: true reg: true
port: true
reset-gpios: true reset-gpios: true
vdd3-supply: vdd3-supply:
description: core voltage supply description: core voltage supply
...@@ -25,6 +26,7 @@ properties: ...@@ -25,6 +26,7 @@ properties:
required: required:
- compatible - compatible
- reg - reg
- port
- vdd3-supply - vdd3-supply
- vci-supply - vci-supply
- reset-gpios - reset-gpios
...@@ -46,5 +48,11 @@ examples: ...@@ -46,5 +48,11 @@ examples:
vdd3-supply = <&pm8916_l17>; vdd3-supply = <&pm8916_l17>;
vci-supply = <&reg_vlcd_vci>; vci-supply = <&reg_vlcd_vci>;
reset-gpios = <&msmgpio 25 GPIO_ACTIVE_HIGH>; reset-gpios = <&msmgpio 25 GPIO_ACTIVE_HIGH>;
port {
panel_in: endpoint {
remote-endpoint = <&dsi0_out>;
};
};
}; };
}; };
...@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# ...@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Seiko Instruments Inc. 4.3" WVGA (800 x RGB x 480) TFT with Touch-Panel title: Seiko Instruments Inc. 4.3" WVGA (800 x RGB x 480) TFT with Touch-Panel
maintainers: maintainers:
- Marco Franchi <marco.franchi@nxp.com> - Fabio Estevam <festevam@gmail.com>
allOf: allOf:
- $ref: panel-common.yaml# - $ref: panel-common.yaml#
......
...@@ -19,6 +19,8 @@ properties: ...@@ -19,6 +19,8 @@ properties:
compatible: compatible:
const: visionox,rm69299-1080p-display const: visionox,rm69299-1080p-display
reg: true
vdda-supply: vdda-supply:
description: | description: |
Phandle of the regulator that provides the vdda supply voltage. Phandle of the regulator that provides the vdda supply voltage.
...@@ -34,6 +36,7 @@ additionalProperties: false ...@@ -34,6 +36,7 @@ additionalProperties: false
required: required:
- compatible - compatible
- reg
- vdda-supply - vdda-supply
- vdd3p3-supply - vdd3p3-supply
- reset-gpios - reset-gpios
...@@ -41,16 +44,22 @@ required: ...@@ -41,16 +44,22 @@ required:
examples: examples:
- | - |
panel { dsi {
compatible = "visionox,rm69299-1080p-display"; #address-cells = <1>;
#size-cells = <0>;
panel@0 {
compatible = "visionox,rm69299-1080p-display";
reg = <0>;
vdda-supply = <&src_pp1800_l8c>; vdda-supply = <&src_pp1800_l8c>;
vdd3p3-supply = <&src_pp2800_l18a>; vdd3p3-supply = <&src_pp2800_l18a>;
reset-gpios = <&pm6150l_gpio 3 0>; reset-gpios = <&pm6150l_gpio 3 0>;
port { port {
panel0_in: endpoint { panel0_in: endpoint {
remote-endpoint = <&dsi0_out>; remote-endpoint = <&dsi0_out>;
};
}; };
}; };
}; };
......
...@@ -76,7 +76,7 @@ properties: ...@@ -76,7 +76,7 @@ properties:
unevaluatedProperties: false unevaluatedProperties: false
renesas,cmms: renesas,cmms:
$ref: "/schemas/types.yaml#/definitions/phandle-array" $ref: /schemas/types.yaml#/definitions/phandle-array
items: items:
maxItems: 1 maxItems: 1
description: description:
...@@ -84,7 +84,7 @@ properties: ...@@ -84,7 +84,7 @@ properties:
available DU channel. available DU channel.
renesas,vsps: renesas,vsps:
$ref: "/schemas/types.yaml#/definitions/phandle-array" $ref: /schemas/types.yaml#/definitions/phandle-array
items: items:
items: items:
- description: phandle to VSP instance that serves the DU channel - description: phandle to VSP instance that serves the DU channel
......
...@@ -38,7 +38,7 @@ properties: ...@@ -38,7 +38,7 @@ properties:
description: The number of cells in a MIPI calibration specifier. description: The number of cells in a MIPI calibration specifier.
Should be 1. The single cell specifies a bitmask of the pads that Should be 1. The single cell specifies a bitmask of the pads that
need to be calibrated for a given device. need to be calibrated for a given device.
$ref: "/schemas/types.yaml#/definitions/uint32" $ref: /schemas/types.yaml#/definitions/uint32
const: 1 const: 1
additionalProperties: false additionalProperties: false
......
...@@ -69,12 +69,12 @@ properties: ...@@ -69,12 +69,12 @@ properties:
# Tegra186 and later # Tegra186 and later
nvidia,interface: nvidia,interface:
description: index of the SOR interface description: index of the SOR interface
$ref: "/schemas/types.yaml#/definitions/uint32" $ref: /schemas/types.yaml#/definitions/uint32
nvidia,ddc-i2c-bus: nvidia,ddc-i2c-bus:
description: phandle of an I2C controller used for DDC EDID description: phandle of an I2C controller used for DDC EDID
probing probing
$ref: "/schemas/types.yaml#/definitions/phandle" $ref: /schemas/types.yaml#/definitions/phandle
nvidia,hpd-gpio: nvidia,hpd-gpio:
description: specifies a GPIO used for hotplug detection description: specifies a GPIO used for hotplug detection
...@@ -82,23 +82,23 @@ properties: ...@@ -82,23 +82,23 @@ properties:
nvidia,edid: nvidia,edid:
description: supplies a binary EDID blob description: supplies a binary EDID blob
$ref: "/schemas/types.yaml#/definitions/uint8-array" $ref: /schemas/types.yaml#/definitions/uint8-array
nvidia,panel: nvidia,panel:
description: phandle of a display panel, required for eDP description: phandle of a display panel, required for eDP
$ref: "/schemas/types.yaml#/definitions/phandle" $ref: /schemas/types.yaml#/definitions/phandle
nvidia,xbar-cfg: nvidia,xbar-cfg:
description: 5 cells containing the crossbar configuration. description: 5 cells containing the crossbar configuration.
Each lane of the SOR, identified by the cell's index, is Each lane of the SOR, identified by the cell's index, is
mapped via the crossbar to the pad specified by the cell's mapped via the crossbar to the pad specified by the cell's
value. value.
$ref: "/schemas/types.yaml#/definitions/uint32-array" $ref: /schemas/types.yaml#/definitions/uint32-array
# optional when driving an eDP output # optional when driving an eDP output
nvidia,dpaux: nvidia,dpaux:
description: phandle to a DispayPort AUX interface description: phandle to a DispayPort AUX interface
$ref: "/schemas/types.yaml#/definitions/phandle" $ref: /schemas/types.yaml#/definitions/phandle
allOf: allOf:
- if: - if:
......
...@@ -60,13 +60,13 @@ properties: ...@@ -60,13 +60,13 @@ properties:
nvidia,outputs: nvidia,outputs:
description: A list of phandles of outputs that this display description: A list of phandles of outputs that this display
controller can drive. controller can drive.
$ref: "/schemas/types.yaml#/definitions/phandle-array" $ref: /schemas/types.yaml#/definitions/phandle-array
nvidia,head: nvidia,head:
description: The number of the display controller head. This description: The number of the display controller head. This
is used to setup the various types of output to receive is used to setup the various types of output to receive
video data from the given head. video data from the given head.
$ref: "/schemas/types.yaml#/definitions/uint32" $ref: /schemas/types.yaml#/definitions/uint32
additionalProperties: false additionalProperties: false
......
...@@ -29,7 +29,7 @@ properties: ...@@ -29,7 +29,7 @@ properties:
- const: dsi - const: dsi
allOf: allOf:
- $ref: "/schemas/reset/reset.yaml" - $ref: /schemas/reset/reset.yaml
additionalProperties: false additionalProperties: false
......
...@@ -59,12 +59,12 @@ properties: ...@@ -59,12 +59,12 @@ properties:
description: Should contain a phandle and a specifier specifying description: Should contain a phandle and a specifier specifying
which pads are used by this DSI output and need to be which pads are used by this DSI output and need to be
calibrated. See nvidia,tegra114-mipi.yaml for details. calibrated. See nvidia,tegra114-mipi.yaml for details.
$ref: "/schemas/types.yaml#/definitions/phandle-array" $ref: /schemas/types.yaml#/definitions/phandle-array
nvidia,ddc-i2c-bus: nvidia,ddc-i2c-bus:
description: phandle of an I2C controller used for DDC EDID description: phandle of an I2C controller used for DDC EDID
probing probing
$ref: "/schemas/types.yaml#/definitions/phandle" $ref: /schemas/types.yaml#/definitions/phandle
nvidia,hpd-gpio: nvidia,hpd-gpio:
description: specifies a GPIO used for hotplug detection description: specifies a GPIO used for hotplug detection
...@@ -72,19 +72,19 @@ properties: ...@@ -72,19 +72,19 @@ properties:
nvidia,edid: nvidia,edid:
description: supplies a binary EDID blob description: supplies a binary EDID blob
$ref: "/schemas/types.yaml#/definitions/uint8-array" $ref: /schemas/types.yaml#/definitions/uint8-array
nvidia,panel: nvidia,panel:
description: phandle of a display panel description: phandle of a display panel
$ref: "/schemas/types.yaml#/definitions/phandle" $ref: /schemas/types.yaml#/definitions/phandle
nvidia,ganged-mode: nvidia,ganged-mode:
description: contains a phandle to a second DSI controller to description: contains a phandle to a second DSI controller to
gang up with in order to support up to 8 data lanes gang up with in order to support up to 8 data lanes
$ref: "/schemas/types.yaml#/definitions/phandle" $ref: /schemas/types.yaml#/definitions/phandle
allOf: allOf:
- $ref: "../dsi-controller.yaml#" - $ref: ../dsi-controller.yaml#
- if: - if:
properties: properties:
compatible: compatible:
......
...@@ -68,7 +68,7 @@ properties: ...@@ -68,7 +68,7 @@ properties:
nvidia,ddc-i2c-bus: nvidia,ddc-i2c-bus:
description: phandle of an I2C controller used for DDC EDID description: phandle of an I2C controller used for DDC EDID
probing probing
$ref: "/schemas/types.yaml#/definitions/phandle" $ref: /schemas/types.yaml#/definitions/phandle
nvidia,hpd-gpio: nvidia,hpd-gpio:
description: specifies a GPIO used for hotplug detection description: specifies a GPIO used for hotplug detection
...@@ -76,11 +76,11 @@ properties: ...@@ -76,11 +76,11 @@ properties:
nvidia,edid: nvidia,edid:
description: supplies a binary EDID blob description: supplies a binary EDID blob
$ref: "/schemas/types.yaml#/definitions/uint8-array" $ref: /schemas/types.yaml#/definitions/uint8-array
nvidia,panel: nvidia,panel:
description: phandle of a display panel description: phandle of a display panel
$ref: "/schemas/types.yaml#/definitions/phandle" $ref: /schemas/types.yaml#/definitions/phandle
"#sound-dai-cells": "#sound-dai-cells":
const: 0 const: 0
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
# Copyright 2019 Texas Instruments Incorporated # Copyright 2019 Texas Instruments Incorporated
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/display/ti/ti,am65x-dss.yaml#" $id: http://devicetree.org/schemas/display/ti/ti,am65x-dss.yaml#
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Texas Instruments AM65x Display Subsystem title: Texas Instruments AM65x Display Subsystem
...@@ -88,7 +88,7 @@ properties: ...@@ -88,7 +88,7 @@ properties:
The DSS DPI output port node from video port 2 The DSS DPI output port node from video port 2
ti,am65x-oldi-io-ctrl: ti,am65x-oldi-io-ctrl:
$ref: "/schemas/types.yaml#/definitions/phandle" $ref: /schemas/types.yaml#/definitions/phandle
description: description:
phandle to syscon device node mapping OLDI IO_CTRL registers. phandle to syscon device node mapping OLDI IO_CTRL registers.
The mapped range should point to OLDI_DAT0_IO_CTRL, map it and The mapped range should point to OLDI_DAT0_IO_CTRL, map it and
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
# Copyright 2019 Texas Instruments Incorporated # Copyright 2019 Texas Instruments Incorporated
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/display/ti/ti,j721e-dss.yaml#" $id: http://devicetree.org/schemas/display/ti/ti,j721e-dss.yaml#
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Texas Instruments J721E Display Subsystem title: Texas Instruments J721E Display Subsystem
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
# Copyright 2019 Texas Instruments Incorporated # Copyright 2019 Texas Instruments Incorporated
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/display/ti/ti,k2g-dss.yaml#" $id: http://devicetree.org/schemas/display/ti/ti,k2g-dss.yaml#
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Texas Instruments K2G Display Subsystem title: Texas Instruments K2G Display Subsystem
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
# Copyright 2019 Bootlin # Copyright 2019 Bootlin
%YAML 1.2 %YAML 1.2
--- ---
$id: "http://devicetree.org/schemas/display/xylon,logicvc-display.yaml#" $id: http://devicetree.org/schemas/display/xylon,logicvc-display.yaml#
$schema: "http://devicetree.org/meta-schemas/core.yaml#" $schema: http://devicetree.org/meta-schemas/core.yaml#
title: Xylon LogiCVC display controller title: Xylon LogiCVC display controller
...@@ -89,25 +89,25 @@ properties: ...@@ -89,25 +89,25 @@ properties:
description: Display output colorspace (C_DISPLAY_COLOR_SPACE). description: Display output colorspace (C_DISPLAY_COLOR_SPACE).
xylon,display-depth: xylon,display-depth:
$ref: "/schemas/types.yaml#/definitions/uint32" $ref: /schemas/types.yaml#/definitions/uint32
description: Display output depth (C_PIXEL_DATA_WIDTH). description: Display output depth (C_PIXEL_DATA_WIDTH).
xylon,row-stride: xylon,row-stride:
$ref: "/schemas/types.yaml#/definitions/uint32" $ref: /schemas/types.yaml#/definitions/uint32
description: Fixed number of pixels in a framebuffer row (C_ROW_STRIDE). description: Fixed number of pixels in a framebuffer row (C_ROW_STRIDE).
xylon,dithering: xylon,dithering:
$ref: "/schemas/types.yaml#/definitions/flag" $ref: /schemas/types.yaml#/definitions/flag
description: Dithering module is enabled (C_XCOLOR) description: Dithering module is enabled (C_XCOLOR)
xylon,background-layer: xylon,background-layer:
$ref: "/schemas/types.yaml#/definitions/flag" $ref: /schemas/types.yaml#/definitions/flag
description: | description: |
The last layer is used to display a black background (C_USE_BACKGROUND). The last layer is used to display a black background (C_USE_BACKGROUND).
The layer must still be registered. The layer must still be registered.
xylon,layers-configurable: xylon,layers-configurable:
$ref: "/schemas/types.yaml#/definitions/flag" $ref: /schemas/types.yaml#/definitions/flag
description: | description: |
Configuration of layers' size, position and offset is enabled Configuration of layers' size, position and offset is enabled
(C_USE_SIZE_POSITION). (C_USE_SIZE_POSITION).
...@@ -131,7 +131,7 @@ properties: ...@@ -131,7 +131,7 @@ properties:
maxItems: 1 maxItems: 1
xylon,layer-depth: xylon,layer-depth:
$ref: "/schemas/types.yaml#/definitions/uint32" $ref: /schemas/types.yaml#/definitions/uint32
description: Layer depth (C_LAYER_X_DATA_WIDTH). description: Layer depth (C_LAYER_X_DATA_WIDTH).
xylon,layer-colorspace: xylon,layer-colorspace:
...@@ -151,19 +151,19 @@ properties: ...@@ -151,19 +151,19 @@ properties:
description: Alpha mode for the layer (C_LAYER_X_ALPHA_MODE). description: Alpha mode for the layer (C_LAYER_X_ALPHA_MODE).
xylon,layer-base-offset: xylon,layer-base-offset:
$ref: "/schemas/types.yaml#/definitions/uint32" $ref: /schemas/types.yaml#/definitions/uint32
description: | description: |
Offset in number of lines (C_LAYER_X_OFFSET) starting from the Offset in number of lines (C_LAYER_X_OFFSET) starting from the
video RAM base (C_VMEM_BASEADDR), only for version 3. video RAM base (C_VMEM_BASEADDR), only for version 3.
xylon,layer-buffer-offset: xylon,layer-buffer-offset:
$ref: "/schemas/types.yaml#/definitions/uint32" $ref: /schemas/types.yaml#/definitions/uint32
description: | description: |
Offset in number of lines (C_BUFFER_*_OFFSET) starting from the Offset in number of lines (C_BUFFER_*_OFFSET) starting from the
layer base offset for the second buffer used in double-buffering. layer base offset for the second buffer used in double-buffering.
xylon,layer-primary: xylon,layer-primary:
$ref: "/schemas/types.yaml#/definitions/flag" $ref: /schemas/types.yaml#/definitions/flag
description: | description: |
Layer should be registered as a primary plane (exactly one is Layer should be registered as a primary plane (exactly one is
required). required).
......
...@@ -19,12 +19,19 @@ properties: ...@@ -19,12 +19,19 @@ properties:
- enum: - enum:
- amlogic,meson-g12a-mali - amlogic,meson-g12a-mali
- mediatek,mt8183-mali - mediatek,mt8183-mali
- mediatek,mt8183b-mali
- mediatek,mt8186-mali
- realtek,rtd1619-mali - realtek,rtd1619-mali
- renesas,r9a07g044-mali - renesas,r9a07g044-mali
- renesas,r9a07g054-mali - renesas,r9a07g054-mali
- rockchip,px30-mali - rockchip,px30-mali
- rockchip,rk3568-mali - rockchip,rk3568-mali
- const: arm,mali-bifrost # Mali Bifrost GPU model/revision is fully discoverable - const: arm,mali-bifrost # Mali Bifrost GPU model/revision is fully discoverable
- items:
- enum:
- mediatek,mt8195-mali
- const: mediatek,mt8192-mali
- const: arm,mali-valhall-jm # Mali Valhall GPU model/revision is fully discoverable
- items: - items:
- enum: - enum:
- mediatek,mt8192-mali - mediatek,mt8192-mali
...@@ -63,7 +70,11 @@ properties: ...@@ -63,7 +70,11 @@ properties:
power-domains: power-domains:
minItems: 1 minItems: 1
maxItems: 3 maxItems: 5
power-domain-names:
minItems: 2
maxItems: 5
resets: resets:
minItems: 1 minItems: 1
...@@ -93,6 +104,13 @@ properties: ...@@ -93,6 +104,13 @@ properties:
dma-coherent: true dma-coherent: true
nvmem-cell-names:
items:
- const: speed-bin
nvmem-cells:
maxItems: 1
required: required:
- compatible - compatible
- reg - reg
...@@ -109,6 +127,10 @@ allOf: ...@@ -109,6 +127,10 @@ allOf:
contains: contains:
const: amlogic,meson-g12a-mali const: amlogic,meson-g12a-mali
then: then:
properties:
power-domains:
maxItems: 1
power-domain-names: false
required: required:
- resets - resets
- if: - if:
...@@ -131,6 +153,9 @@ allOf: ...@@ -131,6 +153,9 @@ allOf:
- const: gpu - const: gpu
- const: bus - const: bus
- const: bus_ace - const: bus_ace
power-domains:
maxItems: 1
power-domain-names: false
resets: resets:
minItems: 3 minItems: 3
reset-names: reset-names:
...@@ -152,6 +177,7 @@ allOf: ...@@ -152,6 +177,7 @@ allOf:
properties: properties:
power-domains: power-domains:
minItems: 3 minItems: 3
maxItems: 3
power-domain-names: power-domain-names:
items: items:
- const: core0 - const: core0
...@@ -164,9 +190,61 @@ allOf: ...@@ -164,9 +190,61 @@ allOf:
- power-domain-names - power-domain-names
else: else:
properties: properties:
power-domains:
maxItems: 1
sram-supply: false sram-supply: false
- if:
properties:
compatible:
contains:
const: mediatek,mt8183b-mali
then:
properties:
power-domains:
minItems: 3
maxItems: 3
power-domain-names:
items:
- const: core0
- const: core1
- const: core2
required:
- power-domains
- power-domain-names
- if:
properties:
compatible:
contains:
const: mediatek,mt8186-mali
then:
properties:
power-domains:
minItems: 2
maxItems: 2
power-domain-names:
items:
- const: core0
- const: core1
required:
- power-domains
- power-domain-names
- if:
properties:
compatible:
contains:
const: mediatek,mt8192-mali
then:
properties:
power-domains:
minItems: 5
power-domain-names:
items:
- const: core0
- const: core1
- const: core2
- const: core3
- const: core4
required:
- power-domains
- power-domain-names
- if: - if:
properties: properties:
compatible: compatible:
...@@ -180,6 +258,9 @@ allOf: ...@@ -180,6 +258,9 @@ allOf:
items: items:
- const: gpu - const: gpu
- const: bus - const: bus
power-domains:
maxItems: 1
power-domain-names: false
required: required:
- clock-names - clock-names
......
...@@ -313,7 +313,7 @@ imx8qxp_pixel_link_find_next_bridge(struct imx8qxp_pixel_link *pl) ...@@ -313,7 +313,7 @@ imx8qxp_pixel_link_find_next_bridge(struct imx8qxp_pixel_link *pl)
} }
/* specially select the next bridge with companion PXL2DPI */ /* specially select the next bridge with companion PXL2DPI */
if (of_find_property(remote, "fsl,companion-pxl2dpi", NULL)) if (of_property_present(remote, "fsl,companion-pxl2dpi"))
bridge_sel = ep_cnt; bridge_sel = ep_cnt;
ep_cnt++; ep_cnt++;
......
...@@ -258,12 +258,12 @@ ...@@ -258,12 +258,12 @@
#define REG_AUD_INFOFRAM_SUM 0xFB #define REG_AUD_INFOFRAM_SUM 0xFB
/* the following six registers are in bank1 */ /* the following six registers are in bank1 */
#define REG_DRV_0_DB_800_MV 0x7E #define REG_DRV_0_DB_800_MV 0x17E
#define REG_PRE_0_DB_800_MV 0x7F #define REG_PRE_0_DB_800_MV 0x17F
#define REG_PRE_3P5_DB_800_MV 0x81 #define REG_PRE_3P5_DB_800_MV 0x181
#define REG_SSC_CTRL0 0x88 #define REG_SSC_CTRL0 0x188
#define REG_SSC_CTRL1 0x89 #define REG_SSC_CTRL1 0x189
#define REG_SSC_CTRL2 0x8A #define REG_SSC_CTRL2 0x18A
#define RBR DP_LINK_BW_1_62 #define RBR DP_LINK_BW_1_62
#define HBR DP_LINK_BW_2_7 #define HBR DP_LINK_BW_2_7
...@@ -489,7 +489,7 @@ static const struct it6505_audio_sample_rate_map audio_sample_rate_map[] = { ...@@ -489,7 +489,7 @@ static const struct it6505_audio_sample_rate_map audio_sample_rate_map[] = {
}; };
static const struct regmap_range it6505_bridge_volatile_ranges[] = { static const struct regmap_range it6505_bridge_volatile_ranges[] = {
{ .range_min = 0, .range_max = 0xFF }, { .range_min = 0, .range_max = 0x1FF },
}; };
static const struct regmap_access_table it6505_bridge_volatile_table = { static const struct regmap_access_table it6505_bridge_volatile_table = {
...@@ -497,11 +497,27 @@ static const struct regmap_access_table it6505_bridge_volatile_table = { ...@@ -497,11 +497,27 @@ static const struct regmap_access_table it6505_bridge_volatile_table = {
.n_yes_ranges = ARRAY_SIZE(it6505_bridge_volatile_ranges), .n_yes_ranges = ARRAY_SIZE(it6505_bridge_volatile_ranges),
}; };
static const struct regmap_range_cfg it6505_regmap_banks[] = {
{
.name = "it6505",
.range_min = 0x00,
.range_max = 0x1FF,
.selector_reg = REG_BANK_SEL,
.selector_mask = 0x1,
.selector_shift = 0,
.window_start = 0x00,
.window_len = 0x100,
},
};
static const struct regmap_config it6505_regmap_config = { static const struct regmap_config it6505_regmap_config = {
.reg_bits = 8, .reg_bits = 8,
.val_bits = 8, .val_bits = 8,
.volatile_table = &it6505_bridge_volatile_table, .volatile_table = &it6505_bridge_volatile_table,
.cache_type = REGCACHE_NONE, .cache_type = REGCACHE_NONE,
.ranges = it6505_regmap_banks,
.num_ranges = ARRAY_SIZE(it6505_regmap_banks),
.max_register = 0x1FF,
}; };
static int it6505_read(struct it6505 *it6505, unsigned int reg_addr) static int it6505_read(struct it6505 *it6505, unsigned int reg_addr)
...@@ -1267,7 +1283,6 @@ static void it6505_init(struct it6505 *it6505) ...@@ -1267,7 +1283,6 @@ static void it6505_init(struct it6505 *it6505)
it6505_write(it6505, REG_TIME_STMP_CTRL, it6505_write(it6505, REG_TIME_STMP_CTRL,
EN_SSC_GAT | EN_ENHANCE_VID_STMP | EN_ENHANCE_AUD_STMP); EN_SSC_GAT | EN_ENHANCE_VID_STMP | EN_ENHANCE_AUD_STMP);
it6505_write(it6505, REG_INFOFRAME_CTRL, 0x00); it6505_write(it6505, REG_INFOFRAME_CTRL, 0x00);
it6505_write(it6505, REG_BANK_SEL, 0x01);
it6505_write(it6505, REG_DRV_0_DB_800_MV, it6505_write(it6505, REG_DRV_0_DB_800_MV,
afe_setting_table[it6505->afe_setting][0]); afe_setting_table[it6505->afe_setting][0]);
it6505_write(it6505, REG_PRE_0_DB_800_MV, it6505_write(it6505, REG_PRE_0_DB_800_MV,
...@@ -1277,7 +1292,6 @@ static void it6505_init(struct it6505 *it6505) ...@@ -1277,7 +1292,6 @@ static void it6505_init(struct it6505 *it6505)
it6505_write(it6505, REG_SSC_CTRL0, 0x9E); it6505_write(it6505, REG_SSC_CTRL0, 0x9E);
it6505_write(it6505, REG_SSC_CTRL1, 0x1C); it6505_write(it6505, REG_SSC_CTRL1, 0x1C);
it6505_write(it6505, REG_SSC_CTRL2, 0x42); it6505_write(it6505, REG_SSC_CTRL2, 0x42);
it6505_write(it6505, REG_BANK_SEL, 0x00);
} }
static void it6505_video_disable(struct it6505 *it6505) static void it6505_video_disable(struct it6505 *it6505)
...@@ -1506,11 +1520,9 @@ static void it6505_setup_ssc(struct it6505 *it6505) ...@@ -1506,11 +1520,9 @@ static void it6505_setup_ssc(struct it6505 *it6505)
it6505_set_bits(it6505, REG_TRAIN_CTRL0, SPREAD_AMP_5, it6505_set_bits(it6505, REG_TRAIN_CTRL0, SPREAD_AMP_5,
it6505->enable_ssc ? SPREAD_AMP_5 : 0x00); it6505->enable_ssc ? SPREAD_AMP_5 : 0x00);
if (it6505->enable_ssc) { if (it6505->enable_ssc) {
it6505_write(it6505, REG_BANK_SEL, 0x01);
it6505_write(it6505, REG_SSC_CTRL0, 0x9E); it6505_write(it6505, REG_SSC_CTRL0, 0x9E);
it6505_write(it6505, REG_SSC_CTRL1, 0x1C); it6505_write(it6505, REG_SSC_CTRL1, 0x1C);
it6505_write(it6505, REG_SSC_CTRL2, 0x42); it6505_write(it6505, REG_SSC_CTRL2, 0x42);
it6505_write(it6505, REG_BANK_SEL, 0x00);
it6505_write(it6505, REG_SP_CTRL0, 0x07); it6505_write(it6505, REG_SP_CTRL0, 0x07);
it6505_write(it6505, REG_IP_CTRL1, 0x29); it6505_write(it6505, REG_IP_CTRL1, 0x29);
it6505_write(it6505, REG_IP_CTRL2, 0x03); it6505_write(it6505, REG_IP_CTRL2, 0x03);
......
...@@ -496,7 +496,7 @@ static int ps8622_probe(struct i2c_client *client) ...@@ -496,7 +496,7 @@ static int ps8622_probe(struct i2c_client *client)
ps8622->lane_count = ps8622->max_lane_count; ps8622->lane_count = ps8622->max_lane_count;
} }
if (!of_find_property(dev->of_node, "use-external-pwm", NULL)) { if (!of_property_read_bool(dev->of_node, "use-external-pwm")) {
ps8622->bl = backlight_device_register("ps8622-backlight", ps8622->bl = backlight_device_register("ps8622-backlight",
dev, ps8622, &ps8622_backlight_ops, dev, ps8622, &ps8622_backlight_ops,
NULL); NULL);
......
...@@ -105,6 +105,7 @@ struct ps8640 { ...@@ -105,6 +105,7 @@ struct ps8640 {
struct gpio_desc *gpio_reset; struct gpio_desc *gpio_reset;
struct gpio_desc *gpio_powerdown; struct gpio_desc *gpio_powerdown;
struct device_link *link; struct device_link *link;
struct edid *edid;
bool pre_enabled; bool pre_enabled;
bool need_post_hpd_delay; bool need_post_hpd_delay;
}; };
...@@ -542,34 +543,44 @@ static struct edid *ps8640_bridge_get_edid(struct drm_bridge *bridge, ...@@ -542,34 +543,44 @@ static struct edid *ps8640_bridge_get_edid(struct drm_bridge *bridge,
struct drm_connector *connector) struct drm_connector *connector)
{ {
struct ps8640 *ps_bridge = bridge_to_ps8640(bridge); struct ps8640 *ps_bridge = bridge_to_ps8640(bridge);
struct device *dev = &ps_bridge->page[PAGE0_DP_CNTL]->dev;
bool poweroff = !ps_bridge->pre_enabled; bool poweroff = !ps_bridge->pre_enabled;
struct edid *edid;
/* if (!ps_bridge->edid) {
* When we end calling get_edid() triggered by an ioctl, i.e /*
* * When we end calling get_edid() triggered by an ioctl, i.e
* drm_mode_getconnector (ioctl) *
* -> drm_helper_probe_single_connector_modes * drm_mode_getconnector (ioctl)
* -> drm_bridge_connector_get_modes * -> drm_helper_probe_single_connector_modes
* -> ps8640_bridge_get_edid * -> drm_bridge_connector_get_modes
* * -> ps8640_bridge_get_edid
* We need to make sure that what we need is enabled before reading *
* EDID, for this chip, we need to do a full poweron, otherwise it will * We need to make sure that what we need is enabled before
* fail. * reading EDID, for this chip, we need to do a full poweron,
*/ * otherwise it will fail.
drm_atomic_bridge_chain_pre_enable(bridge, connector->state->state); */
if (poweroff)
drm_atomic_bridge_chain_pre_enable(bridge,
connector->state->state);
edid = drm_get_edid(connector, ps_bridge->edid = drm_get_edid(connector,
ps_bridge->page[PAGE0_DP_CNTL]->adapter); ps_bridge->page[PAGE0_DP_CNTL]->adapter);
/* /*
* If we call the get_edid() function without having enabled the chip * If we call the get_edid() function without having enabled the
* before, return the chip to its original power state. * chip before, return the chip to its original power state.
*/ */
if (poweroff) if (poweroff)
drm_atomic_bridge_chain_post_disable(bridge, connector->state->state); drm_atomic_bridge_chain_post_disable(bridge,
connector->state->state);
}
if (!ps_bridge->edid) {
dev_err(dev, "Failed to get EDID\n");
return NULL;
}
return edid; return drm_edid_duplicate(ps_bridge->edid);
} }
static void ps8640_runtime_disable(void *data) static void ps8640_runtime_disable(void *data)
...@@ -766,6 +777,13 @@ static int ps8640_probe(struct i2c_client *client) ...@@ -766,6 +777,13 @@ static int ps8640_probe(struct i2c_client *client)
return ret; return ret;
} }
static void ps8640_remove(struct i2c_client *client)
{
struct ps8640 *ps_bridge = i2c_get_clientdata(client);
kfree(ps_bridge->edid);
}
static const struct of_device_id ps8640_match[] = { static const struct of_device_id ps8640_match[] = {
{ .compatible = "parade,ps8640" }, { .compatible = "parade,ps8640" },
{ } { }
...@@ -774,6 +792,7 @@ MODULE_DEVICE_TABLE(of, ps8640_match); ...@@ -774,6 +792,7 @@ MODULE_DEVICE_TABLE(of, ps8640_match);
static struct i2c_driver ps8640_driver = { static struct i2c_driver ps8640_driver = {
.probe_new = ps8640_probe, .probe_new = ps8640_probe,
.remove = ps8640_remove,
.driver = { .driver = {
.name = "ps8640", .name = "ps8640",
.of_match_table = ps8640_match, .of_match_table = ps8640_match,
......
...@@ -329,7 +329,7 @@ int mipi_dsi_host_register(struct mipi_dsi_host *host) ...@@ -329,7 +329,7 @@ int mipi_dsi_host_register(struct mipi_dsi_host *host)
for_each_available_child_of_node(host->dev->of_node, node) { for_each_available_child_of_node(host->dev->of_node, node) {
/* skip nodes without reg property */ /* skip nodes without reg property */
if (!of_find_property(node, "reg", NULL)) if (!of_property_present(node, "reg"))
continue; continue;
of_mipi_dsi_device_add(host, node); of_mipi_dsi_device_add(host, node);
} }
......
...@@ -964,7 +964,7 @@ static void adreno_get_pwrlevels(struct device *dev, ...@@ -964,7 +964,7 @@ static void adreno_get_pwrlevels(struct device *dev,
gpu->fast_rate = 0; gpu->fast_rate = 0;
/* You down with OPP? */ /* You down with OPP? */
if (!of_find_property(dev->of_node, "operating-points-v2", NULL)) if (!of_property_present(dev->of_node, "operating-points-v2"))
ret = adreno_get_legacy_pwrlevels(dev); ret = adreno_get_legacy_pwrlevels(dev);
else { else {
ret = devm_pm_opp_of_add_table(dev); ret = devm_pm_opp_of_add_table(dev);
......
...@@ -1871,6 +1871,7 @@ static const struct edp_panel_entry edp_panels[] = { ...@@ -1871,6 +1871,7 @@ static const struct edp_panel_entry edp_panels[] = {
EDP_PANEL_ENTRY('A', 'U', 'O', 0x1e9b, &delay_200_500_e50, "B133UAN02.1"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x1e9b, &delay_200_500_e50, "B133UAN02.1"),
EDP_PANEL_ENTRY('A', 'U', 'O', 0x1ea5, &delay_200_500_e50, "B116XAK01.6"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x1ea5, &delay_200_500_e50, "B116XAK01.6"),
EDP_PANEL_ENTRY('A', 'U', 'O', 0x405c, &auo_b116xak01.delay, "B116XAK01"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x405c, &auo_b116xak01.delay, "B116XAK01"),
EDP_PANEL_ENTRY('A', 'U', 'O', 0x582d, &delay_200_500_e50, "B133UAN01.0"),
EDP_PANEL_ENTRY('A', 'U', 'O', 0x615c, &delay_200_500_e50, "B116XAN06.1"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x615c, &delay_200_500_e50, "B116XAN06.1"),
EDP_PANEL_ENTRY('A', 'U', 'O', 0x8594, &delay_200_500_e50, "B133UAN01.0"), EDP_PANEL_ENTRY('A', 'U', 'O', 0x8594, &delay_200_500_e50, "B133UAN01.0"),
......
...@@ -418,7 +418,7 @@ static int d53e6ea8966_probe(struct spi_device *spi) ...@@ -418,7 +418,7 @@ static int d53e6ea8966_probe(struct spi_device *spi)
if (IS_ERR(db->dsi_dev)) { if (IS_ERR(db->dsi_dev)) {
dev_err(dev, "failed to register dsi device: %ld\n", dev_err(dev, "failed to register dsi device: %ld\n",
PTR_ERR(db->dsi_dev)); PTR_ERR(db->dsi_dev));
ret = PTR_ERR(db->dsi_dev); return PTR_ERR(db->dsi_dev);
} }
db->dsi_dev->lanes = 2; db->dsi_dev->lanes = 2;
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/devfreq.h> #include <linux/devfreq.h>
#include <linux/devfreq_cooling.h> #include <linux/devfreq_cooling.h>
#include <linux/nvmem-consumer.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/pm_opp.h> #include <linux/pm_opp.h>
...@@ -82,6 +83,31 @@ static struct devfreq_dev_profile panfrost_devfreq_profile = { ...@@ -82,6 +83,31 @@ static struct devfreq_dev_profile panfrost_devfreq_profile = {
.get_dev_status = panfrost_devfreq_get_dev_status, .get_dev_status = panfrost_devfreq_get_dev_status,
}; };
static int panfrost_read_speedbin(struct device *dev)
{
u32 val;
int ret;
ret = nvmem_cell_read_variable_le_u32(dev, "speed-bin", &val);
if (ret) {
/*
* -ENOENT means that this platform doesn't support speedbins
* as it didn't declare any speed-bin nvmem: in this case, we
* keep going without it; any other error means that we are
* supposed to read the bin value, but we failed doing so.
*/
if (ret != -ENOENT) {
DRM_DEV_ERROR(dev, "Cannot read speed-bin (%d).", ret);
return ret;
}
return 0;
}
DRM_DEV_DEBUG(dev, "Using speed-bin = 0x%x\n", val);
return devm_pm_opp_set_supported_hw(dev, &val, 1);
}
int panfrost_devfreq_init(struct panfrost_device *pfdev) int panfrost_devfreq_init(struct panfrost_device *pfdev)
{ {
int ret; int ret;
...@@ -101,6 +127,10 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev) ...@@ -101,6 +127,10 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev)
return 0; return 0;
} }
ret = panfrost_read_speedbin(dev);
if (ret)
return ret;
ret = devm_pm_opp_set_regulators(dev, pfdev->comp->supply_names); ret = devm_pm_opp_set_regulators(dev, pfdev->comp->supply_names);
if (ret) { if (ret) {
/* Continue if the optional regulator is missing */ /* Continue if the optional regulator is missing */
......
...@@ -23,7 +23,7 @@ struct panfrost_job; ...@@ -23,7 +23,7 @@ struct panfrost_job;
struct panfrost_perfcnt; struct panfrost_perfcnt;
#define NUM_JOB_SLOTS 3 #define NUM_JOB_SLOTS 3
#define MAX_PM_DOMAINS 3 #define MAX_PM_DOMAINS 5
struct panfrost_features { struct panfrost_features {
u16 id; u16 id;
......
...@@ -647,6 +647,14 @@ static const struct panfrost_compatible amlogic_data = { ...@@ -647,6 +647,14 @@ static const struct panfrost_compatible amlogic_data = {
.vendor_quirk = panfrost_gpu_amlogic_quirk, .vendor_quirk = panfrost_gpu_amlogic_quirk,
}; };
/*
* The old data with two power supplies for MT8183 is here only to
* keep retro-compatibility with older devicetrees, as DVFS will
* not work with this one.
*
* On new devicetrees please use the _b variant with a single and
* coupled regulators instead.
*/
static const char * const mediatek_mt8183_supplies[] = { "mali", "sram", NULL }; static const char * const mediatek_mt8183_supplies[] = { "mali", "sram", NULL };
static const char * const mediatek_mt8183_pm_domains[] = { "core0", "core1", "core2" }; static const char * const mediatek_mt8183_pm_domains[] = { "core0", "core1", "core2" };
static const struct panfrost_compatible mediatek_mt8183_data = { static const struct panfrost_compatible mediatek_mt8183_data = {
...@@ -656,6 +664,32 @@ static const struct panfrost_compatible mediatek_mt8183_data = { ...@@ -656,6 +664,32 @@ static const struct panfrost_compatible mediatek_mt8183_data = {
.pm_domain_names = mediatek_mt8183_pm_domains, .pm_domain_names = mediatek_mt8183_pm_domains,
}; };
static const char * const mediatek_mt8183_b_supplies[] = { "mali", NULL };
static const struct panfrost_compatible mediatek_mt8183_b_data = {
.num_supplies = ARRAY_SIZE(mediatek_mt8183_b_supplies) - 1,
.supply_names = mediatek_mt8183_b_supplies,
.num_pm_domains = ARRAY_SIZE(mediatek_mt8183_pm_domains),
.pm_domain_names = mediatek_mt8183_pm_domains,
};
static const char * const mediatek_mt8186_pm_domains[] = { "core0", "core1" };
static const struct panfrost_compatible mediatek_mt8186_data = {
.num_supplies = ARRAY_SIZE(mediatek_mt8183_b_supplies) - 1,
.supply_names = mediatek_mt8183_b_supplies,
.num_pm_domains = ARRAY_SIZE(mediatek_mt8186_pm_domains),
.pm_domain_names = mediatek_mt8186_pm_domains,
};
static const char * const mediatek_mt8192_supplies[] = { "mali", NULL };
static const char * const mediatek_mt8192_pm_domains[] = { "core0", "core1", "core2",
"core3", "core4" };
static const struct panfrost_compatible mediatek_mt8192_data = {
.num_supplies = ARRAY_SIZE(mediatek_mt8192_supplies) - 1,
.supply_names = mediatek_mt8192_supplies,
.num_pm_domains = ARRAY_SIZE(mediatek_mt8192_pm_domains),
.pm_domain_names = mediatek_mt8192_pm_domains,
};
static const struct of_device_id dt_match[] = { static const struct of_device_id dt_match[] = {
/* Set first to probe before the generic compatibles */ /* Set first to probe before the generic compatibles */
{ .compatible = "amlogic,meson-gxm-mali", { .compatible = "amlogic,meson-gxm-mali",
...@@ -674,6 +708,9 @@ static const struct of_device_id dt_match[] = { ...@@ -674,6 +708,9 @@ static const struct of_device_id dt_match[] = {
{ .compatible = "arm,mali-bifrost", .data = &default_data, }, { .compatible = "arm,mali-bifrost", .data = &default_data, },
{ .compatible = "arm,mali-valhall-jm", .data = &default_data, }, { .compatible = "arm,mali-valhall-jm", .data = &default_data, },
{ .compatible = "mediatek,mt8183-mali", .data = &mediatek_mt8183_data }, { .compatible = "mediatek,mt8183-mali", .data = &mediatek_mt8183_data },
{ .compatible = "mediatek,mt8183b-mali", .data = &mediatek_mt8183_b_data },
{ .compatible = "mediatek,mt8186-mali", .data = &mediatek_mt8186_data },
{ .compatible = "mediatek,mt8192-mali", .data = &mediatek_mt8192_data },
{} {}
}; };
MODULE_DEVICE_TABLE(of, dt_match); MODULE_DEVICE_TABLE(of, dt_match);
......
...@@ -204,6 +204,14 @@ static const struct panfrost_model gpu_models[] = { ...@@ -204,6 +204,14 @@ static const struct panfrost_model gpu_models[] = {
GPU_MODEL(g57, 0x9001, GPU_MODEL(g57, 0x9001,
GPU_REV(g57, 0, 0)), GPU_REV(g57, 0, 0)),
/* MediaTek MT8192 has a Mali-G57 with a different GPU ID from the
* standard. Arm's driver does not appear to handle this model.
* ChromeOS has a hack downstream for it. Treat it as equivalent to
* standard Mali-G57 for now.
*/
GPU_MODEL(g57, 0x9003,
GPU_REV(g57, 0, 0)),
}; };
static void panfrost_gpu_init_features(struct panfrost_device *pfdev) static void panfrost_gpu_init_features(struct panfrost_device *pfdev)
......
...@@ -722,7 +722,7 @@ EXPORT_SYMBOL(drm_sched_job_add_dependency); ...@@ -722,7 +722,7 @@ EXPORT_SYMBOL(drm_sched_job_add_dependency);
/** /**
* drm_sched_job_add_syncobj_dependency - adds a syncobj's fence as a job dependency * drm_sched_job_add_syncobj_dependency - adds a syncobj's fence as a job dependency
* @job: scheduler job to add the dependencies to * @job: scheduler job to add the dependencies to
* @file_private: drm file private pointer * @file: drm file private pointer
* @handle: syncobj handle to lookup * @handle: syncobj handle to lookup
* @point: timeline point * @point: timeline point
* *
......
...@@ -792,7 +792,7 @@ static int sun4i_backend_bind(struct device *dev, struct device *master, ...@@ -792,7 +792,7 @@ static int sun4i_backend_bind(struct device *dev, struct device *master,
dev_set_drvdata(dev, backend); dev_set_drvdata(dev, backend);
spin_lock_init(&backend->frontend_lock); spin_lock_init(&backend->frontend_lock);
if (of_find_property(dev->of_node, "interconnects", NULL)) { if (of_property_present(dev->of_node, "interconnects")) {
/* /*
* This assume we have the same DMA constraints for all our the * This assume we have the same DMA constraints for all our the
* devices in our pipeline (all the backends, but also the * devices in our pipeline (all the backends, but also the
......
...@@ -391,7 +391,7 @@ static int sun8i_mixer_bind(struct device *dev, struct device *master, ...@@ -391,7 +391,7 @@ static int sun8i_mixer_bind(struct device *dev, struct device *master,
mixer->engine.ops = &sun8i_engine_ops; mixer->engine.ops = &sun8i_engine_ops;
mixer->engine.node = dev->of_node; mixer->engine.node = dev->of_node;
if (of_find_property(dev->of_node, "iommus", NULL)) { if (of_property_present(dev->of_node, "iommus")) {
/* /*
* This assume we have the same DMA constraints for * This assume we have the same DMA constraints for
* all our the mixers in our pipeline. This sounds * all our the mixers in our pipeline. This sounds
......
...@@ -162,13 +162,9 @@ static bool display_get_big_endian_of(struct drm_device *dev, struct device_node ...@@ -162,13 +162,9 @@ static bool display_get_big_endian_of(struct drm_device *dev, struct device_node
bool big_endian; bool big_endian;
#ifdef __BIG_ENDIAN #ifdef __BIG_ENDIAN
big_endian = true; big_endian = !of_property_read_bool(of_node, "little-endian");
if (of_get_property(of_node, "little-endian", NULL))
big_endian = false;
#else #else
big_endian = false; big_endian = of_property_read_bool(of_node, "big-endian");
if (of_get_property(of_node, "big-endian", NULL))
big_endian = true;
#endif #endif
return big_endian; return big_endian;
......
...@@ -204,7 +204,7 @@ simplefb_get_memory_of(struct drm_device *dev, struct device_node *of_node) ...@@ -204,7 +204,7 @@ simplefb_get_memory_of(struct drm_device *dev, struct device_node *of_node)
if (err) if (err)
return ERR_PTR(err); return ERR_PTR(err);
if (of_get_property(of_node, "reg", NULL)) if (of_property_present(of_node, "reg"))
drm_warn(dev, "preferring \"memory-region\" over \"reg\" property\n"); drm_warn(dev, "preferring \"memory-region\" over \"reg\" property\n");
return res; return res;
......
...@@ -3020,7 +3020,7 @@ static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi) ...@@ -3020,7 +3020,7 @@ static int vc4_hdmi_cec_init(struct vc4_hdmi *vc4_hdmi)
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
int ret; int ret;
if (!of_find_property(dev->of_node, "interrupts", NULL)) { if (!of_property_present(dev->of_node, "interrupts")) {
dev_warn(dev, "'interrupts' DT property is missing, no CEC\n"); dev_warn(dev, "'interrupts' DT property is missing, no CEC\n");
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment