From 57495e1538e412c307c5b3423db82a1364fbaf9f Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Fri, 4 Nov 2011 15:32:39 +0200 Subject: [PATCH] gfx: drv: tc35876x: don't oops if functions are called before probe The whole driver has serious design issues due to the rest of the display controller code calling the driver's functions directly. In some (typically failure) circumstances the calls might come in before the driver has probed. Don't oops in such cases, but emit a warning. The proper fix will require some redesign and rework later on. Signed-off-by: Jani Nikula Signed-off-by: Kirill A. Shutemov --- drivers/staging/mrst/drv/tc35876x-dsi-lvds.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c b/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c index 727c9dd..9f8fd56 100644 --- a/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c +++ b/drivers/staging/mrst/drv/tc35876x-dsi-lvds.c @@ -286,7 +286,9 @@ void tc35876x_set_bridge_reset_state(int state) { struct tc35876x_platform_data *pdata; - WARN_ON(!tc35876x_client); + if (WARN(!tc35876x_client, "%s called before probe", __func__)) + return; + dev_dbg(&tc35876x_client->dev, "%s: state %d\n", __func__, state); pdata = dev_get_platdata(&tc35876x_client->dev); @@ -315,7 +317,9 @@ void tc35876x_configure_lvds_bridge(struct drm_device *dev) u32 txtasurecnt; u32 id; - WARN_ON(!tc35876x_client); + if (WARN(!tc35876x_client, "%s called before probe", __func__)) + return; + dev_dbg(&tc35876x_client->dev, "%s\n", __func__); tc35876x_regr(i2c, IDREG, &id); @@ -391,7 +395,9 @@ void tc35876x_toshiba_bridge_panel_off(void) { struct tc35876x_platform_data *pdata; - WARN_ON(!tc35876x_client); + if (WARN(!tc35876x_client, "%s called before probe", __func__)) + return; + dev_dbg(&tc35876x_client->dev, "%s\n", __func__); if (pdata->gpio_panel_bl_en != -1) @@ -405,7 +411,9 @@ void tc35876x_toshiba_bridge_panel_on(void) { struct tc35876x_platform_data *pdata; - WARN_ON(!tc35876x_client); + if (WARN(!tc35876x_client, "%s called before probe", __func__)) + return; + dev_dbg(&tc35876x_client->dev, "%s\n", __func__); pdata = dev_get_platdata(&tc35876x_client->dev); @@ -422,7 +430,9 @@ void tc35876x_toshiba_bridge_panel_on(void) void tc35876x_bridge_get_display_params(struct drm_display_mode *mode) { - WARN_ON(!tc35876x_client); + if (WARN(!tc35876x_client, "%s called before probe", __func__)) + return; + dev_dbg(&tc35876x_client->dev, "%s\n", __func__); /* FIXME: do this properly. */ -- 2.7.4