Skip to content

Commit cf84f73

Browse files
committed
os/drivers/lcd: Add null checks for mipi_lcd.c
Add DEBUGASSERT checks for device pointers and validate other pointer parameters. This null checks for function that can be called by drivers. Signed-off-by: seokhun-eom <seokhun.eom@samsung.com>
1 parent 7a5dec8 commit cf84f73

File tree

1 file changed

+35
-16
lines changed

1 file changed

+35
-16
lines changed

os/drivers/lcd/mipi_lcd.c

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -367,8 +367,9 @@ static int lcd_putarea(FAR struct lcd_dev_s *dev, fb_coord_t row_start, fb_coord
367367
ASSERT(get_errno() == EINTR);
368368
}
369369
if (priv->power == 0) {
370+
lcddbg("ERROR: LCD is off. putarea failed\n");
370371
sem_post(&priv->sem);
371-
return ERROR;
372+
return -EIO;
372373
}
373374
//coordinate shift from (0,0) -> (1,1) and (XRES-1,YRES-1) -> (XRES,YRES)
374375
row_start += 1;
@@ -423,7 +424,10 @@ static int lcd_getrun(FAR struct lcd_dev_s *dev, fb_coord_t row, fb_coord_t col,
423424

424425
static int lcd_getvideoinfo(FAR struct lcd_dev_s *dev, FAR struct fb_videoinfo_s *vinfo)
425426
{
426-
DEBUGASSERT(dev && vinfo);
427+
DEBUGASSERT(dev);
428+
if (!vinfo) {
429+
return -EINVAL;
430+
}
427431
//vinfo->fmt = st7785_COLORFMT; /* Color format: RGB16-565: RRRR RGGG GGGB BBBB */
428432
#if defined(CONFIG_LCD_SW_ROTATION)
429433
vinfo->xres = LCD_YRES; /* Horizontal resolution in pixel columns */
@@ -470,6 +474,10 @@ static int lcd_getlcdinfo(FAR struct lcd_dev_s *dev, FAR struct lcd_info_s *lcdi
470474

471475
static int lcd_getplaneinfo(FAR struct lcd_dev_s *dev, unsigned int planeno, FAR struct lcd_planeinfo_s *pinfo)
472476
{
477+
DEBUGASSERT(dev);
478+
if (!pinfo) {
479+
return -EINVAL;
480+
}
473481
DEBUGASSERT(dev && pinfo && planeno == 0);
474482
pinfo->putrun = (struct lcd_planeinfo_s *)&lcd_putrun; /* Put a run into LCD memory */
475483
pinfo->putarea = (struct lcd_planeinfo_s *)&lcd_putarea; /* Put an area into LCD */
@@ -485,6 +493,7 @@ static int lcd_getplaneinfo(FAR struct lcd_dev_s *dev, unsigned int planeno, FAR
485493

486494
static int lcd_getpower(FAR struct lcd_dev_s *dev)
487495
{
496+
DEBUGASSERT(dev);
488497
FAR struct mipi_lcd_dev_s *priv = (FAR struct mipi_lcd_dev_s *)dev;
489498
return priv->power;
490499
}
@@ -504,6 +513,8 @@ static int lcd_getpower(FAR struct lcd_dev_s *dev)
504513

505514
static int lcd_power_off(FAR struct mipi_lcd_dev_s *priv)
506515
{
516+
int ret;
517+
507518
if (priv->lcdonoff == LCD_OFF) {
508519
lcddbg("LCD already powered off\n");
509520
return OK;
@@ -513,13 +524,14 @@ static int lcd_power_off(FAR struct mipi_lcd_dev_s *priv)
513524
priv->config->mipi_mode_switch(CMD_MODE);
514525

515526
lcm_setting_table_t display_off_cmd = {0x28, 0, {0x00}};
516-
if (send_cmd(priv, display_off_cmd) != OK) {
517-
lcddbg("ERROR: LCD power off failed\n");
518-
return ERROR;
527+
ret = send_cmd(priv, display_off_cmd);
528+
if (ret != OK) {
529+
lcddbg("ERROR: LCD power off failed ret : %d\n", ret);
530+
return ret;
519531
}
520532

521-
priv->lcdonoff = LCD_OFF;
522533
priv->config->power_off();
534+
priv->lcdonoff = LCD_OFF;
523535

524536
return OK;
525537
}
@@ -567,7 +579,7 @@ static int lcd_power_on(FAR struct mipi_lcd_dev_s *priv)
567579

568580
if (retries <= 0) {
569581
lcddbg("ERROR: LCD Init sequence failed\n");
570-
return ERROR;
582+
return -EIO;
571583
}
572584

573585
return OK;
@@ -580,6 +592,8 @@ static int lcd_power_on(FAR struct mipi_lcd_dev_s *priv)
580592

581593
static int lcd_setpower(FAR struct lcd_dev_s *dev, int power)
582594
{
595+
DEBUGASSERT(dev);
596+
int ret;
583597
FAR struct mipi_lcd_dev_s *priv = (FAR struct mipi_lcd_dev_s *)dev;
584598
if (power > CONFIG_LCD_MAXPOWER) {
585599
lcddbg("Power exceeds CONFIG_LCD_MAXPOWER %d\n", power);
@@ -591,25 +605,29 @@ static int lcd_setpower(FAR struct lcd_dev_s *dev, int power)
591605
}
592606

593607
if (power == priv->power) {
594-
lcddbg("ERROR: Already in the requested power state(%d)\n", power);
608+
lcddbg("Already in the requested power state(%d)\n", power);
595609
sem_post(&priv->sem);
596610
return OK;
597611
}
598612

599613
if (power == 0) {
600614
lcddbg("Powering down the LCD\n");
601615
priv->config->backlight(power);
602-
if (lcd_power_off(priv) != OK) {
616+
ret = lcd_power_off(priv);
617+
if (ret != OK) {
618+
lcddbg("ERROR: LCD power off failed ret : %d\n", ret);
603619
sem_post(&priv->sem);
604-
return ERROR;
620+
return ret;
605621
}
606622
} else {
607623
/* The power on must operate only when LCD is OFF */
608624
if (priv->power == 0) {
609625
/* The power on must operate only when LCD is OFF */
610-
if (lcd_power_on(priv) != OK) {
626+
ret = lcd_power_on(priv);
627+
if (ret != OK) {
628+
lcddbg("ERROR: LCD power on failed ret : %d\n", ret);
611629
sem_post(&priv->sem);
612-
return ERROR;
630+
return -EIO;
613631
}
614632
}
615633
priv->config->backlight(power);
@@ -631,6 +649,7 @@ static int lcd_setpower(FAR struct lcd_dev_s *dev, int power)
631649

632650
static int lcd_init(FAR struct lcd_dev_s *dev)
633651
{
652+
DEBUGASSERT(dev);
634653
FAR struct mipi_lcd_dev_s *priv = (FAR struct mipi_lcd_dev_s *)dev;
635654
priv->config->reset();
636655
if (check_lcd_vendor_send_init_cmd(priv) == OK) {
@@ -691,7 +710,7 @@ static int lcd_render_bmp(FAR struct lcd_dev_s *dev, const char *bmp_filename)
691710
FILE *bmp_file = fopen(bmp_filename, "rb");
692711
if (!bmp_file) {
693712
lcddbg("Failed to open BMP file\n");
694-
return ERROR;
713+
return -ENOENT;
695714
}
696715
bmp_header_t header;
697716
bmp_info_header_t info_header;
@@ -794,7 +813,7 @@ static int lcd_render_bmp(FAR struct lcd_dev_s *dev, const char *bmp_filename)
794813
kmm_free(fullscreen_buffer);
795814
}
796815
#endif
797-
return ERROR;
816+
return -EIO;
798817
}
799818

800819
/****************************************************************************
@@ -829,7 +848,7 @@ FAR int lcd_init_put_image(FAR struct lcd_dev_s *dev)
829848
FILE *test_file = fopen(bmp_file_path, "rb");
830849
if (!test_file) {
831850
lcddbg("BMP file not found at %s. LCD OFF\n", bmp_file_path);
832-
return ERROR;
851+
return -ENOENT;
833852
}
834853
fclose(test_file);
835854

@@ -848,7 +867,7 @@ FAR int lcd_init_put_image(FAR struct lcd_dev_s *dev)
848867
if (ret != OK) {
849868
if (lcd_power_off(priv) != OK) {
850869
sem_post(&priv->sem);
851-
return ERROR;
870+
return -EIO;
852871
}
853872
sem_post(&priv->sem);
854873
return ret;

0 commit comments

Comments
 (0)