Exemplo n.º 1
0
/***********************************************************************************************
****函数名: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;
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
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);
}
Exemplo n.º 4
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;
}