aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAndrew Hannam <andrewh@inmarket.com.au>2013-04-06 22:52:37 -0700
committerAndrew Hannam <andrewh@inmarket.com.au>2013-04-06 22:52:37 -0700
commit90f5e851467e5ea14b710ada937409e506820d58 (patch)
treec26d58947cb4030ea69c2c424861849b8cc54476 /drivers
parentbe919fc38d46339a254e0d789c69773f7e600ff5 (diff)
parent22e7150f2d3120fd26f68452bc756b4d0ee52476 (diff)
downloaduGFX-90f5e851467e5ea14b710ada937409e506820d58.tar.gz
uGFX-90f5e851467e5ea14b710ada937409e506820d58.tar.bz2
uGFX-90f5e851467e5ea14b710ada937409e506820d58.zip
Merge pull request #26 from Tectu/master
Merge Tectu Changes
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gdisp/ILI9320/gdisp_lld.c6
-rw-r--r--drivers/gdisp/ILI9320/gdisp_lld_board_olimex_pic32mx_lcd.h114
-rw-r--r--drivers/gdisp/ILI9325/gdisp_lld.c6
-rw-r--r--drivers/ginput/touch/ADS7843/ginput_lld_mouse.c21
4 files changed, 135 insertions, 12 deletions
diff --git a/drivers/gdisp/ILI9320/gdisp_lld.c b/drivers/gdisp/ILI9320/gdisp_lld.c
index f4ff05d5..857d64e2 100644
--- a/drivers/gdisp/ILI9320/gdisp_lld.c
+++ b/drivers/gdisp/ILI9320/gdisp_lld.c
@@ -40,6 +40,8 @@
#include "gdisp_lld_board.h"
#elif defined(BOARD_OLIMEX_STM32_LCD)
#include "gdisp_lld_board_olimex_stm32_lcd.h"
+#elif defined(BOARD_OLIMEX_PIC32MX_LCD)
+ #include "gdisp_lld_board_olimex_pic32mx_lcd.h"
#else
#include "gdisp_lld_board.h"
#endif
@@ -94,9 +96,7 @@ static inline void lld_lcdWriteReg(uint16_t lcdReg, uint16_t lcdRegValue) {
}
static inline uint16_t lld_lcdReadData(void) {
- /* fix this! */
- //return gdisp_lld_read_data;
- return GDISP_RAM;
+ return gdisp_lld_read_data();
}
static inline uint16_t lld_lcdReadReg(uint16_t lcdReg) {
diff --git a/drivers/gdisp/ILI9320/gdisp_lld_board_olimex_pic32mx_lcd.h b/drivers/gdisp/ILI9320/gdisp_lld_board_olimex_pic32mx_lcd.h
new file mode 100644
index 00000000..ec63352a
--- /dev/null
+++ b/drivers/gdisp/ILI9320/gdisp_lld_board_olimex_pic32mx_lcd.h
@@ -0,0 +1,114 @@
+/*
+ ChibiOS/GFX - Copyright (C) 2013
+ Dmytro Milinevskyy <milinevskyy@gmail.com>
+
+ This file is part of ChibiOS/GFX.
+
+ ChibiOS/GFX 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 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/GFX is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * @file drivers/gdisp/ILI9320/gdisp_lld_board_olimex_pic32mx_lcd.h
+ * @brief GDISP Graphic Driver subsystem board interface for the ILI9325 display.
+ *
+ * @addtogroup GDISP
+ * @{
+ */
+
+#ifndef GDISP_LLD_BOARD_H
+#define GDISP_LLD_BOARD_H
+
+#ifndef noinline
+#define noinline __attribute__((noinline))
+#endif
+
+static void gdisp_lld_init_board(void) {
+ // RST
+ palSetPadMode(IOPORTA, 7, PAL_MODE_OUTPUT);
+ palClearPad(IOPORTA, 7);
+
+ // RS
+ palSetPadMode(IOPORTA, 10, PAL_MODE_OUTPUT);
+ palSetPad(IOPORTA, 10);
+
+ // CS
+ palSetPadMode(IOPORTA, 9, PAL_MODE_OUTPUT);
+ palClearPad(IOPORTA, 9);
+
+ // Backlight
+ palSetPadMode(IOPORTD, 3, PAL_MODE_OUTPUT);
+ palSetPad(IOPORTD, 3);
+
+ // PMP setup
+ PMMODE = 0;
+ PMAEN = 0;
+ PMCON = 0;
+ PMMODEbits.MODE = 2;
+ PMMODEbits.WAITB = 0;
+ PMMODEbits.WAITM = 1;
+ PMMODEbits.WAITE = 0;
+ PMCONbits.CSF = 0;
+ PMCONbits.PTRDEN = 1;
+ PMCONbits.PTWREN = 1;
+ PMMODEbits.MODE16 = 1;
+ PMCONbits.PMPEN = 1;
+
+ palClearPad(IOPORTA, 9);
+}
+
+#define PmpWaitBusy() do {} while (PMMODEbits.BUSY)
+
+static noinline void gdisp_lld_reset_pin(bool_t state) {
+ if (state)
+ palClearPad(IOPORTA, 7);
+ else
+ palSetPad(IOPORTA, 7);
+}
+
+static noinline void gdisp_lld_write_index(uint16_t data) {
+ PmpWaitBusy();
+ palClearPad(IOPORTA, 10);
+ PMDIN = data;
+ PmpWaitBusy();
+ palSetPad(IOPORTA, 10);
+}
+
+static noinline void gdisp_lld_write_data(uint16_t data) {
+ PMDIN = data;
+ PmpWaitBusy();
+}
+
+static noinline uint16_t gdisp_lld_read_data(void) {
+ PmpWaitBusy();
+ return PMDIN;
+}
+
+/* if not available, just ignore the argument and return */
+static void gdisp_lld_backlight(uint8_t percentage) {
+ if (percentage)
+ palClearPad(IOPORTD, 3);
+ else
+ palSetPad(IOPORTD, 3);
+}
+
+static inline void acquire_bus(void) {
+ /* Nothing to do here since LCD is the only device on that bus */
+}
+
+static inline void release_bus(void) {
+ /* Nothing to do here since LCD is the only device on that bus */
+}
+#endif /* GDISP_LLD_BOARD_H */
+/** @} */
+
diff --git a/drivers/gdisp/ILI9325/gdisp_lld.c b/drivers/gdisp/ILI9325/gdisp_lld.c
index 88dd4ade..d101d1dd 100644
--- a/drivers/gdisp/ILI9325/gdisp_lld.c
+++ b/drivers/gdisp/ILI9325/gdisp_lld.c
@@ -94,9 +94,7 @@ static inline void lld_lcdWriteReg(uint16_t lcdReg, uint16_t lcdRegValue) {
}
static inline uint16_t lld_lcdReadData(void) {
- /* fix this! */
- //return gdisp_lld_read_data;
- return GDISP_RAM;
+ return gdisp_lld_read_data();
}
static inline uint16_t lld_lcdReadReg(uint16_t lcdReg) {
@@ -153,6 +151,8 @@ bool_t gdisp_lld_init(void) {
gdisp_lld_reset_pin(FALSE);
lld_lcdDelay(1000);
+ DISPLAY_CODE = lld_lcdReadReg(0);
+
// chinese code starts here
lld_lcdWriteReg(0x0000,0x0001);
lld_lcdDelay(10);
diff --git a/drivers/ginput/touch/ADS7843/ginput_lld_mouse.c b/drivers/ginput/touch/ADS7843/ginput_lld_mouse.c
index 11193442..9371760a 100644
--- a/drivers/ginput/touch/ADS7843/ginput_lld_mouse.c
+++ b/drivers/ginput/touch/ADS7843/ginput_lld_mouse.c
@@ -45,6 +45,15 @@
#include "ginput_lld_mouse_board_example.h"
#endif
+#if defined(GINPUT_MOUSE_YX_INVERTED) && GINPUT_MOUSE_YX_INVERTED
+ #define CMD_X 0x91
+ #define CMD_Y 0xD1
+#else
+ #define CMD_X 0xD1
+ #define CMD_Y 0x91
+#endif
+
+
static uint16_t sampleBuf[7];
static coord_t lastx, lasty;
@@ -115,18 +124,18 @@ void ginput_lld_mouse_get_reading(MouseReading *pt) {
* Finally switch on PENIRQ once again - perform a dummy read.
* Once we have the readings, find the medium using our filter function
*/
- read_value(0xD1);
+ read_value(CMD_X);
for(i = 0; i < 7; i++)
- sampleBuf[i] = read_value(0xD1);
- read_value(0xD0);
+ sampleBuf[i] = read_value(CMD_X);
+ read_value(CMD_X-1);
filter();
lastx = (coord_t)sampleBuf[3];
/* Get the Y value using the same process as above */
- read_value(0x91);
+ read_value(CMD_Y);
for(i = 0; i < 7; i++)
- sampleBuf[i] = read_value(0x91);
- read_value(0x90);
+ sampleBuf[i] = read_value(CMD_Y);
+ read_value(CMD_Y-1);
filter();
lasty = (coord_t)sampleBuf[3];