summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2010-03-19 15:13:29 +0000
committerRafaël Carré <rafael.carre@gmail.com>2010-03-19 15:13:29 +0000
commit91647264f8b05bf0fe5c58926a2e886b5fd85fe6 (patch)
treedc6db2e98b2a82a7a499fe9a54bbccf4e9ba9230
parentf14bb2287c783048a53a979c5604f2c1a82ec8be (diff)
downloadrockbox-91647264f8b05bf0fe5c58926a2e886b5fd85fe6.zip
rockbox-91647264f8b05bf0fe5c58926a2e886b5fd85fe6.tar.gz
rockbox-91647264f8b05bf0fe5c58926a2e886b5fd85fe6.tar.bz2
rockbox-91647264f8b05bf0fe5c58926a2e886b5fd85fe6.tar.xz
lcd-ssd1303 (all Clips) : move model specific code in their own files
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25248 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/SOURCES11
-rw-r--r--firmware/target/arm/as3525/lcd-ssd1303.c (renamed from firmware/target/arm/as3525/sansa-clip/lcd-ssd1303.c)162
-rw-r--r--firmware/target/arm/as3525/sansa-clip/lcd-clip.c89
-rw-r--r--firmware/target/arm/as3525/sansa-clip/lcd-clip.h28
-rw-r--r--firmware/target/arm/as3525/sansa-clipplus/lcd-clip-plus.c66
-rw-r--r--firmware/target/arm/as3525/sansa-clipplus/lcd-clip.h26
-rw-r--r--firmware/target/arm/as3525/sansa-clipv2/lcd-clip.h26
-rw-r--r--firmware/target/arm/as3525/sansa-clipv2/lcd-clipv2.c85
8 files changed, 332 insertions, 161 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES
index c347ad7..5ecad19 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -1208,7 +1208,8 @@ target/arm/tcc77x/c100/audio-c100.c
#ifdef SANSA_CLIPPLUS
#ifndef SIMULATOR
-target/arm/as3525/sansa-clip/lcd-ssd1303.c
+target/arm/as3525/lcd-ssd1303.c
+target/arm/as3525/sansa-clipplus/lcd-clip-plus.c
target/arm/as3525/sansa-clipplus/lcd-as-clip-plus.S
target/arm/as3525/sansa-clipplus/button-clip.c
target/arm/as3525/sansa-clipplus/backlight-clip.c
@@ -1221,8 +1222,9 @@ target/arm/as3525/sansa-clip/powermgmt-clip.c
#ifdef SANSA_CLIPV2
#ifndef SIMULATOR
-target/arm/as3525/sansa-clip/lcd-ssd1303.c
-target/arm/as3525/sansa-clip/lcd-as-clip.S
+target/arm/as3525/lcd-ssd1303.c
+target/arm/as3525/sansa-clipv2/lcd-clipv2.c
+target/arm/as3525/sansa-clip/lcd-as-clip.S /* TODO for clipv2 */
target/arm/as3525/sansa-clipv2/button-clip.c
target/arm/as3525/sansa-clipv2/backlight-clip.c
#ifndef BOOTLOADER
@@ -1234,7 +1236,8 @@ target/arm/as3525/sansa-clip/powermgmt-clip.c
#ifdef SANSA_CLIP
#ifndef SIMULATOR
-target/arm/as3525/sansa-clip/lcd-ssd1303.c
+target/arm/as3525/lcd-ssd1303.c
+target/arm/as3525/sansa-clip/lcd-clip.c
target/arm/as3525/sansa-clip/lcd-as-clip.S
target/arm/as3525/sansa-clip/button-clip.c
target/arm/as3525/sansa-clip/backlight-clip.c
diff --git a/firmware/target/arm/as3525/sansa-clip/lcd-ssd1303.c b/firmware/target/arm/as3525/lcd-ssd1303.c
index dba5b9c..e4437e7 100644
--- a/firmware/target/arm/as3525/sansa-clip/lcd-ssd1303.c
+++ b/firmware/target/arm/as3525/lcd-ssd1303.c
@@ -22,21 +22,13 @@
****************************************************************************/
#include "config.h"
-#include "hwcompat.h"
#include "kernel.h"
#include "lcd.h"
#include "system.h"
#include "cpu.h"
#include "string.h"
-/*** AS3525 specifics ***/
-#ifdef SANSA_CLIPV2
-#include "as3525v2.h"
-#else
-#include "as3525.h"
-#endif
-
-#include "ascodec.h"
+#include "lcd-clip.h"
/*** definitions ***/
@@ -73,125 +65,6 @@
#define LCD_CNTL_HIGHCOL 0x10 /* Upper column address */
#define LCD_CNTL_LOWCOL 0x00 /* Lower column address */
-
-static void lcd_hw_init(void)
-{
-#if defined(SANSA_CLIP)
-/* DBOP initialisation, do what OF does */
- CGU_DBOP = (1<<3) | AS3525_DBOP_DIV;
-
- GPIOB_AFSEL = 0x08; /* DBOP on pin 3 */
- GPIOC_AFSEL = 0x0f; /* DBOP on pins 3:0 */
-
- DBOP_CTRL = 0x51008;
- DBOP_TIMPOL_01 = 0x6E167;
- DBOP_TIMPOL_23 = 0xA167E06F;
-#elif defined(SANSA_CLIPV2)
-/* DBOP initialisation, do what OF does */
- CCU_IO |= (1<<12); /* ?? */
- CGU_DBOP |= /*(1<<3)*/ 0x18 | AS3525_DBOP_DIV;
-
- DBOP_CTRL = 0x51004;
- DBOP_TIMPOL_01 = 0x36A12F;
- DBOP_TIMPOL_23 = 0xE037E037;
-#elif defined(SANSA_CLIPPLUS)
- CGU_PERI |= CGU_SSP_CLOCK_ENABLE;
-
- SSP_CPSR = AS3525_SSP_PRESCALER; /* OF = 0x10 */
- SSP_CR0 = (1<<7) | (1<<6) | 7; /* Motorola SPI frame format, 8 bits */
- SSP_CR1 = (1<<3) | (1<<1); /* SSP Operation enabled */
- SSP_IMSC = 0; /* No interrupts */
-#endif
-}
-
-#ifdef SANSA_CLIP
-#define LCD_DELAY 1
-#else /* SANSA_CLIPV2 */
-#define LCD_DELAY 10
-#endif
-
-#if defined(SANSA_CLIP) || defined(SANSA_CLIPV2)
-void lcd_write_command(int byte)
-{
- volatile int i = 0;
- while(i<LCD_DELAY) i++;
-
- /* unset D/C# (data or command) */
-#ifdef SANSA_CLIP
- GPIOA_PIN(5) = 0;
-#else /* SANSA_CLIPV2 */
- GPIOB_PIN(2) = 0;
- DBOP_TIMPOL_23 = 0xE0370036;
-#endif
-
- /* Write command */
- /* Only bits 15:12 and 3:0 of DBOP_DOUT are meaningful */
- DBOP_DOUT = (byte << 8) | byte;
-
- /* While push fifo is not empty */
- while ((DBOP_STAT & (1<<10)) == 0)
- ;
-
-#ifdef SANSA_CLIPV2
- DBOP_TIMPOL_23 = 0xE037E037;
-#endif
-}
-#elif defined(SANSA_CLIPPLUS)
-void lcd_write_command(int byte)
-{
- while(SSP_SR & (1<<4)) /* BSY flag */
- ;
-
- GPIOB_PIN(2) = 0;
- SSP_DATA = byte;
-
- while(SSP_SR & (1<<4)) /* BSY flag */
- ;
-}
-#endif
-
-#if defined(SANSA_CLIP) || defined(SANSA_CLIPV2)
-void lcd_write_data(const fb_data* p_bytes, int count)
-{
- volatile int i = 0;
- while(i<LCD_DELAY) i++;
- /* set D/C# (data or command) */
-#ifdef SANSA_CLIP
- GPIOA_PIN(5) = (1<<5);
-#else /* SANSA_CLIPV2 */
- GPIOB_PIN(2) = (1<<2);
-#endif
-
- while (count--)
- {
- /* Write pixels */
- /* Only bits 15:12 and 3:0 of DBOP_DOUT are meaningful */
- DBOP_DOUT = (*p_bytes << 8) | *p_bytes;
-
- p_bytes++; /* next packed pixels */
-
- /* Wait if push fifo is full */
- while ((DBOP_STAT & (1<<6)) != 0);
- }
- /* While push fifo is not empty */
- while ((DBOP_STAT & (1<<10)) == 0);
-}
-#elif defined(SANSA_CLIPPLUS)
-void lcd_write_data(const fb_data* p_bytes, int count)
-{
- GPIOB_PIN(2) = (1<<2);
-
- while (count--)
- {
- while(!(SSP_SR & (1<<1))) /* wait until transmit FIFO is not full */
- ;
-
- SSP_DATA = *p_bytes++;
- }
-}
-#endif
-
-
/** globals **/
static bool display_on; /* used by lcd_enable */
@@ -240,21 +113,14 @@ void lcd_enable(bool enable)
if( (display_on = enable) ) /* simple '=' is not a typo ! */
{
-#ifdef SANSA_CLIP
- /* Enable DC-DC AS3525 for some Clip v1 that need it */
- ascodec_write(AS3514_DCDC15, 1);
-#endif
-
+ lcd_enable_power(enable);
lcd_write_command(LCD_SET_DISPLAY_ON);
send_event(LCD_EVENT_ACTIVATION, NULL);
}
- else {
+ else
+ {
lcd_write_command(LCD_SET_DISPLAY_OFF);
-
-#ifdef SANSA_CLIP
- /* Disable DC-DC AS3525 */
- ascodec_write(AS3514_DCDC15, 0);
-#endif
+ lcd_enable_power(enable);
}
}
@@ -274,24 +140,6 @@ void lcd_init_device(void)
lcd_hw_init();
-#if defined(SANSA_CLIP)
- GPIOA_DIR |= 0x33; /* pins 5:4 and 1:0 out */
- GPIOB_DIR |= 0x40; /* pin 6 out */
-
- GPIOA_PIN(1) = (1<<1);
- GPIOA_PIN(0) = (1<<0);
- GPIOA_PIN(4) = 0;
- GPIOB_PIN(6) = (1<<6);
-#elif defined(SANSA_CLIPV2)
- GPIOB_DIR |= (1<<2)|(1<<5);
- GPIOB_PIN(5) = (1<<5);
-#elif defined(SANSA_CLIPPLUS)
- GPIOA_DIR |= (1<<5);
- GPIOB_DIR |= (1<<2) | (1<<7);
- GPIOB_PIN(7) = 0;
- GPIOA_PIN(5) = (1<<5);
-#endif
-
/* Set display clock (divide ratio = 1) and oscillator frequency (1) */
lcd_write_command(LCD_SET_DISPLAY_CLOCK_AND_OSC_FREQ);
lcd_write_command(0x10);
diff --git a/firmware/target/arm/as3525/sansa-clip/lcd-clip.c b/firmware/target/arm/as3525/sansa-clip/lcd-clip.c
new file mode 100644
index 0000000..9df006a
--- /dev/null
+++ b/firmware/target/arm/as3525/sansa-clip/lcd-clip.c
@@ -0,0 +1,89 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 François Dinel
+ * Copyright (C) 2008-2009 Rafaël Carré
+ *
+ * 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 "config.h"
+
+#include "lcd.h"
+#include "system.h"
+#include "cpu.h"
+
+void lcd_hw_init(void)
+{
+/* DBOP initialisation, do what OF does */
+ CGU_DBOP = (1<<3) | AS3525_DBOP_DIV;
+
+ GPIOB_AFSEL = 0x08; /* DBOP on pin 3 */
+ GPIOC_AFSEL = 0x0f; /* DBOP on pins 3:0 */
+
+ DBOP_CTRL = 0x51008;
+ DBOP_TIMPOL_01 = 0x6E167;
+ DBOP_TIMPOL_23 = 0xA167E06F;
+
+ GPIOA_DIR |= 0x33; /* pins 5:4 and 1:0 out */
+ GPIOB_DIR |= 0x40; /* pin 6 out */
+
+ GPIOA_PIN(1) = (1<<1);
+ GPIOA_PIN(0) = (1<<0);
+ GPIOA_PIN(4) = 0;
+ GPIOB_PIN(6) = (1<<6);
+}
+
+#define LCD_DELAY 1
+
+void lcd_write_command(int byte)
+{
+ volatile int i = 0;
+ while(i<LCD_DELAY) i++;
+
+ /* unset D/C# (data or command) */
+ GPIOA_PIN(5) = 0;
+
+ /* Write command */
+ /* Only bits 15:12 and 3:0 of DBOP_DOUT are meaningful */
+ DBOP_DOUT = (byte << 8) | byte;
+
+ /* While push fifo is not empty */
+ while ((DBOP_STAT & (1<<10)) == 0)
+ ;
+}
+
+void lcd_write_data(const fb_data* p_bytes, int count)
+{
+ volatile int i = 0;
+ while(i<LCD_DELAY) i++;
+
+ /* set D/C# (data or command) */
+ GPIOA_PIN(5) = (1<<5);
+
+ while (count--)
+ {
+ /* Write pixels */
+ /* Only bits 15:12 and 3:0 of DBOP_DOUT are meaningful */
+ DBOP_DOUT = (*p_bytes << 8) | *p_bytes;
+
+ p_bytes++; /* next packed pixels */
+
+ /* Wait if push fifo is full */
+ while ((DBOP_STAT & (1<<6)) != 0);
+ }
+ /* While push fifo is not empty */
+ while ((DBOP_STAT & (1<<10)) == 0);
+}
diff --git a/firmware/target/arm/as3525/sansa-clip/lcd-clip.h b/firmware/target/arm/as3525/sansa-clip/lcd-clip.h
new file mode 100644
index 0000000..3dbb416
--- /dev/null
+++ b/firmware/target/arm/as3525/sansa-clip/lcd-clip.h
@@ -0,0 +1,28 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008-2009 Rafaël Carré
+ *
+ * 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 "ascodec.h"
+
+void lcd_hw_init(void);
+static inline void lcd_enable_power(bool onoff)
+{
+ ascodec_write(AS3514_DCDC15, onoff ? 1 : 0);
+}
diff --git a/firmware/target/arm/as3525/sansa-clipplus/lcd-clip-plus.c b/firmware/target/arm/as3525/sansa-clipplus/lcd-clip-plus.c
new file mode 100644
index 0000000..66e4de9
--- /dev/null
+++ b/firmware/target/arm/as3525/sansa-clipplus/lcd-clip-plus.c
@@ -0,0 +1,66 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 François Dinel
+ * Copyright (C) 2008-2009 Rafaël Carré
+ *
+ * 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 "config.h"
+
+#include "lcd.h"
+#include "system.h"
+#include "cpu.h"
+
+void lcd_hw_init(void)
+{
+ CGU_PERI |= CGU_SSP_CLOCK_ENABLE;
+
+ SSP_CPSR = AS3525_SSP_PRESCALER; /* OF = 0x10 */
+ SSP_CR0 = (1<<7) | (1<<6) | 7; /* Motorola SPI frame format, 8 bits */
+ SSP_CR1 = (1<<3) | (1<<1); /* SSP Operation enabled */
+ SSP_IMSC = 0; /* No interrupts */
+
+ GPIOA_DIR |= (1<<5);
+ GPIOB_DIR |= (1<<2) | (1<<7);
+ GPIOB_PIN(7) = 0;
+ GPIOA_PIN(5) = (1<<5);
+}
+
+void lcd_write_command(int byte)
+{
+ while(SSP_SR & (1<<4)) /* BSY flag */
+ ;
+
+ GPIOB_PIN(2) = 0;
+ SSP_DATA = byte;
+
+ while(SSP_SR & (1<<4)) /* BSY flag */
+ ;
+}
+
+void lcd_write_data(const fb_data* p_bytes, int count)
+{
+ GPIOB_PIN(2) = (1<<2);
+
+ while (count--)
+ {
+ while(!(SSP_SR & (1<<1))) /* wait until transmit FIFO is not full */
+ ;
+
+ SSP_DATA = *p_bytes++;
+ }
+}
diff --git a/firmware/target/arm/as3525/sansa-clipplus/lcd-clip.h b/firmware/target/arm/as3525/sansa-clipplus/lcd-clip.h
new file mode 100644
index 0000000..7537596
--- /dev/null
+++ b/firmware/target/arm/as3525/sansa-clipplus/lcd-clip.h
@@ -0,0 +1,26 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008-2009 Rafaël Carré
+ *
+ * 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.
+ *
+ ****************************************************************************/
+
+void lcd_hw_init(void);
+static inline void lcd_enable_power(bool onoff)
+{
+ (void) onoff;
+}
diff --git a/firmware/target/arm/as3525/sansa-clipv2/lcd-clip.h b/firmware/target/arm/as3525/sansa-clipv2/lcd-clip.h
new file mode 100644
index 0000000..7537596
--- /dev/null
+++ b/firmware/target/arm/as3525/sansa-clipv2/lcd-clip.h
@@ -0,0 +1,26 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008-2009 Rafaël Carré
+ *
+ * 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.
+ *
+ ****************************************************************************/
+
+void lcd_hw_init(void);
+static inline void lcd_enable_power(bool onoff)
+{
+ (void) onoff;
+}
diff --git a/firmware/target/arm/as3525/sansa-clipv2/lcd-clipv2.c b/firmware/target/arm/as3525/sansa-clipv2/lcd-clipv2.c
new file mode 100644
index 0000000..e405036
--- /dev/null
+++ b/firmware/target/arm/as3525/sansa-clipv2/lcd-clipv2.c
@@ -0,0 +1,85 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2008 François Dinel
+ * Copyright (C) 2008-2009 Rafaël Carré
+ *
+ * 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 "config.h"
+
+#include "lcd.h"
+#include "system.h"
+#include "cpu.h"
+
+void lcd_hw_init(void)
+{
+/* DBOP initialisation, do what OF does */
+ CCU_IO |= (1<<12); /* ?? */
+ CGU_DBOP |= /*(1<<3)*/ 0x18 | AS3525_DBOP_DIV;
+
+ DBOP_CTRL = 0x51004;
+ DBOP_TIMPOL_01 = 0x36A12F;
+ DBOP_TIMPOL_23 = 0xE037E037;
+
+ GPIOB_DIR |= (1<<2)|(1<<5);
+ GPIOB_PIN(5) = (1<<5);
+}
+
+#define LCD_DELAY 10
+
+void lcd_write_command(int byte)
+{
+ volatile int i = 0;
+ while(i<LCD_DELAY) i++;
+
+ /* unset D/C# (data or command) */
+ GPIOB_PIN(2) = 0;
+ DBOP_TIMPOL_23 = 0xE0370036;
+
+ /* Write command */
+ /* Only bits 15:12 and 3:0 of DBOP_DOUT are meaningful */
+ DBOP_DOUT = (byte << 8) | byte;
+
+ /* While push fifo is not empty */
+ while ((DBOP_STAT & (1<<10)) == 0)
+ ;
+
+ DBOP_TIMPOL_23 = 0xE037E037;
+}
+
+void lcd_write_data(const fb_data* p_bytes, int count)
+{
+ volatile int i = 0;
+ while(i<LCD_DELAY) i++;
+
+ /* set D/C# (data or command) */
+ GPIOB_PIN(2) = (1<<2);
+
+ while (count--)
+ {
+ /* Write pixels */
+ /* Only bits 15:12 and 3:0 of DBOP_DOUT are meaningful */
+ DBOP_DOUT = (*p_bytes << 8) | *p_bytes;
+
+ p_bytes++; /* next packed pixels */
+
+ /* Wait if push fifo is full */
+ while ((DBOP_STAT & (1<<6)) != 0);
+ }
+ /* While push fifo is not empty */
+ while ((DBOP_STAT & (1<<10)) == 0);
+}