Commit 1f08fde7 authored by Dave Airlie's avatar Dave Airlie

Merge tag 'mediatek-drm-fixes-5.9' of...

Merge tag 'mediatek-drm-fixes-5.9' of https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux into drm-fixes

Mediatek DRM Fixes for Linux 5.9

1. Fix scrolling of panel
2. Remove duplicated include
3. Use CPU when fail to get cmdq event
4. Add missing put_device() call
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Chun-Kuang Hu <chunkuang.hu@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20200916231724.30571-1-chunkuang.hu@kernel.org
parents d7261b14 0680a622
...@@ -831,13 +831,19 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev, ...@@ -831,13 +831,19 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,
drm_crtc_index(&mtk_crtc->base)); drm_crtc_index(&mtk_crtc->base));
mtk_crtc->cmdq_client = NULL; mtk_crtc->cmdq_client = NULL;
} }
ret = of_property_read_u32_index(priv->mutex_node,
"mediatek,gce-events", if (mtk_crtc->cmdq_client) {
drm_crtc_index(&mtk_crtc->base), ret = of_property_read_u32_index(priv->mutex_node,
&mtk_crtc->cmdq_event); "mediatek,gce-events",
if (ret) drm_crtc_index(&mtk_crtc->base),
dev_dbg(dev, "mtk_crtc %d failed to get mediatek,gce-events property\n", &mtk_crtc->cmdq_event);
drm_crtc_index(&mtk_crtc->base)); if (ret) {
dev_dbg(dev, "mtk_crtc %d failed to get mediatek,gce-events property\n",
drm_crtc_index(&mtk_crtc->base));
cmdq_mbox_destroy(mtk_crtc->cmdq_client);
mtk_crtc->cmdq_client = NULL;
}
}
#endif #endif
return 0; return 0;
} }
...@@ -496,6 +496,7 @@ int mtk_ddp_comp_init(struct device *dev, struct device_node *node, ...@@ -496,6 +496,7 @@ int mtk_ddp_comp_init(struct device *dev, struct device_node *node,
#if IS_REACHABLE(CONFIG_MTK_CMDQ) #if IS_REACHABLE(CONFIG_MTK_CMDQ)
if (of_address_to_resource(node, 0, &res) != 0) { if (of_address_to_resource(node, 0, &res) != 0) {
dev_err(dev, "Missing reg in %s node\n", node->full_name); dev_err(dev, "Missing reg in %s node\n", node->full_name);
put_device(&larb_pdev->dev);
return -EINVAL; return -EINVAL;
} }
comp->regs_pa = res.start; comp->regs_pa = res.start;
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "mtk_drm_crtc.h" #include "mtk_drm_crtc.h"
#include "mtk_drm_ddp.h" #include "mtk_drm_ddp.h"
#include "mtk_drm_ddp.h"
#include "mtk_drm_ddp_comp.h" #include "mtk_drm_ddp_comp.h"
#include "mtk_drm_drv.h" #include "mtk_drm_drv.h"
#include "mtk_drm_gem.h" #include "mtk_drm_gem.h"
...@@ -165,7 +164,7 @@ static int mtk_drm_kms_init(struct drm_device *drm) ...@@ -165,7 +164,7 @@ static int mtk_drm_kms_init(struct drm_device *drm)
ret = drmm_mode_config_init(drm); ret = drmm_mode_config_init(drm);
if (ret) if (ret)
return ret; goto put_mutex_dev;
drm->mode_config.min_width = 64; drm->mode_config.min_width = 64;
drm->mode_config.min_height = 64; drm->mode_config.min_height = 64;
...@@ -182,7 +181,7 @@ static int mtk_drm_kms_init(struct drm_device *drm) ...@@ -182,7 +181,7 @@ static int mtk_drm_kms_init(struct drm_device *drm)
ret = component_bind_all(drm->dev, drm); ret = component_bind_all(drm->dev, drm);
if (ret) if (ret)
return ret; goto put_mutex_dev;
/* /*
* We currently support two fixed data streams, each optional, * We currently support two fixed data streams, each optional,
...@@ -229,7 +228,7 @@ static int mtk_drm_kms_init(struct drm_device *drm) ...@@ -229,7 +228,7 @@ static int mtk_drm_kms_init(struct drm_device *drm)
} }
if (!dma_dev->dma_parms) { if (!dma_dev->dma_parms) {
ret = -ENOMEM; ret = -ENOMEM;
goto err_component_unbind; goto put_dma_dev;
} }
ret = dma_set_max_seg_size(dma_dev, (unsigned int)DMA_BIT_MASK(32)); ret = dma_set_max_seg_size(dma_dev, (unsigned int)DMA_BIT_MASK(32));
...@@ -256,9 +255,12 @@ static int mtk_drm_kms_init(struct drm_device *drm) ...@@ -256,9 +255,12 @@ static int mtk_drm_kms_init(struct drm_device *drm)
err_unset_dma_parms: err_unset_dma_parms:
if (private->dma_parms_allocated) if (private->dma_parms_allocated)
dma_dev->dma_parms = NULL; dma_dev->dma_parms = NULL;
put_dma_dev:
put_device(private->dma_dev);
err_component_unbind: err_component_unbind:
component_unbind_all(drm->dev, drm); component_unbind_all(drm->dev, drm);
put_mutex_dev:
put_device(private->mutex_dev);
return ret; return ret;
} }
...@@ -544,8 +546,13 @@ static int mtk_drm_probe(struct platform_device *pdev) ...@@ -544,8 +546,13 @@ static int mtk_drm_probe(struct platform_device *pdev)
pm_runtime_disable(dev); pm_runtime_disable(dev);
err_node: err_node:
of_node_put(private->mutex_node); of_node_put(private->mutex_node);
for (i = 0; i < DDP_COMPONENT_ID_MAX; i++) for (i = 0; i < DDP_COMPONENT_ID_MAX; i++) {
of_node_put(private->comp_node[i]); of_node_put(private->comp_node[i]);
if (private->ddp_comp[i]) {
put_device(private->ddp_comp[i]->larb_dev);
private->ddp_comp[i] = NULL;
}
}
return ret; return ret;
} }
......
...@@ -466,14 +466,13 @@ static void mtk_dsi_config_vdo_timing(struct mtk_dsi *dsi) ...@@ -466,14 +466,13 @@ static void mtk_dsi_config_vdo_timing(struct mtk_dsi *dsi)
horizontal_sync_active_byte = (vm->hsync_len * dsi_tmp_buf_bpp - 10); horizontal_sync_active_byte = (vm->hsync_len * dsi_tmp_buf_bpp - 10);
if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE) if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE)
horizontal_backporch_byte = horizontal_backporch_byte = vm->hback_porch * dsi_tmp_buf_bpp;
(vm->hback_porch * dsi_tmp_buf_bpp - 10);
else else
horizontal_backporch_byte = ((vm->hback_porch + vm->hsync_len) * horizontal_backporch_byte = (vm->hback_porch + vm->hsync_len) *
dsi_tmp_buf_bpp - 10); dsi_tmp_buf_bpp;
data_phy_cycles = timing->lpx + timing->da_hs_prepare + data_phy_cycles = timing->lpx + timing->da_hs_prepare +
timing->da_hs_zero + timing->da_hs_exit + 3; timing->da_hs_zero + timing->da_hs_exit;
if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_BURST) { if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO_BURST) {
if ((vm->hfront_porch + vm->hback_porch) * dsi_tmp_buf_bpp > if ((vm->hfront_porch + vm->hback_porch) * dsi_tmp_buf_bpp >
......
...@@ -1507,25 +1507,30 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi, ...@@ -1507,25 +1507,30 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
dev_err(dev, dev_err(dev,
"Failed to get system configuration registers: %d\n", "Failed to get system configuration registers: %d\n",
ret); ret);
return ret; goto put_device;
} }
hdmi->sys_regmap = regmap; hdmi->sys_regmap = regmap;
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
hdmi->regs = devm_ioremap_resource(dev, mem); hdmi->regs = devm_ioremap_resource(dev, mem);
if (IS_ERR(hdmi->regs)) if (IS_ERR(hdmi->regs)) {
return PTR_ERR(hdmi->regs); ret = PTR_ERR(hdmi->regs);
goto put_device;
}
remote = of_graph_get_remote_node(np, 1, 0); remote = of_graph_get_remote_node(np, 1, 0);
if (!remote) if (!remote) {
return -EINVAL; ret = -EINVAL;
goto put_device;
}
if (!of_device_is_compatible(remote, "hdmi-connector")) { if (!of_device_is_compatible(remote, "hdmi-connector")) {
hdmi->next_bridge = of_drm_find_bridge(remote); hdmi->next_bridge = of_drm_find_bridge(remote);
if (!hdmi->next_bridge) { if (!hdmi->next_bridge) {
dev_err(dev, "Waiting for external bridge\n"); dev_err(dev, "Waiting for external bridge\n");
of_node_put(remote); of_node_put(remote);
return -EPROBE_DEFER; ret = -EPROBE_DEFER;
goto put_device;
} }
} }
...@@ -1534,7 +1539,8 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi, ...@@ -1534,7 +1539,8 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
dev_err(dev, "Failed to find ddc-i2c-bus node in %pOF\n", dev_err(dev, "Failed to find ddc-i2c-bus node in %pOF\n",
remote); remote);
of_node_put(remote); of_node_put(remote);
return -EINVAL; ret = -EINVAL;
goto put_device;
} }
of_node_put(remote); of_node_put(remote);
...@@ -1542,10 +1548,14 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi, ...@@ -1542,10 +1548,14 @@ static int mtk_hdmi_dt_parse_pdata(struct mtk_hdmi *hdmi,
of_node_put(i2c_np); of_node_put(i2c_np);
if (!hdmi->ddc_adpt) { if (!hdmi->ddc_adpt) {
dev_err(dev, "Failed to get ddc i2c adapter by node\n"); dev_err(dev, "Failed to get ddc i2c adapter by node\n");
return -EINVAL; ret = -EINVAL;
goto put_device;
} }
return 0; return 0;
put_device:
put_device(hdmi->cec_dev);
return ret;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment