From dcd71e66bd5f0b521c9f98ebe83ff1f7abb62918 Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Thu, 14 Dec 2017 06:22:04 +0100 Subject: Optimize lcd-ssd1303 driver (clip series) Saves 100+ bytes (50 of it in iram), saves a bit of power Internal LCD clock decreased but with added efficiency of drawing routines loses only around 2 Hz on the scanrate (~75Hz) while fps is slightly increased Column offsets are now calculated outside the loops saving a few instructions Passing a LCD_NOP command after lcd_update turns off Data/Cmd# gpio saving a bit more power Added a function lcd_write_cmd_triple() that allows 3 commands to be sent at once when enabled with LCD_USE_FIFO_FOR_COMMANDS it sends them back to back without checking FIFO status in between or sending to thhe D/C# Gpio. Makes an assumption about the FIFO being large enough to accept 3 commands after being emptied which should be the case on the clipv1, clipv2, clipplus. I have only enabled it for the clip plus as thats the only device I have to test it on. On clip+ the SSP clock is now turned off when screen is off Change-Id: Ib5fd24697bfe4ac8b8ee017361e789e4a7910d21 --- firmware/target/arm/as3525/lcd-clip.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'firmware/target/arm/as3525/lcd-clip.h') diff --git a/firmware/target/arm/as3525/lcd-clip.h b/firmware/target/arm/as3525/lcd-clip.h index eb76401bc0..3bde92430c 100644 --- a/firmware/target/arm/as3525/lcd-clip.h +++ b/firmware/target/arm/as3525/lcd-clip.h @@ -18,12 +18,22 @@ * KIND, either express or implied. * ****************************************************************************/ +#ifndef __LCDCLIP_H__ +#define __LCDCLIP_H__ #include "config.h" +#if !defined(BOOTLOADER) && defined(SANSA_CLIPPLUS) /* only tested for clipplus */ +/* Ensure empty FIFO for lcd commands is at least 3 deep */ +#define LCD_USE_FIFO_FOR_COMMANDS +#endif + +void lcd_write_cmd_triplet(int cmd1, int cmd2, int cmd3); + /* return variant number: 0 = clipv1, clipv2, old clip+, 1 = newer clip+ */ int lcd_hw_init(void) INIT_ATTR; /* target-specific power enable */ void lcd_enable_power(bool onoff); +#endif /*__LCDCLIP_H__*/ -- cgit v1.2.3