summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/sprd/sprd_dpu.c
diff options
context:
space:
mode:
authorKevin Tang <kevin3.tang@gmail.com>2021-12-07 17:27:17 +0300
committerMaarten Lankhorst <maarten.lankhorst@linux.intel.com>2021-12-10 14:38:10 +0300
commit1c66496b1391699040d0ddda21fe1979865f6eba (patch)
treeb85ffcdde9e93976e10e454b12f6c95b4cb7c9e9 /drivers/gpu/drm/sprd/sprd_dpu.c
parent2295bbd35edb19248162ebc6c1acce1255ae7db6 (diff)
downloadlinux-1c66496b1391699040d0ddda21fe1979865f6eba.tar.xz
drm/sprd: add Unisoc's drm mipi dsi&dphy driver
Adds dsi host controller support for the Unisoc's display subsystem. Adds dsi phy support for the Unisoc's display subsystem. Only MIPI DSI Displays supported, DP/TV/HMDI will be support in the feature. v1: - Remove dphy and dsi graph binding, merge the dphy driver into the dsi. v2: - Use drm_xxx to replace all DRM_XXX. - Use kzalloc to replace devm_kzalloc for sprd_dsi structure init. v4: - Use drmm_helpers to allocate encoder. - Move allocate encoder and connector to bind function. v5: - Drop the dsi ip file prefix. - Fix the checkpatch warnings. - Add Signed-off-by for dsi&dphy patch. - Use the mode_flags of mipi_dsi_device to setup crtc DPI and EDPI mode. v6: - Redesign the way to access the dsi register. - Reduce the dsi_context member variables. v7: - Fix codeing style issue by checkpatch. - Drop the pll registers structure define. - Use bridge API instead of drm panel API. - Register mipi_dsi_host on probe phase; - Remove some unused function. v8: - Fix missing signed-off-by. - Move component_add to dsi_host.attach callback. Cc: Orson Zhai <orsonzhai@gmail.com> Cc: Chunyan Zhang <zhang.lyra@gmail.com> Signed-off-by: Kevin Tang <kevin.tang@unisoc.com> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20211207142717.30296-7-kevin3.tang@gmail.com
Diffstat (limited to 'drivers/gpu/drm/sprd/sprd_dpu.c')
-rw-r--r--drivers/gpu/drm/sprd/sprd_dpu.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/gpu/drm/sprd/sprd_dpu.c b/drivers/gpu/drm/sprd/sprd_dpu.c
index 1d10d09987cc..06a3414ee43a 100644
--- a/drivers/gpu/drm/sprd/sprd_dpu.c
+++ b/drivers/gpu/drm/sprd/sprd_dpu.c
@@ -25,6 +25,7 @@
#include "sprd_drm.h"
#include "sprd_dpu.h"
+#include "sprd_dsi.h"
/* Global control registers */
#define REG_DPU_CTRL 0x04
@@ -618,9 +619,21 @@ static void sprd_crtc_mode_set_nofb(struct drm_crtc *crtc)
{
struct sprd_dpu *dpu = to_sprd_crtc(crtc);
struct drm_display_mode *mode = &crtc->state->adjusted_mode;
+ struct drm_encoder *encoder;
+ struct sprd_dsi *dsi;
drm_display_mode_to_videomode(mode, &dpu->ctx.vm);
+ drm_for_each_encoder_mask(encoder, crtc->dev,
+ crtc->state->encoder_mask) {
+ dsi = encoder_to_dsi(encoder);
+
+ if (dsi->slave->mode_flags & MIPI_DSI_MODE_VIDEO)
+ dpu->ctx.if_type = SPRD_DPU_IF_DPI;
+ else
+ dpu->ctx.if_type = SPRD_DPU_IF_EDPI;
+ }
+
sprd_dpi_init(dpu);
}