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#include <linux/gpio.h> 20 21#include <plat/gpio-cfg.h> 22#include <plat/sdhci.h> 23 24void s3c64xx_setup_sdhci0_cfg_gpio(struct platform_device *dev, int width) 25{ 26 struct s3c_sdhci_platdata *pdata = dev->dev.platform_data; 27 unsigned int gpio; 28 unsigned int end; 29 30 end = S3C64XX_GPG(2 + width); 31 32 /* Set all the necessary GPG pins to special-function 0 */ 33 for (gpio = S3C64XX_GPG(0); gpio < end; gpio++) { 34 s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); 35 s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); 36 } 37 38 if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) { 39 s3c_gpio_setpull(S3C64XX_GPG(6), S3C_GPIO_PULL_UP); 40 s3c_gpio_cfgpin(S3C64XX_GPG(6), S3C_GPIO_SFN(2)); 41 } 42} 43 44void s3c64xx_setup_sdhci1_cfg_gpio(struct platform_device *dev, int width) 45{ 46 struct s3c_sdhci_platdata *pdata = dev->dev.platform_data; 47 unsigned int gpio; 48 unsigned int end; 49 50 end = S3C64XX_GPH(2 + width); 51 52 /* Set all the necessary GPG pins to special-function 0 */ 53 for (gpio = S3C64XX_GPH(0); gpio < end; gpio++) { 54 s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); 55 s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); 56 } 57 58 if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) { 59 s3c_gpio_setpull(S3C64XX_GPG(6), S3C_GPIO_PULL_UP); 60 s3c_gpio_cfgpin(S3C64XX_GPG(6), S3C_GPIO_SFN(3)); 61 } 62} 63 64void s3c64xx_setup_sdhci2_cfg_gpio(struct platform_device *dev, int width) 65{ 66 unsigned int gpio; 67 unsigned int end; 68 69 end = S3C64XX_GPH(6 + width); 70 71 /* Set all the necessary GPH pins to special-function 1 */ 72 for (gpio = S3C64XX_GPH(6); gpio < end; gpio++) { 73 s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); 74 s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); 75 } 76 77 /* Set all the necessary GPC pins to special-function 1 */ 78 for (gpio = S3C64XX_GPC(4); gpio < S3C64XX_GPC(6); gpio++) { 79 s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(3)); 80 s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE); 81 } 82} 83