aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorGeert Uytterhoeven <geert@linux-m68k.org>2021-07-27 15:47:28 +0200
committerSam Ravnborg <sam@ravnborg.org>2021-07-27 17:18:21 +0200
commit8a15af3b86f497109dc3a6646eb029d1f934684d (patch)
treead90cff60b29b9c3ddc8ffc24dfa715a63e55722 /drivers/video/fbdev
parentvideo: fbdev: ssd1307fb: Simplify ssd1307fb_update_display() (diff)
downloadlinux-dev-8a15af3b86f497109dc3a6646eb029d1f934684d.tar.xz
linux-dev-8a15af3b86f497109dc3a6646eb029d1f934684d.zip
video: fbdev: ssd1307fb: Extract ssd1307fb_set_{col,page}_range()
Extract the code to set the column and page ranges into two helper functions. Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Acked-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Link: https://patchwork.freedesktop.org/patch/msgid/20210727134730.3765898-4-geert@linux-m68k.org
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/ssd1307fb.c57
1 files changed, 37 insertions, 20 deletions
diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c
index 6d7bd025bca1..86eb9c99a783 100644
--- a/drivers/video/fbdev/ssd1307fb.c
+++ b/drivers/video/fbdev/ssd1307fb.c
@@ -152,6 +152,40 @@ static inline int ssd1307fb_write_cmd(struct i2c_client *client, u8 cmd)
return ret;
}
+static int ssd1307fb_set_col_range(struct ssd1307fb_par *par, u8 col_start,
+ u8 cols)
+{
+ u8 col_end = col_start + cols - 1;
+ int ret;
+
+ ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_COL_RANGE);
+ if (ret < 0)
+ return ret;
+
+ ret = ssd1307fb_write_cmd(par->client, col_start);
+ if (ret < 0)
+ return ret;
+
+ return ssd1307fb_write_cmd(par->client, col_end);
+}
+
+static int ssd1307fb_set_page_range(struct ssd1307fb_par *par, u8 page_start,
+ u8 pages)
+{
+ u8 page_end = page_start + pages - 1;
+ int ret;
+
+ ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_PAGE_RANGE);
+ if (ret < 0)
+ return ret;
+
+ ret = ssd1307fb_write_cmd(par->client, page_start);
+ if (ret < 0)
+ return ret;
+
+ return ssd1307fb_write_cmd(par->client, page_end);
+}
+
static int ssd1307fb_update_display(struct ssd1307fb_par *par)
{
struct ssd1307fb_array *array;
@@ -462,30 +496,13 @@ static int ssd1307fb_init(struct ssd1307fb_par *par)
return ret;
/* Set column range */
- ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_COL_RANGE);
- if (ret < 0)
- return ret;
-
- ret = ssd1307fb_write_cmd(par->client, par->col_offset);
- if (ret < 0)
- return ret;
-
- ret = ssd1307fb_write_cmd(par->client, par->col_offset + par->width - 1);
+ ret = ssd1307fb_set_col_range(par, par->col_offset, par->width);
if (ret < 0)
return ret;
/* Set page range */
- ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_PAGE_RANGE);
- if (ret < 0)
- return ret;
-
- ret = ssd1307fb_write_cmd(par->client, par->page_offset);
- if (ret < 0)
- return ret;
-
- ret = ssd1307fb_write_cmd(par->client,
- par->page_offset +
- DIV_ROUND_UP(par->height, 8) - 1);
+ ret = ssd1307fb_set_page_range(par, par->page_offset,
+ DIV_ROUND_UP(par->height, 8));
if (ret < 0)
return ret;