summaryrefslogtreecommitdiff
path: root/drivers/video/mxc
diff options
context:
space:
mode:
authorDanny Nold <dannynold@freescale.com>2010-08-26 16:28:25 -0500
committerAlan Tull <r80115@freescale.com>2010-09-25 09:51:35 -0500
commitedc3dda4f57ad47e280fb34221773c215a09eebc (patch)
tree3988b669b16437731ea32e9caacadb9093536910 /drivers/video/mxc
parent30d44a83969c1d8bb62ed6a89af03cc2dc513cd5 (diff)
ENGR00126739 - EPDC fb: driver crashes when no panel selected via command line.
Crash averted by preventing the case where a NULL string (representing the panel selected via command line) is passed through strcmp(). If no command line panel selected, the default will be the first panel defined in the platform data (the 6.0" E Ink panel for MX50 ARM2). Signed-off-by: Danny Nold <dannynold@freescale.com>
Diffstat (limited to 'drivers/video/mxc')
-rw-r--r--drivers/video/mxc/mxc_epdc_fb.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/video/mxc/mxc_epdc_fb.c b/drivers/video/mxc/mxc_epdc_fb.c
index ebf766cbc05c..ed3cf4787a16 100644
--- a/drivers/video/mxc/mxc_epdc_fb.c
+++ b/drivers/video/mxc/mxc_epdc_fb.c
@@ -2404,9 +2404,11 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
goto out;
}
- /* Get platform data */
+ /* Get platform data and check validity */
fb_data->pdata = pdev->dev.platform_data;
- if ((fb_data->pdata == NULL) || (fb_data->pdata->num_modes < 1)) {
+ if ((fb_data->pdata == NULL) || (fb_data->pdata->num_modes < 1)
+ || (fb_data->pdata->epdc_mode == NULL)
+ || (fb_data->pdata->epdc_mode->vmode == NULL)) {
ret = -EINVAL;
goto out_fbdata;
}
@@ -2436,12 +2438,14 @@ int __devinit mxc_epdc_fb_probe(struct platform_device *pdev)
/* Set default (first defined mode) before searching for a match */
fb_data->cur_mode = &fb_data->pdata->epdc_mode[0];
- for (i = 0; i < fb_data->pdata->num_modes; i++)
- if (!strcmp(fb_data->pdata->epdc_mode[i].vmode->name,
- panel_str)) {
- fb_data->cur_mode = &fb_data->pdata->epdc_mode[i];
- break;
- }
+ if (panel_str)
+ for (i = 0; i < fb_data->pdata->num_modes; i++)
+ if (!strcmp(fb_data->pdata->epdc_mode[i].vmode->name,
+ panel_str)) {
+ fb_data->cur_mode =
+ &fb_data->pdata->epdc_mode[i];
+ break;
+ }
vmode = fb_data->cur_mode->vmode;