diff options
author | Solomon Peachy <pizza@shaftnet.org> | 2020-10-01 22:03:21 -0400 |
---|---|---|
committer | Solomon Peachy <pizza@shaftnet.org> | 2020-10-02 02:24:42 +0000 |
commit | 9ee618e8891638027d05114250190f215bc01a63 (patch) | |
tree | 8fca5b761f8b7cdfa27eabb973b531bb011974e1 | |
parent | f4f3255edf95fcecf5ceb9586a529c7600a7cb13 (diff) | |
download | rockbox-9ee618e.tar.gz rockbox-9ee618e.zip |
hosted: Fix overzealous spamming of backlight and lcd enable
This caused random delays in LCD activity, and also caused key inputs to go nuts
Change-Id: Ie483c86f7461455308f8c5f8999df313521c6b55
-rw-r--r-- | firmware/target/hosted/backlight-unix.c | 16 | ||||
-rw-r--r-- | firmware/target/hosted/lcd-linuxfb.c | 21 |
2 files changed, 27 insertions, 10 deletions
diff --git a/firmware/target/hosted/backlight-unix.c b/firmware/target/hosted/backlight-unix.c index 28bda52b20..06da05e487 100644 --- a/firmware/target/hosted/backlight-unix.c +++ b/firmware/target/hosted/backlight-unix.c @@ -44,20 +44,28 @@ bool backlight_hw_init(void) return true; } +static int last_bl = -1; + void backlight_hw_on(void) { + if (last_bl != 1) { #ifdef HAVE_LCD_ENABLE - lcd_enable(true); + lcd_enable(true); #endif - sysfs_set_int(sysfs_bl_power, 0); + sysfs_set_int(sysfs_bl_power, 0); + last_bl = 1; + } } void backlight_hw_off(void) { - sysfs_set_int(sysfs_bl_power, 1); + if (last_bl != 0) { + sysfs_set_int(sysfs_bl_power, 1); #ifdef HAVE_LCD_ENABLE - lcd_enable(false); + lcd_enable(false); #endif + last_bl = 0; + } } void backlight_hw_brightness(int brightness) diff --git a/firmware/target/hosted/lcd-linuxfb.c b/firmware/target/hosted/lcd-linuxfb.c index 6a57be9e40..8edb82757f 100644 --- a/firmware/target/hosted/lcd-linuxfb.c +++ b/firmware/target/hosted/lcd-linuxfb.c @@ -53,15 +53,15 @@ void lcd_init_device(void) panicf("Cannot open framebuffer: %s\n", fb_dev); } - /* get fixed and variable information */ - if(ioctl(fd, FBIOGET_FSCREENINFO, &finfo) < 0) + if (fcntl( fd, F_SETFD, FD_CLOEXEC ) < 0) { - panicf("Cannot read framebuffer fixed information"); + panicf("Can't set CLOEXEC"); } - if(ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) < 0) + /* get fixed and variable information */ + if(ioctl(fd, FBIOGET_FSCREENINFO, &finfo) < 0) { - panicf("Cannot read framebuffer variable information"); + panicf("Cannot read framebuffer fixed information"); } #if 0 @@ -76,12 +76,17 @@ void lcd_init_device(void) * values returned by the driver for line_length */ /* map framebuffer */ - framebuffer = mmap(0, FRAMEBUFFER_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + framebuffer = mmap(NULL, FRAMEBUFFER_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if((void *)framebuffer == MAP_FAILED) { panicf("Cannot map framebuffer"); } + if(ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) < 0) + { + panicf("Cannot read framebuffer variable information"); + } + memset(framebuffer, 0, finfo.smem_len); #ifdef HAVE_LCD_ENABLE @@ -104,7 +109,11 @@ void lcd_enable(bool on) { if (fd < 0) return; + if (lcd_active() == on) + return; + lcd_set_active(on); + if (on) { send_event(LCD_EVENT_ACTIVATION, NULL); |