Commit fdc4e755 authored by Kamlesh Gurudasani's avatar Kamlesh Gurudasani Committed by Ulf Hansson

mmc: android-goldfish: Drop pointer to mmc_host from goldfish_mmc_host

The driver for android-goldfish uses a pointer to get from the private
goldfish_mmc_host structure to the generic mmc_host structure.
However the latter is always immediately preceding the former in
memory, so compute its address with a subtraction (which is cheaper than a
dereference) and drop the superfluous pointer.

No functional change intended.
Signed-off-by: default avatarKamlesh Gurudasani <kamlesh.gurudasani@gmail.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent d1fdb6d8
...@@ -113,7 +113,6 @@ struct goldfish_mmc_host { ...@@ -113,7 +113,6 @@ struct goldfish_mmc_host {
struct mmc_request *mrq; struct mmc_request *mrq;
struct mmc_command *cmd; struct mmc_command *cmd;
struct mmc_data *data; struct mmc_data *data;
struct mmc_host *mmc;
struct device *dev; struct device *dev;
unsigned char id; /* 16xx chips have 2 MMC blocks */ unsigned char id; /* 16xx chips have 2 MMC blocks */
void *virt_base; void *virt_base;
...@@ -175,7 +174,7 @@ goldfish_mmc_start_command(struct goldfish_mmc_host *host, struct mmc_command *c ...@@ -175,7 +174,7 @@ goldfish_mmc_start_command(struct goldfish_mmc_host *host, struct mmc_command *c
resptype = 3; resptype = 3;
break; break;
default: default:
dev_err(mmc_dev(host->mmc), dev_err(mmc_dev(mmc_from_priv(host)),
"Invalid response type: %04x\n", mmc_resp_type(cmd)); "Invalid response type: %04x\n", mmc_resp_type(cmd));
break; break;
} }
...@@ -221,8 +220,8 @@ static void goldfish_mmc_xfer_done(struct goldfish_mmc_host *host, ...@@ -221,8 +220,8 @@ static void goldfish_mmc_xfer_done(struct goldfish_mmc_host *host,
data->sg->length); data->sg->length);
} }
host->data->bytes_xfered += data->sg->length; host->data->bytes_xfered += data->sg->length;
dma_unmap_sg(mmc_dev(host->mmc), data->sg, host->sg_len, dma_unmap_sg(mmc_dev(mmc_from_priv(host)), data->sg,
dma_data_dir); host->sg_len, dma_data_dir);
} }
host->data = NULL; host->data = NULL;
...@@ -236,7 +235,7 @@ static void goldfish_mmc_xfer_done(struct goldfish_mmc_host *host, ...@@ -236,7 +235,7 @@ static void goldfish_mmc_xfer_done(struct goldfish_mmc_host *host,
if (!data->stop) { if (!data->stop) {
host->mrq = NULL; host->mrq = NULL;
mmc_request_done(host->mmc, data->mrq); mmc_request_done(mmc_from_priv(host), data->mrq);
return; return;
} }
...@@ -278,7 +277,7 @@ static void goldfish_mmc_cmd_done(struct goldfish_mmc_host *host, ...@@ -278,7 +277,7 @@ static void goldfish_mmc_cmd_done(struct goldfish_mmc_host *host,
if (host->data == NULL || cmd->error) { if (host->data == NULL || cmd->error) {
host->mrq = NULL; host->mrq = NULL;
mmc_request_done(host->mmc, cmd->mrq); mmc_request_done(mmc_from_priv(host), cmd->mrq);
} }
} }
...@@ -313,7 +312,7 @@ static irqreturn_t goldfish_mmc_irq(int irq, void *dev_id) ...@@ -313,7 +312,7 @@ static irqreturn_t goldfish_mmc_irq(int irq, void *dev_id)
struct mmc_request *mrq = host->mrq; struct mmc_request *mrq = host->mrq;
mrq->cmd->error = -ETIMEDOUT; mrq->cmd->error = -ETIMEDOUT;
host->mrq = NULL; host->mrq = NULL;
mmc_request_done(host->mmc, mrq); mmc_request_done(mmc_from_priv(host), mrq);
} }
if (end_command) if (end_command)
...@@ -339,12 +338,13 @@ static irqreturn_t goldfish_mmc_irq(int irq, void *dev_id) ...@@ -339,12 +338,13 @@ static irqreturn_t goldfish_mmc_irq(int irq, void *dev_id)
u32 state = GOLDFISH_MMC_READ(host, MMC_STATE); u32 state = GOLDFISH_MMC_READ(host, MMC_STATE);
pr_info("%s: Card detect now %d\n", __func__, pr_info("%s: Card detect now %d\n", __func__,
(state & MMC_STATE_INSERTED)); (state & MMC_STATE_INSERTED));
mmc_detect_change(host->mmc, 0); mmc_detect_change(mmc_from_priv(host), 0);
} }
if (!end_command && !end_transfer && !state_changed && !cmd_timeout) { if (!end_command && !end_transfer && !state_changed && !cmd_timeout) {
status = GOLDFISH_MMC_READ(host, MMC_INT_STATUS); status = GOLDFISH_MMC_READ(host, MMC_INT_STATUS);
dev_info(mmc_dev(host->mmc),"spurious irq 0x%04x\n", status); dev_info(mmc_dev(mmc_from_priv(host)), "spurious irq 0x%04x\n",
status);
if (status != 0) { if (status != 0) {
GOLDFISH_MMC_WRITE(host, MMC_INT_STATUS, status); GOLDFISH_MMC_WRITE(host, MMC_INT_STATUS, status);
GOLDFISH_MMC_WRITE(host, MMC_INT_ENABLE, 0); GOLDFISH_MMC_WRITE(host, MMC_INT_ENABLE, 0);
...@@ -383,7 +383,7 @@ static void goldfish_mmc_prepare_data(struct goldfish_mmc_host *host, ...@@ -383,7 +383,7 @@ static void goldfish_mmc_prepare_data(struct goldfish_mmc_host *host,
dma_data_dir = mmc_get_dma_dir(data); dma_data_dir = mmc_get_dma_dir(data);
host->sg_len = dma_map_sg(mmc_dev(host->mmc), data->sg, host->sg_len = dma_map_sg(mmc_dev(mmc_from_priv(host)), data->sg,
sg_len, dma_data_dir); sg_len, dma_data_dir);
host->dma_done = 0; host->dma_done = 0;
host->dma_in_use = 1; host->dma_in_use = 1;
...@@ -461,7 +461,6 @@ static int goldfish_mmc_probe(struct platform_device *pdev) ...@@ -461,7 +461,6 @@ static int goldfish_mmc_probe(struct platform_device *pdev)
} }
host = mmc_priv(mmc); host = mmc_priv(mmc);
host->mmc = mmc;
pr_err("mmc: Mapping %lX to %lX\n", (long)res->start, (long)res->end); pr_err("mmc: Mapping %lX to %lX\n", (long)res->start, (long)res->end);
host->reg_base = ioremap(res->start, resource_size(res)); host->reg_base = ioremap(res->start, resource_size(res));
...@@ -508,8 +507,7 @@ static int goldfish_mmc_probe(struct platform_device *pdev) ...@@ -508,8 +507,7 @@ static int goldfish_mmc_probe(struct platform_device *pdev)
ret = device_create_file(&pdev->dev, &dev_attr_cover_switch); ret = device_create_file(&pdev->dev, &dev_attr_cover_switch);
if (ret) if (ret)
dev_warn(mmc_dev(host->mmc), dev_warn(mmc_dev(mmc), "Unable to create sysfs attributes\n");
"Unable to create sysfs attributes\n");
GOLDFISH_MMC_WRITE(host, MMC_SET_BUFFER, host->phys_base); GOLDFISH_MMC_WRITE(host, MMC_SET_BUFFER, host->phys_base);
GOLDFISH_MMC_WRITE(host, MMC_INT_ENABLE, GOLDFISH_MMC_WRITE(host, MMC_INT_ENABLE,
...@@ -525,7 +523,7 @@ static int goldfish_mmc_probe(struct platform_device *pdev) ...@@ -525,7 +523,7 @@ static int goldfish_mmc_probe(struct platform_device *pdev)
dma_alloc_failed: dma_alloc_failed:
iounmap(host->reg_base); iounmap(host->reg_base);
ioremap_failed: ioremap_failed:
mmc_free_host(host->mmc); mmc_free_host(mmc);
err_alloc_host_failed: err_alloc_host_failed:
return ret; return ret;
} }
...@@ -533,14 +531,15 @@ static int goldfish_mmc_probe(struct platform_device *pdev) ...@@ -533,14 +531,15 @@ static int goldfish_mmc_probe(struct platform_device *pdev)
static int goldfish_mmc_remove(struct platform_device *pdev) static int goldfish_mmc_remove(struct platform_device *pdev)
{ {
struct goldfish_mmc_host *host = platform_get_drvdata(pdev); struct goldfish_mmc_host *host = platform_get_drvdata(pdev);
struct mmc_host *mmc = mmc_from_priv(host);
BUG_ON(host == NULL); BUG_ON(host == NULL);
mmc_remove_host(host->mmc); mmc_remove_host(mmc);
free_irq(host->irq, host); free_irq(host->irq, host);
dma_free_coherent(&pdev->dev, BUFFER_SIZE, host->virt_base, host->phys_base); dma_free_coherent(&pdev->dev, BUFFER_SIZE, host->virt_base, host->phys_base);
iounmap(host->reg_base); iounmap(host->reg_base);
mmc_free_host(host->mmc); mmc_free_host(mmc);
return 0; return 0;
} }
......
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