1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (c) 2011 Samsung Electronics Co., Ltd. 4 * http://www.samsung.com 5 * 6 * Copyright 2008 Openmoko, Inc. 7 * Copyright 2008 Simtec Electronics 8 * http://armlinux.simtec.co.uk/ 9 * Ben Dooks <ben@simtec.co.uk> 10 * 11 * S3C Platform - SDHCI (HSMMC) platform data definitions 12 */ 13 14 #ifndef __PLAT_S3C_SDHCI_H 15 #define __PLAT_S3C_SDHCI_H __FILE__ 16 17 #include <linux/platform_data/mmc-sdhci-s3c.h> 18 #include "devs.h" 19 20 /* s3c_sdhci_set_platdata() - common helper for setting SDHCI platform data 21 * @pd: The default platform data for this device. 22 * @set: Pointer to the platform data to fill in. 23 */ 24 extern void s3c_sdhci_set_platdata(struct s3c_sdhci_platdata *pd, 25 struct s3c_sdhci_platdata *set); 26 27 /** 28 * s3c_sdhci0_set_platdata - Set platform data for S3C SDHCI device. 29 * @pd: Platform data to register to device. 30 * 31 * Register the given platform data for use withe S3C SDHCI device. 32 * The call will copy the platform data, so the board definitions can 33 * make the structure itself __initdata. 34 */ 35 extern void s3c_sdhci0_set_platdata(struct s3c_sdhci_platdata *pd); 36 extern void s3c_sdhci1_set_platdata(struct s3c_sdhci_platdata *pd); 37 extern void s3c_sdhci2_set_platdata(struct s3c_sdhci_platdata *pd); 38 extern void s3c_sdhci3_set_platdata(struct s3c_sdhci_platdata *pd); 39 40 /* Default platform data, exported so that per-cpu initialisation can 41 * set the correct one when there are more than one cpu type selected. 42 */ 43 44 extern struct s3c_sdhci_platdata s3c_hsmmc0_def_platdata; 45 extern struct s3c_sdhci_platdata s3c_hsmmc1_def_platdata; 46 extern struct s3c_sdhci_platdata s3c_hsmmc2_def_platdata; 47 extern struct s3c_sdhci_platdata s3c_hsmmc3_def_platdata; 48 49 /* Helper function availability */ 50 51 extern void s3c2416_setup_sdhci0_cfg_gpio(struct platform_device *, int w); 52 extern void s3c2416_setup_sdhci1_cfg_gpio(struct platform_device *, int w); 53 extern void s3c64xx_setup_sdhci0_cfg_gpio(struct platform_device *, int w); 54 extern void s3c64xx_setup_sdhci1_cfg_gpio(struct platform_device *, int w); 55 extern void s3c64xx_setup_sdhci2_cfg_gpio(struct platform_device *, int w); 56 57 /* S3C2416 SDHCI setup */ 58 59 #ifdef CONFIG_S3C2416_SETUP_SDHCI 60 static inline void s3c2416_default_sdhci0(void) 61 { 62 #ifdef CONFIG_S3C_DEV_HSMMC 63 s3c_hsmmc0_def_platdata.cfg_gpio = s3c2416_setup_sdhci0_cfg_gpio; 64 #endif /* CONFIG_S3C_DEV_HSMMC */ 65 } 66 67 static inline void s3c2416_default_sdhci1(void) 68 { 69 #ifdef CONFIG_S3C_DEV_HSMMC1 70 s3c_hsmmc1_def_platdata.cfg_gpio = s3c2416_setup_sdhci1_cfg_gpio; 71 #endif /* CONFIG_S3C_DEV_HSMMC1 */ 72 } 73 74 #else 75 static inline void s3c2416_default_sdhci0(void) { } 76 static inline void s3c2416_default_sdhci1(void) { } 77 78 #endif /* CONFIG_S3C2416_SETUP_SDHCI */ 79 80 /* S3C64XX SDHCI setup */ 81 82 #ifdef CONFIG_S3C64XX_SETUP_SDHCI 83 static inline void s3c6400_default_sdhci0(void) 84 { 85 #ifdef CONFIG_S3C_DEV_HSMMC 86 s3c_hsmmc0_def_platdata.cfg_gpio = s3c64xx_setup_sdhci0_cfg_gpio; 87 #endif 88 } 89 90 static inline void s3c6400_default_sdhci1(void) 91 { 92 #ifdef CONFIG_S3C_DEV_HSMMC1 93 s3c_hsmmc1_def_platdata.cfg_gpio = s3c64xx_setup_sdhci1_cfg_gpio; 94 #endif 95 } 96 97 static inline void s3c6400_default_sdhci2(void) 98 { 99 #ifdef CONFIG_S3C_DEV_HSMMC2 100 s3c_hsmmc2_def_platdata.cfg_gpio = s3c64xx_setup_sdhci2_cfg_gpio; 101 #endif 102 } 103 104 static inline void s3c6410_default_sdhci0(void) 105 { 106 #ifdef CONFIG_S3C_DEV_HSMMC 107 s3c_hsmmc0_def_platdata.cfg_gpio = s3c64xx_setup_sdhci0_cfg_gpio; 108 #endif 109 } 110 111 static inline void s3c6410_default_sdhci1(void) 112 { 113 #ifdef CONFIG_S3C_DEV_HSMMC1 114 s3c_hsmmc1_def_platdata.cfg_gpio = s3c64xx_setup_sdhci1_cfg_gpio; 115 #endif 116 } 117 118 static inline void s3c6410_default_sdhci2(void) 119 { 120 #ifdef CONFIG_S3C_DEV_HSMMC2 121 s3c_hsmmc2_def_platdata.cfg_gpio = s3c64xx_setup_sdhci2_cfg_gpio; 122 #endif 123 } 124 125 #else 126 static inline void s3c6410_default_sdhci0(void) { } 127 static inline void s3c6410_default_sdhci1(void) { } 128 static inline void s3c6410_default_sdhci2(void) { } 129 static inline void s3c6400_default_sdhci0(void) { } 130 static inline void s3c6400_default_sdhci1(void) { } 131 static inline void s3c6400_default_sdhci2(void) { } 132 133 #endif /* CONFIG_S3C64XX_SETUP_SDHCI */ 134 135 static inline void s3c_sdhci_setname(int id, char *name) 136 { 137 switch (id) { 138 #ifdef CONFIG_S3C_DEV_HSMMC 139 case 0: 140 s3c_device_hsmmc0.name = name; 141 break; 142 #endif 143 #ifdef CONFIG_S3C_DEV_HSMMC1 144 case 1: 145 s3c_device_hsmmc1.name = name; 146 break; 147 #endif 148 #ifdef CONFIG_S3C_DEV_HSMMC2 149 case 2: 150 s3c_device_hsmmc2.name = name; 151 break; 152 #endif 153 #ifdef CONFIG_S3C_DEV_HSMMC3 154 case 3: 155 s3c_device_hsmmc3.name = name; 156 break; 157 #endif 158 default: 159 break; 160 } 161 } 162 #endif /* __PLAT_S3C_SDHCI_H */ 163