Hi Shashidhar.

On 09/30/2011 02:40 AM, Shashidhar Hiremath wrote:

> Support of PCI mode for the dw_mmc driver This Patch adds the support for the 
> scenario where the Synopsys Designware IP is present on the PCI bus.The patch 
> adds the minimal modifications necessary for the driver to work on PCI 
> platform. The Driver has also been tested for on the PCI platform with single 
> Card Slot.
> 
> Signed-off-by: Shashidhar Hiremath <shashidh...@vayavyalabs.com>
> ---
> v2:
> *As per Suggestions by Will Newton and James Hogan
> -Reduced the number of ifdefs
> 
>  drivers/mmc/host/Kconfig   |   11 ++
>  drivers/mmc/host/dw_mmc.c  |  352 
> ++++++++++++++++++++++++++++++++++++++++++++
>  drivers/mmc/host/dw_mmc.h  |   13 ++
>  include/linux/mmc/dw_mmc.h |    4 +
>  4 files changed, 380 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
> index 8c87096..84d8908 100644
> --- a/drivers/mmc/host/Kconfig
> +++ b/drivers/mmc/host/Kconfig
> @@ -526,6 +526,17 @@ config MMC_DW
>         block, this provides host support for SD and MMC interfaces, in both
>         PIO and external DMA modes.
>  
> +config MMC_DW_PCI
> +     bool "MMC_DW Support On PCI bus"
> +     depends on MMC_DW && PCI
> +     help
> +       This selects the PCI for the Synopsys Designware Mobile Storage IP.
> +
> +       If you have a controller with this interface, say Y or M here.
> +
> +       If unsure, say N.
> +
> +
>  config MMC_DW_IDMAC
>       bool "Internal DMAC interface"
>       depends on MMC_DW
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index ff0f714..0bd9e16 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -21,6 +21,7 @@
>  #include <linux/interrupt.h>
>  #include <linux/ioport.h>
>  #include <linux/module.h>
> +#include <linux/pci.h>
>  #include <linux/platform_device.h>
>  #include <linux/scatterlist.h>
>  #include <linux/seq_file.h>
> @@ -101,6 +102,7 @@ struct dw_mci_slot {
>       int                     last_detect_state;
>  };
>  
> +
>  static struct workqueue_struct *dw_mci_card_workqueue;
>  
>  #if defined(CONFIG_DEBUG_FS)
> @@ -682,6 +684,7 @@ static void dw_mci_set_ios(struct mmc_host *mmc, struct 
> mmc_ios *ios)
>  {
>       struct dw_mci_slot *slot = mmc_priv(mmc);
>       u32 regs;
> +     u32 card_detect;
>  
>       /* set default 1 bit mode */
>       slot->ctype = SDMMC_CTYPE_1BIT;
> @@ -716,6 +719,13 @@ static void dw_mci_set_ios(struct mmc_host *mmc, struct 
> mmc_ios *ios)
>       switch (ios->power_mode) {
>       case MMC_POWER_UP:
>               set_bit(DW_MMC_CARD_NEED_INIT, &slot->flags);
> +             /* Enable Power to the card that has been detected */
> +             card_detect = mci_readl(slot->host, CDETECT);
> +             /* Enabling power for card 0 when PCI is the interface */
> +             mci_writel(slot->host, PWREN, ((~card_detect) & 0x1));

> +             break;
> +     case MMC_POWER_OFF:
> +             mci_writel(slot->host, PWREN, 0);
>               break;


Using shift with slot->id.(1bit per card).

Regards,
Jaehoon Chung
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to