From: Pauli Nieminen Date: Tue, 15 Nov 2011 12:48:39 +0000 (+0200) Subject: gfx: drv: tc35876x: Fix physical display size information X-Git-Tag: 2.1b_release~496 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=21ff38ddbb7635e337e84608721c3a1d6a37bd5b;p=kernel%2Fkernel-mfld-blackbay.git gfx: drv: tc35876x: Fix physical display size information 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 Signed-off-by: Kirill A. Shutemov --- diff --git a/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c b/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c index 9f8fd56..8cd386d 100644 --- a/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c +++ b/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c @@ -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) { diff --git a/drivers/staging/mrst/drv/tc35876x-dsi-lvds.h b/drivers/staging/mrst/drv/tc35876x-dsi-lvds.h index 6b0e700..1e445c2 100644 --- a/drivers/staging/mrst/drv/tc35876x-dsi-lvds.h +++ b/drivers/staging/mrst/drv/tc35876x-dsi-lvds.h @@ -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); diff --git a/drivers/staging/mrst/drv/tmd_vid.c b/drivers/staging/mrst/drv/tmd_vid.c index 2ac1da0..c5e425e 100644 --- a/drivers/staging/mrst/drv/tmd_vid.c +++ b/drivers/staging/mrst/drv/tmd_vid.c @@ -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; } }