gfx: drv: tc35876x: Fix physical display size information
authorPauli Nieminen <pauli.nieminen@linux.intel.com>
Tue, 15 Nov 2011 12:48:39 +0000 (14:48 +0200)
committerMarkus Lehtonen <markus.lehtonen@linux.intel.com>
Tue, 3 Jul 2012 09:28:37 +0000 (12:28 +0300)
The physical size of display is hardcoded in display driver. The
hardcoded value for lvds bridge is returned from tmd panel which is
phone size display.

Userspace reading the incorrect display size would calculate wrong dpi
for display which would results to incorrectly sized UI.

To provide correct information for lvds bridge driver needs separate
panel info function for lvds bridge.

Signed-off-by: Pauli Nieminen <pauli.nieminen@linux.intel.com>
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
drivers/staging/mrst/drv/tc35876x-dsi-lvds.c
drivers/staging/mrst/drv/tc35876x-dsi-lvds.h
drivers/staging/mrst/drv/tmd_vid.c

index 9f8fd56..8cd386d 100644 (file)
@@ -457,6 +457,22 @@ void tc35876x_bridge_get_display_params(struct drm_display_mode *mode)
        dev_info(&tc35876x_client->dev, "clock = %d\n", mode->clock);
 }
 
+/* DV1 Active area 216.96 x 135.6 mm */
+#define DV1_PANEL_WIDTH 217
+#define DV1_PANEL_HEIGHT 136
+
+int tc35876x_bridge_get_panel_info(struct drm_device *dev, int pipe,
+                               struct panel_info *pi)
+{
+       if (!dev || !pi)
+               return -EINVAL;
+
+       pi->width_mm = DV1_PANEL_WIDTH;
+       pi->height_mm = DV1_PANEL_HEIGHT;
+
+       return 0;
+}
+
 static int tc35876x_bridge_probe(struct i2c_client *client,
                                const struct i2c_device_id *id)
 {
index 6b0e700..1e445c2 100644 (file)
@@ -30,6 +30,8 @@ void tc35876x_configure_lvds_bridge(struct drm_device *dev);
 void tc35876x_toshiba_bridge_panel_off(void);
 void tc35876x_toshiba_bridge_panel_on(void);
 void tc35876x_bridge_get_display_params(struct drm_display_mode *mode);
+int tc35876x_bridge_get_panel_info(struct drm_device *dev, int pipe,
+                               struct panel_info *pi);
 int tc35876x_bridge_init(void);
 void tc35876x_bridge_exit(void);
 
index 2ac1da0..c5e425e 100644 (file)
@@ -213,9 +213,11 @@ void tmd_vid_init(struct drm_device* dev, struct panel_funcs* p_funcs)
        p_funcs->encoder_helper_funcs = &mdfld_tpo_dpi_encoder_helper_funcs;
        p_funcs->get_config_mode = &tmd_vid_get_config_mode;
        p_funcs->update_fb = NULL;
-       p_funcs->get_panel_info = tmd_vid_get_panel_info;
        if (get_panel_type(dev, 0) != TC35876X) { /* FIXME: pipe */
+               p_funcs->get_panel_info = tmd_vid_get_panel_info;
                p_funcs->reset = mdfld_dsi_panel_reset;
                p_funcs->drv_ic_init = mdfld_dsi_tmd_drv_ic_init;
+       } else {
+               p_funcs->get_panel_info = tc35876x_bridge_get_panel_info;
        }
 }