* the GNU General Public License.
*
* Copyright 2003, 2004, 2005, 2006 Develer S.r.l. (http://www.develer.com/)
- * Copyright 2001 Bernardo Innocenti <bernie@codewiz.org>
+ * Copyright 2001 Bernie Innocenti <bernie@codewiz.org>
*
* -->
*
+ * \brief Displaytech 32122A LCD driver
+ *
* \version $Id$
*
- * \author Bernardo Innocenti <bernie@develer.com>
+ * \author Bernie Innocenti <bernie@codewiz.org>
* \author Stefano Fedrigo <aleph@develer.com>
*
- * \brief Displaytech 32122A LCD driver
*/
#include "lcd_32122a_avr.h"
+
+#include "cfg/cfg_lcd.h"
+
+#include <cfg/macros.h> /* BV() */
+#include <cfg/debug.h>
+#include <cfg/module.h>
+
#include <gfx/gfx.h>
#include <drv/timer.h>
#include <cpu/irq.h>
#include <cpu/types.h>
-#include <hw.h>
-#include <cfg/macros.h> /* BV() */
-#include <cfg/debug.h>
#include <avr/io.h>
+
#include <stdbool.h>
#include <inttypes.h>
+#warning TODO:Refactor this module. Split code to hw file.
+
/* Configuration sanity checks */
#if !defined(CONFIG_LCD_SOFTINT_REFRESH) || (CONFIG_LCD_SOFTINT_REFRESH != 0 && CONFIG_LCD_SOFTINT_REFRESH != 1)
#error CONFIG_LCD_SOFTINT_REFRESH must be defined to either 0 or 1
*/
-static inline void lcd_cmd(uint8_t cmd, uint8_t chip)
+static inline void lcd_32122_cmd(uint8_t cmd, uint8_t chip)
{
WAIT_LCD;
}
-static inline uint8_t lcd_read(uint8_t chip)
+static inline uint8_t lcd_32122_read(uint8_t chip)
{
uint8_t data;
return data;
}
-
-static inline void lcd_write(uint8_t c, uint8_t chip)
+static inline void lcd_32122_write(uint8_t c, uint8_t chip)
{
WAIT_LCD;
//LCD_DB_IN;
}
-
-/**
- * Set LCD contrast PWM.
- */
-void lcd_setPwm(int duty)
-{
- ASSERT(duty >= LCD_MIN_PWM);
- ASSERT(duty <= LCD_MAX_PWM);
-
- OCR3C = duty;
-}
-
-
-static void lcd_clear(void)
+static void lcd_32122_clear(void)
{
uint8_t page, j;
for (page = 0; page < LCD_PAGES; ++page)
{
- lcd_cmd(LCD_CMD_COLADDR | 0, LCDF_E1 | LCDF_E2);
- lcd_cmd(LCD_CMD_PAGEADDR | page, LCDF_E1 | LCDF_E2);
+ lcd_32122_cmd(LCD_CMD_COLADDR | 0, LCDF_E1 | LCDF_E2);
+ lcd_32122_cmd(LCD_CMD_PAGEADDR | page, LCDF_E1 | LCDF_E2);
for (j = 0; j < LCD_PAGESIZE; j++)
- lcd_write(0, LCDF_E1 | LCDF_E2);
+ lcd_32122_write(0, LCDF_E1 | LCDF_E2);
}
}
-static void lcd_writeRaster(const uint8_t *raster)
+static void lcd_32122_writeRaster(const uint8_t *raster)
{
uint8_t page, rows;
const uint8_t *right_raster;
for (page = 0; page < LCD_PAGES; ++page)
{
- lcd_cmd(LCD_CMD_PAGEADDR | page, LCDF_E1 | LCDF_E2);
- lcd_cmd(LCD_CMD_COLADDR | 0, LCDF_E1 | LCDF_E2);
+ lcd_32122_cmd(LCD_CMD_PAGEADDR | page, LCDF_E1 | LCDF_E2);
+ lcd_32122_cmd(LCD_CMD_COLADDR | 0, LCDF_E1 | LCDF_E2);
/* Super optimized lamer loop */
right_raster = raster + LCD_PAGESIZE;
rows = LCD_PAGESIZE;
do
{
- lcd_write(*raster++, LCDF_E1);
- lcd_write(*right_raster++, LCDF_E2);
+ lcd_32122_write(*raster++, LCDF_E1);
+ lcd_32122_write(*right_raster++, LCDF_E2);
}
while (--rows);
raster = right_raster;
}
}
-/**
- * Update the LCD display with data from the provided bitmap.
- */
-void lcd_blitBitmap(Bitmap *bm)
-{
- MOD_CHECK(lcd);
- lcd_writeRaster(bm->raster);
-}
-
-
#if CONFIG_LCD_SOFTINT_REFRESH
-static void lcd_refreshSoftint(void)
+static void lcd_32122_refreshSoftint(void)
{
lcd_blit_bitmap(&lcd_bitmap);
timer_add(lcd_refresh_timer);
#endif /* CONFIG_LCD_SOFTINT_REFRESH */
+/**
+ * Set LCD contrast PWM.
+ */
+void lcd_32122_setPwm(int duty)
+{
+ ASSERT(duty >= LCD_MIN_PWM);
+ ASSERT(duty <= LCD_MAX_PWM);
+
+ OCR3C = duty;
+}
+
+/**
+ * Update the LCD display with data from the provided bitmap.
+ */
+void lcd_32122_blitBitmap(Bitmap *bm)
+{
+ MOD_CHECK(lcd);
+ lcd_32122_writeRaster(bm->raster);
+}
+
/**
* Initialize LCD subsystem.
* \note The PWM used for LCD contrast is initialized in drv/pwm.c
* because it is the same PWM used for output attenuation.
*/
-void lcd_init(void)
+void lcd_32122_init(void)
{
MOD_CHECK(timer);
timer_delay(20);
IRQ_SAVE_DISABLE(flags);
- lcd_cmd(LCD_CMD_RESET, LCDF_E1 | LCDF_E2);
- lcd_cmd(LCD_CMD_DISPLAY_ON, LCDF_E1 | LCDF_E2);
- lcd_cmd(LCD_CMD_STARTLINE | 0, LCDF_E1 | LCDF_E2);
+ lcd_32122_cmd(LCD_CMD_RESET, LCDF_E1 | LCDF_E2);
+ lcd_32122_cmd(LCD_CMD_DISPLAY_ON, LCDF_E1 | LCDF_E2);
+ lcd_32122_cmd(LCD_CMD_STARTLINE | 0, LCDF_E1 | LCDF_E2);
/* Initialize anti-corruption walls for raster */
INIT_WALL(wall_before_raster);
IRQ_RESTORE(flags);
- lcd_clear();
- lcd_setpwm(LCD_DEF_PWM);
+ lcd_32122_clear();
+ lcd_32122_setPwm(LCD_DEF_PWM);
gfx_bitmapInit(&lcd_bitmap, lcd_raster, LCD_WIDTH, LCD_HEIGHT);
gfx_bitmapClear(&lcd_bitmap);
MOD_INIT(lcd);
}
+