* [PATCH v2 0/4] S3C2416 fixes (gpiolib, SDHCI, compilation without FB device) @ 2010-06-22 15:22 Yauhen Kharuzhy 2010-06-22 15:22 ` [PATCH v2 1/4] ARM: S3C24XX: Fix gpiolib support for ports K..M Yauhen Kharuzhy ` (3 more replies) 0 siblings, 4 replies; 9+ messages in thread From: Yauhen Kharuzhy @ 2010-06-22 15:22 UTC (permalink / raw) To: linux-arm-kernel This patch series fixes SDHCI on S3C2416. I got SD card working with this patches and with patches for GPIO card detection support by Marek Szyprowski. Resent due error in previous post. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 1/4] ARM: S3C24XX: Fix gpiolib support for ports K..M 2010-06-22 15:22 [PATCH v2 0/4] S3C2416 fixes (gpiolib, SDHCI, compilation without FB device) Yauhen Kharuzhy @ 2010-06-22 15:22 ` Yauhen Kharuzhy 2010-10-20 10:46 ` Kukjin Kim 2010-06-22 15:22 ` [PATCH v2 2/4] ARM: S3C2416: Set name of the framebuffer device only if it present Yauhen Kharuzhy ` (2 subsequent siblings) 3 siblings, 1 reply; 9+ messages in thread From: Yauhen Kharuzhy @ 2010-06-22 15:22 UTC (permalink / raw) To: linux-arm-kernel S3C2443 and S3C2416 has 12 GPIO banks (from A to M), increase ARCH_NR_GPIOS for this architectures. Also typo from previous commit has been fixed: CONFIG_CPU_S3C24XX instead CONFIG_CPU_244X. Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com> Tested-by: Vasily Khoruzhick <anarsoul@gmail.com> --- arch/arm/mach-s3c2410/include/mach/gpio.h | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-s3c2410/include/mach/gpio.h b/arch/arm/mach-s3c2410/include/mach/gpio.h index b649bf2..f7f6b07 100644 --- a/arch/arm/mach-s3c2410/include/mach/gpio.h +++ b/arch/arm/mach-s3c2410/include/mach/gpio.h @@ -22,6 +22,8 @@ #ifdef CONFIG_CPU_S3C244X #define ARCH_NR_GPIOS (32 * 9 + CONFIG_S3C24XX_GPIO_EXTRA) +#elif defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2416) +#define ARCH_NR_GPIOS (32 * 12 + CONFIG_S3C24XX_GPIO_EXTRA) #else #define ARCH_NR_GPIOS (256 + CONFIG_S3C24XX_GPIO_EXTRA) #endif @@ -30,8 +32,10 @@ #include <mach/gpio-nrs.h> #include <mach/gpio-fns.h> -#ifdef CONFIG_CPU_S3C24XX -#define S3C_GPIO_END (S3C2410_GPIO_BANKJ + 32) +#ifdef CONFIG_CPU_S3C244X +#define S3C_GPIO_END (S3C2410_GPJ(0) + 32) +#elif defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2416) +#define S3C_GPIO_END (S3C2410_GPM(0) + 32) #else -#define S3C_GPIO_END (S3C2410_GPIO_BANKH + 32) +#define S3C_GPIO_END (S3C2410_GPH(0) + 32) #endif -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 1/4] ARM: S3C24XX: Fix gpiolib support for ports K..M 2010-06-22 15:22 ` [PATCH v2 1/4] ARM: S3C24XX: Fix gpiolib support for ports K..M Yauhen Kharuzhy @ 2010-10-20 10:46 ` Kukjin Kim 0 siblings, 0 replies; 9+ messages in thread From: Kukjin Kim @ 2010-10-20 10:46 UTC (permalink / raw) To: linux-arm-kernel Yauhen Kharuzhy wrote: > > S3C2443 and S3C2416 has 12 GPIO banks (from A to M), increase > ARCH_NR_GPIOS for this architectures. > > Also typo from previous commit has been fixed: CONFIG_CPU_S3C24XX > instead CONFIG_CPU_244X. > > Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com> > Tested-by: Vasily Khoruzhick <anarsoul@gmail.com> > > --- > arch/arm/mach-s3c2410/include/mach/gpio.h | 10 +++++++--- > 1 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/arch/arm/mach-s3c2410/include/mach/gpio.h b/arch/arm/mach- > s3c2410/include/mach/gpio.h > index b649bf2..f7f6b07 100644 > --- a/arch/arm/mach-s3c2410/include/mach/gpio.h > +++ b/arch/arm/mach-s3c2410/include/mach/gpio.h > @@ -22,6 +22,8 @@ > > #ifdef CONFIG_CPU_S3C244X > #define ARCH_NR_GPIOS (32 * 9 + CONFIG_S3C24XX_GPIO_EXTRA) > +#elif defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2416) > +#define ARCH_NR_GPIOS (32 * 12 + CONFIG_S3C24XX_GPIO_EXTRA) > #else > #define ARCH_NR_GPIOS (256 + CONFIG_S3C24XX_GPIO_EXTRA) > #endif > @@ -30,8 +32,10 @@ > #include <mach/gpio-nrs.h> > #include <mach/gpio-fns.h> > > -#ifdef CONFIG_CPU_S3C24XX > -#define S3C_GPIO_END (S3C2410_GPIO_BANKJ + 32) > +#ifdef CONFIG_CPU_S3C244X > +#define S3C_GPIO_END (S3C2410_GPJ(0) + 32) > +#elif defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2416) > +#define S3C_GPIO_END (S3C2410_GPM(0) + 32) > #else > -#define S3C_GPIO_END (S3C2410_GPIO_BANKH + 32) > +#define S3C_GPIO_END (S3C2410_GPH(0) + 32) > #endif > -- Looks ok to me...will apply. Thanks. Best regards, Kgene. -- Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 2/4] ARM: S3C2416: Set name of the framebuffer device only if it present 2010-06-22 15:22 [PATCH v2 0/4] S3C2416 fixes (gpiolib, SDHCI, compilation without FB device) Yauhen Kharuzhy 2010-06-22 15:22 ` [PATCH v2 1/4] ARM: S3C24XX: Fix gpiolib support for ports K..M Yauhen Kharuzhy @ 2010-06-22 15:22 ` Yauhen Kharuzhy 2010-06-23 6:38 ` Marek Szyprowski 2010-10-18 12:00 ` Kukjin Kim 2010-06-22 15:22 ` [PATCH v2 3/4] ARM: S3C2416: Add clock definition for HSMMC1 Yauhen Kharuzhy 2010-06-22 15:22 ` [PATCH v2 4/4] ARM: S3C2416: Add platform helpers for setup SDHCI Yauhen Kharuzhy 3 siblings, 2 replies; 9+ messages in thread From: Yauhen Kharuzhy @ 2010-06-22 15:22 UTC (permalink / raw) To: linux-arm-kernel Fix case when board doesn't have LCD connected and doesn't have corresponding platform device compiled. Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com> --- arch/arm/mach-s3c2416/s3c2416.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-s3c2416/s3c2416.c b/arch/arm/mach-s3c2416/s3c2416.c index 35dabcc..355ab62 100644 --- a/arch/arm/mach-s3c2416/s3c2416.c +++ b/arch/arm/mach-s3c2416/s3c2416.c @@ -90,7 +90,9 @@ int __init s3c2416_init(void) s3c_i2c0_setname("s3c2440-i2c"); s3c_i2c1_setname("s3c2440-i2c"); +#ifdef CONFIG_S3C_DEV_FB s3c_device_fb.name = "s3c2443-fb"; +#endif return sysdev_register(&s3c2416_sysdev); } -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 2/4] ARM: S3C2416: Set name of the framebuffer device only if it present 2010-06-22 15:22 ` [PATCH v2 2/4] ARM: S3C2416: Set name of the framebuffer device only if it present Yauhen Kharuzhy @ 2010-06-23 6:38 ` Marek Szyprowski 2010-10-18 12:00 ` Kukjin Kim 1 sibling, 0 replies; 9+ messages in thread From: Marek Szyprowski @ 2010-06-23 6:38 UTC (permalink / raw) To: linux-arm-kernel Hello, On Tuesday, June 22, 2010 5:22 PM Yauhen Kharuzhy wrote: > Fix case when board doesn't have LCD connected and doesn't have > corresponding platform device compiled. > > Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com> > --- > arch/arm/mach-s3c2416/s3c2416.c | 2 ++ > 1 files changed, 2 insertions(+), 0 deletions(-) > > diff --git a/arch/arm/mach-s3c2416/s3c2416.c b/arch/arm/mach- > s3c2416/s3c2416.c > index 35dabcc..355ab62 100644 > --- a/arch/arm/mach-s3c2416/s3c2416.c > +++ b/arch/arm/mach-s3c2416/s3c2416.c > @@ -90,7 +90,9 @@ int __init s3c2416_init(void) > s3c_i2c0_setname("s3c2440-i2c"); > s3c_i2c1_setname("s3c2440-i2c"); > > +#ifdef CONFIG_S3C_DEV_FB > s3c_device_fb.name = "s3c2443-fb"; > +#endif The above line should be rather removed completely in favor of a solution proposed by Pawel Osciak in his s3c-fb patches: http://www.spinics.net/lists/arm-kernel/msg90906.html Best regards -- Marek Szyprowski Samsung Poland R&D Center ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 2/4] ARM: S3C2416: Set name of the framebuffer device only if it present 2010-06-22 15:22 ` [PATCH v2 2/4] ARM: S3C2416: Set name of the framebuffer device only if it present Yauhen Kharuzhy 2010-06-23 6:38 ` Marek Szyprowski @ 2010-10-18 12:00 ` Kukjin Kim 1 sibling, 0 replies; 9+ messages in thread From: Kukjin Kim @ 2010-10-18 12:00 UTC (permalink / raw) To: linux-arm-kernel Yauhen Kharuzhy wrote: > > Fix case when board doesn't have LCD connected and doesn't have > corresponding platform device compiled. > > Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com> > --- > arch/arm/mach-s3c2416/s3c2416.c | 2 ++ > 1 files changed, 2 insertions(+), 0 deletions(-) > > diff --git a/arch/arm/mach-s3c2416/s3c2416.c b/arch/arm/mach- > s3c2416/s3c2416.c > index 35dabcc..355ab62 100644 > --- a/arch/arm/mach-s3c2416/s3c2416.c > +++ b/arch/arm/mach-s3c2416/s3c2416.c > @@ -90,7 +90,9 @@ int __init s3c2416_init(void) > s3c_i2c0_setname("s3c2440-i2c"); > s3c_i2c1_setname("s3c2440-i2c"); > > +#ifdef CONFIG_S3C_DEV_FB > s3c_device_fb.name = "s3c2443-fb"; > +#endif Could you please use s3c_fb_setname() instead? There is in plat-samsung/include/plat/fb-core.h... > > return sysdev_register(&s3c2416_sysdev); > } > -- Thanks. Best regards, Kgene. -- Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 3/4] ARM: S3C2416: Add clock definition for HSMMC1 2010-06-22 15:22 [PATCH v2 0/4] S3C2416 fixes (gpiolib, SDHCI, compilation without FB device) Yauhen Kharuzhy 2010-06-22 15:22 ` [PATCH v2 1/4] ARM: S3C24XX: Fix gpiolib support for ports K..M Yauhen Kharuzhy 2010-06-22 15:22 ` [PATCH v2 2/4] ARM: S3C2416: Set name of the framebuffer device only if it present Yauhen Kharuzhy @ 2010-06-22 15:22 ` Yauhen Kharuzhy 2010-06-22 15:22 ` [PATCH v2 4/4] ARM: S3C2416: Add platform helpers for setup SDHCI Yauhen Kharuzhy 3 siblings, 0 replies; 9+ messages in thread From: Yauhen Kharuzhy @ 2010-06-22 15:22 UTC (permalink / raw) To: linux-arm-kernel Define clock for hsmmc1 device and register it. Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com> --- .../mach-s3c2410/include/mach/regs-s3c2443-clock.h | 1 + arch/arm/mach-s3c2416/clock.c | 9 +++++++++ 2 files changed, 10 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-s3c2410/include/mach/regs-s3c2443-clock.h b/arch/arm/mach-s3c2410/include/mach/regs-s3c2443-clock.h index 08ab9df..c073a5a 100644 --- a/arch/arm/mach-s3c2410/include/mach/regs-s3c2443-clock.h +++ b/arch/arm/mach-s3c2410/include/mach/regs-s3c2443-clock.h @@ -86,6 +86,7 @@ #define S3C2443_HCLKCON_LCDC (1<<9) #define S3C2443_HCLKCON_USBH (1<<11) #define S3C2443_HCLKCON_USBD (1<<12) +#define S3C2416_HCLKCON_HSMMC0 (1<<15) #define S3C2443_HCLKCON_HSMMC (1<<16) #define S3C2443_HCLKCON_CFC (1<<17) #define S3C2443_HCLKCON_SSMC (1<<18) diff --git a/arch/arm/mach-s3c2416/clock.c b/arch/arm/mach-s3c2416/clock.c index 7ccf5a2..f11d131 100644 --- a/arch/arm/mach-s3c2416/clock.c +++ b/arch/arm/mach-s3c2416/clock.c @@ -93,6 +93,13 @@ static struct clksrc_clk hsmmc_mux[] = { }, }; +static struct clk hsmmc1_clk = { + .name = "hsmmc", + .id = 1, + .parent = &clk_h, + .enable = s3c2443_clkcon_enable_h, + .ctrlbit = S3C2416_HCLKCON_HSMMC0, +}; static inline unsigned int s3c2416_fclk_div(unsigned long clkcon0) { @@ -130,6 +137,8 @@ void __init s3c2416_init_clocks(int xtal) for (ptr = 0; ptr < ARRAY_SIZE(clksrcs); ptr++) s3c_register_clksrc(clksrcs[ptr], 1); + s3c24xx_register_clock(&hsmmc1_clk); + s3c_pwmclk_init(); } -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 4/4] ARM: S3C2416: Add platform helpers for setup SDHCI 2010-06-22 15:22 [PATCH v2 0/4] S3C2416 fixes (gpiolib, SDHCI, compilation without FB device) Yauhen Kharuzhy ` (2 preceding siblings ...) 2010-06-22 15:22 ` [PATCH v2 3/4] ARM: S3C2416: Add clock definition for HSMMC1 Yauhen Kharuzhy @ 2010-06-22 15:22 ` Yauhen Kharuzhy 2010-10-18 12:17 ` Kukjin Kim 3 siblings, 1 reply; 9+ messages in thread From: Yauhen Kharuzhy @ 2010-06-22 15:22 UTC (permalink / raw) To: linux-arm-kernel Samsung S3C2416 has two SDHCI controllers compatible with other Samsung's SoCs (S3C64XX, S5PC100 etc...). Add required platform setup code that the devices can be used with sdhci-s3c driver. Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com> --- arch/arm/mach-s3c2416/Kconfig | 12 +++++ arch/arm/mach-s3c2416/Makefile | 4 ++ arch/arm/mach-s3c2416/s3c2416.c | 5 ++ arch/arm/mach-s3c2416/setup-sdhci-gpio.c | 60 +++++++++++++++++++++++++++ arch/arm/mach-s3c2416/setup-sdhci.c | 62 ++++++++++++++++++++++++++++ arch/arm/plat-samsung/include/plat/sdhci.h | 34 +++++++++++++++ 6 files changed, 177 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-s3c2416/setup-sdhci-gpio.c create mode 100644 arch/arm/mach-s3c2416/setup-sdhci.c diff --git a/arch/arm/mach-s3c2416/Kconfig b/arch/arm/mach-s3c2416/Kconfig index eafb0ed..3e2b53d 100644 --- a/arch/arm/mach-s3c2416/Kconfig +++ b/arch/arm/mach-s3c2416/Kconfig @@ -25,6 +25,17 @@ config S3C2416_DMA help Internal config node for S3C2416 DMA support +config S3C2416_SETUP_SDHCI + bool + select S3C2416_SETUP_SDHCI_GPIO + help + Internal helper functions for S3C2416 based SDHCI systems + +config S3C2416_SETUP_SDHCI_GPIO + bool + help + Common setup code for SDHCI gpio. + menu "S3C2416 Machines" config MACH_SMDK2416 @@ -36,6 +47,7 @@ config MACH_SMDK2416 select S3C_DEV_HSMMC1 select S3C_DEV_NAND select S3C_DEV_USB_HOST + select S3C2416_SETUP_SDHCI help Say Y here if you are using an SMDK2416 diff --git a/arch/arm/mach-s3c2416/Makefile b/arch/arm/mach-s3c2416/Makefile index 6c12c7b..4f83f94 100644 --- a/arch/arm/mach-s3c2416/Makefile +++ b/arch/arm/mach-s3c2416/Makefile @@ -14,6 +14,10 @@ obj-$(CONFIG_CPU_S3C2416) += irq.o #obj-$(CONFIG_S3C2416_DMA) += dma.o +# Device setup +obj-$(CONFIG_S3C2416_SETUP_SDHCI) += setup-sdhci.o +obj-$(CONFIG_S3C2416_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o + # Machine support obj-$(CONFIG_MACH_SMDK2416) += mach-smdk2416.o diff --git a/arch/arm/mach-s3c2416/s3c2416.c b/arch/arm/mach-s3c2416/s3c2416.c index 355ab62..06eacf8 100644 --- a/arch/arm/mach-s3c2416/s3c2416.c +++ b/arch/arm/mach-s3c2416/s3c2416.c @@ -53,6 +53,7 @@ #include <plat/s3c2416.h> #include <plat/devs.h> #include <plat/cpu.h> +#include <plat/sdhci.h> #include <plat/iic-core.h> @@ -115,6 +116,10 @@ void __init s3c2416_map_io(void) s3c24xx_gpiocfg_default.set_pull = s3c_gpio_setpull_updown; s3c24xx_gpiocfg_default.get_pull = s3c_gpio_getpull_updown; + /* initialize device information early */ + s3c2416_default_sdhci0(); + s3c2416_default_sdhci1(); + iotable_init(s3c2416_iodesc, ARRAY_SIZE(s3c2416_iodesc)); } diff --git a/arch/arm/mach-s3c2416/setup-sdhci-gpio.c b/arch/arm/mach-s3c2416/setup-sdhci-gpio.c new file mode 100644 index 0000000..ebdab15 --- /dev/null +++ b/arch/arm/mach-s3c2416/setup-sdhci-gpio.c @@ -0,0 +1,60 @@ +/* linux/arch/arm/plat-s3c2416/setup-sdhci-gpio.c + * + * Copyright 2010 Promwad Innovation Company + * Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com> + * + * S3C2416 - Helper functions for setting up SDHCI device(s) GPIO (HSMMC) + * + * Based on mach-s3c64xx/setup-sdhci-gpio.c + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. +*/ + +#include <linux/kernel.h> +#include <linux/types.h> +#include <linux/interrupt.h> +#include <linux/platform_device.h> +#include <linux/io.h> + +#include <mach/gpio.h> +#include <mach/regs-gpio.h> +#include <plat/gpio-cfg.h> + +/* Note: hsmmc1 and hsmmc0 are swapped versus datasheet */ + +void s3c2416_setup_sdhci1_cfg_gpio(struct platform_device *dev, int width) +{ + unsigned int gpio; + unsigned int end; + + end = S3C2410_GPE(7 + width); + + /* Set all the necessary GPE pins to special-function 0 */ + for (gpio = S3C2410_GPE(5); gpio < end; gpio++) { + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); + } +} + +void s3c2416_setup_sdhci0_cfg_gpio(struct platform_device *dev, int width) +{ + unsigned int gpio; + unsigned int end; + + end = S3C2410_GPL(0 + width); + + /* Set all the necessary GPG pins to special-function 0 */ + for (gpio = S3C2410_GPL(0); gpio < end; gpio++) { + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); + } + + s3c_gpio_cfgpin(S3C2410_GPL(8), S3C_GPIO_SFN(2)); + s3c_gpio_setpull(S3C2410_GPL(8), S3C_GPIO_PULL_NONE); + s3c_gpio_cfgpin(S3C2410_GPL(9), S3C_GPIO_SFN(2)); + s3c_gpio_setpull(S3C2410_GPL(9), S3C_GPIO_PULL_NONE); +} + + diff --git a/arch/arm/mach-s3c2416/setup-sdhci.c b/arch/arm/mach-s3c2416/setup-sdhci.c new file mode 100644 index 0000000..345ddd1 --- /dev/null +++ b/arch/arm/mach-s3c2416/setup-sdhci.c @@ -0,0 +1,62 @@ +/* linux/arch/arm/mach-s3c2416/setup-sdhci.c + * + * Copyright 2010 Promwad Innovation Company + * Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com> + * + * S3C2416 - Helper functions for settign up SDHCI device(s) (HSMMC) + * + * Based on mach-s3c64xx/setup-sdhci.c + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. +*/ + +#include <linux/kernel.h> +#include <linux/types.h> +#include <linux/interrupt.h> +#include <linux/platform_device.h> +#include <linux/io.h> + +#include <linux/mmc/card.h> +#include <linux/mmc/host.h> + +#include <plat/regs-sdhci.h> +#include <plat/sdhci.h> + +/* clock sources for the mmc bus clock, order as for the ctrl2[5..4] */ + +char *s3c2416_hsmmc_clksrcs[4] = { + [0] = "hsmmc", + [1] = "hsmmc", + [2] = "hsmmc-if", + /* [3] = "48m", - note not successfully used yet */ +}; + +void s3c2416_setup_sdhci_cfg_card(struct platform_device *dev, + void __iomem *r, + struct mmc_ios *ios, + struct mmc_card *card) +{ + u32 ctrl2, ctrl3; + + ctrl2 = readl(r + S3C_SDHCI_CONTROL2); + ctrl2 &= S3C_SDHCI_CTRL2_SELBASECLK_MASK; + ctrl2 |= (S3C64XX_SDHCI_CTRL2_ENSTAASYNCCLR | + S3C64XX_SDHCI_CTRL2_ENCMDCNFMSK | + S3C_SDHCI_CTRL2_ENFBCLKRX | + S3C_SDHCI_CTRL2_DFCNT_NONE | + S3C_SDHCI_CTRL2_ENCLKOUTHOLD); + + if (ios->clock < 25 * 1000000) + ctrl3 = (S3C_SDHCI_CTRL3_FCSEL3 | + S3C_SDHCI_CTRL3_FCSEL2 | + S3C_SDHCI_CTRL3_FCSEL1 | + S3C_SDHCI_CTRL3_FCSEL0); + else + ctrl3 = (S3C_SDHCI_CTRL3_FCSEL1 | S3C_SDHCI_CTRL3_FCSEL0); + + writel(ctrl2, r + S3C_SDHCI_CONTROL2); + writel(ctrl3, r + S3C_SDHCI_CONTROL3); +} + diff --git a/arch/arm/plat-samsung/include/plat/sdhci.h b/arch/arm/plat-samsung/include/plat/sdhci.h index 13f9fb2..d408140 100644 --- a/arch/arm/plat-samsung/include/plat/sdhci.h +++ b/arch/arm/plat-samsung/include/plat/sdhci.h @@ -78,6 +78,8 @@ extern void s3c64xx_setup_sdhci2_cfg_gpio(struct platform_device *, int w); extern void s5pv210_setup_sdhci0_cfg_gpio(struct platform_device *, int w); extern void s5pv210_setup_sdhci1_cfg_gpio(struct platform_device *, int w); extern void s5pv210_setup_sdhci2_cfg_gpio(struct platform_device *, int w); +extern void s3c2416_setup_sdhci0_cfg_gpio(struct platform_device *, int w); +extern void s3c2416_setup_sdhci1_cfg_gpio(struct platform_device *, int w); /* S3C6400 SDHCI setup */ @@ -270,6 +272,38 @@ static inline void s5pv210_default_sdhci1(void) { } static inline void s5pv210_default_sdhci2(void) { } #endif /* CONFIG_S5PC100_SETUP_SDHCI */ +/* S3C2416 SDHCI setup */ +#ifdef CONFIG_S3C2416_SETUP_SDHCI +extern char *s3c2416_hsmmc_clksrcs[4]; + +extern void s3c2416_setup_sdhci_cfg_card(struct platform_device *dev, + void __iomem *r, + struct mmc_ios *ios, + struct mmc_card *card); + +#ifdef CONFIG_S3C_DEV_HSMMC +static inline void s3c2416_default_sdhci0(void) +{ + s3c_hsmmc0_def_platdata.clocks = s3c2416_hsmmc_clksrcs; + s3c_hsmmc0_def_platdata.cfg_gpio = s3c2416_setup_sdhci0_cfg_gpio; + s3c_hsmmc0_def_platdata.cfg_card = s3c2416_setup_sdhci_cfg_card; +} +#else +static inline void s3c2416_default_sdhci0(void) { } +#endif /* CONFIG_S3C_DEV_HSMMC */ + +#ifdef CONFIG_S3C_DEV_HSMMC1 +static inline void s3c2416_default_sdhci1(void) +{ + s3c_hsmmc1_def_platdata.clocks = s3c2416_hsmmc_clksrcs; + s3c_hsmmc1_def_platdata.cfg_gpio = s3c2416_setup_sdhci1_cfg_gpio; + s3c_hsmmc1_def_platdata.cfg_card = s3c2416_setup_sdhci_cfg_card; +} +#else +static inline void s3c2416_default_sdhci1(void) { } +#endif /* CONFIG_S3C_DEV_HSMMC1 */ + +#endif /* CONFIG_S3C2416_SETUP_SDHCI */ -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 4/4] ARM: S3C2416: Add platform helpers for setup SDHCI 2010-06-22 15:22 ` [PATCH v2 4/4] ARM: S3C2416: Add platform helpers for setup SDHCI Yauhen Kharuzhy @ 2010-10-18 12:17 ` Kukjin Kim 0 siblings, 0 replies; 9+ messages in thread From: Kukjin Kim @ 2010-10-18 12:17 UTC (permalink / raw) To: linux-arm-kernel Yauhen Kharuzhy wrote: > > Samsung S3C2416 has two SDHCI controllers compatible with other > Samsung's SoCs (S3C64XX, S5PC100 etc...). > > Add required platform setup code that the devices can be used with > sdhci-s3c driver. > > Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com> > --- > arch/arm/mach-s3c2416/Kconfig | 12 +++++ > arch/arm/mach-s3c2416/Makefile | 4 ++ > arch/arm/mach-s3c2416/s3c2416.c | 5 ++ > arch/arm/mach-s3c2416/setup-sdhci-gpio.c | 60 > +++++++++++++++++++++++++++ > arch/arm/mach-s3c2416/setup-sdhci.c | 62 > ++++++++++++++++++++++++++++ > arch/arm/plat-samsung/include/plat/sdhci.h | 34 +++++++++++++++ > 6 files changed, 177 insertions(+), 0 deletions(-) > create mode 100644 arch/arm/mach-s3c2416/setup-sdhci-gpio.c > create mode 100644 arch/arm/mach-s3c2416/setup-sdhci.c > > diff --git a/arch/arm/mach-s3c2416/Kconfig b/arch/arm/mach-s3c2416/Kconfig > index eafb0ed..3e2b53d 100644 > --- a/arch/arm/mach-s3c2416/Kconfig > +++ b/arch/arm/mach-s3c2416/Kconfig > @@ -25,6 +25,17 @@ config S3C2416_DMA > help > Internal config node for S3C2416 DMA support > > +config S3C2416_SETUP_SDHCI > + bool > + select S3C2416_SETUP_SDHCI_GPIO > + help > + Internal helper functions for S3C2416 based SDHCI systems > + > +config S3C2416_SETUP_SDHCI_GPIO > + bool > + help > + Common setup code for SDHCI gpio. > + > menu "S3C2416 Machines" > > config MACH_SMDK2416 > @@ -36,6 +47,7 @@ config MACH_SMDK2416 > select S3C_DEV_HSMMC1 > select S3C_DEV_NAND > select S3C_DEV_USB_HOST > + select S3C2416_SETUP_SDHCI > help > Say Y here if you are using an SMDK2416 > > diff --git a/arch/arm/mach-s3c2416/Makefile b/arch/arm/mach-s3c2416/Makefile > index 6c12c7b..4f83f94 100644 > --- a/arch/arm/mach-s3c2416/Makefile > +++ b/arch/arm/mach-s3c2416/Makefile > @@ -14,6 +14,10 @@ obj-$(CONFIG_CPU_S3C2416) += irq.o > > #obj-$(CONFIG_S3C2416_DMA) += dma.o > > +# Device setup > +obj-$(CONFIG_S3C2416_SETUP_SDHCI) += setup-sdhci.o > +obj-$(CONFIG_S3C2416_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o > + > # Machine support > > obj-$(CONFIG_MACH_SMDK2416) += mach-smdk2416.o > diff --git a/arch/arm/mach-s3c2416/s3c2416.c b/arch/arm/mach- > s3c2416/s3c2416.c > index 355ab62..06eacf8 100644 > --- a/arch/arm/mach-s3c2416/s3c2416.c > +++ b/arch/arm/mach-s3c2416/s3c2416.c > @@ -53,6 +53,7 @@ > #include <plat/s3c2416.h> > #include <plat/devs.h> > #include <plat/cpu.h> > +#include <plat/sdhci.h> > > #include <plat/iic-core.h> > > @@ -115,6 +116,10 @@ void __init s3c2416_map_io(void) > s3c24xx_gpiocfg_default.set_pull = s3c_gpio_setpull_updown; > s3c24xx_gpiocfg_default.get_pull = s3c_gpio_getpull_updown; > > + /* initialize device information early */ > + s3c2416_default_sdhci0(); > + s3c2416_default_sdhci1(); > + > iotable_init(s3c2416_iodesc, ARRAY_SIZE(s3c2416_iodesc)); > } > > diff --git a/arch/arm/mach-s3c2416/setup-sdhci-gpio.c b/arch/arm/mach- > s3c2416/setup-sdhci-gpio.c > new file mode 100644 > index 0000000..ebdab15 > --- /dev/null > +++ b/arch/arm/mach-s3c2416/setup-sdhci-gpio.c > @@ -0,0 +1,60 @@ > +/* linux/arch/arm/plat-s3c2416/setup-sdhci-gpio.c > + * > + * Copyright 2010 Promwad Innovation Company > + * Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com> > + * > + * S3C2416 - Helper functions for setting up SDHCI device(s) GPIO (HSMMC) > + * > + * Based on mach-s3c64xx/setup-sdhci-gpio.c > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > +*/ > + > +#include <linux/kernel.h> > +#include <linux/types.h> > +#include <linux/interrupt.h> > +#include <linux/platform_device.h> > +#include <linux/io.h> > + > +#include <mach/gpio.h> should be <linux/gpio.h> > +#include <mach/regs-gpio.h> > +#include <plat/gpio-cfg.h> > + > +/* Note: hsmmc1 and hsmmc0 are swapped versus datasheet */ > + > +void s3c2416_setup_sdhci1_cfg_gpio(struct platform_device *dev, int width) > +{ > + unsigned int gpio; > + unsigned int end; > + > + end = S3C2410_GPE(7 + width); > + > + /* Set all the necessary GPE pins to special-function 0 */ > + for (gpio = S3C2410_GPE(5); gpio < end; gpio++) { > + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); > + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); > + } could you please update above gpio setup functions like following? s3c_gpio_cfgrange_nopull(S3C2410_GPE(5), 2 + width, S3C_GPIO_SFN(2)); > +} > + > +void s3c2416_setup_sdhci0_cfg_gpio(struct platform_device *dev, int width) > +{ > + unsigned int gpio; > + unsigned int end; > + > + end = S3C2410_GPL(0 + width); > + > + /* Set all the necessary GPG pins to special-function 0 */ > + for (gpio = S3C2410_GPL(0); gpio < end; gpio++) { > + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); > + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); > + } s3c_gpio_cfgrange_nopull(S3C2410_GPL(0), width, S3C_GPIO_SFN(2)); > + > + s3c_gpio_cfgpin(S3C2410_GPL(8), S3C_GPIO_SFN(2)); > + s3c_gpio_setpull(S3C2410_GPL(8), S3C_GPIO_PULL_NONE); > + s3c_gpio_cfgpin(S3C2410_GPL(9), S3C_GPIO_SFN(2)); > + s3c_gpio_setpull(S3C2410_GPL(9), S3C_GPIO_PULL_NONE); s3c_gpio_cfgranbe_nopull(S3C2410_GPL(8), 2, S3C_GPIO_SFN(2)); > +} > + > + no need above empty lines... > diff --git a/arch/arm/mach-s3c2416/setup-sdhci.c b/arch/arm/mach- > s3c2416/setup-sdhci.c > new file mode 100644 > index 0000000..345ddd1 > --- /dev/null > +++ b/arch/arm/mach-s3c2416/setup-sdhci.c > @@ -0,0 +1,62 @@ > +/* linux/arch/arm/mach-s3c2416/setup-sdhci.c > + * > + * Copyright 2010 Promwad Innovation Company > + * Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com> > + * > + * S3C2416 - Helper functions for settign up SDHCI device(s) (HSMMC) > + * > + * Based on mach-s3c64xx/setup-sdhci.c > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > +*/ > + > +#include <linux/kernel.h> > +#include <linux/types.h> > +#include <linux/interrupt.h> > +#include <linux/platform_device.h> > +#include <linux/io.h> > + > +#include <linux/mmc/card.h> > +#include <linux/mmc/host.h> > + > +#include <plat/regs-sdhci.h> > +#include <plat/sdhci.h> > + > +/* clock sources for the mmc bus clock, order as for the ctrl2[5..4] */ > + > +char *s3c2416_hsmmc_clksrcs[4] = { > + [0] = "hsmmc", > + [1] = "hsmmc", > + [2] = "hsmmc-if", > + /* [3] = "48m", - note not successfully used yet */ > +}; > + > +void s3c2416_setup_sdhci_cfg_card(struct platform_device *dev, > + void __iomem *r, > + struct mmc_ios *ios, > + struct mmc_card *card) > +{ > + u32 ctrl2, ctrl3; > + > + ctrl2 = readl(r + S3C_SDHCI_CONTROL2); > + ctrl2 &= S3C_SDHCI_CTRL2_SELBASECLK_MASK; > + ctrl2 |= (S3C64XX_SDHCI_CTRL2_ENSTAASYNCCLR | > + S3C64XX_SDHCI_CTRL2_ENCMDCNFMSK | > + S3C_SDHCI_CTRL2_ENFBCLKRX | > + S3C_SDHCI_CTRL2_DFCNT_NONE | > + S3C_SDHCI_CTRL2_ENCLKOUTHOLD); > + > + if (ios->clock < 25 * 1000000) > + ctrl3 = (S3C_SDHCI_CTRL3_FCSEL3 | > + S3C_SDHCI_CTRL3_FCSEL2 | > + S3C_SDHCI_CTRL3_FCSEL1 | > + S3C_SDHCI_CTRL3_FCSEL0); > + else > + ctrl3 = (S3C_SDHCI_CTRL3_FCSEL1 | S3C_SDHCI_CTRL3_FCSEL0); > + > + writel(ctrl2, r + S3C_SDHCI_CONTROL2); > + writel(ctrl3, r + S3C_SDHCI_CONTROL3); > +} > + no need above empty line. > diff --git a/arch/arm/plat-samsung/include/plat/sdhci.h b/arch/arm/plat- > samsung/include/plat/sdhci.h > index 13f9fb2..d408140 100644 > --- a/arch/arm/plat-samsung/include/plat/sdhci.h > +++ b/arch/arm/plat-samsung/include/plat/sdhci.h > @@ -78,6 +78,8 @@ extern void s3c64xx_setup_sdhci2_cfg_gpio(struct > platform_device *, int w); > extern void s5pv210_setup_sdhci0_cfg_gpio(struct platform_device *, int w); > extern void s5pv210_setup_sdhci1_cfg_gpio(struct platform_device *, int w); > extern void s5pv210_setup_sdhci2_cfg_gpio(struct platform_device *, int w); > +extern void s3c2416_setup_sdhci0_cfg_gpio(struct platform_device *, int w); > +extern void s3c2416_setup_sdhci1_cfg_gpio(struct platform_device *, int w); > > /* S3C6400 SDHCI setup */ > > @@ -270,6 +272,38 @@ static inline void s5pv210_default_sdhci1(void) { } > static inline void s5pv210_default_sdhci2(void) { } > #endif /* CONFIG_S5PC100_SETUP_SDHCI */ > > +/* S3C2416 SDHCI setup */ > +#ifdef CONFIG_S3C2416_SETUP_SDHCI > +extern char *s3c2416_hsmmc_clksrcs[4]; > + > +extern void s3c2416_setup_sdhci_cfg_card(struct platform_device *dev, > + void __iomem *r, > + struct mmc_ios *ios, > + struct mmc_card *card); > + > +#ifdef CONFIG_S3C_DEV_HSMMC > +static inline void s3c2416_default_sdhci0(void) > +{ > + s3c_hsmmc0_def_platdata.clocks = s3c2416_hsmmc_clksrcs; > + s3c_hsmmc0_def_platdata.cfg_gpio = s3c2416_setup_sdhci0_cfg_gpio; > + s3c_hsmmc0_def_platdata.cfg_card = s3c2416_setup_sdhci_cfg_card; > +} > +#else > +static inline void s3c2416_default_sdhci0(void) { } > +#endif /* CONFIG_S3C_DEV_HSMMC */ could you please update above like current plat-samung/include/plat/sdhci.h? > + > +#ifdef CONFIG_S3C_DEV_HSMMC1 > +static inline void s3c2416_default_sdhci1(void) > +{ > + s3c_hsmmc1_def_platdata.clocks = s3c2416_hsmmc_clksrcs; > + s3c_hsmmc1_def_platdata.cfg_gpio = s3c2416_setup_sdhci1_cfg_gpio; > + s3c_hsmmc1_def_platdata.cfg_card = s3c2416_setup_sdhci_cfg_card; > +} > +#else > +static inline void s3c2416_default_sdhci1(void) { } > +#endif /* CONFIG_S3C_DEV_HSMMC1 */ > + > +#endif /* CONFIG_S3C2416_SETUP_SDHCI */ > > > No need above empty lines... > -- Thanks. Best regards, Kgene. -- Kukjin Kim <kgene.kim@samsung.com>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2010-10-20 10:46 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-06-22 15:22 [PATCH v2 0/4] S3C2416 fixes (gpiolib, SDHCI, compilation without FB device) Yauhen Kharuzhy 2010-06-22 15:22 ` [PATCH v2 1/4] ARM: S3C24XX: Fix gpiolib support for ports K..M Yauhen Kharuzhy 2010-10-20 10:46 ` Kukjin Kim 2010-06-22 15:22 ` [PATCH v2 2/4] ARM: S3C2416: Set name of the framebuffer device only if it present Yauhen Kharuzhy 2010-06-23 6:38 ` Marek Szyprowski 2010-10-18 12:00 ` Kukjin Kim 2010-06-22 15:22 ` [PATCH v2 3/4] ARM: S3C2416: Add clock definition for HSMMC1 Yauhen Kharuzhy 2010-06-22 15:22 ` [PATCH v2 4/4] ARM: S3C2416: Add platform helpers for setup SDHCI Yauhen Kharuzhy 2010-10-18 12:17 ` Kukjin Kim
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).