示例#1
0
static int sdio_send_cmd52(sdio_ext_t *sdio, uint32_t cmdarg, uint8_t *resp)
{
	sdio_cmd_t	cmd;
	int			i;

	for (i = 0; i < 5; i++) {
		cmd.opcode  = 52;
		cmd.rsptype = SDIO_RSP_R5;
		cmd.eflags  = SDMMC_CMD_INTR;
		cmd.argument = cmdarg;
		if (sdio_send_command(sdio, &cmd) == MMC_SUCCESS)
			break;
	}

	if (i >= 5)
		return (SDIO_FAILURE);

	if (((cmd.resp[0] & 0xCB00) != 0) || ((cmd.resp[0] & 0x3000) == 0))
		return (SDIO_FAILURE);

	if (resp)
		*resp = (uint8_t)cmd.resp[0];

	return (SDIO_SUCCESS);
}
示例#2
0
static sdio_error_t send_command_wait(uint32_t cmd, uint32_t arg) {
    sdio_error_t result;
    sdio_send_command(cmd, arg);
    while ((result = get_command_result()) == SDIO_EINPROGRESS);
    return result;
}