summaryrefslogtreecommitdiff
path: root/fw/fe310/eos/dev/drv
diff options
context:
space:
mode:
Diffstat (limited to 'fw/fe310/eos/dev/drv')
-rw-r--r--fw/fe310/eos/dev/drv/arducam.c28
-rw-r--r--fw/fe310/eos/dev/drv/gt911.c14
-rw-r--r--fw/fe310/eos/dev/drv/gt911.h1
-rw-r--r--fw/fe310/eos/dev/drv/ili9806e.c22
-rw-r--r--fw/fe310/eos/dev/drv/pcm1770.c4
-rw-r--r--fw/fe310/eos/dev/drv/platform.h23
-rw-r--r--fw/fe310/eos/dev/drv/sdc_platform.h16
-rw-r--r--fw/fe310/eos/dev/drv/sdcard.c33
-rw-r--r--fw/fe310/eos/dev/drv/sdcard.h4
9 files changed, 83 insertions, 62 deletions
diff --git a/fw/fe310/eos/dev/drv/arducam.c b/fw/fe310/eos/dev/drv/arducam.c
index a50830a..8ac3823 100644
--- a/fw/fe310/eos/dev/drv/arducam.c
+++ b/fw/fe310/eos/dev/drv/arducam.c
@@ -36,21 +36,21 @@
#define ARDUCAM_VAL_GPIO_PWREN 0x04
static uint8_t reg_read(uint8_t addr) {
- uint8_t ret;
+ uint8_t rv;
- drv_spi_cs_set();
+ drv_spi_set_cs();
drv_spi_xchg8(addr, 0);
- ret = drv_spi_xchg8(0, 0);
- drv_spi_cs_clear();
+ rv = drv_spi_xchg8(0, 0);
+ drv_spi_clear_cs();
- return ret;
+ return rv;
}
static void reg_write(uint8_t addr, uint8_t val) {
- drv_spi_cs_set();
+ drv_spi_set_cs();
drv_spi_xchg8(addr | 0x80, 0);
drv_spi_xchg8(val, 0);
- drv_spi_cs_clear();
+ drv_spi_clear_cs();
}
void arducam_capture(void) {
@@ -70,25 +70,25 @@ void arducam_capture_wait(void) {
}
uint32_t arducam_fbuf_size(void) {
- uint32_t ret;
+ uint32_t rv;
- ret = reg_read(ARDUCAM_REG_FIFO_SIZE1);
- ret |= reg_read(ARDUCAM_REG_FIFO_SIZE2) << 8;
- ret |= (reg_read(ARDUCAM_REG_FIFO_SIZE3) & 0x7f) << 16;
- return ret;
+ rv = reg_read(ARDUCAM_REG_FIFO_SIZE1);
+ rv |= reg_read(ARDUCAM_REG_FIFO_SIZE2) << 8;
+ rv |= (reg_read(ARDUCAM_REG_FIFO_SIZE3) & 0x7f) << 16;
+ return rv;
}
void arducam_fbuf_read(uint8_t *buffer, uint16_t sz, int first) {
int i;
- drv_spi_cs_set();
+ drv_spi_set_cs();
drv_spi_xchg8(ARDUCAM_REG_READ_BURST, 0);
if (first) drv_spi_xchg8(0, 0);
for (i=0; i<sz; i++) {
buffer[i] = drv_spi_xchg8(0, 0);
}
- drv_spi_cs_clear();
+ drv_spi_clear_cs();
}
void arducam_fbuf_done(void) {
diff --git a/fw/fe310/eos/dev/drv/gt911.c b/fw/fe310/eos/dev/drv/gt911.c
index cd71d9a..8eb4358 100644
--- a/fw/fe310/eos/dev/drv/gt911.c
+++ b/fw/fe310/eos/dev/drv/gt911.c
@@ -124,6 +124,10 @@ void gt911_wake(void) {
drv_gpio_set(GPIO_INPUT_EN, GT911_PIN_INT);
}
+int gt911_running(void) {
+ return drv_gpio_get(GPIO_INPUT_EN, GT911_PIN_INT);
+}
+
int gt911_cfg_read(uint8_t *cfg_buf) {
int rv;
@@ -148,20 +152,20 @@ int gt911_cfg_print(void) {
rv = gt911_cfg_read(cfg_buf);
if (rv) return rv;
- printf("GT911 CFG:\n");
+ DRV_LOG(DRV_LOG_INFO, "GT911 CFG:\n");
for (i=0; i<GT911_SIZE_CFG-2; i++) {
- printf("%.2X", cfg_buf[i]);
+ DRV_LOG(DRV_LOG_INFO, "%.2X", cfg_buf[i]);
if (i % 8 == 7) {
- printf("\n");
+ DRV_LOG(DRV_LOG_INFO, "\n");
} else {
- printf(" ");
+ DRV_LOG(DRV_LOG_INFO, " ");
}
}
rv = gt911_fw_ver(cfg_buf);
if (rv) return rv;
- printf("GT911 FW VER:%.2X%.2X\n", cfg_buf[1], cfg_buf[0]);
+ DRV_LOG(DRV_LOG_INFO, "GT911 FW VER:%.2X%.2X\n", cfg_buf[1], cfg_buf[0]);
return DRV_OK;
}
diff --git a/fw/fe310/eos/dev/drv/gt911.h b/fw/fe310/eos/dev/drv/gt911.h
index 9db6981..61a6593 100644
--- a/fw/fe310/eos/dev/drv/gt911.h
+++ b/fw/fe310/eos/dev/drv/gt911.h
@@ -10,6 +10,7 @@
void gt911_reset(void);
int gt911_sleep(void);
void gt911_wake(void);
+int gt911_running(void);
int gt911_cfg_read(uint8_t *cfg_buf);
int gt911_cfg_write(uint8_t *cfg_buf);
diff --git a/fw/fe310/eos/dev/drv/ili9806e.c b/fw/fe310/eos/dev/drv/ili9806e.c
index 45aabb7..b57a14c 100644
--- a/fw/fe310/eos/dev/drv/ili9806e.c
+++ b/fw/fe310/eos/dev/drv/ili9806e.c
@@ -5,15 +5,11 @@
#include "platform.h"
#include "ili9806e.h"
-#ifdef DRV_DEBUG
-#include <stdio.h>
-#endif
-
int ili9806e_init(void) {
int rv;
uint8_t chip_id[3];
- drv_spi_cs_set();
+ drv_spi_set_cs();
/* LCD Setting */
drv_spi9bit_write(0, 0xFF); // change to Page 1 CMD
@@ -38,15 +34,13 @@ int ili9806e_init(void) {
drv_spi9bit_write(0, 0x02);
drv_spi9bit_read(&chip_id[2]);
-#ifdef DRV_DEBUG
- printf("LCD CHIP ID: %.2x%.2x%.2x\n", chip_id[0], chip_id[1], chip_id[2]);
-#endif
+ DRV_LOG(DRV_LOG_INFO, "LCD CHIP ID: %.2x%.2x%.2x\n", chip_id[0], chip_id[1], chip_id[2]);
drv_spi9bit_write(0, 0xFE); // disable read
drv_spi9bit_write(1, 0x00);
if (memcmp(chip_id, "\x98\x06\x04", sizeof(chip_id))) {
- drv_spi_cs_clear();
+ drv_spi_clear_cs();
return DRV_ERR_NOTFOUND;
}
@@ -404,28 +398,28 @@ int ili9806e_init(void) {
drv_spi9bit_write(0, 0x29);
drv_sleep(25);
- drv_spi_cs_clear();
+ drv_spi_clear_cs();
return DRV_OK;
}
void ili9806e_sleep(void) {
- drv_spi_cs_set();
+ drv_spi_set_cs();
drv_spi9bit_write(0, 0x28);
drv_sleep(10);
drv_spi9bit_write(0, 0x10);
- drv_spi_cs_clear();
+ drv_spi_clear_cs();
}
void ili9806e_wake(void) {
- drv_spi_cs_set();
+ drv_spi_set_cs();
drv_spi9bit_write(0, 0x11);
drv_sleep(120);
drv_spi9bit_write(0, 0x29);
- drv_spi_cs_clear();
+ drv_spi_clear_cs();
}
diff --git a/fw/fe310/eos/dev/drv/pcm1770.c b/fw/fe310/eos/dev/drv/pcm1770.c
index c617ae9..eec7bd0 100644
--- a/fw/fe310/eos/dev/drv/pcm1770.c
+++ b/fw/fe310/eos/dev/drv/pcm1770.c
@@ -5,8 +5,8 @@
#include "pcm1770.h"
void pcm1770_reg_write(uint8_t addr, uint8_t val) {
- drv_spi_cs_set();
+ drv_spi_set_cs();
drv_spi_xchg8(addr, 0);
drv_spi_xchg8(val, 0);
- drv_spi_cs_clear();
+ drv_spi_clear_cs();
}
diff --git a/fw/fe310/eos/dev/drv/platform.h b/fw/fe310/eos/dev/drv/platform.h
index d1f7248..a2405d5 100644
--- a/fw/fe310/eos/dev/drv/platform.h
+++ b/fw/fe310/eos/dev/drv/platform.h
@@ -1,6 +1,7 @@
#include "board.h"
#include "eos.h"
+#include "log.h"
#include "soc/timer.h"
#include "soc/i2c.h"
#include "soc/spi.h"
@@ -16,17 +17,18 @@
#define DRV_ERR EOS_ERR
#define DRV_ERR_NOTFOUND EOS_ERR_NOTFOUND
-/* should define theese for non-EOS platforms:
-#define GPIO_INPUT_EN
-#define GPIO_OUTPUT_EN
-#define GPIO_OUTPUT_VAL
-*/
+#define DRV_LOG_DEBUG EOS_LOG_DEBUG
+#define DRV_LOG_INFO EOS_LOG_INFO
+#define DRV_LOG_ERR EOS_LOG_ERR
+#define DRV_LOG_NONE EOS_LOG_NONE
+#define DRV_LOG_LEVEL EOS_LOG_LEVEL
+#define DRV_LOG(l, ...) EOS_LOG(l, __VA_ARGS__)
#define GT911_PIN_INT CTP_PIN_INT
#define GT911_PIN_RST CTP_PIN_RST
-#define drv_spi_cs_set eos_spi_cs_set
-#define drv_spi_cs_clear eos_spi_cs_clear
+#define drv_spi_set_cs eos_spi_set_cs
+#define drv_spi_clear_cs eos_spi_clear_cs
#define drv_spi_xchg8 eos_spi_xchg8
#define drv_spi9bit_read eos_spi9bit_read
#define drv_spi9bit_write eos_spi9bit_write
@@ -38,5 +40,12 @@
#define drv_sleep eos_sleep
+/* should define theese for non-EOS platforms:
+#define GPIO_INPUT_EN
+#define GPIO_OUTPUT_EN
+#define GPIO_OUTPUT_VAL
+*/
+
+#define drv_gpio_get eos_gpio_get
#define drv_gpio_set eos_gpio_set
#define drv_gpio_clear eos_gpio_clear
diff --git a/fw/fe310/eos/dev/drv/sdc_platform.h b/fw/fe310/eos/dev/drv/sdc_platform.h
index 5d562c2..daf2670 100644
--- a/fw/fe310/eos/dev/drv/sdc_platform.h
+++ b/fw/fe310/eos/dev/drv/sdc_platform.h
@@ -1,19 +1,31 @@
/* included from sdcard.h - needs relative includes */
#include "../../eos.h"
+#include "../../log.h"
#include "../../soc/timer.h"
#include "../../soc/spi.h"
#include "../sdc_crypto.h"
+#ifdef EOS_DEBUG
+#define SDC_DEBUG
+#endif
+
#define SDC_OK EOS_OK
#define SDC_ERR EOS_ERR
#define SDC_ERR_BUSY EOS_ERR_BUSY
+#define SDC_LOG_DEBUG EOS_LOG_DEBUG
+#define SDC_LOG_INFO EOS_LOG_INFO
+#define SDC_LOG_ERR EOS_LOG_ERR
+#define SDC_LOG_NONE EOS_LOG_NONE
+#define SDC_LOG_LEVEL EOS_LOG_LEVEL
+#define SDC_LOG(l, ...) EOS_LOG(l, __VA_ARGS__)
+
#define sdc_spi_xchg8 eos_spi_xchg8
#define sdc_spi_xchg16 eos_spi_xchg16
#define sdc_spi_xchg32 eos_spi_xchg32
-#define sdc_spi_cs_set eos_spi_cs_set
-#define sdc_spi_cs_clear eos_spi_cs_clear
+#define sdc_spi_set_cs eos_spi_set_cs
+#define sdc_spi_clear_cs eos_spi_clear_cs
#define sdc_sleep eos_sleep
#define sdc_get_tick eos_get_tick
#define sdc_tdelta_ms eos_tdelta_ms
diff --git a/fw/fe310/eos/dev/drv/sdcard.c b/fw/fe310/eos/dev/drv/sdcard.c
index 96b01ae..7d21b3d 100644
--- a/fw/fe310/eos/dev/drv/sdcard.c
+++ b/fw/fe310/eos/dev/drv/sdcard.c
@@ -126,18 +126,18 @@ static void sdc_buf_recv(unsigned char *buffer, uint16_t len) {
}
static void sdc_select(void) {
- sdc_spi_cs_set();
+ sdc_spi_set_cs();
sdc_spi_xchg8(0xff, 0);
}
static void sdc_deselect(void) {
- sdc_spi_cs_clear();
+ sdc_spi_clear_cs();
sdc_spi_xchg8(0xff, 0);
}
static int sdc_xchg_cmd(uint8_t cmd, uint32_t arg, uint8_t flags) {
int i;
- uint8_t ret;
+ uint8_t rv;
uint8_t crc = 0x7f;
cmd |= 0x40;
@@ -156,11 +156,11 @@ static int sdc_xchg_cmd(uint8_t cmd, uint32_t arg, uint8_t flags) {
i = SDC_NCR;
do {
- ret = sdc_xchg8(0xff);
- } while ((ret & 0x80) && --i);
- if (ret & 0x80) return SDC_ERR_BUSY;
+ rv = sdc_xchg8(0xff);
+ } while ((rv & 0x80) && --i);
+ if (rv & 0x80) return SDC_ERR_BUSY;
- return ret;
+ return rv;
}
static int sdc_ready(uint32_t timeout) {
@@ -256,11 +256,12 @@ int sdc_init(uint32_t timeout) {
uint32_t start;
start = sdc_get_tick();
- sdc_sleep(5);
- for (i=10; i--;) sdc_xchg8(0xff); /* 80 dummy cycles */
+ do {
+ if (sdc_tdelta_ms(start) > timeout) return SDC_ERR_BUSY;
+ for (i=10; i--;) sdc_xchg8(0xff); /* 80 dummy cycles */
- rv = sdc_cmd(GO_IDLE_STATE, 0, SDC_CMD_FLAG_CRC, SDC_TIMEOUT_CMD);
- if (rv != SDC_R1_IDLE_STATE) return SDC_RV2ERR(rv);
+ rv = sdc_cmd(GO_IDLE_STATE, 0, SDC_CMD_FLAG_CRC, SDC_TIMEOUT_CMD);
+ } while (rv != SDC_R1_IDLE_STATE);
sdc_select();
rv = sdc_cmd(SEND_IF_COND, 0x1aa, SDC_CMD_FLAG_CRC | SDC_CMD_FLAG_NOCS, sdc_nto(start, timeout));
@@ -341,11 +342,11 @@ int sdc_init(uint32_t timeout) {
if (rv) return rv;
#ifdef SDC_DEBUG
- printf("SDCARD CSD: ");
+ SDC_LOG(SDC_LOG_INFO, "SDCARD CSD: ");
for (i=0; i<16; i++) {
- printf("%.2x ", csd[i]);
+ SDC_LOG(SDC_LOG_INFO, "%.2x ", csd[i]);
}
- printf("\n");
+ SDC_LOG(SDC_LOG_INFO, "\n");
#endif
if (csd[10] & 0x40) _type |= SDC_CAP_ERASE_EN;
}
@@ -366,7 +367,7 @@ void sdc_clear(void) {
sdc_type = SDC_TYPE_NONE;
}
-int sdc_get_sect_count(uint32_t timeout, uint32_t *sectors) {
+int sdc_get_sect_count(uint32_t *sectors, uint32_t timeout) {
int rv;
uint8_t csd[16];
uint32_t start;
@@ -393,7 +394,7 @@ int sdc_get_sect_count(uint32_t timeout, uint32_t *sectors) {
return SDC_OK;
}
-int sdc_get_blk_size(uint32_t timeout, uint32_t *size) {
+int sdc_get_blk_size(uint32_t *size, uint32_t timeout) {
int rv;
uint8_t rbl[64]; /* SD Status or CSD register */
uint32_t start;
diff --git a/fw/fe310/eos/dev/drv/sdcard.h b/fw/fe310/eos/dev/drv/sdcard.h
index 39891bb..b4da896 100644
--- a/fw/fe310/eos/dev/drv/sdcard.h
+++ b/fw/fe310/eos/dev/drv/sdcard.h
@@ -20,8 +20,8 @@ uint8_t sdc_get_type(void);
uint8_t sdc_get_cap(void);
void sdc_clear(void);
-int sdc_get_sect_count(uint32_t timeout, uint32_t *sectors);
-int sdc_get_blk_size(uint32_t timeout, uint32_t *size);
+int sdc_get_sect_count(uint32_t *sectors, uint32_t timeout);
+int sdc_get_blk_size(uint32_t *size, uint32_t timeout);
int sdc_sync(uint32_t timeout);
int sdc_erase(uint32_t blk_start, uint32_t blk_end, uint32_t timeout);
int sdc_sect_read(uint32_t sect, unsigned int count, uint8_t *buffer);