]> git.karo-electronics.de Git - linux-beck.git/commitdiff
fbdev: ssd1307fb: return proper error code if write command fails
authorPrabhakar Lad <prabhakar.csengg@gmail.com>
Thu, 15 Jan 2015 19:05:37 +0000 (19:05 +0000)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Fri, 30 Jan 2015 07:40:00 +0000 (09:40 +0200)
this patch fixes ssd1307fb_ssd1306_init() function to return
proper error codes in case of failures.

Signed-off-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/fbdev/ssd1307fb.c

index 3d6611f1958f4cb891cbc78d61f80879097e8dd2..f7ed6d9016f7779a575626485990dc6accf3c7d4 100644 (file)
@@ -303,7 +303,10 @@ static int ssd1307fb_ssd1306_init(struct ssd1307fb_par *par)
 
        /* Set initial contrast */
        ret = ssd1307fb_write_cmd(par->client, SSD1307FB_CONTRAST);
-       ret = ret & ssd1307fb_write_cmd(par->client, 0x7f);
+       if (ret < 0)
+               return ret;
+
+       ret = ssd1307fb_write_cmd(par->client, 0x7f);
        if (ret < 0)
                return ret;
 
@@ -319,63 +322,99 @@ static int ssd1307fb_ssd1306_init(struct ssd1307fb_par *par)
 
        /* Set multiplex ratio value */
        ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_MULTIPLEX_RATIO);
-       ret = ret & ssd1307fb_write_cmd(par->client, par->height - 1);
+       if (ret < 0)
+               return ret;
+
+       ret = ssd1307fb_write_cmd(par->client, par->height - 1);
        if (ret < 0)
                return ret;
 
        /* set display offset value */
        ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_DISPLAY_OFFSET);
+       if (ret < 0)
+               return ret;
+
        ret = ssd1307fb_write_cmd(par->client, 0x20);
        if (ret < 0)
                return ret;
 
        /* Set clock frequency */
        ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_CLOCK_FREQ);
-       ret = ret & ssd1307fb_write_cmd(par->client, 0xf0);
+       if (ret < 0)
+               return ret;
+
+       ret = ssd1307fb_write_cmd(par->client, 0xf0);
        if (ret < 0)
                return ret;
 
        /* Set precharge period in number of ticks from the internal clock */
        ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_PRECHARGE_PERIOD);
-       ret = ret & ssd1307fb_write_cmd(par->client, 0x22);
+       if (ret < 0)
+               return ret;
+
+       ret = ssd1307fb_write_cmd(par->client, 0x22);
        if (ret < 0)
                return ret;
 
        /* Set COM pins configuration */
        ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_COM_PINS_CONFIG);
-       ret = ret & ssd1307fb_write_cmd(par->client, 0x22);
+       if (ret < 0)
+               return ret;
+
+       ret = ssd1307fb_write_cmd(par->client, 0x22);
        if (ret < 0)
                return ret;
 
        /* Set VCOMH */
        ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_VCOMH);
-       ret = ret & ssd1307fb_write_cmd(par->client, 0x49);
+       if (ret < 0)
+               return ret;
+
+       ret = ssd1307fb_write_cmd(par->client, 0x49);
        if (ret < 0)
                return ret;
 
        /* Turn on the DC-DC Charge Pump */
        ret = ssd1307fb_write_cmd(par->client, SSD1307FB_CHARGE_PUMP);
-       ret = ret & ssd1307fb_write_cmd(par->client, 0x14);
+       if (ret < 0)
+               return ret;
+
+       ret = ssd1307fb_write_cmd(par->client, 0x14);
        if (ret < 0)
                return ret;
 
        /* Switch to horizontal addressing mode */
        ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_ADDRESS_MODE);
-       ret = ret & ssd1307fb_write_cmd(par->client,
-                                       SSD1307FB_SET_ADDRESS_MODE_HORIZONTAL);
+       if (ret < 0)
+               return ret;
+
+       ret = ssd1307fb_write_cmd(par->client,
+                                 SSD1307FB_SET_ADDRESS_MODE_HORIZONTAL);
        if (ret < 0)
                return ret;
 
        ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_COL_RANGE);
-       ret = ret & ssd1307fb_write_cmd(par->client, 0x0);
-       ret = ret & ssd1307fb_write_cmd(par->client, par->width - 1);
+       if (ret < 0)
+               return ret;
+
+       ret = ssd1307fb_write_cmd(par->client, 0x0);
+       if (ret < 0)
+               return ret;
+
+       ret = ssd1307fb_write_cmd(par->client, par->width - 1);
        if (ret < 0)
                return ret;
 
        ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_PAGE_RANGE);
-       ret = ret & ssd1307fb_write_cmd(par->client, 0x0);
-       ret = ret & ssd1307fb_write_cmd(par->client,
-                                       par->page_offset + (par->height / 8) - 1);
+       if (ret < 0)
+               return ret;
+
+       ret = ssd1307fb_write_cmd(par->client, 0x0);
+       if (ret < 0)
+               return ret;
+
+       ret = ssd1307fb_write_cmd(par->client,
+                                 par->page_offset + (par->height / 8) - 1);
        if (ret < 0)
                return ret;