[PATCH v2] ARM: EXYNOS4: Add platform device for dwmci driver.

Seungwon Jeon tgih.jun at samsung.com
Fri Jul 15 05:35:45 EDT 2011


Hi

Kyungmin Park wrote:
> On Fri, Jul 15, 2011 at 3:58 PM, Seungwon Jeon <tgih.jun at samsung.com>
> wrote:
> > Hi,
> >
> > Kyungmin Park wrote:
> >> On Thu, Jul 14, 2011 at 6:53 PM, Seungwon Jeon <tgih.jun at samsung.com>
> >> wrote:
> >> > This patch add platform devices for Synopsys DesignWare Multimedia
> Card
> >> > Interface driver.
> >> >
> >> > Signed-off-by: Seungwon Jeon <tgih.jun at samsung.com>
> >> > ---
> >> >  arch/arm/mach-exynos4/Kconfig             |   12 ++++
> >> >  arch/arm/mach-exynos4/Makefile            |    1 +
> >> >  arch/arm/mach-exynos4/dev-dwmci.c         |   88
> >> +++++++++++++++++++++++++++++
> >> >  arch/arm/mach-exynos4/include/mach/irqs.h |    1 +
> >> >  arch/arm/mach-exynos4/include/mach/map.h  |    1 +
> >> >  arch/arm/plat-samsung/include/plat/devs.h |    1 +
> >> >  6 files changed, 104 insertions(+), 0 deletions(-)
> >> >  create mode 100644 arch/arm/mach-exynos4/dev-dwmci.c
> >> >
> >> > diff --git a/arch/arm/mach-exynos4/Kconfig b/arch/arm/mach-
> >> exynos4/Kconfig
> >> > index 5115b90..2ec5b96 100644
> >> > --- a/arch/arm/mach-exynos4/Kconfig
> >> > +++ b/arch/arm/mach-exynos4/Kconfig
> >> > @@ -35,6 +35,11 @@ config EXYNOS4_DEV_SYSMMU
> >> >        help
> >> >          Common setup code for SYSTEM MMU in EXYNOS4
> >> >
> >> > +config EXYNOS4_DEV_DWMCI
> >> > +       bool
> >> > +       help
> >> > +         Compile in platform device definitions for DWMCI
> >> > +
> >> >  config EXYNOS4_SETUP_I2C1
> >> >        bool
> >> >        help
> >> > @@ -200,6 +205,13 @@ comment "Configuration for HSMMC bus width"
> >> >
> >> >  menu "Use 8-bit bus width"
> >> >
> >> > +config EXYNOS4_DWMCI_8BIT
> >> > +       bool "DWMCI with 8-bit bus"
> >> > +       depends on EXYNOS4_DEV_DWMCI
> >> > +       help
> >> > +         Support DWMCI 8-bit bus.
> >> > +         If selected, Channel 1 is disabled.
> >>
> >> No it should be determined at runtime instead of compile time.
> >
> > Sorry for that I don't understand your meaning.
> > Perhaps, you want to decide the width according to the board type at
> runtime?
> > I expect the reason and description about your comment.
> > Bus width is board-specific information related with capability
> > which is not determined in runtime.
> > So we should decide and choice bus width considering the board target
> > before compiling.
> It prohibit to make a single kernel as other platform does.
> As you know, now we can select multiple board support at exynos4.
> some board want to use 4-bit, other board want to use 8-bit. then how
> to select proper bus width?

Right, it can't be satisfied in single kernel image. 
But device driver seems not to be bothered about value of get_bus_wd().
If value is more than four, it doesn't matter whether 4 or 8.
I'll remove the configuration option.
Thank you.

