static int kinetis_cdinterrupt(int irq, FAR void *context) { /* All of the work is done by kinetis_mediachange() */ kinetis_mediachange(); return OK; }
int board_app_initialize(uintptr_t arg) { #ifdef NSH_HAVEMMCSD int ret; /* Configure GPIO pins. * * First CD power. The initial state will provide SD power. */ kinetis_pinconfig(GPIO_SD_CARDON); /* Applies power to the card */ /* Attached the card detect interrupt (but don't enable it yet) */ kinetis_pinconfig(GPIO_SD_CARDDETECT); kinetis_pinirqattach(GPIO_SD_CARDDETECT, kinetis_cdinterrupt); /* Mount the SDHC-based MMC/SD block driver */ /* First, get an instance of the SDHC interface */ syslog(LOG_INFO, "Initializing SDHC slot %d\n", CONFIG_NSH_MMCSDSLOTNO); g_nsh.sdhc = sdhc_initialize(CONFIG_NSH_MMCSDSLOTNO); if (!g_nsh.sdhc) { syslog(LOG_ERR, "ERROR: Failed to initialize SDHC slot %d\n", CONFIG_NSH_MMCSDSLOTNO); return -ENODEV; } /* Now bind the SDHC interface to the MMC/SD driver */ syslog(LOG_INFO, "Bind SDHC to the MMC/SD driver, minor=%d\n", CONFIG_NSH_MMCSDMINOR); ret = mmcsd_slotinitialize(CONFIG_NSH_MMCSDMINOR, g_nsh.sdhc); if (ret != OK) { syslog(LOG_ERR, "ERROR: Failed to bind SDHC to the MMC/SD driver: %d\n", ret); return ret; } syslog(LOG_INFO, "Successfully bound SDHC to the MMC/SD driver\n"); /* Handle the initial card state */ kinetis_mediachange(); /* Enable CD interrupts to handle subsequent media changes */ kinetis_pinirqenable(GPIO_SD_CARDDETECT); #endif return OK; }
int nsh_archinitialize(void) { #ifdef NSH_HAVEMMCSD int ret; /* Configure GPIO pins */ /* Attached the card detect interrupt (but don't enable it yet) */ kinetis_pinconfig(GPIO_SD_CARDDETECT); kinetis_pinirqattach(GPIO_SD_CARDDETECT, kinetis_cdinterrupt); /* Configure the write protect GPIO */ kinetis_pinconfig(GPIO_SD_WRPROTECT); /* Mount the SDHC-based MMC/SD block driver */ /* First, get an instance of the SDHC interface */ message("nsh_archinitialize: Initializing SDHC slot %d\n", CONFIG_NSH_MMCSDSLOTNO); g_nsh.sdhc = sdhc_initialize(CONFIG_NSH_MMCSDSLOTNO); if (!g_nsh.sdhc) { message("nsh_archinitialize: Failed to initialize SDHC slot %d\n", CONFIG_NSH_MMCSDSLOTNO); return -ENODEV; } /* Now bind the SDHC interface to the MMC/SD driver */ message("nsh_archinitialize: Bind SDHC to the MMC/SD driver, minor=%d\n", CONFIG_NSH_MMCSDMINOR); ret = mmcsd_slotinitialize(CONFIG_NSH_MMCSDMINOR, g_nsh.sdhc); if (ret != OK) { message("nsh_archinitialize: Failed to bind SDHC to the MMC/SD driver: %d\n", ret); return ret; } message("nsh_archinitialize: Successfully bound SDHC to the MMC/SD driver\n"); /* Handle the initial card state */ kinetis_mediachange(); /* Enable CD interrupts to handle subsequent media changes */ kinetis_pinirqenable(GPIO_SD_CARDDETECT); #endif return OK; }