Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b2670b1c authored by Pierre Ossman's avatar Pierre Ossman
Browse files

wbsd: check for data opcode earlier



Move the check for supported data opcodes to the beginning of the
request function to avoid wedging the card.

Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
parent da7fbe58
Loading
Loading
Loading
Loading
+20 −21
Original line number Diff line number Diff line
@@ -788,24 +788,7 @@ static void wbsd_request(struct mmc_host *mmc, struct mmc_request *mrq)
		goto done;
	}

	/*
	 * Does the request include data?
	 */
	if (cmd->data) {
		wbsd_prepare_data(host, cmd->data);

		if (cmd->data->error != MMC_ERR_NONE)
			goto done;
	}

	wbsd_send_command(host, cmd);

	/*
	 * If this is a data transfer the request
	 * will be finished after the data has
	 * transfered.
	 */
	if (cmd->data && (cmd->error == MMC_ERR_NONE)) {
		/*
		 * The hardware is so delightfully stupid that it has a list
		 * of "data" commands. If a command isn't on this list, it'll
@@ -837,14 +820,30 @@ static void wbsd_request(struct mmc_host *mmc, struct mmc_request *mrq)
				"supported by this controller.\n",
				mmc_hostname(host->mmc), cmd->opcode);
#endif
			cmd->data->error = MMC_ERR_INVALID;

			if (cmd->data->stop)
				wbsd_send_command(host, cmd->data->stop);
			cmd->error = MMC_ERR_INVALID;

			goto done;
		};
	}

	/*
	 * Does the request include data?
	 */
	if (cmd->data) {
		wbsd_prepare_data(host, cmd->data);

		if (cmd->data->error != MMC_ERR_NONE)
			goto done;
	}

	wbsd_send_command(host, cmd);

	/*
	 * If this is a data transfer the request
	 * will be finished after the data has
	 * transfered.
	 */
	if (cmd->data && (cmd->error == MMC_ERR_NONE)) {
		/*
		 * Dirty fix for hardware bug.
		 */