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