drm-misc-next for 5.8:
UAPI Changes: Cross-subsystem Changes: * MAINTAINERS: adapt several filenames to changes in panel code * arch/arm, fbdev: Use GPIO descriptors in sa11x0 * dma-buf: Fix typo in documentation Core Changes: * drm: Don't free framebuffer in drm_gem_fb_init() * drm: Document struct drm_device.dev_private being deprecated * drm: Merged topic/phy-compliance-202004-08 Driver Changes: * drm/adv7511: Add support for HDMI SPDIF and additional sampling rates * drm/ast: Allocate CRTC state of correct size * drm/panel: convert many driver bindings to DT schema; add port/ports property to bindings * drm/rockchip: Convert rk3066 bindings to YAML; spelling fixes * fbdev/arcfb: Call request_irq(), free_irq() at appropriate places * fbdev/controlfb: Support COMPILE_TEST; cleanups * fbdev/imxfb: Fix unbalanced enables/disables * fbdev/s1d13xxxfb: Call unregister_framebuffer() * fbdev/ssd1307fb: Use atomic PWM API, device properties and probe_new(); cleanups * fbdev/vesafb: Call release_region() * cleanups of includes, unused types/variables/fields, and fallthrough -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEchf7rIzpz2NEoWjlaA3BHVMLeiMFAl6hUVoACgkQaA3BHVML eiPYWAf+LXqYmKJjPQBtoXXbT8G1jymvSYbV6QJXGE3zHuAnwdU/Xw0h8kb5i9T/ PV4OS0HUYGWC+74RMAK6nn0Pei9TrUzP8KLegLJcCEKsOcqfGu3qki2FZ0NmnecH E0rdrU1qEV7Ux/ivaALTyem5E+nEAvv0VaDsXv8AL+TbrSsWZIzD29c8vEDM8n1v hVXrH2gUyEtzMMjhuQ4SZ5VlzkohXf1jE3PKx8xE7EcLnY+O4Fvndy/fWGySaRGb m7XgIdGTde+uPUbvo8Y7wekRINU5rMPYAChC72mOF0BxFr5mDCBb1ucmE4cctD9E V31D5hgmoQsk+j97hTJZ+dt108GhwQ== =RBu3 -----END PGP SIGNATURE----- Merge tag 'drm-misc-next-2020-04-23' of git://anongit.freedesktop.org/drm/drm-misc into drm-next drm-misc-next for 5.8: UAPI Changes: Cross-subsystem Changes: * MAINTAINERS: adapt several filenames to changes in panel code * arch/arm, fbdev: Use GPIO descriptors in sa11x0 * dma-buf: Fix typo in documentation Core Changes: * drm: Don't free framebuffer in drm_gem_fb_init() * drm: Document struct drm_device.dev_private being deprecated * drm: Merged topic/phy-compliance-202004-08 Driver Changes: * drm/adv7511: Add support for HDMI SPDIF and additional sampling rates * drm/ast: Allocate CRTC state of correct size * drm/panel: convert many driver bindings to DT schema; add port/ports property to bindings * drm/rockchip: Convert rk3066 bindings to YAML; spelling fixes * fbdev/arcfb: Call request_irq(), free_irq() at appropriate places * fbdev/controlfb: Support COMPILE_TEST; cleanups * fbdev/imxfb: Fix unbalanced enables/disables * fbdev/s1d13xxxfb: Call unregister_framebuffer() * fbdev/ssd1307fb: Use atomic PWM API, device properties and probe_new(); cleanups * fbdev/vesafb: Call release_region() * cleanups of includes, unused types/variables/fields, and fallthrough Signed-off-by: Dave Airlie <airlied@redhat.com> From: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patchwork.freedesktop.org/patch/msgid/20200423083425.GA15883@linux-uq9g
This commit is contained in:
Коммит
126a34061e
|
@ -119,7 +119,7 @@ examples:
|
|||
panel@0 {
|
||||
compatible = "bananapi,lhr050h41", "ilitek,ili9881c";
|
||||
reg = <0>;
|
||||
power-gpios = <&pio 1 7 0>; /* PB07 */
|
||||
power-supply = <®_display>;
|
||||
reset-gpios = <&r_pio 0 5 1>; /* PL05 */
|
||||
backlight = <&pwm_bl>;
|
||||
};
|
||||
|
|
|
@ -28,7 +28,7 @@ description: |
|
|||
|
||||
properties:
|
||||
$nodename:
|
||||
pattern: "^dsi-controller(@.*)?$"
|
||||
pattern: "^dsi(@.*)?$"
|
||||
|
||||
"#address-cells":
|
||||
const: 1
|
||||
|
@ -76,7 +76,7 @@ patternProperties:
|
|||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
dsi-controller@a0351000 {
|
||||
dsi@a0351000 {
|
||||
reg = <0xa0351000 0x1000>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
ARM Versatile TFT Panels
|
||||
|
||||
These panels are connected to the daughterboards found on the
|
||||
ARM Versatile reference designs.
|
||||
|
||||
This device node must appear as a child to a "syscon"-compatible
|
||||
node.
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "arm,versatile-tft-panel"
|
||||
|
||||
Required subnodes:
|
||||
- port: see display/panel/panel-common.yaml, graph.txt
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
sysreg@0 {
|
||||
compatible = "arm,versatile-sysreg", "syscon", "simple-mfd";
|
||||
reg = <0x00000 0x1000>;
|
||||
|
||||
panel: display@0 {
|
||||
compatible = "arm,versatile-tft-panel";
|
||||
|
||||
port {
|
||||
panel_in: endpoint {
|
||||
remote-endpoint = <&foo>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,54 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/arm,versatile-tft-panel.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: ARM Versatile TFT Panels
|
||||
|
||||
maintainers:
|
||||
- Linus Walleij <linus.walleij@linaro.org>
|
||||
|
||||
description: |
|
||||
These panels are connected to the daughterboards found on the
|
||||
ARM Versatile reference designs.
|
||||
|
||||
This device node must appear as a child to a "syscon"-compatible
|
||||
node.
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: arm,versatile-tft-panel
|
||||
|
||||
port: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- port
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
sysreg {
|
||||
compatible = "arm,versatile-sysreg", "syscon", "simple-mfd";
|
||||
reg = <0x00000 0x1000>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel {
|
||||
compatible = "arm,versatile-tft-panel";
|
||||
|
||||
port {
|
||||
panel_in: endpoint {
|
||||
remote-endpoint = <&foo>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,24 +0,0 @@
|
|||
Boe Himax8279d 1200x1920 TFT LCD panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "boe,himax8279d8p" and one of: "boe,himax8279d10p"
|
||||
- reg: DSI virtual channel of the peripheral
|
||||
- enable-gpios: panel enable gpio
|
||||
- pp33-gpios: a GPIO phandle for the 3.3v pin that provides the supply voltage
|
||||
- pp18-gpios: a GPIO phandle for the 1.8v pin that provides the supply voltage
|
||||
|
||||
Optional properties:
|
||||
- backlight: phandle of the backlight device attached to the panel
|
||||
|
||||
Example:
|
||||
|
||||
&mipi_dsi {
|
||||
panel {
|
||||
compatible = "boe,himax8279d8p", "boe,himax8279d10p";
|
||||
reg = <0>;
|
||||
backlight = <&backlight>;
|
||||
enable-gpios = <&gpio 45 GPIO_ACTIVE_HIGH>;
|
||||
pp33-gpios = <&gpio 35 GPIO_ACTIVE_HIGH>;
|
||||
pp18-gpios = <&gpio 36 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
|
@ -0,0 +1,59 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/boe,himax8279d.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Boe Himax8279d 1200x1920 TFT LCD panel
|
||||
|
||||
maintainers:
|
||||
- Jerry Han <jerry.han.hq@gmail.com>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
items:
|
||||
- const: boe,himax8279d8p
|
||||
- const: boe,himax8279d10p
|
||||
|
||||
backlight: true
|
||||
enable-gpios: true
|
||||
reg: true
|
||||
|
||||
pp33-gpios:
|
||||
maxItems: 1
|
||||
description: GPIO for the 3.3v pin that provides the supply voltage
|
||||
|
||||
pp18-gpios:
|
||||
maxItems: 1
|
||||
description: GPIO for the 1.8v pin that provides the supply voltage
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- enable-gpios
|
||||
- pp33-gpios
|
||||
- pp18-gpios
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
dsi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
panel@0 {
|
||||
compatible = "boe,himax8279d8p", "boe,himax8279d10p";
|
||||
reg = <0>;
|
||||
backlight = <&backlight>;
|
||||
enable-gpios = <&gpio 45 GPIO_ACTIVE_HIGH>;
|
||||
pp33-gpios = <&gpio 35 GPIO_ACTIVE_HIGH>;
|
||||
pp18-gpios = <&gpio 36 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,49 +0,0 @@
|
|||
Ilitek ILI9322 TFT panel driver with SPI control bus
|
||||
|
||||
This is a driver for 320x240 TFT panels, accepting a variety of input
|
||||
streams that get adapted and scaled to the panel. The panel output has
|
||||
960 TFT source driver pins and 240 TFT gate driver pins, VCOM, VCOML and
|
||||
VCOMH outputs.
|
||||
|
||||
Required properties:
|
||||
- compatible: "dlink,dir-685-panel", "ilitek,ili9322"
|
||||
(full system-specific compatible is always required to look up configuration)
|
||||
- reg: address of the panel on the SPI bus
|
||||
|
||||
Optional properties:
|
||||
- vcc-supply: core voltage supply, see regulator/regulator.txt
|
||||
- iovcc-supply: voltage supply for the interface input/output signals,
|
||||
see regulator/regulator.txt
|
||||
- vci-supply: voltage supply for analog parts, see regulator/regulator.txt
|
||||
- reset-gpios: a GPIO spec for the reset pin, see gpio/gpio.txt
|
||||
|
||||
The following optional properties only apply to RGB and YUV input modes and
|
||||
can be omitted for BT.656 input modes:
|
||||
|
||||
- pixelclk-active: see display/panel/display-timing.txt
|
||||
- de-active: see display/panel/display-timing.txt
|
||||
- hsync-active: see display/panel/display-timing.txt
|
||||
- vsync-active: see display/panel/display-timing.txt
|
||||
|
||||
The panel must obey the rules for a SPI slave device as specified in
|
||||
spi/spi-bus.txt
|
||||
|
||||
The device node can contain one 'port' child node with one child
|
||||
'endpoint' node, according to the bindings defined in
|
||||
media/video-interfaces.txt. This node should describe panel's video bus.
|
||||
|
||||
Example:
|
||||
|
||||
panel: display@0 {
|
||||
compatible = "dlink,dir-685-panel", "ilitek,ili9322";
|
||||
reg = <0>;
|
||||
vcc-supply = <&vdisp>;
|
||||
iovcc-supply = <&vdisp>;
|
||||
vci-supply = <&vdisp>;
|
||||
|
||||
port {
|
||||
panel_in: endpoint {
|
||||
remote-endpoint = <&display_out>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,71 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/ilitek,ili9322.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Ilitek ILI9322 TFT panel driver with SPI control bus
|
||||
|
||||
maintainers:
|
||||
- Linus Walleij <linus.walleij@linaro.org>
|
||||
|
||||
description: |
|
||||
This is a driver for 320x240 TFT panels, accepting a variety of input
|
||||
streams that get adapted and scaled to the panel. The panel output has
|
||||
960 TFT source driver pins and 240 TFT gate driver pins, VCOM, VCOML and
|
||||
VCOMH outputs.
|
||||
|
||||
The panel must obey the rules for a SPI slave device as specified in
|
||||
spi/spi-controller.yaml
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
items:
|
||||
- enum:
|
||||
- dlink,dir-685-panel
|
||||
|
||||
- const: ilitek,ili9322
|
||||
|
||||
reset-gpios: true
|
||||
port: true
|
||||
|
||||
vcc-supply:
|
||||
description: Core voltage supply
|
||||
|
||||
iovcc-supply:
|
||||
description: Voltage supply for the interface input/output signals
|
||||
|
||||
vci-supply:
|
||||
description: Voltage supply for analog parts
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
spi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel: display@0 {
|
||||
compatible = "dlink,dir-685-panel", "ilitek,ili9322";
|
||||
reg = <0>;
|
||||
vcc-supply = <&vdisp>;
|
||||
iovcc-supply = <&vdisp>;
|
||||
vci-supply = <&vdisp>;
|
||||
|
||||
port {
|
||||
panel_in: endpoint {
|
||||
remote-endpoint = <&display_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,20 +0,0 @@
|
|||
Ilitek ILI9881c based MIPI-DSI panels
|
||||
|
||||
Required properties:
|
||||
- compatible: must be "ilitek,ili9881c" and one of:
|
||||
* "bananapi,lhr050h41"
|
||||
- reg: DSI virtual channel used by that screen
|
||||
- power-supply: phandle to the power regulator
|
||||
- reset-gpios: a GPIO phandle for the reset pin
|
||||
|
||||
Optional properties:
|
||||
- backlight: phandle to the backlight used
|
||||
|
||||
Example:
|
||||
panel@0 {
|
||||
compatible = "bananapi,lhr050h41", "ilitek,ili9881c";
|
||||
reg = <0>;
|
||||
power-supply = <®_display>;
|
||||
reset-gpios = <&r_pio 0 5 GPIO_ACTIVE_LOW>; /* PL05 */
|
||||
backlight = <&pwm_bl>;
|
||||
};
|
|
@ -0,0 +1,50 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/ilitek,ili9881c.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Ilitek ILI9881c based MIPI-DSI panels
|
||||
|
||||
maintainers:
|
||||
- Maxime Ripard <mripard@kernel.org>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
items:
|
||||
- enum:
|
||||
- bananapi,lhr050h41
|
||||
|
||||
- const: ilitek,ili9881c
|
||||
|
||||
backlight: true
|
||||
power-supply: true
|
||||
reg: true
|
||||
reset-gpios: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- power-supply
|
||||
- reg
|
||||
- reset-gpios
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
dsi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel@0 {
|
||||
compatible = "bananapi,lhr050h41", "ilitek,ili9881c";
|
||||
reg = <0>;
|
||||
power-supply = <®_display>;
|
||||
reset-gpios = <&r_pio 0 5 GPIO_ACTIVE_LOW>; /* PL05 */
|
||||
backlight = <&pwm_bl>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,24 +0,0 @@
|
|||
Innolux P097PFG 9.7" 1536x2048 TFT LCD panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "innolux,p097pfg"
|
||||
- reg: DSI virtual channel of the peripheral
|
||||
- avdd-supply: phandle of the regulator that provides positive voltage
|
||||
- avee-supply: phandle of the regulator that provides negative voltage
|
||||
- enable-gpios: panel enable gpio
|
||||
|
||||
Optional properties:
|
||||
- backlight: phandle of the backlight device attached to the panel
|
||||
|
||||
Example:
|
||||
|
||||
&mipi_dsi {
|
||||
panel@0 {
|
||||
compatible = "innolux,p079zca";
|
||||
reg = <0>;
|
||||
avdd-supply = <...>;
|
||||
avee-supply = <...>;
|
||||
backlight = <&backlight>;
|
||||
enable-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
|
@ -0,0 +1,56 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/innolux,p097pfg.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Innolux P097PFG 9.7" 1536x2048 TFT LCD panel
|
||||
|
||||
maintainers:
|
||||
- Lin Huang <hl@rock-chips.com>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: innolux,p097pfg
|
||||
|
||||
backlight: true
|
||||
enable-gpios: true
|
||||
reg: true
|
||||
|
||||
avdd-supply:
|
||||
description: The regulator that provides positive voltage
|
||||
|
||||
avee-supply:
|
||||
description: The regulator that provides negative voltage
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- avdd-supply
|
||||
- avee-supply
|
||||
- enable-gpios
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
dsi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel@0 {
|
||||
compatible = "innolux,p097pfg";
|
||||
reg = <0>;
|
||||
avdd-supply = <&avdd>;
|
||||
avee-supply = <&avee>;
|
||||
backlight = <&backlight>;
|
||||
enable-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,22 +0,0 @@
|
|||
Innolux P120ZDG-BF1 12.02 inch eDP 2K display panel
|
||||
|
||||
This binding is compatible with the simple-panel binding, which is specified
|
||||
in simple-panel.txt in this directory.
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "innolux,p120zdg-bf1"
|
||||
- power-supply: regulator to provide the supply voltage
|
||||
|
||||
Optional properties:
|
||||
- enable-gpios: GPIO pin to enable or disable the panel
|
||||
- backlight: phandle of the backlight device attached to the panel
|
||||
- no-hpd: If HPD isn't hooked up; add this property.
|
||||
|
||||
Example:
|
||||
panel_edp: panel-edp {
|
||||
compatible = "innolux,p120zdg-bf1";
|
||||
enable-gpios = <&msmgpio 31 GPIO_ACTIVE_LOW>;
|
||||
power-supply = <&pm8916_l2>;
|
||||
backlight = <&backlight>;
|
||||
no-hpd;
|
||||
};
|
|
@ -0,0 +1,43 @@
|
|||
# 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;
|
||||
};
|
||||
|
||||
...
|
|
@ -1,31 +0,0 @@
|
|||
JDI model LT070ME05000 1200x1920 7" DSI Panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "jdi,lt070me05000"
|
||||
- vddp-supply: phandle of the regulator that provides the supply voltage
|
||||
Power IC supply (3-5V)
|
||||
- iovcc-supply: phandle of the regulator that provides the supply voltage
|
||||
IOVCC , power supply for LCM (1.8V)
|
||||
- enable-gpios: phandle of gpio for enable line
|
||||
LED_EN, LED backlight enable, High active
|
||||
- reset-gpios: phandle of gpio for reset line
|
||||
This should be 8mA, gpio can be configured using mux, pinctrl, pinctrl-names
|
||||
XRES, Reset, Low active
|
||||
- dcdc-en-gpios: phandle of the gpio for power ic line
|
||||
Power IC supply enable, High active
|
||||
|
||||
Example:
|
||||
|
||||
dsi0: qcom,mdss_dsi@4700000 {
|
||||
panel@0 {
|
||||
compatible = "jdi,lt070me05000";
|
||||
reg = <0>;
|
||||
|
||||
vddp-supply = <&pm8921_l17>;
|
||||
iovcc-supply = <&pm8921_lvs7>;
|
||||
|
||||
enable-gpios = <&pm8921_gpio 36 GPIO_ACTIVE_HIGH>;
|
||||
reset-gpios = <&tlmm_pinmux 54 GPIO_ACTIVE_LOW>;
|
||||
dcdc-en-gpios = <&pm8921_gpio 23 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
|
@ -0,0 +1,69 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/jdi,lt070me05000.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: JDI model LT070ME05000 1200x1920 7" DSI Panel
|
||||
|
||||
maintainers:
|
||||
- Vinay Simha BN <simhavcs@gmail.com>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: jdi,lt070me05000
|
||||
|
||||
enable-gpios: true
|
||||
reg: true
|
||||
reset-gpios: true
|
||||
|
||||
vddp-supply:
|
||||
description: |
|
||||
The regulator that provides the supply voltage Power IC supply (3-5V)
|
||||
|
||||
iovcc-supply:
|
||||
description: |
|
||||
The regulator that provides the supply voltage IOVCC,
|
||||
power supply for LCM (1.8V)
|
||||
|
||||
dcdc-en-gpios:
|
||||
description: |
|
||||
phandle of the gpio for power ic line
|
||||
Power IC supply enable, High active
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- vddp-supply
|
||||
- iovcc-supply
|
||||
- enable-gpios
|
||||
- reset-gpios
|
||||
- dcdc-en-gpios
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
dsi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel@0 {
|
||||
compatible = "jdi,lt070me05000";
|
||||
reg = <0>;
|
||||
|
||||
vddp-supply = <&pm8921_l17>;
|
||||
iovcc-supply = <&pm8921_lvs7>;
|
||||
|
||||
enable-gpios = <&pm8921_gpio 36 GPIO_ACTIVE_HIGH>;
|
||||
reset-gpios = <&tlmm_pinmux 54 GPIO_ACTIVE_LOW>;
|
||||
dcdc-en-gpios = <&pm8921_gpio 23 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,42 +0,0 @@
|
|||
King Display KD035G6-54NT 3.5" (320x240 pixels) 24-bit TFT LCD panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "kingdisplay,kd035g6-54nt"
|
||||
- power-supply: See panel-common.txt
|
||||
- reset-gpios: See panel-common.txt
|
||||
|
||||
Optional properties:
|
||||
- backlight: see panel-common.txt
|
||||
|
||||
The generic bindings for the SPI slaves documented in [1] also apply.
|
||||
|
||||
The device node can contain one 'port' child node with one child
|
||||
'endpoint' node, according to the bindings defined in [2]. This
|
||||
node should describe panel's video bus.
|
||||
|
||||
[1]: Documentation/devicetree/bindings/spi/spi-bus.txt
|
||||
[2]: Documentation/devicetree/bindings/graph.txt
|
||||
|
||||
Example:
|
||||
|
||||
&spi {
|
||||
panel@0 {
|
||||
compatible = "kingdisplay,kd035g6-54nt";
|
||||
reg = <0>;
|
||||
|
||||
spi-max-frequency = <3125000>;
|
||||
spi-3wire;
|
||||
spi-cs-high;
|
||||
|
||||
reset-gpios = <&gpe 2 GPIO_ACTIVE_LOW>;
|
||||
|
||||
backlight = <&backlight>;
|
||||
power-supply = <&ldo6>;
|
||||
|
||||
port {
|
||||
panel_input: endpoint {
|
||||
remote-endpoint = <&panel_output>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,65 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/kingdisplay,kd035g6-54nt.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: King Display KD035G6-54NT 3.5" (320x240 pixels) 24-bit TFT LCD panel
|
||||
|
||||
description: |
|
||||
The panel must obey the rules for a SPI slave device as specified in
|
||||
spi/spi-controller.yaml
|
||||
|
||||
maintainers:
|
||||
- Paul Cercueil <paul@crapouillou.net>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: kingdisplay,kd035g6-54nt
|
||||
|
||||
backlight: true
|
||||
port: true
|
||||
power-supply: true
|
||||
reg: true
|
||||
reset-gpios: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- power-supply
|
||||
- reset-gpios
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
spi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel@0 {
|
||||
compatible = "kingdisplay,kd035g6-54nt";
|
||||
reg = <0>;
|
||||
|
||||
spi-max-frequency = <3125000>;
|
||||
spi-3wire;
|
||||
spi-cs-high;
|
||||
|
||||
reset-gpios = <&gpe 2 GPIO_ACTIVE_LOW>;
|
||||
|
||||
backlight = <&backlight>;
|
||||
power-supply = <&ldo6>;
|
||||
|
||||
port {
|
||||
panel_input: endpoint {
|
||||
remote-endpoint = <&panel_output>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,22 +0,0 @@
|
|||
Kingdisplay KD097D04 9.7" 1536x2048 TFT LCD panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "kingdisplay,kd097d04"
|
||||
- reg: DSI virtual channel of the peripheral
|
||||
- power-supply: phandle of the regulator that provides the supply voltage
|
||||
- enable-gpios: panel enable gpio
|
||||
|
||||
Optional properties:
|
||||
- backlight: phandle of the backlight device attached to the panel
|
||||
|
||||
Example:
|
||||
|
||||
&mipi_dsi {
|
||||
panel@0 {
|
||||
compatible = "kingdisplay,kd097d04";
|
||||
reg = <0>;
|
||||
power-supply = <...>;
|
||||
backlight = <&backlight>;
|
||||
enable-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
|
@ -1,7 +0,0 @@
|
|||
LG ACX467AKM-7 4.95" 1080×1920 LCD Panel
|
||||
|
||||
Required properties:
|
||||
- compatible: must be "lg,acx467akm-7"
|
||||
|
||||
This binding is compatible with the simple-panel binding, which is specified
|
||||
in simple-panel.txt in this directory.
|
|
@ -1,7 +0,0 @@
|
|||
LG Corporation 7" WXGA TFT LCD panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "lg,ld070wx3-sl01"
|
||||
|
||||
This binding is compatible with the simple-panel binding, which is specified
|
||||
in simple-panel.txt in this directory.
|
|
@ -1,19 +0,0 @@
|
|||
LG LG4573 TFT Liquid Crystal Display with SPI control bus
|
||||
|
||||
Required properties:
|
||||
- compatible: "lg,lg4573"
|
||||
- reg: address of the panel on the SPI bus
|
||||
|
||||
The panel must obey rules for SPI slave device specified in document [1].
|
||||
|
||||
[1]: Documentation/devicetree/bindings/spi/spi-bus.txt
|
||||
|
||||
Example:
|
||||
|
||||
lcd_panel: display@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "lg,lg4573";
|
||||
spi-max-frequency = <10000000>;
|
||||
reg = <0>;
|
||||
};
|
|
@ -0,0 +1,45 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/lg,lg4573.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: LG LG4573 TFT Liquid Crystal Display with SPI control bus
|
||||
|
||||
description: |
|
||||
The panel must obey the rules for a SPI slave device as specified in
|
||||
spi/spi-controller.yaml
|
||||
|
||||
maintainers:
|
||||
- Heiko Schocher <hs@denx.de>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: lg,lg4573
|
||||
|
||||
reg: true
|
||||
spi-max-frequency: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
spi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
lcd_panel: display@0 {
|
||||
compatible = "lg,lg4573";
|
||||
spi-max-frequency = <10000000>;
|
||||
reg = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,7 +0,0 @@
|
|||
LG Corporation 5" HD TFT LCD panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "lg,lh500wx1-sd03"
|
||||
|
||||
This binding is compatible with the simple-panel binding, which is specified
|
||||
in simple-panel.txt in this directory.
|
|
@ -1,33 +0,0 @@
|
|||
LG.Philips LB035Q02 Panel
|
||||
=========================
|
||||
|
||||
Required properties:
|
||||
- compatible: "lgphilips,lb035q02"
|
||||
- enable-gpios: panel enable gpio
|
||||
|
||||
Optional properties:
|
||||
- label: a symbolic name for the panel
|
||||
|
||||
Required nodes:
|
||||
- Video port for DPI input
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
lcd-panel: panel@0 {
|
||||
compatible = "lgphilips,lb035q02";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <100000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
|
||||
label = "lcd";
|
||||
|
||||
enable-gpios = <&gpio7 7 0>;
|
||||
|
||||
port {
|
||||
lcd_in: endpoint {
|
||||
remote-endpoint = <&dpi_out>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,59 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/lgphilips,lb035q02.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: LG.Philips LB035Q02 Panel
|
||||
|
||||
description: |
|
||||
The panel must obey the rules for a SPI slave device as specified in
|
||||
spi/spi-controller.yaml
|
||||
|
||||
maintainers:
|
||||
- Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: lgphilips,lb035q02
|
||||
|
||||
label: true
|
||||
enable-gpios: true
|
||||
port: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- enable-gpios
|
||||
- port
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
spi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel: panel@0 {
|
||||
compatible = "lgphilips,lb035q02";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <100000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
|
||||
label = "lcd";
|
||||
|
||||
enable-gpios = <&gpio7 7 0>;
|
||||
|
||||
port {
|
||||
lcd_in: endpoint {
|
||||
remote-endpoint = <&dpi_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -96,12 +96,20 @@ properties:
|
|||
If set, reverse the bit order described in the data mappings below on all
|
||||
data lanes, transmitting bits for slots 6 to 0 instead of 0 to 6.
|
||||
|
||||
port: true
|
||||
ports: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- data-mapping
|
||||
- width-mm
|
||||
- height-mm
|
||||
- panel-timing
|
||||
- port
|
||||
|
||||
oneOf:
|
||||
- required:
|
||||
- port
|
||||
- required:
|
||||
- ports
|
||||
|
||||
...
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
Binding for Olimex Ltd. LCD-OLinuXino bridge panel.
|
||||
|
||||
This device can be used as bridge between a host controller and LCD panels.
|
||||
Currently supported LCDs are:
|
||||
- LCD-OLinuXino-4.3TS
|
||||
- LCD-OLinuXino-5
|
||||
- LCD-OLinuXino-7
|
||||
- LCD-OLinuXino-10
|
||||
|
||||
The panel itself contains:
|
||||
- AT24C16C EEPROM holding panel identification and timing requirements
|
||||
- AR1021 resistive touch screen controller (optional)
|
||||
- FT5x6 capacitive touch screnn controller (optional)
|
||||
- GT911/GT928 capacitive touch screen controller (optional)
|
||||
|
||||
The above chips share same I2C bus. The EEPROM is factory preprogrammed with
|
||||
device information (id, serial, etc.) and timing requirements.
|
||||
|
||||
Touchscreen bingings can be found in these files:
|
||||
- input/touchscreen/goodix.txt
|
||||
- input/touchscreen/edt-ft5x06.txt
|
||||
- input/touchscreen/ar1021.txt
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "olimex,lcd-olinuxino"
|
||||
- reg: address of the configuration EEPROM, should be <0x50>
|
||||
- power-supply: phandle of the regulator that provides the supply voltage
|
||||
|
||||
Optional properties:
|
||||
- enable-gpios: GPIO pin to enable or disable the panel
|
||||
- backlight: phandle of the backlight device attacked to the panel
|
||||
|
||||
Example:
|
||||
&i2c2 {
|
||||
panel@50 {
|
||||
compatible = "olimex,lcd-olinuxino";
|
||||
reg = <0x50>;
|
||||
power-supply = <®_vcc5v0>;
|
||||
enable-gpios = <&pio 7 8 GPIO_ACTIVE_HIGH>;
|
||||
backlight = <&backlight>;
|
||||
};
|
||||
};
|
|
@ -0,0 +1,70 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/olimex,lcd-olinuxino.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Binding for Olimex Ltd. LCD-OLinuXino bridge panel.
|
||||
|
||||
maintainers:
|
||||
- Stefan Mavrodiev <stefan@olimex.com>
|
||||
|
||||
description: |
|
||||
This device can be used as bridge between a host controller and LCD panels.
|
||||
Currently supported LCDs are:
|
||||
- LCD-OLinuXino-4.3TS
|
||||
- LCD-OLinuXino-5
|
||||
- LCD-OLinuXino-7
|
||||
- LCD-OLinuXino-10
|
||||
|
||||
The panel itself contains:
|
||||
- AT24C16C EEPROM holding panel identification and timing requirements
|
||||
- AR1021 resistive touch screen controller (optional)
|
||||
- FT5x6 capacitive touch screnn controller (optional)
|
||||
- GT911/GT928 capacitive touch screen controller (optional)
|
||||
|
||||
The above chips share same I2C bus. The EEPROM is factory preprogrammed with
|
||||
device information (id, serial, etc.) and timing requirements.
|
||||
|
||||
Touchscreen bingings can be found in these files:
|
||||
- input/touchscreen/goodix.yaml
|
||||
- input/touchscreen/edt-ft5x06.txt
|
||||
- input/touchscreen/ar1021.txt
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: olimex,lcd-olinuxino
|
||||
|
||||
backlight: true
|
||||
enable-gpios: true
|
||||
power-supply: true
|
||||
reg: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- power-supply
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel@50 {
|
||||
compatible = "olimex,lcd-olinuxino";
|
||||
reg = <0x50>;
|
||||
power-supply = <®_vcc5v0>;
|
||||
enable-gpios = <&pio 7 8 GPIO_ACTIVE_HIGH>;
|
||||
backlight = <&backlight>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,14 +0,0 @@
|
|||
One Stop Displays OSD101T2587-53TS 10.1" 1920x1200 panel
|
||||
|
||||
The panel is similar to OSD101T2045-53TS, but it needs additional
|
||||
MIPI_DSI_TURN_ON_PERIPHERAL message from the host.
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "osddisplays,osd101t2587-53ts"
|
||||
- power-supply: as specified in the base binding
|
||||
|
||||
Optional properties:
|
||||
- backlight: as specified in the base binding
|
||||
|
||||
This binding is compatible with the simple-panel binding, which is specified
|
||||
in simple-panel.txt in this directory.
|
|
@ -124,6 +124,13 @@ properties:
|
|||
while active. Active high reset signals can be supported by inverting the
|
||||
GPIO specifier polarity flag.
|
||||
|
||||
te-gpios:
|
||||
maxItems: 1
|
||||
description:
|
||||
GPIO spec for the tearing effect synchronization signal.
|
||||
The tearing effect signal is active high. Active low signals can be
|
||||
supported by inverting the GPIO specifier polarity flag.
|
||||
|
||||
# Power
|
||||
power-supply:
|
||||
description:
|
||||
|
|
|
@ -29,6 +29,18 @@ properties:
|
|||
# compatible must be listed in alphabetical order, ordered by compatible.
|
||||
# The description in the comment is mandatory for each compatible.
|
||||
|
||||
# AU Optronics Corporation 8.0" WUXGA TFT LCD panel
|
||||
- auo,b080uan01
|
||||
# Boe Corporation 8.0" WUXGA TFT LCD panel
|
||||
- boe,tv080wum-nl0
|
||||
# Kingdisplay KD097D04 9.7" 1536x2048 TFT LCD panel
|
||||
- kingdisplay,kd097d04
|
||||
# LG ACX467AKM-7 4.95" 1080×1920 LCD Panel
|
||||
- lg,acx467akm-7
|
||||
# LG Corporation 7" WXGA TFT LCD panel
|
||||
- lg,ld070wx3-sl01
|
||||
# One Stop Displays OSD101T2587-53TS 10.1" 1920x1200 panel
|
||||
- osddisplays,osd101t2587-53ts
|
||||
# Panasonic 10" WUXGA TFT LCD panel
|
||||
- panasonic,vvx10f034n00
|
||||
|
||||
|
|
|
@ -33,8 +33,6 @@ properties:
|
|||
- ampire,am-480272h3tmqw-t01h
|
||||
# Ampire AM-800480R3TMQW-A1H 7.0" WVGA TFT LCD panel
|
||||
- ampire,am800480r3tmqwa1h
|
||||
# AU Optronics Corporation 8.0" WUXGA TFT LCD panel
|
||||
- auo,b080uan01
|
||||
# AU Optronics Corporation 10.1" WSVGA TFT LCD panel
|
||||
- auo,b101aw03
|
||||
# AU Optronics Corporation 10.1" WSVGA TFT LCD panel
|
||||
|
@ -71,8 +69,6 @@ properties:
|
|||
- boe,nv101wxmn51
|
||||
# BOE NV140FHM-N49 14.0" FHD a-Si FT panel
|
||||
- boe,nv140fhmn49
|
||||
# Boe Corporation 8.0" WUXGA TFT LCD panel
|
||||
- boe,tv080wum-nl0
|
||||
# CDTech(H.K.) Electronics Limited 4.3" 480x272 color TFT-LCD panel
|
||||
- cdtech,s043wq26h-ct7
|
||||
# CDTech(H.K.) Electronics Limited 7" 800x480 color TFT-LCD panel
|
||||
|
@ -155,6 +151,8 @@ properties:
|
|||
- lemaker,bl035-rgb-002
|
||||
# LG 7" (800x480 pixels) TFT LCD panel
|
||||
- lg,lb070wv8
|
||||
# LG Corporation 5" HD TFT LCD panel
|
||||
- lg,lh500wx1-sd03
|
||||
# LG LP079QX1-SP0V 7.9" (1536x2048 pixels) TFT LCD panel
|
||||
- lg,lp079qx1-sp0v
|
||||
# LG 9.7" (2048x1536 pixels) TFT LCD panel
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
Raydium RM67171 OLED LCD panel with MIPI-DSI protocol
|
||||
|
||||
Required properties:
|
||||
- compatible: "raydium,rm67191"
|
||||
- reg: virtual channel for MIPI-DSI protocol
|
||||
must be <0>
|
||||
- dsi-lanes: number of DSI lanes to be used
|
||||
must be <3> or <4>
|
||||
- port: input port node with endpoint definition as
|
||||
defined in Documentation/devicetree/bindings/graph.txt;
|
||||
the input port should be connected to a MIPI-DSI device
|
||||
driver
|
||||
|
||||
Optional properties:
|
||||
- reset-gpios: a GPIO spec for the RST_B GPIO pin
|
||||
- v3p3-supply: phandle to 3.3V regulator that powers the VDD_3V3 pin
|
||||
- v1p8-supply: phandle to 1.8V regulator that powers the VDD_1V8 pin
|
||||
- width-mm: see panel-common.txt
|
||||
- height-mm: see panel-common.txt
|
||||
- video-mode: 0 - burst-mode
|
||||
1 - non-burst with sync event
|
||||
2 - non-burst with sync pulse
|
||||
|
||||
Example:
|
||||
|
||||
panel@0 {
|
||||
compatible = "raydium,rm67191";
|
||||
reg = <0>;
|
||||
pinctrl-0 = <&pinctrl_mipi_dsi_0_1_en>;
|
||||
pinctrl-names = "default";
|
||||
reset-gpios = <&gpio1 7 GPIO_ACTIVE_LOW>;
|
||||
dsi-lanes = <4>;
|
||||
width-mm = <68>;
|
||||
height-mm = <121>;
|
||||
|
||||
port {
|
||||
panel_in: endpoint {
|
||||
remote-endpoint = <&mipi_out>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,75 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/raydium,rm67191.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Raydium RM67171 OLED LCD panel with MIPI-DSI protocol
|
||||
|
||||
maintainers:
|
||||
- Robert Chiras <robert.chiras@nxp.com>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: raydium,rm67191
|
||||
|
||||
reg: true
|
||||
port: true
|
||||
reset-gpios: true
|
||||
width-mm: true
|
||||
height-mm: true
|
||||
|
||||
dsi-lanes:
|
||||
description: Number of DSI lanes to be used must be <3> or <4>
|
||||
enum: [3, 4]
|
||||
|
||||
v3p3-supply:
|
||||
description: phandle to 3.3V regulator that powers the VDD_3V3 pin
|
||||
|
||||
v1p8-supply:
|
||||
description: phandle to 1.8V regulator that powers the VDD_1V8 pin
|
||||
|
||||
video-mode:
|
||||
description: |
|
||||
0 - burst-mode
|
||||
1 - non-burst with sync event
|
||||
2 - non-burst with sync pulse
|
||||
enum: [0, 1, 2]
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- dsi-lanes
|
||||
- port
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
dsi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel@0 {
|
||||
compatible = "raydium,rm67191";
|
||||
reg = <0>;
|
||||
reset-gpios = <&gpio1 7 GPIO_ACTIVE_LOW>;
|
||||
dsi-lanes = <4>;
|
||||
width-mm = <68>;
|
||||
height-mm = <121>;
|
||||
video-mode = <1>;
|
||||
|
||||
port {
|
||||
panel_in: endpoint {
|
||||
remote-endpoint = <&mipi_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -0,0 +1,65 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/samsung,amoled-mipi-dsi.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Samsung AMOLED MIPI-DSI panels
|
||||
|
||||
maintainers:
|
||||
- Hoegeun Kwon <hoegeun.kwon@samsung.com>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
# Samsung S6E63J0X03 1.63" 320x320 AMOLED panel
|
||||
- samsung,s6e63j0x03
|
||||
# Samsung S6E3HA2 5.7" 1440x2560 AMOLED panel
|
||||
- samsung,s6e3ha2
|
||||
# Samsung S6E3HF2 5.65" 1600x2560 AMOLED panel
|
||||
- samsung,s6e3hf2
|
||||
|
||||
reg: true
|
||||
reset-gpios: true
|
||||
enable-gpios: true
|
||||
te-gpios: true
|
||||
|
||||
vdd3-supply:
|
||||
description: I/O voltage supply
|
||||
|
||||
vci-supply:
|
||||
description: voltage supply for analog circuits
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- vdd3-supply
|
||||
- vci-supply
|
||||
- reset-gpios
|
||||
- enable-gpios
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
dsi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel@0 {
|
||||
compatible = "samsung,s6e3ha2";
|
||||
reg = <0>;
|
||||
vdd3-supply = <&ldo27_reg>;
|
||||
vci-supply = <&ldo28_reg>;
|
||||
reset-gpios = <&gpg0 0 GPIO_ACTIVE_LOW>;
|
||||
enable-gpios = <&gpf1 5 GPIO_ACTIVE_HIGH>;
|
||||
te-gpios = <&gpf1 3 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,66 +0,0 @@
|
|||
Samsung LD9040 AMOLED LCD parallel RGB panel with SPI control bus
|
||||
|
||||
Required properties:
|
||||
- compatible: "samsung,ld9040"
|
||||
- reg: address of the panel on SPI bus
|
||||
- vdd3-supply: core voltage supply
|
||||
- vci-supply: voltage supply for analog circuits
|
||||
- reset-gpios: a GPIO spec for the reset pin
|
||||
- display-timings: timings for the connected panel according to [1]
|
||||
|
||||
The panel must obey rules for SPI slave device specified in document [2].
|
||||
|
||||
Optional properties:
|
||||
- power-on-delay: delay after turning regulators on [ms]
|
||||
- reset-delay: delay after reset sequence [ms]
|
||||
- panel-width-mm: physical panel width [mm]
|
||||
- panel-height-mm: physical panel height [mm]
|
||||
|
||||
The device node can contain one 'port' child node with one child
|
||||
'endpoint' node, according to the bindings defined in [3]. This
|
||||
node should describe panel's video bus.
|
||||
|
||||
[1]: Documentation/devicetree/bindings/display/panel/display-timing.txt
|
||||
[2]: Documentation/devicetree/bindings/spi/spi-bus.txt
|
||||
[3]: Documentation/devicetree/bindings/media/video-interfaces.txt
|
||||
|
||||
Example:
|
||||
|
||||
lcd@0 {
|
||||
compatible = "samsung,ld9040";
|
||||
reg = <0>;
|
||||
vdd3-supply = <&ldo7_reg>;
|
||||
vci-supply = <&ldo17_reg>;
|
||||
reset-gpios = <&gpy4 5 0>;
|
||||
spi-max-frequency = <1200000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
power-on-delay = <10>;
|
||||
reset-delay = <10>;
|
||||
panel-width-mm = <90>;
|
||||
panel-height-mm = <154>;
|
||||
|
||||
display-timings {
|
||||
timing {
|
||||
clock-frequency = <23492370>;
|
||||
hactive = <480>;
|
||||
vactive = <800>;
|
||||
hback-porch = <16>;
|
||||
hfront-porch = <16>;
|
||||
vback-porch = <2>;
|
||||
vfront-porch = <28>;
|
||||
hsync-len = <2>;
|
||||
vsync-len = <1>;
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
de-active = <0>;
|
||||
pixelclk-active = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
port {
|
||||
lcd_ep: endpoint {
|
||||
remote-endpoint = <&fimd_dpi_ep>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,107 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/samsung,ld9040.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Samsung LD9040 AMOLED LCD parallel RGB panel with SPI control bus
|
||||
|
||||
description: |
|
||||
The panel must obey the rules for a SPI slave device as specified in
|
||||
spi/spi-controller.yaml
|
||||
|
||||
maintainers:
|
||||
- Andrzej Hajda <a.hajda@samsung.com>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: samsung,ld9040
|
||||
|
||||
display-timings: true
|
||||
port: true
|
||||
reg: true
|
||||
reset-gpios: true
|
||||
|
||||
vdd3-supply:
|
||||
description: core voltage supply
|
||||
|
||||
vci-supply:
|
||||
description: voltage supply for analog circuits
|
||||
|
||||
power-on-delay:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: delay after turning regulators on [ms]
|
||||
|
||||
reset-delay:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: delay after reset sequence [ms]
|
||||
|
||||
panel-width-mm:
|
||||
description: physical panel width [mm]
|
||||
|
||||
panel-height-mm:
|
||||
description: physical panel height [mm]
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- vdd3-supply
|
||||
- vci-supply
|
||||
- reset-gpios
|
||||
- display-timings
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
spi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
lcd@0 {
|
||||
compatible = "samsung,ld9040";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
reg = <0>;
|
||||
vdd3-supply = <&ldo7_reg>;
|
||||
vci-supply = <&ldo17_reg>;
|
||||
reset-gpios = <&gpy4 5 0>;
|
||||
spi-max-frequency = <1200000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
power-on-delay = <10>;
|
||||
reset-delay = <10>;
|
||||
panel-width-mm = <90>;
|
||||
panel-height-mm = <154>;
|
||||
|
||||
display-timings {
|
||||
timing {
|
||||
clock-frequency = <23492370>;
|
||||
hactive = <480>;
|
||||
vactive = <800>;
|
||||
hback-porch = <16>;
|
||||
hfront-porch = <16>;
|
||||
vback-porch = <2>;
|
||||
vfront-porch = <28>;
|
||||
hsync-len = <2>;
|
||||
vsync-len = <1>;
|
||||
hsync-active = <0>;
|
||||
vsync-active = <0>;
|
||||
de-active = <0>;
|
||||
pixelclk-active = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
port {
|
||||
lcd_ep: endpoint {
|
||||
remote-endpoint = <&fimd_dpi_ep>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,30 +0,0 @@
|
|||
Samsung S6D16D0 4" 864x480 AMOLED panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be:
|
||||
"samsung,s6d16d0",
|
||||
- reg: the virtual channel number of a DSI peripheral
|
||||
- vdd1-supply: I/O voltage supply
|
||||
- reset-gpios: a GPIO spec for the reset pin (active low)
|
||||
|
||||
The device node can contain one 'port' child node with one child
|
||||
'endpoint' node, according to the bindings defined in
|
||||
media/video-interfaces.txt. This node should describe panel's video bus.
|
||||
|
||||
Example:
|
||||
&dsi {
|
||||
...
|
||||
|
||||
panel@0 {
|
||||
compatible = "samsung,s6d16d0";
|
||||
reg = <0>;
|
||||
vdd1-supply = <&foo>;
|
||||
reset-gpios = <&foo_gpio 0 GPIO_ACTIVE_LOW>;
|
||||
|
||||
port {
|
||||
panel_in: endpoint {
|
||||
remote-endpoint = <&dsi_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,56 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/samsung,s6d16d0.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Samsung S6D16D0 4" 864x480 AMOLED panel
|
||||
|
||||
maintainers:
|
||||
- Linus Walleij <linus.walleij@linaro.org>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: samsung,s6d16d0
|
||||
|
||||
port: true
|
||||
reg: true
|
||||
reset-gpios: true
|
||||
|
||||
vdd1-supply:
|
||||
description: I/O voltage supply
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- vdd1-supply
|
||||
- reset-gpios
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
dsi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel@0 {
|
||||
compatible = "samsung,s6d16d0";
|
||||
reg = <0>;
|
||||
vdd1-supply = <&foo>;
|
||||
reset-gpios = <&foo_gpio 0 GPIO_ACTIVE_LOW>;
|
||||
|
||||
port {
|
||||
panel_in: endpoint {
|
||||
remote-endpoint = <&dsi_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,31 +0,0 @@
|
|||
Samsung S6E3HA2 5.7" 1440x2560 AMOLED panel
|
||||
Samsung S6E3HF2 5.65" 1600x2560 AMOLED panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be one of:
|
||||
"samsung,s6e3ha2",
|
||||
"samsung,s6e3hf2".
|
||||
- reg: the virtual channel number of a DSI peripheral
|
||||
- vdd3-supply: I/O voltage supply
|
||||
- vci-supply: voltage supply for analog circuits
|
||||
- reset-gpios: a GPIO spec for the reset pin (active low)
|
||||
- enable-gpios: a GPIO spec for the panel enable pin (active high)
|
||||
|
||||
Optional properties:
|
||||
- te-gpios: a GPIO spec for the tearing effect synchronization signal
|
||||
gpio pin (active high)
|
||||
|
||||
Example:
|
||||
&dsi {
|
||||
...
|
||||
|
||||
panel@0 {
|
||||
compatible = "samsung,s6e3ha2";
|
||||
reg = <0>;
|
||||
vdd3-supply = <&ldo27_reg>;
|
||||
vci-supply = <&ldo28_reg>;
|
||||
reset-gpios = <&gpg0 0 GPIO_ACTIVE_LOW>;
|
||||
enable-gpios = <&gpf1 5 GPIO_ACTIVE_HIGH>;
|
||||
te-gpios = <&gpf1 3 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
|
@ -1,24 +0,0 @@
|
|||
Samsung S6E63J0X03 1.63" 320x320 AMOLED panel (interface: MIPI-DSI command mode)
|
||||
|
||||
Required properties:
|
||||
- compatible: "samsung,s6e63j0x03"
|
||||
- reg: the virtual channel number of a DSI peripheral
|
||||
- vdd3-supply: I/O voltage supply
|
||||
- vci-supply: voltage supply for analog circuits
|
||||
- reset-gpios: a GPIO spec for the reset pin (active low)
|
||||
- te-gpios: a GPIO spec for the tearing effect synchronization signal
|
||||
gpio pin (active high)
|
||||
|
||||
Example:
|
||||
&dsi {
|
||||
...
|
||||
|
||||
panel@0 {
|
||||
compatible = "samsung,s6e63j0x03";
|
||||
reg = <0>;
|
||||
vdd3-supply = <&ldo16_reg>;
|
||||
vci-supply = <&ldo20_reg>;
|
||||
reset-gpios = <&gpe0 1 GPIO_ACTIVE_LOW>;
|
||||
te-gpios = <&gpx0 6 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
|
@ -1,33 +0,0 @@
|
|||
Samsung s6e63m0 AMOLED LCD panel
|
||||
|
||||
Required properties:
|
||||
- compatible: "samsung,s6e63m0"
|
||||
- reset-gpios: GPIO spec for reset pin
|
||||
- vdd3-supply: VDD regulator
|
||||
- vci-supply: VCI regulator
|
||||
|
||||
The panel must obey rules for SPI slave device specified in document [1].
|
||||
|
||||
The device node can contain one 'port' child node with one child
|
||||
'endpoint' node, according to the bindings defined in [2]. This
|
||||
node should describe panel's video bus.
|
||||
|
||||
[1]: Documentation/devicetree/bindings/spi/spi-bus.txt
|
||||
[2]: Documentation/devicetree/bindings/media/video-interfaces.txt
|
||||
|
||||
Example:
|
||||
|
||||
s6e63m0: display@0 {
|
||||
compatible = "samsung,s6e63m0";
|
||||
reg = <0>;
|
||||
reset-gpio = <&mp05 5 1>;
|
||||
vdd3-supply = <&ldo12_reg>;
|
||||
vci-supply = <&ldo11_reg>;
|
||||
spi-max-frequency = <1200000>;
|
||||
|
||||
port {
|
||||
lcd_ep: endpoint {
|
||||
remote-endpoint = <&fimd_ep>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,60 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/samsung,s6e63m0.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Samsung s6e63m0 AMOLED LCD panel
|
||||
|
||||
maintainers:
|
||||
- Jonathan Bakker <xc-racer2@live.ca>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: samsung,s6e63m0
|
||||
|
||||
reg: true
|
||||
reset-gpios: true
|
||||
port: true
|
||||
|
||||
vdd3-supply:
|
||||
description: VDD regulator
|
||||
|
||||
vci-supply:
|
||||
description: VCI regulator
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reset-gpios
|
||||
- vdd3-supply
|
||||
- vci-supply
|
||||
- port
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
spi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
display@0 {
|
||||
compatible = "samsung,s6e63m0";
|
||||
reg = <0>;
|
||||
reset-gpios = <&mp05 5 1>;
|
||||
vdd3-supply = <&ldo12_reg>;
|
||||
vci-supply = <&ldo11_reg>;
|
||||
spi-max-frequency = <1200000>;
|
||||
|
||||
port {
|
||||
lcd_ep: endpoint {
|
||||
remote-endpoint = <&fimd_ep>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,23 +0,0 @@
|
|||
Seiko Instruments Inc. 4.3" WVGA (800 x RGB x 480) TFT with Touch-Panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "sii,43wvf1g".
|
||||
- "dvdd-supply": 3v3 digital regulator.
|
||||
- "avdd-supply": 5v analog regulator.
|
||||
|
||||
Optional properties:
|
||||
- backlight: phandle for the backlight control.
|
||||
|
||||
Example:
|
||||
|
||||
panel {
|
||||
compatible = "sii,43wvf1g";
|
||||
backlight = <&backlight_display>;
|
||||
dvdd-supply = <®_lcd_3v3>;
|
||||
avdd-supply = <®_lcd_5v>;
|
||||
port {
|
||||
panel_in: endpoint {
|
||||
remote-endpoint = <&display_out>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,50 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/seiko,43wvf1g.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Seiko Instruments Inc. 4.3" WVGA (800 x RGB x 480) TFT with Touch-Panel
|
||||
|
||||
maintainers:
|
||||
- Marco Franchi <marco.franchi@nxp.com>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: sii,43wvf1g
|
||||
|
||||
backlight: true
|
||||
port: true
|
||||
|
||||
dvdd-supply:
|
||||
description: 3v3 digital regulator
|
||||
|
||||
avdd-supply:
|
||||
description: 5v analog regulator
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- dvdd-supply
|
||||
- avdd-supply
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
panel {
|
||||
compatible = "sii,43wvf1g";
|
||||
|
||||
backlight = <&backlight_display>;
|
||||
dvdd-supply = <®_lcd_3v3>;
|
||||
avdd-supply = <®_lcd_5v>;
|
||||
port {
|
||||
panel_in: endpoint {
|
||||
remote-endpoint = <&display_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,36 +0,0 @@
|
|||
Sharp 15" LQ150X1LG11 XGA TFT LCD panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "sharp,lq150x1lg11"
|
||||
- power-supply: regulator to provide the VCC supply voltage (3.3 volts)
|
||||
|
||||
Optional properties:
|
||||
- backlight: phandle of the backlight device
|
||||
- rlud-gpios: a single GPIO for the RL/UD (rotate 180 degrees) pin.
|
||||
- sellvds-gpios: a single GPIO for the SELLVDS pin.
|
||||
|
||||
If rlud-gpios and/or sellvds-gpios are not specified, the RL/UD and/or SELLVDS
|
||||
pins are assumed to be handled appropriately by the hardware.
|
||||
|
||||
Example:
|
||||
|
||||
backlight: backlight {
|
||||
compatible = "pwm-backlight";
|
||||
pwms = <&pwm 0 100000>; /* VBR */
|
||||
|
||||
brightness-levels = <0 20 40 60 80 100>;
|
||||
default-brightness-level = <2>;
|
||||
|
||||
power-supply = <&vdd_12v_reg>; /* VDD */
|
||||
enable-gpios = <&gpio 42 GPIO_ACTIVE_HIGH>; /* XSTABY */
|
||||
};
|
||||
|
||||
panel {
|
||||
compatible = "sharp,lq150x1lg11";
|
||||
|
||||
power-supply = <&vcc_3v3_reg>; /* VCC */
|
||||
|
||||
backlight = <&backlight>;
|
||||
rlud-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>; /* RL/UD */
|
||||
sellvds-gpios = <&gpio 18 GPIO_ACTIVE_HIGH>; /* SELLVDS */
|
||||
};
|
|
@ -0,0 +1,58 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/sharp,lq150x1lg11.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Sharp 15" LQ150X1LG11 XGA TFT LCD panel
|
||||
|
||||
maintainers:
|
||||
- Peter Rosin <peda@axentia.se>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: sharp,lq150x1lg11
|
||||
|
||||
power-supply: true
|
||||
backlight: true
|
||||
|
||||
rlud-gpios:
|
||||
maxItems: 1
|
||||
description: |
|
||||
GPIO for the RL/UD (rotate 180 degrees) pin.
|
||||
If rlud-gpios and/or sellvds-gpios are not specified,
|
||||
the RL/UD and/or SELLVDS pins are assumed to be handled
|
||||
appropriately by the hardware.
|
||||
|
||||
sellvds-gpios:
|
||||
maxItems: 1
|
||||
description: |
|
||||
GPIO for the SELLVDS pin.
|
||||
If rlud-gpios and/or sellvds-gpios are not specified,
|
||||
the RL/UD and/or SELLVDS pins are assumed to be handled
|
||||
appropriately by the hardware.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- power-supply
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
panel {
|
||||
compatible = "sharp,lq150x1lg11";
|
||||
|
||||
power-supply = <&vcc_3v3_reg>; /* VCC */
|
||||
|
||||
backlight = <&backlight>;
|
||||
rlud-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>; /* RL/UD */
|
||||
sellvds-gpios = <&gpio 18 GPIO_ACTIVE_HIGH>; /* SELLVDS */
|
||||
};
|
||||
|
||||
...
|
|
@ -1,43 +0,0 @@
|
|||
SHARP LS037V7DW01 TFT-LCD panel
|
||||
===================================
|
||||
|
||||
Required properties:
|
||||
- compatible: "sharp,ls037v7dw01"
|
||||
|
||||
Optional properties:
|
||||
- label: a symbolic name for the panel
|
||||
- enable-gpios: a GPIO spec for the optional enable pin.
|
||||
This pin is the INI pin as specified in the LS037V7DW01.pdf file.
|
||||
- reset-gpios: a GPIO spec for the optional reset pin.
|
||||
This pin is the RESB pin as specified in the LS037V7DW01.pdf file.
|
||||
- mode-gpios: a GPIO
|
||||
ordered MO, LR, and UD as specified in the LS037V7DW01.pdf file.
|
||||
|
||||
Required nodes:
|
||||
- Video port for DPI input
|
||||
|
||||
This panel can have zero to five GPIOs to configure to change configuration
|
||||
between QVGA and VGA mode and the scan direction. As these pins can be also
|
||||
configured with external pulls, all the GPIOs are considered optional with holes
|
||||
in the array.
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
Example when connected to a omap2+ based device:
|
||||
|
||||
lcd0: display {
|
||||
compatible = "sharp,ls037v7dw01";
|
||||
power-supply = <&lcd_3v3>;
|
||||
enable-gpios = <&gpio5 24 GPIO_ACTIVE_HIGH>; /* gpio152, lcd INI */
|
||||
reset-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>; /* gpio155, lcd RESB */
|
||||
mode-gpios = <&gpio5 26 GPIO_ACTIVE_HIGH /* gpio154, lcd MO */
|
||||
&gpio1 2 GPIO_ACTIVE_HIGH /* gpio2, lcd LR */
|
||||
&gpio1 3 GPIO_ACTIVE_HIGH>; /* gpio3, lcd UD */
|
||||
|
||||
port {
|
||||
lcd_in: endpoint {
|
||||
remote-endpoint = <&dpi_out>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,68 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/sharp,ls037v7dw01.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: SHARP LS037V7DW01 TFT-LCD panel
|
||||
|
||||
description: |
|
||||
This panel can have zero to five GPIOs to configure to change configuration
|
||||
between QVGA and VGA mode and the scan direction. As these pins can be also
|
||||
configured with external pulls, all the GPIOs are considered optional with holes
|
||||
in the array.
|
||||
|
||||
maintainers:
|
||||
- Tony Lindgren <tony@atomide.com>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: sharp,ls037v7dw01
|
||||
|
||||
label: true
|
||||
enable-gpios: true
|
||||
reset-gpios: true
|
||||
port: true
|
||||
power-supply: true
|
||||
|
||||
mode-gpios:
|
||||
minItems: 1
|
||||
maxItems: 3
|
||||
description: |
|
||||
GPIO ordered MO, LR, and UD as specified in LS037V7DW01.pdf
|
||||
This panel can have zero to three GPIOs to configure to
|
||||
change configuration between QVGA and VGA mode and the
|
||||
scan direction. As these pins can be also configured
|
||||
with external pulls, all the GPIOs are considered
|
||||
optional with holes in the array.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- port
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
lcd0: display {
|
||||
compatible = "sharp,ls037v7dw01";
|
||||
power-supply = <&lcd_3v3>;
|
||||
enable-gpios = <&gpio5 24 GPIO_ACTIVE_HIGH>; /* gpio152, lcd INI */
|
||||
reset-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>; /* gpio155, lcd RESB */
|
||||
mode-gpios = <&gpio5 26 GPIO_ACTIVE_HIGH /* gpio154, lcd MO */
|
||||
&gpio1 2 GPIO_ACTIVE_HIGH /* gpio2, lcd LR */
|
||||
&gpio1 3 GPIO_ACTIVE_HIGH>; /* gpio3, lcd UD */
|
||||
|
||||
port {
|
||||
lcd_in: endpoint {
|
||||
remote-endpoint = <&dpi_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,22 +0,0 @@
|
|||
Sharp Microelectronics 4.3" qHD TFT LCD panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "sharp,ls043t1le01-qhd"
|
||||
- reg: DSI virtual channel of the peripheral
|
||||
- power-supply: phandle of the regulator that provides the supply voltage
|
||||
|
||||
Optional properties:
|
||||
- backlight: phandle of the backlight device attached to the panel
|
||||
- reset-gpios: a GPIO spec for the reset pin
|
||||
|
||||
Example:
|
||||
|
||||
mdss_dsi@fd922800 {
|
||||
panel@0 {
|
||||
compatible = "sharp,ls043t1le01-qhd";
|
||||
reg = <0>;
|
||||
avdd-supply = <&pm8941_l22>;
|
||||
backlight = <&pm8941_wled>;
|
||||
reset-gpios = <&pm8941_gpios 19 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
|
@ -0,0 +1,51 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/sharp,ls043t1le01.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Sharp Microelectronics 4.3" qHD TFT LCD panel
|
||||
|
||||
maintainers:
|
||||
- Werner Johansson <werner.johansson@sonymobile.com>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: sharp,ls043t1le01-qhd
|
||||
|
||||
reg: true
|
||||
backlight: true
|
||||
reset-gpios: true
|
||||
port: true
|
||||
|
||||
avdd-supply:
|
||||
description: handle of the regulator that provides the supply voltage
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- avdd-supply
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
dsi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel@0 {
|
||||
compatible = "sharp,ls043t1le01-qhd";
|
||||
reg = <0>;
|
||||
avdd-supply = <&pm8941_l22>;
|
||||
backlight = <&pm8941_wled>;
|
||||
reset-gpios = <&pm8941_gpios 19 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1 +0,0 @@
|
|||
See panel-common.yaml in this directory.
|
|
@ -1,37 +0,0 @@
|
|||
Sitronix ST7789V RGB panel with SPI control bus
|
||||
|
||||
Required properties:
|
||||
- compatible: "sitronix,st7789v"
|
||||
- reg: Chip select of the panel on the SPI bus
|
||||
- reset-gpios: a GPIO phandle for the reset pin
|
||||
- power-supply: phandle of the regulator that provides the supply voltage
|
||||
|
||||
Optional properties:
|
||||
- backlight: phandle to the backlight used
|
||||
|
||||
The generic bindings for the SPI slaves documented in [1] also applies
|
||||
|
||||
The device node can contain one 'port' child node with one child
|
||||
'endpoint' node, according to the bindings defined in [2]. This
|
||||
node should describe panel's video bus.
|
||||
|
||||
[1]: Documentation/devicetree/bindings/spi/spi-bus.txt
|
||||
[2]: Documentation/devicetree/bindings/graph.txt
|
||||
|
||||
Example:
|
||||
|
||||
panel@0 {
|
||||
compatible = "sitronix,st7789v";
|
||||
reg = <0>;
|
||||
reset-gpios = <&pio 6 11 GPIO_ACTIVE_LOW>;
|
||||
backlight = <&pwm_bl>;
|
||||
spi-max-frequency = <100000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
|
||||
port {
|
||||
panel_input: endpoint {
|
||||
remote-endpoint = <&tcon0_out_panel>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,63 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/sitronix,st7789v.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Sitronix ST7789V RGB panel with SPI control bus
|
||||
|
||||
description: |
|
||||
The panel must obey the rules for a SPI slave device as specified in
|
||||
spi/spi-controller.yaml
|
||||
|
||||
maintainers:
|
||||
- Maxime Ripard <mripard@kernel.org>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: sitronix,st7789v
|
||||
|
||||
reg: true
|
||||
reset-gpios: true
|
||||
power-supply: true
|
||||
backlight: true
|
||||
port: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- reset-gpios
|
||||
- power-supply
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
spi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel@0 {
|
||||
compatible = "sitronix,st7789v";
|
||||
reg = <0>;
|
||||
reset-gpios = <&pio 6 11 GPIO_ACTIVE_LOW>;
|
||||
backlight = <&pwm_bl>;
|
||||
power-supply = <&power>;
|
||||
spi-max-frequency = <100000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
|
||||
port {
|
||||
panel_input: endpoint {
|
||||
remote-endpoint = <&tcon0_out_panel>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,30 +0,0 @@
|
|||
Sony ACX565AKM SDI Panel
|
||||
========================
|
||||
|
||||
Required properties:
|
||||
- compatible: "sony,acx565akm"
|
||||
|
||||
Optional properties:
|
||||
- label: a symbolic name for the panel
|
||||
- reset-gpios: panel reset gpio
|
||||
|
||||
Required nodes:
|
||||
- Video port for SDI input
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
acx565akm@2 {
|
||||
compatible = "sony,acx565akm";
|
||||
spi-max-frequency = <6000000>;
|
||||
reg = <2>;
|
||||
|
||||
label = "lcd";
|
||||
reset-gpios = <&gpio3 26 GPIO_ACTIVE_HIGH>; /* 90 */
|
||||
|
||||
port {
|
||||
lcd_in: endpoint {
|
||||
remote-endpoint = <&sdi_out>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,57 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/sony,acx565akm.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Sony ACX565AKM SDI Panel
|
||||
|
||||
description: |
|
||||
The panel must obey the rules for a SPI slave device as specified in
|
||||
spi/spi-controller.yaml
|
||||
|
||||
maintainers:
|
||||
- Tomi Valkeinen <tomi.valkeinen@ti.com>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: sony,acx565akm
|
||||
|
||||
label: true
|
||||
reset-gpios: true
|
||||
port: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- port
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
|
||||
spi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel@2 {
|
||||
compatible = "sony,acx565akm";
|
||||
spi-max-frequency = <6000000>;
|
||||
reg = <2>;
|
||||
|
||||
label = "lcd";
|
||||
reset-gpios = <&gpio3 26 GPIO_ACTIVE_HIGH>; /* 90 */
|
||||
|
||||
port {
|
||||
lcd_in: endpoint {
|
||||
remote-endpoint = <&sdi_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,4 +0,0 @@
|
|||
Startek Electronic Technology Co. KD050C 5.0" WVGA TFT LCD panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "startek,startek-kd050c"
|
|
@ -0,0 +1,33 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/startek,startek-kd050c.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Startek Electronic Technology Co. KD050C 5.0" WVGA TFT LCD panel
|
||||
|
||||
maintainers:
|
||||
- Nikita Kiryanov <nikita@compulab.co.il>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-dpi.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
items:
|
||||
- const: startek,startek-kd050c
|
||||
- {} # panel-dpi, but not listed here to avoid false select
|
||||
|
||||
backlight: true
|
||||
enable-gpios: true
|
||||
height-mm: true
|
||||
label: true
|
||||
panel-timing: true
|
||||
port: true
|
||||
power-supply: true
|
||||
reset-gpios: true
|
||||
width-mm: true
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
...
|
|
@ -0,0 +1,65 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/panel/tpo,td.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Toppoly TD Panels
|
||||
|
||||
description: |
|
||||
The panel must obey the rules for a SPI slave device as specified in
|
||||
spi/spi-controller.yaml
|
||||
|
||||
maintainers:
|
||||
- Marek Belisko <marek@goldelico.com>
|
||||
- H. Nikolaus Schaller <hns@goldelico.com>
|
||||
|
||||
allOf:
|
||||
- $ref: panel-common.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
# Toppoly TD028TTEC1 Panel
|
||||
- tpo,td028ttec1
|
||||
# Toppoly TD043MTEA1 Panel
|
||||
- tpo,td043mtea1
|
||||
|
||||
reg: true
|
||||
label: true
|
||||
reset-gpios: true
|
||||
backlight: true
|
||||
port: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- port
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
spi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
panel: panel@0 {
|
||||
compatible = "tpo,td043mtea1";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <100000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
|
||||
label = "lcd";
|
||||
|
||||
reset-gpios = <&gpio7 7 0>;
|
||||
|
||||
port {
|
||||
lcd_in: endpoint {
|
||||
remote-endpoint = <&dpi_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
...
|
|
@ -1,32 +0,0 @@
|
|||
Toppoly TD028TTEC1 Panel
|
||||
========================
|
||||
|
||||
Required properties:
|
||||
- compatible: "tpo,td028ttec1"
|
||||
|
||||
Optional properties:
|
||||
- label: a symbolic name for the panel
|
||||
- backlight: phandle of the backlight device
|
||||
|
||||
Required nodes:
|
||||
- Video port for DPI input
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
lcd-panel: td028ttec1@0 {
|
||||
compatible = "tpo,td028ttec1";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <100000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
|
||||
label = "lcd";
|
||||
backlight = <&backlight>;
|
||||
port {
|
||||
lcd_in: endpoint {
|
||||
remote-endpoint = <&dpi_out>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
TPO TD043MTEA1 Panel
|
||||
====================
|
||||
|
||||
Required properties:
|
||||
- compatible: "tpo,td043mtea1"
|
||||
- reset-gpios: panel reset gpio
|
||||
|
||||
Optional properties:
|
||||
- label: a symbolic name for the panel
|
||||
|
||||
Required nodes:
|
||||
- Video port for DPI input
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
lcd-panel: panel@0 {
|
||||
compatible = "tpo,td043mtea1";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <100000>;
|
||||
spi-cpol;
|
||||
spi-cpha;
|
||||
|
||||
label = "lcd";
|
||||
|
||||
reset-gpios = <&gpio7 7 0>;
|
||||
|
||||
port {
|
||||
lcd_in: endpoint {
|
||||
remote-endpoint = <&dpi_out>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -1,72 +0,0 @@
|
|||
Rockchip specific extensions for rk3066 HDMI
|
||||
============================================
|
||||
|
||||
Required properties:
|
||||
- compatible:
|
||||
"rockchip,rk3066-hdmi";
|
||||
- reg:
|
||||
Physical base address and length of the controller's registers.
|
||||
- clocks, clock-names:
|
||||
Phandle to HDMI controller clock, name should be "hclk".
|
||||
- interrupts:
|
||||
HDMI interrupt number.
|
||||
- power-domains:
|
||||
Phandle to the RK3066_PD_VIO power domain.
|
||||
- rockchip,grf:
|
||||
This soc uses GRF regs to switch the HDMI TX input between vop0 and vop1.
|
||||
- ports:
|
||||
Contains one port node with two endpoints, numbered 0 and 1,
|
||||
connected respectively to vop0 and vop1.
|
||||
Contains one port node with one endpoint
|
||||
connected to a hdmi-connector node.
|
||||
- pinctrl-0, pinctrl-name:
|
||||
Switch the iomux for the HPD/I2C pins to HDMI function.
|
||||
|
||||
Example:
|
||||
hdmi: hdmi@10116000 {
|
||||
compatible = "rockchip,rk3066-hdmi";
|
||||
reg = <0x10116000 0x2000>;
|
||||
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cru HCLK_HDMI>;
|
||||
clock-names = "hclk";
|
||||
power-domains = <&power RK3066_PD_VIO>;
|
||||
rockchip,grf = <&grf>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&hdmii2c_xfer>, <&hdmi_hpd>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
hdmi_in: port@0 {
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
hdmi_in_vop0: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&vop0_out_hdmi>;
|
||||
};
|
||||
hdmi_in_vop1: endpoint@1 {
|
||||
reg = <1>;
|
||||
remote-endpoint = <&vop1_out_hdmi>;
|
||||
};
|
||||
};
|
||||
hdmi_out: port@1 {
|
||||
reg = <1>;
|
||||
hdmi_out_con: endpoint {
|
||||
remote-endpoint = <&hdmi_con_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&pinctrl {
|
||||
hdmi {
|
||||
hdmi_hpd: hdmi-hpd {
|
||||
rockchip,pins = <0 RK_PA0 1 &pcfg_pull_default>;
|
||||
};
|
||||
hdmii2c_xfer: hdmii2c-xfer {
|
||||
rockchip,pins = <0 RK_PA1 1 &pcfg_pull_none>,
|
||||
<0 RK_PA2 1 &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -0,0 +1,140 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/display/rockchip/rockchip,rk3066-hdmi.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Rockchip rk3066 HDMI controller
|
||||
|
||||
maintainers:
|
||||
- Sandy Huang <hjc@rock-chips.com>
|
||||
- Heiko Stuebner <heiko@sntech.de>
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: rockchip,rk3066-hdmi
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 1
|
||||
|
||||
clock-names:
|
||||
const: hclk
|
||||
|
||||
pinctrl-0:
|
||||
maxItems: 2
|
||||
|
||||
pinctrl-names:
|
||||
const: default
|
||||
description:
|
||||
Switch the iomux for the HPD/I2C pins to HDMI function.
|
||||
|
||||
power-domains:
|
||||
maxItems: 1
|
||||
|
||||
rockchip,grf:
|
||||
$ref: /schemas/types.yaml#/definitions/phandle
|
||||
description:
|
||||
This soc uses GRF regs to switch the HDMI TX input between vop0 and vop1.
|
||||
|
||||
ports:
|
||||
type: object
|
||||
|
||||
properties:
|
||||
"#address-cells":
|
||||
const: 1
|
||||
|
||||
"#size-cells":
|
||||
const: 0
|
||||
|
||||
port@0:
|
||||
type: object
|
||||
description:
|
||||
Port node with two endpoints, numbered 0 and 1,
|
||||
connected respectively to vop0 and vop1.
|
||||
|
||||
port@1:
|
||||
type: object
|
||||
description:
|
||||
Port node with one endpoint connected to a hdmi-connector node.
|
||||
|
||||
required:
|
||||
- "#address-cells"
|
||||
- "#size-cells"
|
||||
- port@0
|
||||
- port@1
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- clocks
|
||||
- clock-names
|
||||
- pinctrl-0
|
||||
- pinctrl-names
|
||||
- power-domains
|
||||
- rockchip,grf
|
||||
- ports
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/clock/rk3066a-cru.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
#include <dt-bindings/pinctrl/rockchip.h>
|
||||
#include <dt-bindings/power/rk3066-power.h>
|
||||
hdmi: hdmi@10116000 {
|
||||
compatible = "rockchip,rk3066-hdmi";
|
||||
reg = <0x10116000 0x2000>;
|
||||
interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cru HCLK_HDMI>;
|
||||
clock-names = "hclk";
|
||||
pinctrl-0 = <&hdmii2c_xfer>, <&hdmi_hpd>;
|
||||
pinctrl-names = "default";
|
||||
power-domains = <&power RK3066_PD_VIO>;
|
||||
rockchip,grf = <&grf>;
|
||||
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
hdmi_in: port@0 {
|
||||
reg = <0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
hdmi_in_vop0: endpoint@0 {
|
||||
reg = <0>;
|
||||
remote-endpoint = <&vop0_out_hdmi>;
|
||||
};
|
||||
hdmi_in_vop1: endpoint@1 {
|
||||
reg = <1>;
|
||||
remote-endpoint = <&vop1_out_hdmi>;
|
||||
};
|
||||
};
|
||||
hdmi_out: port@1 {
|
||||
reg = <1>;
|
||||
hdmi_out_con: endpoint {
|
||||
remote-endpoint = <&hdmi_con_in>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
pinctrl {
|
||||
hdmi {
|
||||
hdmi_hpd: hdmi-hpd {
|
||||
rockchip,pins = <0 RK_PA0 1 &pcfg_pull_default>;
|
||||
};
|
||||
hdmii2c_xfer: hdmii2c-xfer {
|
||||
rockchip,pins = <0 RK_PA1 1 &pcfg_pull_none>,
|
||||
<0 RK_PA2 1 &pcfg_pull_none>;
|
||||
};
|
||||
};
|
||||
};
|
|
@ -11,7 +11,7 @@ course not limited to GPU use cases.
|
|||
The three main components of this are: (1) dma-buf, representing a
|
||||
sg_table and exposed to userspace as a file descriptor to allow passing
|
||||
between devices, (2) fence, which provides a mechanism to signal when
|
||||
one device as finished access, and (3) reservation, which manages the
|
||||
one device has finished access, and (3) reservation, which manages the
|
||||
shared or exclusive fence(s) associated with the buffer.
|
||||
|
||||
Shared DMA Buffers
|
||||
|
@ -31,7 +31,7 @@ The exporter
|
|||
- implements and manages operations in :c:type:`struct dma_buf_ops
|
||||
<dma_buf_ops>` for the buffer,
|
||||
- allows other users to share the buffer by using dma_buf sharing APIs,
|
||||
- manages the details of buffer allocation, wrapped int a :c:type:`struct
|
||||
- manages the details of buffer allocation, wrapped in a :c:type:`struct
|
||||
dma_buf <dma_buf>`,
|
||||
- decides about the actual backing storage where this allocation happens,
|
||||
- and takes care of any migration of scatterlist - for all (shared) users of
|
||||
|
|
|
@ -5256,7 +5256,7 @@ DRM DRIVER FOR ARM VERSATILE TFT PANELS
|
|||
M: Linus Walleij <linus.walleij@linaro.org>
|
||||
S: Maintained
|
||||
T: git git://anongit.freedesktop.org/drm/drm-misc
|
||||
F: Documentation/devicetree/bindings/display/panel/arm,versatile-tft-panel.txt
|
||||
F: Documentation/devicetree/bindings/display/panel/arm,versatile-tft-panel.yaml
|
||||
F: drivers/gpu/drm/panel/panel-arm-versatile.c
|
||||
|
||||
DRM DRIVER FOR ASPEED BMC GFX
|
||||
|
@ -5282,7 +5282,7 @@ F: drivers/gpu/drm/bochs/
|
|||
DRM DRIVER FOR BOE HIMAX8279D PANELS
|
||||
M: Jerry Han <hanxu5@huaqin.corp-partner.google.com>
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/display/panel/boe,himax8279d.txt
|
||||
F: Documentation/devicetree/bindings/display/panel/boe,himax8279d.yaml
|
||||
F: drivers/gpu/drm/panel/panel-boe-himax8279d.c
|
||||
|
||||
DRM DRIVER FOR FARADAY TVE200 TV ENCODER
|
||||
|
@ -5383,7 +5383,7 @@ F: include/uapi/drm/nouveau_drm.h
|
|||
DRM DRIVER FOR OLIMEX LCD-OLINUXINO PANELS
|
||||
M: Stefan Mavrodiev <stefan@olimex.com>
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/display/panel/olimex,lcd-olinuxino.txt
|
||||
F: Documentation/devicetree/bindings/display/panel/olimex,lcd-olinuxino.yaml
|
||||
F: drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c
|
||||
|
||||
DRM DRIVER FOR PERVASIVE DISPLAYS REPAPER PANELS
|
||||
|
|
|
@ -104,6 +104,14 @@ static struct fixed_voltage_config shannon_cf_vcc_pdata __initdata = {
|
|||
.enabled_at_boot = 1,
|
||||
};
|
||||
|
||||
static struct gpiod_lookup_table shannon_display_gpio_table = {
|
||||
.dev_id = "sa11x0-fb",
|
||||
.table = {
|
||||
GPIO_LOOKUP("gpio", 22, "shannon-lcden", GPIO_ACTIVE_HIGH),
|
||||
{ },
|
||||
},
|
||||
};
|
||||
|
||||
static void __init shannon_init(void)
|
||||
{
|
||||
sa11x0_register_fixed_regulator(0, &shannon_cf_vcc_pdata,
|
||||
|
@ -113,6 +121,7 @@ static void __init shannon_init(void)
|
|||
sa11x0_register_pcmcia(0, &shannon_pcmcia0_gpio_table);
|
||||
sa11x0_register_pcmcia(1, &shannon_pcmcia1_gpio_table);
|
||||
sa11x0_ppc_configure_mcp();
|
||||
gpiod_add_lookup_table(&shannon_display_gpio_table);
|
||||
sa11x0_register_lcd(&shannon_lcd_info);
|
||||
sa11x0_register_mtd(&shannon_flash_data, &shannon_flash_resource, 1);
|
||||
sa11x0_register_mcp(&shannon_mcp_data);
|
||||
|
|
|
@ -881,6 +881,17 @@ static const struct drm_crtc_helper_funcs ast_crtc_helper_funcs = {
|
|||
.atomic_disable = ast_crtc_helper_atomic_disable,
|
||||
};
|
||||
|
||||
static void ast_crtc_reset(struct drm_crtc *crtc)
|
||||
{
|
||||
struct ast_crtc_state *ast_state =
|
||||
kzalloc(sizeof(*ast_state), GFP_KERNEL);
|
||||
|
||||
if (crtc->state)
|
||||
crtc->funcs->atomic_destroy_state(crtc, crtc->state);
|
||||
|
||||
__drm_atomic_helper_crtc_reset(crtc, &ast_state->base);
|
||||
}
|
||||
|
||||
static void ast_crtc_destroy(struct drm_crtc *crtc)
|
||||
{
|
||||
drm_crtc_cleanup(crtc);
|
||||
|
@ -919,7 +930,7 @@ static void ast_crtc_atomic_destroy_state(struct drm_crtc *crtc,
|
|||
}
|
||||
|
||||
static const struct drm_crtc_funcs ast_crtc_funcs = {
|
||||
.reset = drm_atomic_helper_crtc_reset,
|
||||
.reset = ast_crtc_reset,
|
||||
.set_config = drm_crtc_helper_set_config,
|
||||
.gamma_set = drm_atomic_helper_legacy_gamma_set,
|
||||
.destroy = ast_crtc_destroy,
|
||||
|
|
|
@ -6,7 +6,7 @@ config DRM_I2C_ADV7511
|
|||
select REGMAP_I2C
|
||||
select DRM_MIPI_DSI
|
||||
help
|
||||
Support for the Analog Device ADV7511(W)/13/33/35 HDMI encoders.
|
||||
Support for the Analog Devices ADV7511(W)/13/33/35 HDMI encoders.
|
||||
|
||||
config DRM_I2C_ADV7511_AUDIO
|
||||
bool "ADV7511 HDMI Audio driver"
|
||||
|
|
|
@ -19,13 +19,15 @@ static void adv7511_calc_cts_n(unsigned int f_tmds, unsigned int fs,
|
|||
{
|
||||
switch (fs) {
|
||||
case 32000:
|
||||
*n = 4096;
|
||||
case 48000:
|
||||
case 96000:
|
||||
case 192000:
|
||||
*n = fs * 128 / 1000;
|
||||
break;
|
||||
case 44100:
|
||||
*n = 6272;
|
||||
break;
|
||||
case 48000:
|
||||
*n = 6144;
|
||||
case 88200:
|
||||
case 176400:
|
||||
*n = fs * 128 / 900;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -119,6 +121,9 @@ int adv7511_hdmi_hw_params(struct device *dev, void *data,
|
|||
audio_source = ADV7511_AUDIO_SOURCE_I2S;
|
||||
i2s_format = ADV7511_I2S_FORMAT_LEFT_J;
|
||||
break;
|
||||
case HDMI_SPDIF:
|
||||
audio_source = ADV7511_AUDIO_SOURCE_SPDIF;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -175,11 +180,21 @@ static int audio_startup(struct device *dev, void *data)
|
|||
/* use Audio infoframe updated info */
|
||||
regmap_update_bits(adv7511->regmap, ADV7511_REG_GC(1),
|
||||
BIT(5), 0);
|
||||
/* enable SPDIF receiver */
|
||||
if (adv7511->audio_source == ADV7511_AUDIO_SOURCE_SPDIF)
|
||||
regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG,
|
||||
BIT(7), BIT(7));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void audio_shutdown(struct device *dev, void *data)
|
||||
{
|
||||
struct adv7511 *adv7511 = dev_get_drvdata(dev);
|
||||
|
||||
if (adv7511->audio_source == ADV7511_AUDIO_SOURCE_SPDIF)
|
||||
regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG,
|
||||
BIT(7), 0);
|
||||
}
|
||||
|
||||
static int adv7511_hdmi_i2s_get_dai_id(struct snd_soc_component *component,
|
||||
|
@ -213,6 +228,7 @@ static const struct hdmi_codec_pdata codec_data = {
|
|||
.ops = &adv7511_codec_ops,
|
||||
.max_i2s_channels = 2,
|
||||
.i2s = 1,
|
||||
.spdif = 1,
|
||||
};
|
||||
|
||||
int adv7511_audio_init(struct device *dev, struct adv7511 *adv7511)
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
/*
|
||||
* drm kms/fb cma (contiguous memory allocator) helper functions
|
||||
*
|
||||
* Copyright (C) 2012 Analog Device Inc.
|
||||
* Copyright (C) 2012 Analog Devices Inc.
|
||||
* Author: Lars-Peter Clausen <lars@metafoo.de>
|
||||
*
|
||||
* Based on udl_fbdev.c
|
||||
|
|
|
@ -76,10 +76,8 @@ drm_gem_fb_init(struct drm_device *dev,
|
|||
fb->obj[i] = obj[i];
|
||||
|
||||
ret = drm_framebuffer_init(dev, fb, funcs);
|
||||
if (ret) {
|
||||
if (ret)
|
||||
drm_err(dev, "Failed to init framebuffer: %d\n", ret);
|
||||
kfree(fb);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -1272,37 +1272,8 @@ cdv_intel_get_adjust_request_pre_emphasis(uint8_t link_status[DP_LINK_STATUS_SIZ
|
|||
return ((l >> s) & 3) << DP_TRAIN_PRE_EMPHASIS_SHIFT;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
static char *voltage_names[] = {
|
||||
"0.4V", "0.6V", "0.8V", "1.2V"
|
||||
};
|
||||
static char *pre_emph_names[] = {
|
||||
"0dB", "3.5dB", "6dB", "9.5dB"
|
||||
};
|
||||
static char *link_train_names[] = {
|
||||
"pattern 1", "pattern 2", "idle", "off"
|
||||
};
|
||||
#endif
|
||||
|
||||
#define CDV_DP_VOLTAGE_MAX DP_TRAIN_VOLTAGE_SWING_LEVEL_3
|
||||
/*
|
||||
static uint8_t
|
||||
cdv_intel_dp_pre_emphasis_max(uint8_t voltage_swing)
|
||||
{
|
||||
switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
|
||||
case DP_TRAIN_VOLTAGE_SWING_400:
|
||||
return DP_TRAIN_PRE_EMPHASIS_6;
|
||||
case DP_TRAIN_VOLTAGE_SWING_600:
|
||||
return DP_TRAIN_PRE_EMPHASIS_6;
|
||||
case DP_TRAIN_VOLTAGE_SWING_800:
|
||||
return DP_TRAIN_PRE_EMPHASIS_3_5;
|
||||
case DP_TRAIN_VOLTAGE_SWING_1200:
|
||||
default:
|
||||
return DP_TRAIN_PRE_EMPHASIS_0;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
static void
|
||||
cdv_intel_get_adjust_train(struct gma_encoder *encoder)
|
||||
{
|
||||
|
|
|
@ -74,89 +74,6 @@ static u32 cdv_intel_lvds_get_max_backlight(struct drm_device *dev)
|
|||
return retval;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* Set LVDS backlight level by I2C command
|
||||
*/
|
||||
static int cdv_lvds_i2c_set_brightness(struct drm_device *dev,
|
||||
unsigned int level)
|
||||
{
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
struct psb_intel_i2c_chan *lvds_i2c_bus = dev_priv->lvds_i2c_bus;
|
||||
u8 out_buf[2];
|
||||
unsigned int blc_i2c_brightness;
|
||||
|
||||
struct i2c_msg msgs[] = {
|
||||
{
|
||||
.addr = lvds_i2c_bus->slave_addr,
|
||||
.flags = 0,
|
||||
.len = 2,
|
||||
.buf = out_buf,
|
||||
}
|
||||
};
|
||||
|
||||
blc_i2c_brightness = BRIGHTNESS_MASK & ((unsigned int)level *
|
||||
BRIGHTNESS_MASK /
|
||||
BRIGHTNESS_MAX_LEVEL);
|
||||
|
||||
if (dev_priv->lvds_bl->pol == BLC_POLARITY_INVERSE)
|
||||
blc_i2c_brightness = BRIGHTNESS_MASK - blc_i2c_brightness;
|
||||
|
||||
out_buf[0] = dev_priv->lvds_bl->brightnesscmd;
|
||||
out_buf[1] = (u8)blc_i2c_brightness;
|
||||
|
||||
if (i2c_transfer(&lvds_i2c_bus->adapter, msgs, 1) == 1)
|
||||
return 0;
|
||||
|
||||
DRM_ERROR("I2C transfer error\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
static int cdv_lvds_pwm_set_brightness(struct drm_device *dev, int level)
|
||||
{
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
|
||||
u32 max_pwm_blc;
|
||||
u32 blc_pwm_duty_cycle;
|
||||
|
||||
max_pwm_blc = cdv_intel_lvds_get_max_backlight(dev);
|
||||
|
||||
/*BLC_PWM_CTL Should be initiated while backlight device init*/
|
||||
BUG_ON((max_pwm_blc & PSB_BLC_MAX_PWM_REG_FREQ) == 0);
|
||||
|
||||
blc_pwm_duty_cycle = level * max_pwm_blc / BRIGHTNESS_MAX_LEVEL;
|
||||
|
||||
if (dev_priv->lvds_bl->pol == BLC_POLARITY_INVERSE)
|
||||
blc_pwm_duty_cycle = max_pwm_blc - blc_pwm_duty_cycle;
|
||||
|
||||
blc_pwm_duty_cycle &= PSB_BACKLIGHT_PWM_POLARITY_BIT_CLEAR;
|
||||
REG_WRITE(BLC_PWM_CTL,
|
||||
(max_pwm_blc << PSB_BACKLIGHT_PWM_CTL_SHIFT) |
|
||||
(blc_pwm_duty_cycle));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set LVDS backlight level either by I2C or PWM
|
||||
*/
|
||||
void cdv_intel_lvds_set_brightness(struct drm_device *dev, int level)
|
||||
{
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
|
||||
if (!dev_priv->lvds_bl) {
|
||||
DRM_ERROR("NO LVDS Backlight Info\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (dev_priv->lvds_bl->type == BLC_I2C_TYPE)
|
||||
cdv_lvds_i2c_set_brightness(dev, level);
|
||||
else
|
||||
cdv_lvds_pwm_set_brightness(dev, level);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Sets the backlight level.
|
||||
*
|
||||
|
|
|
@ -658,16 +658,6 @@ static int mdfld_crtc_mode_set(struct drm_crtc *crtc,
|
|||
|
||||
dev_dbg(dev->dev, "pipe = 0x%x\n", pipe);
|
||||
|
||||
#if 0
|
||||
if (pipe == 1) {
|
||||
if (!gma_power_begin(dev, true))
|
||||
return 0;
|
||||
android_hdmi_crtc_mode_set(crtc, mode, adjusted_mode,
|
||||
x, y, old_fb);
|
||||
goto mrst_crtc_mode_set_exit;
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = check_fb(crtc->primary->fb);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -918,14 +908,6 @@ static int mdfld_crtc_mode_set(struct drm_crtc *crtc,
|
|||
}
|
||||
dpll = 0;
|
||||
|
||||
#if 0 /* FIXME revisit later */
|
||||
if (ksel == KSEL_CRYSTAL_19 || ksel == KSEL_BYPASS_19 ||
|
||||
ksel == KSEL_BYPASS_25)
|
||||
dpll &= ~MDFLD_INPUT_REF_SEL;
|
||||
else if (ksel == KSEL_BYPASS_83_100)
|
||||
dpll |= MDFLD_INPUT_REF_SEL;
|
||||
#endif /* FIXME revisit later */
|
||||
|
||||
if (is_hdmi)
|
||||
dpll |= MDFLD_VCO_SEL;
|
||||
|
||||
|
@ -935,20 +917,7 @@ static int mdfld_crtc_mode_set(struct drm_crtc *crtc,
|
|||
/* compute bitmask from p1 value */
|
||||
dpll |= (1 << (clock.p1 - 2)) << 17;
|
||||
|
||||
#if 0 /* 1080p30 & 720p */
|
||||
dpll = 0x00050000;
|
||||
fp = 0x000001be;
|
||||
#endif
|
||||
#if 0 /* 480p */
|
||||
dpll = 0x02010000;
|
||||
fp = 0x000000d2;
|
||||
#endif
|
||||
} else {
|
||||
#if 0 /*DBI_TPO_480x864*/
|
||||
dpll = 0x00020000;
|
||||
fp = 0x00000156;
|
||||
#endif /* DBI_TPO_480x864 */ /* get from spec. */
|
||||
|
||||
dpll = 0x00800000;
|
||||
fp = 0x000000c1;
|
||||
}
|
||||
|
|
|
@ -663,11 +663,6 @@ failed_connector:
|
|||
kfree(gma_encoder);
|
||||
}
|
||||
|
||||
static const struct pci_device_id hdmi_ids[] = {
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x080d) },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
void oaktrail_hdmi_setup(struct drm_device *dev)
|
||||
{
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
|
|
|
@ -864,36 +864,6 @@ static bool psb_intel_sdvo_set_avi_infoframe(struct psb_intel_sdvo *psb_intel_sd
|
|||
DRM_INFO("HDMI is not supported yet");
|
||||
|
||||
return false;
|
||||
#if 0
|
||||
struct dip_infoframe avi_if = {
|
||||
.type = DIP_TYPE_AVI,
|
||||
.ver = DIP_VERSION_AVI,
|
||||
.len = DIP_LEN_AVI,
|
||||
};
|
||||
uint8_t tx_rate = SDVO_HBUF_TX_VSYNC;
|
||||
uint8_t set_buf_index[2] = { 1, 0 };
|
||||
uint64_t *data = (uint64_t *)&avi_if;
|
||||
unsigned i;
|
||||
|
||||
intel_dip_infoframe_csum(&avi_if);
|
||||
|
||||
if (!psb_intel_sdvo_set_value(psb_intel_sdvo,
|
||||
SDVO_CMD_SET_HBUF_INDEX,
|
||||
set_buf_index, 2))
|
||||
return false;
|
||||
|
||||
for (i = 0; i < sizeof(avi_if); i += 8) {
|
||||
if (!psb_intel_sdvo_set_value(psb_intel_sdvo,
|
||||
SDVO_CMD_SET_HBUF_DATA,
|
||||
data, 8))
|
||||
return false;
|
||||
data++;
|
||||
}
|
||||
|
||||
return psb_intel_sdvo_set_value(psb_intel_sdvo,
|
||||
SDVO_CMD_SET_HBUF_TXRATE,
|
||||
&tx_rate, 1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static bool psb_intel_sdvo_set_tv_format(struct psb_intel_sdvo *psb_intel_sdvo)
|
||||
|
@ -1227,75 +1197,6 @@ static bool psb_intel_sdvo_get_capabilities(struct psb_intel_sdvo *psb_intel_sdv
|
|||
return true;
|
||||
}
|
||||
|
||||
/* No use! */
|
||||
#if 0
|
||||
struct drm_connector* psb_intel_sdvo_find(struct drm_device *dev, int sdvoB)
|
||||
{
|
||||
struct drm_connector *connector = NULL;
|
||||
struct psb_intel_sdvo *iout = NULL;
|
||||
struct psb_intel_sdvo *sdvo;
|
||||
|
||||
/* find the sdvo connector */
|
||||
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
|
||||
iout = to_psb_intel_sdvo(connector);
|
||||
|
||||
if (iout->type != INTEL_OUTPUT_SDVO)
|
||||
continue;
|
||||
|
||||
sdvo = iout->dev_priv;
|
||||
|
||||
if (sdvo->sdvo_reg == SDVOB && sdvoB)
|
||||
return connector;
|
||||
|
||||
if (sdvo->sdvo_reg == SDVOC && !sdvoB)
|
||||
return connector;
|
||||
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int psb_intel_sdvo_supports_hotplug(struct drm_connector *connector)
|
||||
{
|
||||
u8 response[2];
|
||||
u8 status;
|
||||
struct psb_intel_sdvo *psb_intel_sdvo;
|
||||
DRM_DEBUG_KMS("\n");
|
||||
|
||||
if (!connector)
|
||||
return 0;
|
||||
|
||||
psb_intel_sdvo = to_psb_intel_sdvo(connector);
|
||||
|
||||
return psb_intel_sdvo_get_value(psb_intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT,
|
||||
&response, 2) && response[0];
|
||||
}
|
||||
|
||||
void psb_intel_sdvo_set_hotplug(struct drm_connector *connector, int on)
|
||||
{
|
||||
u8 response[2];
|
||||
u8 status;
|
||||
struct psb_intel_sdvo *psb_intel_sdvo = to_psb_intel_sdvo(connector);
|
||||
|
||||
psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_GET_ACTIVE_HOT_PLUG, NULL, 0);
|
||||
psb_intel_sdvo_read_response(psb_intel_sdvo, &response, 2);
|
||||
|
||||
if (on) {
|
||||
psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT, NULL, 0);
|
||||
status = psb_intel_sdvo_read_response(psb_intel_sdvo, &response, 2);
|
||||
|
||||
psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_SET_ACTIVE_HOT_PLUG, &response, 2);
|
||||
} else {
|
||||
response[0] = 0;
|
||||
response[1] = 0;
|
||||
psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_SET_ACTIVE_HOT_PLUG, &response, 2);
|
||||
}
|
||||
|
||||
psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_GET_ACTIVE_HOT_PLUG, NULL, 0);
|
||||
psb_intel_sdvo_read_response(psb_intel_sdvo, &response, 2);
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool
|
||||
psb_intel_sdvo_multifunc_encoder(struct psb_intel_sdvo *psb_intel_sdvo)
|
||||
{
|
||||
|
|
|
@ -769,7 +769,7 @@ static bool rockchip_mod_supported(struct drm_plane *plane,
|
|||
return true;
|
||||
|
||||
if (!rockchip_afbc(modifier)) {
|
||||
DRM_DEBUG_KMS("Unsupported format modifer 0x%llx\n", modifier);
|
||||
DRM_DEBUG_KMS("Unsupported format modifier 0x%llx\n", modifier);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -5,12 +5,10 @@
|
|||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/pinctrl/pinconf-generic.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/pinctrl/pinmux.h>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
#include <linux/host1x.h>
|
||||
#include <linux/iova.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_edid.h>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
* Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved.
|
||||
*
|
||||
* Based on the KMS/FB CMA helpers
|
||||
* Copyright (C) 2012 Analog Device Inc.
|
||||
* Copyright (C) 2012 Analog Devices Inc.
|
||||
*/
|
||||
|
||||
#include <linux/console.h>
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
#include <linux/clk.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/hdmi.h>
|
||||
#include <linux/math64.h>
|
||||
#include <linux/module.h>
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
#include <linux/clk.h>
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_device.h>
|
||||
|
|
|
@ -472,7 +472,7 @@ config FB_OF
|
|||
|
||||
config FB_CONTROL
|
||||
bool "Apple \"control\" display support"
|
||||
depends on (FB = y) && PPC_PMAC && PPC32
|
||||
depends on (FB = y) && ((PPC_PMAC && PPC32) || COMPILE_TEST)
|
||||
select FB_CFB_FILLRECT
|
||||
select FB_CFB_COPYAREA
|
||||
select FB_CFB_IMAGEBLIT
|
||||
|
|
|
@ -544,10 +544,6 @@ static int arcfb_probe(struct platform_device *dev)
|
|||
par->cslut[1] = 0x06;
|
||||
info->flags = FBINFO_FLAG_DEFAULT;
|
||||
spin_lock_init(&par->lock);
|
||||
retval = register_framebuffer(info);
|
||||
if (retval < 0)
|
||||
goto err1;
|
||||
platform_set_drvdata(dev, info);
|
||||
if (irq) {
|
||||
par->irq = irq;
|
||||
if (request_irq(par->irq, &arcfb_interrupt, IRQF_SHARED,
|
||||
|
@ -558,6 +554,10 @@ static int arcfb_probe(struct platform_device *dev)
|
|||
goto err1;
|
||||
}
|
||||
}
|
||||
retval = register_framebuffer(info);
|
||||
if (retval < 0)
|
||||
goto err1;
|
||||
platform_set_drvdata(dev, info);
|
||||
fb_info(info, "Arc frame buffer device, using %dK of video memory\n",
|
||||
videomemorysize >> 10);
|
||||
|
||||
|
@ -593,6 +593,8 @@ static int arcfb_remove(struct platform_device *dev)
|
|||
|
||||
if (info) {
|
||||
unregister_framebuffer(info);
|
||||
if (irq)
|
||||
free_irq(((struct arcfb_par *)(info->par))->irq, info);
|
||||
vfree((void __force *)info->screen_base);
|
||||
framebuffer_release(info);
|
||||
}
|
||||
|
|
|
@ -334,20 +334,6 @@ static const struct aty128_meminfo sdr_128 = {
|
|||
.name = "128-bit SDR SGRAM (1:1)",
|
||||
};
|
||||
|
||||
static const struct aty128_meminfo sdr_64 = {
|
||||
.ML = 4,
|
||||
.MB = 8,
|
||||
.Trcd = 3,
|
||||
.Trp = 3,
|
||||
.Twr = 1,
|
||||
.CL = 3,
|
||||
.Tr2w = 1,
|
||||
.LoopLatency = 17,
|
||||
.DspOn = 46,
|
||||
.Rloop = 17,
|
||||
.name = "64-bit SDR SGRAM (1:1)",
|
||||
};
|
||||
|
||||
static const struct aty128_meminfo sdr_sgram = {
|
||||
.ML = 4,
|
||||
.MB = 4,
|
||||
|
|
|
@ -31,7 +31,6 @@
|
|||
* more details.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/string.h>
|
||||
|
@ -48,12 +47,37 @@
|
|||
#include <linux/nvram.h>
|
||||
#include <linux/adb.h>
|
||||
#include <linux/cuda.h>
|
||||
#ifdef CONFIG_PPC_PMAC
|
||||
#include <asm/prom.h>
|
||||
#include <asm/btext.h>
|
||||
#endif
|
||||
|
||||
#include "macmodes.h"
|
||||
#include "controlfb.h"
|
||||
|
||||
#ifndef CONFIG_PPC_PMAC
|
||||
#define invalid_vram_cache(addr)
|
||||
#undef in_8
|
||||
#undef out_8
|
||||
#undef in_le32
|
||||
#undef out_le32
|
||||
#define in_8(addr) 0
|
||||
#define out_8(addr, val)
|
||||
#define in_le32(addr) 0
|
||||
#define out_le32(addr, val)
|
||||
#define pgprot_cached_wthru(prot) (prot)
|
||||
#else
|
||||
static void invalid_vram_cache(void __force *addr)
|
||||
{
|
||||
eieio();
|
||||
dcbf(addr);
|
||||
mb();
|
||||
eieio();
|
||||
dcbf(addr);
|
||||
mb();
|
||||
}
|
||||
#endif
|
||||
|
||||
struct fb_par_control {
|
||||
int vmode, cmode;
|
||||
int xres, yres;
|
||||
|
@ -117,38 +141,6 @@ struct fb_info_control {
|
|||
#define CNTRL_REG(INFO,REG) (&(((INFO)->control_regs->REG).r))
|
||||
|
||||
|
||||
/******************** Prototypes for exported functions ********************/
|
||||
/*
|
||||
* struct fb_ops
|
||||
*/
|
||||
static int controlfb_pan_display(struct fb_var_screeninfo *var,
|
||||
struct fb_info *info);
|
||||
static int controlfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
|
||||
u_int transp, struct fb_info *info);
|
||||
static int controlfb_blank(int blank_mode, struct fb_info *info);
|
||||
static int controlfb_mmap(struct fb_info *info,
|
||||
struct vm_area_struct *vma);
|
||||
static int controlfb_set_par (struct fb_info *info);
|
||||
static int controlfb_check_var (struct fb_var_screeninfo *var, struct fb_info *info);
|
||||
|
||||
/******************** Prototypes for internal functions **********************/
|
||||
|
||||
static void set_control_clock(unsigned char *params);
|
||||
static int init_control(struct fb_info_control *p);
|
||||
static void control_set_hardware(struct fb_info_control *p,
|
||||
struct fb_par_control *par);
|
||||
static int control_of_init(struct device_node *dp);
|
||||
static void find_vram_size(struct fb_info_control *p);
|
||||
static int read_control_sense(struct fb_info_control *p);
|
||||
static int calc_clock_params(unsigned long clk, unsigned char *param);
|
||||
static int control_var_to_par(struct fb_var_screeninfo *var,
|
||||
struct fb_par_control *par, const struct fb_info *fb_info);
|
||||
static inline void control_par_to_var(struct fb_par_control *par,
|
||||
struct fb_var_screeninfo *var);
|
||||
static void control_init_info(struct fb_info *info, struct fb_info_control *p);
|
||||
static void control_cleanup(void);
|
||||
|
||||
|
||||
/************************** Internal variables *******************************/
|
||||
|
||||
static struct fb_info_control *control_fb;
|
||||
|
@ -157,189 +149,6 @@ static int default_vmode __initdata = VMODE_NVRAM;
|
|||
static int default_cmode __initdata = CMODE_NVRAM;
|
||||
|
||||
|
||||
static const struct fb_ops controlfb_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.fb_check_var = controlfb_check_var,
|
||||
.fb_set_par = controlfb_set_par,
|
||||
.fb_setcolreg = controlfb_setcolreg,
|
||||
.fb_pan_display = controlfb_pan_display,
|
||||
.fb_blank = controlfb_blank,
|
||||
.fb_mmap = controlfb_mmap,
|
||||
.fb_fillrect = cfb_fillrect,
|
||||
.fb_copyarea = cfb_copyarea,
|
||||
.fb_imageblit = cfb_imageblit,
|
||||
};
|
||||
|
||||
|
||||
/******************** The functions for controlfb_ops ********************/
|
||||
|
||||
#ifdef MODULE
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
int init_module(void)
|
||||
{
|
||||
struct device_node *dp;
|
||||
int ret = -ENXIO;
|
||||
|
||||
dp = of_find_node_by_name(NULL, "control");
|
||||
if (dp && !control_of_init(dp))
|
||||
ret = 0;
|
||||
of_node_put(dp);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void cleanup_module(void)
|
||||
{
|
||||
control_cleanup();
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Checks a var structure
|
||||
*/
|
||||
static int controlfb_check_var (struct fb_var_screeninfo *var, struct fb_info *info)
|
||||
{
|
||||
struct fb_par_control par;
|
||||
int err;
|
||||
|
||||
err = control_var_to_par(var, &par, info);
|
||||
if (err)
|
||||
return err;
|
||||
control_par_to_var(&par, var);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Applies current var to display
|
||||
*/
|
||||
static int controlfb_set_par (struct fb_info *info)
|
||||
{
|
||||
struct fb_info_control *p =
|
||||
container_of(info, struct fb_info_control, info);
|
||||
struct fb_par_control par;
|
||||
int err;
|
||||
|
||||
if((err = control_var_to_par(&info->var, &par, info))) {
|
||||
printk (KERN_ERR "controlfb_set_par: error calling"
|
||||
" control_var_to_par: %d.\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
control_set_hardware(p, &par);
|
||||
|
||||
info->fix.visual = (p->par.cmode == CMODE_8) ?
|
||||
FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR;
|
||||
info->fix.line_length = p->par.pitch;
|
||||
info->fix.xpanstep = 32 >> p->par.cmode;
|
||||
info->fix.ypanstep = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set screen start address according to var offset values
|
||||
*/
|
||||
static inline void set_screen_start(int xoffset, int yoffset,
|
||||
struct fb_info_control *p)
|
||||
{
|
||||
struct fb_par_control *par = &p->par;
|
||||
|
||||
par->xoffset = xoffset;
|
||||
par->yoffset = yoffset;
|
||||
out_le32(CNTRL_REG(p,start_addr),
|
||||
par->yoffset * par->pitch + (par->xoffset << par->cmode));
|
||||
}
|
||||
|
||||
|
||||
static int controlfb_pan_display(struct fb_var_screeninfo *var,
|
||||
struct fb_info *info)
|
||||
{
|
||||
unsigned int xoffset, hstep;
|
||||
struct fb_info_control *p =
|
||||
container_of(info, struct fb_info_control, info);
|
||||
struct fb_par_control *par = &p->par;
|
||||
|
||||
/*
|
||||
* make sure start addr will be 32-byte aligned
|
||||
*/
|
||||
hstep = 0x1f >> par->cmode;
|
||||
xoffset = (var->xoffset + hstep) & ~hstep;
|
||||
|
||||
if (xoffset+par->xres > par->vxres ||
|
||||
var->yoffset+par->yres > par->vyres)
|
||||
return -EINVAL;
|
||||
|
||||
set_screen_start(xoffset, var->yoffset, p);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Private mmap since we want to have a different caching on the framebuffer
|
||||
* for controlfb.
|
||||
* Note there's no locking in here; it's done in fb_mmap() in fbmem.c.
|
||||
*/
|
||||
static int controlfb_mmap(struct fb_info *info,
|
||||
struct vm_area_struct *vma)
|
||||
{
|
||||
unsigned long mmio_pgoff;
|
||||
unsigned long start;
|
||||
u32 len;
|
||||
|
||||
start = info->fix.smem_start;
|
||||
len = info->fix.smem_len;
|
||||
mmio_pgoff = PAGE_ALIGN((start & ~PAGE_MASK) + len) >> PAGE_SHIFT;
|
||||
if (vma->vm_pgoff >= mmio_pgoff) {
|
||||
if (info->var.accel_flags)
|
||||
return -EINVAL;
|
||||
vma->vm_pgoff -= mmio_pgoff;
|
||||
start = info->fix.mmio_start;
|
||||
len = info->fix.mmio_len;
|
||||
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||
} else {
|
||||
/* framebuffer */
|
||||
vma->vm_page_prot = pgprot_cached_wthru(vma->vm_page_prot);
|
||||
}
|
||||
|
||||
return vm_iomap_memory(vma, start, len);
|
||||
}
|
||||
|
||||
static int controlfb_blank(int blank_mode, struct fb_info *info)
|
||||
{
|
||||
struct fb_info_control *p =
|
||||
container_of(info, struct fb_info_control, info);
|
||||
unsigned ctrl;
|
||||
|
||||
ctrl = le32_to_cpup(CNTRL_REG(p,ctrl));
|
||||
if (blank_mode > 0)
|
||||
switch (blank_mode) {
|
||||
case FB_BLANK_VSYNC_SUSPEND:
|
||||
ctrl &= ~3;
|
||||
break;
|
||||
case FB_BLANK_HSYNC_SUSPEND:
|
||||
ctrl &= ~0x30;
|
||||
break;
|
||||
case FB_BLANK_POWERDOWN:
|
||||
ctrl &= ~0x33;
|
||||
/* fall through */
|
||||
case FB_BLANK_NORMAL:
|
||||
ctrl |= 0x400;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
else {
|
||||
ctrl &= ~0x400;
|
||||
ctrl |= 0x33;
|
||||
}
|
||||
out_le32(CNTRL_REG(p,ctrl), ctrl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int controlfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
|
||||
u_int transp, struct fb_info *info)
|
||||
{
|
||||
|
@ -396,75 +205,18 @@ static void set_control_clock(unsigned char *params)
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* finish off the driver initialization and register
|
||||
* Set screen start address according to var offset values
|
||||
*/
|
||||
static int __init init_control(struct fb_info_control *p)
|
||||
static inline void set_screen_start(int xoffset, int yoffset,
|
||||
struct fb_info_control *p)
|
||||
{
|
||||
int full, sense, vmode, cmode, vyres;
|
||||
struct fb_var_screeninfo var;
|
||||
int rc;
|
||||
|
||||
printk(KERN_INFO "controlfb: ");
|
||||
struct fb_par_control *par = &p->par;
|
||||
|
||||
full = p->total_vram == 0x400000;
|
||||
|
||||
/* Try to pick a video mode out of NVRAM if we have one. */
|
||||
cmode = default_cmode;
|
||||
if (IS_REACHABLE(CONFIG_NVRAM) && cmode == CMODE_NVRAM)
|
||||
cmode = nvram_read_byte(NV_CMODE);
|
||||
if (cmode < CMODE_8 || cmode > CMODE_32)
|
||||
cmode = CMODE_8;
|
||||
|
||||
vmode = default_vmode;
|
||||
if (IS_REACHABLE(CONFIG_NVRAM) && vmode == VMODE_NVRAM)
|
||||
vmode = nvram_read_byte(NV_VMODE);
|
||||
if (vmode < 1 || vmode > VMODE_MAX ||
|
||||
control_mac_modes[vmode - 1].m[full] < cmode) {
|
||||
sense = read_control_sense(p);
|
||||
printk(KERN_CONT "Monitor sense value = 0x%x, ", sense);
|
||||
vmode = mac_map_monitor_sense(sense);
|
||||
if (control_mac_modes[vmode - 1].m[full] < 0)
|
||||
vmode = VMODE_640_480_60;
|
||||
cmode = min(cmode, control_mac_modes[vmode - 1].m[full]);
|
||||
}
|
||||
|
||||
/* Initialize info structure */
|
||||
control_init_info(&p->info, p);
|
||||
|
||||
/* Setup default var */
|
||||
if (mac_vmode_to_var(vmode, cmode, &var) < 0) {
|
||||
/* This shouldn't happen! */
|
||||
printk("mac_vmode_to_var(%d, %d,) failed\n", vmode, cmode);
|
||||
try_again:
|
||||
vmode = VMODE_640_480_60;
|
||||
cmode = CMODE_8;
|
||||
if (mac_vmode_to_var(vmode, cmode, &var) < 0) {
|
||||
printk(KERN_ERR "controlfb: mac_vmode_to_var() failed\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
printk(KERN_INFO "controlfb: ");
|
||||
}
|
||||
printk("using video mode %d and color mode %d.\n", vmode, cmode);
|
||||
|
||||
vyres = (p->total_vram - CTRLFB_OFF) / (var.xres << cmode);
|
||||
if (vyres > var.yres)
|
||||
var.yres_virtual = vyres;
|
||||
|
||||
/* Apply default var */
|
||||
var.activate = FB_ACTIVATE_NOW;
|
||||
rc = fb_set_var(&p->info, &var);
|
||||
if (rc && (vmode != VMODE_640_480_60 || cmode != CMODE_8))
|
||||
goto try_again;
|
||||
|
||||
/* Register with fbdev layer */
|
||||
if (register_framebuffer(&p->info) < 0)
|
||||
return -ENXIO;
|
||||
|
||||
fb_info(&p->info, "control display adapter\n");
|
||||
|
||||
return 0;
|
||||
par->xoffset = xoffset;
|
||||
par->yoffset = yoffset;
|
||||
out_le32(CNTRL_REG(p,start_addr),
|
||||
par->yoffset * par->pitch + (par->xoffset << par->cmode));
|
||||
}
|
||||
|
||||
#define RADACAL_WRITE(a,d) \
|
||||
|
@ -528,67 +280,6 @@ static void control_set_hardware(struct fb_info_control *p, struct fb_par_contro
|
|||
#endif /* CONFIG_BOOTX_TEXT */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Parse user specified options (`video=controlfb:')
|
||||
*/
|
||||
static void __init control_setup(char *options)
|
||||
{
|
||||
char *this_opt;
|
||||
|
||||
if (!options || !*options)
|
||||
return;
|
||||
|
||||
while ((this_opt = strsep(&options, ",")) != NULL) {
|
||||
if (!strncmp(this_opt, "vmode:", 6)) {
|
||||
int vmode = simple_strtoul(this_opt+6, NULL, 0);
|
||||
if (vmode > 0 && vmode <= VMODE_MAX &&
|
||||
control_mac_modes[vmode - 1].m[1] >= 0)
|
||||
default_vmode = vmode;
|
||||
} else if (!strncmp(this_opt, "cmode:", 6)) {
|
||||
int depth = simple_strtoul(this_opt+6, NULL, 0);
|
||||
switch (depth) {
|
||||
case CMODE_8:
|
||||
case CMODE_16:
|
||||
case CMODE_32:
|
||||
default_cmode = depth;
|
||||
break;
|
||||
case 8:
|
||||
default_cmode = CMODE_8;
|
||||
break;
|
||||
case 15:
|
||||
case 16:
|
||||
default_cmode = CMODE_16;
|
||||
break;
|
||||
case 24:
|
||||
case 32:
|
||||
default_cmode = CMODE_32;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int __init control_init(void)
|
||||
{
|
||||
struct device_node *dp;
|
||||
char *option = NULL;
|
||||
int ret = -ENXIO;
|
||||
|
||||
if (fb_get_options("controlfb", &option))
|
||||
return -ENODEV;
|
||||
control_setup(option);
|
||||
|
||||
dp = of_find_node_by_name(NULL, "control");
|
||||
if (dp && !control_of_init(dp))
|
||||
ret = 0;
|
||||
of_node_put(dp);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
module_init(control_init);
|
||||
|
||||
/* Work out which banks of VRAM we have installed. */
|
||||
/* danj: I guess the card just ignores writes to nonexistant VRAM... */
|
||||
|
||||
|
@ -605,12 +296,7 @@ static void __init find_vram_size(struct fb_info_control *p)
|
|||
|
||||
out_8(&p->frame_buffer[0x600000], 0xb3);
|
||||
out_8(&p->frame_buffer[0x600001], 0x71);
|
||||
asm volatile("eieio; dcbf 0,%0" : : "r" (&p->frame_buffer[0x600000])
|
||||
: "memory" );
|
||||
mb();
|
||||
asm volatile("eieio; dcbi 0,%0" : : "r" (&p->frame_buffer[0x600000])
|
||||
: "memory" );
|
||||
mb();
|
||||
invalid_vram_cache(&p->frame_buffer[0x600000]);
|
||||
|
||||
bank2 = (in_8(&p->frame_buffer[0x600000]) == 0xb3)
|
||||
&& (in_8(&p->frame_buffer[0x600001]) == 0x71);
|
||||
|
@ -624,12 +310,7 @@ static void __init find_vram_size(struct fb_info_control *p)
|
|||
|
||||
out_8(&p->frame_buffer[0], 0x5a);
|
||||
out_8(&p->frame_buffer[1], 0xc7);
|
||||
asm volatile("eieio; dcbf 0,%0" : : "r" (&p->frame_buffer[0])
|
||||
: "memory" );
|
||||
mb();
|
||||
asm volatile("eieio; dcbi 0,%0" : : "r" (&p->frame_buffer[0])
|
||||
: "memory" );
|
||||
mb();
|
||||
invalid_vram_cache(&p->frame_buffer[0]);
|
||||
|
||||
bank1 = (in_8(&p->frame_buffer[0]) == 0x5a)
|
||||
&& (in_8(&p->frame_buffer[1]) == 0xc7);
|
||||
|
@ -663,78 +344,6 @@ static void __init find_vram_size(struct fb_info_control *p)
|
|||
(bank1 + bank2) << 1, bank1 << 1, bank2 << 1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* find "control" and initialize
|
||||
*/
|
||||
static int __init control_of_init(struct device_node *dp)
|
||||
{
|
||||
struct fb_info_control *p;
|
||||
struct resource fb_res, reg_res;
|
||||
|
||||
if (control_fb) {
|
||||
printk(KERN_ERR "controlfb: only one control is supported\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
if (of_pci_address_to_resource(dp, 2, &fb_res) ||
|
||||
of_pci_address_to_resource(dp, 1, ®_res)) {
|
||||
printk(KERN_ERR "can't get 2 addresses for control\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
p = kzalloc(sizeof(*p), GFP_KERNEL);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
control_fb = p; /* save it for cleanups */
|
||||
|
||||
/* Map in frame buffer and registers */
|
||||
p->fb_orig_base = fb_res.start;
|
||||
p->fb_orig_size = resource_size(&fb_res);
|
||||
/* use the big-endian aperture (??) */
|
||||
p->frame_buffer_phys = fb_res.start + 0x800000;
|
||||
p->control_regs_phys = reg_res.start;
|
||||
p->control_regs_size = resource_size(®_res);
|
||||
|
||||
if (!p->fb_orig_base ||
|
||||
!request_mem_region(p->fb_orig_base,p->fb_orig_size,"controlfb")) {
|
||||
p->fb_orig_base = 0;
|
||||
goto error_out;
|
||||
}
|
||||
/* map at most 8MB for the frame buffer */
|
||||
p->frame_buffer = ioremap_wt(p->frame_buffer_phys, 0x800000);
|
||||
|
||||
if (!p->control_regs_phys ||
|
||||
!request_mem_region(p->control_regs_phys, p->control_regs_size,
|
||||
"controlfb regs")) {
|
||||
p->control_regs_phys = 0;
|
||||
goto error_out;
|
||||
}
|
||||
p->control_regs = ioremap(p->control_regs_phys, p->control_regs_size);
|
||||
|
||||
p->cmap_regs_phys = 0xf301b000; /* XXX not in prom? */
|
||||
if (!request_mem_region(p->cmap_regs_phys, 0x1000, "controlfb cmap")) {
|
||||
p->cmap_regs_phys = 0;
|
||||
goto error_out;
|
||||
}
|
||||
p->cmap_regs = ioremap(p->cmap_regs_phys, 0x1000);
|
||||
|
||||
if (!p->cmap_regs || !p->control_regs || !p->frame_buffer)
|
||||
goto error_out;
|
||||
|
||||
find_vram_size(p);
|
||||
if (!p->total_vram)
|
||||
goto error_out;
|
||||
|
||||
if (init_control(p) < 0)
|
||||
goto error_out;
|
||||
|
||||
return 0;
|
||||
|
||||
error_out:
|
||||
control_cleanup();
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the monitor sense value.
|
||||
* Note that this can be called before calibrate_delay,
|
||||
|
@ -1019,6 +628,150 @@ static void control_par_to_var(struct fb_par_control *par, struct fb_var_screeni
|
|||
var->pixclock >>= par->regvals.clock_params[2];
|
||||
}
|
||||
|
||||
/******************** The functions for controlfb_ops ********************/
|
||||
|
||||
/*
|
||||
* Checks a var structure
|
||||
*/
|
||||
static int controlfb_check_var (struct fb_var_screeninfo *var, struct fb_info *info)
|
||||
{
|
||||
struct fb_par_control par;
|
||||
int err;
|
||||
|
||||
err = control_var_to_par(var, &par, info);
|
||||
if (err)
|
||||
return err;
|
||||
control_par_to_var(&par, var);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Applies current var to display
|
||||
*/
|
||||
static int controlfb_set_par (struct fb_info *info)
|
||||
{
|
||||
struct fb_info_control *p =
|
||||
container_of(info, struct fb_info_control, info);
|
||||
struct fb_par_control par;
|
||||
int err;
|
||||
|
||||
if((err = control_var_to_par(&info->var, &par, info))) {
|
||||
printk (KERN_ERR "controlfb_set_par: error calling"
|
||||
" control_var_to_par: %d.\n", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
control_set_hardware(p, &par);
|
||||
|
||||
info->fix.visual = (p->par.cmode == CMODE_8) ?
|
||||
FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR;
|
||||
info->fix.line_length = p->par.pitch;
|
||||
info->fix.xpanstep = 32 >> p->par.cmode;
|
||||
info->fix.ypanstep = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int controlfb_pan_display(struct fb_var_screeninfo *var,
|
||||
struct fb_info *info)
|
||||
{
|
||||
unsigned int xoffset, hstep;
|
||||
struct fb_info_control *p =
|
||||
container_of(info, struct fb_info_control, info);
|
||||
struct fb_par_control *par = &p->par;
|
||||
|
||||
/*
|
||||
* make sure start addr will be 32-byte aligned
|
||||
*/
|
||||
hstep = 0x1f >> par->cmode;
|
||||
xoffset = (var->xoffset + hstep) & ~hstep;
|
||||
|
||||
if (xoffset+par->xres > par->vxres ||
|
||||
var->yoffset+par->yres > par->vyres)
|
||||
return -EINVAL;
|
||||
|
||||
set_screen_start(xoffset, var->yoffset, p);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int controlfb_blank(int blank_mode, struct fb_info *info)
|
||||
{
|
||||
struct fb_info_control __maybe_unused *p =
|
||||
container_of(info, struct fb_info_control, info);
|
||||
unsigned ctrl;
|
||||
|
||||
ctrl = in_le32(CNTRL_REG(p, ctrl));
|
||||
if (blank_mode > 0)
|
||||
switch (blank_mode) {
|
||||
case FB_BLANK_VSYNC_SUSPEND:
|
||||
ctrl &= ~3;
|
||||
break;
|
||||
case FB_BLANK_HSYNC_SUSPEND:
|
||||
ctrl &= ~0x30;
|
||||
break;
|
||||
case FB_BLANK_POWERDOWN:
|
||||
ctrl &= ~0x33;
|
||||
/* fall through */
|
||||
case FB_BLANK_NORMAL:
|
||||
ctrl |= 0x400;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
else {
|
||||
ctrl &= ~0x400;
|
||||
ctrl |= 0x33;
|
||||
}
|
||||
out_le32(CNTRL_REG(p,ctrl), ctrl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Private mmap since we want to have a different caching on the framebuffer
|
||||
* for controlfb.
|
||||
* Note there's no locking in here; it's done in fb_mmap() in fbmem.c.
|
||||
*/
|
||||
static int controlfb_mmap(struct fb_info *info,
|
||||
struct vm_area_struct *vma)
|
||||
{
|
||||
unsigned long mmio_pgoff;
|
||||
unsigned long start;
|
||||
u32 len;
|
||||
|
||||
start = info->fix.smem_start;
|
||||
len = info->fix.smem_len;
|
||||
mmio_pgoff = PAGE_ALIGN((start & ~PAGE_MASK) + len) >> PAGE_SHIFT;
|
||||
if (vma->vm_pgoff >= mmio_pgoff) {
|
||||
if (info->var.accel_flags)
|
||||
return -EINVAL;
|
||||
vma->vm_pgoff -= mmio_pgoff;
|
||||
start = info->fix.mmio_start;
|
||||
len = info->fix.mmio_len;
|
||||
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
|
||||
} else {
|
||||
/* framebuffer */
|
||||
vma->vm_page_prot = pgprot_cached_wthru(vma->vm_page_prot);
|
||||
}
|
||||
|
||||
return vm_iomap_memory(vma, start, len);
|
||||
}
|
||||
|
||||
static const struct fb_ops controlfb_ops = {
|
||||
.owner = THIS_MODULE,
|
||||
.fb_check_var = controlfb_check_var,
|
||||
.fb_set_par = controlfb_set_par,
|
||||
.fb_setcolreg = controlfb_setcolreg,
|
||||
.fb_pan_display = controlfb_pan_display,
|
||||
.fb_blank = controlfb_blank,
|
||||
.fb_mmap = controlfb_mmap,
|
||||
.fb_fillrect = cfb_fillrect,
|
||||
.fb_copyarea = cfb_copyarea,
|
||||
.fb_imageblit = cfb_imageblit,
|
||||
};
|
||||
|
||||
/*
|
||||
* Set misc info vars for this driver
|
||||
*/
|
||||
|
@ -1045,6 +798,115 @@ static void __init control_init_info(struct fb_info *info, struct fb_info_contro
|
|||
info->fix.accel = FB_ACCEL_NONE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Parse user specified options (`video=controlfb:')
|
||||
*/
|
||||
static void __init control_setup(char *options)
|
||||
{
|
||||
char *this_opt;
|
||||
|
||||
if (!options || !*options)
|
||||
return;
|
||||
|
||||
while ((this_opt = strsep(&options, ",")) != NULL) {
|
||||
if (!strncmp(this_opt, "vmode:", 6)) {
|
||||
int vmode = simple_strtoul(this_opt+6, NULL, 0);
|
||||
if (vmode > 0 && vmode <= VMODE_MAX &&
|
||||
control_mac_modes[vmode - 1].m[1] >= 0)
|
||||
default_vmode = vmode;
|
||||
} else if (!strncmp(this_opt, "cmode:", 6)) {
|
||||
int depth = simple_strtoul(this_opt+6, NULL, 0);
|
||||
switch (depth) {
|
||||
case CMODE_8:
|
||||
case CMODE_16:
|
||||
case CMODE_32:
|
||||
default_cmode = depth;
|
||||
break;
|
||||
case 8:
|
||||
default_cmode = CMODE_8;
|
||||
break;
|
||||
case 15:
|
||||
case 16:
|
||||
default_cmode = CMODE_16;
|
||||
break;
|
||||
case 24:
|
||||
case 32:
|
||||
default_cmode = CMODE_32;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* finish off the driver initialization and register
|
||||
*/
|
||||
static int __init init_control(struct fb_info_control *p)
|
||||
{
|
||||
int full, sense, vmode, cmode, vyres;
|
||||
struct fb_var_screeninfo var;
|
||||
int rc;
|
||||
|
||||
printk(KERN_INFO "controlfb: ");
|
||||
|
||||
full = p->total_vram == 0x400000;
|
||||
|
||||
/* Try to pick a video mode out of NVRAM if we have one. */
|
||||
cmode = default_cmode;
|
||||
if (IS_REACHABLE(CONFIG_NVRAM) && cmode == CMODE_NVRAM)
|
||||
cmode = nvram_read_byte(NV_CMODE);
|
||||
if (cmode < CMODE_8 || cmode > CMODE_32)
|
||||
cmode = CMODE_8;
|
||||
|
||||
vmode = default_vmode;
|
||||
if (IS_REACHABLE(CONFIG_NVRAM) && vmode == VMODE_NVRAM)
|
||||
vmode = nvram_read_byte(NV_VMODE);
|
||||
if (vmode < 1 || vmode > VMODE_MAX ||
|
||||
control_mac_modes[vmode - 1].m[full] < cmode) {
|
||||
sense = read_control_sense(p);
|
||||
printk(KERN_CONT "Monitor sense value = 0x%x, ", sense);
|
||||
vmode = mac_map_monitor_sense(sense);
|
||||
if (control_mac_modes[vmode - 1].m[full] < 0)
|
||||
vmode = VMODE_640_480_60;
|
||||
cmode = min(cmode, control_mac_modes[vmode - 1].m[full]);
|
||||
}
|
||||
|
||||
/* Initialize info structure */
|
||||
control_init_info(&p->info, p);
|
||||
|
||||
/* Setup default var */
|
||||
if (mac_vmode_to_var(vmode, cmode, &var) < 0) {
|
||||
/* This shouldn't happen! */
|
||||
printk("mac_vmode_to_var(%d, %d,) failed\n", vmode, cmode);
|
||||
try_again:
|
||||
vmode = VMODE_640_480_60;
|
||||
cmode = CMODE_8;
|
||||
if (mac_vmode_to_var(vmode, cmode, &var) < 0) {
|
||||
printk(KERN_ERR "controlfb: mac_vmode_to_var() failed\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
printk(KERN_INFO "controlfb: ");
|
||||
}
|
||||
printk("using video mode %d and color mode %d.\n", vmode, cmode);
|
||||
|
||||
vyres = (p->total_vram - CTRLFB_OFF) / (var.xres << cmode);
|
||||
if (vyres > var.yres)
|
||||
var.yres_virtual = vyres;
|
||||
|
||||
/* Apply default var */
|
||||
var.activate = FB_ACTIVATE_NOW;
|
||||
rc = fb_set_var(&p->info, &var);
|
||||
if (rc && (vmode != VMODE_640_480_60 || cmode != CMODE_8))
|
||||
goto try_again;
|
||||
|
||||
/* Register with fbdev layer */
|
||||
if (register_framebuffer(&p->info) < 0)
|
||||
return -ENXIO;
|
||||
|
||||
fb_info(&p->info, "control display adapter\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void control_cleanup(void)
|
||||
{
|
||||
|
@ -1071,4 +933,93 @@ static void control_cleanup(void)
|
|||
kfree(p);
|
||||
}
|
||||
|
||||
/*
|
||||
* find "control" and initialize
|
||||
*/
|
||||
static int __init control_of_init(struct device_node *dp)
|
||||
{
|
||||
struct fb_info_control *p;
|
||||
struct resource fb_res, reg_res;
|
||||
|
||||
if (control_fb) {
|
||||
printk(KERN_ERR "controlfb: only one control is supported\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
if (of_pci_address_to_resource(dp, 2, &fb_res) ||
|
||||
of_pci_address_to_resource(dp, 1, ®_res)) {
|
||||
printk(KERN_ERR "can't get 2 addresses for control\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
p = kzalloc(sizeof(*p), GFP_KERNEL);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
control_fb = p; /* save it for cleanups */
|
||||
|
||||
/* Map in frame buffer and registers */
|
||||
p->fb_orig_base = fb_res.start;
|
||||
p->fb_orig_size = resource_size(&fb_res);
|
||||
/* use the big-endian aperture (??) */
|
||||
p->frame_buffer_phys = fb_res.start + 0x800000;
|
||||
p->control_regs_phys = reg_res.start;
|
||||
p->control_regs_size = resource_size(®_res);
|
||||
|
||||
if (!p->fb_orig_base ||
|
||||
!request_mem_region(p->fb_orig_base,p->fb_orig_size,"controlfb")) {
|
||||
p->fb_orig_base = 0;
|
||||
goto error_out;
|
||||
}
|
||||
/* map at most 8MB for the frame buffer */
|
||||
p->frame_buffer = ioremap_wt(p->frame_buffer_phys, 0x800000);
|
||||
|
||||
if (!p->control_regs_phys ||
|
||||
!request_mem_region(p->control_regs_phys, p->control_regs_size,
|
||||
"controlfb regs")) {
|
||||
p->control_regs_phys = 0;
|
||||
goto error_out;
|
||||
}
|
||||
p->control_regs = ioremap(p->control_regs_phys, p->control_regs_size);
|
||||
|
||||
p->cmap_regs_phys = 0xf301b000; /* XXX not in prom? */
|
||||
if (!request_mem_region(p->cmap_regs_phys, 0x1000, "controlfb cmap")) {
|
||||
p->cmap_regs_phys = 0;
|
||||
goto error_out;
|
||||
}
|
||||
p->cmap_regs = ioremap(p->cmap_regs_phys, 0x1000);
|
||||
|
||||
if (!p->cmap_regs || !p->control_regs || !p->frame_buffer)
|
||||
goto error_out;
|
||||
|
||||
find_vram_size(p);
|
||||
if (!p->total_vram)
|
||||
goto error_out;
|
||||
|
||||
if (init_control(p) < 0)
|
||||
goto error_out;
|
||||
|
||||
return 0;
|
||||
|
||||
error_out:
|
||||
control_cleanup();
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
static int __init control_init(void)
|
||||
{
|
||||
struct device_node *dp;
|
||||
char *option = NULL;
|
||||
int ret = -ENXIO;
|
||||
|
||||
if (fb_get_options("controlfb", &option))
|
||||
return -ENODEV;
|
||||
control_setup(option);
|
||||
|
||||
dp = of_find_node_by_name(NULL, "control");
|
||||
if (dp && !control_of_init(dp))
|
||||
ret = 0;
|
||||
of_node_put(dp);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
device_initcall(control_init);
|
||||
|
|
|
@ -172,6 +172,7 @@ struct imxfb_info {
|
|||
int num_modes;
|
||||
|
||||
struct regulator *lcd_pwr;
|
||||
int lcd_pwr_enabled;
|
||||
};
|
||||
|
||||
static const struct platform_device_id imxfb_devtype[] = {
|
||||
|
@ -801,16 +802,30 @@ static int imxfb_lcd_get_power(struct lcd_device *lcddev)
|
|||
return FB_BLANK_UNBLANK;
|
||||
}
|
||||
|
||||
static int imxfb_regulator_set(struct imxfb_info *fbi, int enable)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (enable == fbi->lcd_pwr_enabled)
|
||||
return 0;
|
||||
|
||||
if (enable)
|
||||
ret = regulator_enable(fbi->lcd_pwr);
|
||||
else
|
||||
ret = regulator_disable(fbi->lcd_pwr);
|
||||
|
||||
if (ret == 0)
|
||||
fbi->lcd_pwr_enabled = enable;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int imxfb_lcd_set_power(struct lcd_device *lcddev, int power)
|
||||
{
|
||||
struct imxfb_info *fbi = dev_get_drvdata(&lcddev->dev);
|
||||
|
||||
if (!IS_ERR(fbi->lcd_pwr)) {
|
||||
if (power == FB_BLANK_UNBLANK)
|
||||
return regulator_enable(fbi->lcd_pwr);
|
||||
else
|
||||
return regulator_disable(fbi->lcd_pwr);
|
||||
}
|
||||
if (!IS_ERR(fbi->lcd_pwr))
|
||||
return imxfb_regulator_set(fbi, power == FB_BLANK_UNBLANK);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -209,49 +209,6 @@ static const struct venc_config venc_config_ntsc_trm = {
|
|||
.gen_ctrl = 0x00F90000,
|
||||
};
|
||||
|
||||
static const struct venc_config venc_config_pal_bdghi = {
|
||||
.f_control = 0,
|
||||
.vidout_ctrl = 0,
|
||||
.sync_ctrl = 0,
|
||||
.hfltr_ctrl = 0,
|
||||
.x_color = 0,
|
||||
.line21 = 0,
|
||||
.ln_sel = 21,
|
||||
.htrigger_vtrigger = 0,
|
||||
.tvdetgp_int_start_stop_x = 0x00140001,
|
||||
.tvdetgp_int_start_stop_y = 0x00010001,
|
||||
.gen_ctrl = 0x00FB0000,
|
||||
|
||||
.llen = 864-1,
|
||||
.flens = 625-1,
|
||||
.cc_carr_wss_carr = 0x2F7625ED,
|
||||
.c_phase = 0xDF,
|
||||
.gain_u = 0x111,
|
||||
.gain_v = 0x181,
|
||||
.gain_y = 0x140,
|
||||
.black_level = 0x3e,
|
||||
.blank_level = 0x3e,
|
||||
.m_control = 0<<2 | 1<<1,
|
||||
.bstamp_wss_data = 0x42,
|
||||
.s_carr = 0x2a098acb,
|
||||
.l21__wc_ctl = 0<<13 | 0x16<<8 | 0<<0,
|
||||
.savid__eavid = 0x06A70108,
|
||||
.flen__fal = 23<<16 | 624<<0,
|
||||
.lal__phase_reset = 2<<17 | 310<<0,
|
||||
.hs_int_start_stop_x = 0x00920358,
|
||||
.hs_ext_start_stop_x = 0x000F035F,
|
||||
.vs_int_start_x = 0x1a7<<16,
|
||||
.vs_int_stop_x__vs_int_start_y = 0x000601A7,
|
||||
.vs_int_stop_y__vs_ext_start_x = 0x01AF0036,
|
||||
.vs_ext_stop_x__vs_ext_start_y = 0x27101af,
|
||||
.vs_ext_stop_y = 0x05,
|
||||
.avid_start_stop_x = 0x03530082,
|
||||
.avid_start_stop_y = 0x0270002E,
|
||||
.fid_int_start_x__fid_int_start_y = 0x0005008A,
|
||||
.fid_int_offset_y__fid_ext_start_x = 0x002E0138,
|
||||
.fid_ext_start_y__fid_ext_offset_y = 0x01380005,
|
||||
};
|
||||
|
||||
const struct omap_video_timings omap_dss_pal_timings = {
|
||||
.x_res = 720,
|
||||
.y_res = 574,
|
||||
|
|
|
@ -721,9 +721,7 @@ static void s1d13xxxfb_fetch_hw_state(struct fb_info *info)
|
|||
xres, yres, xres_virtual, yres_virtual, is_color, is_dual, is_tft);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
s1d13xxxfb_remove(struct platform_device *pdev)
|
||||
static void __s1d13xxxfb_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct fb_info *info = platform_get_drvdata(pdev);
|
||||
struct s1d13xxxfb_par *par = NULL;
|
||||
|
@ -749,6 +747,14 @@ s1d13xxxfb_remove(struct platform_device *pdev)
|
|||
resource_size(&pdev->resource[0]));
|
||||
release_mem_region(pdev->resource[1].start,
|
||||
resource_size(&pdev->resource[1]));
|
||||
}
|
||||
|
||||
static int s1d13xxxfb_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct fb_info *info = platform_get_drvdata(pdev);
|
||||
|
||||
unregister_framebuffer(info);
|
||||
__s1d13xxxfb_remove(pdev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -895,7 +901,7 @@ static int s1d13xxxfb_probe(struct platform_device *pdev)
|
|||
return 0;
|
||||
|
||||
bail:
|
||||
s1d13xxxfb_remove(pdev);
|
||||
__s1d13xxxfb_remove(pdev);
|
||||
return ret;
|
||||
|
||||
}
|
||||
|
|
|
@ -173,7 +173,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/cpufreq.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/mutex.h>
|
||||
|
@ -799,8 +799,8 @@ static void sa1100fb_enable_controller(struct sa1100fb_info *fbi)
|
|||
writel_relaxed(fbi->dbar2, fbi->base + DBAR2);
|
||||
writel_relaxed(fbi->reg_lccr0 | LCCR0_LEN, fbi->base + LCCR0);
|
||||
|
||||
if (machine_is_shannon())
|
||||
gpio_set_value(SHANNON_GPIO_DISP_EN, 1);
|
||||
if (fbi->shannon_lcden)
|
||||
gpiod_set_value(fbi->shannon_lcden, 1);
|
||||
|
||||
dev_dbg(fbi->dev, "DBAR1: 0x%08x\n", readl_relaxed(fbi->base + DBAR1));
|
||||
dev_dbg(fbi->dev, "DBAR2: 0x%08x\n", readl_relaxed(fbi->base + DBAR2));
|
||||
|
@ -817,8 +817,8 @@ static void sa1100fb_disable_controller(struct sa1100fb_info *fbi)
|
|||
|
||||
dev_dbg(fbi->dev, "Disabling LCD controller\n");
|
||||
|
||||
if (machine_is_shannon())
|
||||
gpio_set_value(SHANNON_GPIO_DISP_EN, 0);
|
||||
if (fbi->shannon_lcden)
|
||||
gpiod_set_value(fbi->shannon_lcden, 0);
|
||||
|
||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
add_wait_queue(&fbi->ctrlr_wait, &wait);
|
||||
|
@ -1173,12 +1173,10 @@ static int sa1100fb_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
if (machine_is_shannon()) {
|
||||
ret = devm_gpio_request_one(&pdev->dev, SHANNON_GPIO_DISP_EN,
|
||||
GPIOF_OUT_INIT_LOW, "display enable");
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
fbi->shannon_lcden = gpiod_get_optional(&pdev->dev, "shannon-lcden",
|
||||
GPIOD_OUT_LOW);
|
||||
if (IS_ERR(fbi->shannon_lcden))
|
||||
return PTR_ERR(fbi->shannon_lcden);
|
||||
|
||||
/* Initialize video memory */
|
||||
ret = sa1100fb_map_video_memory(fbi);
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
* for more details.
|
||||
*/
|
||||
|
||||
struct gpio_desc;
|
||||
|
||||
#define LCCR0 0x0000 /* LCD Control Reg. 0 */
|
||||
#define LCSR 0x0004 /* LCD Status Reg. */
|
||||
#define DBAR1 0x0010 /* LCD DMA Base Address Reg. channel 1 */
|
||||
|
@ -33,6 +35,7 @@ struct sa1100fb_info {
|
|||
struct device *dev;
|
||||
const struct sa1100fb_rgb *rgb[NR_RGB];
|
||||
void __iomem *base;
|
||||
struct gpio_desc *shannon_lcden;
|
||||
|
||||
/*
|
||||
* These are the addresses we mapped
|
||||
|
|
|
@ -12,8 +12,7 @@
|
|||
#include <linux/i2c.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/pwm.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
@ -49,8 +48,6 @@
|
|||
static u_int refreshrate = REFRESHRATE;
|
||||
module_param(refreshrate, uint, 0);
|
||||
|
||||
struct ssd1307fb_par;
|
||||
|
||||
struct ssd1307fb_deviceinfo {
|
||||
u32 default_vcomh;
|
||||
u32 default_dclk_div;
|
||||
|
@ -80,7 +77,6 @@ struct ssd1307fb_par {
|
|||
u32 prechargep1;
|
||||
u32 prechargep2;
|
||||
struct pwm_device *pwm;
|
||||
u32 pwm_period;
|
||||
struct gpio_desc *reset;
|
||||
struct regulator *vbat_reg;
|
||||
u32 vcomh;
|
||||
|
@ -298,9 +294,9 @@ static void ssd1307fb_deferred_io(struct fb_info *info,
|
|||
|
||||
static int ssd1307fb_init(struct ssd1307fb_par *par)
|
||||
{
|
||||
struct pwm_state pwmstate;
|
||||
int ret;
|
||||
u32 precharge, dclk, com_invdir, compins;
|
||||
struct pwm_args pargs;
|
||||
|
||||
if (par->device_info->need_pwm) {
|
||||
par->pwm = pwm_get(&par->client->dev, NULL);
|
||||
|
@ -309,21 +305,15 @@ static int ssd1307fb_init(struct ssd1307fb_par *par)
|
|||
return PTR_ERR(par->pwm);
|
||||
}
|
||||
|
||||
/*
|
||||
* FIXME: pwm_apply_args() should be removed when switching to
|
||||
* the atomic PWM API.
|
||||
*/
|
||||
pwm_apply_args(par->pwm);
|
||||
pwm_init_state(par->pwm, &pwmstate);
|
||||
pwm_set_relative_duty_cycle(&pwmstate, 50, 100);
|
||||
pwm_apply_state(par->pwm, &pwmstate);
|
||||
|
||||
pwm_get_args(par->pwm, &pargs);
|
||||
|
||||
par->pwm_period = pargs.period;
|
||||
/* Enable the PWM */
|
||||
pwm_config(par->pwm, par->pwm_period / 2, par->pwm_period);
|
||||
pwm_enable(par->pwm);
|
||||
|
||||
dev_dbg(&par->client->dev, "Using PWM%d with a %dns period.\n",
|
||||
par->pwm->pwm, par->pwm_period);
|
||||
par->pwm->pwm, pwm_get_period(par->pwm));
|
||||
}
|
||||
|
||||
/* Set initial contrast */
|
||||
|
@ -586,25 +576,19 @@ static const struct of_device_id ssd1307fb_of_match[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(of, ssd1307fb_of_match);
|
||||
|
||||
static int ssd1307fb_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id)
|
||||
static int ssd1307fb_probe(struct i2c_client *client)
|
||||
{
|
||||
struct device *dev = &client->dev;
|
||||
struct backlight_device *bl;
|
||||
char bl_name[12];
|
||||
struct fb_info *info;
|
||||
struct device_node *node = client->dev.of_node;
|
||||
struct fb_deferred_io *ssd1307fb_defio;
|
||||
u32 vmem_size;
|
||||
struct ssd1307fb_par *par;
|
||||
void *vmem;
|
||||
int ret;
|
||||
|
||||
if (!node) {
|
||||
dev_err(&client->dev, "No device tree data found!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
info = framebuffer_alloc(sizeof(struct ssd1307fb_par), &client->dev);
|
||||
info = framebuffer_alloc(sizeof(struct ssd1307fb_par), dev);
|
||||
if (!info)
|
||||
return -ENOMEM;
|
||||
|
||||
|
@ -612,67 +596,65 @@ static int ssd1307fb_probe(struct i2c_client *client,
|
|||
par->info = info;
|
||||
par->client = client;
|
||||
|
||||
par->device_info = of_device_get_match_data(&client->dev);
|
||||
par->device_info = device_get_match_data(dev);
|
||||
|
||||
par->reset = devm_gpiod_get_optional(&client->dev, "reset",
|
||||
GPIOD_OUT_LOW);
|
||||
par->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(par->reset)) {
|
||||
dev_err(&client->dev, "failed to get reset gpio: %ld\n",
|
||||
dev_err(dev, "failed to get reset gpio: %ld\n",
|
||||
PTR_ERR(par->reset));
|
||||
ret = PTR_ERR(par->reset);
|
||||
goto fb_alloc_error;
|
||||
}
|
||||
|
||||
par->vbat_reg = devm_regulator_get_optional(&client->dev, "vbat");
|
||||
par->vbat_reg = devm_regulator_get_optional(dev, "vbat");
|
||||
if (IS_ERR(par->vbat_reg)) {
|
||||
ret = PTR_ERR(par->vbat_reg);
|
||||
if (ret == -ENODEV) {
|
||||
par->vbat_reg = NULL;
|
||||
} else {
|
||||
dev_err(&client->dev, "failed to get VBAT regulator: %d\n",
|
||||
ret);
|
||||
dev_err(dev, "failed to get VBAT regulator: %d\n", ret);
|
||||
goto fb_alloc_error;
|
||||
}
|
||||
}
|
||||
|
||||
if (of_property_read_u32(node, "solomon,width", &par->width))
|
||||
if (device_property_read_u32(dev, "solomon,width", &par->width))
|
||||
par->width = 96;
|
||||
|
||||
if (of_property_read_u32(node, "solomon,height", &par->height))
|
||||
if (device_property_read_u32(dev, "solomon,height", &par->height))
|
||||
par->height = 16;
|
||||
|
||||
if (of_property_read_u32(node, "solomon,page-offset", &par->page_offset))
|
||||
if (device_property_read_u32(dev, "solomon,page-offset", &par->page_offset))
|
||||
par->page_offset = 1;
|
||||
|
||||
if (of_property_read_u32(node, "solomon,com-offset", &par->com_offset))
|
||||
if (device_property_read_u32(dev, "solomon,com-offset", &par->com_offset))
|
||||
par->com_offset = 0;
|
||||
|
||||
if (of_property_read_u32(node, "solomon,prechargep1", &par->prechargep1))
|
||||
if (device_property_read_u32(dev, "solomon,prechargep1", &par->prechargep1))
|
||||
par->prechargep1 = 2;
|
||||
|
||||
if (of_property_read_u32(node, "solomon,prechargep2", &par->prechargep2))
|
||||
if (device_property_read_u32(dev, "solomon,prechargep2", &par->prechargep2))
|
||||
par->prechargep2 = 2;
|
||||
|
||||
if (!of_property_read_u8_array(node, "solomon,lookup-table",
|
||||
par->lookup_table,
|
||||
ARRAY_SIZE(par->lookup_table)))
|
||||
if (!device_property_read_u8_array(dev, "solomon,lookup-table",
|
||||
par->lookup_table,
|
||||
ARRAY_SIZE(par->lookup_table)))
|
||||
par->lookup_table_set = 1;
|
||||
|
||||
par->seg_remap = !of_property_read_bool(node, "solomon,segment-no-remap");
|
||||
par->com_seq = of_property_read_bool(node, "solomon,com-seq");
|
||||
par->com_lrremap = of_property_read_bool(node, "solomon,com-lrremap");
|
||||
par->com_invdir = of_property_read_bool(node, "solomon,com-invdir");
|
||||
par->seg_remap = !device_property_read_bool(dev, "solomon,segment-no-remap");
|
||||
par->com_seq = device_property_read_bool(dev, "solomon,com-seq");
|
||||
par->com_lrremap = device_property_read_bool(dev, "solomon,com-lrremap");
|
||||
par->com_invdir = device_property_read_bool(dev, "solomon,com-invdir");
|
||||
par->area_color_enable =
|
||||
of_property_read_bool(node, "solomon,area-color-enable");
|
||||
par->low_power = of_property_read_bool(node, "solomon,low-power");
|
||||
device_property_read_bool(dev, "solomon,area-color-enable");
|
||||
par->low_power = device_property_read_bool(dev, "solomon,low-power");
|
||||
|
||||
par->contrast = 127;
|
||||
par->vcomh = par->device_info->default_vcomh;
|
||||
|
||||
/* Setup display timing */
|
||||
if (of_property_read_u32(node, "solomon,dclk-div", &par->dclk_div))
|
||||
if (device_property_read_u32(dev, "solomon,dclk-div", &par->dclk_div))
|
||||
par->dclk_div = par->device_info->default_dclk_div;
|
||||
if (of_property_read_u32(node, "solomon,dclk-frq", &par->dclk_frq))
|
||||
if (device_property_read_u32(dev, "solomon,dclk-frq", &par->dclk_frq))
|
||||
par->dclk_frq = par->device_info->default_dclk_frq;
|
||||
|
||||
vmem_size = DIV_ROUND_UP(par->width, 8) * par->height;
|
||||
|
@ -680,15 +662,15 @@ static int ssd1307fb_probe(struct i2c_client *client,
|
|||
vmem = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
|
||||
get_order(vmem_size));
|
||||
if (!vmem) {
|
||||
dev_err(&client->dev, "Couldn't allocate graphical memory.\n");
|
||||
dev_err(dev, "Couldn't allocate graphical memory.\n");
|
||||
ret = -ENOMEM;
|
||||
goto fb_alloc_error;
|
||||
}
|
||||
|
||||
ssd1307fb_defio = devm_kzalloc(&client->dev, sizeof(*ssd1307fb_defio),
|
||||
ssd1307fb_defio = devm_kzalloc(dev, sizeof(*ssd1307fb_defio),
|
||||
GFP_KERNEL);
|
||||
if (!ssd1307fb_defio) {
|
||||
dev_err(&client->dev, "Couldn't allocate deferred io.\n");
|
||||
dev_err(dev, "Couldn't allocate deferred io.\n");
|
||||
ret = -ENOMEM;
|
||||
goto fb_alloc_error;
|
||||
}
|
||||
|
@ -726,8 +708,7 @@ static int ssd1307fb_probe(struct i2c_client *client,
|
|||
if (par->vbat_reg) {
|
||||
ret = regulator_enable(par->vbat_reg);
|
||||
if (ret) {
|
||||
dev_err(&client->dev, "failed to enable VBAT: %d\n",
|
||||
ret);
|
||||
dev_err(dev, "failed to enable VBAT: %d\n", ret);
|
||||
goto reset_oled_error;
|
||||
}
|
||||
}
|
||||
|
@ -738,17 +719,16 @@ static int ssd1307fb_probe(struct i2c_client *client,
|
|||
|
||||
ret = register_framebuffer(info);
|
||||
if (ret) {
|
||||
dev_err(&client->dev, "Couldn't register the framebuffer\n");
|
||||
dev_err(dev, "Couldn't register the framebuffer\n");
|
||||
goto panel_init_error;
|
||||
}
|
||||
|
||||
snprintf(bl_name, sizeof(bl_name), "ssd1307fb%d", info->node);
|
||||
bl = backlight_device_register(bl_name, &client->dev, par,
|
||||
&ssd1307fb_bl_ops, NULL);
|
||||
bl = backlight_device_register(bl_name, dev, par, &ssd1307fb_bl_ops,
|
||||
NULL);
|
||||
if (IS_ERR(bl)) {
|
||||
ret = PTR_ERR(bl);
|
||||
dev_err(&client->dev, "unable to register backlight device: %d\n",
|
||||
ret);
|
||||
dev_err(dev, "unable to register backlight device: %d\n", ret);
|
||||
goto bl_init_error;
|
||||
}
|
||||
|
||||
|
@ -756,7 +736,7 @@ static int ssd1307fb_probe(struct i2c_client *client,
|
|||
bl->props.max_brightness = MAX_CONTRAST;
|
||||
info->bl_dev = bl;
|
||||
|
||||
dev_info(&client->dev, "fb%d: %s framebuffer device registered, using %d bytes of video memory\n", info->node, info->fix.id, vmem_size);
|
||||
dev_info(dev, "fb%d: %s framebuffer device registered, using %d bytes of video memory\n", info->node, info->fix.id, vmem_size);
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -810,7 +790,7 @@ static const struct i2c_device_id ssd1307fb_i2c_id[] = {
|
|||
MODULE_DEVICE_TABLE(i2c, ssd1307fb_i2c_id);
|
||||
|
||||
static struct i2c_driver ssd1307fb_driver = {
|
||||
.probe = ssd1307fb_probe,
|
||||
.probe_new = ssd1307fb_probe,
|
||||
.remove = ssd1307fb_remove,
|
||||
.id_table = ssd1307fb_i2c_id,
|
||||
.driver = {
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
struct vesafb_par {
|
||||
u32 pseudo_palette[256];
|
||||
int wc_cookie;
|
||||
struct resource *region;
|
||||
};
|
||||
|
||||
static struct fb_var_screeninfo vesafb_defined = {
|
||||
|
@ -411,7 +412,7 @@ static int vesafb_probe(struct platform_device *dev)
|
|||
|
||||
/* request failure does not faze us, as vgacon probably has this
|
||||
* region already (FIXME) */
|
||||
request_region(0x3c0, 32, "vesafb");
|
||||
par->region = request_region(0x3c0, 32, "vesafb");
|
||||
|
||||
if (mtrr == 3) {
|
||||
unsigned int temp_size = size_total;
|
||||
|
@ -439,7 +440,7 @@ static int vesafb_probe(struct platform_device *dev)
|
|||
"vesafb: abort, cannot ioremap video memory 0x%x @ 0x%lx\n",
|
||||
vesafb_fix.smem_len, vesafb_fix.smem_start);
|
||||
err = -EIO;
|
||||
goto err;
|
||||
goto err_release_region;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "vesafb: framebuffer at 0x%lx, mapped to 0x%p, "
|
||||
|
@ -458,19 +459,22 @@ static int vesafb_probe(struct platform_device *dev)
|
|||
|
||||
if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) {
|
||||
err = -ENOMEM;
|
||||
goto err;
|
||||
goto err_release_region;
|
||||
}
|
||||
if (register_framebuffer(info)<0) {
|
||||
err = -EINVAL;
|
||||
fb_dealloc_cmap(&info->cmap);
|
||||
goto err;
|
||||
goto err_release_region;
|
||||
}
|
||||
fb_info(info, "%s frame buffer device\n", info->fix.id);
|
||||
return 0;
|
||||
err:
|
||||
err_release_region:
|
||||
arch_phys_wc_del(par->wc_cookie);
|
||||
if (info->screen_base)
|
||||
iounmap(info->screen_base);
|
||||
if (par->region)
|
||||
release_region(0x3c0, 32);
|
||||
err:
|
||||
framebuffer_release(info);
|
||||
release_mem_region(vesafb_fix.smem_start, size_total);
|
||||
return err;
|
||||
|
@ -481,6 +485,8 @@ static int vesafb_remove(struct platform_device *pdev)
|
|||
struct fb_info *info = platform_get_drvdata(pdev);
|
||||
|
||||
unregister_framebuffer(info);
|
||||
if (((struct vesafb_par *)(info->par))->region)
|
||||
release_region(0x3c0, 32);
|
||||
framebuffer_release(info);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -230,6 +230,7 @@ static int vt8500lcd_blank(int blank, struct fb_info *info)
|
|||
info->fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR)
|
||||
for (i = 0; i < 256; i++)
|
||||
vt8500lcd_setcolreg(i, 0, 0, 0, 0, info);
|
||||
fallthrough;
|
||||
case FB_BLANK_UNBLANK:
|
||||
if (info->fix.visual == FB_VISUAL_PSEUDOCOLOR ||
|
||||
info->fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR)
|
||||
|
|
|
@ -88,9 +88,12 @@ struct drm_device {
|
|||
/**
|
||||
* @dev_private:
|
||||
*
|
||||
* DRM driver private data. Instead of using this pointer it is
|
||||
* recommended that drivers use drm_dev_init() and embed struct
|
||||
* &drm_device in their larger per-device structure.
|
||||
* DRM driver private data. This is deprecated and should be left set to
|
||||
* NULL.
|
||||
*
|
||||
* Instead of using this pointer it is recommended that drivers use
|
||||
* drm_dev_init() and embed struct &drm_device in their larger
|
||||
* per-device structure.
|
||||
*/
|
||||
void *dev_private;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче