From: Geert Uytterhoeven <geert@linux-m68k.org> To: David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>, Maxime Ripard <mripard@kernel.org> Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven <geert@linux-m68k.org> Subject: [PATCH resend 5/5] video: fbdev: ssd1307fb: Cache address ranges Date: Wed, 14 Jul 2021 16:58:04 +0200 [thread overview] Message-ID: <20210714145804.2530727-6-geert@linux-m68k.org> (raw) In-Reply-To: <20210714145804.2530727-1-geert@linux-m68k.org> Cache the column and page ranges, to avoid doing unneeded I2C transfers when the values haven't changed. Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> --- drivers/video/fbdev/ssd1307fb.c | 52 +++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c index 8e3d4be74723b9bf..23b43ce479898813 100644 --- a/drivers/video/fbdev/ssd1307fb.c +++ b/drivers/video/fbdev/ssd1307fb.c @@ -82,6 +82,11 @@ struct ssd1307fb_par { struct regulator *vbat_reg; u32 vcomh; u32 width; + /* Cached address ranges */ + u8 col_start; + u8 col_end; + u8 page_start; + u8 page_end; }; struct ssd1307fb_array { @@ -160,28 +165,43 @@ static int ssd1307fb_set_address_range(struct ssd1307fb_par *par, u8 col_start, int ret; /* Set column range */ - ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_COL_RANGE); - if (ret < 0) - return ret; + if (col_start != par->col_start || col_end != par->col_end) { + 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; + ret = ssd1307fb_write_cmd(par->client, col_start); + if (ret < 0) + return ret; - ret = ssd1307fb_write_cmd(par->client, col_end); - if (ret < 0) - return ret; + ret = ssd1307fb_write_cmd(par->client, col_end); + if (ret < 0) + return ret; + + par->col_start = col_start; + par->col_end = col_end; + } /* Set page range */ - ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_PAGE_RANGE); - if (ret < 0) - return ret; + if (page_start != par->page_start || page_end != par->page_end) { + 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; + ret = ssd1307fb_write_cmd(par->client, page_start); + if (ret < 0) + return ret; + + ret = ssd1307fb_write_cmd(par->client, page_end); + if (ret < 0) + return ret; - return ssd1307fb_write_cmd(par->client, page_end); + par->page_start = page_start; + par->page_end = page_end; + } + + return 0; } static int ssd1307fb_update_rect(struct ssd1307fb_par *par, unsigned int x, -- 2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: Geert Uytterhoeven <geert@linux-m68k.org> To: David Airlie <airlied@linux.ie>, Daniel Vetter <daniel@ffwll.ch>, Maxime Ripard <mripard@kernel.org> Cc: linux-fbdev@vger.kernel.org, Geert Uytterhoeven <geert@linux-m68k.org>, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH resend 5/5] video: fbdev: ssd1307fb: Cache address ranges Date: Wed, 14 Jul 2021 16:58:04 +0200 [thread overview] Message-ID: <20210714145804.2530727-6-geert@linux-m68k.org> (raw) In-Reply-To: <20210714145804.2530727-1-geert@linux-m68k.org> Cache the column and page ranges, to avoid doing unneeded I2C transfers when the values haven't changed. Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> --- drivers/video/fbdev/ssd1307fb.c | 52 +++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c index 8e3d4be74723b9bf..23b43ce479898813 100644 --- a/drivers/video/fbdev/ssd1307fb.c +++ b/drivers/video/fbdev/ssd1307fb.c @@ -82,6 +82,11 @@ struct ssd1307fb_par { struct regulator *vbat_reg; u32 vcomh; u32 width; + /* Cached address ranges */ + u8 col_start; + u8 col_end; + u8 page_start; + u8 page_end; }; struct ssd1307fb_array { @@ -160,28 +165,43 @@ static int ssd1307fb_set_address_range(struct ssd1307fb_par *par, u8 col_start, int ret; /* Set column range */ - ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_COL_RANGE); - if (ret < 0) - return ret; + if (col_start != par->col_start || col_end != par->col_end) { + 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; + ret = ssd1307fb_write_cmd(par->client, col_start); + if (ret < 0) + return ret; - ret = ssd1307fb_write_cmd(par->client, col_end); - if (ret < 0) - return ret; + ret = ssd1307fb_write_cmd(par->client, col_end); + if (ret < 0) + return ret; + + par->col_start = col_start; + par->col_end = col_end; + } /* Set page range */ - ret = ssd1307fb_write_cmd(par->client, SSD1307FB_SET_PAGE_RANGE); - if (ret < 0) - return ret; + if (page_start != par->page_start || page_end != par->page_end) { + 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; + ret = ssd1307fb_write_cmd(par->client, page_start); + if (ret < 0) + return ret; + + ret = ssd1307fb_write_cmd(par->client, page_end); + if (ret < 0) + return ret; - return ssd1307fb_write_cmd(par->client, page_end); + par->page_start = page_start; + par->page_end = page_end; + } + + return 0; } static int ssd1307fb_update_rect(struct ssd1307fb_par *par, unsigned int x, -- 2.25.1
next prev parent reply other threads:[~2021-07-14 14:58 UTC|newest] Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-07-14 14:57 [PATCH resend 0/5] video: fbdev: ssd1307fb: Optimizations and improvements Geert Uytterhoeven 2021-07-14 14:57 ` Geert Uytterhoeven 2021-07-14 14:58 ` [PATCH resend 1/5] video: fbdev: ssd1307fb: Propagate errors via ssd1307fb_update_display() Geert Uytterhoeven 2021-07-14 14:58 ` Geert Uytterhoeven 2021-07-14 14:58 ` [PATCH resend 2/5] video: fbdev: ssd1307fb: Simplify ssd1307fb_update_display() Geert Uytterhoeven 2021-07-14 14:58 ` Geert Uytterhoeven 2021-07-19 19:05 ` Sam Ravnborg 2021-07-20 7:43 ` Geert Uytterhoeven 2021-07-20 7:43 ` Geert Uytterhoeven 2021-07-20 14:41 ` Sam Ravnborg 2021-07-14 14:58 ` [PATCH resend 3/5] video: fbdev: ssd1307fb: Extract ssd1307fb_set_address_range() Geert Uytterhoeven 2021-07-14 14:58 ` Geert Uytterhoeven 2021-07-19 19:07 ` Sam Ravnborg 2021-07-20 7:51 ` Geert Uytterhoeven 2021-07-20 7:51 ` Geert Uytterhoeven 2021-07-14 14:58 ` [PATCH resend 4/5] video: fbdev: ssd1307fb: Optimize screen updates Geert Uytterhoeven 2021-07-14 14:58 ` Geert Uytterhoeven 2021-07-19 19:21 ` Sam Ravnborg 2021-07-20 7:56 ` Geert Uytterhoeven 2021-07-20 7:56 ` Geert Uytterhoeven 2021-07-20 9:16 ` Geert Uytterhoeven 2021-07-20 9:16 ` Geert Uytterhoeven 2021-07-20 14:39 ` Sam Ravnborg 2021-07-14 14:58 ` Geert Uytterhoeven [this message] 2021-07-14 14:58 ` [PATCH resend 5/5] video: fbdev: ssd1307fb: Cache address ranges Geert Uytterhoeven 2021-07-14 15:27 ` [PATCH resend 0/5] video: fbdev: ssd1307fb: Optimizations and improvements Sam Ravnborg 2021-07-15 6:54 ` Geert Uytterhoeven 2021-07-15 6:54 ` Geert Uytterhoeven 2021-07-20 14:53 ` Daniel Vetter 2021-07-20 14:53 ` Daniel Vetter 2021-07-19 19:23 ` Sam Ravnborg 2021-07-20 7:33 ` Geert Uytterhoeven 2021-07-20 7:33 ` Geert Uytterhoeven 2021-07-20 14:45 ` Sam Ravnborg
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210714145804.2530727-6-geert@linux-m68k.org \ --to=geert@linux-m68k.org \ --cc=airlied@linux.ie \ --cc=daniel@ffwll.ch \ --cc=dri-devel@lists.freedesktop.org \ --cc=linux-fbdev@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mripard@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.