summaryrefslogtreecommitdiff
path: root/firmware/target/arm/rk27xx/sd-rk27xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/rk27xx/sd-rk27xx.c')
-rw-r--r--firmware/target/arm/rk27xx/sd-rk27xx.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/firmware/target/arm/rk27xx/sd-rk27xx.c b/firmware/target/arm/rk27xx/sd-rk27xx.c
index 2ddfd0cf0a..e5467058de 100644
--- a/firmware/target/arm/rk27xx/sd-rk27xx.c
+++ b/firmware/target/arm/rk27xx/sd-rk27xx.c
@@ -97,7 +97,7 @@ void INT_SD(void)
97 /* get the status */ 97 /* get the status */
98 cmd_error = SD_CMDRES; 98 cmd_error = SD_CMDRES;
99 semaphore_release(&command_completion_signal); 99 semaphore_release(&command_completion_signal);
100 } 100 }
101 101
102 /* data transfer status pending */ 102 /* data transfer status pending */
103 if(status & DATA_XFER_STAT) 103 if(status & DATA_XFER_STAT)
@@ -140,13 +140,15 @@ static void mmu_buff_reset(void)
140 140
141static inline bool card_detect_target(void) 141static inline bool card_detect_target(void)
142{ 142{
143#if defined(RK27_GENERIC) 143#if defined(RK27_GENERIC) || defined(IHIFI770) || defined(IHIFI770C) || defined(IHIFI800)
144/* My generic device uses PC7 pin, active low */ 144 /* PC7, active low */
145 return !(GPIO_PCDR & 0x80); 145 return !(GPIO_PCDR & 0x80);
146#elif defined(HM60X) || defined(HM801) 146#elif defined(HM60X) || defined(HM801)
147 /* PF2, active low */
147 return !(GPIO_PFDR & (1<<2)); 148 return !(GPIO_PFDR & (1<<2));
148#elif defined(MA9) || defined(MA9C) || defined(MA8) || defined(MA8C) 149#elif defined(MA9) || defined(MA9C) || defined(MA8) || defined(MA8C)
149 return (GPIO_PCDR & 0x80); 150 /* PC7, active high */
151 return (GPIO_PCDR & (1<<7));
150#elif defined(IHIFI760) || defined(IHIFI960) 152#elif defined(IHIFI760) || defined(IHIFI960)
151 /* TODO: find out pin */ 153 /* TODO: find out pin */
152 return true; 154 return true;
@@ -190,7 +192,7 @@ static bool send_cmd(const int cmd, const int arg, const int res,
190#if 0 192#if 0
191/* for some misterious reason the card does not report itself as being in TRAN 193/* for some misterious reason the card does not report itself as being in TRAN
192 * but transfers are successful. Rockchip OF does not check the card state 194 * but transfers are successful. Rockchip OF does not check the card state
193 * after SELECT. I checked two different cards. 195 * after SELECT. I checked two different cards.
194 */ 196 */
195static void print_card_status(void) 197static void print_card_status(void)
196{ 198{
@@ -224,7 +226,7 @@ static int sd_wait_for_tran_state(void)
224 { 226 {
225 return 0; 227 return 0;
226 } 228 }
227 229
228 if(TIME_AFTER(current_tick, timeout)) 230 if(TIME_AFTER(current_tick, timeout))
229 { 231 {
230 return -10 * ((response >> 9) & 0xf); 232 return -10 * ((response >> 9) & 0xf);
@@ -265,7 +267,7 @@ static int sd_init_card(void)
265 /* CMD0 Go Idle */ 267 /* CMD0 Go Idle */
266 if(!send_cmd(SD_GO_IDLE_STATE, 0, RES_NO, NULL)) 268 if(!send_cmd(SD_GO_IDLE_STATE, 0, RES_NO, NULL))
267 return -1; 269 return -1;
268 270
269 sleep(1); 271 sleep(1);
270 272
271 /* CMD8 Check for v2 sd card. Must be sent before using ACMD41 273 /* CMD8 Check for v2 sd card. Must be sent before using ACMD41
@@ -671,7 +673,7 @@ int sd_write_sectors(IF_MD(int drive,) unsigned long start, int count,
671#endif 673#endif
672 674
673 return ret; 675 return ret;
674 676
675#endif /* defined(BOOTLOADER) */ 677#endif /* defined(BOOTLOADER) */
676} 678}
677 679