Commit dada163c authored by Dave Airlie's avatar Dave Airlie

Merge tag 'drm-misc-fixes-2019-02-07' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes

drm-misc-fixes for v5.0-rc6:
- Fixes to omap/dsi encoder.
- Clock fix for sun4i.
- Licensing header fix for rockchip.
- Fix division by zero in the mode when trying to set a mode on
  i915 with GVT-g enabled.
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/84462cef-609f-e2af-084a-f9fe2b05c53e@linux.intel.com
parents 151e3d6a 6297388e
...@@ -758,7 +758,7 @@ int drm_mode_hsync(const struct drm_display_mode *mode) ...@@ -758,7 +758,7 @@ int drm_mode_hsync(const struct drm_display_mode *mode)
if (mode->hsync) if (mode->hsync)
return mode->hsync; return mode->hsync;
if (mode->htotal < 0) if (mode->htotal <= 0)
return 0; return 0;
calc_val = (mode->clock * 1000) / mode->htotal; /* hsync in Hz */ calc_val = (mode->clock * 1000) / mode->htotal; /* hsync in Hz */
......
...@@ -1406,7 +1406,7 @@ static void dsi_pll_disable(struct dss_pll *pll) ...@@ -1406,7 +1406,7 @@ static void dsi_pll_disable(struct dss_pll *pll)
static int dsi_dump_dsi_clocks(struct seq_file *s, void *p) static int dsi_dump_dsi_clocks(struct seq_file *s, void *p)
{ {
struct dsi_data *dsi = p; struct dsi_data *dsi = s->private;
struct dss_pll_clock_info *cinfo = &dsi->pll.cinfo; struct dss_pll_clock_info *cinfo = &dsi->pll.cinfo;
enum dss_clk_source dispc_clk_src, dsi_clk_src; enum dss_clk_source dispc_clk_src, dsi_clk_src;
int dsi_module = dsi->module_id; int dsi_module = dsi->module_id;
...@@ -1467,7 +1467,7 @@ static int dsi_dump_dsi_clocks(struct seq_file *s, void *p) ...@@ -1467,7 +1467,7 @@ static int dsi_dump_dsi_clocks(struct seq_file *s, void *p)
#ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS #ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
static int dsi_dump_dsi_irqs(struct seq_file *s, void *p) static int dsi_dump_dsi_irqs(struct seq_file *s, void *p)
{ {
struct dsi_data *dsi = p; struct dsi_data *dsi = s->private;
unsigned long flags; unsigned long flags;
struct dsi_irq_stats stats; struct dsi_irq_stats stats;
...@@ -1558,7 +1558,7 @@ static int dsi_dump_dsi_irqs(struct seq_file *s, void *p) ...@@ -1558,7 +1558,7 @@ static int dsi_dump_dsi_irqs(struct seq_file *s, void *p)
static int dsi_dump_dsi_regs(struct seq_file *s, void *p) static int dsi_dump_dsi_regs(struct seq_file *s, void *p)
{ {
struct dsi_data *dsi = p; struct dsi_data *dsi = s->private;
if (dsi_runtime_get(dsi)) if (dsi_runtime_get(dsi))
return 0; return 0;
...@@ -4751,6 +4751,17 @@ static int dsi_set_config(struct omap_dss_device *dssdev, ...@@ -4751,6 +4751,17 @@ static int dsi_set_config(struct omap_dss_device *dssdev,
dsi->vm.flags |= DISPLAY_FLAGS_HSYNC_HIGH; dsi->vm.flags |= DISPLAY_FLAGS_HSYNC_HIGH;
dsi->vm.flags &= ~DISPLAY_FLAGS_VSYNC_LOW; dsi->vm.flags &= ~DISPLAY_FLAGS_VSYNC_LOW;
dsi->vm.flags |= DISPLAY_FLAGS_VSYNC_HIGH; dsi->vm.flags |= DISPLAY_FLAGS_VSYNC_HIGH;
/*
* HACK: These flags should be handled through the omap_dss_device bus
* flags, but this will only be possible when the DSI encoder will be
* converted to the omapdrm-managed encoder model.
*/
dsi->vm.flags &= ~DISPLAY_FLAGS_PIXDATA_NEGEDGE;
dsi->vm.flags |= DISPLAY_FLAGS_PIXDATA_POSEDGE;
dsi->vm.flags &= ~DISPLAY_FLAGS_DE_LOW;
dsi->vm.flags |= DISPLAY_FLAGS_DE_HIGH;
dsi->vm.flags &= ~DISPLAY_FLAGS_SYNC_POSEDGE;
dsi->vm.flags |= DISPLAY_FLAGS_SYNC_NEGEDGE;
dss_mgr_set_timings(&dsi->output, &dsi->vm); dss_mgr_set_timings(&dsi->output, &dsi->vm);
...@@ -5083,15 +5094,15 @@ static int dsi_bind(struct device *dev, struct device *master, void *data) ...@@ -5083,15 +5094,15 @@ static int dsi_bind(struct device *dev, struct device *master, void *data)
snprintf(name, sizeof(name), "dsi%u_regs", dsi->module_id + 1); snprintf(name, sizeof(name), "dsi%u_regs", dsi->module_id + 1);
dsi->debugfs.regs = dss_debugfs_create_file(dss, name, dsi->debugfs.regs = dss_debugfs_create_file(dss, name,
dsi_dump_dsi_regs, &dsi); dsi_dump_dsi_regs, dsi);
#ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS #ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
snprintf(name, sizeof(name), "dsi%u_irqs", dsi->module_id + 1); snprintf(name, sizeof(name), "dsi%u_irqs", dsi->module_id + 1);
dsi->debugfs.irqs = dss_debugfs_create_file(dss, name, dsi->debugfs.irqs = dss_debugfs_create_file(dss, name,
dsi_dump_dsi_irqs, &dsi); dsi_dump_dsi_irqs, dsi);
#endif #endif
snprintf(name, sizeof(name), "dsi%u_clks", dsi->module_id + 1); snprintf(name, sizeof(name), "dsi%u_clks", dsi->module_id + 1);
dsi->debugfs.clks = dss_debugfs_create_file(dss, name, dsi->debugfs.clks = dss_debugfs_create_file(dss, name,
dsi_dump_dsi_clocks, &dsi); dsi_dump_dsi_clocks, dsi);
return 0; return 0;
} }
...@@ -5104,8 +5115,6 @@ static void dsi_unbind(struct device *dev, struct device *master, void *data) ...@@ -5104,8 +5115,6 @@ static void dsi_unbind(struct device *dev, struct device *master, void *data)
dss_debugfs_remove_file(dsi->debugfs.irqs); dss_debugfs_remove_file(dsi->debugfs.irqs);
dss_debugfs_remove_file(dsi->debugfs.regs); dss_debugfs_remove_file(dsi->debugfs.regs);
of_platform_depopulate(dev);
WARN_ON(dsi->scp_clk_refcount > 0); WARN_ON(dsi->scp_clk_refcount > 0);
dss_pll_unregister(&dsi->pll); dss_pll_unregister(&dsi->pll);
...@@ -5457,6 +5466,8 @@ static int dsi_remove(struct platform_device *pdev) ...@@ -5457,6 +5466,8 @@ static int dsi_remove(struct platform_device *pdev)
dsi_uninit_output(dsi); dsi_uninit_output(dsi);
of_platform_depopulate(&pdev->dev);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
if (dsi->vdds_dsi_reg != NULL && dsi->vdds_dsi_enabled) { if (dsi->vdds_dsi_reg != NULL && dsi->vdds_dsi_enabled) {
......
//SPDX-License-Identifier: GPL-2.0+ // SPDX-License-Identifier: GPL-2.0
/* /*
* Copyright (C) Fuzhou Rockchip Electronics Co.Ltd * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd
* Author: * Author:
* Sandy Huang <hjc@rock-chips.com> * Sandy Huang <hjc@rock-chips.com>
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/ */
#include <drm/drmP.h> #include <drm/drmP.h>
......
//SPDX-License-Identifier: GPL-2.0+ /* SPDX-License-Identifier: GPL-2.0 */
/* /*
* Copyright (C) Fuzhou Rockchip Electronics Co.Ltd * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd
* Author: * Author:
* Sandy Huang <hjc@rock-chips.com> * Sandy Huang <hjc@rock-chips.com>
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/ */
#ifdef CONFIG_ROCKCHIP_RGB #ifdef CONFIG_ROCKCHIP_RGB
......
...@@ -761,6 +761,7 @@ static int sun4i_tcon_init_clocks(struct device *dev, ...@@ -761,6 +761,7 @@ static int sun4i_tcon_init_clocks(struct device *dev,
return PTR_ERR(tcon->sclk0); return PTR_ERR(tcon->sclk0);
} }
} }
clk_prepare_enable(tcon->sclk0);
if (tcon->quirks->has_channel_1) { if (tcon->quirks->has_channel_1) {
tcon->sclk1 = devm_clk_get(dev, "tcon-ch1"); tcon->sclk1 = devm_clk_get(dev, "tcon-ch1");
...@@ -775,6 +776,7 @@ static int sun4i_tcon_init_clocks(struct device *dev, ...@@ -775,6 +776,7 @@ static int sun4i_tcon_init_clocks(struct device *dev,
static void sun4i_tcon_free_clocks(struct sun4i_tcon *tcon) static void sun4i_tcon_free_clocks(struct sun4i_tcon *tcon)
{ {
clk_disable_unprepare(tcon->sclk0);
clk_disable_unprepare(tcon->clk); clk_disable_unprepare(tcon->clk);
} }
......
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