diff options
Diffstat (limited to 'firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c')
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/ata-sd-jz4740.c | 44 |
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() \ |
44 | do { \ | 42 | do { \ |
45 | __gpio_set_pin(MMC_POWER_PIN); \ | 43 | __gpio_set_pin(MMC_POWER_PIN); \ |
@@ -49,8 +47,11 @@ do { \ | |||
49 | do { \ | 47 | do { \ |
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 | ||
63 | static 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 */ |
82 | enum mmc_result_t | 65 | enum 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) | |||
1070 | static void jz_mmc_hardware_init(void) | 1055 | static 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 | ||
1107 | static bool inited = false; | 1095 | static bool inited = false; |
1108 | int sd_init(void) | 1096 | int _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 */ |
1153 | int sd_read_sectors(unsigned long start, int count, void* buf) | 1141 | int _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 */ |
1162 | int sd_write_sectors(unsigned long start, int count, const void* buf) | 1150 | int _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; |