/* init mmc/sd card we assume that the card is in the slot */ static int mmc_init(unsigned int msc_clkrt_val) { int retries, ret; u8 *resp; //unsigned int msc_clk_div = (__cpm_get_pllout())/24000000; __msc_reset(); mmc_init_gpio(); REG_MSC_IMASK = 0xffff; REG_MSC_IREG = 0xffff; REG_MSC_CLKRT = 6; //200k /* just for reading and writing, suddenly it was reset, and the power of sd card was not broken off */ resp = mmc_cmd(12, 0, 0x41, MSC_CMDAT_RESPONSE_R1); /* reset */ resp = mmc_cmd(0, 0, 0x80, 0); resp = mmc_cmd(8, 0x1aa, 0x1, MSC_CMDAT_RESPONSE_R1); resp = mmc_cmd(55, 0, 0x1, MSC_CMDAT_RESPONSE_R1); if(resp[5] == 0x37) { resp = mmc_cmd(41, 0x40ff8000, 0x3, MSC_CMDAT_RESPONSE_R3); if(resp[5] == 0x3f) ret = sd_init(msc_clkrt_val); return ret; } ret = mmc_found(msc_clkrt_val); return ret; }
static void sd_init(void) { if (ctl_num == 0) __gpio_a_as_msc0_1bit(); else __gpio_e_as_msc1_4bit(); __msc_reset(ctl_num); MMC_IRQ_MASK(); MMC_TO(); }
/* init mmc/sd card we assume that the card is in the slot */ static int mmc_init(void) { int retries; u8 *resp; __gpio_as_msc(); __msc_reset(); MMC_IRQ_MASK(); REG_CPM_MSCCDR = __cpm_get_pllout2()%24000000 ? __cpm_get_pllout2()/24000000 : __cpm_get_pllout2()/24000000 - 1; REG_CPM_CPCCR |= CPM_CPCCR_CE; REG_MSC_CLKRT = 7; //250k REG_MSC_RDTO = 0xffffffff; resp = mmc_cmd(12, 0, 0x41, MSC_CMDAT_RESPONSE_R1); /* reset */ resp = mmc_cmd(0, 0, 0x80, 0); resp = mmc_cmd(8, 0x1aa, 0x1, MSC_CMDAT_RESPONSE_R1); resp = mmc_cmd(55, 0, 0x1, MSC_CMDAT_RESPONSE_R1); if(!(resp[0] & 0x20) && (resp[5] != 0x37)) { resp = mmc_cmd(1, 0x40ff8000, 0x3, MSC_CMDAT_RESPONSE_R3); retries = 500; while (retries-- && resp && !(resp[4] & 0x80)) { resp = mmc_cmd(1, 0x40300000, 0x3, MSC_CMDAT_RESPONSE_R3); udelay(1000); udelay(1000); } if ((resp[4] & 0x80 ) == 0x80) serial_puts("MMC init ok\n"); else serial_puts("MMC init fail\n"); if((resp[4] & 0x60) == 0x40) highcap = 1; else highcap = 0; /* try to get card id */ resp = mmc_cmd(2, 0, 0x2, MSC_CMDAT_RESPONSE_R2); resp = mmc_cmd(3, 0x10, 0x1, MSC_CMDAT_RESPONSE_R1); REG_MSC_CLKRT = 2; /* 16/1 MHz */ resp = mmc_cmd(7, 0x10, 0x1, MSC_CMDAT_RESPONSE_R1); resp = mmc_cmd(6, 0x3b70101, 0x441, MSC_CMDAT_RESPONSE_R1); while(!(REG_MSC_STAT & MSC_STAT_PRG_DONE)) ; REG_MSC_IREG |= MSC_IREG_PRG_DONE; } else sd_init(); return 0; }
/* init mmc/sd card we assume that the card is in the slot */ int mmc_init(void) { int retries, wait; u8 *resp; __gpio_as_msc(); __msc_reset(); MMC_IRQ_MASK(); REG_MSC_CLKRT = 7; //250k REG_MSC_RDTO = 0xffffffff; serial_puts("\n\nMMC/SD INIT\n"); /* reset */ resp = mmc_cmd(0, 0, 0x80, 0); resp = mmc_cmd(8, 0x1aa, 0x1, MSC_CMDAT_RESPONSE_R1); resp = mmc_cmd(55, 0, 0x1, MSC_CMDAT_RESPONSE_R1); if(!(resp[0] & 0x20) && (resp[5] != 0x37)) { serial_puts("MMC card found!\n"); resp = mmc_cmd(1, 0x40ff8000, 0x3, MSC_CMDAT_RESPONSE_R3); retries = 100; while (retries-- && resp && !(resp[4] & 0x80)) { resp = mmc_cmd(1, 0x40300000, 0x3, MSC_CMDAT_RESPONSE_R3); sd_mdelay(10); } if ((resp[4] & 0x80) == 0x80) serial_puts("MMC init ok\n"); else serial_puts("MMC init fail\n"); if((resp[4] & 0x60) == 0x40) highcap = 1; else highcap = 0; /* try to get card id */ resp = mmc_cmd(2, 0, 0x2, MSC_CMDAT_RESPONSE_R2); resp = mmc_cmd(3, 0x10, 0x1, MSC_CMDAT_RESPONSE_R1); REG_MSC_CLKRT = 0; /* 16/1 MHz */ resp = mmc_cmd(7, 0x10, 0x1, MSC_CMDAT_RESPONSE_R1); resp = mmc_cmd(6, 0x3b70101, 0x441, MSC_CMDAT_RESPONSE_R1); } else sd_init(); return 0; }
/* init mmc/sd card we assume that the card is in the slot */ static int mmc_init(void) { int retries; u8 *resp; __gpio_as_msc(); __msc_reset(); MMC_IRQ_MASK(); __cpm_select_msc_clk(0,1); REG_MSC_CLKRT = 7; //250k resp = mmc_cmd(12, 0, 0x41, MSC_CMDAT_RESPONSE_R1); /* reset */ resp = mmc_cmd(0, 0, 0x80, 0); resp = mmc_cmd(8, 0x1aa, 0x1, MSC_CMDAT_RESPONSE_R1); resp = mmc_cmd(55, 0, 0x1, MSC_CMDAT_RESPONSE_R1); if(!(resp[0] & 0x20) && (resp[5] != 0x37)) { resp = mmc_cmd(1, 0xff8000, 0x3, MSC_CMDAT_RESPONSE_R3); retries = 500; while (retries-- && resp && !(resp[4] & 0x80)) { resp = mmc_cmd(1, 0x40300000, 0x3, MSC_CMDAT_RESPONSE_R3); udelay(1000); udelay(1000); } if (resp[4]== 0x80) serial_puts("MMC init ok\n"); else serial_puts("MMC init fail\n"); /* try to get card id */ resp = mmc_cmd(2, 0, 0x2, MSC_CMDAT_RESPONSE_R2); resp = mmc_cmd(3, 0x10, 0x1, MSC_CMDAT_RESPONSE_R1); REG_MSC_CLKRT = 2; /* 16/1 MHz */ resp = mmc_cmd(7, 0x10, 0x1, MSC_CMDAT_RESPONSE_R1); resp = mmc_cmd(6, 0x3b70101, 0x401, MSC_CMDAT_RESPONSE_R1); } else sd_init(); return 0; }