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

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

+2162 -1809
+1 -1
Documentation/devicetree/bindings/display/allwinner,sun6i-a31-mipi-dsi.yaml
··· 119 119 panel@0 { 120 120 compatible = "bananapi,lhr050h41", "ilitek,ili9881c"; 121 121 reg = <0>; 122 - power-gpios = <&pio 1 7 0>; /* PB07 */ 122 + power-supply = <&reg_display>; 123 123 reset-gpios = <&r_pio 0 5 1>; /* PL05 */ 124 124 backlight = <&pwm_bl>; 125 125 };
+2 -2
Documentation/devicetree/bindings/display/dsi-controller.yaml
··· 28 28 29 29 properties: 30 30 $nodename: 31 - pattern: "^dsi-controller(@.*)?$" 31 + pattern: "^dsi(@.*)?$" 32 32 33 33 "#address-cells": 34 34 const: 1 ··· 76 76 examples: 77 77 - | 78 78 #include <dt-bindings/gpio/gpio.h> 79 - dsi-controller@a0351000 { 79 + dsi@a0351000 { 80 80 reg = <0xa0351000 0x1000>; 81 81 #address-cells = <1>; 82 82 #size-cells = <0>;
-31
Documentation/devicetree/bindings/display/panel/arm,versatile-tft-panel.txt
··· 1 - ARM Versatile TFT Panels 2 - 3 - These panels are connected to the daughterboards found on the 4 - ARM Versatile reference designs. 5 - 6 - This device node must appear as a child to a "syscon"-compatible 7 - node. 8 - 9 - Required properties: 10 - - compatible: should be "arm,versatile-tft-panel" 11 - 12 - Required subnodes: 13 - - port: see display/panel/panel-common.yaml, graph.txt 14 - 15 - 16 - Example: 17 - 18 - sysreg@0 { 19 - compatible = "arm,versatile-sysreg", "syscon", "simple-mfd"; 20 - reg = <0x00000 0x1000>; 21 - 22 - panel: display@0 { 23 - compatible = "arm,versatile-tft-panel"; 24 - 25 - port { 26 - panel_in: endpoint { 27 - remote-endpoint = <&foo>; 28 - }; 29 - }; 30 - }; 31 - };
+54
Documentation/devicetree/bindings/display/panel/arm,versatile-tft-panel.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/arm,versatile-tft-panel.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: ARM Versatile TFT Panels 8 + 9 + maintainers: 10 + - Linus Walleij <linus.walleij@linaro.org> 11 + 12 + description: | 13 + These panels are connected to the daughterboards found on the 14 + ARM Versatile reference designs. 15 + 16 + This device node must appear as a child to a "syscon"-compatible 17 + node. 18 + 19 + allOf: 20 + - $ref: panel-common.yaml# 21 + 22 + properties: 23 + compatible: 24 + const: arm,versatile-tft-panel 25 + 26 + port: true 27 + 28 + required: 29 + - compatible 30 + - port 31 + 32 + additionalProperties: false 33 + 34 + examples: 35 + - | 36 + sysreg { 37 + compatible = "arm,versatile-sysreg", "syscon", "simple-mfd"; 38 + reg = <0x00000 0x1000>; 39 + 40 + #address-cells = <1>; 41 + #size-cells = <0>; 42 + 43 + panel { 44 + compatible = "arm,versatile-tft-panel"; 45 + 46 + port { 47 + panel_in: endpoint { 48 + remote-endpoint = <&foo>; 49 + }; 50 + }; 51 + }; 52 + }; 53 + 54 + ...
-24
Documentation/devicetree/bindings/display/panel/boe,himax8279d.txt
··· 1 - Boe Himax8279d 1200x1920 TFT LCD panel 2 - 3 - Required properties: 4 - - compatible: should be "boe,himax8279d8p" and one of: "boe,himax8279d10p" 5 - - reg: DSI virtual channel of the peripheral 6 - - enable-gpios: panel enable gpio 7 - - pp33-gpios: a GPIO phandle for the 3.3v pin that provides the supply voltage 8 - - pp18-gpios: a GPIO phandle for the 1.8v pin that provides the supply voltage 9 - 10 - Optional properties: 11 - - backlight: phandle of the backlight device attached to the panel 12 - 13 - Example: 14 - 15 - &mipi_dsi { 16 - panel { 17 - compatible = "boe,himax8279d8p", "boe,himax8279d10p"; 18 - reg = <0>; 19 - backlight = <&backlight>; 20 - enable-gpios = <&gpio 45 GPIO_ACTIVE_HIGH>; 21 - pp33-gpios = <&gpio 35 GPIO_ACTIVE_HIGH>; 22 - pp18-gpios = <&gpio 36 GPIO_ACTIVE_HIGH>; 23 - }; 24 - };
+59
Documentation/devicetree/bindings/display/panel/boe,himax8279d.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/boe,himax8279d.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Boe Himax8279d 1200x1920 TFT LCD panel 8 + 9 + maintainers: 10 + - Jerry Han <jerry.han.hq@gmail.com> 11 + 12 + allOf: 13 + - $ref: panel-common.yaml# 14 + 15 + properties: 16 + compatible: 17 + items: 18 + - const: boe,himax8279d8p 19 + - const: boe,himax8279d10p 20 + 21 + backlight: true 22 + enable-gpios: true 23 + reg: true 24 + 25 + pp33-gpios: 26 + maxItems: 1 27 + description: GPIO for the 3.3v pin that provides the supply voltage 28 + 29 + pp18-gpios: 30 + maxItems: 1 31 + description: GPIO for the 1.8v pin that provides the supply voltage 32 + 33 + required: 34 + - compatible 35 + - reg 36 + - enable-gpios 37 + - pp33-gpios 38 + - pp18-gpios 39 + 40 + additionalProperties: false 41 + 42 + examples: 43 + - | 44 + #include <dt-bindings/gpio/gpio.h> 45 + 46 + dsi { 47 + #address-cells = <1>; 48 + #size-cells = <0>; 49 + panel@0 { 50 + compatible = "boe,himax8279d8p", "boe,himax8279d10p"; 51 + reg = <0>; 52 + backlight = <&backlight>; 53 + enable-gpios = <&gpio 45 GPIO_ACTIVE_HIGH>; 54 + pp33-gpios = <&gpio 35 GPIO_ACTIVE_HIGH>; 55 + pp18-gpios = <&gpio 36 GPIO_ACTIVE_HIGH>; 56 + }; 57 + }; 58 + 59 + ...
-49
Documentation/devicetree/bindings/display/panel/ilitek,ili9322.txt
··· 1 - Ilitek ILI9322 TFT panel driver with SPI control bus 2 - 3 - This is a driver for 320x240 TFT panels, accepting a variety of input 4 - streams that get adapted and scaled to the panel. The panel output has 5 - 960 TFT source driver pins and 240 TFT gate driver pins, VCOM, VCOML and 6 - VCOMH outputs. 7 - 8 - Required properties: 9 - - compatible: "dlink,dir-685-panel", "ilitek,ili9322" 10 - (full system-specific compatible is always required to look up configuration) 11 - - reg: address of the panel on the SPI bus 12 - 13 - Optional properties: 14 - - vcc-supply: core voltage supply, see regulator/regulator.txt 15 - - iovcc-supply: voltage supply for the interface input/output signals, 16 - see regulator/regulator.txt 17 - - vci-supply: voltage supply for analog parts, see regulator/regulator.txt 18 - - reset-gpios: a GPIO spec for the reset pin, see gpio/gpio.txt 19 - 20 - The following optional properties only apply to RGB and YUV input modes and 21 - can be omitted for BT.656 input modes: 22 - 23 - - pixelclk-active: see display/panel/display-timing.txt 24 - - de-active: see display/panel/display-timing.txt 25 - - hsync-active: see display/panel/display-timing.txt 26 - - vsync-active: see display/panel/display-timing.txt 27 - 28 - The panel must obey the rules for a SPI slave device as specified in 29 - spi/spi-bus.txt 30 - 31 - The device node can contain one 'port' child node with one child 32 - 'endpoint' node, according to the bindings defined in 33 - media/video-interfaces.txt. This node should describe panel's video bus. 34 - 35 - Example: 36 - 37 - panel: display@0 { 38 - compatible = "dlink,dir-685-panel", "ilitek,ili9322"; 39 - reg = <0>; 40 - vcc-supply = <&vdisp>; 41 - iovcc-supply = <&vdisp>; 42 - vci-supply = <&vdisp>; 43 - 44 - port { 45 - panel_in: endpoint { 46 - remote-endpoint = <&display_out>; 47 - }; 48 - }; 49 - };
+71
Documentation/devicetree/bindings/display/panel/ilitek,ili9322.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/ilitek,ili9322.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Ilitek ILI9322 TFT panel driver with SPI control bus 8 + 9 + maintainers: 10 + - Linus Walleij <linus.walleij@linaro.org> 11 + 12 + description: | 13 + This is a driver for 320x240 TFT panels, accepting a variety of input 14 + streams that get adapted and scaled to the panel. The panel output has 15 + 960 TFT source driver pins and 240 TFT gate driver pins, VCOM, VCOML and 16 + VCOMH outputs. 17 + 18 + The panel must obey the rules for a SPI slave device as specified in 19 + spi/spi-controller.yaml 20 + 21 + allOf: 22 + - $ref: panel-common.yaml# 23 + 24 + properties: 25 + compatible: 26 + items: 27 + - enum: 28 + - dlink,dir-685-panel 29 + 30 + - const: ilitek,ili9322 31 + 32 + reset-gpios: true 33 + port: true 34 + 35 + vcc-supply: 36 + description: Core voltage supply 37 + 38 + iovcc-supply: 39 + description: Voltage supply for the interface input/output signals 40 + 41 + vci-supply: 42 + description: Voltage supply for analog parts 43 + 44 + required: 45 + - compatible 46 + - reg 47 + 48 + unevaluatedProperties: false 49 + 50 + examples: 51 + - | 52 + spi { 53 + #address-cells = <1>; 54 + #size-cells = <0>; 55 + 56 + panel: display@0 { 57 + compatible = "dlink,dir-685-panel", "ilitek,ili9322"; 58 + reg = <0>; 59 + vcc-supply = <&vdisp>; 60 + iovcc-supply = <&vdisp>; 61 + vci-supply = <&vdisp>; 62 + 63 + port { 64 + panel_in: endpoint { 65 + remote-endpoint = <&display_out>; 66 + }; 67 + }; 68 + }; 69 + }; 70 + 71 + ...
-20
Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.txt
··· 1 - Ilitek ILI9881c based MIPI-DSI panels 2 - 3 - Required properties: 4 - - compatible: must be "ilitek,ili9881c" and one of: 5 - * "bananapi,lhr050h41" 6 - - reg: DSI virtual channel used by that screen 7 - - power-supply: phandle to the power regulator 8 - - reset-gpios: a GPIO phandle for the reset pin 9 - 10 - Optional properties: 11 - - backlight: phandle to the backlight used 12 - 13 - Example: 14 - panel@0 { 15 - compatible = "bananapi,lhr050h41", "ilitek,ili9881c"; 16 - reg = <0>; 17 - power-supply = <&reg_display>; 18 - reset-gpios = <&r_pio 0 5 GPIO_ACTIVE_LOW>; /* PL05 */ 19 - backlight = <&pwm_bl>; 20 - };
+50
Documentation/devicetree/bindings/display/panel/ilitek,ili9881c.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/ilitek,ili9881c.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Ilitek ILI9881c based MIPI-DSI panels 8 + 9 + maintainers: 10 + - Maxime Ripard <mripard@kernel.org> 11 + 12 + properties: 13 + compatible: 14 + items: 15 + - enum: 16 + - bananapi,lhr050h41 17 + 18 + - const: ilitek,ili9881c 19 + 20 + backlight: true 21 + power-supply: true 22 + reg: true 23 + reset-gpios: true 24 + 25 + required: 26 + - compatible 27 + - power-supply 28 + - reg 29 + - reset-gpios 30 + 31 + additionalProperties: false 32 + 33 + examples: 34 + - | 35 + #include <dt-bindings/gpio/gpio.h> 36 + 37 + dsi { 38 + #address-cells = <1>; 39 + #size-cells = <0>; 40 + 41 + panel@0 { 42 + compatible = "bananapi,lhr050h41", "ilitek,ili9881c"; 43 + reg = <0>; 44 + power-supply = <&reg_display>; 45 + reset-gpios = <&r_pio 0 5 GPIO_ACTIVE_LOW>; /* PL05 */ 46 + backlight = <&pwm_bl>; 47 + }; 48 + }; 49 + 50 + ...
-24
Documentation/devicetree/bindings/display/panel/innolux,p097pfg.txt
··· 1 - Innolux P097PFG 9.7" 1536x2048 TFT LCD panel 2 - 3 - Required properties: 4 - - compatible: should be "innolux,p097pfg" 5 - - reg: DSI virtual channel of the peripheral 6 - - avdd-supply: phandle of the regulator that provides positive voltage 7 - - avee-supply: phandle of the regulator that provides negative voltage 8 - - enable-gpios: panel enable gpio 9 - 10 - Optional properties: 11 - - backlight: phandle of the backlight device attached to the panel 12 - 13 - Example: 14 - 15 - &mipi_dsi { 16 - panel@0 { 17 - compatible = "innolux,p079zca"; 18 - reg = <0>; 19 - avdd-supply = <...>; 20 - avee-supply = <...>; 21 - backlight = <&backlight>; 22 - enable-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>; 23 - }; 24 - };
+56
Documentation/devicetree/bindings/display/panel/innolux,p097pfg.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/innolux,p097pfg.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Innolux P097PFG 9.7" 1536x2048 TFT LCD panel 8 + 9 + maintainers: 10 + - Lin Huang <hl@rock-chips.com> 11 + 12 + allOf: 13 + - $ref: panel-common.yaml# 14 + 15 + properties: 16 + compatible: 17 + const: innolux,p097pfg 18 + 19 + backlight: true 20 + enable-gpios: true 21 + reg: true 22 + 23 + avdd-supply: 24 + description: The regulator that provides positive voltage 25 + 26 + avee-supply: 27 + description: The regulator that provides negative voltage 28 + 29 + required: 30 + - compatible 31 + - reg 32 + - avdd-supply 33 + - avee-supply 34 + - enable-gpios 35 + 36 + additionalProperties: false 37 + 38 + examples: 39 + - | 40 + #include <dt-bindings/gpio/gpio.h> 41 + 42 + dsi { 43 + #address-cells = <1>; 44 + #size-cells = <0>; 45 + 46 + panel@0 { 47 + compatible = "innolux,p097pfg"; 48 + reg = <0>; 49 + avdd-supply = <&avdd>; 50 + avee-supply = <&avee>; 51 + backlight = <&backlight>; 52 + enable-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>; 53 + }; 54 + }; 55 + 56 + ...
-22
Documentation/devicetree/bindings/display/panel/innolux,p120zdg-bf1.txt
··· 1 - Innolux P120ZDG-BF1 12.02 inch eDP 2K display panel 2 - 3 - This binding is compatible with the simple-panel binding, which is specified 4 - in simple-panel.txt in this directory. 5 - 6 - Required properties: 7 - - compatible: should be "innolux,p120zdg-bf1" 8 - - power-supply: regulator to provide the supply voltage 9 - 10 - Optional properties: 11 - - enable-gpios: GPIO pin to enable or disable the panel 12 - - backlight: phandle of the backlight device attached to the panel 13 - - no-hpd: If HPD isn't hooked up; add this property. 14 - 15 - Example: 16 - panel_edp: panel-edp { 17 - compatible = "innolux,p120zdg-bf1"; 18 - enable-gpios = <&msmgpio 31 GPIO_ACTIVE_LOW>; 19 - power-supply = <&pm8916_l2>; 20 - backlight = <&backlight>; 21 - no-hpd; 22 - };
+43
Documentation/devicetree/bindings/display/panel/innolux,p120zdg-bf1.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/innolux,p120zdg-bf1.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Innolux P120ZDG-BF1 12.02 inch eDP 2K display panel 8 + 9 + maintainers: 10 + - Sandeep Panda <spanda@codeaurora.org> 11 + - Douglas Anderson <dianders@chromium.org> 12 + 13 + allOf: 14 + - $ref: panel-common.yaml# 15 + 16 + properties: 17 + compatible: 18 + const: innolux,p120zdg-bf1 19 + 20 + enable-gpios: true 21 + power-supply: true 22 + backlight: true 23 + no-hpd: true 24 + 25 + required: 26 + - compatible 27 + - power-supply 28 + 29 + additionalProperties: false 30 + 31 + examples: 32 + - | 33 + #include <dt-bindings/gpio/gpio.h> 34 + 35 + panel_edp: panel-edp { 36 + compatible = "innolux,p120zdg-bf1"; 37 + enable-gpios = <&msmgpio 31 GPIO_ACTIVE_LOW>; 38 + power-supply = <&pm8916_l2>; 39 + backlight = <&backlight>; 40 + no-hpd; 41 + }; 42 + 43 + ...
-31
Documentation/devicetree/bindings/display/panel/jdi,lt070me05000.txt
··· 1 - JDI model LT070ME05000 1200x1920 7" DSI Panel 2 - 3 - Required properties: 4 - - compatible: should be "jdi,lt070me05000" 5 - - vddp-supply: phandle of the regulator that provides the supply voltage 6 - Power IC supply (3-5V) 7 - - iovcc-supply: phandle of the regulator that provides the supply voltage 8 - IOVCC , power supply for LCM (1.8V) 9 - - enable-gpios: phandle of gpio for enable line 10 - LED_EN, LED backlight enable, High active 11 - - reset-gpios: phandle of gpio for reset line 12 - This should be 8mA, gpio can be configured using mux, pinctrl, pinctrl-names 13 - XRES, Reset, Low active 14 - - dcdc-en-gpios: phandle of the gpio for power ic line 15 - Power IC supply enable, High active 16 - 17 - Example: 18 - 19 - dsi0: qcom,mdss_dsi@4700000 { 20 - panel@0 { 21 - compatible = "jdi,lt070me05000"; 22 - reg = <0>; 23 - 24 - vddp-supply = <&pm8921_l17>; 25 - iovcc-supply = <&pm8921_lvs7>; 26 - 27 - enable-gpios = <&pm8921_gpio 36 GPIO_ACTIVE_HIGH>; 28 - reset-gpios = <&tlmm_pinmux 54 GPIO_ACTIVE_LOW>; 29 - dcdc-en-gpios = <&pm8921_gpio 23 GPIO_ACTIVE_HIGH>; 30 - }; 31 - };
+69
Documentation/devicetree/bindings/display/panel/jdi,lt070me05000.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/jdi,lt070me05000.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: JDI model LT070ME05000 1200x1920 7" DSI Panel 8 + 9 + maintainers: 10 + - Vinay Simha BN <simhavcs@gmail.com> 11 + 12 + allOf: 13 + - $ref: panel-common.yaml# 14 + 15 + properties: 16 + compatible: 17 + const: jdi,lt070me05000 18 + 19 + enable-gpios: true 20 + reg: true 21 + reset-gpios: true 22 + 23 + vddp-supply: 24 + description: | 25 + The regulator that provides the supply voltage Power IC supply (3-5V) 26 + 27 + iovcc-supply: 28 + description: | 29 + The regulator that provides the supply voltage IOVCC, 30 + power supply for LCM (1.8V) 31 + 32 + dcdc-en-gpios: 33 + description: | 34 + phandle of the gpio for power ic line 35 + Power IC supply enable, High active 36 + 37 + required: 38 + - compatible 39 + - reg 40 + - vddp-supply 41 + - iovcc-supply 42 + - enable-gpios 43 + - reset-gpios 44 + - dcdc-en-gpios 45 + 46 + additionalProperties: false 47 + 48 + examples: 49 + - | 50 + #include <dt-bindings/gpio/gpio.h> 51 + 52 + dsi { 53 + #address-cells = <1>; 54 + #size-cells = <0>; 55 + 56 + panel@0 { 57 + compatible = "jdi,lt070me05000"; 58 + reg = <0>; 59 + 60 + vddp-supply = <&pm8921_l17>; 61 + iovcc-supply = <&pm8921_lvs7>; 62 + 63 + enable-gpios = <&pm8921_gpio 36 GPIO_ACTIVE_HIGH>; 64 + reset-gpios = <&tlmm_pinmux 54 GPIO_ACTIVE_LOW>; 65 + dcdc-en-gpios = <&pm8921_gpio 23 GPIO_ACTIVE_HIGH>; 66 + }; 67 + }; 68 + 69 + ...
-42
Documentation/devicetree/bindings/display/panel/kingdisplay,kd035g6-54nt.txt
··· 1 - King Display KD035G6-54NT 3.5" (320x240 pixels) 24-bit TFT LCD panel 2 - 3 - Required properties: 4 - - compatible: should be "kingdisplay,kd035g6-54nt" 5 - - power-supply: See panel-common.txt 6 - - reset-gpios: See panel-common.txt 7 - 8 - Optional properties: 9 - - backlight: see panel-common.txt 10 - 11 - The generic bindings for the SPI slaves documented in [1] also apply. 12 - 13 - The device node can contain one 'port' child node with one child 14 - 'endpoint' node, according to the bindings defined in [2]. This 15 - node should describe panel's video bus. 16 - 17 - [1]: Documentation/devicetree/bindings/spi/spi-bus.txt 18 - [2]: Documentation/devicetree/bindings/graph.txt 19 - 20 - Example: 21 - 22 - &spi { 23 - panel@0 { 24 - compatible = "kingdisplay,kd035g6-54nt"; 25 - reg = <0>; 26 - 27 - spi-max-frequency = <3125000>; 28 - spi-3wire; 29 - spi-cs-high; 30 - 31 - reset-gpios = <&gpe 2 GPIO_ACTIVE_LOW>; 32 - 33 - backlight = <&backlight>; 34 - power-supply = <&ldo6>; 35 - 36 - port { 37 - panel_input: endpoint { 38 - remote-endpoint = <&panel_output>; 39 - }; 40 - }; 41 - }; 42 - };
+65
Documentation/devicetree/bindings/display/panel/kingdisplay,kd035g6-54nt.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/kingdisplay,kd035g6-54nt.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: King Display KD035G6-54NT 3.5" (320x240 pixels) 24-bit TFT LCD panel 8 + 9 + description: | 10 + The panel must obey the rules for a SPI slave device as specified in 11 + spi/spi-controller.yaml 12 + 13 + maintainers: 14 + - Paul Cercueil <paul@crapouillou.net> 15 + 16 + allOf: 17 + - $ref: panel-common.yaml# 18 + 19 + properties: 20 + compatible: 21 + const: kingdisplay,kd035g6-54nt 22 + 23 + backlight: true 24 + port: true 25 + power-supply: true 26 + reg: true 27 + reset-gpios: true 28 + 29 + required: 30 + - compatible 31 + - power-supply 32 + - reset-gpios 33 + 34 + unevaluatedProperties: false 35 + 36 + examples: 37 + - | 38 + #include <dt-bindings/gpio/gpio.h> 39 + 40 + spi { 41 + #address-cells = <1>; 42 + #size-cells = <0>; 43 + 44 + panel@0 { 45 + compatible = "kingdisplay,kd035g6-54nt"; 46 + reg = <0>; 47 + 48 + spi-max-frequency = <3125000>; 49 + spi-3wire; 50 + spi-cs-high; 51 + 52 + reset-gpios = <&gpe 2 GPIO_ACTIVE_LOW>; 53 + 54 + backlight = <&backlight>; 55 + power-supply = <&ldo6>; 56 + 57 + port { 58 + panel_input: endpoint { 59 + remote-endpoint = <&panel_output>; 60 + }; 61 + }; 62 + }; 63 + }; 64 + 65 + ...
-22
Documentation/devicetree/bindings/display/panel/kingdisplay,kd097d04.txt
··· 1 - Kingdisplay KD097D04 9.7" 1536x2048 TFT LCD panel 2 - 3 - Required properties: 4 - - compatible: should be "kingdisplay,kd097d04" 5 - - reg: DSI virtual channel of the peripheral 6 - - power-supply: phandle of the regulator that provides the supply voltage 7 - - enable-gpios: panel enable gpio 8 - 9 - Optional properties: 10 - - backlight: phandle of the backlight device attached to the panel 11 - 12 - Example: 13 - 14 - &mipi_dsi { 15 - panel@0 { 16 - compatible = "kingdisplay,kd097d04"; 17 - reg = <0>; 18 - power-supply = <...>; 19 - backlight = <&backlight>; 20 - enable-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>; 21 - }; 22 - };
-7
Documentation/devicetree/bindings/display/panel/lg,acx467akm-7.txt
··· 1 - LG ACX467AKM-7 4.95" 1080×1920 LCD Panel 2 - 3 - Required properties: 4 - - compatible: must be "lg,acx467akm-7" 5 - 6 - This binding is compatible with the simple-panel binding, which is specified 7 - in simple-panel.txt in this directory.
-7
Documentation/devicetree/bindings/display/panel/lg,ld070wx3-sl01.txt
··· 1 - LG Corporation 7" WXGA TFT LCD panel 2 - 3 - Required properties: 4 - - compatible: should be "lg,ld070wx3-sl01" 5 - 6 - This binding is compatible with the simple-panel binding, which is specified 7 - in simple-panel.txt in this directory.
-19
Documentation/devicetree/bindings/display/panel/lg,lg4573.txt
··· 1 - LG LG4573 TFT Liquid Crystal Display with SPI control bus 2 - 3 - Required properties: 4 - - compatible: "lg,lg4573" 5 - - reg: address of the panel on the SPI bus 6 - 7 - The panel must obey rules for SPI slave device specified in document [1]. 8 - 9 - [1]: Documentation/devicetree/bindings/spi/spi-bus.txt 10 - 11 - Example: 12 - 13 - lcd_panel: display@0 { 14 - #address-cells = <1>; 15 - #size-cells = <1>; 16 - compatible = "lg,lg4573"; 17 - spi-max-frequency = <10000000>; 18 - reg = <0>; 19 - };
+45
Documentation/devicetree/bindings/display/panel/lg,lg4573.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/lg,lg4573.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: LG LG4573 TFT Liquid Crystal Display with SPI control bus 8 + 9 + description: | 10 + The panel must obey the rules for a SPI slave device as specified in 11 + spi/spi-controller.yaml 12 + 13 + maintainers: 14 + - Heiko Schocher <hs@denx.de> 15 + 16 + allOf: 17 + - $ref: panel-common.yaml# 18 + 19 + properties: 20 + compatible: 21 + const: lg,lg4573 22 + 23 + reg: true 24 + spi-max-frequency: true 25 + 26 + required: 27 + - compatible 28 + - reg 29 + 30 + unevaluatedProperties: false 31 + 32 + examples: 33 + - | 34 + spi { 35 + #address-cells = <1>; 36 + #size-cells = <0>; 37 + 38 + lcd_panel: display@0 { 39 + compatible = "lg,lg4573"; 40 + spi-max-frequency = <10000000>; 41 + reg = <0>; 42 + }; 43 + }; 44 + 45 + ...
-7
Documentation/devicetree/bindings/display/panel/lg,lh500wx1-sd03.txt
··· 1 - LG Corporation 5" HD TFT LCD panel 2 - 3 - Required properties: 4 - - compatible: should be "lg,lh500wx1-sd03" 5 - 6 - This binding is compatible with the simple-panel binding, which is specified 7 - in simple-panel.txt in this directory.
-33
Documentation/devicetree/bindings/display/panel/lgphilips,lb035q02.txt
··· 1 - LG.Philips LB035Q02 Panel 2 - ========================= 3 - 4 - Required properties: 5 - - compatible: "lgphilips,lb035q02" 6 - - enable-gpios: panel enable gpio 7 - 8 - Optional properties: 9 - - label: a symbolic name for the panel 10 - 11 - Required nodes: 12 - - Video port for DPI input 13 - 14 - Example 15 - ------- 16 - 17 - lcd-panel: panel@0 { 18 - compatible = "lgphilips,lb035q02"; 19 - reg = <0>; 20 - spi-max-frequency = <100000>; 21 - spi-cpol; 22 - spi-cpha; 23 - 24 - label = "lcd"; 25 - 26 - enable-gpios = <&gpio7 7 0>; 27 - 28 - port { 29 - lcd_in: endpoint { 30 - remote-endpoint = <&dpi_out>; 31 - }; 32 - }; 33 - };
+59
Documentation/devicetree/bindings/display/panel/lgphilips,lb035q02.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/lgphilips,lb035q02.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: LG.Philips LB035Q02 Panel 8 + 9 + description: | 10 + The panel must obey the rules for a SPI slave device as specified in 11 + spi/spi-controller.yaml 12 + 13 + maintainers: 14 + - Tomi Valkeinen <tomi.valkeinen@ti.com> 15 + 16 + allOf: 17 + - $ref: panel-common.yaml# 18 + 19 + properties: 20 + compatible: 21 + const: lgphilips,lb035q02 22 + 23 + label: true 24 + enable-gpios: true 25 + port: true 26 + 27 + required: 28 + - compatible 29 + - enable-gpios 30 + - port 31 + 32 + unevaluatedProperties: false 33 + 34 + examples: 35 + - | 36 + spi { 37 + #address-cells = <1>; 38 + #size-cells = <0>; 39 + 40 + panel: panel@0 { 41 + compatible = "lgphilips,lb035q02"; 42 + reg = <0>; 43 + spi-max-frequency = <100000>; 44 + spi-cpol; 45 + spi-cpha; 46 + 47 + label = "lcd"; 48 + 49 + enable-gpios = <&gpio7 7 0>; 50 + 51 + port { 52 + lcd_in: endpoint { 53 + remote-endpoint = <&dpi_out>; 54 + }; 55 + }; 56 + }; 57 + }; 58 + 59 + ...
+9 -1
Documentation/devicetree/bindings/display/panel/lvds.yaml
··· 96 96 If set, reverse the bit order described in the data mappings below on all 97 97 data lanes, transmitting bits for slots 6 to 0 instead of 0 to 6. 98 98 99 + port: true 100 + ports: true 101 + 99 102 required: 100 103 - compatible 101 104 - data-mapping 102 105 - width-mm 103 106 - height-mm 104 107 - panel-timing 105 - - port 108 + 109 + oneOf: 110 + - required: 111 + - port 112 + - required: 113 + - ports 106 114 107 115 ...
-42
Documentation/devicetree/bindings/display/panel/olimex,lcd-olinuxino.txt
··· 1 - Binding for Olimex Ltd. LCD-OLinuXino bridge panel. 2 - 3 - This device can be used as bridge between a host controller and LCD panels. 4 - Currently supported LCDs are: 5 - - LCD-OLinuXino-4.3TS 6 - - LCD-OLinuXino-5 7 - - LCD-OLinuXino-7 8 - - LCD-OLinuXino-10 9 - 10 - The panel itself contains: 11 - - AT24C16C EEPROM holding panel identification and timing requirements 12 - - AR1021 resistive touch screen controller (optional) 13 - - FT5x6 capacitive touch screnn controller (optional) 14 - - GT911/GT928 capacitive touch screen controller (optional) 15 - 16 - The above chips share same I2C bus. The EEPROM is factory preprogrammed with 17 - device information (id, serial, etc.) and timing requirements. 18 - 19 - Touchscreen bingings can be found in these files: 20 - - input/touchscreen/goodix.txt 21 - - input/touchscreen/edt-ft5x06.txt 22 - - input/touchscreen/ar1021.txt 23 - 24 - Required properties: 25 - - compatible: should be "olimex,lcd-olinuxino" 26 - - reg: address of the configuration EEPROM, should be <0x50> 27 - - power-supply: phandle of the regulator that provides the supply voltage 28 - 29 - Optional properties: 30 - - enable-gpios: GPIO pin to enable or disable the panel 31 - - backlight: phandle of the backlight device attacked to the panel 32 - 33 - Example: 34 - &i2c2 { 35 - panel@50 { 36 - compatible = "olimex,lcd-olinuxino"; 37 - reg = <0x50>; 38 - power-supply = <&reg_vcc5v0>; 39 - enable-gpios = <&pio 7 8 GPIO_ACTIVE_HIGH>; 40 - backlight = <&backlight>; 41 - }; 42 - };
+70
Documentation/devicetree/bindings/display/panel/olimex,lcd-olinuxino.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/olimex,lcd-olinuxino.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Binding for Olimex Ltd. LCD-OLinuXino bridge panel. 8 + 9 + maintainers: 10 + - Stefan Mavrodiev <stefan@olimex.com> 11 + 12 + description: | 13 + This device can be used as bridge between a host controller and LCD panels. 14 + Currently supported LCDs are: 15 + - LCD-OLinuXino-4.3TS 16 + - LCD-OLinuXino-5 17 + - LCD-OLinuXino-7 18 + - LCD-OLinuXino-10 19 + 20 + The panel itself contains: 21 + - AT24C16C EEPROM holding panel identification and timing requirements 22 + - AR1021 resistive touch screen controller (optional) 23 + - FT5x6 capacitive touch screnn controller (optional) 24 + - GT911/GT928 capacitive touch screen controller (optional) 25 + 26 + The above chips share same I2C bus. The EEPROM is factory preprogrammed with 27 + device information (id, serial, etc.) and timing requirements. 28 + 29 + Touchscreen bingings can be found in these files: 30 + - input/touchscreen/goodix.yaml 31 + - input/touchscreen/edt-ft5x06.txt 32 + - input/touchscreen/ar1021.txt 33 + 34 + allOf: 35 + - $ref: panel-common.yaml# 36 + 37 + properties: 38 + compatible: 39 + const: olimex,lcd-olinuxino 40 + 41 + backlight: true 42 + enable-gpios: true 43 + power-supply: true 44 + reg: true 45 + 46 + required: 47 + - compatible 48 + - reg 49 + - power-supply 50 + 51 + additionalProperties: false 52 + 53 + examples: 54 + - | 55 + #include <dt-bindings/gpio/gpio.h> 56 + 57 + i2c { 58 + #address-cells = <1>; 59 + #size-cells = <0>; 60 + 61 + panel@50 { 62 + compatible = "olimex,lcd-olinuxino"; 63 + reg = <0x50>; 64 + power-supply = <&reg_vcc5v0>; 65 + enable-gpios = <&pio 7 8 GPIO_ACTIVE_HIGH>; 66 + backlight = <&backlight>; 67 + }; 68 + }; 69 + 70 + ...
-14
Documentation/devicetree/bindings/display/panel/osddisplays,osd101t2587-53ts.txt
··· 1 - One Stop Displays OSD101T2587-53TS 10.1" 1920x1200 panel 2 - 3 - The panel is similar to OSD101T2045-53TS, but it needs additional 4 - MIPI_DSI_TURN_ON_PERIPHERAL message from the host. 5 - 6 - Required properties: 7 - - compatible: should be "osddisplays,osd101t2587-53ts" 8 - - power-supply: as specified in the base binding 9 - 10 - Optional properties: 11 - - backlight: as specified in the base binding 12 - 13 - This binding is compatible with the simple-panel binding, which is specified 14 - in simple-panel.txt in this directory.
+7
Documentation/devicetree/bindings/display/panel/panel-common.yaml
··· 124 124 while active. Active high reset signals can be supported by inverting the 125 125 GPIO specifier polarity flag. 126 126 127 + te-gpios: 128 + maxItems: 1 129 + description: 130 + GPIO spec for the tearing effect synchronization signal. 131 + The tearing effect signal is active high. Active low signals can be 132 + supported by inverting the GPIO specifier polarity flag. 133 + 127 134 # Power 128 135 power-supply: 129 136 description:
+12
Documentation/devicetree/bindings/display/panel/panel-simple-dsi.yaml
··· 29 29 # compatible must be listed in alphabetical order, ordered by compatible. 30 30 # The description in the comment is mandatory for each compatible. 31 31 32 + # AU Optronics Corporation 8.0" WUXGA TFT LCD panel 33 + - auo,b080uan01 34 + # Boe Corporation 8.0" WUXGA TFT LCD panel 35 + - boe,tv080wum-nl0 36 + # Kingdisplay KD097D04 9.7" 1536x2048 TFT LCD panel 37 + - kingdisplay,kd097d04 38 + # LG ACX467AKM-7 4.95" 1080×1920 LCD Panel 39 + - lg,acx467akm-7 40 + # LG Corporation 7" WXGA TFT LCD panel 41 + - lg,ld070wx3-sl01 42 + # One Stop Displays OSD101T2587-53TS 10.1" 1920x1200 panel 43 + - osddisplays,osd101t2587-53ts 32 44 # Panasonic 10" WUXGA TFT LCD panel 33 45 - panasonic,vvx10f034n00 34 46
+2 -4
Documentation/devicetree/bindings/display/panel/panel-simple.yaml
··· 33 33 - ampire,am-480272h3tmqw-t01h 34 34 # Ampire AM-800480R3TMQW-A1H 7.0" WVGA TFT LCD panel 35 35 - ampire,am800480r3tmqwa1h 36 - # AU Optronics Corporation 8.0" WUXGA TFT LCD panel 37 - - auo,b080uan01 38 36 # AU Optronics Corporation 10.1" WSVGA TFT LCD panel 39 37 - auo,b101aw03 40 38 # AU Optronics Corporation 10.1" WSVGA TFT LCD panel ··· 69 71 - boe,nv101wxmn51 70 72 # BOE NV140FHM-N49 14.0" FHD a-Si FT panel 71 73 - boe,nv140fhmn49 72 - # Boe Corporation 8.0" WUXGA TFT LCD panel 73 - - boe,tv080wum-nl0 74 74 # CDTech(H.K.) Electronics Limited 4.3" 480x272 color TFT-LCD panel 75 75 - cdtech,s043wq26h-ct7 76 76 # CDTech(H.K.) Electronics Limited 7" 800x480 color TFT-LCD panel ··· 151 155 - lemaker,bl035-rgb-002 152 156 # LG 7" (800x480 pixels) TFT LCD panel 153 157 - lg,lb070wv8 158 + # LG Corporation 5" HD TFT LCD panel 159 + - lg,lh500wx1-sd03 154 160 # LG LP079QX1-SP0V 7.9" (1536x2048 pixels) TFT LCD panel 155 161 - lg,lp079qx1-sp0v 156 162 # LG 9.7" (2048x1536 pixels) TFT LCD panel
-41
Documentation/devicetree/bindings/display/panel/raydium,rm67191.txt
··· 1 - Raydium RM67171 OLED LCD panel with MIPI-DSI protocol 2 - 3 - Required properties: 4 - - compatible: "raydium,rm67191" 5 - - reg: virtual channel for MIPI-DSI protocol 6 - must be <0> 7 - - dsi-lanes: number of DSI lanes to be used 8 - must be <3> or <4> 9 - - port: input port node with endpoint definition as 10 - defined in Documentation/devicetree/bindings/graph.txt; 11 - the input port should be connected to a MIPI-DSI device 12 - driver 13 - 14 - Optional properties: 15 - - reset-gpios: a GPIO spec for the RST_B GPIO pin 16 - - v3p3-supply: phandle to 3.3V regulator that powers the VDD_3V3 pin 17 - - v1p8-supply: phandle to 1.8V regulator that powers the VDD_1V8 pin 18 - - width-mm: see panel-common.txt 19 - - height-mm: see panel-common.txt 20 - - video-mode: 0 - burst-mode 21 - 1 - non-burst with sync event 22 - 2 - non-burst with sync pulse 23 - 24 - Example: 25 - 26 - panel@0 { 27 - compatible = "raydium,rm67191"; 28 - reg = <0>; 29 - pinctrl-0 = <&pinctrl_mipi_dsi_0_1_en>; 30 - pinctrl-names = "default"; 31 - reset-gpios = <&gpio1 7 GPIO_ACTIVE_LOW>; 32 - dsi-lanes = <4>; 33 - width-mm = <68>; 34 - height-mm = <121>; 35 - 36 - port { 37 - panel_in: endpoint { 38 - remote-endpoint = <&mipi_out>; 39 - }; 40 - }; 41 - };
+75
Documentation/devicetree/bindings/display/panel/raydium,rm67191.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/raydium,rm67191.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Raydium RM67171 OLED LCD panel with MIPI-DSI protocol 8 + 9 + maintainers: 10 + - Robert Chiras <robert.chiras@nxp.com> 11 + 12 + allOf: 13 + - $ref: panel-common.yaml# 14 + 15 + properties: 16 + compatible: 17 + const: raydium,rm67191 18 + 19 + reg: true 20 + port: true 21 + reset-gpios: true 22 + width-mm: true 23 + height-mm: true 24 + 25 + dsi-lanes: 26 + description: Number of DSI lanes to be used must be <3> or <4> 27 + enum: [3, 4] 28 + 29 + v3p3-supply: 30 + description: phandle to 3.3V regulator that powers the VDD_3V3 pin 31 + 32 + v1p8-supply: 33 + description: phandle to 1.8V regulator that powers the VDD_1V8 pin 34 + 35 + video-mode: 36 + description: | 37 + 0 - burst-mode 38 + 1 - non-burst with sync event 39 + 2 - non-burst with sync pulse 40 + enum: [0, 1, 2] 41 + 42 + required: 43 + - compatible 44 + - reg 45 + - dsi-lanes 46 + - port 47 + 48 + additionalProperties: false 49 + 50 + examples: 51 + - | 52 + #include <dt-bindings/gpio/gpio.h> 53 + 54 + dsi { 55 + #address-cells = <1>; 56 + #size-cells = <0>; 57 + 58 + panel@0 { 59 + compatible = "raydium,rm67191"; 60 + reg = <0>; 61 + reset-gpios = <&gpio1 7 GPIO_ACTIVE_LOW>; 62 + dsi-lanes = <4>; 63 + width-mm = <68>; 64 + height-mm = <121>; 65 + video-mode = <1>; 66 + 67 + port { 68 + panel_in: endpoint { 69 + remote-endpoint = <&mipi_out>; 70 + }; 71 + }; 72 + }; 73 + }; 74 + 75 + ...
+65
Documentation/devicetree/bindings/display/panel/samsung,amoled-mipi-dsi.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/samsung,amoled-mipi-dsi.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Samsung AMOLED MIPI-DSI panels 8 + 9 + maintainers: 10 + - Hoegeun Kwon <hoegeun.kwon@samsung.com> 11 + 12 + allOf: 13 + - $ref: panel-common.yaml# 14 + 15 + properties: 16 + compatible: 17 + enum: 18 + # Samsung S6E63J0X03 1.63" 320x320 AMOLED panel 19 + - samsung,s6e63j0x03 20 + # Samsung S6E3HA2 5.7" 1440x2560 AMOLED panel 21 + - samsung,s6e3ha2 22 + # Samsung S6E3HF2 5.65" 1600x2560 AMOLED panel 23 + - samsung,s6e3hf2 24 + 25 + reg: true 26 + reset-gpios: true 27 + enable-gpios: true 28 + te-gpios: true 29 + 30 + vdd3-supply: 31 + description: I/O voltage supply 32 + 33 + vci-supply: 34 + description: voltage supply for analog circuits 35 + 36 + required: 37 + - compatible 38 + - reg 39 + - vdd3-supply 40 + - vci-supply 41 + - reset-gpios 42 + - enable-gpios 43 + 44 + additionalProperties: false 45 + 46 + examples: 47 + - | 48 + #include <dt-bindings/gpio/gpio.h> 49 + 50 + dsi { 51 + #address-cells = <1>; 52 + #size-cells = <0>; 53 + 54 + panel@0 { 55 + compatible = "samsung,s6e3ha2"; 56 + reg = <0>; 57 + vdd3-supply = <&ldo27_reg>; 58 + vci-supply = <&ldo28_reg>; 59 + reset-gpios = <&gpg0 0 GPIO_ACTIVE_LOW>; 60 + enable-gpios = <&gpf1 5 GPIO_ACTIVE_HIGH>; 61 + te-gpios = <&gpf1 3 GPIO_ACTIVE_HIGH>; 62 + }; 63 + }; 64 + 65 + ...
-66
Documentation/devicetree/bindings/display/panel/samsung,ld9040.txt
··· 1 - Samsung LD9040 AMOLED LCD parallel RGB panel with SPI control bus 2 - 3 - Required properties: 4 - - compatible: "samsung,ld9040" 5 - - reg: address of the panel on SPI bus 6 - - vdd3-supply: core voltage supply 7 - - vci-supply: voltage supply for analog circuits 8 - - reset-gpios: a GPIO spec for the reset pin 9 - - display-timings: timings for the connected panel according to [1] 10 - 11 - The panel must obey rules for SPI slave device specified in document [2]. 12 - 13 - Optional properties: 14 - - power-on-delay: delay after turning regulators on [ms] 15 - - reset-delay: delay after reset sequence [ms] 16 - - panel-width-mm: physical panel width [mm] 17 - - panel-height-mm: physical panel height [mm] 18 - 19 - The device node can contain one 'port' child node with one child 20 - 'endpoint' node, according to the bindings defined in [3]. This 21 - node should describe panel's video bus. 22 - 23 - [1]: Documentation/devicetree/bindings/display/panel/display-timing.txt 24 - [2]: Documentation/devicetree/bindings/spi/spi-bus.txt 25 - [3]: Documentation/devicetree/bindings/media/video-interfaces.txt 26 - 27 - Example: 28 - 29 - lcd@0 { 30 - compatible = "samsung,ld9040"; 31 - reg = <0>; 32 - vdd3-supply = <&ldo7_reg>; 33 - vci-supply = <&ldo17_reg>; 34 - reset-gpios = <&gpy4 5 0>; 35 - spi-max-frequency = <1200000>; 36 - spi-cpol; 37 - spi-cpha; 38 - power-on-delay = <10>; 39 - reset-delay = <10>; 40 - panel-width-mm = <90>; 41 - panel-height-mm = <154>; 42 - 43 - display-timings { 44 - timing { 45 - clock-frequency = <23492370>; 46 - hactive = <480>; 47 - vactive = <800>; 48 - hback-porch = <16>; 49 - hfront-porch = <16>; 50 - vback-porch = <2>; 51 - vfront-porch = <28>; 52 - hsync-len = <2>; 53 - vsync-len = <1>; 54 - hsync-active = <0>; 55 - vsync-active = <0>; 56 - de-active = <0>; 57 - pixelclk-active = <0>; 58 - }; 59 - }; 60 - 61 - port { 62 - lcd_ep: endpoint { 63 - remote-endpoint = <&fimd_dpi_ep>; 64 - }; 65 - }; 66 - };
+107
Documentation/devicetree/bindings/display/panel/samsung,ld9040.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/samsung,ld9040.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Samsung LD9040 AMOLED LCD parallel RGB panel with SPI control bus 8 + 9 + description: | 10 + The panel must obey the rules for a SPI slave device as specified in 11 + spi/spi-controller.yaml 12 + 13 + maintainers: 14 + - Andrzej Hajda <a.hajda@samsung.com> 15 + 16 + allOf: 17 + - $ref: panel-common.yaml# 18 + 19 + properties: 20 + compatible: 21 + const: samsung,ld9040 22 + 23 + display-timings: true 24 + port: true 25 + reg: true 26 + reset-gpios: true 27 + 28 + vdd3-supply: 29 + description: core voltage supply 30 + 31 + vci-supply: 32 + description: voltage supply for analog circuits 33 + 34 + power-on-delay: 35 + $ref: /schemas/types.yaml#/definitions/uint32 36 + description: delay after turning regulators on [ms] 37 + 38 + reset-delay: 39 + $ref: /schemas/types.yaml#/definitions/uint32 40 + description: delay after reset sequence [ms] 41 + 42 + panel-width-mm: 43 + description: physical panel width [mm] 44 + 45 + panel-height-mm: 46 + description: physical panel height [mm] 47 + 48 + required: 49 + - compatible 50 + - reg 51 + - vdd3-supply 52 + - vci-supply 53 + - reset-gpios 54 + - display-timings 55 + 56 + unevaluatedProperties: false 57 + 58 + examples: 59 + - | 60 + spi { 61 + #address-cells = <1>; 62 + #size-cells = <0>; 63 + 64 + lcd@0 { 65 + compatible = "samsung,ld9040"; 66 + #address-cells = <1>; 67 + #size-cells = <0>; 68 + 69 + reg = <0>; 70 + vdd3-supply = <&ldo7_reg>; 71 + vci-supply = <&ldo17_reg>; 72 + reset-gpios = <&gpy4 5 0>; 73 + spi-max-frequency = <1200000>; 74 + spi-cpol; 75 + spi-cpha; 76 + power-on-delay = <10>; 77 + reset-delay = <10>; 78 + panel-width-mm = <90>; 79 + panel-height-mm = <154>; 80 + 81 + display-timings { 82 + timing { 83 + clock-frequency = <23492370>; 84 + hactive = <480>; 85 + vactive = <800>; 86 + hback-porch = <16>; 87 + hfront-porch = <16>; 88 + vback-porch = <2>; 89 + vfront-porch = <28>; 90 + hsync-len = <2>; 91 + vsync-len = <1>; 92 + hsync-active = <0>; 93 + vsync-active = <0>; 94 + de-active = <0>; 95 + pixelclk-active = <0>; 96 + }; 97 + }; 98 + 99 + port { 100 + lcd_ep: endpoint { 101 + remote-endpoint = <&fimd_dpi_ep>; 102 + }; 103 + }; 104 + }; 105 + }; 106 + 107 + ...
-30
Documentation/devicetree/bindings/display/panel/samsung,s6d16d0.txt
··· 1 - Samsung S6D16D0 4" 864x480 AMOLED panel 2 - 3 - Required properties: 4 - - compatible: should be: 5 - "samsung,s6d16d0", 6 - - reg: the virtual channel number of a DSI peripheral 7 - - vdd1-supply: I/O voltage supply 8 - - reset-gpios: a GPIO spec for the reset pin (active low) 9 - 10 - The device node can contain one 'port' child node with one child 11 - 'endpoint' node, according to the bindings defined in 12 - media/video-interfaces.txt. This node should describe panel's video bus. 13 - 14 - Example: 15 - &dsi { 16 - ... 17 - 18 - panel@0 { 19 - compatible = "samsung,s6d16d0"; 20 - reg = <0>; 21 - vdd1-supply = <&foo>; 22 - reset-gpios = <&foo_gpio 0 GPIO_ACTIVE_LOW>; 23 - 24 - port { 25 - panel_in: endpoint { 26 - remote-endpoint = <&dsi_out>; 27 - }; 28 - }; 29 - }; 30 - };
+56
Documentation/devicetree/bindings/display/panel/samsung,s6d16d0.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/samsung,s6d16d0.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Samsung S6D16D0 4" 864x480 AMOLED panel 8 + 9 + maintainers: 10 + - Linus Walleij <linus.walleij@linaro.org> 11 + 12 + allOf: 13 + - $ref: panel-common.yaml# 14 + 15 + properties: 16 + compatible: 17 + const: samsung,s6d16d0 18 + 19 + port: true 20 + reg: true 21 + reset-gpios: true 22 + 23 + vdd1-supply: 24 + description: I/O voltage supply 25 + 26 + required: 27 + - compatible 28 + - reg 29 + - vdd1-supply 30 + - reset-gpios 31 + 32 + additionalProperties: false 33 + 34 + examples: 35 + - | 36 + #include <dt-bindings/gpio/gpio.h> 37 + 38 + dsi { 39 + #address-cells = <1>; 40 + #size-cells = <0>; 41 + 42 + panel@0 { 43 + compatible = "samsung,s6d16d0"; 44 + reg = <0>; 45 + vdd1-supply = <&foo>; 46 + reset-gpios = <&foo_gpio 0 GPIO_ACTIVE_LOW>; 47 + 48 + port { 49 + panel_in: endpoint { 50 + remote-endpoint = <&dsi_out>; 51 + }; 52 + }; 53 + }; 54 + }; 55 + 56 + ...
-31
Documentation/devicetree/bindings/display/panel/samsung,s6e3ha2.txt
··· 1 - Samsung S6E3HA2 5.7" 1440x2560 AMOLED panel 2 - Samsung S6E3HF2 5.65" 1600x2560 AMOLED panel 3 - 4 - Required properties: 5 - - compatible: should be one of: 6 - "samsung,s6e3ha2", 7 - "samsung,s6e3hf2". 8 - - reg: the virtual channel number of a DSI peripheral 9 - - vdd3-supply: I/O voltage supply 10 - - vci-supply: voltage supply for analog circuits 11 - - reset-gpios: a GPIO spec for the reset pin (active low) 12 - - enable-gpios: a GPIO spec for the panel enable pin (active high) 13 - 14 - Optional properties: 15 - - te-gpios: a GPIO spec for the tearing effect synchronization signal 16 - gpio pin (active high) 17 - 18 - Example: 19 - &dsi { 20 - ... 21 - 22 - panel@0 { 23 - compatible = "samsung,s6e3ha2"; 24 - reg = <0>; 25 - vdd3-supply = <&ldo27_reg>; 26 - vci-supply = <&ldo28_reg>; 27 - reset-gpios = <&gpg0 0 GPIO_ACTIVE_LOW>; 28 - enable-gpios = <&gpf1 5 GPIO_ACTIVE_HIGH>; 29 - te-gpios = <&gpf1 3 GPIO_ACTIVE_HIGH>; 30 - }; 31 - };
-24
Documentation/devicetree/bindings/display/panel/samsung,s6e63j0x03.txt
··· 1 - Samsung S6E63J0X03 1.63" 320x320 AMOLED panel (interface: MIPI-DSI command mode) 2 - 3 - Required properties: 4 - - compatible: "samsung,s6e63j0x03" 5 - - reg: the virtual channel number of a DSI peripheral 6 - - vdd3-supply: I/O voltage supply 7 - - vci-supply: voltage supply for analog circuits 8 - - reset-gpios: a GPIO spec for the reset pin (active low) 9 - - te-gpios: a GPIO spec for the tearing effect synchronization signal 10 - gpio pin (active high) 11 - 12 - Example: 13 - &dsi { 14 - ... 15 - 16 - panel@0 { 17 - compatible = "samsung,s6e63j0x03"; 18 - reg = <0>; 19 - vdd3-supply = <&ldo16_reg>; 20 - vci-supply = <&ldo20_reg>; 21 - reset-gpios = <&gpe0 1 GPIO_ACTIVE_LOW>; 22 - te-gpios = <&gpx0 6 GPIO_ACTIVE_HIGH>; 23 - }; 24 - };
-33
Documentation/devicetree/bindings/display/panel/samsung,s6e63m0.txt
··· 1 - Samsung s6e63m0 AMOLED LCD panel 2 - 3 - Required properties: 4 - - compatible: "samsung,s6e63m0" 5 - - reset-gpios: GPIO spec for reset pin 6 - - vdd3-supply: VDD regulator 7 - - vci-supply: VCI regulator 8 - 9 - The panel must obey rules for SPI slave device specified in document [1]. 10 - 11 - The device node can contain one 'port' child node with one child 12 - 'endpoint' node, according to the bindings defined in [2]. This 13 - node should describe panel's video bus. 14 - 15 - [1]: Documentation/devicetree/bindings/spi/spi-bus.txt 16 - [2]: Documentation/devicetree/bindings/media/video-interfaces.txt 17 - 18 - Example: 19 - 20 - s6e63m0: display@0 { 21 - compatible = "samsung,s6e63m0"; 22 - reg = <0>; 23 - reset-gpio = <&mp05 5 1>; 24 - vdd3-supply = <&ldo12_reg>; 25 - vci-supply = <&ldo11_reg>; 26 - spi-max-frequency = <1200000>; 27 - 28 - port { 29 - lcd_ep: endpoint { 30 - remote-endpoint = <&fimd_ep>; 31 - }; 32 - }; 33 - };
+60
Documentation/devicetree/bindings/display/panel/samsung,s6e63m0.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/samsung,s6e63m0.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Samsung s6e63m0 AMOLED LCD panel 8 + 9 + maintainers: 10 + - Jonathan Bakker <xc-racer2@live.ca> 11 + 12 + allOf: 13 + - $ref: panel-common.yaml# 14 + 15 + properties: 16 + compatible: 17 + const: samsung,s6e63m0 18 + 19 + reg: true 20 + reset-gpios: true 21 + port: true 22 + 23 + vdd3-supply: 24 + description: VDD regulator 25 + 26 + vci-supply: 27 + description: VCI regulator 28 + 29 + required: 30 + - compatible 31 + - reset-gpios 32 + - vdd3-supply 33 + - vci-supply 34 + - port 35 + 36 + unevaluatedProperties: false 37 + 38 + examples: 39 + - | 40 + spi { 41 + #address-cells = <1>; 42 + #size-cells = <0>; 43 + 44 + display@0 { 45 + compatible = "samsung,s6e63m0"; 46 + reg = <0>; 47 + reset-gpios = <&mp05 5 1>; 48 + vdd3-supply = <&ldo12_reg>; 49 + vci-supply = <&ldo11_reg>; 50 + spi-max-frequency = <1200000>; 51 + 52 + port { 53 + lcd_ep: endpoint { 54 + remote-endpoint = <&fimd_ep>; 55 + }; 56 + }; 57 + }; 58 + }; 59 + 60 + ...
-23
Documentation/devicetree/bindings/display/panel/seiko,43wvf1g.txt
··· 1 - Seiko Instruments Inc. 4.3" WVGA (800 x RGB x 480) TFT with Touch-Panel 2 - 3 - Required properties: 4 - - compatible: should be "sii,43wvf1g". 5 - - "dvdd-supply": 3v3 digital regulator. 6 - - "avdd-supply": 5v analog regulator. 7 - 8 - Optional properties: 9 - - backlight: phandle for the backlight control. 10 - 11 - Example: 12 - 13 - panel { 14 - compatible = "sii,43wvf1g"; 15 - backlight = <&backlight_display>; 16 - dvdd-supply = <&reg_lcd_3v3>; 17 - avdd-supply = <&reg_lcd_5v>; 18 - port { 19 - panel_in: endpoint { 20 - remote-endpoint = <&display_out>; 21 - }; 22 - }; 23 - };
+50
Documentation/devicetree/bindings/display/panel/seiko,43wvf1g.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/seiko,43wvf1g.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Seiko Instruments Inc. 4.3" WVGA (800 x RGB x 480) TFT with Touch-Panel 8 + 9 + maintainers: 10 + - Marco Franchi <marco.franchi@nxp.com> 11 + 12 + allOf: 13 + - $ref: panel-common.yaml# 14 + 15 + properties: 16 + compatible: 17 + const: sii,43wvf1g 18 + 19 + backlight: true 20 + port: true 21 + 22 + dvdd-supply: 23 + description: 3v3 digital regulator 24 + 25 + avdd-supply: 26 + description: 5v analog regulator 27 + 28 + required: 29 + - compatible 30 + - dvdd-supply 31 + - avdd-supply 32 + 33 + additionalProperties: false 34 + 35 + examples: 36 + - | 37 + panel { 38 + compatible = "sii,43wvf1g"; 39 + 40 + backlight = <&backlight_display>; 41 + dvdd-supply = <&reg_lcd_3v3>; 42 + avdd-supply = <&reg_lcd_5v>; 43 + port { 44 + panel_in: endpoint { 45 + remote-endpoint = <&display_out>; 46 + }; 47 + }; 48 + }; 49 + 50 + ...
-36
Documentation/devicetree/bindings/display/panel/sharp,lq150x1lg11.txt
··· 1 - Sharp 15" LQ150X1LG11 XGA TFT LCD panel 2 - 3 - Required properties: 4 - - compatible: should be "sharp,lq150x1lg11" 5 - - power-supply: regulator to provide the VCC supply voltage (3.3 volts) 6 - 7 - Optional properties: 8 - - backlight: phandle of the backlight device 9 - - rlud-gpios: a single GPIO for the RL/UD (rotate 180 degrees) pin. 10 - - sellvds-gpios: a single GPIO for the SELLVDS pin. 11 - 12 - If rlud-gpios and/or sellvds-gpios are not specified, the RL/UD and/or SELLVDS 13 - pins are assumed to be handled appropriately by the hardware. 14 - 15 - Example: 16 - 17 - backlight: backlight { 18 - compatible = "pwm-backlight"; 19 - pwms = <&pwm 0 100000>; /* VBR */ 20 - 21 - brightness-levels = <0 20 40 60 80 100>; 22 - default-brightness-level = <2>; 23 - 24 - power-supply = <&vdd_12v_reg>; /* VDD */ 25 - enable-gpios = <&gpio 42 GPIO_ACTIVE_HIGH>; /* XSTABY */ 26 - }; 27 - 28 - panel { 29 - compatible = "sharp,lq150x1lg11"; 30 - 31 - power-supply = <&vcc_3v3_reg>; /* VCC */ 32 - 33 - backlight = <&backlight>; 34 - rlud-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>; /* RL/UD */ 35 - sellvds-gpios = <&gpio 18 GPIO_ACTIVE_HIGH>; /* SELLVDS */ 36 - };
+58
Documentation/devicetree/bindings/display/panel/sharp,lq150x1lg11.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/sharp,lq150x1lg11.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Sharp 15" LQ150X1LG11 XGA TFT LCD panel 8 + 9 + maintainers: 10 + - Peter Rosin <peda@axentia.se> 11 + 12 + allOf: 13 + - $ref: panel-common.yaml# 14 + 15 + properties: 16 + compatible: 17 + const: sharp,lq150x1lg11 18 + 19 + power-supply: true 20 + backlight: true 21 + 22 + rlud-gpios: 23 + maxItems: 1 24 + description: | 25 + GPIO for the RL/UD (rotate 180 degrees) pin. 26 + If rlud-gpios and/or sellvds-gpios are not specified, 27 + the RL/UD and/or SELLVDS pins are assumed to be handled 28 + appropriately by the hardware. 29 + 30 + sellvds-gpios: 31 + maxItems: 1 32 + description: | 33 + GPIO for the SELLVDS pin. 34 + If rlud-gpios and/or sellvds-gpios are not specified, 35 + the RL/UD and/or SELLVDS pins are assumed to be handled 36 + appropriately by the hardware. 37 + 38 + required: 39 + - compatible 40 + - power-supply 41 + 42 + additionalProperties: false 43 + 44 + examples: 45 + - | 46 + #include <dt-bindings/gpio/gpio.h> 47 + 48 + panel { 49 + compatible = "sharp,lq150x1lg11"; 50 + 51 + power-supply = <&vcc_3v3_reg>; /* VCC */ 52 + 53 + backlight = <&backlight>; 54 + rlud-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>; /* RL/UD */ 55 + sellvds-gpios = <&gpio 18 GPIO_ACTIVE_HIGH>; /* SELLVDS */ 56 + }; 57 + 58 + ...
-43
Documentation/devicetree/bindings/display/panel/sharp,ls037v7dw01.txt
··· 1 - SHARP LS037V7DW01 TFT-LCD panel 2 - =================================== 3 - 4 - Required properties: 5 - - compatible: "sharp,ls037v7dw01" 6 - 7 - Optional properties: 8 - - label: a symbolic name for the panel 9 - - enable-gpios: a GPIO spec for the optional enable pin. 10 - This pin is the INI pin as specified in the LS037V7DW01.pdf file. 11 - - reset-gpios: a GPIO spec for the optional reset pin. 12 - This pin is the RESB pin as specified in the LS037V7DW01.pdf file. 13 - - mode-gpios: a GPIO 14 - ordered MO, LR, and UD as specified in the LS037V7DW01.pdf file. 15 - 16 - Required nodes: 17 - - Video port for DPI input 18 - 19 - This panel can have zero to five GPIOs to configure to change configuration 20 - between QVGA and VGA mode and the scan direction. As these pins can be also 21 - configured with external pulls, all the GPIOs are considered optional with holes 22 - in the array. 23 - 24 - Example 25 - ------- 26 - 27 - Example when connected to a omap2+ based device: 28 - 29 - lcd0: display { 30 - compatible = "sharp,ls037v7dw01"; 31 - power-supply = <&lcd_3v3>; 32 - enable-gpios = <&gpio5 24 GPIO_ACTIVE_HIGH>; /* gpio152, lcd INI */ 33 - reset-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>; /* gpio155, lcd RESB */ 34 - mode-gpios = <&gpio5 26 GPIO_ACTIVE_HIGH /* gpio154, lcd MO */ 35 - &gpio1 2 GPIO_ACTIVE_HIGH /* gpio2, lcd LR */ 36 - &gpio1 3 GPIO_ACTIVE_HIGH>; /* gpio3, lcd UD */ 37 - 38 - port { 39 - lcd_in: endpoint { 40 - remote-endpoint = <&dpi_out>; 41 - }; 42 - }; 43 - };
+68
Documentation/devicetree/bindings/display/panel/sharp,ls037v7dw01.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/sharp,ls037v7dw01.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: SHARP LS037V7DW01 TFT-LCD panel 8 + 9 + description: | 10 + This panel can have zero to five GPIOs to configure to change configuration 11 + between QVGA and VGA mode and the scan direction. As these pins can be also 12 + configured with external pulls, all the GPIOs are considered optional with holes 13 + in the array. 14 + 15 + maintainers: 16 + - Tony Lindgren <tony@atomide.com> 17 + 18 + allOf: 19 + - $ref: panel-common.yaml# 20 + 21 + properties: 22 + compatible: 23 + const: sharp,ls037v7dw01 24 + 25 + label: true 26 + enable-gpios: true 27 + reset-gpios: true 28 + port: true 29 + power-supply: true 30 + 31 + mode-gpios: 32 + minItems: 1 33 + maxItems: 3 34 + description: | 35 + GPIO ordered MO, LR, and UD as specified in LS037V7DW01.pdf 36 + This panel can have zero to three GPIOs to configure to 37 + change configuration between QVGA and VGA mode and the 38 + scan direction. As these pins can be also configured 39 + with external pulls, all the GPIOs are considered 40 + optional with holes in the array. 41 + 42 + required: 43 + - compatible 44 + - port 45 + 46 + additionalProperties: false 47 + 48 + examples: 49 + - | 50 + #include <dt-bindings/gpio/gpio.h> 51 + 52 + lcd0: display { 53 + compatible = "sharp,ls037v7dw01"; 54 + power-supply = <&lcd_3v3>; 55 + enable-gpios = <&gpio5 24 GPIO_ACTIVE_HIGH>; /* gpio152, lcd INI */ 56 + reset-gpios = <&gpio5 27 GPIO_ACTIVE_HIGH>; /* gpio155, lcd RESB */ 57 + mode-gpios = <&gpio5 26 GPIO_ACTIVE_HIGH /* gpio154, lcd MO */ 58 + &gpio1 2 GPIO_ACTIVE_HIGH /* gpio2, lcd LR */ 59 + &gpio1 3 GPIO_ACTIVE_HIGH>; /* gpio3, lcd UD */ 60 + 61 + port { 62 + lcd_in: endpoint { 63 + remote-endpoint = <&dpi_out>; 64 + }; 65 + }; 66 + }; 67 + 68 + ...
-22
Documentation/devicetree/bindings/display/panel/sharp,ls043t1le01.txt
··· 1 - Sharp Microelectronics 4.3" qHD TFT LCD panel 2 - 3 - Required properties: 4 - - compatible: should be "sharp,ls043t1le01-qhd" 5 - - reg: DSI virtual channel of the peripheral 6 - - power-supply: phandle of the regulator that provides the supply voltage 7 - 8 - Optional properties: 9 - - backlight: phandle of the backlight device attached to the panel 10 - - reset-gpios: a GPIO spec for the reset pin 11 - 12 - Example: 13 - 14 - mdss_dsi@fd922800 { 15 - panel@0 { 16 - compatible = "sharp,ls043t1le01-qhd"; 17 - reg = <0>; 18 - avdd-supply = <&pm8941_l22>; 19 - backlight = <&pm8941_wled>; 20 - reset-gpios = <&pm8941_gpios 19 GPIO_ACTIVE_HIGH>; 21 - }; 22 - };
+51
Documentation/devicetree/bindings/display/panel/sharp,ls043t1le01.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/sharp,ls043t1le01.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Sharp Microelectronics 4.3" qHD TFT LCD panel 8 + 9 + maintainers: 10 + - Werner Johansson <werner.johansson@sonymobile.com> 11 + 12 + allOf: 13 + - $ref: panel-common.yaml# 14 + 15 + properties: 16 + compatible: 17 + const: sharp,ls043t1le01-qhd 18 + 19 + reg: true 20 + backlight: true 21 + reset-gpios: true 22 + port: true 23 + 24 + avdd-supply: 25 + description: handle of the regulator that provides the supply voltage 26 + 27 + required: 28 + - compatible 29 + - reg 30 + - avdd-supply 31 + 32 + additionalProperties: false 33 + 34 + examples: 35 + - | 36 + #include <dt-bindings/gpio/gpio.h> 37 + 38 + dsi { 39 + #address-cells = <1>; 40 + #size-cells = <0>; 41 + 42 + panel@0 { 43 + compatible = "sharp,ls043t1le01-qhd"; 44 + reg = <0>; 45 + avdd-supply = <&pm8941_l22>; 46 + backlight = <&pm8941_wled>; 47 + reset-gpios = <&pm8941_gpios 19 GPIO_ACTIVE_HIGH>; 48 + }; 49 + }; 50 + 51 + ...
-1
Documentation/devicetree/bindings/display/panel/simple-panel.txt
··· 1 - See panel-common.yaml in this directory.
-37
Documentation/devicetree/bindings/display/panel/sitronix,st7789v.txt
··· 1 - Sitronix ST7789V RGB panel with SPI control bus 2 - 3 - Required properties: 4 - - compatible: "sitronix,st7789v" 5 - - reg: Chip select of the panel on the SPI bus 6 - - reset-gpios: a GPIO phandle for the reset pin 7 - - power-supply: phandle of the regulator that provides the supply voltage 8 - 9 - Optional properties: 10 - - backlight: phandle to the backlight used 11 - 12 - The generic bindings for the SPI slaves documented in [1] also applies 13 - 14 - The device node can contain one 'port' child node with one child 15 - 'endpoint' node, according to the bindings defined in [2]. This 16 - node should describe panel's video bus. 17 - 18 - [1]: Documentation/devicetree/bindings/spi/spi-bus.txt 19 - [2]: Documentation/devicetree/bindings/graph.txt 20 - 21 - Example: 22 - 23 - panel@0 { 24 - compatible = "sitronix,st7789v"; 25 - reg = <0>; 26 - reset-gpios = <&pio 6 11 GPIO_ACTIVE_LOW>; 27 - backlight = <&pwm_bl>; 28 - spi-max-frequency = <100000>; 29 - spi-cpol; 30 - spi-cpha; 31 - 32 - port { 33 - panel_input: endpoint { 34 - remote-endpoint = <&tcon0_out_panel>; 35 - }; 36 - }; 37 - };
+63
Documentation/devicetree/bindings/display/panel/sitronix,st7789v.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/sitronix,st7789v.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Sitronix ST7789V RGB panel with SPI control bus 8 + 9 + description: | 10 + The panel must obey the rules for a SPI slave device as specified in 11 + spi/spi-controller.yaml 12 + 13 + maintainers: 14 + - Maxime Ripard <mripard@kernel.org> 15 + 16 + allOf: 17 + - $ref: panel-common.yaml# 18 + 19 + properties: 20 + compatible: 21 + const: sitronix,st7789v 22 + 23 + reg: true 24 + reset-gpios: true 25 + power-supply: true 26 + backlight: true 27 + port: true 28 + 29 + required: 30 + - compatible 31 + - reg 32 + - reset-gpios 33 + - power-supply 34 + 35 + unevaluatedProperties: false 36 + 37 + examples: 38 + - | 39 + #include <dt-bindings/gpio/gpio.h> 40 + 41 + spi { 42 + #address-cells = <1>; 43 + #size-cells = <0>; 44 + 45 + panel@0 { 46 + compatible = "sitronix,st7789v"; 47 + reg = <0>; 48 + reset-gpios = <&pio 6 11 GPIO_ACTIVE_LOW>; 49 + backlight = <&pwm_bl>; 50 + power-supply = <&power>; 51 + spi-max-frequency = <100000>; 52 + spi-cpol; 53 + spi-cpha; 54 + 55 + port { 56 + panel_input: endpoint { 57 + remote-endpoint = <&tcon0_out_panel>; 58 + }; 59 + }; 60 + }; 61 + }; 62 + 63 + ...
-30
Documentation/devicetree/bindings/display/panel/sony,acx565akm.txt
··· 1 - Sony ACX565AKM SDI Panel 2 - ======================== 3 - 4 - Required properties: 5 - - compatible: "sony,acx565akm" 6 - 7 - Optional properties: 8 - - label: a symbolic name for the panel 9 - - reset-gpios: panel reset gpio 10 - 11 - Required nodes: 12 - - Video port for SDI input 13 - 14 - Example 15 - ------- 16 - 17 - acx565akm@2 { 18 - compatible = "sony,acx565akm"; 19 - spi-max-frequency = <6000000>; 20 - reg = <2>; 21 - 22 - label = "lcd"; 23 - reset-gpios = <&gpio3 26 GPIO_ACTIVE_HIGH>; /* 90 */ 24 - 25 - port { 26 - lcd_in: endpoint { 27 - remote-endpoint = <&sdi_out>; 28 - }; 29 - }; 30 - };
+57
Documentation/devicetree/bindings/display/panel/sony,acx565akm.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/sony,acx565akm.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Sony ACX565AKM SDI Panel 8 + 9 + description: | 10 + The panel must obey the rules for a SPI slave device as specified in 11 + spi/spi-controller.yaml 12 + 13 + maintainers: 14 + - Tomi Valkeinen <tomi.valkeinen@ti.com> 15 + 16 + allOf: 17 + - $ref: panel-common.yaml# 18 + 19 + properties: 20 + compatible: 21 + const: sony,acx565akm 22 + 23 + label: true 24 + reset-gpios: true 25 + port: true 26 + 27 + required: 28 + - compatible 29 + - port 30 + 31 + unevaluatedProperties: false 32 + 33 + examples: 34 + - | 35 + #include <dt-bindings/gpio/gpio.h> 36 + 37 + spi { 38 + #address-cells = <1>; 39 + #size-cells = <0>; 40 + 41 + panel@2 { 42 + compatible = "sony,acx565akm"; 43 + spi-max-frequency = <6000000>; 44 + reg = <2>; 45 + 46 + label = "lcd"; 47 + reset-gpios = <&gpio3 26 GPIO_ACTIVE_HIGH>; /* 90 */ 48 + 49 + port { 50 + lcd_in: endpoint { 51 + remote-endpoint = <&sdi_out>; 52 + }; 53 + }; 54 + }; 55 + }; 56 + 57 + ...
-4
Documentation/devicetree/bindings/display/panel/startek,startek-kd050c.txt
··· 1 - Startek Electronic Technology Co. KD050C 5.0" WVGA TFT LCD panel 2 - 3 - Required properties: 4 - - compatible: should be "startek,startek-kd050c"
+33
Documentation/devicetree/bindings/display/panel/startek,startek-kd050c.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/startek,startek-kd050c.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Startek Electronic Technology Co. KD050C 5.0" WVGA TFT LCD panel 8 + 9 + maintainers: 10 + - Nikita Kiryanov <nikita@compulab.co.il> 11 + 12 + allOf: 13 + - $ref: panel-dpi.yaml# 14 + 15 + properties: 16 + compatible: 17 + items: 18 + - const: startek,startek-kd050c 19 + - {} # panel-dpi, but not listed here to avoid false select 20 + 21 + backlight: true 22 + enable-gpios: true 23 + height-mm: true 24 + label: true 25 + panel-timing: true 26 + port: true 27 + power-supply: true 28 + reset-gpios: true 29 + width-mm: true 30 + 31 + additionalProperties: false 32 + 33 + ...
+65
Documentation/devicetree/bindings/display/panel/tpo,td.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/panel/tpo,td.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Toppoly TD Panels 8 + 9 + description: | 10 + The panel must obey the rules for a SPI slave device as specified in 11 + spi/spi-controller.yaml 12 + 13 + maintainers: 14 + - Marek Belisko <marek@goldelico.com> 15 + - H. Nikolaus Schaller <hns@goldelico.com> 16 + 17 + allOf: 18 + - $ref: panel-common.yaml# 19 + 20 + properties: 21 + compatible: 22 + enum: 23 + # Toppoly TD028TTEC1 Panel 24 + - tpo,td028ttec1 25 + # Toppoly TD043MTEA1 Panel 26 + - tpo,td043mtea1 27 + 28 + reg: true 29 + label: true 30 + reset-gpios: true 31 + backlight: true 32 + port: true 33 + 34 + required: 35 + - compatible 36 + - port 37 + 38 + unevaluatedProperties: false 39 + 40 + examples: 41 + - | 42 + spi { 43 + #address-cells = <1>; 44 + #size-cells = <0>; 45 + 46 + panel: panel@0 { 47 + compatible = "tpo,td043mtea1"; 48 + reg = <0>; 49 + spi-max-frequency = <100000>; 50 + spi-cpol; 51 + spi-cpha; 52 + 53 + label = "lcd"; 54 + 55 + reset-gpios = <&gpio7 7 0>; 56 + 57 + port { 58 + lcd_in: endpoint { 59 + remote-endpoint = <&dpi_out>; 60 + }; 61 + }; 62 + }; 63 + }; 64 + 65 + ...
-32
Documentation/devicetree/bindings/display/panel/tpo,td028ttec1.txt
··· 1 - Toppoly TD028TTEC1 Panel 2 - ======================== 3 - 4 - Required properties: 5 - - compatible: "tpo,td028ttec1" 6 - 7 - Optional properties: 8 - - label: a symbolic name for the panel 9 - - backlight: phandle of the backlight device 10 - 11 - Required nodes: 12 - - Video port for DPI input 13 - 14 - Example 15 - ------- 16 - 17 - lcd-panel: td028ttec1@0 { 18 - compatible = "tpo,td028ttec1"; 19 - reg = <0>; 20 - spi-max-frequency = <100000>; 21 - spi-cpol; 22 - spi-cpha; 23 - 24 - label = "lcd"; 25 - backlight = <&backlight>; 26 - port { 27 - lcd_in: endpoint { 28 - remote-endpoint = <&dpi_out>; 29 - }; 30 - }; 31 - }; 32 -
-33
Documentation/devicetree/bindings/display/panel/tpo,td043mtea1.txt
··· 1 - TPO TD043MTEA1 Panel 2 - ==================== 3 - 4 - Required properties: 5 - - compatible: "tpo,td043mtea1" 6 - - reset-gpios: panel reset gpio 7 - 8 - Optional properties: 9 - - label: a symbolic name for the panel 10 - 11 - Required nodes: 12 - - Video port for DPI input 13 - 14 - Example 15 - ------- 16 - 17 - lcd-panel: panel@0 { 18 - compatible = "tpo,td043mtea1"; 19 - reg = <0>; 20 - spi-max-frequency = <100000>; 21 - spi-cpol; 22 - spi-cpha; 23 - 24 - label = "lcd"; 25 - 26 - reset-gpios = <&gpio7 7 0>; 27 - 28 - port { 29 - lcd_in: endpoint { 30 - remote-endpoint = <&dpi_out>; 31 - }; 32 - }; 33 - };
-72
Documentation/devicetree/bindings/display/rockchip/rockchip,rk3066-hdmi.txt
··· 1 - Rockchip specific extensions for rk3066 HDMI 2 - ============================================ 3 - 4 - Required properties: 5 - - compatible: 6 - "rockchip,rk3066-hdmi"; 7 - - reg: 8 - Physical base address and length of the controller's registers. 9 - - clocks, clock-names: 10 - Phandle to HDMI controller clock, name should be "hclk". 11 - - interrupts: 12 - HDMI interrupt number. 13 - - power-domains: 14 - Phandle to the RK3066_PD_VIO power domain. 15 - - rockchip,grf: 16 - This soc uses GRF regs to switch the HDMI TX input between vop0 and vop1. 17 - - ports: 18 - Contains one port node with two endpoints, numbered 0 and 1, 19 - connected respectively to vop0 and vop1. 20 - Contains one port node with one endpoint 21 - connected to a hdmi-connector node. 22 - - pinctrl-0, pinctrl-name: 23 - Switch the iomux for the HPD/I2C pins to HDMI function. 24 - 25 - Example: 26 - hdmi: hdmi@10116000 { 27 - compatible = "rockchip,rk3066-hdmi"; 28 - reg = <0x10116000 0x2000>; 29 - interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>; 30 - clocks = <&cru HCLK_HDMI>; 31 - clock-names = "hclk"; 32 - power-domains = <&power RK3066_PD_VIO>; 33 - rockchip,grf = <&grf>; 34 - pinctrl-names = "default"; 35 - pinctrl-0 = <&hdmii2c_xfer>, <&hdmi_hpd>; 36 - 37 - ports { 38 - #address-cells = <1>; 39 - #size-cells = <0>; 40 - hdmi_in: port@0 { 41 - reg = <0>; 42 - #address-cells = <1>; 43 - #size-cells = <0>; 44 - hdmi_in_vop0: endpoint@0 { 45 - reg = <0>; 46 - remote-endpoint = <&vop0_out_hdmi>; 47 - }; 48 - hdmi_in_vop1: endpoint@1 { 49 - reg = <1>; 50 - remote-endpoint = <&vop1_out_hdmi>; 51 - }; 52 - }; 53 - hdmi_out: port@1 { 54 - reg = <1>; 55 - hdmi_out_con: endpoint { 56 - remote-endpoint = <&hdmi_con_in>; 57 - }; 58 - }; 59 - }; 60 - }; 61 - 62 - &pinctrl { 63 - hdmi { 64 - hdmi_hpd: hdmi-hpd { 65 - rockchip,pins = <0 RK_PA0 1 &pcfg_pull_default>; 66 - }; 67 - hdmii2c_xfer: hdmii2c-xfer { 68 - rockchip,pins = <0 RK_PA1 1 &pcfg_pull_none>, 69 - <0 RK_PA2 1 &pcfg_pull_none>; 70 - }; 71 - }; 72 - };
+140
Documentation/devicetree/bindings/display/rockchip/rockchip,rk3066-hdmi.yaml
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + %YAML 1.2 3 + --- 4 + $id: http://devicetree.org/schemas/display/rockchip/rockchip,rk3066-hdmi.yaml# 5 + $schema: http://devicetree.org/meta-schemas/core.yaml# 6 + 7 + title: Rockchip rk3066 HDMI controller 8 + 9 + maintainers: 10 + - Sandy Huang <hjc@rock-chips.com> 11 + - Heiko Stuebner <heiko@sntech.de> 12 + 13 + properties: 14 + compatible: 15 + const: rockchip,rk3066-hdmi 16 + 17 + reg: 18 + maxItems: 1 19 + 20 + interrupts: 21 + maxItems: 1 22 + 23 + clocks: 24 + maxItems: 1 25 + 26 + clock-names: 27 + const: hclk 28 + 29 + pinctrl-0: 30 + maxItems: 2 31 + 32 + pinctrl-names: 33 + const: default 34 + description: 35 + Switch the iomux for the HPD/I2C pins to HDMI function. 36 + 37 + power-domains: 38 + maxItems: 1 39 + 40 + rockchip,grf: 41 + $ref: /schemas/types.yaml#/definitions/phandle 42 + description: 43 + This soc uses GRF regs to switch the HDMI TX input between vop0 and vop1. 44 + 45 + ports: 46 + type: object 47 + 48 + properties: 49 + "#address-cells": 50 + const: 1 51 + 52 + "#size-cells": 53 + const: 0 54 + 55 + port@0: 56 + type: object 57 + description: 58 + Port node with two endpoints, numbered 0 and 1, 59 + connected respectively to vop0 and vop1. 60 + 61 + port@1: 62 + type: object 63 + description: 64 + Port node with one endpoint connected to a hdmi-connector node. 65 + 66 + required: 67 + - "#address-cells" 68 + - "#size-cells" 69 + - port@0 70 + - port@1 71 + 72 + additionalProperties: false 73 + 74 + required: 75 + - compatible 76 + - reg 77 + - interrupts 78 + - clocks 79 + - clock-names 80 + - pinctrl-0 81 + - pinctrl-names 82 + - power-domains 83 + - rockchip,grf 84 + - ports 85 + 86 + additionalProperties: false 87 + 88 + examples: 89 + - | 90 + #include <dt-bindings/clock/rk3066a-cru.h> 91 + #include <dt-bindings/interrupt-controller/arm-gic.h> 92 + #include <dt-bindings/pinctrl/rockchip.h> 93 + #include <dt-bindings/power/rk3066-power.h> 94 + hdmi: hdmi@10116000 { 95 + compatible = "rockchip,rk3066-hdmi"; 96 + reg = <0x10116000 0x2000>; 97 + interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>; 98 + clocks = <&cru HCLK_HDMI>; 99 + clock-names = "hclk"; 100 + pinctrl-0 = <&hdmii2c_xfer>, <&hdmi_hpd>; 101 + pinctrl-names = "default"; 102 + power-domains = <&power RK3066_PD_VIO>; 103 + rockchip,grf = <&grf>; 104 + 105 + ports { 106 + #address-cells = <1>; 107 + #size-cells = <0>; 108 + hdmi_in: port@0 { 109 + reg = <0>; 110 + #address-cells = <1>; 111 + #size-cells = <0>; 112 + hdmi_in_vop0: endpoint@0 { 113 + reg = <0>; 114 + remote-endpoint = <&vop0_out_hdmi>; 115 + }; 116 + hdmi_in_vop1: endpoint@1 { 117 + reg = <1>; 118 + remote-endpoint = <&vop1_out_hdmi>; 119 + }; 120 + }; 121 + hdmi_out: port@1 { 122 + reg = <1>; 123 + hdmi_out_con: endpoint { 124 + remote-endpoint = <&hdmi_con_in>; 125 + }; 126 + }; 127 + }; 128 + }; 129 + 130 + pinctrl { 131 + hdmi { 132 + hdmi_hpd: hdmi-hpd { 133 + rockchip,pins = <0 RK_PA0 1 &pcfg_pull_default>; 134 + }; 135 + hdmii2c_xfer: hdmii2c-xfer { 136 + rockchip,pins = <0 RK_PA1 1 &pcfg_pull_none>, 137 + <0 RK_PA2 1 &pcfg_pull_none>; 138 + }; 139 + }; 140 + };
+2 -2
Documentation/driver-api/dma-buf.rst
··· 11 11 The three main components of this are: (1) dma-buf, representing a 12 12 sg_table and exposed to userspace as a file descriptor to allow passing 13 13 between devices, (2) fence, which provides a mechanism to signal when 14 - one device as finished access, and (3) reservation, which manages the 14 + one device has finished access, and (3) reservation, which manages the 15 15 shared or exclusive fence(s) associated with the buffer. 16 16 17 17 Shared DMA Buffers ··· 31 31 - implements and manages operations in :c:type:`struct dma_buf_ops 32 32 <dma_buf_ops>` for the buffer, 33 33 - allows other users to share the buffer by using dma_buf sharing APIs, 34 - - manages the details of buffer allocation, wrapped int a :c:type:`struct 34 + - manages the details of buffer allocation, wrapped in a :c:type:`struct 35 35 dma_buf <dma_buf>`, 36 36 - decides about the actual backing storage where this allocation happens, 37 37 - and takes care of any migration of scatterlist - for all (shared) users of
+3 -3
MAINTAINERS
··· 5256 5256 M: Linus Walleij <linus.walleij@linaro.org> 5257 5257 S: Maintained 5258 5258 T: git git://anongit.freedesktop.org/drm/drm-misc 5259 - F: Documentation/devicetree/bindings/display/panel/arm,versatile-tft-panel.txt 5259 + F: Documentation/devicetree/bindings/display/panel/arm,versatile-tft-panel.yaml 5260 5260 F: drivers/gpu/drm/panel/panel-arm-versatile.c 5261 5261 5262 5262 DRM DRIVER FOR ASPEED BMC GFX ··· 5282 5282 DRM DRIVER FOR BOE HIMAX8279D PANELS 5283 5283 M: Jerry Han <hanxu5@huaqin.corp-partner.google.com> 5284 5284 S: Maintained 5285 - F: Documentation/devicetree/bindings/display/panel/boe,himax8279d.txt 5285 + F: Documentation/devicetree/bindings/display/panel/boe,himax8279d.yaml 5286 5286 F: drivers/gpu/drm/panel/panel-boe-himax8279d.c 5287 5287 5288 5288 DRM DRIVER FOR FARADAY TVE200 TV ENCODER ··· 5383 5383 DRM DRIVER FOR OLIMEX LCD-OLINUXINO PANELS 5384 5384 M: Stefan Mavrodiev <stefan@olimex.com> 5385 5385 S: Maintained 5386 - F: Documentation/devicetree/bindings/display/panel/olimex,lcd-olinuxino.txt 5386 + F: Documentation/devicetree/bindings/display/panel/olimex,lcd-olinuxino.yaml 5387 5387 F: drivers/gpu/drm/panel/panel-olimex-lcd-olinuxino.c 5388 5388 5389 5389 DRM DRIVER FOR PERVASIVE DISPLAYS REPAPER PANELS
+9
arch/arm/mach-sa1100/shannon.c
··· 104 104 .enabled_at_boot = 1, 105 105 }; 106 106 107 + static struct gpiod_lookup_table shannon_display_gpio_table = { 108 + .dev_id = "sa11x0-fb", 109 + .table = { 110 + GPIO_LOOKUP("gpio", 22, "shannon-lcden", GPIO_ACTIVE_HIGH), 111 + { }, 112 + }, 113 + }; 114 + 107 115 static void __init shannon_init(void) 108 116 { 109 117 sa11x0_register_fixed_regulator(0, &shannon_cf_vcc_pdata, ··· 121 113 sa11x0_register_pcmcia(0, &shannon_pcmcia0_gpio_table); 122 114 sa11x0_register_pcmcia(1, &shannon_pcmcia1_gpio_table); 123 115 sa11x0_ppc_configure_mcp(); 116 + gpiod_add_lookup_table(&shannon_display_gpio_table); 124 117 sa11x0_register_lcd(&shannon_lcd_info); 125 118 sa11x0_register_mtd(&shannon_flash_data, &shannon_flash_resource, 1); 126 119 sa11x0_register_mcp(&shannon_mcp_data);
+12 -1
drivers/gpu/drm/ast/ast_mode.c
··· 881 881 .atomic_disable = ast_crtc_helper_atomic_disable, 882 882 }; 883 883 884 + static void ast_crtc_reset(struct drm_crtc *crtc) 885 + { 886 + struct ast_crtc_state *ast_state = 887 + kzalloc(sizeof(*ast_state), GFP_KERNEL); 888 + 889 + if (crtc->state) 890 + crtc->funcs->atomic_destroy_state(crtc, crtc->state); 891 + 892 + __drm_atomic_helper_crtc_reset(crtc, &ast_state->base); 893 + } 894 + 884 895 static void ast_crtc_destroy(struct drm_crtc *crtc) 885 896 { 886 897 drm_crtc_cleanup(crtc); ··· 930 919 } 931 920 932 921 static const struct drm_crtc_funcs ast_crtc_funcs = { 933 - .reset = drm_atomic_helper_crtc_reset, 922 + .reset = ast_crtc_reset, 934 923 .set_config = drm_crtc_helper_set_config, 935 924 .gamma_set = drm_atomic_helper_legacy_gamma_set, 936 925 .destroy = ast_crtc_destroy,
+1 -1
drivers/gpu/drm/bridge/adv7511/Kconfig
··· 6 6 select REGMAP_I2C 7 7 select DRM_MIPI_DSI 8 8 help 9 - Support for the Analog Device ADV7511(W)/13/33/35 HDMI encoders. 9 + Support for the Analog Devices ADV7511(W)/13/33/35 HDMI encoders. 10 10 11 11 config DRM_I2C_ADV7511_AUDIO 12 12 bool "ADV7511 HDMI Audio driver"
+21 -5
drivers/gpu/drm/bridge/adv7511/adv7511_audio.c
··· 19 19 { 20 20 switch (fs) { 21 21 case 32000: 22 - *n = 4096; 22 + case 48000: 23 + case 96000: 24 + case 192000: 25 + *n = fs * 128 / 1000; 23 26 break; 24 27 case 44100: 25 - *n = 6272; 26 - break; 27 - case 48000: 28 - *n = 6144; 28 + case 88200: 29 + case 176400: 30 + *n = fs * 128 / 900; 29 31 break; 30 32 } 31 33 ··· 121 119 audio_source = ADV7511_AUDIO_SOURCE_I2S; 122 120 i2s_format = ADV7511_I2S_FORMAT_LEFT_J; 123 121 break; 122 + case HDMI_SPDIF: 123 + audio_source = ADV7511_AUDIO_SOURCE_SPDIF; 124 + break; 124 125 default: 125 126 return -EINVAL; 126 127 } ··· 180 175 /* use Audio infoframe updated info */ 181 176 regmap_update_bits(adv7511->regmap, ADV7511_REG_GC(1), 182 177 BIT(5), 0); 178 + /* enable SPDIF receiver */ 179 + if (adv7511->audio_source == ADV7511_AUDIO_SOURCE_SPDIF) 180 + regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG, 181 + BIT(7), BIT(7)); 182 + 183 183 return 0; 184 184 } 185 185 186 186 static void audio_shutdown(struct device *dev, void *data) 187 187 { 188 + struct adv7511 *adv7511 = dev_get_drvdata(dev); 189 + 190 + if (adv7511->audio_source == ADV7511_AUDIO_SOURCE_SPDIF) 191 + regmap_update_bits(adv7511->regmap, ADV7511_REG_AUDIO_CONFIG, 192 + BIT(7), 0); 188 193 } 189 194 190 195 static int adv7511_hdmi_i2s_get_dai_id(struct snd_soc_component *component, ··· 228 213 .ops = &adv7511_codec_ops, 229 214 .max_i2s_channels = 2, 230 215 .i2s = 1, 216 + .spdif = 1, 231 217 }; 232 218 233 219 int adv7511_audio_init(struct device *dev, struct adv7511 *adv7511)
+1 -1
drivers/gpu/drm/drm_fb_cma_helper.c
··· 2 2 /* 3 3 * drm kms/fb cma (contiguous memory allocator) helper functions 4 4 * 5 - * Copyright (C) 2012 Analog Device Inc. 5 + * Copyright (C) 2012 Analog Devices Inc. 6 6 * Author: Lars-Peter Clausen <lars@metafoo.de> 7 7 * 8 8 * Based on udl_fbdev.c
+1 -3
drivers/gpu/drm/drm_gem_framebuffer_helper.c
··· 76 76 fb->obj[i] = obj[i]; 77 77 78 78 ret = drm_framebuffer_init(dev, fb, funcs); 79 - if (ret) { 79 + if (ret) 80 80 drm_err(dev, "Failed to init framebuffer: %d\n", ret); 81 - kfree(fb); 82 - } 83 81 84 82 return ret; 85 83 }
+1 -30
drivers/gpu/drm/gma500/cdv_intel_dp.c
··· 1272 1272 return ((l >> s) & 3) << DP_TRAIN_PRE_EMPHASIS_SHIFT; 1273 1273 } 1274 1274 1275 - 1276 - #if 0 1277 - static char *voltage_names[] = { 1278 - "0.4V", "0.6V", "0.8V", "1.2V" 1279 - }; 1280 - static char *pre_emph_names[] = { 1281 - "0dB", "3.5dB", "6dB", "9.5dB" 1282 - }; 1283 - static char *link_train_names[] = { 1284 - "pattern 1", "pattern 2", "idle", "off" 1285 - }; 1286 - #endif 1287 - 1288 1275 #define CDV_DP_VOLTAGE_MAX DP_TRAIN_VOLTAGE_SWING_LEVEL_3 1289 - /* 1290 - static uint8_t 1291 - cdv_intel_dp_pre_emphasis_max(uint8_t voltage_swing) 1292 - { 1293 - switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) { 1294 - case DP_TRAIN_VOLTAGE_SWING_400: 1295 - return DP_TRAIN_PRE_EMPHASIS_6; 1296 - case DP_TRAIN_VOLTAGE_SWING_600: 1297 - return DP_TRAIN_PRE_EMPHASIS_6; 1298 - case DP_TRAIN_VOLTAGE_SWING_800: 1299 - return DP_TRAIN_PRE_EMPHASIS_3_5; 1300 - case DP_TRAIN_VOLTAGE_SWING_1200: 1301 - default: 1302 - return DP_TRAIN_PRE_EMPHASIS_0; 1303 - } 1304 - } 1305 - */ 1276 + 1306 1277 static void 1307 1278 cdv_intel_get_adjust_train(struct gma_encoder *encoder) 1308 1279 {
-83
drivers/gpu/drm/gma500/cdv_intel_lvds.c
··· 74 74 return retval; 75 75 } 76 76 77 - #if 0 78 - /* 79 - * Set LVDS backlight level by I2C command 80 - */ 81 - static int cdv_lvds_i2c_set_brightness(struct drm_device *dev, 82 - unsigned int level) 83 - { 84 - struct drm_psb_private *dev_priv = dev->dev_private; 85 - struct psb_intel_i2c_chan *lvds_i2c_bus = dev_priv->lvds_i2c_bus; 86 - u8 out_buf[2]; 87 - unsigned int blc_i2c_brightness; 88 - 89 - struct i2c_msg msgs[] = { 90 - { 91 - .addr = lvds_i2c_bus->slave_addr, 92 - .flags = 0, 93 - .len = 2, 94 - .buf = out_buf, 95 - } 96 - }; 97 - 98 - blc_i2c_brightness = BRIGHTNESS_MASK & ((unsigned int)level * 99 - BRIGHTNESS_MASK / 100 - BRIGHTNESS_MAX_LEVEL); 101 - 102 - if (dev_priv->lvds_bl->pol == BLC_POLARITY_INVERSE) 103 - blc_i2c_brightness = BRIGHTNESS_MASK - blc_i2c_brightness; 104 - 105 - out_buf[0] = dev_priv->lvds_bl->brightnesscmd; 106 - out_buf[1] = (u8)blc_i2c_brightness; 107 - 108 - if (i2c_transfer(&lvds_i2c_bus->adapter, msgs, 1) == 1) 109 - return 0; 110 - 111 - DRM_ERROR("I2C transfer error\n"); 112 - return -1; 113 - } 114 - 115 - 116 - static int cdv_lvds_pwm_set_brightness(struct drm_device *dev, int level) 117 - { 118 - struct drm_psb_private *dev_priv = dev->dev_private; 119 - 120 - u32 max_pwm_blc; 121 - u32 blc_pwm_duty_cycle; 122 - 123 - max_pwm_blc = cdv_intel_lvds_get_max_backlight(dev); 124 - 125 - /*BLC_PWM_CTL Should be initiated while backlight device init*/ 126 - BUG_ON((max_pwm_blc & PSB_BLC_MAX_PWM_REG_FREQ) == 0); 127 - 128 - blc_pwm_duty_cycle = level * max_pwm_blc / BRIGHTNESS_MAX_LEVEL; 129 - 130 - if (dev_priv->lvds_bl->pol == BLC_POLARITY_INVERSE) 131 - blc_pwm_duty_cycle = max_pwm_blc - blc_pwm_duty_cycle; 132 - 133 - blc_pwm_duty_cycle &= PSB_BACKLIGHT_PWM_POLARITY_BIT_CLEAR; 134 - REG_WRITE(BLC_PWM_CTL, 135 - (max_pwm_blc << PSB_BACKLIGHT_PWM_CTL_SHIFT) | 136 - (blc_pwm_duty_cycle)); 137 - 138 - return 0; 139 - } 140 - 141 - /* 142 - * Set LVDS backlight level either by I2C or PWM 143 - */ 144 - void cdv_intel_lvds_set_brightness(struct drm_device *dev, int level) 145 - { 146 - struct drm_psb_private *dev_priv = dev->dev_private; 147 - 148 - if (!dev_priv->lvds_bl) { 149 - DRM_ERROR("NO LVDS Backlight Info\n"); 150 - return; 151 - } 152 - 153 - if (dev_priv->lvds_bl->type == BLC_I2C_TYPE) 154 - cdv_lvds_i2c_set_brightness(dev, level); 155 - else 156 - cdv_lvds_pwm_set_brightness(dev, level); 157 - } 158 - #endif 159 - 160 77 /** 161 78 * Sets the backlight level. 162 79 *
-31
drivers/gpu/drm/gma500/mdfld_intel_display.c
··· 658 658 659 659 dev_dbg(dev->dev, "pipe = 0x%x\n", pipe); 660 660 661 - #if 0 662 - if (pipe == 1) { 663 - if (!gma_power_begin(dev, true)) 664 - return 0; 665 - android_hdmi_crtc_mode_set(crtc, mode, adjusted_mode, 666 - x, y, old_fb); 667 - goto mrst_crtc_mode_set_exit; 668 - } 669 - #endif 670 - 671 661 ret = check_fb(crtc->primary->fb); 672 662 if (ret) 673 663 return ret; ··· 908 918 } 909 919 dpll = 0; 910 920 911 - #if 0 /* FIXME revisit later */ 912 - if (ksel == KSEL_CRYSTAL_19 || ksel == KSEL_BYPASS_19 || 913 - ksel == KSEL_BYPASS_25) 914 - dpll &= ~MDFLD_INPUT_REF_SEL; 915 - else if (ksel == KSEL_BYPASS_83_100) 916 - dpll |= MDFLD_INPUT_REF_SEL; 917 - #endif /* FIXME revisit later */ 918 - 919 921 if (is_hdmi) 920 922 dpll |= MDFLD_VCO_SEL; 921 923 ··· 917 935 /* compute bitmask from p1 value */ 918 936 dpll |= (1 << (clock.p1 - 2)) << 17; 919 937 920 - #if 0 /* 1080p30 & 720p */ 921 - dpll = 0x00050000; 922 - fp = 0x000001be; 923 - #endif 924 - #if 0 /* 480p */ 925 - dpll = 0x02010000; 926 - fp = 0x000000d2; 927 - #endif 928 938 } else { 929 - #if 0 /*DBI_TPO_480x864*/ 930 - dpll = 0x00020000; 931 - fp = 0x00000156; 932 - #endif /* DBI_TPO_480x864 */ /* get from spec. */ 933 - 934 939 dpll = 0x00800000; 935 940 fp = 0x000000c1; 936 941 }
-5
drivers/gpu/drm/gma500/oaktrail_hdmi.c
··· 663 663 kfree(gma_encoder); 664 664 } 665 665 666 - static const struct pci_device_id hdmi_ids[] = { 667 - { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x080d) }, 668 - { 0 } 669 - }; 670 - 671 666 void oaktrail_hdmi_setup(struct drm_device *dev) 672 667 { 673 668 struct drm_psb_private *dev_priv = dev->dev_private;
-99
drivers/gpu/drm/gma500/psb_intel_sdvo.c
··· 864 864 DRM_INFO("HDMI is not supported yet"); 865 865 866 866 return false; 867 - #if 0 868 - struct dip_infoframe avi_if = { 869 - .type = DIP_TYPE_AVI, 870 - .ver = DIP_VERSION_AVI, 871 - .len = DIP_LEN_AVI, 872 - }; 873 - uint8_t tx_rate = SDVO_HBUF_TX_VSYNC; 874 - uint8_t set_buf_index[2] = { 1, 0 }; 875 - uint64_t *data = (uint64_t *)&avi_if; 876 - unsigned i; 877 - 878 - intel_dip_infoframe_csum(&avi_if); 879 - 880 - if (!psb_intel_sdvo_set_value(psb_intel_sdvo, 881 - SDVO_CMD_SET_HBUF_INDEX, 882 - set_buf_index, 2)) 883 - return false; 884 - 885 - for (i = 0; i < sizeof(avi_if); i += 8) { 886 - if (!psb_intel_sdvo_set_value(psb_intel_sdvo, 887 - SDVO_CMD_SET_HBUF_DATA, 888 - data, 8)) 889 - return false; 890 - data++; 891 - } 892 - 893 - return psb_intel_sdvo_set_value(psb_intel_sdvo, 894 - SDVO_CMD_SET_HBUF_TXRATE, 895 - &tx_rate, 1); 896 - #endif 897 867 } 898 868 899 869 static bool psb_intel_sdvo_set_tv_format(struct psb_intel_sdvo *psb_intel_sdvo) ··· 1196 1226 1197 1227 return true; 1198 1228 } 1199 - 1200 - /* No use! */ 1201 - #if 0 1202 - struct drm_connector* psb_intel_sdvo_find(struct drm_device *dev, int sdvoB) 1203 - { 1204 - struct drm_connector *connector = NULL; 1205 - struct psb_intel_sdvo *iout = NULL; 1206 - struct psb_intel_sdvo *sdvo; 1207 - 1208 - /* find the sdvo connector */ 1209 - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 1210 - iout = to_psb_intel_sdvo(connector); 1211 - 1212 - if (iout->type != INTEL_OUTPUT_SDVO) 1213 - continue; 1214 - 1215 - sdvo = iout->dev_priv; 1216 - 1217 - if (sdvo->sdvo_reg == SDVOB && sdvoB) 1218 - return connector; 1219 - 1220 - if (sdvo->sdvo_reg == SDVOC && !sdvoB) 1221 - return connector; 1222 - 1223 - } 1224 - 1225 - return NULL; 1226 - } 1227 - 1228 - int psb_intel_sdvo_supports_hotplug(struct drm_connector *connector) 1229 - { 1230 - u8 response[2]; 1231 - u8 status; 1232 - struct psb_intel_sdvo *psb_intel_sdvo; 1233 - DRM_DEBUG_KMS("\n"); 1234 - 1235 - if (!connector) 1236 - return 0; 1237 - 1238 - psb_intel_sdvo = to_psb_intel_sdvo(connector); 1239 - 1240 - return psb_intel_sdvo_get_value(psb_intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT, 1241 - &response, 2) && response[0]; 1242 - } 1243 - 1244 - void psb_intel_sdvo_set_hotplug(struct drm_connector *connector, int on) 1245 - { 1246 - u8 response[2]; 1247 - u8 status; 1248 - struct psb_intel_sdvo *psb_intel_sdvo = to_psb_intel_sdvo(connector); 1249 - 1250 - psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_GET_ACTIVE_HOT_PLUG, NULL, 0); 1251 - psb_intel_sdvo_read_response(psb_intel_sdvo, &response, 2); 1252 - 1253 - if (on) { 1254 - psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_GET_HOT_PLUG_SUPPORT, NULL, 0); 1255 - status = psb_intel_sdvo_read_response(psb_intel_sdvo, &response, 2); 1256 - 1257 - psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_SET_ACTIVE_HOT_PLUG, &response, 2); 1258 - } else { 1259 - response[0] = 0; 1260 - response[1] = 0; 1261 - psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_SET_ACTIVE_HOT_PLUG, &response, 2); 1262 - } 1263 - 1264 - psb_intel_sdvo_write_cmd(psb_intel_sdvo, SDVO_CMD_GET_ACTIVE_HOT_PLUG, NULL, 0); 1265 - psb_intel_sdvo_read_response(psb_intel_sdvo, &response, 2); 1266 - } 1267 - #endif 1268 1229 1269 1230 static bool 1270 1231 psb_intel_sdvo_multifunc_encoder(struct psb_intel_sdvo *psb_intel_sdvo)
+1 -1
drivers/gpu/drm/rockchip/rockchip_drm_vop.c
··· 769 769 return true; 770 770 771 771 if (!rockchip_afbc(modifier)) { 772 - DRM_DEBUG_KMS("Unsupported format modifer 0x%llx\n", modifier); 772 + DRM_DEBUG_KMS("Unsupported format modifier 0x%llx\n", modifier); 773 773 774 774 return false; 775 775 }
-2
drivers/gpu/drm/tegra/dpaux.c
··· 5 5 6 6 #include <linux/clk.h> 7 7 #include <linux/delay.h> 8 - #include <linux/gpio.h> 9 8 #include <linux/interrupt.h> 10 9 #include <linux/io.h> 11 10 #include <linux/module.h> 12 11 #include <linux/of_device.h> 13 - #include <linux/of_gpio.h> 14 12 #include <linux/pinctrl/pinconf-generic.h> 15 13 #include <linux/pinctrl/pinctrl.h> 16 14 #include <linux/pinctrl/pinmux.h>
+1 -1
drivers/gpu/drm/tegra/drm.h
··· 9 9 10 10 #include <linux/host1x.h> 11 11 #include <linux/iova.h> 12 - #include <linux/of_gpio.h> 12 + #include <linux/gpio/consumer.h> 13 13 14 14 #include <drm/drm_atomic.h> 15 15 #include <drm/drm_edid.h>
+1 -1
drivers/gpu/drm/tegra/fb.c
··· 4 4 * Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved. 5 5 * 6 6 * Based on the KMS/FB CMA helpers 7 - * Copyright (C) 2012 Analog Device Inc. 7 + * Copyright (C) 2012 Analog Devices Inc. 8 8 */ 9 9 10 10 #include <linux/console.h>
-1
drivers/gpu/drm/tegra/hdmi.c
··· 7 7 #include <linux/clk.h> 8 8 #include <linux/debugfs.h> 9 9 #include <linux/delay.h> 10 - #include <linux/gpio.h> 11 10 #include <linux/hdmi.h> 12 11 #include <linux/math64.h> 13 12 #include <linux/module.h>
-1
drivers/gpu/drm/tegra/sor.c
··· 6 6 #include <linux/clk.h> 7 7 #include <linux/clk-provider.h> 8 8 #include <linux/debugfs.h> 9 - #include <linux/gpio.h> 10 9 #include <linux/io.h> 11 10 #include <linux/module.h> 12 11 #include <linux/of_device.h>
+1 -1
drivers/video/fbdev/Kconfig
··· 472 472 473 473 config FB_CONTROL 474 474 bool "Apple \"control\" display support" 475 - depends on (FB = y) && PPC_PMAC && PPC32 475 + depends on (FB = y) && ((PPC_PMAC && PPC32) || COMPILE_TEST) 476 476 select FB_CFB_FILLRECT 477 477 select FB_CFB_COPYAREA 478 478 select FB_CFB_IMAGEBLIT
+6 -4
drivers/video/fbdev/arcfb.c
··· 544 544 par->cslut[1] = 0x06; 545 545 info->flags = FBINFO_FLAG_DEFAULT; 546 546 spin_lock_init(&par->lock); 547 - retval = register_framebuffer(info); 548 - if (retval < 0) 549 - goto err1; 550 - platform_set_drvdata(dev, info); 551 547 if (irq) { 552 548 par->irq = irq; 553 549 if (request_irq(par->irq, &arcfb_interrupt, IRQF_SHARED, ··· 554 558 goto err1; 555 559 } 556 560 } 561 + retval = register_framebuffer(info); 562 + if (retval < 0) 563 + goto err1; 564 + platform_set_drvdata(dev, info); 557 565 fb_info(info, "Arc frame buffer device, using %dK of video memory\n", 558 566 videomemorysize >> 10); 559 567 ··· 593 593 594 594 if (info) { 595 595 unregister_framebuffer(info); 596 + if (irq) 597 + free_irq(((struct arcfb_par *)(info->par))->irq, info); 596 598 vfree((void __force *)info->screen_base); 597 599 framebuffer_release(info); 598 600 }
-14
drivers/video/fbdev/aty/aty128fb.c
··· 334 334 .name = "128-bit SDR SGRAM (1:1)", 335 335 }; 336 336 337 - static const struct aty128_meminfo sdr_64 = { 338 - .ML = 4, 339 - .MB = 8, 340 - .Trcd = 3, 341 - .Trp = 3, 342 - .Twr = 1, 343 - .CL = 3, 344 - .Tr2w = 1, 345 - .LoopLatency = 17, 346 - .DspOn = 46, 347 - .Rloop = 17, 348 - .name = "64-bit SDR SGRAM (1:1)", 349 - }; 350 - 351 337 static const struct aty128_meminfo sdr_sgram = { 352 338 .ML = 4, 353 339 .MB = 4,
+377 -426
drivers/video/fbdev/controlfb.c
··· 31 31 * more details. 32 32 */ 33 33 34 - #include <linux/module.h> 35 34 #include <linux/kernel.h> 36 35 #include <linux/errno.h> 37 36 #include <linux/string.h> ··· 47 48 #include <linux/nvram.h> 48 49 #include <linux/adb.h> 49 50 #include <linux/cuda.h> 51 + #ifdef CONFIG_PPC_PMAC 50 52 #include <asm/prom.h> 51 53 #include <asm/btext.h> 54 + #endif 52 55 53 56 #include "macmodes.h" 54 57 #include "controlfb.h" 58 + 59 + #ifndef CONFIG_PPC_PMAC 60 + #define invalid_vram_cache(addr) 61 + #undef in_8 62 + #undef out_8 63 + #undef in_le32 64 + #undef out_le32 65 + #define in_8(addr) 0 66 + #define out_8(addr, val) 67 + #define in_le32(addr) 0 68 + #define out_le32(addr, val) 69 + #define pgprot_cached_wthru(prot) (prot) 70 + #else 71 + static void invalid_vram_cache(void __force *addr) 72 + { 73 + eieio(); 74 + dcbf(addr); 75 + mb(); 76 + eieio(); 77 + dcbf(addr); 78 + mb(); 79 + } 80 + #endif 55 81 56 82 struct fb_par_control { 57 83 int vmode, cmode; ··· 141 117 #define CNTRL_REG(INFO,REG) (&(((INFO)->control_regs->REG).r)) 142 118 143 119 144 - /******************** Prototypes for exported functions ********************/ 145 - /* 146 - * struct fb_ops 147 - */ 148 - static int controlfb_pan_display(struct fb_var_screeninfo *var, 149 - struct fb_info *info); 150 - static int controlfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, 151 - u_int transp, struct fb_info *info); 152 - static int controlfb_blank(int blank_mode, struct fb_info *info); 153 - static int controlfb_mmap(struct fb_info *info, 154 - struct vm_area_struct *vma); 155 - static int controlfb_set_par (struct fb_info *info); 156 - static int controlfb_check_var (struct fb_var_screeninfo *var, struct fb_info *info); 157 - 158 - /******************** Prototypes for internal functions **********************/ 159 - 160 - static void set_control_clock(unsigned char *params); 161 - static int init_control(struct fb_info_control *p); 162 - static void control_set_hardware(struct fb_info_control *p, 163 - struct fb_par_control *par); 164 - static int control_of_init(struct device_node *dp); 165 - static void find_vram_size(struct fb_info_control *p); 166 - static int read_control_sense(struct fb_info_control *p); 167 - static int calc_clock_params(unsigned long clk, unsigned char *param); 168 - static int control_var_to_par(struct fb_var_screeninfo *var, 169 - struct fb_par_control *par, const struct fb_info *fb_info); 170 - static inline void control_par_to_var(struct fb_par_control *par, 171 - struct fb_var_screeninfo *var); 172 - static void control_init_info(struct fb_info *info, struct fb_info_control *p); 173 - static void control_cleanup(void); 174 - 175 - 176 120 /************************** Internal variables *******************************/ 177 121 178 122 static struct fb_info_control *control_fb; ··· 148 156 static int default_vmode __initdata = VMODE_NVRAM; 149 157 static int default_cmode __initdata = CMODE_NVRAM; 150 158 151 - 152 - static const struct fb_ops controlfb_ops = { 153 - .owner = THIS_MODULE, 154 - .fb_check_var = controlfb_check_var, 155 - .fb_set_par = controlfb_set_par, 156 - .fb_setcolreg = controlfb_setcolreg, 157 - .fb_pan_display = controlfb_pan_display, 158 - .fb_blank = controlfb_blank, 159 - .fb_mmap = controlfb_mmap, 160 - .fb_fillrect = cfb_fillrect, 161 - .fb_copyarea = cfb_copyarea, 162 - .fb_imageblit = cfb_imageblit, 163 - }; 164 - 165 - 166 - /******************** The functions for controlfb_ops ********************/ 167 - 168 - #ifdef MODULE 169 - MODULE_LICENSE("GPL"); 170 - 171 - int init_module(void) 172 - { 173 - struct device_node *dp; 174 - int ret = -ENXIO; 175 - 176 - dp = of_find_node_by_name(NULL, "control"); 177 - if (dp && !control_of_init(dp)) 178 - ret = 0; 179 - of_node_put(dp); 180 - 181 - return ret; 182 - } 183 - 184 - void cleanup_module(void) 185 - { 186 - control_cleanup(); 187 - } 188 - #endif 189 - 190 - /* 191 - * Checks a var structure 192 - */ 193 - static int controlfb_check_var (struct fb_var_screeninfo *var, struct fb_info *info) 194 - { 195 - struct fb_par_control par; 196 - int err; 197 - 198 - err = control_var_to_par(var, &par, info); 199 - if (err) 200 - return err; 201 - control_par_to_var(&par, var); 202 - 203 - return 0; 204 - } 205 - 206 - /* 207 - * Applies current var to display 208 - */ 209 - static int controlfb_set_par (struct fb_info *info) 210 - { 211 - struct fb_info_control *p = 212 - container_of(info, struct fb_info_control, info); 213 - struct fb_par_control par; 214 - int err; 215 - 216 - if((err = control_var_to_par(&info->var, &par, info))) { 217 - printk (KERN_ERR "controlfb_set_par: error calling" 218 - " control_var_to_par: %d.\n", err); 219 - return err; 220 - } 221 - 222 - control_set_hardware(p, &par); 223 - 224 - info->fix.visual = (p->par.cmode == CMODE_8) ? 225 - FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR; 226 - info->fix.line_length = p->par.pitch; 227 - info->fix.xpanstep = 32 >> p->par.cmode; 228 - info->fix.ypanstep = 1; 229 - 230 - return 0; 231 - } 232 - 233 - /* 234 - * Set screen start address according to var offset values 235 - */ 236 - static inline void set_screen_start(int xoffset, int yoffset, 237 - struct fb_info_control *p) 238 - { 239 - struct fb_par_control *par = &p->par; 240 - 241 - par->xoffset = xoffset; 242 - par->yoffset = yoffset; 243 - out_le32(CNTRL_REG(p,start_addr), 244 - par->yoffset * par->pitch + (par->xoffset << par->cmode)); 245 - } 246 - 247 - 248 - static int controlfb_pan_display(struct fb_var_screeninfo *var, 249 - struct fb_info *info) 250 - { 251 - unsigned int xoffset, hstep; 252 - struct fb_info_control *p = 253 - container_of(info, struct fb_info_control, info); 254 - struct fb_par_control *par = &p->par; 255 - 256 - /* 257 - * make sure start addr will be 32-byte aligned 258 - */ 259 - hstep = 0x1f >> par->cmode; 260 - xoffset = (var->xoffset + hstep) & ~hstep; 261 - 262 - if (xoffset+par->xres > par->vxres || 263 - var->yoffset+par->yres > par->vyres) 264 - return -EINVAL; 265 - 266 - set_screen_start(xoffset, var->yoffset, p); 267 - 268 - return 0; 269 - } 270 - 271 - 272 - /* 273 - * Private mmap since we want to have a different caching on the framebuffer 274 - * for controlfb. 275 - * Note there's no locking in here; it's done in fb_mmap() in fbmem.c. 276 - */ 277 - static int controlfb_mmap(struct fb_info *info, 278 - struct vm_area_struct *vma) 279 - { 280 - unsigned long mmio_pgoff; 281 - unsigned long start; 282 - u32 len; 283 - 284 - start = info->fix.smem_start; 285 - len = info->fix.smem_len; 286 - mmio_pgoff = PAGE_ALIGN((start & ~PAGE_MASK) + len) >> PAGE_SHIFT; 287 - if (vma->vm_pgoff >= mmio_pgoff) { 288 - if (info->var.accel_flags) 289 - return -EINVAL; 290 - vma->vm_pgoff -= mmio_pgoff; 291 - start = info->fix.mmio_start; 292 - len = info->fix.mmio_len; 293 - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); 294 - } else { 295 - /* framebuffer */ 296 - vma->vm_page_prot = pgprot_cached_wthru(vma->vm_page_prot); 297 - } 298 - 299 - return vm_iomap_memory(vma, start, len); 300 - } 301 - 302 - static int controlfb_blank(int blank_mode, struct fb_info *info) 303 - { 304 - struct fb_info_control *p = 305 - container_of(info, struct fb_info_control, info); 306 - unsigned ctrl; 307 - 308 - ctrl = le32_to_cpup(CNTRL_REG(p,ctrl)); 309 - if (blank_mode > 0) 310 - switch (blank_mode) { 311 - case FB_BLANK_VSYNC_SUSPEND: 312 - ctrl &= ~3; 313 - break; 314 - case FB_BLANK_HSYNC_SUSPEND: 315 - ctrl &= ~0x30; 316 - break; 317 - case FB_BLANK_POWERDOWN: 318 - ctrl &= ~0x33; 319 - /* fall through */ 320 - case FB_BLANK_NORMAL: 321 - ctrl |= 0x400; 322 - break; 323 - default: 324 - break; 325 - } 326 - else { 327 - ctrl &= ~0x400; 328 - ctrl |= 0x33; 329 - } 330 - out_le32(CNTRL_REG(p,ctrl), ctrl); 331 - 332 - return 0; 333 - } 334 159 335 160 static int controlfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, 336 161 u_int transp, struct fb_info *info) ··· 205 396 #endif 206 397 } 207 398 208 - 209 399 /* 210 - * finish off the driver initialization and register 400 + * Set screen start address according to var offset values 211 401 */ 212 - static int __init init_control(struct fb_info_control *p) 402 + static inline void set_screen_start(int xoffset, int yoffset, 403 + struct fb_info_control *p) 213 404 { 214 - int full, sense, vmode, cmode, vyres; 215 - struct fb_var_screeninfo var; 216 - int rc; 217 - 218 - printk(KERN_INFO "controlfb: "); 405 + struct fb_par_control *par = &p->par; 219 406 220 - full = p->total_vram == 0x400000; 221 - 222 - /* Try to pick a video mode out of NVRAM if we have one. */ 223 - cmode = default_cmode; 224 - if (IS_REACHABLE(CONFIG_NVRAM) && cmode == CMODE_NVRAM) 225 - cmode = nvram_read_byte(NV_CMODE); 226 - if (cmode < CMODE_8 || cmode > CMODE_32) 227 - cmode = CMODE_8; 228 - 229 - vmode = default_vmode; 230 - if (IS_REACHABLE(CONFIG_NVRAM) && vmode == VMODE_NVRAM) 231 - vmode = nvram_read_byte(NV_VMODE); 232 - if (vmode < 1 || vmode > VMODE_MAX || 233 - control_mac_modes[vmode - 1].m[full] < cmode) { 234 - sense = read_control_sense(p); 235 - printk(KERN_CONT "Monitor sense value = 0x%x, ", sense); 236 - vmode = mac_map_monitor_sense(sense); 237 - if (control_mac_modes[vmode - 1].m[full] < 0) 238 - vmode = VMODE_640_480_60; 239 - cmode = min(cmode, control_mac_modes[vmode - 1].m[full]); 240 - } 241 - 242 - /* Initialize info structure */ 243 - control_init_info(&p->info, p); 244 - 245 - /* Setup default var */ 246 - if (mac_vmode_to_var(vmode, cmode, &var) < 0) { 247 - /* This shouldn't happen! */ 248 - printk("mac_vmode_to_var(%d, %d,) failed\n", vmode, cmode); 249 - try_again: 250 - vmode = VMODE_640_480_60; 251 - cmode = CMODE_8; 252 - if (mac_vmode_to_var(vmode, cmode, &var) < 0) { 253 - printk(KERN_ERR "controlfb: mac_vmode_to_var() failed\n"); 254 - return -ENXIO; 255 - } 256 - printk(KERN_INFO "controlfb: "); 257 - } 258 - printk("using video mode %d and color mode %d.\n", vmode, cmode); 259 - 260 - vyres = (p->total_vram - CTRLFB_OFF) / (var.xres << cmode); 261 - if (vyres > var.yres) 262 - var.yres_virtual = vyres; 263 - 264 - /* Apply default var */ 265 - var.activate = FB_ACTIVATE_NOW; 266 - rc = fb_set_var(&p->info, &var); 267 - if (rc && (vmode != VMODE_640_480_60 || cmode != CMODE_8)) 268 - goto try_again; 269 - 270 - /* Register with fbdev layer */ 271 - if (register_framebuffer(&p->info) < 0) 272 - return -ENXIO; 273 - 274 - fb_info(&p->info, "control display adapter\n"); 275 - 276 - return 0; 407 + par->xoffset = xoffset; 408 + par->yoffset = yoffset; 409 + out_le32(CNTRL_REG(p,start_addr), 410 + par->yoffset * par->pitch + (par->xoffset << par->cmode)); 277 411 } 278 412 279 413 #define RADACAL_WRITE(a,d) \ ··· 280 528 #endif /* CONFIG_BOOTX_TEXT */ 281 529 } 282 530 283 - 284 - /* 285 - * Parse user specified options (`video=controlfb:') 286 - */ 287 - static void __init control_setup(char *options) 288 - { 289 - char *this_opt; 290 - 291 - if (!options || !*options) 292 - return; 293 - 294 - while ((this_opt = strsep(&options, ",")) != NULL) { 295 - if (!strncmp(this_opt, "vmode:", 6)) { 296 - int vmode = simple_strtoul(this_opt+6, NULL, 0); 297 - if (vmode > 0 && vmode <= VMODE_MAX && 298 - control_mac_modes[vmode - 1].m[1] >= 0) 299 - default_vmode = vmode; 300 - } else if (!strncmp(this_opt, "cmode:", 6)) { 301 - int depth = simple_strtoul(this_opt+6, NULL, 0); 302 - switch (depth) { 303 - case CMODE_8: 304 - case CMODE_16: 305 - case CMODE_32: 306 - default_cmode = depth; 307 - break; 308 - case 8: 309 - default_cmode = CMODE_8; 310 - break; 311 - case 15: 312 - case 16: 313 - default_cmode = CMODE_16; 314 - break; 315 - case 24: 316 - case 32: 317 - default_cmode = CMODE_32; 318 - break; 319 - } 320 - } 321 - } 322 - } 323 - 324 - static int __init control_init(void) 325 - { 326 - struct device_node *dp; 327 - char *option = NULL; 328 - int ret = -ENXIO; 329 - 330 - if (fb_get_options("controlfb", &option)) 331 - return -ENODEV; 332 - control_setup(option); 333 - 334 - dp = of_find_node_by_name(NULL, "control"); 335 - if (dp && !control_of_init(dp)) 336 - ret = 0; 337 - of_node_put(dp); 338 - 339 - return ret; 340 - } 341 - 342 - module_init(control_init); 343 - 344 531 /* Work out which banks of VRAM we have installed. */ 345 532 /* danj: I guess the card just ignores writes to nonexistant VRAM... */ 346 533 ··· 296 605 297 606 out_8(&p->frame_buffer[0x600000], 0xb3); 298 607 out_8(&p->frame_buffer[0x600001], 0x71); 299 - asm volatile("eieio; dcbf 0,%0" : : "r" (&p->frame_buffer[0x600000]) 300 - : "memory" ); 301 - mb(); 302 - asm volatile("eieio; dcbi 0,%0" : : "r" (&p->frame_buffer[0x600000]) 303 - : "memory" ); 304 - mb(); 608 + invalid_vram_cache(&p->frame_buffer[0x600000]); 305 609 306 610 bank2 = (in_8(&p->frame_buffer[0x600000]) == 0xb3) 307 611 && (in_8(&p->frame_buffer[0x600001]) == 0x71); ··· 310 624 311 625 out_8(&p->frame_buffer[0], 0x5a); 312 626 out_8(&p->frame_buffer[1], 0xc7); 313 - asm volatile("eieio; dcbf 0,%0" : : "r" (&p->frame_buffer[0]) 314 - : "memory" ); 315 - mb(); 316 - asm volatile("eieio; dcbi 0,%0" : : "r" (&p->frame_buffer[0]) 317 - : "memory" ); 318 - mb(); 627 + invalid_vram_cache(&p->frame_buffer[0]); 319 628 320 629 bank1 = (in_8(&p->frame_buffer[0]) == 0x5a) 321 630 && (in_8(&p->frame_buffer[1]) == 0xc7); ··· 342 661 printk(KERN_INFO "controlfb: VRAM Total = %dMB " 343 662 "(%dMB @ bank 1, %dMB @ bank 2)\n", 344 663 (bank1 + bank2) << 1, bank1 << 1, bank2 << 1); 345 - } 346 - 347 - 348 - /* 349 - * find "control" and initialize 350 - */ 351 - static int __init control_of_init(struct device_node *dp) 352 - { 353 - struct fb_info_control *p; 354 - struct resource fb_res, reg_res; 355 - 356 - if (control_fb) { 357 - printk(KERN_ERR "controlfb: only one control is supported\n"); 358 - return -ENXIO; 359 - } 360 - 361 - if (of_pci_address_to_resource(dp, 2, &fb_res) || 362 - of_pci_address_to_resource(dp, 1, &reg_res)) { 363 - printk(KERN_ERR "can't get 2 addresses for control\n"); 364 - return -ENXIO; 365 - } 366 - p = kzalloc(sizeof(*p), GFP_KERNEL); 367 - if (!p) 368 - return -ENOMEM; 369 - control_fb = p; /* save it for cleanups */ 370 - 371 - /* Map in frame buffer and registers */ 372 - p->fb_orig_base = fb_res.start; 373 - p->fb_orig_size = resource_size(&fb_res); 374 - /* use the big-endian aperture (??) */ 375 - p->frame_buffer_phys = fb_res.start + 0x800000; 376 - p->control_regs_phys = reg_res.start; 377 - p->control_regs_size = resource_size(&reg_res); 378 - 379 - if (!p->fb_orig_base || 380 - !request_mem_region(p->fb_orig_base,p->fb_orig_size,"controlfb")) { 381 - p->fb_orig_base = 0; 382 - goto error_out; 383 - } 384 - /* map at most 8MB for the frame buffer */ 385 - p->frame_buffer = ioremap_wt(p->frame_buffer_phys, 0x800000); 386 - 387 - if (!p->control_regs_phys || 388 - !request_mem_region(p->control_regs_phys, p->control_regs_size, 389 - "controlfb regs")) { 390 - p->control_regs_phys = 0; 391 - goto error_out; 392 - } 393 - p->control_regs = ioremap(p->control_regs_phys, p->control_regs_size); 394 - 395 - p->cmap_regs_phys = 0xf301b000; /* XXX not in prom? */ 396 - if (!request_mem_region(p->cmap_regs_phys, 0x1000, "controlfb cmap")) { 397 - p->cmap_regs_phys = 0; 398 - goto error_out; 399 - } 400 - p->cmap_regs = ioremap(p->cmap_regs_phys, 0x1000); 401 - 402 - if (!p->cmap_regs || !p->control_regs || !p->frame_buffer) 403 - goto error_out; 404 - 405 - find_vram_size(p); 406 - if (!p->total_vram) 407 - goto error_out; 408 - 409 - if (init_control(p) < 0) 410 - goto error_out; 411 - 412 - return 0; 413 - 414 - error_out: 415 - control_cleanup(); 416 - return -ENXIO; 417 664 } 418 665 419 666 /* ··· 628 1019 var->pixclock >>= par->regvals.clock_params[2]; 629 1020 } 630 1021 1022 + /******************** The functions for controlfb_ops ********************/ 1023 + 1024 + /* 1025 + * Checks a var structure 1026 + */ 1027 + static int controlfb_check_var (struct fb_var_screeninfo *var, struct fb_info *info) 1028 + { 1029 + struct fb_par_control par; 1030 + int err; 1031 + 1032 + err = control_var_to_par(var, &par, info); 1033 + if (err) 1034 + return err; 1035 + control_par_to_var(&par, var); 1036 + 1037 + return 0; 1038 + } 1039 + 1040 + /* 1041 + * Applies current var to display 1042 + */ 1043 + static int controlfb_set_par (struct fb_info *info) 1044 + { 1045 + struct fb_info_control *p = 1046 + container_of(info, struct fb_info_control, info); 1047 + struct fb_par_control par; 1048 + int err; 1049 + 1050 + if((err = control_var_to_par(&info->var, &par, info))) { 1051 + printk (KERN_ERR "controlfb_set_par: error calling" 1052 + " control_var_to_par: %d.\n", err); 1053 + return err; 1054 + } 1055 + 1056 + control_set_hardware(p, &par); 1057 + 1058 + info->fix.visual = (p->par.cmode == CMODE_8) ? 1059 + FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR; 1060 + info->fix.line_length = p->par.pitch; 1061 + info->fix.xpanstep = 32 >> p->par.cmode; 1062 + info->fix.ypanstep = 1; 1063 + 1064 + return 0; 1065 + } 1066 + 1067 + static int controlfb_pan_display(struct fb_var_screeninfo *var, 1068 + struct fb_info *info) 1069 + { 1070 + unsigned int xoffset, hstep; 1071 + struct fb_info_control *p = 1072 + container_of(info, struct fb_info_control, info); 1073 + struct fb_par_control *par = &p->par; 1074 + 1075 + /* 1076 + * make sure start addr will be 32-byte aligned 1077 + */ 1078 + hstep = 0x1f >> par->cmode; 1079 + xoffset = (var->xoffset + hstep) & ~hstep; 1080 + 1081 + if (xoffset+par->xres > par->vxres || 1082 + var->yoffset+par->yres > par->vyres) 1083 + return -EINVAL; 1084 + 1085 + set_screen_start(xoffset, var->yoffset, p); 1086 + 1087 + return 0; 1088 + } 1089 + 1090 + static int controlfb_blank(int blank_mode, struct fb_info *info) 1091 + { 1092 + struct fb_info_control __maybe_unused *p = 1093 + container_of(info, struct fb_info_control, info); 1094 + unsigned ctrl; 1095 + 1096 + ctrl = in_le32(CNTRL_REG(p, ctrl)); 1097 + if (blank_mode > 0) 1098 + switch (blank_mode) { 1099 + case FB_BLANK_VSYNC_SUSPEND: 1100 + ctrl &= ~3; 1101 + break; 1102 + case FB_BLANK_HSYNC_SUSPEND: 1103 + ctrl &= ~0x30; 1104 + break; 1105 + case FB_BLANK_POWERDOWN: 1106 + ctrl &= ~0x33; 1107 + /* fall through */ 1108 + case FB_BLANK_NORMAL: 1109 + ctrl |= 0x400; 1110 + break; 1111 + default: 1112 + break; 1113 + } 1114 + else { 1115 + ctrl &= ~0x400; 1116 + ctrl |= 0x33; 1117 + } 1118 + out_le32(CNTRL_REG(p,ctrl), ctrl); 1119 + 1120 + return 0; 1121 + } 1122 + 1123 + /* 1124 + * Private mmap since we want to have a different caching on the framebuffer 1125 + * for controlfb. 1126 + * Note there's no locking in here; it's done in fb_mmap() in fbmem.c. 1127 + */ 1128 + static int controlfb_mmap(struct fb_info *info, 1129 + struct vm_area_struct *vma) 1130 + { 1131 + unsigned long mmio_pgoff; 1132 + unsigned long start; 1133 + u32 len; 1134 + 1135 + start = info->fix.smem_start; 1136 + len = info->fix.smem_len; 1137 + mmio_pgoff = PAGE_ALIGN((start & ~PAGE_MASK) + len) >> PAGE_SHIFT; 1138 + if (vma->vm_pgoff >= mmio_pgoff) { 1139 + if (info->var.accel_flags) 1140 + return -EINVAL; 1141 + vma->vm_pgoff -= mmio_pgoff; 1142 + start = info->fix.mmio_start; 1143 + len = info->fix.mmio_len; 1144 + vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); 1145 + } else { 1146 + /* framebuffer */ 1147 + vma->vm_page_prot = pgprot_cached_wthru(vma->vm_page_prot); 1148 + } 1149 + 1150 + return vm_iomap_memory(vma, start, len); 1151 + } 1152 + 1153 + static const struct fb_ops controlfb_ops = { 1154 + .owner = THIS_MODULE, 1155 + .fb_check_var = controlfb_check_var, 1156 + .fb_set_par = controlfb_set_par, 1157 + .fb_setcolreg = controlfb_setcolreg, 1158 + .fb_pan_display = controlfb_pan_display, 1159 + .fb_blank = controlfb_blank, 1160 + .fb_mmap = controlfb_mmap, 1161 + .fb_fillrect = cfb_fillrect, 1162 + .fb_copyarea = cfb_copyarea, 1163 + .fb_imageblit = cfb_imageblit, 1164 + }; 1165 + 631 1166 /* 632 1167 * Set misc info vars for this driver 633 1168 */ ··· 798 1045 info->fix.accel = FB_ACCEL_NONE; 799 1046 } 800 1047 1048 + /* 1049 + * Parse user specified options (`video=controlfb:') 1050 + */ 1051 + static void __init control_setup(char *options) 1052 + { 1053 + char *this_opt; 1054 + 1055 + if (!options || !*options) 1056 + return; 1057 + 1058 + while ((this_opt = strsep(&options, ",")) != NULL) { 1059 + if (!strncmp(this_opt, "vmode:", 6)) { 1060 + int vmode = simple_strtoul(this_opt+6, NULL, 0); 1061 + if (vmode > 0 && vmode <= VMODE_MAX && 1062 + control_mac_modes[vmode - 1].m[1] >= 0) 1063 + default_vmode = vmode; 1064 + } else if (!strncmp(this_opt, "cmode:", 6)) { 1065 + int depth = simple_strtoul(this_opt+6, NULL, 0); 1066 + switch (depth) { 1067 + case CMODE_8: 1068 + case CMODE_16: 1069 + case CMODE_32: 1070 + default_cmode = depth; 1071 + break; 1072 + case 8: 1073 + default_cmode = CMODE_8; 1074 + break; 1075 + case 15: 1076 + case 16: 1077 + default_cmode = CMODE_16; 1078 + break; 1079 + case 24: 1080 + case 32: 1081 + default_cmode = CMODE_32; 1082 + break; 1083 + } 1084 + } 1085 + } 1086 + } 1087 + 1088 + /* 1089 + * finish off the driver initialization and register 1090 + */ 1091 + static int __init init_control(struct fb_info_control *p) 1092 + { 1093 + int full, sense, vmode, cmode, vyres; 1094 + struct fb_var_screeninfo var; 1095 + int rc; 1096 + 1097 + printk(KERN_INFO "controlfb: "); 1098 + 1099 + full = p->total_vram == 0x400000; 1100 + 1101 + /* Try to pick a video mode out of NVRAM if we have one. */ 1102 + cmode = default_cmode; 1103 + if (IS_REACHABLE(CONFIG_NVRAM) && cmode == CMODE_NVRAM) 1104 + cmode = nvram_read_byte(NV_CMODE); 1105 + if (cmode < CMODE_8 || cmode > CMODE_32) 1106 + cmode = CMODE_8; 1107 + 1108 + vmode = default_vmode; 1109 + if (IS_REACHABLE(CONFIG_NVRAM) && vmode == VMODE_NVRAM) 1110 + vmode = nvram_read_byte(NV_VMODE); 1111 + if (vmode < 1 || vmode > VMODE_MAX || 1112 + control_mac_modes[vmode - 1].m[full] < cmode) { 1113 + sense = read_control_sense(p); 1114 + printk(KERN_CONT "Monitor sense value = 0x%x, ", sense); 1115 + vmode = mac_map_monitor_sense(sense); 1116 + if (control_mac_modes[vmode - 1].m[full] < 0) 1117 + vmode = VMODE_640_480_60; 1118 + cmode = min(cmode, control_mac_modes[vmode - 1].m[full]); 1119 + } 1120 + 1121 + /* Initialize info structure */ 1122 + control_init_info(&p->info, p); 1123 + 1124 + /* Setup default var */ 1125 + if (mac_vmode_to_var(vmode, cmode, &var) < 0) { 1126 + /* This shouldn't happen! */ 1127 + printk("mac_vmode_to_var(%d, %d,) failed\n", vmode, cmode); 1128 + try_again: 1129 + vmode = VMODE_640_480_60; 1130 + cmode = CMODE_8; 1131 + if (mac_vmode_to_var(vmode, cmode, &var) < 0) { 1132 + printk(KERN_ERR "controlfb: mac_vmode_to_var() failed\n"); 1133 + return -ENXIO; 1134 + } 1135 + printk(KERN_INFO "controlfb: "); 1136 + } 1137 + printk("using video mode %d and color mode %d.\n", vmode, cmode); 1138 + 1139 + vyres = (p->total_vram - CTRLFB_OFF) / (var.xres << cmode); 1140 + if (vyres > var.yres) 1141 + var.yres_virtual = vyres; 1142 + 1143 + /* Apply default var */ 1144 + var.activate = FB_ACTIVATE_NOW; 1145 + rc = fb_set_var(&p->info, &var); 1146 + if (rc && (vmode != VMODE_640_480_60 || cmode != CMODE_8)) 1147 + goto try_again; 1148 + 1149 + /* Register with fbdev layer */ 1150 + if (register_framebuffer(&p->info) < 0) 1151 + return -ENXIO; 1152 + 1153 + fb_info(&p->info, "control display adapter\n"); 1154 + 1155 + return 0; 1156 + } 801 1157 802 1158 static void control_cleanup(void) 803 1159 { ··· 933 1071 kfree(p); 934 1072 } 935 1073 1074 + /* 1075 + * find "control" and initialize 1076 + */ 1077 + static int __init control_of_init(struct device_node *dp) 1078 + { 1079 + struct fb_info_control *p; 1080 + struct resource fb_res, reg_res; 936 1081 1082 + if (control_fb) { 1083 + printk(KERN_ERR "controlfb: only one control is supported\n"); 1084 + return -ENXIO; 1085 + } 1086 + 1087 + if (of_pci_address_to_resource(dp, 2, &fb_res) || 1088 + of_pci_address_to_resource(dp, 1, &reg_res)) { 1089 + printk(KERN_ERR "can't get 2 addresses for control\n"); 1090 + return -ENXIO; 1091 + } 1092 + p = kzalloc(sizeof(*p), GFP_KERNEL); 1093 + if (!p) 1094 + return -ENOMEM; 1095 + control_fb = p; /* save it for cleanups */ 1096 + 1097 + /* Map in frame buffer and registers */ 1098 + p->fb_orig_base = fb_res.start; 1099 + p->fb_orig_size = resource_size(&fb_res); 1100 + /* use the big-endian aperture (??) */ 1101 + p->frame_buffer_phys = fb_res.start + 0x800000; 1102 + p->control_regs_phys = reg_res.start; 1103 + p->control_regs_size = resource_size(&reg_res); 1104 + 1105 + if (!p->fb_orig_base || 1106 + !request_mem_region(p->fb_orig_base,p->fb_orig_size,"controlfb")) { 1107 + p->fb_orig_base = 0; 1108 + goto error_out; 1109 + } 1110 + /* map at most 8MB for the frame buffer */ 1111 + p->frame_buffer = ioremap_wt(p->frame_buffer_phys, 0x800000); 1112 + 1113 + if (!p->control_regs_phys || 1114 + !request_mem_region(p->control_regs_phys, p->control_regs_size, 1115 + "controlfb regs")) { 1116 + p->control_regs_phys = 0; 1117 + goto error_out; 1118 + } 1119 + p->control_regs = ioremap(p->control_regs_phys, p->control_regs_size); 1120 + 1121 + p->cmap_regs_phys = 0xf301b000; /* XXX not in prom? */ 1122 + if (!request_mem_region(p->cmap_regs_phys, 0x1000, "controlfb cmap")) { 1123 + p->cmap_regs_phys = 0; 1124 + goto error_out; 1125 + } 1126 + p->cmap_regs = ioremap(p->cmap_regs_phys, 0x1000); 1127 + 1128 + if (!p->cmap_regs || !p->control_regs || !p->frame_buffer) 1129 + goto error_out; 1130 + 1131 + find_vram_size(p); 1132 + if (!p->total_vram) 1133 + goto error_out; 1134 + 1135 + if (init_control(p) < 0) 1136 + goto error_out; 1137 + 1138 + return 0; 1139 + 1140 + error_out: 1141 + control_cleanup(); 1142 + return -ENXIO; 1143 + } 1144 + 1145 + static int __init control_init(void) 1146 + { 1147 + struct device_node *dp; 1148 + char *option = NULL; 1149 + int ret = -ENXIO; 1150 + 1151 + if (fb_get_options("controlfb", &option)) 1152 + return -ENODEV; 1153 + control_setup(option); 1154 + 1155 + dp = of_find_node_by_name(NULL, "control"); 1156 + if (dp && !control_of_init(dp)) 1157 + ret = 0; 1158 + of_node_put(dp); 1159 + 1160 + return ret; 1161 + } 1162 + 1163 + device_initcall(control_init);
+21 -6
drivers/video/fbdev/imxfb.c
··· 172 172 int num_modes; 173 173 174 174 struct regulator *lcd_pwr; 175 + int lcd_pwr_enabled; 175 176 }; 176 177 177 178 static const struct platform_device_id imxfb_devtype[] = { ··· 802 801 return FB_BLANK_UNBLANK; 803 802 } 804 803 804 + static int imxfb_regulator_set(struct imxfb_info *fbi, int enable) 805 + { 806 + int ret; 807 + 808 + if (enable == fbi->lcd_pwr_enabled) 809 + return 0; 810 + 811 + if (enable) 812 + ret = regulator_enable(fbi->lcd_pwr); 813 + else 814 + ret = regulator_disable(fbi->lcd_pwr); 815 + 816 + if (ret == 0) 817 + fbi->lcd_pwr_enabled = enable; 818 + 819 + return ret; 820 + } 821 + 805 822 static int imxfb_lcd_set_power(struct lcd_device *lcddev, int power) 806 823 { 807 824 struct imxfb_info *fbi = dev_get_drvdata(&lcddev->dev); 808 825 809 - if (!IS_ERR(fbi->lcd_pwr)) { 810 - if (power == FB_BLANK_UNBLANK) 811 - return regulator_enable(fbi->lcd_pwr); 812 - else 813 - return regulator_disable(fbi->lcd_pwr); 814 - } 826 + if (!IS_ERR(fbi->lcd_pwr)) 827 + return imxfb_regulator_set(fbi, power == FB_BLANK_UNBLANK); 815 828 816 829 return 0; 817 830 }
-43
drivers/video/fbdev/omap2/omapfb/dss/venc.c
··· 209 209 .gen_ctrl = 0x00F90000, 210 210 }; 211 211 212 - static const struct venc_config venc_config_pal_bdghi = { 213 - .f_control = 0, 214 - .vidout_ctrl = 0, 215 - .sync_ctrl = 0, 216 - .hfltr_ctrl = 0, 217 - .x_color = 0, 218 - .line21 = 0, 219 - .ln_sel = 21, 220 - .htrigger_vtrigger = 0, 221 - .tvdetgp_int_start_stop_x = 0x00140001, 222 - .tvdetgp_int_start_stop_y = 0x00010001, 223 - .gen_ctrl = 0x00FB0000, 224 - 225 - .llen = 864-1, 226 - .flens = 625-1, 227 - .cc_carr_wss_carr = 0x2F7625ED, 228 - .c_phase = 0xDF, 229 - .gain_u = 0x111, 230 - .gain_v = 0x181, 231 - .gain_y = 0x140, 232 - .black_level = 0x3e, 233 - .blank_level = 0x3e, 234 - .m_control = 0<<2 | 1<<1, 235 - .bstamp_wss_data = 0x42, 236 - .s_carr = 0x2a098acb, 237 - .l21__wc_ctl = 0<<13 | 0x16<<8 | 0<<0, 238 - .savid__eavid = 0x06A70108, 239 - .flen__fal = 23<<16 | 624<<0, 240 - .lal__phase_reset = 2<<17 | 310<<0, 241 - .hs_int_start_stop_x = 0x00920358, 242 - .hs_ext_start_stop_x = 0x000F035F, 243 - .vs_int_start_x = 0x1a7<<16, 244 - .vs_int_stop_x__vs_int_start_y = 0x000601A7, 245 - .vs_int_stop_y__vs_ext_start_x = 0x01AF0036, 246 - .vs_ext_stop_x__vs_ext_start_y = 0x27101af, 247 - .vs_ext_stop_y = 0x05, 248 - .avid_start_stop_x = 0x03530082, 249 - .avid_start_stop_y = 0x0270002E, 250 - .fid_int_start_x__fid_int_start_y = 0x0005008A, 251 - .fid_int_offset_y__fid_ext_start_x = 0x002E0138, 252 - .fid_ext_start_y__fid_ext_offset_y = 0x01380005, 253 - }; 254 - 255 212 const struct omap_video_timings omap_dss_pal_timings = { 256 213 .x_res = 720, 257 214 .y_res = 574,
+10 -4
drivers/video/fbdev/s1d13xxxfb.c
··· 721 721 xres, yres, xres_virtual, yres_virtual, is_color, is_dual, is_tft); 722 722 } 723 723 724 - 725 - static int 726 - s1d13xxxfb_remove(struct platform_device *pdev) 724 + static void __s1d13xxxfb_remove(struct platform_device *pdev) 727 725 { 728 726 struct fb_info *info = platform_get_drvdata(pdev); 729 727 struct s1d13xxxfb_par *par = NULL; ··· 747 749 resource_size(&pdev->resource[0])); 748 750 release_mem_region(pdev->resource[1].start, 749 751 resource_size(&pdev->resource[1])); 752 + } 753 + 754 + static int s1d13xxxfb_remove(struct platform_device *pdev) 755 + { 756 + struct fb_info *info = platform_get_drvdata(pdev); 757 + 758 + unregister_framebuffer(info); 759 + __s1d13xxxfb_remove(pdev); 750 760 return 0; 751 761 } 752 762 ··· 901 895 return 0; 902 896 903 897 bail: 904 - s1d13xxxfb_remove(pdev); 898 + __s1d13xxxfb_remove(pdev); 905 899 return ret; 906 900 907 901 }
+9 -11
drivers/video/fbdev/sa1100fb.c
··· 173 173 #include <linux/init.h> 174 174 #include <linux/ioport.h> 175 175 #include <linux/cpufreq.h> 176 - #include <linux/gpio.h> 176 + #include <linux/gpio/consumer.h> 177 177 #include <linux/platform_device.h> 178 178 #include <linux/dma-mapping.h> 179 179 #include <linux/mutex.h> ··· 799 799 writel_relaxed(fbi->dbar2, fbi->base + DBAR2); 800 800 writel_relaxed(fbi->reg_lccr0 | LCCR0_LEN, fbi->base + LCCR0); 801 801 802 - if (machine_is_shannon()) 803 - gpio_set_value(SHANNON_GPIO_DISP_EN, 1); 802 + if (fbi->shannon_lcden) 803 + gpiod_set_value(fbi->shannon_lcden, 1); 804 804 805 805 dev_dbg(fbi->dev, "DBAR1: 0x%08x\n", readl_relaxed(fbi->base + DBAR1)); 806 806 dev_dbg(fbi->dev, "DBAR2: 0x%08x\n", readl_relaxed(fbi->base + DBAR2)); ··· 817 817 818 818 dev_dbg(fbi->dev, "Disabling LCD controller\n"); 819 819 820 - if (machine_is_shannon()) 821 - gpio_set_value(SHANNON_GPIO_DISP_EN, 0); 820 + if (fbi->shannon_lcden) 821 + gpiod_set_value(fbi->shannon_lcden, 0); 822 822 823 823 set_current_state(TASK_UNINTERRUPTIBLE); 824 824 add_wait_queue(&fbi->ctrlr_wait, &wait); ··· 1173 1173 return ret; 1174 1174 } 1175 1175 1176 - if (machine_is_shannon()) { 1177 - ret = devm_gpio_request_one(&pdev->dev, SHANNON_GPIO_DISP_EN, 1178 - GPIOF_OUT_INIT_LOW, "display enable"); 1179 - if (ret) 1180 - return ret; 1181 - } 1176 + fbi->shannon_lcden = gpiod_get_optional(&pdev->dev, "shannon-lcden", 1177 + GPIOD_OUT_LOW); 1178 + if (IS_ERR(fbi->shannon_lcden)) 1179 + return PTR_ERR(fbi->shannon_lcden); 1182 1180 1183 1181 /* Initialize video memory */ 1184 1182 ret = sa1100fb_map_video_memory(fbi);
+3
drivers/video/fbdev/sa1100fb.h
··· 10 10 * for more details. 11 11 */ 12 12 13 + struct gpio_desc; 14 + 13 15 #define LCCR0 0x0000 /* LCD Control Reg. 0 */ 14 16 #define LCSR 0x0004 /* LCD Status Reg. */ 15 17 #define DBAR1 0x0010 /* LCD DMA Base Address Reg. channel 1 */ ··· 35 33 struct device *dev; 36 34 const struct sa1100fb_rgb *rgb[NR_RGB]; 37 35 void __iomem *base; 36 + struct gpio_desc *shannon_lcden; 38 37 39 38 /* 40 39 * These are the addresses we mapped
+41 -61
drivers/video/fbdev/ssd1307fb.c
··· 12 12 #include <linux/i2c.h> 13 13 #include <linux/kernel.h> 14 14 #include <linux/module.h> 15 - #include <linux/of_device.h> 16 - #include <linux/of_gpio.h> 15 + #include <linux/property.h> 17 16 #include <linux/pwm.h> 18 17 #include <linux/uaccess.h> 19 18 #include <linux/regulator/consumer.h> ··· 48 49 static u_int refreshrate = REFRESHRATE; 49 50 module_param(refreshrate, uint, 0); 50 51 51 - struct ssd1307fb_par; 52 - 53 52 struct ssd1307fb_deviceinfo { 54 53 u32 default_vcomh; 55 54 u32 default_dclk_div; ··· 77 80 u32 prechargep1; 78 81 u32 prechargep2; 79 82 struct pwm_device *pwm; 80 - u32 pwm_period; 81 83 struct gpio_desc *reset; 82 84 struct regulator *vbat_reg; 83 85 u32 vcomh; ··· 294 298 295 299 static int ssd1307fb_init(struct ssd1307fb_par *par) 296 300 { 301 + struct pwm_state pwmstate; 297 302 int ret; 298 303 u32 precharge, dclk, com_invdir, compins; 299 - struct pwm_args pargs; 300 304 301 305 if (par->device_info->need_pwm) { 302 306 par->pwm = pwm_get(&par->client->dev, NULL); ··· 305 309 return PTR_ERR(par->pwm); 306 310 } 307 311 308 - /* 309 - * FIXME: pwm_apply_args() should be removed when switching to 310 - * the atomic PWM API. 311 - */ 312 - pwm_apply_args(par->pwm); 312 + pwm_init_state(par->pwm, &pwmstate); 313 + pwm_set_relative_duty_cycle(&pwmstate, 50, 100); 314 + pwm_apply_state(par->pwm, &pwmstate); 313 315 314 - pwm_get_args(par->pwm, &pargs); 315 - 316 - par->pwm_period = pargs.period; 317 316 /* Enable the PWM */ 318 - pwm_config(par->pwm, par->pwm_period / 2, par->pwm_period); 319 317 pwm_enable(par->pwm); 320 318 321 319 dev_dbg(&par->client->dev, "Using PWM%d with a %dns period.\n", 322 - par->pwm->pwm, par->pwm_period); 320 + par->pwm->pwm, pwm_get_period(par->pwm)); 323 321 } 324 322 325 323 /* Set initial contrast */ ··· 576 586 }; 577 587 MODULE_DEVICE_TABLE(of, ssd1307fb_of_match); 578 588 579 - static int ssd1307fb_probe(struct i2c_client *client, 580 - const struct i2c_device_id *id) 589 + static int ssd1307fb_probe(struct i2c_client *client) 581 590 { 591 + struct device *dev = &client->dev; 582 592 struct backlight_device *bl; 583 593 char bl_name[12]; 584 594 struct fb_info *info; 585 - struct device_node *node = client->dev.of_node; 586 595 struct fb_deferred_io *ssd1307fb_defio; 587 596 u32 vmem_size; 588 597 struct ssd1307fb_par *par; 589 598 void *vmem; 590 599 int ret; 591 600 592 - if (!node) { 593 - dev_err(&client->dev, "No device tree data found!\n"); 594 - return -EINVAL; 595 - } 596 - 597 - info = framebuffer_alloc(sizeof(struct ssd1307fb_par), &client->dev); 601 + info = framebuffer_alloc(sizeof(struct ssd1307fb_par), dev); 598 602 if (!info) 599 603 return -ENOMEM; 600 604 ··· 596 612 par->info = info; 597 613 par->client = client; 598 614 599 - par->device_info = of_device_get_match_data(&client->dev); 615 + par->device_info = device_get_match_data(dev); 600 616 601 - par->reset = devm_gpiod_get_optional(&client->dev, "reset", 602 - GPIOD_OUT_LOW); 617 + par->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW); 603 618 if (IS_ERR(par->reset)) { 604 - dev_err(&client->dev, "failed to get reset gpio: %ld\n", 619 + dev_err(dev, "failed to get reset gpio: %ld\n", 605 620 PTR_ERR(par->reset)); 606 621 ret = PTR_ERR(par->reset); 607 622 goto fb_alloc_error; 608 623 } 609 624 610 - par->vbat_reg = devm_regulator_get_optional(&client->dev, "vbat"); 625 + par->vbat_reg = devm_regulator_get_optional(dev, "vbat"); 611 626 if (IS_ERR(par->vbat_reg)) { 612 627 ret = PTR_ERR(par->vbat_reg); 613 628 if (ret == -ENODEV) { 614 629 par->vbat_reg = NULL; 615 630 } else { 616 - dev_err(&client->dev, "failed to get VBAT regulator: %d\n", 617 - ret); 631 + dev_err(dev, "failed to get VBAT regulator: %d\n", ret); 618 632 goto fb_alloc_error; 619 633 } 620 634 } 621 635 622 - if (of_property_read_u32(node, "solomon,width", &par->width)) 636 + if (device_property_read_u32(dev, "solomon,width", &par->width)) 623 637 par->width = 96; 624 638 625 - if (of_property_read_u32(node, "solomon,height", &par->height)) 639 + if (device_property_read_u32(dev, "solomon,height", &par->height)) 626 640 par->height = 16; 627 641 628 - if (of_property_read_u32(node, "solomon,page-offset", &par->page_offset)) 642 + if (device_property_read_u32(dev, "solomon,page-offset", &par->page_offset)) 629 643 par->page_offset = 1; 630 644 631 - if (of_property_read_u32(node, "solomon,com-offset", &par->com_offset)) 645 + if (device_property_read_u32(dev, "solomon,com-offset", &par->com_offset)) 632 646 par->com_offset = 0; 633 647 634 - if (of_property_read_u32(node, "solomon,prechargep1", &par->prechargep1)) 648 + if (device_property_read_u32(dev, "solomon,prechargep1", &par->prechargep1)) 635 649 par->prechargep1 = 2; 636 650 637 - if (of_property_read_u32(node, "solomon,prechargep2", &par->prechargep2)) 651 + if (device_property_read_u32(dev, "solomon,prechargep2", &par->prechargep2)) 638 652 par->prechargep2 = 2; 639 653 640 - if (!of_property_read_u8_array(node, "solomon,lookup-table", 641 - par->lookup_table, 642 - ARRAY_SIZE(par->lookup_table))) 654 + if (!device_property_read_u8_array(dev, "solomon,lookup-table", 655 + par->lookup_table, 656 + ARRAY_SIZE(par->lookup_table))) 643 657 par->lookup_table_set = 1; 644 658 645 - par->seg_remap = !of_property_read_bool(node, "solomon,segment-no-remap"); 646 - par->com_seq = of_property_read_bool(node, "solomon,com-seq"); 647 - par->com_lrremap = of_property_read_bool(node, "solomon,com-lrremap"); 648 - par->com_invdir = of_property_read_bool(node, "solomon,com-invdir"); 659 + par->seg_remap = !device_property_read_bool(dev, "solomon,segment-no-remap"); 660 + par->com_seq = device_property_read_bool(dev, "solomon,com-seq"); 661 + par->com_lrremap = device_property_read_bool(dev, "solomon,com-lrremap"); 662 + par->com_invdir = device_property_read_bool(dev, "solomon,com-invdir"); 649 663 par->area_color_enable = 650 - of_property_read_bool(node, "solomon,area-color-enable"); 651 - par->low_power = of_property_read_bool(node, "solomon,low-power"); 664 + device_property_read_bool(dev, "solomon,area-color-enable"); 665 + par->low_power = device_property_read_bool(dev, "solomon,low-power"); 652 666 653 667 par->contrast = 127; 654 668 par->vcomh = par->device_info->default_vcomh; 655 669 656 670 /* Setup display timing */ 657 - if (of_property_read_u32(node, "solomon,dclk-div", &par->dclk_div)) 671 + if (device_property_read_u32(dev, "solomon,dclk-div", &par->dclk_div)) 658 672 par->dclk_div = par->device_info->default_dclk_div; 659 - if (of_property_read_u32(node, "solomon,dclk-frq", &par->dclk_frq)) 673 + if (device_property_read_u32(dev, "solomon,dclk-frq", &par->dclk_frq)) 660 674 par->dclk_frq = par->device_info->default_dclk_frq; 661 675 662 676 vmem_size = DIV_ROUND_UP(par->width, 8) * par->height; ··· 662 680 vmem = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, 663 681 get_order(vmem_size)); 664 682 if (!vmem) { 665 - dev_err(&client->dev, "Couldn't allocate graphical memory.\n"); 683 + dev_err(dev, "Couldn't allocate graphical memory.\n"); 666 684 ret = -ENOMEM; 667 685 goto fb_alloc_error; 668 686 } 669 687 670 - ssd1307fb_defio = devm_kzalloc(&client->dev, sizeof(*ssd1307fb_defio), 688 + ssd1307fb_defio = devm_kzalloc(dev, sizeof(*ssd1307fb_defio), 671 689 GFP_KERNEL); 672 690 if (!ssd1307fb_defio) { 673 - dev_err(&client->dev, "Couldn't allocate deferred io.\n"); 691 + dev_err(dev, "Couldn't allocate deferred io.\n"); 674 692 ret = -ENOMEM; 675 693 goto fb_alloc_error; 676 694 } ··· 708 726 if (par->vbat_reg) { 709 727 ret = regulator_enable(par->vbat_reg); 710 728 if (ret) { 711 - dev_err(&client->dev, "failed to enable VBAT: %d\n", 712 - ret); 729 + dev_err(dev, "failed to enable VBAT: %d\n", ret); 713 730 goto reset_oled_error; 714 731 } 715 732 } ··· 719 738 720 739 ret = register_framebuffer(info); 721 740 if (ret) { 722 - dev_err(&client->dev, "Couldn't register the framebuffer\n"); 741 + dev_err(dev, "Couldn't register the framebuffer\n"); 723 742 goto panel_init_error; 724 743 } 725 744 726 745 snprintf(bl_name, sizeof(bl_name), "ssd1307fb%d", info->node); 727 - bl = backlight_device_register(bl_name, &client->dev, par, 728 - &ssd1307fb_bl_ops, NULL); 746 + bl = backlight_device_register(bl_name, dev, par, &ssd1307fb_bl_ops, 747 + NULL); 729 748 if (IS_ERR(bl)) { 730 749 ret = PTR_ERR(bl); 731 - dev_err(&client->dev, "unable to register backlight device: %d\n", 732 - ret); 750 + dev_err(dev, "unable to register backlight device: %d\n", ret); 733 751 goto bl_init_error; 734 752 } 735 753 ··· 736 756 bl->props.max_brightness = MAX_CONTRAST; 737 757 info->bl_dev = bl; 738 758 739 - dev_info(&client->dev, "fb%d: %s framebuffer device registered, using %d bytes of video memory\n", info->node, info->fix.id, vmem_size); 759 + dev_info(dev, "fb%d: %s framebuffer device registered, using %d bytes of video memory\n", info->node, info->fix.id, vmem_size); 740 760 741 761 return 0; 742 762 ··· 790 810 MODULE_DEVICE_TABLE(i2c, ssd1307fb_i2c_id); 791 811 792 812 static struct i2c_driver ssd1307fb_driver = { 793 - .probe = ssd1307fb_probe, 813 + .probe_new = ssd1307fb_probe, 794 814 .remove = ssd1307fb_remove, 795 815 .id_table = ssd1307fb_i2c_id, 796 816 .driver = {
+11 -5
drivers/video/fbdev/vesafb.c
··· 32 32 struct vesafb_par { 33 33 u32 pseudo_palette[256]; 34 34 int wc_cookie; 35 + struct resource *region; 35 36 }; 36 37 37 38 static struct fb_var_screeninfo vesafb_defined = { ··· 412 411 413 412 /* request failure does not faze us, as vgacon probably has this 414 413 * region already (FIXME) */ 415 - request_region(0x3c0, 32, "vesafb"); 414 + par->region = request_region(0x3c0, 32, "vesafb"); 416 415 417 416 if (mtrr == 3) { 418 417 unsigned int temp_size = size_total; ··· 440 439 "vesafb: abort, cannot ioremap video memory 0x%x @ 0x%lx\n", 441 440 vesafb_fix.smem_len, vesafb_fix.smem_start); 442 441 err = -EIO; 443 - goto err; 442 + goto err_release_region; 444 443 } 445 444 446 445 printk(KERN_INFO "vesafb: framebuffer at 0x%lx, mapped to 0x%p, " ··· 459 458 460 459 if (fb_alloc_cmap(&info->cmap, 256, 0) < 0) { 461 460 err = -ENOMEM; 462 - goto err; 461 + goto err_release_region; 463 462 } 464 463 if (register_framebuffer(info)<0) { 465 464 err = -EINVAL; 466 465 fb_dealloc_cmap(&info->cmap); 467 - goto err; 466 + goto err_release_region; 468 467 } 469 468 fb_info(info, "%s frame buffer device\n", info->fix.id); 470 469 return 0; 471 - err: 470 + err_release_region: 472 471 arch_phys_wc_del(par->wc_cookie); 473 472 if (info->screen_base) 474 473 iounmap(info->screen_base); 474 + if (par->region) 475 + release_region(0x3c0, 32); 476 + err: 475 477 framebuffer_release(info); 476 478 release_mem_region(vesafb_fix.smem_start, size_total); 477 479 return err; ··· 485 481 struct fb_info *info = platform_get_drvdata(pdev); 486 482 487 483 unregister_framebuffer(info); 484 + if (((struct vesafb_par *)(info->par))->region) 485 + release_region(0x3c0, 32); 488 486 framebuffer_release(info); 489 487 490 488 return 0;
+1
drivers/video/fbdev/vt8500lcdfb.c
··· 230 230 info->fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR) 231 231 for (i = 0; i < 256; i++) 232 232 vt8500lcd_setcolreg(i, 0, 0, 0, 0, info); 233 + fallthrough; 233 234 case FB_BLANK_UNBLANK: 234 235 if (info->fix.visual == FB_VISUAL_PSEUDOCOLOR || 235 236 info->fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR)
+6 -3
include/drm/drm_device.h
··· 88 88 /** 89 89 * @dev_private: 90 90 * 91 - * DRM driver private data. Instead of using this pointer it is 92 - * recommended that drivers use drm_dev_init() and embed struct 93 - * &drm_device in their larger per-device structure. 91 + * DRM driver private data. This is deprecated and should be left set to 92 + * NULL. 93 + * 94 + * Instead of using this pointer it is recommended that drivers use 95 + * drm_dev_init() and embed struct &drm_device in their larger 96 + * per-device structure. 94 97 */ 95 98 void *dev_private; 96 99