imx-drm: provide common connector mode validation function
authorRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 9 Nov 2013 11:20:55 +0000 (11:20 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 24 Feb 2014 12:04:06 +0000 (12:04 +0000)
Provide a common connector mode validation function, which can be used
to limit the available modes according to other components in the
system.

Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
Reviewed-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/staging/imx-drm/imx-drm-core.c
drivers/staging/imx-drm/imx-drm.h
drivers/staging/imx-drm/imx-hdmi.c
drivers/staging/imx-drm/imx-ldb.c
drivers/staging/imx-drm/imx-tve.c
drivers/staging/imx-drm/parallel-display.c

index c5268847a54e0c0bbec5b8b9c5cbc82beb24afa8..7f14ed0400729cd8f0ccf3ad306014052d6ebb66 100644 (file)
@@ -211,6 +211,13 @@ static const struct file_operations imx_drm_driver_fops = {
        .llseek = noop_llseek,
 };
 
+int imx_drm_connector_mode_valid(struct drm_connector *connector,
+       struct drm_display_mode *mode)
+{
+       return MODE_OK;
+}
+EXPORT_SYMBOL(imx_drm_connector_mode_valid);
+
 static struct imx_drm_device *imx_drm_device;
 
 static struct imx_drm_device *__imx_drm_device(void)
index 5649f180dc44e143b77fd74d1a534e9a754269c4..4eb594ce9cff89af70bcb76d3b5d7e2cea30728a 100644 (file)
@@ -68,4 +68,7 @@ int imx_drm_encoder_get_mux_id(struct drm_encoder *encoder);
 int imx_drm_encoder_add_possible_crtcs(struct imx_drm_encoder *imx_drm_encoder,
                struct device_node *np);
 
+int imx_drm_connector_mode_valid(struct drm_connector *connector,
+       struct drm_display_mode *mode);
+
 #endif /* _IMX_DRM_H_ */
index a90f08d52ee790058f3e74f82b689b526acd55ac..4b690459f3bb033c0778ef8f639dc3e0d7ef2555 100644 (file)
@@ -1406,13 +1406,6 @@ static int imx_hdmi_connector_get_modes(struct drm_connector *connector)
        return 0;
 }
 
-static int imx_hdmi_connector_mode_valid(struct drm_connector *connector,
-                         struct drm_display_mode *mode)
-{
-
-       return MODE_OK;
-}
-
 static struct drm_encoder *imx_hdmi_connector_best_encoder(struct drm_connector
                                                           *connector)
 {
@@ -1501,7 +1494,7 @@ static struct drm_connector_funcs imx_hdmi_connector_funcs = {
 
 static struct drm_connector_helper_funcs imx_hdmi_connector_helper_funcs = {
        .get_modes = imx_hdmi_connector_get_modes,
-       .mode_valid = imx_hdmi_connector_mode_valid,
+       .mode_valid = imx_drm_connector_mode_valid,
        .best_encoder = imx_hdmi_connector_best_encoder,
 };
 
index 4aa47ae2a3cafe32941062b783a6767da38636d2..c6ec1e9e95cc89b16f3277b4f6c8a0cecf159a23 100644 (file)
@@ -120,12 +120,6 @@ static int imx_ldb_connector_get_modes(struct drm_connector *connector)
        return num_modes;
 }
 
-static int imx_ldb_connector_mode_valid(struct drm_connector *connector,
-                         struct drm_display_mode *mode)
-{
-       return 0;
-}
-
 static struct drm_encoder *imx_ldb_connector_best_encoder(
                struct drm_connector *connector)
 {
@@ -329,7 +323,7 @@ static struct drm_connector_funcs imx_ldb_connector_funcs = {
 static struct drm_connector_helper_funcs imx_ldb_connector_helper_funcs = {
        .get_modes = imx_ldb_connector_get_modes,
        .best_encoder = imx_ldb_connector_best_encoder,
-       .mode_valid = imx_ldb_connector_mode_valid,
+       .mode_valid = imx_drm_connector_mode_valid,
 };
 
 static struct drm_encoder_funcs imx_ldb_encoder_funcs = {
index 9abc7ca8b6cf78ad8dba66329352c341a7c369d7..2d4e0973a02aa16695e8040a306d16c9d25c67a8 100644 (file)
@@ -254,6 +254,11 @@ static int imx_tve_connector_mode_valid(struct drm_connector *connector,
 {
        struct imx_tve *tve = con_to_tve(connector);
        unsigned long rate;
+       int ret;
+
+       ret = imx_drm_connector_mode_valid(connector, mode);
+       if (ret != MODE_OK)
+               return ret;
 
        /* pixel clock with 2x oversampling */
        rate = clk_round_rate(tve->clk, 2000UL * mode->clock) / 2000;
index 351d61dede0024003f39c7ace312e552081c79ad..18a3e8aae22a9a75c7f452b5344b86f35a9c1d50 100644 (file)
@@ -85,12 +85,6 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector)
        return num_modes;
 }
 
-static int imx_pd_connector_mode_valid(struct drm_connector *connector,
-                         struct drm_display_mode *mode)
-{
-       return 0;
-}
-
 static struct drm_encoder *imx_pd_connector_best_encoder(
                struct drm_connector *connector)
 {
@@ -147,7 +141,7 @@ static struct drm_connector_funcs imx_pd_connector_funcs = {
 static struct drm_connector_helper_funcs imx_pd_connector_helper_funcs = {
        .get_modes = imx_pd_connector_get_modes,
        .best_encoder = imx_pd_connector_best_encoder,
-       .mode_valid = imx_pd_connector_mode_valid,
+       .mode_valid = imx_drm_connector_mode_valid,
 };
 
 static struct drm_encoder_funcs imx_pd_encoder_funcs = {