Commit 4b4c7dae authored by Ulf Hansson's avatar Ulf Hansson

mmc: sdricoh_cs: Move MMC_APP_CMD handling to sdricoh_mmc_cmd()

Move MMC_APP_CMD specific handling to be managed by sdricoh_mmc_cmd(), as
this makes the code a bit cleaner.

Cc: Sascha Sommer <saschasommer@freenet.de>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
Link: https://lore.kernel.org/r/20200414161413.3036-11-ulf.hansson@linaro.org
parent cfa2c1dc
...@@ -149,16 +149,25 @@ static int sdricoh_query_status(struct sdricoh_host *host, unsigned int wanted, ...@@ -149,16 +149,25 @@ static int sdricoh_query_status(struct sdricoh_host *host, unsigned int wanted,
} }
static int sdricoh_mmc_cmd(struct sdricoh_host *host, unsigned char opcode, static int sdricoh_mmc_cmd(struct sdricoh_host *host, struct mmc_command *cmd)
unsigned int arg)
{ {
unsigned int status; unsigned int status;
int result = 0; int result = 0;
unsigned int loop = 0; unsigned int loop = 0;
unsigned char opcode = cmd->opcode;
/* reset status reg? */ /* reset status reg? */
sdricoh_writel(host, R21C_STATUS, 0x18); sdricoh_writel(host, R21C_STATUS, 0x18);
/* MMC_APP_CMDs need some special handling */
if (host->app_cmd) {
opcode |= 64;
host->app_cmd = 0;
} else if (opcode == MMC_APP_CMD)
host->app_cmd = 1;
/* fill parameters */ /* fill parameters */
sdricoh_writel(host, R204_CMD_ARG, arg); sdricoh_writel(host, R204_CMD_ARG, cmd->arg);
sdricoh_writel(host, R200_CMD, (0x10000 << 8) | opcode); sdricoh_writel(host, R200_CMD, (0x10000 << 8) | opcode);
/* wait for command completion */ /* wait for command completion */
if (opcode) { if (opcode) {
...@@ -250,28 +259,20 @@ static void sdricoh_request(struct mmc_host *mmc, struct mmc_request *mrq) ...@@ -250,28 +259,20 @@ static void sdricoh_request(struct mmc_host *mmc, struct mmc_request *mrq)
struct mmc_command *cmd = mrq->cmd; struct mmc_command *cmd = mrq->cmd;
struct mmc_data *data = cmd->data; struct mmc_data *data = cmd->data;
struct device *dev = host->dev; struct device *dev = host->dev;
unsigned char opcode = cmd->opcode;
int i; int i;
dev_dbg(dev, "=============================\n"); dev_dbg(dev, "=============================\n");
dev_dbg(dev, "sdricoh_request opcode=%i\n", opcode); dev_dbg(dev, "sdricoh_request opcode=%i\n", cmd->opcode);
sdricoh_writel(host, R21C_STATUS, 0x18); sdricoh_writel(host, R21C_STATUS, 0x18);
/* MMC_APP_CMDs need some special handling */
if (host->app_cmd) {
opcode |= 64;
host->app_cmd = 0;
} else if (opcode == MMC_APP_CMD)
host->app_cmd = 1;
/* read/write commands seem to require this */ /* read/write commands seem to require this */
if (data) { if (data) {
sdricoh_writew(host, R226_BLOCKSIZE, data->blksz); sdricoh_writew(host, R226_BLOCKSIZE, data->blksz);
sdricoh_writel(host, R208_DATAIO, 0); sdricoh_writel(host, R208_DATAIO, 0);
} }
cmd->error = sdricoh_mmc_cmd(host, opcode, cmd->arg); cmd->error = sdricoh_mmc_cmd(host, cmd);
/* read response buffer */ /* read response buffer */
if (cmd->flags & MMC_RSP_PRESENT) { if (cmd->flags & MMC_RSP_PRESENT) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment