diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig index 7a3e5a8f6439..d26b6d1d702d 100644 --- a/drivers/gpu/drm/bridge/Kconfig +++ b/drivers/gpu/drm/bridge/Kconfig @@ -81,6 +81,14 @@ config DRM_PARADE_PS8622 ---help--- Parade eDP-LVDS bridge chip 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 35f88d48ec20..1dfa0320c744 100644 --- a/drivers/gpu/drm/bridge/Makefile +++ b/drivers/gpu/drm/bridge/Makefile @@ -6,6 +6,7 @@ obj-$(CONFIG_DRM_LVDS_ENCODER) += lvds-encoder.o obj-$(CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW) += megachips-stdpxxxx-ge-b850v3-fw.o obj-$(CONFIG_DRM_NXP_PTN3460) += nxp-ptn3460.o obj-$(CONFIG_DRM_PARADE_PS8622) += parade-ps8622.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 809e1fa8cdfb..254a1e0b09ca 100644 --- a/drivers/gpu/drm/bridge/rk1000.c +++ b/drivers/gpu/drm/bridge/rk1000.c @@ -103,7 +103,7 @@ static struct rk1000_tve *connector_to_rk1000(struct drm_connector *connector) static int rk1000_tv_write_block(struct rk1000_tve *rk1000, u8 reg, const u8 *buf, u8 len) { - int i, ret; + int i, ret = 0; for (i = 0; i < len; i++) { ret = regmap_write(rk1000->tvemap, reg + i, buf[i]); @@ -117,7 +117,7 @@ static int rk1000_tv_write_block(struct rk1000_tve *rk1000, static int rk1000_control_write_block(struct rk1000_tve *rk1000, u8 reg, const u8 *buf, u8 len) { - int i, ret; + int i, ret = 0; for (i = 0; i < len; i++) { ret = regmap_write(rk1000->ctlmap, reg + i, buf[i]); @@ -245,7 +245,6 @@ const struct drm_connector_helper_funcs rk1000_connector_helper_funcs = { }; static const struct drm_connector_funcs rk1000_connector_funcs = { - .dpms = drm_atomic_helper_connector_dpms, .fill_modes = drm_helper_probe_single_connector_modes, .detect = rk1000_connector_detect, .destroy = drm_connector_cleanup, @@ -261,9 +260,9 @@ rk1000_bridge_mode_set(struct drm_bridge *bridge, { struct rk1000_tve *rk1000; + rk1000 = bridge_to_rk1000(bridge); dev_dbg(rk1000->dev, "encoder mode set:%s\n", adjusted_mode->name); - rk1000 = bridge_to_rk1000(bridge); if (adjusted_mode->vdisplay == 576) rk1000->mode = CVBS_PAL; else @@ -300,6 +299,11 @@ static int rk1000_bridge_attach(struct drm_bridge *bridge) } rk1000->encoder = bridge->encoder; + rk1000->connector.port = rk1000->dev->of_node; + + drm_connector_helper_add(&rk1000->connector, + &rk1000_connector_helper_funcs); + ret = drm_connector_init(bridge->dev, &rk1000->connector, &rk1000_connector_funcs, DRM_MODE_CONNECTOR_TV); @@ -307,13 +311,10 @@ static int rk1000_bridge_attach(struct drm_bridge *bridge) dev_err(rk1000->dev, "Failed to initialize connector\n"); return ret; } - drm_connector_helper_add(&rk1000->connector, - &rk1000_connector_helper_funcs); - ret = drm_mode_connector_attach_encoder(&rk1000->connector, - bridge->encoder); + ret = drm_connector_attach_encoder(&rk1000->connector, + bridge->encoder); if (ret) dev_err(rk1000->dev, "rk1000 attach failed ret:%d", ret); - rk1000->connector.port = rk1000->dev->of_node; return ret; } @@ -385,11 +386,7 @@ static int rk1000_probe(struct i2c_client *client, rk1000->bridge.funcs = &rk1000_bridge_funcs; rk1000->bridge.of_node = rk1000->dev->of_node; - ret = drm_bridge_add(&rk1000->bridge); - if (ret) { - dev_err(rk1000->dev, "failed to add rk1000 bridge\n"); - return ret; - } + drm_bridge_add(&rk1000->bridge); i2c_set_clientdata(client, rk1000); dev_dbg(rk1000->dev, "rk1000 probe ok\n");