Commit | Line | Data |
---|---|---|
5cc7fd88 BD |
1 | /* linux/arch/arm/plat-s3c/include/plat/sdhci.h |
2 | * | |
3 | * Copyright 2008 Openmoko, Inc. | |
4 | * Copyright 2008 Simtec Electronics | |
5 | * http://armlinux.simtec.co.uk/ | |
6 | * Ben Dooks <ben@simtec.co.uk> | |
7 | * | |
8 | * S3C Platform - SDHCI (HSMMC) platform data definitions | |
9 | * | |
10 | * This program is free software; you can redistribute it and/or modify | |
11 | * it under the terms of the GNU General Public License version 2 as | |
12 | * published by the Free Software Foundation. | |
13 | */ | |
14 | ||
15 | #ifndef __PLAT_S3C_SDHCI_H | |
16 | #define __PLAT_S3C_SDHCI_H __FILE__ | |
17 | ||
18 | struct platform_device; | |
19 | struct mmc_host; | |
20 | struct mmc_card; | |
21 | struct mmc_ios; | |
22 | ||
23 | /** | |
24 | * struct s3c_sdhci_platdata() - Platform device data for Samsung SDHCI | |
25 | * @max_width: The maximum number of data bits supported. | |
26 | * @host_caps: Standard MMC host capabilities bit field. | |
27 | * @cfg_gpio: Configure the GPIO for a specific card bit-width | |
28 | * @cfg_card: Configure the interface for a specific card and speed. This | |
29 | * is necessary the controllers and/or GPIO blocks require the | |
30 | * changing of driver-strength and other controls dependant on | |
31 | * the card and speed of operation. | |
32 | * | |
33 | * Initialisation data specific to either the machine or the platform | |
34 | * for the device driver to use or call-back when configuring gpio or | |
35 | * card speed information. | |
36 | */ | |
37 | struct s3c_sdhci_platdata { | |
38 | unsigned int max_width; | |
39 | unsigned int host_caps; | |
40 | ||
41 | char **clocks; /* set of clock sources */ | |
42 | ||
43 | void (*cfg_gpio)(struct platform_device *dev, int width); | |
44 | void (*cfg_card)(struct platform_device *dev, | |
45 | void __iomem *regbase, | |
46 | struct mmc_ios *ios, | |
47 | struct mmc_card *card); | |
48 | }; | |
49 | ||
50 | /** | |
51 | * s3c_sdhci0_set_platdata - Set platform data for S3C SDHCI device. | |
52 | * @pd: Platform data to register to device. | |
53 | * | |
54 | * Register the given platform data for use withe S3C SDHCI device. | |
55 | * The call will copy the platform data, so the board definitions can | |
56 | * make the structure itself __initdata. | |
57 | */ | |
58 | extern void s3c_sdhci0_set_platdata(struct s3c_sdhci_platdata *pd); | |
a2205cd2 | 59 | extern void s3c_sdhci1_set_platdata(struct s3c_sdhci_platdata *pd); |
5cc7fd88 BD |
60 | |
61 | /* Default platform data, exported so that per-cpu initialisation can | |
62 | * set the correct one when there are more than one cpu type selected. | |
63 | */ | |
64 | ||
a2205cd2 BD |
65 | extern struct s3c_sdhci_platdata s3c_hsmmc0_def_platdata; |
66 | extern struct s3c_sdhci_platdata s3c_hsmmc1_def_platdata; | |
5cc7fd88 BD |
67 | |
68 | /* Helper function availablity */ | |
69 | ||
4faf6867 BD |
70 | extern void s3c64xx_setup_sdhci0_cfg_gpio(struct platform_device *, int w); |
71 | extern void s3c64xx_setup_sdhci1_cfg_gpio(struct platform_device *, int w); | |
72 | ||
73 | /* S3C6400 SDHCI setup */ | |
74 | ||
75 | #ifdef CONFIG_S3C6400_SETUP_SDHCI | |
76 | extern char *s3c6400_hsmmc_clksrcs[4]; | |
77 | ||
78 | #ifdef CONFIG_S3C_DEV_HSMMC | |
79 | extern void s3c6400_setup_sdhci_cfg_card(struct platform_device *dev, | |
80 | void __iomem *r, | |
81 | struct mmc_ios *ios, | |
82 | struct mmc_card *card); | |
83 | ||
84 | static inline void s3c6400_default_sdhci0(void) | |
85 | { | |
86 | s3c_hsmmc0_def_platdata.clocks = s3c6400_hsmmc_clksrcs; | |
87 | s3c_hsmmc0_def_platdata.cfg_gpio = s3c64xx_setup_sdhci0_cfg_gpio; | |
88 | s3c_hsmmc0_def_platdata.cfg_card = s3c6400_setup_sdhci_cfg_card; | |
89 | } | |
90 | ||
91 | #else | |
92 | static inline void s3c6400_default_sdhci0(void) { } | |
93 | #endif /* CONFIG_S3C_DEV_HSMMC */ | |
94 | ||
95 | #ifdef CONFIG_S3C_DEV_HSMMC1 | |
96 | static inline void s3c6400_default_sdhci1(void) | |
97 | { | |
98 | s3c_hsmmc1_def_platdata.clocks = s3c6400_hsmmc_clksrcs; | |
99 | s3c_hsmmc1_def_platdata.cfg_gpio = s3c64xx_setup_sdhci1_cfg_gpio; | |
100 | s3c_hsmmc1_def_platdata.cfg_card = s3c6400_setup_sdhci_cfg_card; | |
101 | } | |
102 | #else | |
103 | static inline void s3c6400_default_sdhci1(void) { } | |
104 | #endif /* CONFIG_S3C_DEV_HSMMC1 */ | |
105 | ||
106 | #else | |
107 | static inline void s3c6400_default_sdhci0(void) { } | |
108 | static inline void s3c6400_default_sdhci1(void) { } | |
109 | #endif /* CONFIG_S3C6400_SETUP_SDHCI */ | |
110 | ||
111 | /* S3C6410 SDHCI setup */ | |
112 | ||
5cc7fd88 BD |
113 | #ifdef CONFIG_S3C6410_SETUP_SDHCI |
114 | extern char *s3c6410_hsmmc_clksrcs[4]; | |
115 | ||
5cc7fd88 BD |
116 | extern void s3c6410_setup_sdhci0_cfg_card(struct platform_device *dev, |
117 | void __iomem *r, | |
118 | struct mmc_ios *ios, | |
119 | struct mmc_card *card); | |
120 | ||
713e9ded | 121 | #ifdef CONFIG_S3C_DEV_HSMMC |
5cc7fd88 BD |
122 | static inline void s3c6410_default_sdhci0(void) |
123 | { | |
124 | s3c_hsmmc0_def_platdata.clocks = s3c6410_hsmmc_clksrcs; | |
4faf6867 | 125 | s3c_hsmmc0_def_platdata.cfg_gpio = s3c64xx_setup_sdhci0_cfg_gpio; |
5cc7fd88 BD |
126 | s3c_hsmmc0_def_platdata.cfg_card = s3c6410_setup_sdhci0_cfg_card; |
127 | } | |
713e9ded BD |
128 | #else |
129 | static inline void s3c6410_default_sdhci0(void) { } | |
130 | #endif /* CONFIG_S3C_DEV_HSMMC */ | |
a2205cd2 | 131 | |
713e9ded | 132 | #ifdef CONFIG_S3C_DEV_HSMMC1 |
a2205cd2 BD |
133 | static inline void s3c6410_default_sdhci1(void) |
134 | { | |
135 | s3c_hsmmc1_def_platdata.clocks = s3c6410_hsmmc_clksrcs; | |
4faf6867 | 136 | s3c_hsmmc1_def_platdata.cfg_gpio = s3c64xx_setup_sdhci1_cfg_gpio; |
a2205cd2 BD |
137 | s3c_hsmmc1_def_platdata.cfg_card = s3c6410_setup_sdhci0_cfg_card; |
138 | } | |
713e9ded BD |
139 | #else |
140 | static inline void s3c6410_default_sdhci1(void) { } | |
141 | #endif /* CONFIG_S3C_DEV_HSMMC1 */ | |
142 | ||
5cc7fd88 BD |
143 | #else |
144 | static inline void s3c6410_default_sdhci0(void) { } | |
a2205cd2 | 145 | static inline void s3c6410_default_sdhci1(void) { } |
5cc7fd88 BD |
146 | #endif /* CONFIG_S3C6410_SETUP_SDHCI */ |
147 | ||
148 | #endif /* __PLAT_S3C_SDHCI_H */ |