/*********************************************************************************************** ****函数名:init_marvell_driver ****描述:初始化marvell驱动程序,关联配置信息存放于marvel_mode等中 ****参数:无 ****返回:0:失败 其他:struct lbs_private * ***********************************************************************************************/ struct lbs_private * init_marvell_driver(void) { struct mmc_host *host; struct mmc_card *card; struct sdio_func *func; struct lbs_private *priv; MAR_POW(1);//断开模块电源为sdio枚举做准备 host=stm32_probe(); MAR_POW(0);//上电模块电源,sdio正常复位 mmc_rescan(host); printk("init marvel driver ok!\n"); card=host->card;//取出card func=card->sdio_func[0];//取出第一个func if(func){ priv=(struct lbs_private *)sdio_bus_probe(func); if(priv){ printk("device probe success!\n"); return priv; } else printk("device probe failed!\n"); } else printk("cann't find a function device!\n"); return 0; }
/** * mmc_resume_host - resume a previously suspended host * @host: mmc host */ int mmc_resume_host(struct mmc_host *host) { printk(" mmc_resume_host ... \n"); mmc_rescan(&host->detect.work); return 0; }
void mmc_start_host(struct mmc_host *host) { mmc_power_off(host); if (host->caps & MMC_CAP_BOOT_ONTHEFLY) mmc_rescan(&host->detect.work); else mmc_detect_change(host, 0); }
/* * @brief try to scan device and mount FATFS. * @param dev_type: * type of the device,like SD card * @param dev_id: * the ID of the device. * @retval 0 if mount success or other if failed. */ static int fs_ctrl_mount(enum fs_mnt_dev_type dev_type, uint32_t dev_id) { struct mmc_card *card; FRESULT fs_ret; int mmc_ret; int ret = -1; if (mmc_card_create(dev_id) != 0) { FS_ERROR("card create fail\n"); goto out; } card = mmc_card_open(dev_id); if (card == NULL) { FS_ERROR("card open fail\n"); goto err_card; } if (!mmc_card_present(card)) { mmc_ret = mmc_rescan(card, 0); if (mmc_ret != 0) { FS_ERROR("scan fail\n"); mmc_card_close(dev_id); goto err_card; } else { FS_INFO("sd card init\n"); } } mmc_card_close(dev_id); if (fs_ctrl.fs == NULL) { FATFS *fs = malloc(sizeof(FATFS)); if (fs == NULL) { FS_ERROR("no mem\n"); goto err_fs; } fs_ret = f_mount(fs, "", 0); if (fs_ret != FR_OK) { FS_ERROR("mount fail ret:%d\n", fs_ret); free(fs); goto err_fs; } else { FS_INFO("mount success\n"); fs_ctrl.fs = fs; } } ret = 0; goto out; err_fs: if (mmc_card_present(card)) mmc_card_deinit(card); err_card: mmc_card_delete(dev_id, 0); out: if (ret == 0) { fs_ctrl.mount_status = FS_MNT_STATUS_MOUNT_OK; } else { fs_ctrl.mount_status = FS_MNT_STATUS_MOUNT_FAIL; } return ret; }