summaryrefslogtreecommitdiff
path: root/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c')
-rw-r--r--firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c44
1 files changed, 16 insertions, 28 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c b/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c
index ccd71630a6..22e274b4d1 100644
--- a/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c
+++ b/firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c
@@ -23,6 +23,7 @@
23#include "jz4740.h" 23#include "jz4740.h"
24#include "ata.h" 24#include "ata.h"
25#include "ata-sd-target.h" 25#include "ata-sd-target.h"
26#include "sd.h"
26#include "system.h" 27#include "system.h"
27#include "kernel.h" 28#include "kernel.h"
28#include "panic.h" 29#include "panic.h"
@@ -36,10 +37,7 @@ static struct wakeup sd_wakeup;
36//#define DEBUG(x...) DEBUGF(x); 37//#define DEBUG(x...) DEBUGF(x);
37#define DEBUG(x...) printf(x); 38#define DEBUG(x...) printf(x);
38 39
39#define MMC_CD_PIN (29 + 1 * 32) /* Pin to check card insertion */ 40#ifdef MMC_POWER_PIN
40#define MMC_POWER_PIN (30 + 1 * 32) /* Pin to enable/disable card power */
41//#define MMC_PW_PIN (14 + 3 * 32) /* Pin to check protect card */
42
43#define MMC_POWER_OFF() \ 41#define MMC_POWER_OFF() \
44do { \ 42do { \
45 __gpio_set_pin(MMC_POWER_PIN); \ 43 __gpio_set_pin(MMC_POWER_PIN); \
@@ -49,8 +47,11 @@ do { \
49do { \ 47do { \
50 __gpio_clear_pin(MMC_POWER_PIN); \ 48 __gpio_clear_pin(MMC_POWER_PIN); \
51} while (0) 49} while (0)
50#endif
52 51
52#ifdef MMC_CD_PIN
53#define MMC_INSERT_STATUS() __gpio_get_pin(MMC_CD_PIN) 53#define MMC_INSERT_STATUS() __gpio_get_pin(MMC_CD_PIN)
54#endif
54 55
55#define MMC_RESET() __msc_reset() 56#define MMC_RESET() __msc_reset()
56 57
@@ -60,24 +61,6 @@ do { \
60 REG_MSC_IREG = 0xffff; \ 61 REG_MSC_IREG = 0xffff; \
61} while (0) 62} while (0)
62 63
63static inline void mmc_init_gpio(void)
64{
65 __gpio_as_msc();
66#ifdef MMC_POWER_PIN
67 __gpio_as_output(MMC_POWER_PIN);
68 __gpio_disable_pull(MMC_POWER_PIN);
69 __gpio_set_pin(MMC_POWER_PIN);
70#endif
71#ifdef MMC_CD_PIN
72 __gpio_as_input(MMC_CD_PIN);
73 __gpio_disable_pull(MMC_CD_PIN);
74#endif
75#ifdef MMC_PW_PIN
76 __gpio_as_input(MMC_PW_PIN);
77 __gpio_disable_pull(MMC_PW_PIN);
78#endif
79}
80
81/* Error codes */ 64/* Error codes */
82enum mmc_result_t 65enum mmc_result_t
83{ 66{
@@ -509,7 +492,7 @@ static void jz_mmc_get_response(struct mmc_request *request)
509 buf[i] = (data >> 8) & 0xff; 492 buf[i] = (data >> 8) & 0xff;
510 buf[i + 1] = data & 0xff; 493 buf[i + 1] = data & 0xff;
511 } 494 }
512 DEBUG("request %d, response [", request->rtype); 495 DEBUG("request %d, response []", request->rtype);
513 break; 496 break;
514 } 497 }
515 case RESPONSE_NONE: 498 case RESPONSE_NONE:
@@ -768,12 +751,14 @@ static int jz_mmc_exec_cmd(struct mmc_request *request)
768 /* On reset, stop MMC clock */ 751 /* On reset, stop MMC clock */
769 jz_mmc_stop_clock(); 752 jz_mmc_stop_clock();
770 } 753 }
754#if 0
771 if (request->cmd == MMC_SEND_OP_COND) 755 if (request->cmd == MMC_SEND_OP_COND)
772 { 756 {
773 DEBUG("Have a MMC card"); 757 DEBUG("Have a MMC card");
774 /* always use 1bit for MMC */ 758 /* always use 1bit for MMC */
775 use_4bit = 0; 759 use_4bit = 0;
776 } 760 }
761#endif
777 if (request->cmd == SET_BUS_WIDTH) 762 if (request->cmd == SET_BUS_WIDTH)
778 { 763 {
779 if (request->arg == 0x2) 764 if (request->arg == 0x2)
@@ -1070,13 +1055,16 @@ void MSC(void)
1070static void jz_mmc_hardware_init(void) 1055static void jz_mmc_hardware_init(void)
1071{ 1056{
1072 mmc_init_gpio(); /* init GPIO */ 1057 mmc_init_gpio(); /* init GPIO */
1058#ifdef MMC_POWER_ON
1073 MMC_POWER_ON(); /* turn on power of card */ 1059 MMC_POWER_ON(); /* turn on power of card */
1060#endif
1074 MMC_RESET(); /* reset mmc/sd controller */ 1061 MMC_RESET(); /* reset mmc/sd controller */
1075 MMC_IRQ_MASK(); /* mask all IRQs */ 1062 MMC_IRQ_MASK(); /* mask all IRQs */
1076 jz_mmc_stop_clock(); /* stop MMC/SD clock */ 1063 jz_mmc_stop_clock(); /* stop MMC/SD clock */
1064 __cpm_start_msc();
1077#ifdef MMC_DMA_ENABLE 1065#ifdef MMC_DMA_ENABLE
1078 __cpm_start_dmac(); 1066// __cpm_start_dmac();
1079 __dmac_enable_module(); 1067// __dmac_enable_module();
1080// REG_DMAC_DMACR = DMAC_DMACR_DME; 1068// REG_DMAC_DMACR = DMAC_DMACR_DME;
1081#if MMC_DMA_INTERRUPT 1069#if MMC_DMA_INTERRUPT
1082 mmc_dma_rx_sem = OSSemCreate(0); 1070 mmc_dma_rx_sem = OSSemCreate(0);
@@ -1105,7 +1093,7 @@ static void mmc_send_cmd(struct mmc_request *request, int cmd, unsigned int arg,
1105} 1093}
1106 1094
1107static bool inited = false; 1095static bool inited = false;
1108int sd_init(void) 1096int _sd_init(void)
1109{ 1097{
1110 if(!inited) 1098 if(!inited)
1111 { 1099 {
@@ -1150,7 +1138,7 @@ tCardInfo* card_get_info_target(int card_no)
1150} 1138}
1151 1139
1152/* TODO */ 1140/* TODO */
1153int sd_read_sectors(unsigned long start, int count, void* buf) 1141int _sd_read_sectors(unsigned long start, int count, void* buf)
1154{ 1142{
1155 (void)start; 1143 (void)start;
1156 (void)count; 1144 (void)count;
@@ -1159,7 +1147,7 @@ int sd_read_sectors(unsigned long start, int count, void* buf)
1159} 1147}
1160 1148
1161/* TODO */ 1149/* TODO */
1162int sd_write_sectors(unsigned long start, int count, const void* buf) 1150int _sd_write_sectors(unsigned long start, int count, const void* buf)
1163{ 1151{
1164 (void)start; 1152 (void)start;
1165 (void)count; 1153 (void)count;