From deeec05202f38afb3cbcb753085e8ad868570cd8 Mon Sep 17 00:00:00 2001 From: Algea Cao Date: Mon, 22 Jun 2020 17:55:25 +0800 Subject: [PATCH] drm/bridge: support rk1000 tv encoder RK1000 is a digital-analog mixed chip which has tve output function. RK1000's registers can be written and read through I2C interaface. Because RK1000's I2C need dclk and mclk, RK1000 TVE should be registered after RK1000 CORE. Change-Id: I65b40826bd1dbf07d4fa94ecdf8c75005008731f Signed-off-by: Algea Cao --- drivers/gpu/drm/bridge/Kconfig | 8 ++++++++ drivers/gpu/drm/bridge/Makefile | 1 + drivers/gpu/drm/bridge/rk1000.c | 13 +++++++------ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig index 05f4b1b0b379..55bf64d1da76 100644 --- a/drivers/gpu/drm/bridge/Kconfig +++ b/drivers/gpu/drm/bridge/Kconfig @@ -134,6 +134,14 @@ config DRM_RK630_TVE help ROCKCHIP TVE bridge chip RK630 driver. +config DRM_RK1000_TVE + tristate "Rockchip RK1000 TVE bridge" + depends on OF + select DRM_KMS_HELPER + select MFD_RK1000 + help + Rockchip TVE bridge chip driver. + config DRM_SIL_SII8620 tristate "Silicon Image SII8620 HDMI/MHL bridge" depends on OF diff --git a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/bridge/Makefile index e666f33990c1..519e916ed045 100644 --- a/drivers/gpu/drm/bridge/Makefile +++ b/drivers/gpu/drm/bridge/Makefile @@ -9,6 +9,7 @@ obj-$(CONFIG_DRM_NXP_PTN3460) += nxp-ptn3460.o obj-$(CONFIG_DRM_PARADE_PS8622) += parade-ps8622.o obj-$(CONFIG_DRM_PARADE_PS8640) += parade-ps8640.o obj-$(CONFIG_DRM_RK630_TVE) += rk630-tve.o +obj-$(CONFIG_DRM_RK1000_TVE) += rk1000.o obj-$(CONFIG_DRM_SIL_SII8620) += sil-sii8620.o obj-$(CONFIG_DRM_SII902X) += sii902x.o obj-$(CONFIG_DRM_SII9234) += sii9234.o diff --git a/drivers/gpu/drm/bridge/rk1000.c b/drivers/gpu/drm/bridge/rk1000.c index 1b362fd575c2..609cda6fffaa 100644 --- a/drivers/gpu/drm/bridge/rk1000.c +++ b/drivers/gpu/drm/bridge/rk1000.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include "../rockchip/rockchip_drm_drv.h" @@ -30,11 +30,11 @@ static const struct drm_display_mode rk1000_cvbs_mode[2] = { { DRM_MODE("720x576", DRM_MODE_TYPE_DRIVER, 27000, 720, 732, 738, 864, 0, 576, 582, 588, 625, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), - .vrefresh = 50, 0, }, + 0, }, { DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736, 742, 858, 0, 480, 486, 492, 529, 0, DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC), - .vrefresh = 60, 0, }, + 0, }, }; struct rk1000_tve { @@ -258,8 +258,8 @@ static const struct drm_connector_funcs rk1000_connector_funcs = { static void rk1000_bridge_mode_set(struct drm_bridge *bridge, - struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) + const struct drm_display_mode *mode, + const struct drm_display_mode *adjusted_mode) { struct rk1000_tve *rk1000; @@ -291,7 +291,8 @@ static void rk1000_bridge_disable(struct drm_bridge *bridge) rk1000_tve_disable(rk1000); } -static int rk1000_bridge_attach(struct drm_bridge *bridge) +static int rk1000_bridge_attach(struct drm_bridge *bridge, + enum drm_bridge_attach_flags flags) { struct rk1000_tve *rk1000 = bridge_to_rk1000(bridge); int ret;