summaryrefslogtreecommitdiff
path: root/firmware/target
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2020-04-08 09:53:13 -0400
committerSolomon Peachy <pizza@shaftnet.org>2020-04-08 15:56:06 +0200
commit53b93ea6a60cf8900c88e00f774693dea9a4f297 (patch)
treee4370674e13dc6c1a9d71479707ff8e44c15a0ab /firmware/target
parent6fcd69a365365ad828410d0c58970e8bef9112b6 (diff)
hiby: Refactor X3ii/X20 and Rocker LCD code
Once some missing power optimization stuff was added to the X3ii code, they were completely identical. Change-Id: I68e4db5e270e8ff22f91e521616a054bd7baa95d
Diffstat (limited to 'firmware/target')
-rw-r--r--firmware/target/hosted/lcd-linuxfb.c (renamed from firmware/target/hosted/agptek/lcd-agptek.c)12
-rw-r--r--firmware/target/hosted/xduoo/lcd-xduoo.c140
2 files changed, 10 insertions, 142 deletions
diff --git a/firmware/target/hosted/agptek/lcd-agptek.c b/firmware/target/hosted/lcd-linuxfb.c
index 9cd4daea5d..6a3aa36b5d 100644
--- a/firmware/target/hosted/agptek/lcd-agptek.c
+++ b/firmware/target/hosted/lcd-linuxfb.c
@@ -92,10 +92,14 @@ void lcd_enable(bool on)
{
const char * const sysfs_fb_blank = "/sys/class/graphics/fb0/blank";
+#ifdef HAVE_LCD_SLEEP
if (lcd_active() != on)
+#endif
{
sysfs_set_int(sysfs_fb_blank, on ? 0 : 1);
+#ifdef HAVE_LCD_ENABLE
lcd_set_active(on);
+#endif
if (on)
{
@@ -114,7 +118,9 @@ extern void lcd_copy_buffer_rect(fb_data *dst, const fb_data *src,
void lcd_update(void)
{
- if (lcd_active())
+#ifdef HAVE_LCD_SLEEP
+ if (lcd_active() != on)
+#endif
{
/* Copy the Rockbox framebuffer to the second framebuffer */
lcd_copy_buffer_rect(LCD_FRAMEBUF_ADDR(0, 0), FBADDR(0,0),
@@ -125,7 +131,9 @@ void lcd_update(void)
void lcd_update_rect(int x, int y, int width, int height)
{
- if (lcd_active())
+#ifdef HAVE_LCD_SLEEP
+ if (lcd_active() != on)
+#endif
{
fb_data *dst = LCD_FRAMEBUF_ADDR(x, y);
fb_data * src = FBADDR(x,y);
diff --git a/firmware/target/hosted/xduoo/lcd-xduoo.c b/firmware/target/hosted/xduoo/lcd-xduoo.c
deleted file mode 100644
index 4b3148da03..0000000000
--- a/firmware/target/hosted/xduoo/lcd-xduoo.c
+++ /dev/null
@@ -1,140 +0,0 @@
-/***************************************************************************
- * __________ __ ___.
- * Open \______ \ ____ ____ | | _\_ |__ _______ ___
- * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
- * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
- * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
- * \/ \/ \/ \/ \/
- *
- * Copyright (C) 2017 Marcin Bukat
- * Copyright (C) 2016 Amaury Pouly
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ****************************************************************************/
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <stdio.h>
-#include <linux/fb.h>
-#include <sys/mman.h>
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include "lcd.h"
-#include "lcd-target.h"
-#include "backlight-target.h"
-#include "sysfs.h"
-#include "panic.h"
-
-static int fd = -1;
-static struct fb_var_screeninfo vinfo;
-fb_data *framebuffer = 0; /* global variable, see lcd-target.h */
-
-void lcd_init_device(void)
-{
- const char * const fb_dev = "/dev/fb0";
- fd = open(fb_dev, O_RDWR);
- if(fd < 0)
- {
- panicf("Cannot open framebuffer: %s\n", fb_dev);
- }
-
- /* get fixed and variable information */
- struct fb_fix_screeninfo finfo;
- if(ioctl(fd, FBIOGET_FSCREENINFO, &finfo) < 0)
- {
- panicf("Cannot read framebuffer fixed information");
- }
-
- if(ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) < 0)
- {
- panicf("Cannot read framebuffer variable information");
- }
-
-#if 0
- /* check resolution and framebuffer size */
- if(vinfo.xres != LCD_WIDTH || vinfo.yres != LCD_HEIGHT || vinfo.bits_per_pixel != LCD_DEPTH)
- {
- panicf("Unexpected framebuffer resolution: %dx%dx%d\n", vinfo.xres,
- vinfo.yres, vinfo.bits_per_pixel);
- }
-#endif
- /* Note: we use a framebuffer size of width*height*bbp. We cannot trust the
- * values returned by the driver for line_length */
-
- /* map framebuffer */
- framebuffer = mmap(0, FRAMEBUFFER_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
- if((void *)framebuffer == MAP_FAILED)
- {
- panicf("Cannot map framebuffer");
- }
-
-#ifdef HAVE_LCD_ENABLE
- lcd_set_active(true);
-#endif
-}
-
-#ifdef HAVE_LCD_SHUTDOWN
-void lcd_shutdown(void)
-{
- munmap(framebuffer, FRAMEBUFFER_SIZE);
- close(fd);
-}
-#endif
-
-void lcd_enable(bool on)
-{
- const char * const sysfs_fb_blank = "/sys/class/graphics/fb0/blank";
-
- if (lcd_active() != on)
- {
- sysfs_set_int(sysfs_fb_blank, on ? 0 : 1);
- lcd_set_active(on);
-
- if (on)
- {
- send_event(LCD_EVENT_ACTIVATION, NULL);
- }
- }
-}
-
-static void redraw(void)
-{
- ioctl(fd, FBIOPAN_DISPLAY, &vinfo);
-}
-
-extern void lcd_copy_buffer_rect(fb_data *dst, const fb_data *src,
- int width, int height);
-
-void lcd_update(void)
-{
- /* Copy the Rockbox framebuffer to the second framebuffer */
- lcd_copy_buffer_rect(LCD_FRAMEBUF_ADDR(0, 0), FBADDR(0,0),
- LCD_WIDTH*LCD_HEIGHT, 1);
- redraw();
-}
-
-void lcd_update_rect(int x, int y, int width, int height)
-{
- fb_data *dst = LCD_FRAMEBUF_ADDR(x, y);
- fb_data * src = FBADDR(x,y);
-
- /* Copy part of the Rockbox framebuffer to the second framebuffer */
- if (width < LCD_WIDTH)
- {
- /* Not full width - do line-by-line */
- lcd_copy_buffer_rect(dst, src, width, height);
- }
- else
- {
- /* Full width - copy as one line */
- lcd_copy_buffer_rect(dst, src, LCD_WIDTH*height, 1);
- }
- redraw();
-}