Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * Copyright (c) 2011 Samsung Electronics Co., Ltd.
0004  *      http://www.samsung.com
0005  *
0006  * Copyright 2008 Openmoko, Inc.
0007  * Copyright 2008 Simtec Electronics
0008  *  http://armlinux.simtec.co.uk/
0009  *  Ben Dooks <ben@simtec.co.uk>
0010  *
0011  * S3C Platform - SDHCI (HSMMC) platform data definitions
0012  */
0013 
0014 #ifndef __PLAT_S3C_SDHCI_H
0015 #define __PLAT_S3C_SDHCI_H __FILE__
0016 
0017 #include <linux/platform_data/mmc-sdhci-s3c.h>
0018 #include "devs.h"
0019 
0020 /* s3c_sdhci_set_platdata() - common helper for setting SDHCI platform data
0021  * @pd: The default platform data for this device.
0022  * @set: Pointer to the platform data to fill in.
0023  */
0024 extern void s3c_sdhci_set_platdata(struct s3c_sdhci_platdata *pd,
0025                     struct s3c_sdhci_platdata *set);
0026 
0027 /**
0028  * s3c_sdhci0_set_platdata - Set platform data for S3C SDHCI device.
0029  * @pd: Platform data to register to device.
0030  *
0031  * Register the given platform data for use withe S3C SDHCI device.
0032  * The call will copy the platform data, so the board definitions can
0033  * make the structure itself __initdata.
0034  */
0035 extern void s3c_sdhci0_set_platdata(struct s3c_sdhci_platdata *pd);
0036 extern void s3c_sdhci1_set_platdata(struct s3c_sdhci_platdata *pd);
0037 extern void s3c_sdhci2_set_platdata(struct s3c_sdhci_platdata *pd);
0038 extern void s3c_sdhci3_set_platdata(struct s3c_sdhci_platdata *pd);
0039 
0040 /* Default platform data, exported so that per-cpu initialisation can
0041  * set the correct one when there are more than one cpu type selected.
0042 */
0043 
0044 extern struct s3c_sdhci_platdata s3c_hsmmc0_def_platdata;
0045 extern struct s3c_sdhci_platdata s3c_hsmmc1_def_platdata;
0046 extern struct s3c_sdhci_platdata s3c_hsmmc2_def_platdata;
0047 extern struct s3c_sdhci_platdata s3c_hsmmc3_def_platdata;
0048 
0049 /* Helper function availability */
0050 
0051 extern void s3c2416_setup_sdhci0_cfg_gpio(struct platform_device *, int w);
0052 extern void s3c2416_setup_sdhci1_cfg_gpio(struct platform_device *, int w);
0053 extern void s3c64xx_setup_sdhci0_cfg_gpio(struct platform_device *, int w);
0054 extern void s3c64xx_setup_sdhci1_cfg_gpio(struct platform_device *, int w);
0055 extern void s3c64xx_setup_sdhci2_cfg_gpio(struct platform_device *, int w);
0056 
0057 /* S3C2416 SDHCI setup */
0058 
0059 #ifdef CONFIG_S3C2416_SETUP_SDHCI
0060 static inline void s3c2416_default_sdhci0(void)
0061 {
0062 #ifdef CONFIG_S3C_DEV_HSMMC
0063     s3c_hsmmc0_def_platdata.cfg_gpio = s3c2416_setup_sdhci0_cfg_gpio;
0064 #endif /* CONFIG_S3C_DEV_HSMMC */
0065 }
0066 
0067 static inline void s3c2416_default_sdhci1(void)
0068 {
0069 #ifdef CONFIG_S3C_DEV_HSMMC1
0070     s3c_hsmmc1_def_platdata.cfg_gpio = s3c2416_setup_sdhci1_cfg_gpio;
0071 #endif /* CONFIG_S3C_DEV_HSMMC1 */
0072 }
0073 
0074 #else
0075 static inline void s3c2416_default_sdhci0(void) { }
0076 static inline void s3c2416_default_sdhci1(void) { }
0077 
0078 #endif /* CONFIG_S3C2416_SETUP_SDHCI */
0079 
0080 /* S3C64XX SDHCI setup */
0081 
0082 #ifdef CONFIG_S3C64XX_SETUP_SDHCI
0083 static inline void s3c6400_default_sdhci0(void)
0084 {
0085 #ifdef CONFIG_S3C_DEV_HSMMC
0086     s3c_hsmmc0_def_platdata.cfg_gpio = s3c64xx_setup_sdhci0_cfg_gpio;
0087 #endif
0088 }
0089 
0090 static inline void s3c6400_default_sdhci1(void)
0091 {
0092 #ifdef CONFIG_S3C_DEV_HSMMC1
0093     s3c_hsmmc1_def_platdata.cfg_gpio = s3c64xx_setup_sdhci1_cfg_gpio;
0094 #endif
0095 }
0096 
0097 static inline void s3c6400_default_sdhci2(void)
0098 {
0099 #ifdef CONFIG_S3C_DEV_HSMMC2
0100     s3c_hsmmc2_def_platdata.cfg_gpio = s3c64xx_setup_sdhci2_cfg_gpio;
0101 #endif
0102 }
0103 
0104 static inline void s3c6410_default_sdhci0(void)
0105 {
0106 #ifdef CONFIG_S3C_DEV_HSMMC
0107     s3c_hsmmc0_def_platdata.cfg_gpio = s3c64xx_setup_sdhci0_cfg_gpio;
0108 #endif
0109 }
0110 
0111 static inline void s3c6410_default_sdhci1(void)
0112 {
0113 #ifdef CONFIG_S3C_DEV_HSMMC1
0114     s3c_hsmmc1_def_platdata.cfg_gpio = s3c64xx_setup_sdhci1_cfg_gpio;
0115 #endif
0116 }
0117 
0118 static inline void s3c6410_default_sdhci2(void)
0119 {
0120 #ifdef CONFIG_S3C_DEV_HSMMC2
0121     s3c_hsmmc2_def_platdata.cfg_gpio = s3c64xx_setup_sdhci2_cfg_gpio;
0122 #endif
0123 }
0124 
0125 #else
0126 static inline void s3c6410_default_sdhci0(void) { }
0127 static inline void s3c6410_default_sdhci1(void) { }
0128 static inline void s3c6410_default_sdhci2(void) { }
0129 static inline void s3c6400_default_sdhci0(void) { }
0130 static inline void s3c6400_default_sdhci1(void) { }
0131 static inline void s3c6400_default_sdhci2(void) { }
0132 
0133 #endif /* CONFIG_S3C64XX_SETUP_SDHCI */
0134 
0135 static inline void s3c_sdhci_setname(int id, char *name)
0136 {
0137     switch (id) {
0138 #ifdef CONFIG_S3C_DEV_HSMMC
0139     case 0:
0140         s3c_device_hsmmc0.name = name;
0141         break;
0142 #endif
0143 #ifdef CONFIG_S3C_DEV_HSMMC1
0144     case 1:
0145         s3c_device_hsmmc1.name = name;
0146         break;
0147 #endif
0148 #ifdef CONFIG_S3C_DEV_HSMMC2
0149     case 2:
0150         s3c_device_hsmmc2.name = name;
0151         break;
0152 #endif
0153 #ifdef CONFIG_S3C_DEV_HSMMC3
0154     case 3:
0155         s3c_device_hsmmc3.name = name;
0156         break;
0157 #endif
0158     default:
0159         break;
0160     }
0161 }
0162 #endif /* __PLAT_S3C_SDHCI_H */