drm-misc-next for 5.1:
UAPI Changes: Cross-subsystem Changes: Core Changes: - Split out some part of drm_crtc_helper.h into drm_probe_helper.h - DRIVER_* flags improvements - New tasks on the TODO-list - Improvements to the documentation Driver Changes: - Continual of drmP.h removal in multiple drivers - Removal of FBINFO_(FLAG_)DEFAULT in multiple drivers - sun4i: Addition of the A23 support, multiple fixes for the tiled formats - atmel-hlcdc: Fix of clipping and rotation properties - qxl: various BO-related improvements, prime and generic fbdev emulation support - dw-hdmi: Support for HDMI2.0 2160p modes and YUV420 output - New Sitronix ST7701 panel driver - New Kingdisplay KD097D04 panel driver - New LeMaker BL035-RGB-002 panel driver - New PDA 91-00156-A0 panel driver -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQRcEzekXsqa64kGDp7j7w1vZxhRxQUCXFRb/wAKCRDj7w1vZxhR xXj2AQDFAkH0/tksJ+T6yrHZXQE7q/6fAWTlrDXLo7Nb1hhfswEA1AyaHmZJA0Ar u7S+4Gfzs/gisw9Jr4bqQaerEpYJxQA= =qumD -----END PGP SIGNATURE----- Merge tag 'drm-misc-next-2019-02-01' of git://anongit.freedesktop.org/drm/drm-misc into drm-next drm-misc-next for 5.1: UAPI Changes: Cross-subsystem Changes: Core Changes: - Split out some part of drm_crtc_helper.h into drm_probe_helper.h - DRIVER_* flags improvements - New tasks on the TODO-list - Improvements to the documentation Driver Changes: - Continual of drmP.h removal in multiple drivers - Removal of FBINFO_(FLAG_)DEFAULT in multiple drivers - sun4i: Addition of the A23 support, multiple fixes for the tiled formats - atmel-hlcdc: Fix of clipping and rotation properties - qxl: various BO-related improvements, prime and generic fbdev emulation support - dw-hdmi: Support for HDMI2.0 2160p modes and YUV420 output - New Sitronix ST7701 panel driver - New Kingdisplay KD097D04 panel driver - New LeMaker BL035-RGB-002 panel driver - New PDA 91-00156-A0 panel driver Signed-off-by: Dave Airlie <airlied@redhat.com> From: Maxime Ripard <maxime.ripard@bootlin.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190201144749.t3abxvguhstu6bcl@flea
This commit is contained in:
commit
37fdaa3390
@ -0,0 +1,12 @@
|
||||
LeMaker BL035-RGB-002 3.5" QVGA TFT LCD panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "lemaker,bl035-rgb-002"
|
||||
- power-supply: as specified in the base binding
|
||||
|
||||
Optional properties:
|
||||
- backlight: as specified in the base binding
|
||||
- enable-gpios: as specified in the base binding
|
||||
|
||||
This binding is compatible with the simple-panel binding, which is specified
|
||||
in simple-panel.txt in this directory.
|
@ -0,0 +1,14 @@
|
||||
PDA 91-00156-A0 5.0" WVGA TFT LCD panel
|
||||
|
||||
Required properties:
|
||||
- compatible: should be "pda,91-00156-a0"
|
||||
- power-supply: this panel requires a single power supply. A phandle to a
|
||||
regulator needs to be specified here. Compatible with panel-common binding which
|
||||
is specified in the panel-common.txt in this directory.
|
||||
- backlight: this panel's backlight is controlled by an external backlight
|
||||
controller. A phandle to this controller needs to be specified here.
|
||||
Compatible with panel-common binding which is specified in the panel-common.txt
|
||||
in this directory.
|
||||
|
||||
This binding is compatible with the simple-panel binding, which is specified
|
||||
in simple-panel.txt in this directory.
|
@ -0,0 +1,30 @@
|
||||
Sitronix ST7701 based LCD panels
|
||||
|
||||
ST7701 designed for small and medium sizes of TFT LCD display, is
|
||||
capable of supporting up to 480RGBX864 in resolution. It provides
|
||||
several system interfaces like MIPI/RGB/SPI.
|
||||
|
||||
Techstar TS8550B is 480x854, 2-lane MIPI DSI LCD panel which has
|
||||
inbuilt ST7701 chip.
|
||||
|
||||
Required properties:
|
||||
- compatible: must be "sitronix,st7701" and one of
|
||||
* "techstar,ts8550b"
|
||||
- reset-gpios: a GPIO phandle for the reset pin
|
||||
|
||||
Required properties for techstar,ts8550b:
|
||||
- reg: DSI virtual channel used by that screen
|
||||
- VCC-supply: analog regulator for MIPI circuit
|
||||
- IOVCC-supply: I/O system regulator
|
||||
|
||||
Optional properties:
|
||||
- backlight: phandle for the backlight control.
|
||||
|
||||
panel@0 {
|
||||
compatible = "techstar,ts8550b", "sitronix,st7701";
|
||||
reg = <0>;
|
||||
VCC-supply = <®_dldo2>;
|
||||
IOVCC-supply = <®_dldo2>;
|
||||
reset-gpios = <&pio 3 24 GPIO_ACTIVE_HIGH>; /* LCD-RST: PD24 */
|
||||
backlight = <&backlight>;
|
||||
};
|
@ -156,6 +156,7 @@ Required properties:
|
||||
* allwinner,sun6i-a31-tcon
|
||||
* allwinner,sun6i-a31s-tcon
|
||||
* allwinner,sun7i-a20-tcon
|
||||
* allwinner,sun8i-a23-tcon
|
||||
* allwinner,sun8i-a33-tcon
|
||||
* allwinner,sun8i-a83t-tcon-lcd
|
||||
* allwinner,sun8i-a83t-tcon-tv
|
||||
@ -276,6 +277,7 @@ Required properties:
|
||||
- compatible: value must be one of:
|
||||
* allwinner,sun6i-a31-drc
|
||||
* allwinner,sun6i-a31s-drc
|
||||
* allwinner,sun8i-a23-drc
|
||||
* allwinner,sun8i-a33-drc
|
||||
* allwinner,sun9i-a80-drc
|
||||
- reg: base address and size of the memory-mapped region.
|
||||
@ -303,6 +305,7 @@ Required properties:
|
||||
* allwinner,sun5i-a13-display-backend
|
||||
* allwinner,sun6i-a31-display-backend
|
||||
* allwinner,sun7i-a20-display-backend
|
||||
* allwinner,sun8i-a23-display-backend
|
||||
* allwinner,sun8i-a33-display-backend
|
||||
* allwinner,sun9i-a80-display-backend
|
||||
- reg: base address and size of the memory-mapped region.
|
||||
@ -360,6 +363,7 @@ Required properties:
|
||||
* allwinner,sun5i-a13-display-frontend
|
||||
* allwinner,sun6i-a31-display-frontend
|
||||
* allwinner,sun7i-a20-display-frontend
|
||||
* allwinner,sun8i-a23-display-frontend
|
||||
* allwinner,sun8i-a33-display-frontend
|
||||
* allwinner,sun9i-a80-display-frontend
|
||||
- reg: base address and size of the memory-mapped region.
|
||||
@ -419,6 +423,7 @@ Required properties:
|
||||
* allwinner,sun6i-a31-display-engine
|
||||
* allwinner,sun6i-a31s-display-engine
|
||||
* allwinner,sun7i-a20-display-engine
|
||||
* allwinner,sun8i-a23-display-engine
|
||||
* allwinner,sun8i-a33-display-engine
|
||||
* allwinner,sun8i-a83t-display-engine
|
||||
* allwinner,sun8i-h3-display-engine
|
||||
|
@ -211,6 +211,7 @@ laird Laird PLC
|
||||
lantiq Lantiq Semiconductor
|
||||
lattice Lattice Semiconductor
|
||||
lego LEGO Systems A/S
|
||||
lemaker Shenzhen LeMaker Technology Co., Ltd.
|
||||
lenovo Lenovo Group Ltd.
|
||||
lg LG Corporation
|
||||
libretech Shenzhen Libre Technology Co., Ltd
|
||||
@ -297,6 +298,7 @@ ovti OmniVision Technologies
|
||||
oxsemi Oxford Semiconductor, Ltd.
|
||||
panasonic Panasonic Corporation
|
||||
parade Parade Technologies Inc.
|
||||
pda Precision Design Associates, Inc.
|
||||
pericom Pericom Technology Inc.
|
||||
pervasive Pervasive Displays, Inc.
|
||||
phicomm PHICOMM Co., Ltd.
|
||||
|
@ -39,68 +39,6 @@ sections.
|
||||
Driver Information
|
||||
------------------
|
||||
|
||||
Driver Features
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Drivers inform the DRM core about their requirements and supported
|
||||
features by setting appropriate flags in the driver_features field.
|
||||
Since those flags influence the DRM core behaviour since registration
|
||||
time, most of them must be set to registering the :c:type:`struct
|
||||
drm_driver <drm_driver>` instance.
|
||||
|
||||
u32 driver_features;
|
||||
|
||||
DRIVER_USE_AGP
|
||||
Driver uses AGP interface, the DRM core will manage AGP resources.
|
||||
|
||||
DRIVER_LEGACY
|
||||
Denote a legacy driver using shadow attach. Don't use.
|
||||
|
||||
DRIVER_KMS_LEGACY_CONTEXT
|
||||
Used only by nouveau for backwards compatibility with existing userspace.
|
||||
Don't use.
|
||||
|
||||
DRIVER_PCI_DMA
|
||||
Driver is capable of PCI DMA, mapping of PCI DMA buffers to
|
||||
userspace will be enabled. Deprecated.
|
||||
|
||||
DRIVER_SG
|
||||
Driver can perform scatter/gather DMA, allocation and mapping of
|
||||
scatter/gather buffers will be enabled. Deprecated.
|
||||
|
||||
DRIVER_HAVE_DMA
|
||||
Driver supports DMA, the userspace DMA API will be supported.
|
||||
Deprecated.
|
||||
|
||||
DRIVER_HAVE_IRQ; DRIVER_IRQ_SHARED
|
||||
DRIVER_HAVE_IRQ indicates whether the driver has an IRQ handler
|
||||
managed by the DRM Core. The core will support simple IRQ handler
|
||||
installation when the flag is set. The installation process is
|
||||
described in ?.
|
||||
|
||||
DRIVER_IRQ_SHARED indicates whether the device & handler support
|
||||
shared IRQs (note that this is required of PCI drivers).
|
||||
|
||||
DRIVER_GEM
|
||||
Driver use the GEM memory manager.
|
||||
|
||||
DRIVER_MODESET
|
||||
Driver supports mode setting interfaces (KMS).
|
||||
|
||||
DRIVER_PRIME
|
||||
Driver implements DRM PRIME buffer sharing.
|
||||
|
||||
DRIVER_RENDER
|
||||
Driver supports dedicated render nodes.
|
||||
|
||||
DRIVER_ATOMIC
|
||||
Driver supports atomic properties. In this case the driver must
|
||||
implement appropriate obj->atomic_get_property() vfuncs for any
|
||||
modeset objects with driver specific properties.
|
||||
|
||||
DRIVER_SYNCOBJ
|
||||
Driver support drm sync objects.
|
||||
|
||||
Major, Minor and Patchlevel
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
@ -296,18 +296,6 @@ SCDC Helper Functions Reference
|
||||
.. kernel-doc:: drivers/gpu/drm/drm_scdc_helper.c
|
||||
:export:
|
||||
|
||||
Rectangle Utilities Reference
|
||||
=============================
|
||||
|
||||
.. kernel-doc:: include/drm/drm_rect.h
|
||||
:doc: rect utils
|
||||
|
||||
.. kernel-doc:: include/drm/drm_rect.h
|
||||
:internal:
|
||||
|
||||
.. kernel-doc:: drivers/gpu/drm/drm_rect.c
|
||||
:export:
|
||||
|
||||
HDMI Infoframes Helper Reference
|
||||
================================
|
||||
|
||||
@ -322,6 +310,18 @@ libraries and hence is also included here.
|
||||
.. kernel-doc:: drivers/video/hdmi.c
|
||||
:export:
|
||||
|
||||
Rectangle Utilities Reference
|
||||
=============================
|
||||
|
||||
.. kernel-doc:: include/drm/drm_rect.h
|
||||
:doc: rect utils
|
||||
|
||||
.. kernel-doc:: include/drm/drm_rect.h
|
||||
:internal:
|
||||
|
||||
.. kernel-doc:: drivers/gpu/drm/drm_rect.c
|
||||
:export:
|
||||
|
||||
Flip-work Helper Reference
|
||||
==========================
|
||||
|
||||
|
@ -410,102 +410,6 @@ Encoder Functions Reference
|
||||
.. kernel-doc:: drivers/gpu/drm/drm_encoder.c
|
||||
:export:
|
||||
|
||||
KMS Initialization and Cleanup
|
||||
==============================
|
||||
|
||||
A KMS device is abstracted and exposed as a set of planes, CRTCs,
|
||||
encoders and connectors. KMS drivers must thus create and initialize all
|
||||
those objects at load time after initializing mode setting.
|
||||
|
||||
CRTCs (:c:type:`struct drm_crtc <drm_crtc>`)
|
||||
--------------------------------------------
|
||||
|
||||
A CRTC is an abstraction representing a part of the chip that contains a
|
||||
pointer to a scanout buffer. Therefore, the number of CRTCs available
|
||||
determines how many independent scanout buffers can be active at any
|
||||
given time. The CRTC structure contains several fields to support this:
|
||||
a pointer to some video memory (abstracted as a frame buffer object), a
|
||||
display mode, and an (x, y) offset into the video memory to support
|
||||
panning or configurations where one piece of video memory spans multiple
|
||||
CRTCs.
|
||||
|
||||
CRTC Initialization
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
A KMS device must create and register at least one struct
|
||||
:c:type:`struct drm_crtc <drm_crtc>` instance. The instance is
|
||||
allocated and zeroed by the driver, possibly as part of a larger
|
||||
structure, and registered with a call to :c:func:`drm_crtc_init()`
|
||||
with a pointer to CRTC functions.
|
||||
|
||||
|
||||
Cleanup
|
||||
-------
|
||||
|
||||
The DRM core manages its objects' lifetime. When an object is not needed
|
||||
anymore the core calls its destroy function, which must clean up and
|
||||
free every resource allocated for the object. Every
|
||||
:c:func:`drm_\*_init()` call must be matched with a corresponding
|
||||
:c:func:`drm_\*_cleanup()` call to cleanup CRTCs
|
||||
(:c:func:`drm_crtc_cleanup()`), planes
|
||||
(:c:func:`drm_plane_cleanup()`), encoders
|
||||
(:c:func:`drm_encoder_cleanup()`) and connectors
|
||||
(:c:func:`drm_connector_cleanup()`). Furthermore, connectors that
|
||||
have been added to sysfs must be removed by a call to
|
||||
:c:func:`drm_connector_unregister()` before calling
|
||||
:c:func:`drm_connector_cleanup()`.
|
||||
|
||||
Connectors state change detection must be cleanup up with a call to
|
||||
:c:func:`drm_kms_helper_poll_fini()`.
|
||||
|
||||
Output discovery and initialization example
|
||||
-------------------------------------------
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
void intel_crt_init(struct drm_device *dev)
|
||||
{
|
||||
struct drm_connector *connector;
|
||||
struct intel_output *intel_output;
|
||||
|
||||
intel_output = kzalloc(sizeof(struct intel_output), GFP_KERNEL);
|
||||
if (!intel_output)
|
||||
return;
|
||||
|
||||
connector = &intel_output->base;
|
||||
drm_connector_init(dev, &intel_output->base,
|
||||
&intel_crt_connector_funcs, DRM_MODE_CONNECTOR_VGA);
|
||||
|
||||
drm_encoder_init(dev, &intel_output->enc, &intel_crt_enc_funcs,
|
||||
DRM_MODE_ENCODER_DAC);
|
||||
|
||||
drm_connector_attach_encoder(&intel_output->base,
|
||||
&intel_output->enc);
|
||||
|
||||
/* Set up the DDC bus. */
|
||||
intel_output->ddc_bus = intel_i2c_create(dev, GPIOA, "CRTDDC_A");
|
||||
if (!intel_output->ddc_bus) {
|
||||
dev_printk(KERN_ERR, &dev->pdev->dev, "DDC bus registration "
|
||||
"failed.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
intel_output->type = INTEL_OUTPUT_ANALOG;
|
||||
connector->interlace_allowed = 0;
|
||||
connector->doublescan_allowed = 0;
|
||||
|
||||
drm_encoder_helper_add(&intel_output->enc, &intel_crt_helper_funcs);
|
||||
drm_connector_helper_add(connector, &intel_crt_connector_helper_funcs);
|
||||
|
||||
drm_connector_register(connector);
|
||||
}
|
||||
|
||||
In the example above (taken from the i915 driver), a CRTC, connector and
|
||||
encoder combination is created. A device-specific i2c bus is also
|
||||
created for fetching EDID data and performing monitor detection. Once
|
||||
the process is complete, the new connector is registered with sysfs to
|
||||
make its properties available to applications.
|
||||
|
||||
KMS Locking
|
||||
===========
|
||||
|
||||
|
@ -262,6 +262,44 @@ As a reference, take a look at the conversions already completed in drm core.
|
||||
|
||||
Contact: Sean Paul, respective driver maintainers
|
||||
|
||||
Rename CMA helpers to DMA helpers
|
||||
---------------------------------
|
||||
|
||||
CMA (standing for contiguous memory allocator) is really a bit an accident of
|
||||
what these were used for first, a much better name would be DMA helpers. In the
|
||||
text these should even be called coherent DMA memory helpers (so maybe CDM, but
|
||||
no one knows what that means) since underneath they just use dma_alloc_coherent.
|
||||
|
||||
Contact: Laurent Pinchart, Daniel Vetter
|
||||
|
||||
Convert direct mode.vrefresh accesses to use drm_mode_vrefresh()
|
||||
----------------------------------------------------------------
|
||||
|
||||
drm_display_mode.vrefresh isn't guaranteed to be populated. As such, using it
|
||||
is risky and has been known to cause div-by-zero bugs. Fortunately, drm core
|
||||
has helper which will use mode.vrefresh if it's !0 and will calculate it from
|
||||
the timings when it's 0.
|
||||
|
||||
Use simple search/replace, or (more fun) cocci to replace instances of direct
|
||||
vrefresh access with a call to the helper. Check out
|
||||
https://lists.freedesktop.org/archives/dri-devel/2019-January/205186.html for
|
||||
inspiration.
|
||||
|
||||
Once all instances of vrefresh have been converted, remove vrefresh from
|
||||
drm_display_mode to avoid future use.
|
||||
|
||||
Contact: Sean Paul
|
||||
|
||||
Remove drm_display_mode.hsync
|
||||
-----------------------------
|
||||
|
||||
We have drm_mode_hsync() to calculate this from hsync_start/end, since drivers
|
||||
shouldn't/don't use this, remove this member to avoid any temptations to use it
|
||||
in the future. If there is any debug code using drm_display_mode.hsync, convert
|
||||
it to use drm_mode_hsync() instead.
|
||||
|
||||
Contact: Sean Paul
|
||||
|
||||
Core refactorings
|
||||
=================
|
||||
|
||||
|
@ -4907,6 +4907,12 @@ S: Orphan / Obsolete
|
||||
F: drivers/gpu/drm/sis/
|
||||
F: include/uapi/drm/sis_drm.h
|
||||
|
||||
DRM DRIVER FOR SITRONIX ST7701 PANELS
|
||||
M: Jagan Teki <jagan@amarulasolutions.com>
|
||||
S: Maintained
|
||||
F: drivers/gpu/drm/panel/panel-sitronix-st7701.c
|
||||
F: Documentation/devicetree/bindings/display/panel/sitronix,st7701.txt
|
||||
|
||||
DRM DRIVER FOR SITRONIX ST7586 PANELS
|
||||
M: David Lechner <david@lechnology.com>
|
||||
S: Maintained
|
||||
|
@ -25,8 +25,8 @@
|
||||
*/
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/amdgpu_drm.h>
|
||||
#include "amdgpu.h"
|
||||
#include "atom.h"
|
||||
|
@ -30,8 +30,8 @@
|
||||
#include <linux/console.h>
|
||||
#include <linux/slab.h>
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/amdgpu_drm.h>
|
||||
#include <linux/vgaarb.h>
|
||||
#include <linux/vga_switcheroo.h>
|
||||
|
@ -32,7 +32,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/vga_switcheroo.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "amdgpu.h"
|
||||
#include "amdgpu_irq.h"
|
||||
@ -1189,7 +1189,7 @@ amdgpu_get_crtc_scanout_position(struct drm_device *dev, unsigned int pipe,
|
||||
static struct drm_driver kms_driver = {
|
||||
.driver_features =
|
||||
DRIVER_USE_AGP | DRIVER_ATOMIC |
|
||||
DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM |
|
||||
DRIVER_GEM |
|
||||
DRIVER_PRIME | DRIVER_RENDER | DRIVER_MODESET | DRIVER_SYNCOBJ,
|
||||
.load = amdgpu_driver_load_kms,
|
||||
.open = amdgpu_driver_open_kms,
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c-algo-bit.h>
|
||||
#include <linux/hrtimer.h>
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include <linux/i2c.h>
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/amdgpu_drm.h>
|
||||
#include <drm/drm_edid.h>
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include <linux/acpi.h>
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/amdgpu_drm.h>
|
||||
#include "dm_services.h"
|
||||
#include "amdgpu.h"
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include <linux/acpi.h>
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/amdgpu_drm.h>
|
||||
#include "dm_services.h"
|
||||
#include "amdgpu.h"
|
||||
|
@ -15,12 +15,12 @@
|
||||
*/
|
||||
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_device.h>
|
||||
#include <drm/drm_fb_cma_helper.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drm_vblank.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/platform_data/simplefb.h>
|
||||
|
||||
|
@ -15,15 +15,15 @@
|
||||
*/
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_device.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_debugfs.h>
|
||||
#include <drm/drm_device.h>
|
||||
#include <drm/drm_drv.h>
|
||||
#include <drm/drm_fb_cma_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_reserved_mem.h>
|
||||
|
@ -14,8 +14,9 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_device.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "arcpgu.h"
|
||||
|
||||
|
@ -13,12 +13,12 @@
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_fb_cma_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/of_graph.h>
|
||||
#include <linux/platform_data/simplefb.h>
|
||||
|
@ -22,13 +22,13 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_fb_cma_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
#include <drm/drm_modeset_helper.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "hdlcd_drv.h"
|
||||
#include "hdlcd_regs.h"
|
||||
@ -229,7 +229,7 @@ static int hdlcd_debugfs_init(struct drm_minor *minor)
|
||||
DEFINE_DRM_GEM_CMA_FOPS(fops);
|
||||
|
||||
static struct drm_driver hdlcd_driver = {
|
||||
.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
|
||||
.driver_features = DRIVER_GEM |
|
||||
DRIVER_MODESET | DRIVER_PRIME |
|
||||
DRIVER_ATOMIC,
|
||||
.irq_handler = hdlcd_irq,
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <video/videomode.h>
|
||||
|
@ -23,7 +23,7 @@
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_fb_cma_helper.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drm_fb_cma_helper.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drmP.h>
|
||||
|
@ -9,7 +9,7 @@
|
||||
*/
|
||||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include "armada_crtc.h"
|
||||
#include "armada_drm.h"
|
||||
#include "armada_hw.h"
|
||||
|
@ -12,7 +12,7 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include "armada_crtc.h"
|
||||
|
@ -8,6 +8,8 @@
|
||||
#ifndef ARMADA_CRTC_H
|
||||
#define ARMADA_CRTC_H
|
||||
|
||||
#include <drm/drm_crtc.h>
|
||||
|
||||
struct armada_gem_object;
|
||||
|
||||
struct armada_regs {
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_graph.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include "armada_crtc.h"
|
||||
|
@ -5,7 +5,7 @@
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_modeset_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
#include "armada_drm.h"
|
||||
|
@ -30,6 +30,7 @@
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "ast_drv.h"
|
||||
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include "ast_drv.h"
|
||||
|
||||
#include "ast_tables.h"
|
||||
|
@ -24,7 +24,7 @@
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drmP.h>
|
||||
|
||||
#include <video/videomode.h>
|
||||
|
@ -720,7 +720,7 @@ static void atmel_hlcdc_dc_irq_uninstall(struct drm_device *dev)
|
||||
DEFINE_DRM_GEM_CMA_FOPS(fops);
|
||||
|
||||
static struct drm_driver atmel_hlcdc_dc_driver = {
|
||||
.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM |
|
||||
.driver_features = DRIVER_GEM |
|
||||
DRIVER_MODESET | DRIVER_PRIME |
|
||||
DRIVER_ATOMIC,
|
||||
.irq_handler = atmel_hlcdc_dc_irq_handler,
|
||||
|
@ -31,7 +31,7 @@
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_fb_cma_helper.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
|
@ -549,7 +549,8 @@ atmel_hlcdc_plane_prepare_disc_area(struct drm_crtc_state *c_state)
|
||||
|
||||
ovl_state = drm_plane_state_to_atmel_hlcdc_plane_state(ovl_s);
|
||||
|
||||
if (!ovl_s->fb ||
|
||||
if (!ovl_s->visible ||
|
||||
!ovl_s->fb ||
|
||||
ovl_s->fb->format->has_alpha ||
|
||||
ovl_s->alpha != DRM_BLEND_ALPHA_OPAQUE)
|
||||
continue;
|
||||
@ -601,15 +602,10 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p,
|
||||
struct drm_framebuffer *fb = state->base.fb;
|
||||
const struct drm_display_mode *mode;
|
||||
struct drm_crtc_state *crtc_state;
|
||||
unsigned int patched_crtc_w;
|
||||
unsigned int patched_crtc_h;
|
||||
unsigned int patched_src_w;
|
||||
unsigned int patched_src_h;
|
||||
unsigned int tmp;
|
||||
int x_offset = 0;
|
||||
int y_offset = 0;
|
||||
int hsub = 1;
|
||||
int vsub = 1;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
if (!state->base.crtc || !fb)
|
||||
@ -618,14 +614,21 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p,
|
||||
crtc_state = drm_atomic_get_existing_crtc_state(s->state, s->crtc);
|
||||
mode = &crtc_state->adjusted_mode;
|
||||
|
||||
state->src_x = s->src_x;
|
||||
state->src_y = s->src_y;
|
||||
state->src_h = s->src_h;
|
||||
state->src_w = s->src_w;
|
||||
state->crtc_x = s->crtc_x;
|
||||
state->crtc_y = s->crtc_y;
|
||||
state->crtc_h = s->crtc_h;
|
||||
state->crtc_w = s->crtc_w;
|
||||
ret = drm_atomic_helper_check_plane_state(s, crtc_state,
|
||||
(1 << 16) / 2048,
|
||||
INT_MAX, true, true);
|
||||
if (ret || !s->visible)
|
||||
return ret;
|
||||
|
||||
state->src_x = s->src.x1;
|
||||
state->src_y = s->src.y1;
|
||||
state->src_w = drm_rect_width(&s->src);
|
||||
state->src_h = drm_rect_height(&s->src);
|
||||
state->crtc_x = s->dst.x1;
|
||||
state->crtc_y = s->dst.y1;
|
||||
state->crtc_w = drm_rect_width(&s->dst);
|
||||
state->crtc_h = drm_rect_height(&s->dst);
|
||||
|
||||
if ((state->src_x | state->src_y | state->src_w | state->src_h) &
|
||||
SUBPIXEL_MASK)
|
||||
return -EINVAL;
|
||||
@ -639,45 +642,6 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p,
|
||||
if (state->nplanes > ATMEL_HLCDC_LAYER_MAX_PLANES)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* Swap width and size in case of 90 or 270 degrees rotation
|
||||
*/
|
||||
if (drm_rotation_90_or_270(state->base.rotation)) {
|
||||
tmp = state->crtc_w;
|
||||
state->crtc_w = state->crtc_h;
|
||||
state->crtc_h = tmp;
|
||||
tmp = state->src_w;
|
||||
state->src_w = state->src_h;
|
||||
state->src_h = tmp;
|
||||
}
|
||||
|
||||
if (state->crtc_x + state->crtc_w > mode->hdisplay)
|
||||
patched_crtc_w = mode->hdisplay - state->crtc_x;
|
||||
else
|
||||
patched_crtc_w = state->crtc_w;
|
||||
|
||||
if (state->crtc_x < 0) {
|
||||
patched_crtc_w += state->crtc_x;
|
||||
x_offset = -state->crtc_x;
|
||||
state->crtc_x = 0;
|
||||
}
|
||||
|
||||
if (state->crtc_y + state->crtc_h > mode->vdisplay)
|
||||
patched_crtc_h = mode->vdisplay - state->crtc_y;
|
||||
else
|
||||
patched_crtc_h = state->crtc_h;
|
||||
|
||||
if (state->crtc_y < 0) {
|
||||
patched_crtc_h += state->crtc_y;
|
||||
y_offset = -state->crtc_y;
|
||||
state->crtc_y = 0;
|
||||
}
|
||||
|
||||
patched_src_w = DIV_ROUND_CLOSEST(patched_crtc_w * state->src_w,
|
||||
state->crtc_w);
|
||||
patched_src_h = DIV_ROUND_CLOSEST(patched_crtc_h * state->src_h,
|
||||
state->crtc_h);
|
||||
|
||||
hsub = drm_format_horz_chroma_subsampling(fb->format->format);
|
||||
vsub = drm_format_vert_chroma_subsampling(fb->format->format);
|
||||
|
||||
@ -692,41 +656,38 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p,
|
||||
|
||||
switch (state->base.rotation & DRM_MODE_ROTATE_MASK) {
|
||||
case DRM_MODE_ROTATE_90:
|
||||
offset = ((y_offset + state->src_y + patched_src_w - 1) /
|
||||
ydiv) * fb->pitches[i];
|
||||
offset += ((x_offset + state->src_x) / xdiv) *
|
||||
state->bpp[i];
|
||||
state->xstride[i] = ((patched_src_w - 1) / ydiv) *
|
||||
fb->pitches[i];
|
||||
state->pstride[i] = -fb->pitches[i] - state->bpp[i];
|
||||
break;
|
||||
case DRM_MODE_ROTATE_180:
|
||||
offset = ((y_offset + state->src_y + patched_src_h - 1) /
|
||||
ydiv) * fb->pitches[i];
|
||||
offset += ((x_offset + state->src_x + patched_src_w - 1) /
|
||||
xdiv) * state->bpp[i];
|
||||
state->xstride[i] = ((((patched_src_w - 1) / xdiv) - 1) *
|
||||
state->bpp[i]) - fb->pitches[i];
|
||||
state->pstride[i] = -2 * state->bpp[i];
|
||||
break;
|
||||
case DRM_MODE_ROTATE_270:
|
||||
offset = ((y_offset + state->src_y) / ydiv) *
|
||||
offset = (state->src_y / ydiv) *
|
||||
fb->pitches[i];
|
||||
offset += ((x_offset + state->src_x + patched_src_h - 1) /
|
||||
offset += ((state->src_x + state->src_w - 1) /
|
||||
xdiv) * state->bpp[i];
|
||||
state->xstride[i] = -(((patched_src_w - 1) / ydiv) *
|
||||
state->xstride[i] = -(((state->src_h - 1) / ydiv) *
|
||||
fb->pitches[i]) -
|
||||
(2 * state->bpp[i]);
|
||||
state->pstride[i] = fb->pitches[i] - state->bpp[i];
|
||||
break;
|
||||
case DRM_MODE_ROTATE_180:
|
||||
offset = ((state->src_y + state->src_h - 1) /
|
||||
ydiv) * fb->pitches[i];
|
||||
offset += ((state->src_x + state->src_w - 1) /
|
||||
xdiv) * state->bpp[i];
|
||||
state->xstride[i] = ((((state->src_w - 1) / xdiv) - 1) *
|
||||
state->bpp[i]) - fb->pitches[i];
|
||||
state->pstride[i] = -2 * state->bpp[i];
|
||||
break;
|
||||
case DRM_MODE_ROTATE_270:
|
||||
offset = ((state->src_y + state->src_h - 1) /
|
||||
ydiv) * fb->pitches[i];
|
||||
offset += (state->src_x / xdiv) * state->bpp[i];
|
||||
state->xstride[i] = ((state->src_h - 1) / ydiv) *
|
||||
fb->pitches[i];
|
||||
state->pstride[i] = -fb->pitches[i] - state->bpp[i];
|
||||
break;
|
||||
case DRM_MODE_ROTATE_0:
|
||||
default:
|
||||
offset = ((y_offset + state->src_y) / ydiv) *
|
||||
fb->pitches[i];
|
||||
offset += ((x_offset + state->src_x) / xdiv) *
|
||||
state->bpp[i];
|
||||
offset = (state->src_y / ydiv) * fb->pitches[i];
|
||||
offset += (state->src_x / xdiv) * state->bpp[i];
|
||||
state->xstride[i] = fb->pitches[i] -
|
||||
((patched_src_w / xdiv) *
|
||||
((state->src_w / xdiv) *
|
||||
state->bpp[i]);
|
||||
state->pstride[i] = 0;
|
||||
break;
|
||||
@ -735,37 +696,47 @@ static int atmel_hlcdc_plane_atomic_check(struct drm_plane *p,
|
||||
state->offsets[i] = offset + fb->offsets[i];
|
||||
}
|
||||
|
||||
state->src_w = patched_src_w;
|
||||
state->src_h = patched_src_h;
|
||||
state->crtc_w = patched_crtc_w;
|
||||
state->crtc_h = patched_crtc_h;
|
||||
/*
|
||||
* Swap width and size in case of 90 or 270 degrees rotation
|
||||
*/
|
||||
if (drm_rotation_90_or_270(state->base.rotation)) {
|
||||
tmp = state->src_w;
|
||||
state->src_w = state->src_h;
|
||||
state->src_h = tmp;
|
||||
}
|
||||
|
||||
if (!desc->layout.size &&
|
||||
(mode->hdisplay != state->crtc_w ||
|
||||
mode->vdisplay != state->crtc_h))
|
||||
return -EINVAL;
|
||||
|
||||
if (desc->max_height && state->crtc_h > desc->max_height)
|
||||
return -EINVAL;
|
||||
|
||||
if (desc->max_width && state->crtc_w > desc->max_width)
|
||||
return -EINVAL;
|
||||
|
||||
if ((state->crtc_h != state->src_h || state->crtc_w != state->src_w) &&
|
||||
(!desc->layout.memsize ||
|
||||
state->base.fb->format->has_alpha))
|
||||
return -EINVAL;
|
||||
|
||||
if (state->crtc_x < 0 || state->crtc_y < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (state->crtc_w + state->crtc_x > mode->hdisplay ||
|
||||
state->crtc_h + state->crtc_y > mode->vdisplay)
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void atmel_hlcdc_plane_atomic_disable(struct drm_plane *p,
|
||||
struct drm_plane_state *old_state)
|
||||
{
|
||||
struct atmel_hlcdc_plane *plane = drm_plane_to_atmel_hlcdc_plane(p);
|
||||
|
||||
/* Disable interrupts */
|
||||
atmel_hlcdc_layer_write_reg(&plane->layer, ATMEL_HLCDC_LAYER_IDR,
|
||||
0xffffffff);
|
||||
|
||||
/* Disable the layer */
|
||||
atmel_hlcdc_layer_write_reg(&plane->layer, ATMEL_HLCDC_LAYER_CHDR,
|
||||
ATMEL_HLCDC_LAYER_RST |
|
||||
ATMEL_HLCDC_LAYER_A2Q |
|
||||
ATMEL_HLCDC_LAYER_UPDATE);
|
||||
|
||||
/* Clear all pending interrupts */
|
||||
atmel_hlcdc_layer_read_reg(&plane->layer, ATMEL_HLCDC_LAYER_ISR);
|
||||
}
|
||||
|
||||
static void atmel_hlcdc_plane_atomic_update(struct drm_plane *p,
|
||||
struct drm_plane_state *old_s)
|
||||
{
|
||||
@ -777,6 +748,11 @@ static void atmel_hlcdc_plane_atomic_update(struct drm_plane *p,
|
||||
if (!p->state->crtc || !p->state->fb)
|
||||
return;
|
||||
|
||||
if (!state->base.visible) {
|
||||
atmel_hlcdc_plane_atomic_disable(p, old_s);
|
||||
return;
|
||||
}
|
||||
|
||||
atmel_hlcdc_plane_update_pos_and_size(plane, state);
|
||||
atmel_hlcdc_plane_update_general_settings(plane, state);
|
||||
atmel_hlcdc_plane_update_format(plane, state);
|
||||
@ -798,25 +774,6 @@ static void atmel_hlcdc_plane_atomic_update(struct drm_plane *p,
|
||||
ATMEL_HLCDC_LAYER_A2Q : ATMEL_HLCDC_LAYER_EN));
|
||||
}
|
||||
|
||||
static void atmel_hlcdc_plane_atomic_disable(struct drm_plane *p,
|
||||
struct drm_plane_state *old_state)
|
||||
{
|
||||
struct atmel_hlcdc_plane *plane = drm_plane_to_atmel_hlcdc_plane(p);
|
||||
|
||||
/* Disable interrupts */
|
||||
atmel_hlcdc_layer_write_reg(&plane->layer, ATMEL_HLCDC_LAYER_IDR,
|
||||
0xffffffff);
|
||||
|
||||
/* Disable the layer */
|
||||
atmel_hlcdc_layer_write_reg(&plane->layer, ATMEL_HLCDC_LAYER_CHDR,
|
||||
ATMEL_HLCDC_LAYER_RST |
|
||||
ATMEL_HLCDC_LAYER_A2Q |
|
||||
ATMEL_HLCDC_LAYER_UPDATE);
|
||||
|
||||
/* Clear all pending interrupts */
|
||||
atmel_hlcdc_layer_read_reg(&plane->layer, ATMEL_HLCDC_LAYER_ISR);
|
||||
}
|
||||
|
||||
static int atmel_hlcdc_plane_init_properties(struct atmel_hlcdc_plane *plane)
|
||||
{
|
||||
const struct atmel_hlcdc_layer_desc *desc = plane->layer.desc;
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "bochs.h"
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_atomic_uapi.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
static int defx = 1024;
|
||||
static int defy = 768;
|
||||
|
@ -14,8 +14,10 @@
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_bridge.h>
|
||||
#include <drm/drm_connector.h>
|
||||
#include <drm/drm_mipi_dsi.h>
|
||||
#include <drm/drm_modes.h>
|
||||
|
||||
#define ADV7511_REG_CHIP_REVISION 0x00
|
||||
#define ADV7511_REG_N0 0x01
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include <media/cec.h>
|
||||
|
||||
|
@ -31,9 +31,9 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_dp_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "analogix-anx78xx.h"
|
||||
|
||||
|
@ -26,8 +26,8 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include <drm/bridge/analogix_dp.h>
|
||||
|
||||
|
@ -7,12 +7,14 @@
|
||||
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_bridge.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_drv.h>
|
||||
#include <drm/drm_mipi_dsi.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <video/mipi_display.h>
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/iopoll.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_address.h>
|
||||
|
@ -18,7 +18,7 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
struct dumb_vga {
|
||||
struct drm_bridge bridge;
|
||||
|
@ -36,8 +36,8 @@
|
||||
#include <linux/of.h>
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drmP.h>
|
||||
|
||||
#define EDID_EXT_BLOCK_CNT 0x7E
|
||||
|
@ -22,10 +22,10 @@
|
||||
#include <linux/of_gpio.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drmP.h>
|
||||
|
||||
#define PTN3460_EDID_ADDR 0x0
|
||||
|
@ -12,9 +12,9 @@
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_connector.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_encoder.h>
|
||||
#include <drm/drm_modeset_helper_vtables.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drm_panel.h>
|
||||
|
||||
struct panel_bridge {
|
||||
|
@ -26,9 +26,9 @@
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drmP.h>
|
||||
|
||||
/* Brightness scale on the Parade chip */
|
||||
|
@ -30,8 +30,8 @@
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#define SII902X_TPI_VIDEO_DATA 0x0
|
||||
|
||||
|
@ -25,9 +25,10 @@
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_encoder_slave.h>
|
||||
#include <drm/drm_scdc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/bridge/dw_hdmi.h>
|
||||
|
||||
#include <uapi/linux/media-bus-format.h>
|
||||
@ -43,6 +44,11 @@
|
||||
|
||||
#define HDMI_EDID_LEN 512
|
||||
|
||||
/* DW-HDMI Controller >= 0x200a are at least compliant with SCDC version 1 */
|
||||
#define SCDC_MIN_SOURCE_VERSION 0x1
|
||||
|
||||
#define HDMI14_MAX_TMDSCLK 340000000
|
||||
|
||||
enum hdmi_datamap {
|
||||
RGB444_8B = 0x01,
|
||||
RGB444_10B = 0x03,
|
||||
@ -93,6 +99,7 @@ struct hdmi_vmode {
|
||||
unsigned int mpixelclock;
|
||||
unsigned int mpixelrepetitioninput;
|
||||
unsigned int mpixelrepetitionoutput;
|
||||
unsigned int mtmdsclock;
|
||||
};
|
||||
|
||||
struct hdmi_data_info {
|
||||
@ -537,7 +544,7 @@ static void hdmi_init_clk_regenerator(struct dw_hdmi *hdmi)
|
||||
static void hdmi_clk_regenerator_update_pixel_clock(struct dw_hdmi *hdmi)
|
||||
{
|
||||
mutex_lock(&hdmi->audio_mutex);
|
||||
hdmi_set_clk_regenerator(hdmi, hdmi->hdmi_data.video_mode.mpixelclock,
|
||||
hdmi_set_clk_regenerator(hdmi, hdmi->hdmi_data.video_mode.mtmdsclock,
|
||||
hdmi->sample_rate);
|
||||
mutex_unlock(&hdmi->audio_mutex);
|
||||
}
|
||||
@ -546,7 +553,7 @@ void dw_hdmi_set_sample_rate(struct dw_hdmi *hdmi, unsigned int rate)
|
||||
{
|
||||
mutex_lock(&hdmi->audio_mutex);
|
||||
hdmi->sample_rate = rate;
|
||||
hdmi_set_clk_regenerator(hdmi, hdmi->hdmi_data.video_mode.mpixelclock,
|
||||
hdmi_set_clk_regenerator(hdmi, hdmi->hdmi_data.video_mode.mtmdsclock,
|
||||
hdmi->sample_rate);
|
||||
mutex_unlock(&hdmi->audio_mutex);
|
||||
}
|
||||
@ -647,6 +654,20 @@ static bool hdmi_bus_fmt_is_yuv422(unsigned int bus_format)
|
||||
}
|
||||
}
|
||||
|
||||
static bool hdmi_bus_fmt_is_yuv420(unsigned int bus_format)
|
||||
{
|
||||
switch (bus_format) {
|
||||
case MEDIA_BUS_FMT_UYYVYY8_0_5X24:
|
||||
case MEDIA_BUS_FMT_UYYVYY10_0_5X30:
|
||||
case MEDIA_BUS_FMT_UYYVYY12_0_5X36:
|
||||
case MEDIA_BUS_FMT_UYYVYY16_0_5X48:
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static int hdmi_bus_fmt_color_depth(unsigned int bus_format)
|
||||
{
|
||||
switch (bus_format) {
|
||||
@ -876,7 +897,8 @@ static void hdmi_video_packetize(struct dw_hdmi *hdmi)
|
||||
u8 val, vp_conf;
|
||||
|
||||
if (hdmi_bus_fmt_is_rgb(hdmi->hdmi_data.enc_out_bus_format) ||
|
||||
hdmi_bus_fmt_is_yuv444(hdmi->hdmi_data.enc_out_bus_format)) {
|
||||
hdmi_bus_fmt_is_yuv444(hdmi->hdmi_data.enc_out_bus_format) ||
|
||||
hdmi_bus_fmt_is_yuv420(hdmi->hdmi_data.enc_out_bus_format)) {
|
||||
switch (hdmi_bus_fmt_color_depth(
|
||||
hdmi->hdmi_data.enc_out_bus_format)) {
|
||||
case 8:
|
||||
@ -1015,6 +1037,33 @@ void dw_hdmi_phy_i2c_write(struct dw_hdmi *hdmi, unsigned short data,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dw_hdmi_phy_i2c_write);
|
||||
|
||||
/*
|
||||
* HDMI2.0 Specifies the following procedure for High TMDS Bit Rates:
|
||||
* - The Source shall suspend transmission of the TMDS clock and data
|
||||
* - The Source shall write to the TMDS_Bit_Clock_Ratio bit to change it
|
||||
* from a 0 to a 1 or from a 1 to a 0
|
||||
* - The Source shall allow a minimum of 1 ms and a maximum of 100 ms from
|
||||
* the time the TMDS_Bit_Clock_Ratio bit is written until resuming
|
||||
* transmission of TMDS clock and data
|
||||
*
|
||||
* To respect the 100ms maximum delay, the dw_hdmi_set_high_tmds_clock_ratio()
|
||||
* helper should called right before enabling the TMDS Clock and Data in
|
||||
* the PHY configuration callback.
|
||||
*/
|
||||
void dw_hdmi_set_high_tmds_clock_ratio(struct dw_hdmi *hdmi)
|
||||
{
|
||||
unsigned long mtmdsclock = hdmi->hdmi_data.video_mode.mtmdsclock;
|
||||
|
||||
/* Control for TMDS Bit Period/TMDS Clock-Period Ratio */
|
||||
if (hdmi->connector.display_info.hdmi.scdc.supported) {
|
||||
if (mtmdsclock > HDMI14_MAX_TMDSCLK)
|
||||
drm_scdc_set_high_tmds_clock_ratio(hdmi->ddc, 1);
|
||||
else
|
||||
drm_scdc_set_high_tmds_clock_ratio(hdmi->ddc, 0);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dw_hdmi_set_high_tmds_clock_ratio);
|
||||
|
||||
static void dw_hdmi_phy_enable_powerdown(struct dw_hdmi *hdmi, bool enable)
|
||||
{
|
||||
hdmi_mask_writeb(hdmi, !enable, HDMI_PHY_CONF0,
|
||||
@ -1165,6 +1214,8 @@ static int hdmi_phy_configure_dwc_hdmi_3d_tx(struct dw_hdmi *hdmi,
|
||||
const struct dw_hdmi_curr_ctrl *curr_ctrl = pdata->cur_ctr;
|
||||
const struct dw_hdmi_phy_config *phy_config = pdata->phy_config;
|
||||
|
||||
/* TOFIX Will need 420 specific PHY configuration tables */
|
||||
|
||||
/* PLL/MPLL Cfg - always match on final entry */
|
||||
for (; mpll_config->mpixelclock != ~0UL; mpll_config++)
|
||||
if (mpixelclock <= mpll_config->mpixelclock)
|
||||
@ -1212,10 +1263,13 @@ static int hdmi_phy_configure(struct dw_hdmi *hdmi)
|
||||
const struct dw_hdmi_phy_data *phy = hdmi->phy.data;
|
||||
const struct dw_hdmi_plat_data *pdata = hdmi->plat_data;
|
||||
unsigned long mpixelclock = hdmi->hdmi_data.video_mode.mpixelclock;
|
||||
unsigned long mtmdsclock = hdmi->hdmi_data.video_mode.mtmdsclock;
|
||||
int ret;
|
||||
|
||||
dw_hdmi_phy_power_off(hdmi);
|
||||
|
||||
dw_hdmi_set_high_tmds_clock_ratio(hdmi);
|
||||
|
||||
/* Leave low power consumption mode by asserting SVSRET. */
|
||||
if (phy->has_svsret)
|
||||
dw_hdmi_phy_enable_svsret(hdmi, 1);
|
||||
@ -1237,6 +1291,10 @@ static int hdmi_phy_configure(struct dw_hdmi *hdmi)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Wait for resuming transmission of TMDS clock and data */
|
||||
if (mtmdsclock > HDMI14_MAX_TMDSCLK)
|
||||
msleep(100);
|
||||
|
||||
return dw_hdmi_phy_power_on(hdmi);
|
||||
}
|
||||
|
||||
@ -1351,6 +1409,8 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, struct drm_display_mode *mode)
|
||||
frame.colorspace = HDMI_COLORSPACE_YUV444;
|
||||
else if (hdmi_bus_fmt_is_yuv422(hdmi->hdmi_data.enc_out_bus_format))
|
||||
frame.colorspace = HDMI_COLORSPACE_YUV422;
|
||||
else if (hdmi_bus_fmt_is_yuv420(hdmi->hdmi_data.enc_out_bus_format))
|
||||
frame.colorspace = HDMI_COLORSPACE_YUV420;
|
||||
else
|
||||
frame.colorspace = HDMI_COLORSPACE_RGB;
|
||||
|
||||
@ -1504,17 +1564,23 @@ static void hdmi_config_vendor_specific_infoframe(struct dw_hdmi *hdmi,
|
||||
static void hdmi_av_composer(struct dw_hdmi *hdmi,
|
||||
const struct drm_display_mode *mode)
|
||||
{
|
||||
u8 inv_val;
|
||||
u8 inv_val, bytes;
|
||||
struct drm_hdmi_info *hdmi_info = &hdmi->connector.display_info.hdmi;
|
||||
struct hdmi_vmode *vmode = &hdmi->hdmi_data.video_mode;
|
||||
int hblank, vblank, h_de_hs, v_de_vs, hsync_len, vsync_len;
|
||||
unsigned int vdisplay;
|
||||
unsigned int vdisplay, hdisplay;
|
||||
|
||||
vmode->mpixelclock = mode->clock * 1000;
|
||||
vmode->mtmdsclock = vmode->mpixelclock = mode->clock * 1000;
|
||||
|
||||
dev_dbg(hdmi->dev, "final pixclk = %d\n", vmode->mpixelclock);
|
||||
|
||||
if (hdmi_bus_fmt_is_yuv420(hdmi->hdmi_data.enc_out_bus_format))
|
||||
vmode->mtmdsclock /= 2;
|
||||
|
||||
/* Set up HDMI_FC_INVIDCONF */
|
||||
inv_val = (hdmi->hdmi_data.hdcp_enable ?
|
||||
inv_val = (hdmi->hdmi_data.hdcp_enable ||
|
||||
vmode->mtmdsclock > HDMI14_MAX_TMDSCLK ||
|
||||
hdmi_info->scdc.scrambling.low_rates ?
|
||||
HDMI_FC_INVIDCONF_HDCP_KEEPOUT_ACTIVE :
|
||||
HDMI_FC_INVIDCONF_HDCP_KEEPOUT_INACTIVE);
|
||||
|
||||
@ -1547,6 +1613,22 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
|
||||
|
||||
hdmi_writeb(hdmi, inv_val, HDMI_FC_INVIDCONF);
|
||||
|
||||
hdisplay = mode->hdisplay;
|
||||
hblank = mode->htotal - mode->hdisplay;
|
||||
h_de_hs = mode->hsync_start - mode->hdisplay;
|
||||
hsync_len = mode->hsync_end - mode->hsync_start;
|
||||
|
||||
/*
|
||||
* When we're setting a YCbCr420 mode, we need
|
||||
* to adjust the horizontal timing to suit.
|
||||
*/
|
||||
if (hdmi_bus_fmt_is_yuv420(hdmi->hdmi_data.enc_out_bus_format)) {
|
||||
hdisplay /= 2;
|
||||
hblank /= 2;
|
||||
h_de_hs /= 2;
|
||||
hsync_len /= 2;
|
||||
}
|
||||
|
||||
vdisplay = mode->vdisplay;
|
||||
vblank = mode->vtotal - mode->vdisplay;
|
||||
v_de_vs = mode->vsync_start - mode->vdisplay;
|
||||
@ -1563,16 +1645,54 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
|
||||
vsync_len /= 2;
|
||||
}
|
||||
|
||||
/* Scrambling Control */
|
||||
if (hdmi_info->scdc.supported) {
|
||||
if (vmode->mtmdsclock > HDMI14_MAX_TMDSCLK ||
|
||||
hdmi_info->scdc.scrambling.low_rates) {
|
||||
/*
|
||||
* HDMI2.0 Specifies the following procedure:
|
||||
* After the Source Device has determined that
|
||||
* SCDC_Present is set (=1), the Source Device should
|
||||
* write the accurate Version of the Source Device
|
||||
* to the Source Version field in the SCDCS.
|
||||
* Source Devices compliant shall set the
|
||||
* Source Version = 1.
|
||||
*/
|
||||
drm_scdc_readb(&hdmi->i2c->adap, SCDC_SINK_VERSION,
|
||||
&bytes);
|
||||
drm_scdc_writeb(&hdmi->i2c->adap, SCDC_SOURCE_VERSION,
|
||||
min_t(u8, bytes, SCDC_MIN_SOURCE_VERSION));
|
||||
|
||||
/* Enabled Scrambling in the Sink */
|
||||
drm_scdc_set_scrambling(&hdmi->i2c->adap, 1);
|
||||
|
||||
/*
|
||||
* To activate the scrambler feature, you must ensure
|
||||
* that the quasi-static configuration bit
|
||||
* fc_invidconf.HDCP_keepout is set at configuration
|
||||
* time, before the required mc_swrstzreq.tmdsswrst_req
|
||||
* reset request is issued.
|
||||
*/
|
||||
hdmi_writeb(hdmi, (u8)~HDMI_MC_SWRSTZ_TMDSSWRST_REQ,
|
||||
HDMI_MC_SWRSTZ);
|
||||
hdmi_writeb(hdmi, 1, HDMI_FC_SCRAMBLER_CTRL);
|
||||
} else {
|
||||
hdmi_writeb(hdmi, 0, HDMI_FC_SCRAMBLER_CTRL);
|
||||
hdmi_writeb(hdmi, (u8)~HDMI_MC_SWRSTZ_TMDSSWRST_REQ,
|
||||
HDMI_MC_SWRSTZ);
|
||||
drm_scdc_set_scrambling(&hdmi->i2c->adap, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set up horizontal active pixel width */
|
||||
hdmi_writeb(hdmi, mode->hdisplay >> 8, HDMI_FC_INHACTV1);
|
||||
hdmi_writeb(hdmi, mode->hdisplay, HDMI_FC_INHACTV0);
|
||||
hdmi_writeb(hdmi, hdisplay >> 8, HDMI_FC_INHACTV1);
|
||||
hdmi_writeb(hdmi, hdisplay, HDMI_FC_INHACTV0);
|
||||
|
||||
/* Set up vertical active lines */
|
||||
hdmi_writeb(hdmi, vdisplay >> 8, HDMI_FC_INVACTV1);
|
||||
hdmi_writeb(hdmi, vdisplay, HDMI_FC_INVACTV0);
|
||||
|
||||
/* Set up horizontal blanking pixel region width */
|
||||
hblank = mode->htotal - mode->hdisplay;
|
||||
hdmi_writeb(hdmi, hblank >> 8, HDMI_FC_INHBLANK1);
|
||||
hdmi_writeb(hdmi, hblank, HDMI_FC_INHBLANK0);
|
||||
|
||||
@ -1580,7 +1700,6 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
|
||||
hdmi_writeb(hdmi, vblank, HDMI_FC_INVBLANK);
|
||||
|
||||
/* Set up HSYNC active edge delay width (in pixel clks) */
|
||||
h_de_hs = mode->hsync_start - mode->hdisplay;
|
||||
hdmi_writeb(hdmi, h_de_hs >> 8, HDMI_FC_HSYNCINDELAY1);
|
||||
hdmi_writeb(hdmi, h_de_hs, HDMI_FC_HSYNCINDELAY0);
|
||||
|
||||
@ -1588,7 +1707,6 @@ static void hdmi_av_composer(struct dw_hdmi *hdmi,
|
||||
hdmi_writeb(hdmi, v_de_vs, HDMI_FC_VSYNCINDELAY);
|
||||
|
||||
/* Set up HSYNC active pulse width (in pixel clks) */
|
||||
hsync_len = mode->hsync_end - mode->hsync_start;
|
||||
hdmi_writeb(hdmi, hsync_len >> 8, HDMI_FC_HSYNCINWIDTH1);
|
||||
hdmi_writeb(hdmi, hsync_len, HDMI_FC_HSYNCINWIDTH0);
|
||||
|
||||
|
@ -255,6 +255,7 @@
|
||||
#define HDMI_FC_MASK2 0x10DA
|
||||
#define HDMI_FC_POL2 0x10DB
|
||||
#define HDMI_FC_PRCONF 0x10E0
|
||||
#define HDMI_FC_SCRAMBLER_CTRL 0x10E1
|
||||
|
||||
#define HDMI_FC_GMD_STAT 0x1100
|
||||
#define HDMI_FC_GMD_EN 0x1101
|
||||
|
@ -19,9 +19,9 @@
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_bridge.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_mipi_dsi.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/bridge/dw_mipi_dsi.h>
|
||||
#include <video/mipi_display.h>
|
||||
|
||||
|
@ -9,11 +9,11 @@
|
||||
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_mipi_dsi.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drmP.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/of_graph.h>
|
||||
|
@ -34,11 +34,11 @@
|
||||
#include <linux/slab.h>
|
||||
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_dp_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
/* Registers */
|
||||
|
||||
|
@ -6,11 +6,11 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_dp_helper.h>
|
||||
#include <drm/drm_mipi_dsi.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/i2c.h>
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#define HOTPLUG_DEBOUNCE_MS 1100
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include <linux/console.h>
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "cirrus_drv.h"
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include <video/cirrus.h>
|
||||
|
||||
|
@ -29,7 +29,6 @@
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_uapi.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_writeback.h>
|
||||
#include <drm/drm_damage_helper.h>
|
||||
|
@ -1367,7 +1367,7 @@ EXPORT_SYMBOL(drm_mode_create_scaling_mode_property);
|
||||
*
|
||||
* Absence of the property should indicate absence of support.
|
||||
*
|
||||
* "vrr_enabled":
|
||||
* "VRR_ENABLED":
|
||||
* Default &drm_crtc boolean property that notifies the driver that the
|
||||
* content on the CRTC is suitable for variable refresh rate presentation.
|
||||
* The driver will take this property as a hint to enable variable
|
||||
|
@ -33,7 +33,7 @@
|
||||
#include <drm/drm_fixed.h>
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
/**
|
||||
* DOC: dp mst helper
|
||||
@ -67,6 +67,64 @@ static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr,
|
||||
static int drm_dp_mst_register_i2c_bus(struct drm_dp_aux *aux);
|
||||
static void drm_dp_mst_unregister_i2c_bus(struct drm_dp_aux *aux);
|
||||
static void drm_dp_mst_kick_tx(struct drm_dp_mst_topology_mgr *mgr);
|
||||
|
||||
#define DP_STR(x) [DP_ ## x] = #x
|
||||
|
||||
static const char *drm_dp_mst_req_type_str(u8 req_type)
|
||||
{
|
||||
static const char * const req_type_str[] = {
|
||||
DP_STR(GET_MSG_TRANSACTION_VERSION),
|
||||
DP_STR(LINK_ADDRESS),
|
||||
DP_STR(CONNECTION_STATUS_NOTIFY),
|
||||
DP_STR(ENUM_PATH_RESOURCES),
|
||||
DP_STR(ALLOCATE_PAYLOAD),
|
||||
DP_STR(QUERY_PAYLOAD),
|
||||
DP_STR(RESOURCE_STATUS_NOTIFY),
|
||||
DP_STR(CLEAR_PAYLOAD_ID_TABLE),
|
||||
DP_STR(REMOTE_DPCD_READ),
|
||||
DP_STR(REMOTE_DPCD_WRITE),
|
||||
DP_STR(REMOTE_I2C_READ),
|
||||
DP_STR(REMOTE_I2C_WRITE),
|
||||
DP_STR(POWER_UP_PHY),
|
||||
DP_STR(POWER_DOWN_PHY),
|
||||
DP_STR(SINK_EVENT_NOTIFY),
|
||||
DP_STR(QUERY_STREAM_ENC_STATUS),
|
||||
};
|
||||
|
||||
if (req_type >= ARRAY_SIZE(req_type_str) ||
|
||||
!req_type_str[req_type])
|
||||
return "unknown";
|
||||
|
||||
return req_type_str[req_type];
|
||||
}
|
||||
|
||||
#undef DP_STR
|
||||
#define DP_STR(x) [DP_NAK_ ## x] = #x
|
||||
|
||||
static const char *drm_dp_mst_nak_reason_str(u8 nak_reason)
|
||||
{
|
||||
static const char * const nak_reason_str[] = {
|
||||
DP_STR(WRITE_FAILURE),
|
||||
DP_STR(INVALID_READ),
|
||||
DP_STR(CRC_FAILURE),
|
||||
DP_STR(BAD_PARAM),
|
||||
DP_STR(DEFER),
|
||||
DP_STR(LINK_FAILURE),
|
||||
DP_STR(NO_RESOURCES),
|
||||
DP_STR(DPCD_FAIL),
|
||||
DP_STR(I2C_NAK),
|
||||
DP_STR(ALLOCATE_FAIL),
|
||||
};
|
||||
|
||||
if (nak_reason >= ARRAY_SIZE(nak_reason_str) ||
|
||||
!nak_reason_str[nak_reason])
|
||||
return "unknown";
|
||||
|
||||
return nak_reason_str[nak_reason];
|
||||
}
|
||||
|
||||
#undef DP_STR
|
||||
|
||||
/* sideband msg handling */
|
||||
static u8 drm_dp_msg_header_crc4(const uint8_t *data, size_t num_nibbles)
|
||||
{
|
||||
@ -568,7 +626,7 @@ static bool drm_dp_sideband_parse_reply(struct drm_dp_sideband_msg_rx *raw,
|
||||
msg->reply_type = (raw->msg[0] & 0x80) >> 7;
|
||||
msg->req_type = (raw->msg[0] & 0x7f);
|
||||
|
||||
if (msg->reply_type) {
|
||||
if (msg->reply_type == DP_SIDEBAND_REPLY_NAK) {
|
||||
memcpy(msg->u.nak.guid, &raw->msg[1], 16);
|
||||
msg->u.nak.reason = raw->msg[17];
|
||||
msg->u.nak.nak_data = raw->msg[18];
|
||||
@ -594,7 +652,8 @@ static bool drm_dp_sideband_parse_reply(struct drm_dp_sideband_msg_rx *raw,
|
||||
case DP_POWER_UP_PHY:
|
||||
return drm_dp_sideband_parse_power_updown_phy_ack(raw, msg);
|
||||
default:
|
||||
DRM_ERROR("Got unknown reply 0x%02x\n", msg->req_type);
|
||||
DRM_ERROR("Got unknown reply 0x%02x (%s)\n", msg->req_type,
|
||||
drm_dp_mst_req_type_str(msg->req_type));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -661,7 +720,8 @@ static bool drm_dp_sideband_parse_req(struct drm_dp_sideband_msg_rx *raw,
|
||||
case DP_RESOURCE_STATUS_NOTIFY:
|
||||
return drm_dp_sideband_parse_resource_status_notify(raw, msg);
|
||||
default:
|
||||
DRM_ERROR("Got unknown request 0x%02x\n", msg->req_type);
|
||||
DRM_ERROR("Got unknown request 0x%02x (%s)\n", msg->req_type,
|
||||
drm_dp_mst_req_type_str(msg->req_type));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -1969,9 +2029,9 @@ static void drm_dp_send_link_address(struct drm_dp_mst_topology_mgr *mgr,
|
||||
if (ret > 0) {
|
||||
int i;
|
||||
|
||||
if (txmsg->reply.reply_type == 1)
|
||||
if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK) {
|
||||
DRM_DEBUG_KMS("link address nak received\n");
|
||||
else {
|
||||
} else {
|
||||
DRM_DEBUG_KMS("link address reply: %d\n", txmsg->reply.u.link_addr.nports);
|
||||
for (i = 0; i < txmsg->reply.u.link_addr.nports; i++) {
|
||||
DRM_DEBUG_KMS("port %d: input %d, pdt: %d, pn: %d, dpcd_rev: %02x, mcs: %d, ddps: %d, ldps %d, sdp %d/%d\n", i,
|
||||
@ -2020,9 +2080,9 @@ static int drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr,
|
||||
|
||||
ret = drm_dp_mst_wait_tx_reply(mstb, txmsg);
|
||||
if (ret > 0) {
|
||||
if (txmsg->reply.reply_type == 1)
|
||||
if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK) {
|
||||
DRM_DEBUG_KMS("enum path resources nak received\n");
|
||||
else {
|
||||
} else {
|
||||
if (port->port_num != txmsg->reply.u.path_resources.port_number)
|
||||
DRM_ERROR("got incorrect port in response\n");
|
||||
DRM_DEBUG_KMS("enum path resources %d: %d %d\n", txmsg->reply.u.path_resources.port_number, txmsg->reply.u.path_resources.full_payload_bw_number,
|
||||
@ -2132,7 +2192,7 @@ static int drm_dp_payload_send_msg(struct drm_dp_mst_topology_mgr *mgr,
|
||||
*/
|
||||
ret = drm_dp_mst_wait_tx_reply(mstb, txmsg);
|
||||
if (ret > 0) {
|
||||
if (txmsg->reply.reply_type == 1)
|
||||
if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK)
|
||||
ret = -EINVAL;
|
||||
else
|
||||
ret = 0;
|
||||
@ -2165,7 +2225,7 @@ int drm_dp_send_power_updown_phy(struct drm_dp_mst_topology_mgr *mgr,
|
||||
|
||||
ret = drm_dp_mst_wait_tx_reply(port->parent, txmsg);
|
||||
if (ret > 0) {
|
||||
if (txmsg->reply.reply_type == 1)
|
||||
if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK)
|
||||
ret = -EINVAL;
|
||||
else
|
||||
ret = 0;
|
||||
@ -2423,9 +2483,9 @@ static int drm_dp_send_dpcd_write(struct drm_dp_mst_topology_mgr *mgr,
|
||||
|
||||
ret = drm_dp_mst_wait_tx_reply(mstb, txmsg);
|
||||
if (ret > 0) {
|
||||
if (txmsg->reply.reply_type == 1) {
|
||||
if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK)
|
||||
ret = -EINVAL;
|
||||
} else
|
||||
else
|
||||
ret = 0;
|
||||
}
|
||||
kfree(txmsg);
|
||||
@ -2438,7 +2498,7 @@ static int drm_dp_encode_up_ack_reply(struct drm_dp_sideband_msg_tx *msg, u8 req
|
||||
{
|
||||
struct drm_dp_sideband_msg_reply_body reply;
|
||||
|
||||
reply.reply_type = 0;
|
||||
reply.reply_type = DP_SIDEBAND_REPLY_ACK;
|
||||
reply.req_type = req_type;
|
||||
drm_dp_encode_sideband_reply(&reply, msg);
|
||||
return 0;
|
||||
@ -2745,9 +2805,14 @@ static int drm_dp_mst_handle_down_rep(struct drm_dp_mst_topology_mgr *mgr)
|
||||
}
|
||||
|
||||
drm_dp_sideband_parse_reply(&mgr->down_rep_recv, &txmsg->reply);
|
||||
if (txmsg->reply.reply_type == 1) {
|
||||
DRM_DEBUG_KMS("Got NAK reply: req 0x%02x, reason 0x%02x, nak data 0x%02x\n", txmsg->reply.req_type, txmsg->reply.u.nak.reason, txmsg->reply.u.nak.nak_data);
|
||||
}
|
||||
|
||||
if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK)
|
||||
DRM_DEBUG_KMS("Got NAK reply: req 0x%02x (%s), reason 0x%02x (%s), nak data 0x%02x\n",
|
||||
txmsg->reply.req_type,
|
||||
drm_dp_mst_req_type_str(txmsg->reply.req_type),
|
||||
txmsg->reply.u.nak.reason,
|
||||
drm_dp_mst_nak_reason_str(txmsg->reply.u.nak.reason),
|
||||
txmsg->reply.u.nak.nak_data);
|
||||
|
||||
memset(&mgr->down_rep_recv, 0, sizeof(struct drm_dp_sideband_msg_rx));
|
||||
drm_dp_mst_topology_put_mstb(mstb);
|
||||
@ -3893,7 +3958,7 @@ static int drm_dp_mst_i2c_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs
|
||||
ret = drm_dp_mst_wait_tx_reply(mstb, txmsg);
|
||||
if (ret > 0) {
|
||||
|
||||
if (txmsg->reply.reply_type == 1) { /* got a NAK back */
|
||||
if (txmsg->reply.reply_type == DP_SIDEBAND_REPLY_NAK) {
|
||||
ret = -EREMOTEIO;
|
||||
goto out;
|
||||
}
|
||||
|
@ -3185,9 +3185,7 @@ static void drm_fbdev_client_unregister(struct drm_client_dev *client)
|
||||
|
||||
static int drm_fbdev_client_restore(struct drm_client_dev *client)
|
||||
{
|
||||
struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
|
||||
|
||||
drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper);
|
||||
drm_fb_helper_lastclose(client->dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -103,9 +103,6 @@ int drm_irq_install(struct drm_device *dev, int irq)
|
||||
int ret;
|
||||
unsigned long sh_flags = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (irq == 0)
|
||||
return -EINVAL;
|
||||
|
||||
@ -123,8 +120,8 @@ int drm_irq_install(struct drm_device *dev, int irq)
|
||||
if (dev->driver->irq_preinstall)
|
||||
dev->driver->irq_preinstall(dev);
|
||||
|
||||
/* Install handler */
|
||||
if (drm_core_check_feature(dev, DRIVER_IRQ_SHARED))
|
||||
/* PCI devices require shared interrupts. */
|
||||
if (dev->pdev)
|
||||
sh_flags = IRQF_SHARED;
|
||||
|
||||
ret = request_irq(irq, dev->driver->irq_handler,
|
||||
@ -174,9 +171,6 @@ int drm_irq_uninstall(struct drm_device *dev)
|
||||
bool irq_enabled;
|
||||
int i;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
irq_enabled = dev->irq_enabled;
|
||||
dev->irq_enabled = false;
|
||||
|
||||
|
@ -21,10 +21,10 @@
|
||||
*/
|
||||
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_modeset_helper.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
/**
|
||||
* DOC: aux kms helpers
|
||||
|
@ -36,10 +36,10 @@
|
||||
#include <drm/drm_client.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_fourcc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_modeset_helper_vtables.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "drm_crtc_helper_internal.h"
|
||||
|
||||
|
@ -10,8 +10,8 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drm_simple_kms_helper.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
|
@ -21,7 +21,6 @@
|
||||
#include <linux/mm_types.h>
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_gem.h>
|
||||
#include <drm/etnaviv_drm.h>
|
||||
|
@ -22,10 +22,11 @@
|
||||
#include <video/videomode.h>
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include <drm/bridge/analogix_dp.h>
|
||||
#include <drm/exynos_drm.h>
|
||||
|
@ -13,10 +13,10 @@
|
||||
*/
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_encoder.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "exynos_drm_crtc.h"
|
||||
#include "exynos_drm_drv.h"
|
||||
|
@ -11,9 +11,9 @@
|
||||
*/
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include <linux/of_graph.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
@ -15,8 +15,8 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include <linux/component.h>
|
||||
|
||||
|
@ -13,11 +13,11 @@
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_mipi_dsi.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
|
@ -13,12 +13,12 @@
|
||||
*/
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <uapi/drm/exynos_drm.h>
|
||||
|
||||
#include "exynos_drm_drv.h"
|
||||
|
@ -15,7 +15,7 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/exynos_drm.h>
|
||||
|
||||
#include <linux/console.h>
|
||||
@ -88,7 +88,6 @@ static int exynos_drm_fbdev_update(struct drm_fb_helper *helper,
|
||||
}
|
||||
|
||||
fbi->par = helper;
|
||||
fbi->flags = FBINFO_FLAG_DEFAULT;
|
||||
fbi->fbops = &exynos_drm_fb_ops;
|
||||
|
||||
drm_fb_helper_fill_fix(fbi, fb->pitches[0], fb->format->depth);
|
||||
|
@ -19,9 +19,9 @@
|
||||
|
||||
#include <drm/exynos_drm.h>
|
||||
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "exynos_drm_drv.h"
|
||||
#include "exynos_drm_crtc.h"
|
||||
|
@ -15,9 +15,9 @@
|
||||
*/
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "regs-hdmi.h"
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <video/videomode.h>
|
||||
|
||||
#include "fsl_dcu_drm_crtc.h"
|
||||
|
@ -24,11 +24,11 @@
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_cma_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drm_modeset_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "fsl_dcu_drm_crtc.h"
|
||||
#include "fsl_dcu_drm_drv.h"
|
||||
@ -137,7 +137,7 @@ static irqreturn_t fsl_dcu_drm_irq(int irq, void *arg)
|
||||
DEFINE_DRM_GEM_CMA_FOPS(fsl_dcu_drm_fops);
|
||||
|
||||
static struct drm_driver fsl_dcu_drm_driver = {
|
||||
.driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
|
||||
.driver_features = DRIVER_GEM | DRIVER_MODESET
|
||||
| DRIVER_PRIME | DRIVER_ATOMIC,
|
||||
.load = fsl_dcu_load,
|
||||
.unload = fsl_dcu_unload,
|
||||
|
@ -11,9 +11,9 @@
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_cma_helper.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "fsl_dcu_drm_crtc.h"
|
||||
#include "fsl_dcu_drm_drv.h"
|
||||
|
@ -14,10 +14,10 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_cma_helper.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "fsl_dcu_drm_drv.h"
|
||||
#include "fsl_dcu_drm_plane.h"
|
||||
|
@ -14,9 +14,9 @@
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_panel.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "fsl_dcu_drm_drv.h"
|
||||
#include "fsl_tcon.h"
|
||||
|
@ -405,7 +405,6 @@ static int psbfb_create(struct psb_fbdev *fbdev,
|
||||
drm_fb_helper_fill_fix(info, fb->pitches[0], fb->format->depth);
|
||||
strcpy(info->fix.id, "psbdrmfb");
|
||||
|
||||
info->flags = FBINFO_DEFAULT;
|
||||
if (dev_priv->ops->accel_2d && pitch_lines > 8) /* 2D engine */
|
||||
info->fbops = &psbfb_ops;
|
||||
else if (gtt_roll) { /* GTT rolling seems best */
|
||||
|
@ -468,8 +468,7 @@ static const struct file_operations psb_gem_fops = {
|
||||
};
|
||||
|
||||
static struct drm_driver driver = {
|
||||
.driver_features = DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | \
|
||||
DRIVER_MODESET | DRIVER_GEM,
|
||||
.driver_features = DRIVER_MODESET | DRIVER_GEM,
|
||||
.load = psb_driver_load,
|
||||
.unload = psb_driver_unload,
|
||||
.lastclose = drm_fb_helper_lastclose,
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_encoder.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <linux/gpio.h>
|
||||
#include "gma_display.h"
|
||||
|
||||
|
@ -18,8 +18,8 @@
|
||||
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "hibmc_drm_drv.h"
|
||||
#include "hibmc_drm_regs.h"
|
||||
|
@ -20,7 +20,7 @@
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "hibmc_drm_drv.h"
|
||||
#include "hibmc_drm_regs.h"
|
||||
@ -56,8 +56,7 @@ static irqreturn_t hibmc_drm_interrupt(int irq, void *arg)
|
||||
}
|
||||
|
||||
static struct drm_driver hibmc_driver = {
|
||||
.driver_features = DRIVER_GEM | DRIVER_MODESET |
|
||||
DRIVER_ATOMIC | DRIVER_HAVE_IRQ,
|
||||
.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
|
||||
.fops = &hibmc_fops,
|
||||
.name = "hibmc",
|
||||
.date = "20160828",
|
||||
|
@ -17,8 +17,8 @@
|
||||
*/
|
||||
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "hibmc_drm_drv.h"
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
||||
*/
|
||||
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "hibmc_drm_drv.h"
|
||||
#include "hibmc_drm_regs.h"
|
||||
|
@ -17,12 +17,17 @@
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/component.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_mipi_dsi.h>
|
||||
#include <drm/drm_encoder_slave.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_device.h>
|
||||
#include <drm/drm_encoder_slave.h>
|
||||
#include <drm/drm_mipi_dsi.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_print.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "dw_dsi_reg.h"
|
||||
|
||||
|
@ -23,13 +23,13 @@
|
||||
#include <linux/reset.h>
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drm_crtc.h>
|
||||
#include <drm/drm_fb_cma_helper.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drm_plane_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "kirin_drm_drv.h"
|
||||
#include "kirin_ade_reg.h"
|
||||
|
@ -20,13 +20,13 @@
|
||||
#include <linux/of_graph.h>
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_fb_cma_helper.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_gem_cma_helper.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
#include "kirin_drm_drv.h"
|
||||
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_encoder_slave.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/i2c/ch7006.h>
|
||||
|
||||
typedef int64_t fixed;
|
||||
|
@ -27,8 +27,8 @@
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_encoder_slave.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/i2c/sil164.h>
|
||||
|
||||
struct sil164_priv {
|
||||
|
@ -26,9 +26,9 @@
|
||||
|
||||
#include <drm/drmP.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_edid.h>
|
||||
#include <drm/drm_of.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/i2c/tda998x.h>
|
||||
|
||||
#include <media/cec-notifier.h>
|
||||
|
@ -26,9 +26,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/sort.h>
|
||||
#include <linux/sched/mm.h>
|
||||
#include <drm/drm_debugfs.h>
|
||||
#include <drm/drm_fourcc.h>
|
||||
#include "intel_drv.h"
|
||||
#include "intel_guc_submission.h"
|
||||
|
||||
|
@ -41,7 +41,7 @@
|
||||
#include <linux/vt.h>
|
||||
#include <acpi/video.h>
|
||||
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/i915_drm.h>
|
||||
|
||||
@ -3010,7 +3010,7 @@ static struct drm_driver driver = {
|
||||
* deal with them for Intel hardware.
|
||||
*/
|
||||
.driver_features =
|
||||
DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM | DRIVER_PRIME |
|
||||
DRIVER_GEM | DRIVER_PRIME |
|
||||
DRIVER_RENDER | DRIVER_MODESET | DRIVER_ATOMIC | DRIVER_SYNCOBJ,
|
||||
.release = i915_driver_release,
|
||||
.open = i915_driver_open,
|
||||
|
@ -26,6 +26,7 @@
|
||||
*/
|
||||
|
||||
#include <drm/drm_vma_manager.h>
|
||||
#include <drm/drm_pci.h>
|
||||
#include <drm/i915_drm.h>
|
||||
#include <linux/dma-fence-array.h>
|
||||
#include <linux/kthread.h>
|
||||
@ -36,6 +37,7 @@
|
||||
#include <linux/swap.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/dma-buf.h>
|
||||
#include <linux/mman.h>
|
||||
|
||||
#include "i915_drv.h"
|
||||
#include "i915_gem_clflush.h"
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include <linux/compat.h>
|
||||
|
||||
#include <drm/i915_drm.h>
|
||||
#include <drm/drm_ioctl.h>
|
||||
#include "i915_drv.h"
|
||||
|
||||
struct drm_i915_getparam32 {
|
||||
|
@ -31,6 +31,8 @@
|
||||
#include <linux/sysrq.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/circ_buf.h>
|
||||
#include <drm/drm_irq.h>
|
||||
#include <drm/drm_drv.h>
|
||||
#include <drm/i915_drm.h>
|
||||
#include "i915_drv.h"
|
||||
#include "i915_trace.h"
|
||||
|
@ -26,6 +26,8 @@
|
||||
#include <linux/vgaarb.h>
|
||||
#include <linux/vga_switcheroo.h>
|
||||
|
||||
#include <drm/drm_drv.h>
|
||||
|
||||
#include "i915_drv.h"
|
||||
#include "i915_selftest.h"
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user