|
|
|
@ -14,7 +14,9 @@ |
|
|
|
|
#include <asm/io.h> |
|
|
|
|
#include <asm/arch/clock.h> |
|
|
|
|
#include <asm/arch/cpu.h> |
|
|
|
|
#include <asm/arch/gpio.h> |
|
|
|
|
#include <asm/arch/mmc.h> |
|
|
|
|
#include <asm-generic/gpio.h> |
|
|
|
|
|
|
|
|
|
struct sunxi_mmc_host { |
|
|
|
|
unsigned mmc_no; |
|
|
|
@ -346,10 +348,29 @@ out: |
|
|
|
|
return error; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int sunxi_mmc_getcd(struct mmc *mmc) |
|
|
|
|
{ |
|
|
|
|
struct sunxi_mmc_host *mmchost = mmc->priv; |
|
|
|
|
int cd_pin = -1; |
|
|
|
|
|
|
|
|
|
switch (mmchost->mmc_no) { |
|
|
|
|
case 0: cd_pin = sunxi_name_to_gpio(CONFIG_MMC0_CD_PIN); break; |
|
|
|
|
case 1: cd_pin = sunxi_name_to_gpio(CONFIG_MMC1_CD_PIN); break; |
|
|
|
|
case 2: cd_pin = sunxi_name_to_gpio(CONFIG_MMC2_CD_PIN); break; |
|
|
|
|
case 3: cd_pin = sunxi_name_to_gpio(CONFIG_MMC3_CD_PIN); break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (cd_pin == -1) |
|
|
|
|
return 1; |
|
|
|
|
|
|
|
|
|
return !gpio_direction_input(cd_pin); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static const struct mmc_ops sunxi_mmc_ops = { |
|
|
|
|
.send_cmd = mmc_send_cmd, |
|
|
|
|
.set_ios = mmc_set_ios, |
|
|
|
|
.init = mmc_core_init, |
|
|
|
|
.getcd = sunxi_mmc_getcd, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
int sunxi_mmc_init(int sdc_no) |
|
|
|
|