1 // SPDX-License-Identifier: GPL-2.0 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 #include <linux/kernel.h> 10 #include <linux/types.h> 11 #include <linux/interrupt.h> 12 #include <linux/platform_device.h> 13 #include <linux/io.h> 14 #include <linux/gpio.h> 15 16 #include "gpio-cfg.h" 17 #include "sdhci.h" 18 #include "gpio-samsung.h" 19 20 void s3c64xx_setup_sdhci0_cfg_gpio(struct platform_device *dev, int width) 21 { 22 struct s3c_sdhci_platdata *pdata = dev->dev.platform_data; 23 24 /* Set all the necessary GPG pins to special-function 2 */ 25 s3c_gpio_cfgrange_nopull(S3C64XX_GPG(0), 2 + width, S3C_GPIO_SFN(2)); 26 27 if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) { 28 s3c_gpio_setpull(S3C64XX_GPG(6), S3C_GPIO_PULL_UP); 29 s3c_gpio_cfgpin(S3C64XX_GPG(6), S3C_GPIO_SFN(2)); 30 } 31 } 32 33 void s3c64xx_setup_sdhci1_cfg_gpio(struct platform_device *dev, int width) 34 { 35 struct s3c_sdhci_platdata *pdata = dev->dev.platform_data; 36 37 /* Set all the necessary GPH pins to special-function 2 */ 38 s3c_gpio_cfgrange_nopull(S3C64XX_GPH(0), 2 + width, S3C_GPIO_SFN(2)); 39 40 if (pdata->cd_type == S3C_SDHCI_CD_INTERNAL) { 41 s3c_gpio_setpull(S3C64XX_GPG(6), S3C_GPIO_PULL_UP); 42 s3c_gpio_cfgpin(S3C64XX_GPG(6), S3C_GPIO_SFN(3)); 43 } 44 } 45 46 void s3c64xx_setup_sdhci2_cfg_gpio(struct platform_device *dev, int width) 47 { 48 /* Set all the necessary GPH pins to special-function 3 */ 49 s3c_gpio_cfgrange_nopull(S3C64XX_GPH(6), width, S3C_GPIO_SFN(3)); 50 51 /* Set all the necessary GPC pins to special-function 3 */ 52 s3c_gpio_cfgrange_nopull(S3C64XX_GPC(4), 2, S3C_GPIO_SFN(3)); 53 } 54