aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorJose Abreu <Jose.Abreu@synopsys.com>2017-05-25 10:19:19 -0400
committerArchit Taneja <architt@codeaurora.org>2017-06-05 02:39:50 -0400
commitb0febde779fd5d2e3e6f83843a828726117fe0a7 (patch)
treed25324e33b793419ab6aac900c8af40e0222cc91 /drivers/gpu
parentf3ca01d3d7793f76a03ff17945e1b1f2138be9fb (diff)
drm/bridge/synopsys: dw-hdmi: Use bridge->mode_valid() callback
Now that we have a callback to check if bridge supports a given mode we can use it in Synopsys Designware HDMI bridge so that we restrict the number of probbed modes to the ones we can actually display. Also, there is no need to use mode_fixup() callback as mode_valid() will handle the mode validation. NOTE: I also had to change the pdata declaration of mode_valid custom callback so that the passed modes are const. I also changed in the platforms I found. Not even compiled it though. Signed-off-by: Jose Abreu <joabreu@synopsys.com> Acked-by: Neil Armstrong <narmstrong@baylibre.com> Acked-by: Philipp Zabel <p.zabel@pengutronix.de> Cc: Carlos Palminha <palminha@synopsys.com> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Cc: Archit Taneja <architt@codeaurora.org> Cc: Andrzej Hajda <a.hajda@samsung.com> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com> Cc: David Airlie <airlied@linux.ie> Cc: Philipp Zabel <p.zabel@pengutronix.de> Cc: Carlo Caione <carlo@caione.org> Cc: Kevin Hilman <khilman@baylibre.com> Cc: Mark Yao <mark.yao@rock-chips.com> Cc: Heiko Stuebner <heiko@sntech.de> Signed-off-by: Archit Taneja <architt@codeaurora.org> Link: http://patchwork.freedesktop.org/patch/msgid/3d8d449e4d13d2535fa292c75f5fa931de4a4fa8.1495720737.git.joabreu@synopsys.com
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/bridge/synopsys/dw-hdmi.c41
-rw-r--r--drivers/gpu/drm/imx/dw_hdmi-imx.c10
-rw-r--r--drivers/gpu/drm/meson/meson_dw_hdmi.c5
-rw-r--r--drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c2
4 files changed, 23 insertions, 35 deletions
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index 8737de8c1c52..ead11242c4b9 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -1907,24 +1907,6 @@ static int dw_hdmi_connector_get_modes(struct drm_connector *connector)
1907 return ret; 1907 return ret;
1908} 1908}
1909 1909
1910static enum drm_mode_status
1911dw_hdmi_connector_mode_valid(struct drm_connector *connector,
1912 struct drm_display_mode *mode)
1913{
1914 struct dw_hdmi *hdmi = container_of(connector,
1915 struct dw_hdmi, connector);
1916 enum drm_mode_status mode_status = MODE_OK;
1917
1918 /* We don't support double-clocked modes */
1919 if (mode->flags & DRM_MODE_FLAG_DBLCLK)
1920 return MODE_BAD;
1921
1922 if (hdmi->plat_data->mode_valid)
1923 mode_status = hdmi->plat_data->mode_valid(connector, mode);
1924
1925 return mode_status;
1926}
1927
1928static void dw_hdmi_connector_force(struct drm_connector *connector) 1910static void dw_hdmi_connector_force(struct drm_connector *connector)
1929{ 1911{
1930 struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi, 1912 struct dw_hdmi *hdmi = container_of(connector, struct dw_hdmi,
@@ -1950,7 +1932,6 @@ static const struct drm_connector_funcs dw_hdmi_connector_funcs = {
1950 1932
1951static const struct drm_connector_helper_funcs dw_hdmi_connector_helper_funcs = { 1933static const struct drm_connector_helper_funcs dw_hdmi_connector_helper_funcs = {
1952 .get_modes = dw_hdmi_connector_get_modes, 1934 .get_modes = dw_hdmi_connector_get_modes,
1953 .mode_valid = dw_hdmi_connector_mode_valid,
1954 .best_encoder = drm_atomic_helper_best_encoder, 1935 .best_encoder = drm_atomic_helper_best_encoder,
1955}; 1936};
1956 1937
@@ -1973,18 +1954,22 @@ static int dw_hdmi_bridge_attach(struct drm_bridge *bridge)
1973 return 0; 1954 return 0;
1974} 1955}
1975 1956
1976static bool dw_hdmi_bridge_mode_fixup(struct drm_bridge *bridge, 1957static enum drm_mode_status
1977 const struct drm_display_mode *orig_mode, 1958dw_hdmi_bridge_mode_valid(struct drm_bridge *bridge,
1978 struct drm_display_mode *mode) 1959 const struct drm_display_mode *mode)
1979{ 1960{
1980 struct dw_hdmi *hdmi = bridge->driver_private; 1961 struct dw_hdmi *hdmi = bridge->driver_private;
1981 struct drm_connector *connector = &hdmi->connector; 1962 struct drm_connector *connector = &hdmi->connector;
1982 enum drm_mode_status status; 1963 enum drm_mode_status mode_status = MODE_OK;
1983 1964
1984 status = dw_hdmi_connector_mode_valid(connector, mode); 1965 /* We don't support double-clocked modes */
1985 if (status != MODE_OK) 1966 if (mode->flags & DRM_MODE_FLAG_DBLCLK)
1986 return false; 1967 return MODE_BAD;
1987 return true; 1968
1969 if (hdmi->plat_data->mode_valid)
1970 mode_status = hdmi->plat_data->mode_valid(connector, mode);
1971
1972 return mode_status;
1988} 1973}
1989 1974
1990static void dw_hdmi_bridge_mode_set(struct drm_bridge *bridge, 1975static void dw_hdmi_bridge_mode_set(struct drm_bridge *bridge,
@@ -2028,7 +2013,7 @@ static const struct drm_bridge_funcs dw_hdmi_bridge_funcs = {
2028 .enable = dw_hdmi_bridge_enable, 2013 .enable = dw_hdmi_bridge_enable,
2029 .disable = dw_hdmi_bridge_disable, 2014 .disable = dw_hdmi_bridge_disable,
2030 .mode_set = dw_hdmi_bridge_mode_set, 2015 .mode_set = dw_hdmi_bridge_mode_set,
2031 .mode_fixup = dw_hdmi_bridge_mode_fixup, 2016 .mode_valid = dw_hdmi_bridge_mode_valid,
2032}; 2017};
2033 2018
2034static irqreturn_t dw_hdmi_i2c_irq(struct dw_hdmi *hdmi) 2019static irqreturn_t dw_hdmi_i2c_irq(struct dw_hdmi *hdmi)
diff --git a/drivers/gpu/drm/imx/dw_hdmi-imx.c b/drivers/gpu/drm/imx/dw_hdmi-imx.c
index f039641070ac..b62763aa8706 100644
--- a/drivers/gpu/drm/imx/dw_hdmi-imx.c
+++ b/drivers/gpu/drm/imx/dw_hdmi-imx.c
@@ -147,8 +147,9 @@ static const struct drm_encoder_funcs dw_hdmi_imx_encoder_funcs = {
147 .destroy = drm_encoder_cleanup, 147 .destroy = drm_encoder_cleanup,
148}; 148};
149 149
150static enum drm_mode_status imx6q_hdmi_mode_valid(struct drm_connector *con, 150static enum drm_mode_status
151 struct drm_display_mode *mode) 151imx6q_hdmi_mode_valid(struct drm_connector *con,
152 const struct drm_display_mode *mode)
152{ 153{
153 if (mode->clock < 13500) 154 if (mode->clock < 13500)
154 return MODE_CLOCK_LOW; 155 return MODE_CLOCK_LOW;
@@ -159,8 +160,9 @@ static enum drm_mode_status imx6q_hdmi_mode_valid(struct drm_connector *con,
159 return MODE_OK; 160 return MODE_OK;
160} 161}
161 162
162static enum drm_mode_status imx6dl_hdmi_mode_valid(struct drm_connector *con, 163static enum drm_mode_status
163 struct drm_display_mode *mode) 164imx6dl_hdmi_mode_valid(struct drm_connector *con,
165 const struct drm_display_mode *mode)
164{ 166{
165 if (mode->clock < 13500) 167 if (mode->clock < 13500)
166 return MODE_CLOCK_LOW; 168 return MODE_CLOCK_LOW;
diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c
index 7b86eb7776b3..cef414466f9f 100644
--- a/drivers/gpu/drm/meson/meson_dw_hdmi.c
+++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c
@@ -536,8 +536,9 @@ static irqreturn_t dw_hdmi_top_thread_irq(int irq, void *dev_id)
536} 536}
537 537
538/* TOFIX Enable support for non-vic modes */ 538/* TOFIX Enable support for non-vic modes */
539static enum drm_mode_status dw_hdmi_mode_valid(struct drm_connector *connector, 539static enum drm_mode_status
540 struct drm_display_mode *mode) 540dw_hdmi_mode_valid(struct drm_connector *connector,
541 const struct drm_display_mode *mode)
541{ 542{
542 unsigned int vclk_freq; 543 unsigned int vclk_freq;
543 unsigned int venc_freq; 544 unsigned int venc_freq;
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index 63dab6f1b191..f8208489724e 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -155,7 +155,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
155 155
156static enum drm_mode_status 156static enum drm_mode_status
157dw_hdmi_rockchip_mode_valid(struct drm_connector *connector, 157dw_hdmi_rockchip_mode_valid(struct drm_connector *connector,
158 struct drm_display_mode *mode) 158 const struct drm_display_mode *mode)
159{ 159{
160 const struct dw_hdmi_mpll_config *mpll_cfg = rockchip_mpll_cfg; 160 const struct dw_hdmi_mpll_config *mpll_cfg = rockchip_mpll_cfg;
161 int pclk = mode->clock * 1000; 161 int pclk = mode->clock * 1000;