> 
> >
> > Best regards,
> > Seungwon Jeon.
> >
> >>
> >> > +
> >> >  config EXYNOS4_SDHCI_CH0_8BIT
> >> >        bool "Channel 0 with 8-bit bus"
> >> >        help
> >> > diff --git a/arch/arm/mach-exynos4/Makefile b/arch/arm/mach-
> >> exynos4/Makefile
> >> > index 60fe5ec..eeeaada 100644
> >> > --- a/arch/arm/mach-exynos4/Makefile
> >> > +++ b/arch/arm/mach-exynos4/Makefile
> >> > @@ -43,6 +43,7 @@ obj-y                                 += dev-audio.o
> >> >  obj-$(CONFIG_EXYNOS4_DEV_AHCI)         += dev-ahci.o
> >> >  obj-$(CONFIG_EXYNOS4_DEV_PD)           += dev-pd.o
> >> >  obj-$(CONFIG_EXYNOS4_DEV_SYSMMU)       += dev-sysmmu.o
> >> > +obj-$(CONFIG_EXYNOS4_DEV_DWMCI)        += dev-dwmci.o
> >> >
> >> >  obj-$(CONFIG_EXYNOS4_SETUP_FIMC)       += setup-fimc.o
> >> >  obj-$(CONFIG_EXYNOS4_SETUP_I2C1)       += setup-i2c1.o
> >> > diff --git a/arch/arm/mach-exynos4/dev-dwmci.c b/arch/arm/mach-
> >> exynos4/dev-dwmci.c
> >> > new file mode 100644
> >> > index 0000000..a0defa4
> >> > --- /dev/null
> >> > +++ b/arch/arm/mach-exynos4/dev-dwmci.c
> >> > @@ -0,0 +1,88 @@
> >> > +/*
> >> > + * linuxarch/arm/mach-exynos4/dev-dwmci.c
> >> > + *
> >> > + * Copyright (c) 2011 Samsung Electronics Co., Ltd.
> >> > + *             http://www.samsung.com
> >> > + *
> >> > + * Platform device for Synopsys DesignWare Mobile Storage IP
> >> > + *
> >> > + * This program is free software; you can redistribute it and/or
> modify
> >> > + * it under the terms of the GNU General Public License as published
> by
> >> > + * the Free Software Foundation; either version 2 of the License, or
> >> > + * (at your option) any later version.
> >> > + */
> >> > +
> >> > +#include <linux/kernel.h>
> >> > +#include <linux/dma-mapping.h>
> >> > +#include <linux/platform_device.h>
> >> > +#include <linux/interrupt.h>
> >> > +#include <linux/mmc/dw_mmc.h>
> >> > +#include <linux/mmc/host.h>
> >> > +#include <linux/io.h>
> >> > +#include <linux/gpio.h>
> >> > +
> >> > +#include <plat/devs.h>
> >> > +#include <plat/cpu.h>
> >> > +#include <plat/gpio-cfg.h>
> >> > +
> >> > +#include <mach/map.h>
> >> > +
> >> > +#ifdef EXYNOS4_DWMCI_8BIT
> >> > +#define BUS_WIDTH 8
> >> > +#else
> >> > +#define BUS_WIDTH 4
> >> > +#endif
> >>
> >> Right, each board can modify the bus width. so it needs the helper
> >> function to setup.
> >> > +
> >> > +static int exynos4_dwmci_get_ocr(u32 slot_id)
> >> > +{
> >> > +       return MMC_VDD_32_33 | MMC_VDD_33_34;
> >> > +}
> >> > +
> >> > +static int exynos4_dwmci_get_bus_wd(u32 slot_id)
> >> > +{
> >> > +       return BUS_WIDTH;
> >> > +}
> >> > +
> >> > +static int exynos4_dwmci_init(u32 slot_id, irq_handler_t handler,
> void
> >> *data)
> >> > +{
> >> > +       return 0;
> >> > +}
> >> > +
> >> > +static struct resource exynos4_dwmci_resource[] = {
> >> > +       [0] = {
> >> > +               .start = EXYNOS4_PA_DWMCI,
> >> > +               .end   = EXYNOS4_PA_DWMCI + SZ_4K - 1,
> >> > +               .flags = IORESOURCE_MEM,
> >> > +       },
> >> > +       [1] = {
> >> > +               .start = IRQ_DWMCI,
> >> > +               .end   = IRQ_DWMCI,
> >> > +               .flags = IORESOURCE_IRQ,
> >> > +       }
> >> > +};
> >> > +
> >> > +static struct dw_mci_board exynos4_dwci_pdata = {
> >> > +       .num_slots                      = 1,
> >> > +       .quirks                         =
> DW_MCI_QUIRK_BROKEN_CARD_DETECTION,
> >> > +       .bus_hz                         = 80*1000*1000,
> >> > +       .detect_delay_ms        = 200,
> >> > +       .init                           = exynos4_dwmci_init,
> >> > +       .get_ocr                        = exynos4_dwmci_get_ocr,
> >> > +       .get_bus_wd                     = exynos4_dwmci_get_bus_wd,
> >> > +       .select_slot            = NULL,
> >> > +};
> >> > +
> >> > +static u64 exynos4_dwmci_dmamask = DMA_BIT_MASK(32);
> >> > +
> >> > +struct platform_device exynos4_device_dwmci = {
> >> > +       .name           = "dw_mmc",
> >> > +       .id             = -1,
> >> > +       .num_resources  = ARRAY_SIZE(exynos4_dwmci_resource),
> >> > +       .resource       = exynos4_dwmci_resource,
> >> > +       .dev            = {
> >> > +               .dma_mask               = &exynos4_dwmci_dmamask,
> >> > +               .coherent_dma_mask      = DMA_BIT_MASK(32),
> >> > +               .platform_data  = &exynos4_dwci_pdata,
> >> > +       },
> >> > +};
> >> > +
> >> > diff --git a/arch/arm/mach-exynos4/include/mach/irqs.h
> b/arch/arm/mach-
> >> exynos4/include/mach/irqs.h
> >> > index 5d03730..b720246 100644
> >> > --- a/arch/arm/mach-exynos4/include/mach/irqs.h
> >> > +++ b/arch/arm/mach-exynos4/include/mach/irqs.h
> >> > @@ -107,6 +107,7 @@
> >> >  #define IRQ_HSMMC1             COMBINER_IRQ(29, 1)
> >> >  #define IRQ_HSMMC2             COMBINER_IRQ(29, 2)
> >> >  #define IRQ_HSMMC3             COMBINER_IRQ(29, 3)
> >> > +#define IRQ_DWMCI              COMBINER_IRQ(29, 4)
> >> >
> >> >  #define IRQ_MIPI_CSIS0         COMBINER_IRQ(30, 0)
> >> >  #define IRQ_MIPI_CSIS1         COMBINER_IRQ(30, 1)
> >> > diff --git a/arch/arm/mach-exynos4/include/mach/map.h
> b/arch/arm/mach-
> >> exynos4/include/mach/map.h
> >> > index 0009e77..352e500 100644
> >> > --- a/arch/arm/mach-exynos4/include/mach/map.h
> >> > +++ b/arch/arm/mach-exynos4/include/mach/map.h
> >> > @@ -94,6 +94,7 @@
> >> >  #define EXYNOS4_PA_MIPI_CSIS1          0x11890000
> >> >
> >> >  #define EXYNOS4_PA_HSMMC(x)            (0x12510000 + ((x) * 0x10000))
> >> > +#define EXYNOS4_PA_DWMCI               0x12550000
> >> >
> >> >  #define EXYNOS4_PA_SATA                        0x12560000
> >> >  #define EXYNOS4_PA_SATAPHY             0x125D0000
> >> > diff --git a/arch/arm/plat-samsung/include/plat/devs.h
> b/arch/arm/plat-
> >> samsung/include/plat/devs.h
> >> > index e3b31c2..29fa1cf 100644
> >> > --- a/arch/arm/plat-samsung/include/plat/devs.h
> >> > +++ b/arch/arm/plat-samsung/include/plat/devs.h
> >> > @@ -112,6 +112,7 @@ extern struct platform_device exynos4_device_i2s2;
> >> >  extern struct platform_device exynos4_device_spdif;
> >> >  extern struct platform_device exynos4_device_pd[];
> >> >  extern struct platform_device exynos4_device_ahci;
> >> > +extern struct platform_device exynos4_device_dwmci;
> >> >
> >> >  extern struct platform_device s5p6440_device_pcm;
> >> >  extern struct platform_device s5p6440_device_iis;
> >> > --
> >> > 1.7.2.3
> >> >
> >> > --
> >> > To unsubscribe from this list: send the line "unsubscribe linux-
> samsung-
> >> soc" in
> >> > the body of a message to majordomo at vger.kernel.org
> >> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >> >
> >> --
> >> To unsubscribe from this list: send the line "unsubscribe linux-
> samsung-
> >> soc" in
> >> the body of a message to majordomo at vger.kernel.org
> >> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >
> >




More information about the linux-arm-kernel mailing list