Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[pandora-kernel.git] / arch / arm / mach-s3c64xx / setup-sdhci-gpio.c
1 /* linux/arch/arm/plat-s3c64xx/setup-sdhci-gpio.c
2  *
3  * Copyright 2008 Simtec Electronics
4  *      Ben Dooks <ben@simtec.co.uk>
5  *      http://armlinux.simtec.co.uk/
6  *
7  * S3C64XX - Helper functions for setting up SDHCI device(s) GPIO (HSMMC)
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2 as
11  * published by the Free Software Foundation.
12 */
13
14 #include <linux/kernel.h>
15 #include <linux/types.h>
16 #include <linux/interrupt.h>
17 #include <linux/platform_device.h>
18 #include <linux/io.h>
19
20 #include <mach/gpio.h>
21 #include <plat/gpio-cfg.h>
22
23 void s3c64xx_setup_sdhci0_cfg_gpio(struct platform_device *dev, int width)
24 {
25         unsigned int gpio;
26         unsigned int end;
27
28         end = S3C64XX_GPG(2 + width);
29
30         /* Set all the necessary GPG pins to special-function 0 */
31         for (gpio = S3C64XX_GPG(0); gpio < end; gpio++) {
32                 s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
33                 s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
34         }
35
36         s3c_gpio_setpull(S3C64XX_GPG(6), S3C_GPIO_PULL_UP);
37         s3c_gpio_cfgpin(S3C64XX_GPG(6), S3C_GPIO_SFN(2));
38 }
39
40 void s3c64xx_setup_sdhci1_cfg_gpio(struct platform_device *dev, int width)
41 {
42         unsigned int gpio;
43         unsigned int end;
44
45         end = S3C64XX_GPH(2 + width);
46
47         /* Set all the necessary GPG pins to special-function 0 */
48         for (gpio = S3C64XX_GPH(0); gpio < end; gpio++) {
49                 s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
50                 s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
51         }
52
53         s3c_gpio_setpull(S3C64XX_GPG(6), S3C_GPIO_PULL_UP);
54         s3c_gpio_cfgpin(S3C64XX_GPG(6), S3C_GPIO_SFN(3));
55 }
56
57 void s3c64xx_setup_sdhci2_cfg_gpio(struct platform_device *dev, int width)
58 {
59         unsigned int gpio;
60         unsigned int end;
61
62         end = S3C64XX_GPH(6 + width);
63
64         /* Set all the necessary GPH pins to special-function 1 */
65         for (gpio = S3C64XX_GPH(6); gpio < end; gpio++) {
66                 s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3));
67                 s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
68         }
69
70         /* Set all the necessary GPC pins to special-function 1 */
71         for (gpio = S3C64XX_GPC(4); gpio < S3C64XX_GPC(6); gpio++) {
72                 s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3));
73                 s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
74         }
75 }