diff mbox

[v2,1/6] mmc: dw_mmc: convert copy of struct device in struct dw_mci to a reference

Message ID 1337267411-28226-2-git-send-email-thomas.abraham@linaro.org
State New
Headers show

Commit Message

thomas.abraham@linaro.org May 17, 2012, 3:10 p.m. UTC
The 'struct dw_mci' maintains a copy of the pdev->dev instance instead of
maintaining a reference to that 'struct device' instance. Any resource
allocated using the device resource management kernel API with the instance
of 'struct device' in 'struct dw_mci' is then incorrect. Fix this by
converting the copy of 'struct device' in 'struct dw_mci' to a reference.

Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
---
 drivers/mmc/host/dw_mmc-pltfm.c |    2 +-
 drivers/mmc/host/dw_mmc.c       |   54 +++++++++++++++++++-------------------
 include/linux/mmc/dw_mmc.h      |    2 +-
 3 files changed, 29 insertions(+), 29 deletions(-)

Comments

Jaehoon Chung May 18, 2012, 2:24 a.m. UTC | #1
Hi Thomas,

I think that also need to consider for using dw_mci-pci.c.

Best Regards,
Jaehoon chung

On 05/18/2012 12:10 AM, Thomas Abraham wrote:

> The 'struct dw_mci' maintains a copy of the pdev->dev instance instead of
> maintaining a reference to that 'struct device' instance. Any resource
> allocated using the device resource management kernel API with the instance
> of 'struct device' in 'struct dw_mci' is then incorrect. Fix this by
> converting the copy of 'struct device' in 'struct dw_mci' to a reference.
> 
> Signed-off-by: Thomas Abraham <thomas.abraham@linaro.org>
> ---
>  drivers/mmc/host/dw_mmc-pltfm.c |    2 +-
>  drivers/mmc/host/dw_mmc.c       |   54 +++++++++++++++++++-------------------
>  include/linux/mmc/dw_mmc.h      |    2 +-
>  3 files changed, 29 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/mmc/host/dw_mmc-pltfm.c b/drivers/mmc/host/dw_mmc-pltfm.c
> index 92ec3eb..9a63299 100644
> --- a/drivers/mmc/host/dw_mmc-pltfm.c
> +++ b/drivers/mmc/host/dw_mmc-pltfm.c
> @@ -43,7 +43,7 @@ static int dw_mci_pltfm_probe(struct platform_device *pdev)
>  		goto err_free;
>  	}
>  
> -	host->dev = pdev->dev;
> +	host->dev = &pdev->dev;
>  	host->irq_flags = 0;
>  	host->pdata = pdev->dev.platform_data;
>  	ret = -ENOMEM;
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index 1532357..01d870a 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -266,7 +266,7 @@ static void dw_mci_start_command(struct dw_mci *host,
>  				 struct mmc_command *cmd, u32 cmd_flags)
>  {
>  	host->cmd = cmd;
> -	dev_vdbg(&host->dev,
> +	dev_vdbg(host->dev,
>  		 "start command: ARGR=0x%08x CMDR=0x%08x\n",
>  		 cmd->arg, cmd_flags);
>  
> @@ -308,7 +308,7 @@ static void dw_mci_dma_cleanup(struct dw_mci *host)
>  
>  	if (data)
>  		if (!data->host_cookie)
> -			dma_unmap_sg(&host->dev,
> +			dma_unmap_sg(host->dev,
>  				     data->sg,
>  				     data->sg_len,
>  				     dw_mci_get_dma_dir(data));
> @@ -334,7 +334,7 @@ static void dw_mci_idmac_complete_dma(struct dw_mci *host)
>  {
>  	struct mmc_data *data = host->data;
>  
> -	dev_vdbg(&host->dev, "DMA complete\n");
> +	dev_vdbg(host->dev, "DMA complete\n");
>  
>  	host->dma_ops->cleanup(host);
>  
> @@ -462,7 +462,7 @@ static int dw_mci_pre_dma_transfer(struct dw_mci *host,
>  			return -EINVAL;
>  	}
>  
> -	sg_len = dma_map_sg(&host->dev,
> +	sg_len = dma_map_sg(host->dev,
>  			    data->sg,
>  			    data->sg_len,
>  			    dw_mci_get_dma_dir(data));
> @@ -505,7 +505,7 @@ static void dw_mci_post_req(struct mmc_host *mmc,
>  		return;
>  
>  	if (data->host_cookie)
> -		dma_unmap_sg(&slot->host->dev,
> +		dma_unmap_sg(slot->host->dev,
>  			     data->sg,
>  			     data->sg_len,
>  			     dw_mci_get_dma_dir(data));
> @@ -531,7 +531,7 @@ static int dw_mci_submit_data_dma(struct dw_mci *host, struct mmc_data *data)
>  
>  	host->using_dma = 1;
>  
> -	dev_vdbg(&host->dev,
> +	dev_vdbg(host->dev,
>  		 "sd sg_cpu: %#lx sg_dma: %#lx sg_len: %d\n",
>  		 (unsigned long)host->sg_cpu, (unsigned long)host->sg_dma,
>  		 sg_len);
> @@ -889,12 +889,12 @@ static void dw_mci_request_end(struct dw_mci *host, struct mmc_request *mrq)
>  		slot = list_entry(host->queue.next,
>  				  struct dw_mci_slot, queue_node);
>  		list_del(&slot->queue_node);
> -		dev_vdbg(&host->dev, "list not empty: %s is next\n",
> +		dev_vdbg(host->dev, "list not empty: %s is next\n",
>  			 mmc_hostname(slot->mmc));
>  		host->state = STATE_SENDING_CMD;
>  		dw_mci_start_request(host, slot);
>  	} else {
> -		dev_vdbg(&host->dev, "list empty\n");
> +		dev_vdbg(host->dev, "list empty\n");
>  		host->state = STATE_IDLE;
>  	}
>  
> @@ -1033,7 +1033,7 @@ static void dw_mci_tasklet_func(unsigned long priv)
>  					data->bytes_xfered = 0;
>  					data->error = -ETIMEDOUT;
>  				} else {
> -					dev_err(&host->dev,
> +					dev_err(host->dev,
>  						"data FIFO error "
>  						"(status=%08x)\n",
>  						status);
> @@ -1750,7 +1750,7 @@ static int __init dw_mci_init_slot(struct dw_mci *host, unsigned int id)
>  	struct mmc_host *mmc;
>  	struct dw_mci_slot *slot;
>  
> -	mmc = mmc_alloc_host(sizeof(struct dw_mci_slot), &host->dev);
> +	mmc = mmc_alloc_host(sizeof(struct dw_mci_slot), host->dev);
>  	if (!mmc)
>  		return -ENOMEM;
>  
> @@ -1862,10 +1862,10 @@ static void dw_mci_cleanup_slot(struct dw_mci_slot *slot, unsigned int id)
>  static void dw_mci_init_dma(struct dw_mci *host)
>  {
>  	/* Alloc memory for sg translation */
> -	host->sg_cpu = dma_alloc_coherent(&host->dev, PAGE_SIZE,
> +	host->sg_cpu = dma_alloc_coherent(host->dev, PAGE_SIZE,
>  					  &host->sg_dma, GFP_KERNEL);
>  	if (!host->sg_cpu) {
> -		dev_err(&host->dev, "%s: could not alloc DMA memory\n",
> +		dev_err(host->dev, "%s: could not alloc DMA memory\n",
>  			__func__);
>  		goto no_dma;
>  	}
> @@ -1873,7 +1873,7 @@ static void dw_mci_init_dma(struct dw_mci *host)
>  	/* Determine which DMA interface to use */
>  #ifdef CONFIG_MMC_DW_IDMAC
>  	host->dma_ops = &dw_mci_idmac_ops;
> -	dev_info(&host->dev, "Using internal DMA controller.\n");
> +	dev_info(host->dev, "Using internal DMA controller.\n");
>  #endif
>  
>  	if (!host->dma_ops)
> @@ -1882,12 +1882,12 @@ static void dw_mci_init_dma(struct dw_mci *host)
>  	if (host->dma_ops->init && host->dma_ops->start &&
>  	    host->dma_ops->stop && host->dma_ops->cleanup) {
>  		if (host->dma_ops->init(host)) {
> -			dev_err(&host->dev, "%s: Unable to initialize "
> +			dev_err(host->dev, "%s: Unable to initialize "
>  				"DMA Controller.\n", __func__);
>  			goto no_dma;
>  		}
>  	} else {
> -		dev_err(&host->dev, "DMA initialization not found.\n");
> +		dev_err(host->dev, "DMA initialization not found.\n");
>  		goto no_dma;
>  	}
>  
> @@ -1895,7 +1895,7 @@ static void dw_mci_init_dma(struct dw_mci *host)
>  	return;
>  
>  no_dma:
> -	dev_info(&host->dev, "Using PIO mode.\n");
> +	dev_info(host->dev, "Using PIO mode.\n");
>  	host->use_dma = 0;
>  	return;
>  }
> @@ -1927,19 +1927,19 @@ int dw_mci_probe(struct dw_mci *host)
>  	u32 fifo_size;
>  
>  	if (!host->pdata || !host->pdata->init) {
> -		dev_err(&host->dev,
> +		dev_err(host->dev,
>  			"Platform data must supply init function\n");
>  		return -ENODEV;
>  	}
>  
>  	if (!host->pdata->select_slot && host->pdata->num_slots > 1) {
> -		dev_err(&host->dev,
> +		dev_err(host->dev,
>  			"Platform data must supply select_slot function\n");
>  		return -ENODEV;
>  	}
>  
>  	if (!host->pdata->bus_hz) {
> -		dev_err(&host->dev,
> +		dev_err(host->dev,
>  			"Platform data must supply bus speed\n");
>  		return -ENODEV;
>  	}
> @@ -1981,7 +1981,7 @@ int dw_mci_probe(struct dw_mci *host)
>  	}
>  
>  	/* Reset all blocks */
> -	if (!mci_wait_reset(&host->dev, host)) {
> +	if (!mci_wait_reset(host->dev, host)) {
>  		ret = -ENODEV;
>  		goto err_dmaunmap;
>  	}
> @@ -2047,7 +2047,7 @@ int dw_mci_probe(struct dw_mci *host)
>  	 * Need to check the version-id and set data-offset for DATA register.
>  	 */
>  	host->verid = SDMMC_GET_VERID(mci_readl(host, VERID));
> -	dev_info(&host->dev, "Version ID is %04x\n", host->verid);
> +	dev_info(host->dev, "Version ID is %04x\n", host->verid);
>  
>  	if (host->verid < DW_MMC_240A)
>  		host->data_offset = DATA_OFFSET;
> @@ -2064,12 +2064,12 @@ int dw_mci_probe(struct dw_mci *host)
>  		   DW_MCI_ERROR_FLAGS | SDMMC_INT_CD);
>  	mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); /* Enable mci interrupt */
>  
> -	dev_info(&host->dev, "DW MMC controller at irq %d, "
> +	dev_info(host->dev, "DW MMC controller at irq %d, "
>  		 "%d bit host data width, "
>  		 "%u deep fifo\n",
>  		 host->irq, width, fifo_size);
>  	if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO)
> -		dev_info(&host->dev, "Internal DMAC interrupt fix enabled.\n");
> +		dev_info(host->dev, "Internal DMAC interrupt fix enabled.\n");
>  
>  	return 0;
>  
> @@ -2088,7 +2088,7 @@ err_workqueue:
>  err_dmaunmap:
>  	if (host->use_dma && host->dma_ops->exit)
>  		host->dma_ops->exit(host);
> -	dma_free_coherent(&host->dev, PAGE_SIZE,
> +	dma_free_coherent(host->dev, PAGE_SIZE,
>  			  host->sg_cpu, host->sg_dma);
>  
>  	if (host->vmmc) {
> @@ -2107,7 +2107,7 @@ void dw_mci_remove(struct dw_mci *host)
>  	mci_writel(host, INTMASK, 0); /* disable all mmc interrupt first */
>  
>  	for (i = 0; i < host->num_slots; i++) {
> -		dev_dbg(&host->dev, "remove slot %d\n", i);
> +		dev_dbg(host->dev, "remove slot %d\n", i);
>  		if (host->slot[i])
>  			dw_mci_cleanup_slot(host->slot[i], i);
>  	}
> @@ -2118,7 +2118,7 @@ void dw_mci_remove(struct dw_mci *host)
>  
>  	free_irq(host->irq, host);
>  	destroy_workqueue(host->card_workqueue);
> -	dma_free_coherent(&host->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma);
> +	dma_free_coherent(host->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma);
>  
>  	if (host->use_dma && host->dma_ops->exit)
>  		host->dma_ops->exit(host);
> @@ -2173,7 +2173,7 @@ int dw_mci_resume(struct dw_mci *host)
>  	if (host->dma_ops->init)
>  		host->dma_ops->init(host);
>  
> -	if (!mci_wait_reset(&host->dev, host)) {
> +	if (!mci_wait_reset(host->dev, host)) {
>  		ret = -ENODEV;
>  		return ret;
>  	}
> diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h
> index 7a7ebd3..a37a573 100644
> --- a/include/linux/mmc/dw_mmc.h
> +++ b/include/linux/mmc/dw_mmc.h
> @@ -156,7 +156,7 @@ struct dw_mci {
>  	u32			fifoth_val;
>  	u16			verid;
>  	u16			data_offset;
> -	struct device		dev;
> +	struct device		*dev;
>  	struct dw_mci_board	*pdata;
>  	struct dw_mci_slot	*slot[MAX_MCI_SLOTS];
>
diff mbox

Patch

diff --git a/drivers/mmc/host/dw_mmc-pltfm.c b/drivers/mmc/host/dw_mmc-pltfm.c
index 92ec3eb..9a63299 100644
--- a/drivers/mmc/host/dw_mmc-pltfm.c
+++ b/drivers/mmc/host/dw_mmc-pltfm.c
@@ -43,7 +43,7 @@  static int dw_mci_pltfm_probe(struct platform_device *pdev)
 		goto err_free;
 	}
 
-	host->dev = pdev->dev;
+	host->dev = &pdev->dev;
 	host->irq_flags = 0;
 	host->pdata = pdev->dev.platform_data;
 	ret = -ENOMEM;
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index 1532357..01d870a 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -266,7 +266,7 @@  static void dw_mci_start_command(struct dw_mci *host,
 				 struct mmc_command *cmd, u32 cmd_flags)
 {
 	host->cmd = cmd;
-	dev_vdbg(&host->dev,
+	dev_vdbg(host->dev,
 		 "start command: ARGR=0x%08x CMDR=0x%08x\n",
 		 cmd->arg, cmd_flags);
 
@@ -308,7 +308,7 @@  static void dw_mci_dma_cleanup(struct dw_mci *host)
 
 	if (data)
 		if (!data->host_cookie)
-			dma_unmap_sg(&host->dev,
+			dma_unmap_sg(host->dev,
 				     data->sg,
 				     data->sg_len,
 				     dw_mci_get_dma_dir(data));
@@ -334,7 +334,7 @@  static void dw_mci_idmac_complete_dma(struct dw_mci *host)
 {
 	struct mmc_data *data = host->data;
 
-	dev_vdbg(&host->dev, "DMA complete\n");
+	dev_vdbg(host->dev, "DMA complete\n");
 
 	host->dma_ops->cleanup(host);
 
@@ -462,7 +462,7 @@  static int dw_mci_pre_dma_transfer(struct dw_mci *host,
 			return -EINVAL;
 	}
 
-	sg_len = dma_map_sg(&host->dev,
+	sg_len = dma_map_sg(host->dev,
 			    data->sg,
 			    data->sg_len,
 			    dw_mci_get_dma_dir(data));
@@ -505,7 +505,7 @@  static void dw_mci_post_req(struct mmc_host *mmc,
 		return;
 
 	if (data->host_cookie)
-		dma_unmap_sg(&slot->host->dev,
+		dma_unmap_sg(slot->host->dev,
 			     data->sg,
 			     data->sg_len,
 			     dw_mci_get_dma_dir(data));
@@ -531,7 +531,7 @@  static int dw_mci_submit_data_dma(struct dw_mci *host, struct mmc_data *data)
 
 	host->using_dma = 1;
 
-	dev_vdbg(&host->dev,
+	dev_vdbg(host->dev,
 		 "sd sg_cpu: %#lx sg_dma: %#lx sg_len: %d\n",
 		 (unsigned long)host->sg_cpu, (unsigned long)host->sg_dma,
 		 sg_len);
@@ -889,12 +889,12 @@  static void dw_mci_request_end(struct dw_mci *host, struct mmc_request *mrq)
 		slot = list_entry(host->queue.next,
 				  struct dw_mci_slot, queue_node);
 		list_del(&slot->queue_node);
-		dev_vdbg(&host->dev, "list not empty: %s is next\n",
+		dev_vdbg(host->dev, "list not empty: %s is next\n",
 			 mmc_hostname(slot->mmc));
 		host->state = STATE_SENDING_CMD;
 		dw_mci_start_request(host, slot);
 	} else {
-		dev_vdbg(&host->dev, "list empty\n");
+		dev_vdbg(host->dev, "list empty\n");
 		host->state = STATE_IDLE;
 	}
 
@@ -1033,7 +1033,7 @@  static void dw_mci_tasklet_func(unsigned long priv)
 					data->bytes_xfered = 0;
 					data->error = -ETIMEDOUT;
 				} else {
-					dev_err(&host->dev,
+					dev_err(host->dev,
 						"data FIFO error "
 						"(status=%08x)\n",
 						status);
@@ -1750,7 +1750,7 @@  static int __init dw_mci_init_slot(struct dw_mci *host, unsigned int id)
 	struct mmc_host *mmc;
 	struct dw_mci_slot *slot;
 
-	mmc = mmc_alloc_host(sizeof(struct dw_mci_slot), &host->dev);
+	mmc = mmc_alloc_host(sizeof(struct dw_mci_slot), host->dev);
 	if (!mmc)
 		return -ENOMEM;
 
@@ -1862,10 +1862,10 @@  static void dw_mci_cleanup_slot(struct dw_mci_slot *slot, unsigned int id)
 static void dw_mci_init_dma(struct dw_mci *host)
 {
 	/* Alloc memory for sg translation */
-	host->sg_cpu = dma_alloc_coherent(&host->dev, PAGE_SIZE,
+	host->sg_cpu = dma_alloc_coherent(host->dev, PAGE_SIZE,
 					  &host->sg_dma, GFP_KERNEL);
 	if (!host->sg_cpu) {
-		dev_err(&host->dev, "%s: could not alloc DMA memory\n",
+		dev_err(host->dev, "%s: could not alloc DMA memory\n",
 			__func__);
 		goto no_dma;
 	}
@@ -1873,7 +1873,7 @@  static void dw_mci_init_dma(struct dw_mci *host)
 	/* Determine which DMA interface to use */
 #ifdef CONFIG_MMC_DW_IDMAC
 	host->dma_ops = &dw_mci_idmac_ops;
-	dev_info(&host->dev, "Using internal DMA controller.\n");
+	dev_info(host->dev, "Using internal DMA controller.\n");
 #endif
 
 	if (!host->dma_ops)
@@ -1882,12 +1882,12 @@  static void dw_mci_init_dma(struct dw_mci *host)
 	if (host->dma_ops->init && host->dma_ops->start &&
 	    host->dma_ops->stop && host->dma_ops->cleanup) {
 		if (host->dma_ops->init(host)) {
-			dev_err(&host->dev, "%s: Unable to initialize "
+			dev_err(host->dev, "%s: Unable to initialize "
 				"DMA Controller.\n", __func__);
 			goto no_dma;
 		}
 	} else {
-		dev_err(&host->dev, "DMA initialization not found.\n");
+		dev_err(host->dev, "DMA initialization not found.\n");
 		goto no_dma;
 	}
 
@@ -1895,7 +1895,7 @@  static void dw_mci_init_dma(struct dw_mci *host)
 	return;
 
 no_dma:
-	dev_info(&host->dev, "Using PIO mode.\n");
+	dev_info(host->dev, "Using PIO mode.\n");
 	host->use_dma = 0;
 	return;
 }
@@ -1927,19 +1927,19 @@  int dw_mci_probe(struct dw_mci *host)
 	u32 fifo_size;
 
 	if (!host->pdata || !host->pdata->init) {
-		dev_err(&host->dev,
+		dev_err(host->dev,
 			"Platform data must supply init function\n");
 		return -ENODEV;
 	}
 
 	if (!host->pdata->select_slot && host->pdata->num_slots > 1) {
-		dev_err(&host->dev,
+		dev_err(host->dev,
 			"Platform data must supply select_slot function\n");
 		return -ENODEV;
 	}
 
 	if (!host->pdata->bus_hz) {
-		dev_err(&host->dev,
+		dev_err(host->dev,
 			"Platform data must supply bus speed\n");
 		return -ENODEV;
 	}
@@ -1981,7 +1981,7 @@  int dw_mci_probe(struct dw_mci *host)
 	}
 
 	/* Reset all blocks */
-	if (!mci_wait_reset(&host->dev, host)) {
+	if (!mci_wait_reset(host->dev, host)) {
 		ret = -ENODEV;
 		goto err_dmaunmap;
 	}
@@ -2047,7 +2047,7 @@  int dw_mci_probe(struct dw_mci *host)
 	 * Need to check the version-id and set data-offset for DATA register.
 	 */
 	host->verid = SDMMC_GET_VERID(mci_readl(host, VERID));
-	dev_info(&host->dev, "Version ID is %04x\n", host->verid);
+	dev_info(host->dev, "Version ID is %04x\n", host->verid);
 
 	if (host->verid < DW_MMC_240A)
 		host->data_offset = DATA_OFFSET;
@@ -2064,12 +2064,12 @@  int dw_mci_probe(struct dw_mci *host)
 		   DW_MCI_ERROR_FLAGS | SDMMC_INT_CD);
 	mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); /* Enable mci interrupt */
 
-	dev_info(&host->dev, "DW MMC controller at irq %d, "
+	dev_info(host->dev, "DW MMC controller at irq %d, "
 		 "%d bit host data width, "
 		 "%u deep fifo\n",
 		 host->irq, width, fifo_size);
 	if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO)
-		dev_info(&host->dev, "Internal DMAC interrupt fix enabled.\n");
+		dev_info(host->dev, "Internal DMAC interrupt fix enabled.\n");
 
 	return 0;
 
@@ -2088,7 +2088,7 @@  err_workqueue:
 err_dmaunmap:
 	if (host->use_dma && host->dma_ops->exit)
 		host->dma_ops->exit(host);
-	dma_free_coherent(&host->dev, PAGE_SIZE,
+	dma_free_coherent(host->dev, PAGE_SIZE,
 			  host->sg_cpu, host->sg_dma);
 
 	if (host->vmmc) {
@@ -2107,7 +2107,7 @@  void dw_mci_remove(struct dw_mci *host)
 	mci_writel(host, INTMASK, 0); /* disable all mmc interrupt first */
 
 	for (i = 0; i < host->num_slots; i++) {
-		dev_dbg(&host->dev, "remove slot %d\n", i);
+		dev_dbg(host->dev, "remove slot %d\n", i);
 		if (host->slot[i])
 			dw_mci_cleanup_slot(host->slot[i], i);
 	}
@@ -2118,7 +2118,7 @@  void dw_mci_remove(struct dw_mci *host)
 
 	free_irq(host->irq, host);
 	destroy_workqueue(host->card_workqueue);
-	dma_free_coherent(&host->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma);
+	dma_free_coherent(host->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma);
 
 	if (host->use_dma && host->dma_ops->exit)
 		host->dma_ops->exit(host);
@@ -2173,7 +2173,7 @@  int dw_mci_resume(struct dw_mci *host)
 	if (host->dma_ops->init)
 		host->dma_ops->init(host);
 
-	if (!mci_wait_reset(&host->dev, host)) {
+	if (!mci_wait_reset(host->dev, host)) {
 		ret = -ENODEV;
 		return ret;
 	}
diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h
index 7a7ebd3..a37a573 100644
--- a/include/linux/mmc/dw_mmc.h
+++ b/include/linux/mmc/dw_mmc.h
@@ -156,7 +156,7 @@  struct dw_mci {
 	u32			fifoth_val;
 	u16			verid;
 	u16			data_offset;
-	struct device		dev;
+	struct device		*dev;
 	struct dw_mci_board	*pdata;
 	struct dw_mci_slot	*slot[MAX_MCI_SLOTS];