Commit 20806588 authored by Dave Airlie's avatar Dave Airlie

Merge tag 'exynos-drm-fixes-for-v4.13-rc3' of...

Merge tag 'exynos-drm-fixes-for-v4.13-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos into drm-fixes

Summary:
- fix probing fail issue of dsi driver without bridge device.
- fix disable sequence of hdmi driver.
- trivial cleanups.

* tag 'exynos-drm-fixes-for-v4.13-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos:
  drm: exynos: mark pm functions as __maybe_unused
  drm/exynos: select CEC_CORE if CEC_NOTIFIER
  drm/exynos/hdmi: fix disable sequence
  drm/exynos: mic: add a bridge at probe
  drm/exynos/dsi: Remove error handling for bridge_node DT parsing
  drm/exynos: dsi: do not try to find bridge
  drm: exynos: hdmi: make of_device_ids const.
  drm: exynos: constify mixer_match_types and *_mxr_drv_data.
  exynos_drm: Clean up duplicated assignment in exynos_drm_driver
parents d5bcd111 7e175100
...@@ -75,6 +75,7 @@ config DRM_EXYNOS_DP ...@@ -75,6 +75,7 @@ config DRM_EXYNOS_DP
config DRM_EXYNOS_HDMI config DRM_EXYNOS_HDMI
bool "HDMI" bool "HDMI"
depends on DRM_EXYNOS_MIXER || DRM_EXYNOS5433_DECON depends on DRM_EXYNOS_MIXER || DRM_EXYNOS5433_DECON
select CEC_CORE if CEC_NOTIFIER
help help
Choose this option if you want to use Exynos HDMI for DRM. Choose this option if you want to use Exynos HDMI for DRM.
......
...@@ -453,7 +453,6 @@ static int exynos_drm_platform_probe(struct platform_device *pdev) ...@@ -453,7 +453,6 @@ static int exynos_drm_platform_probe(struct platform_device *pdev)
struct component_match *match; struct component_match *match;
pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
exynos_drm_driver.num_ioctls = ARRAY_SIZE(exynos_ioctls);
match = exynos_drm_match_add(&pdev->dev); match = exynos_drm_match_add(&pdev->dev);
if (IS_ERR(match)) if (IS_ERR(match))
......
...@@ -1651,8 +1651,6 @@ static int exynos_dsi_parse_dt(struct exynos_dsi *dsi) ...@@ -1651,8 +1651,6 @@ static int exynos_dsi_parse_dt(struct exynos_dsi *dsi)
return ret; return ret;
dsi->bridge_node = of_graph_get_remote_node(node, DSI_PORT_IN, 0); dsi->bridge_node = of_graph_get_remote_node(node, DSI_PORT_IN, 0);
if (!dsi->bridge_node)
return -EINVAL;
return 0; return 0;
} }
...@@ -1687,9 +1685,11 @@ static int exynos_dsi_bind(struct device *dev, struct device *master, ...@@ -1687,9 +1685,11 @@ static int exynos_dsi_bind(struct device *dev, struct device *master,
return ret; return ret;
} }
if (dsi->bridge_node) {
bridge = of_drm_find_bridge(dsi->bridge_node); bridge = of_drm_find_bridge(dsi->bridge_node);
if (bridge) if (bridge)
drm_bridge_attach(encoder, bridge, NULL); drm_bridge_attach(encoder, bridge, NULL);
}
return mipi_dsi_host_register(&dsi->dsi_host); return mipi_dsi_host_register(&dsi->dsi_host);
} }
......
...@@ -340,16 +340,10 @@ static int exynos_mic_bind(struct device *dev, struct device *master, ...@@ -340,16 +340,10 @@ static int exynos_mic_bind(struct device *dev, struct device *master,
void *data) void *data)
{ {
struct exynos_mic *mic = dev_get_drvdata(dev); struct exynos_mic *mic = dev_get_drvdata(dev);
int ret;
mic->bridge.funcs = &mic_bridge_funcs;
mic->bridge.of_node = dev->of_node;
mic->bridge.driver_private = mic; mic->bridge.driver_private = mic;
ret = drm_bridge_add(&mic->bridge);
if (ret)
DRM_ERROR("mic: Failed to add MIC to the global bridge list\n");
return ret; return 0;
} }
static void exynos_mic_unbind(struct device *dev, struct device *master, static void exynos_mic_unbind(struct device *dev, struct device *master,
...@@ -365,8 +359,6 @@ static void exynos_mic_unbind(struct device *dev, struct device *master, ...@@ -365,8 +359,6 @@ static void exynos_mic_unbind(struct device *dev, struct device *master,
already_disabled: already_disabled:
mutex_unlock(&mic_mutex); mutex_unlock(&mic_mutex);
drm_bridge_remove(&mic->bridge);
} }
static const struct component_ops exynos_mic_component_ops = { static const struct component_ops exynos_mic_component_ops = {
...@@ -461,6 +453,15 @@ static int exynos_mic_probe(struct platform_device *pdev) ...@@ -461,6 +453,15 @@ static int exynos_mic_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, mic); platform_set_drvdata(pdev, mic);
mic->bridge.funcs = &mic_bridge_funcs;
mic->bridge.of_node = dev->of_node;
ret = drm_bridge_add(&mic->bridge);
if (ret) {
DRM_ERROR("mic: Failed to add MIC to the global bridge list\n");
return ret;
}
pm_runtime_enable(dev); pm_runtime_enable(dev);
ret = component_add(dev, &exynos_mic_component_ops); ret = component_add(dev, &exynos_mic_component_ops);
...@@ -479,8 +480,13 @@ static int exynos_mic_probe(struct platform_device *pdev) ...@@ -479,8 +480,13 @@ static int exynos_mic_probe(struct platform_device *pdev)
static int exynos_mic_remove(struct platform_device *pdev) static int exynos_mic_remove(struct platform_device *pdev)
{ {
struct exynos_mic *mic = platform_get_drvdata(pdev);
component_del(&pdev->dev, &exynos_mic_component_ops); component_del(&pdev->dev, &exynos_mic_component_ops);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
drm_bridge_remove(&mic->bridge);
return 0; return 0;
} }
......
...@@ -1501,8 +1501,6 @@ static void hdmi_disable(struct drm_encoder *encoder) ...@@ -1501,8 +1501,6 @@ static void hdmi_disable(struct drm_encoder *encoder)
*/ */
cancel_delayed_work(&hdata->hotplug_work); cancel_delayed_work(&hdata->hotplug_work);
cec_notifier_set_phys_addr(hdata->notifier, CEC_PHYS_ADDR_INVALID); cec_notifier_set_phys_addr(hdata->notifier, CEC_PHYS_ADDR_INVALID);
hdmiphy_disable(hdata);
} }
static const struct drm_encoder_helper_funcs exynos_hdmi_encoder_helper_funcs = { static const struct drm_encoder_helper_funcs exynos_hdmi_encoder_helper_funcs = {
...@@ -1676,7 +1674,7 @@ static int hdmi_resources_init(struct hdmi_context *hdata) ...@@ -1676,7 +1674,7 @@ static int hdmi_resources_init(struct hdmi_context *hdata)
return hdmi_bridge_init(hdata); return hdmi_bridge_init(hdata);
} }
static struct of_device_id hdmi_match_types[] = { static const struct of_device_id hdmi_match_types[] = {
{ {
.compatible = "samsung,exynos4210-hdmi", .compatible = "samsung,exynos4210-hdmi",
.data = &exynos4210_hdmi_driver_data, .data = &exynos4210_hdmi_driver_data,
...@@ -1934,8 +1932,7 @@ static int hdmi_remove(struct platform_device *pdev) ...@@ -1934,8 +1932,7 @@ static int hdmi_remove(struct platform_device *pdev)
return 0; return 0;
} }
#ifdef CONFIG_PM static int __maybe_unused exynos_hdmi_suspend(struct device *dev)
static int exynos_hdmi_suspend(struct device *dev)
{ {
struct hdmi_context *hdata = dev_get_drvdata(dev); struct hdmi_context *hdata = dev_get_drvdata(dev);
...@@ -1944,7 +1941,7 @@ static int exynos_hdmi_suspend(struct device *dev) ...@@ -1944,7 +1941,7 @@ static int exynos_hdmi_suspend(struct device *dev)
return 0; return 0;
} }
static int exynos_hdmi_resume(struct device *dev) static int __maybe_unused exynos_hdmi_resume(struct device *dev)
{ {
struct hdmi_context *hdata = dev_get_drvdata(dev); struct hdmi_context *hdata = dev_get_drvdata(dev);
int ret; int ret;
...@@ -1955,7 +1952,6 @@ static int exynos_hdmi_resume(struct device *dev) ...@@ -1955,7 +1952,6 @@ static int exynos_hdmi_resume(struct device *dev)
return 0; return 0;
} }
#endif
static const struct dev_pm_ops exynos_hdmi_pm_ops = { static const struct dev_pm_ops exynos_hdmi_pm_ops = {
SET_RUNTIME_PM_OPS(exynos_hdmi_suspend, exynos_hdmi_resume, NULL) SET_RUNTIME_PM_OPS(exynos_hdmi_suspend, exynos_hdmi_resume, NULL)
......
...@@ -1094,28 +1094,28 @@ static const struct exynos_drm_crtc_ops mixer_crtc_ops = { ...@@ -1094,28 +1094,28 @@ static const struct exynos_drm_crtc_ops mixer_crtc_ops = {
.atomic_check = mixer_atomic_check, .atomic_check = mixer_atomic_check,
}; };
static struct mixer_drv_data exynos5420_mxr_drv_data = { static const struct mixer_drv_data exynos5420_mxr_drv_data = {
.version = MXR_VER_128_0_0_184, .version = MXR_VER_128_0_0_184,
.is_vp_enabled = 0, .is_vp_enabled = 0,
}; };
static struct mixer_drv_data exynos5250_mxr_drv_data = { static const struct mixer_drv_data exynos5250_mxr_drv_data = {
.version = MXR_VER_16_0_33_0, .version = MXR_VER_16_0_33_0,
.is_vp_enabled = 0, .is_vp_enabled = 0,
}; };
static struct mixer_drv_data exynos4212_mxr_drv_data = { static const struct mixer_drv_data exynos4212_mxr_drv_data = {
.version = MXR_VER_0_0_0_16, .version = MXR_VER_0_0_0_16,
.is_vp_enabled = 1, .is_vp_enabled = 1,
}; };
static struct mixer_drv_data exynos4210_mxr_drv_data = { static const struct mixer_drv_data exynos4210_mxr_drv_data = {
.version = MXR_VER_0_0_0_16, .version = MXR_VER_0_0_0_16,
.is_vp_enabled = 1, .is_vp_enabled = 1,
.has_sclk = 1, .has_sclk = 1,
}; };
static struct of_device_id mixer_match_types[] = { static const struct of_device_id mixer_match_types[] = {
{ {
.compatible = "samsung,exynos4210-mixer", .compatible = "samsung,exynos4210-mixer",
.data = &exynos4210_mxr_drv_data, .data = &exynos4210_mxr_drv_data,
......
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