sdhci.h 6.1 KB
Newer Older
K
Kukjin Kim 已提交
1 2 3 4
/* linux/arch/arm/plat-samsung/include/plat/sdhci.h
 *
 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
 *		http://www.samsung.com
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
 *
 * Copyright 2008 Openmoko, Inc.
 * Copyright 2008 Simtec Electronics
 *	http://armlinux.simtec.co.uk/
 *	Ben Dooks <ben@simtec.co.uk>
 *
 * S3C Platform - SDHCI (HSMMC) platform data definitions
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
*/

#ifndef __PLAT_S3C_SDHCI_H
#define __PLAT_S3C_SDHCI_H __FILE__

21
#include <linux/platform_data/mmc-sdhci-s3c.h>
22 23
#include <plat/devs.h>

24 25 26 27 28 29 30
/* s3c_sdhci_set_platdata() - common helper for setting SDHCI platform data
 * @pd: The default platform data for this device.
 * @set: Pointer to the platform data to fill in.
 */
extern void s3c_sdhci_set_platdata(struct s3c_sdhci_platdata *pd,
				    struct s3c_sdhci_platdata *set);

31 32 33 34 35 36 37 38 39
/**
 * s3c_sdhci0_set_platdata - Set platform data for S3C SDHCI device.
 * @pd: Platform data to register to device.
 *
 * Register the given platform data for use withe S3C SDHCI device.
 * The call will copy the platform data, so the board definitions can
 * make the structure itself __initdata.
 */
extern void s3c_sdhci0_set_platdata(struct s3c_sdhci_platdata *pd);
40
extern void s3c_sdhci1_set_platdata(struct s3c_sdhci_platdata *pd);
41
extern void s3c_sdhci2_set_platdata(struct s3c_sdhci_platdata *pd);
42
extern void s3c_sdhci3_set_platdata(struct s3c_sdhci_platdata *pd);
43 44 45 46 47

/* Default platform data, exported so that per-cpu initialisation can
 * set the correct one when there are more than one cpu type selected.
*/

48 49
extern struct s3c_sdhci_platdata s3c_hsmmc0_def_platdata;
extern struct s3c_sdhci_platdata s3c_hsmmc1_def_platdata;
50
extern struct s3c_sdhci_platdata s3c_hsmmc2_def_platdata;
51
extern struct s3c_sdhci_platdata s3c_hsmmc3_def_platdata;
52

L
Lucas De Marchi 已提交
53
/* Helper function availability */
54

55 56
extern void s3c2416_setup_sdhci0_cfg_gpio(struct platform_device *, int w);
extern void s3c2416_setup_sdhci1_cfg_gpio(struct platform_device *, int w);
57 58
extern void s3c64xx_setup_sdhci0_cfg_gpio(struct platform_device *, int w);
extern void s3c64xx_setup_sdhci1_cfg_gpio(struct platform_device *, int w);
59
extern void s3c64xx_setup_sdhci2_cfg_gpio(struct platform_device *, int w);
60 61 62
extern void s5pv210_setup_sdhci0_cfg_gpio(struct platform_device *, int w);
extern void s5pv210_setup_sdhci1_cfg_gpio(struct platform_device *, int w);
extern void s5pv210_setup_sdhci2_cfg_gpio(struct platform_device *, int w);
63
extern void s5pv210_setup_sdhci3_cfg_gpio(struct platform_device *, int w);
K
Kukjin Kim 已提交
64 65 66 67
extern void exynos4_setup_sdhci0_cfg_gpio(struct platform_device *, int w);
extern void exynos4_setup_sdhci1_cfg_gpio(struct platform_device *, int w);
extern void exynos4_setup_sdhci2_cfg_gpio(struct platform_device *, int w);
extern void exynos4_setup_sdhci3_cfg_gpio(struct platform_device *, int w);
68

69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
/* S3C2416 SDHCI setup */

#ifdef CONFIG_S3C2416_SETUP_SDHCI
static inline void s3c2416_default_sdhci0(void)
{
#ifdef CONFIG_S3C_DEV_HSMMC
	s3c_hsmmc0_def_platdata.cfg_gpio = s3c2416_setup_sdhci0_cfg_gpio;
#endif /* CONFIG_S3C_DEV_HSMMC */
}

static inline void s3c2416_default_sdhci1(void)
{
#ifdef CONFIG_S3C_DEV_HSMMC1
	s3c_hsmmc1_def_platdata.cfg_gpio = s3c2416_setup_sdhci1_cfg_gpio;
#endif /* CONFIG_S3C_DEV_HSMMC1 */
}

#else
static inline void s3c2416_default_sdhci0(void) { }
static inline void s3c2416_default_sdhci1(void) { }

#endif /* CONFIG_S3C2416_SETUP_SDHCI */
91

92
/* S3C64XX SDHCI setup */
93

94
#ifdef CONFIG_S3C64XX_SETUP_SDHCI
95 96
static inline void s3c6400_default_sdhci0(void)
{
97
#ifdef CONFIG_S3C_DEV_HSMMC
98
	s3c_hsmmc0_def_platdata.cfg_gpio = s3c64xx_setup_sdhci0_cfg_gpio;
99
#endif
100 101 102 103
}

static inline void s3c6400_default_sdhci1(void)
{
104
#ifdef CONFIG_S3C_DEV_HSMMC1
105
	s3c_hsmmc1_def_platdata.cfg_gpio = s3c64xx_setup_sdhci1_cfg_gpio;
106
#endif
107 108
}

109 110
static inline void s3c6400_default_sdhci2(void)
{
111
#ifdef CONFIG_S3C_DEV_HSMMC2
112
	s3c_hsmmc2_def_platdata.cfg_gpio = s3c64xx_setup_sdhci2_cfg_gpio;
113
#endif
114
}
115

116 117
static inline void s3c6410_default_sdhci0(void)
{
118
#ifdef CONFIG_S3C_DEV_HSMMC
119
	s3c_hsmmc0_def_platdata.cfg_gpio = s3c64xx_setup_sdhci0_cfg_gpio;
120
#endif
121
}
122 123 124

static inline void s3c6410_default_sdhci1(void)
{
125
#ifdef CONFIG_S3C_DEV_HSMMC1
126
	s3c_hsmmc1_def_platdata.cfg_gpio = s3c64xx_setup_sdhci1_cfg_gpio;
127
#endif
128
}
B
Ben Dooks 已提交
129

130 131
static inline void s3c6410_default_sdhci2(void)
{
132
#ifdef CONFIG_S3C_DEV_HSMMC2
133
	s3c_hsmmc2_def_platdata.cfg_gpio = s3c64xx_setup_sdhci2_cfg_gpio;
134
#endif
135 136
}

137 138
#else
static inline void s3c6410_default_sdhci0(void) { }
139
static inline void s3c6410_default_sdhci1(void) { }
140
static inline void s3c6410_default_sdhci2(void) { }
141 142
static inline void s3c6400_default_sdhci0(void) { }
static inline void s3c6400_default_sdhci1(void) { }
143
static inline void s3c6400_default_sdhci2(void) { }
144 145

#endif /* CONFIG_S3C64XX_SETUP_SDHCI */
146

147
/* S5PV210 SDHCI setup */
148 149 150 151

#ifdef CONFIG_S5PV210_SETUP_SDHCI
static inline void s5pv210_default_sdhci0(void)
{
152
#ifdef CONFIG_S3C_DEV_HSMMC
153
	s3c_hsmmc0_def_platdata.cfg_gpio = s5pv210_setup_sdhci0_cfg_gpio;
154
#endif
155 156 157 158
}

static inline void s5pv210_default_sdhci1(void)
{
159
#ifdef CONFIG_S3C_DEV_HSMMC1
160
	s3c_hsmmc1_def_platdata.cfg_gpio = s5pv210_setup_sdhci1_cfg_gpio;
161
#endif
162 163 164 165
}

static inline void s5pv210_default_sdhci2(void)
{
166
#ifdef CONFIG_S3C_DEV_HSMMC2
167
	s3c_hsmmc2_def_platdata.cfg_gpio = s5pv210_setup_sdhci2_cfg_gpio;
168
#endif
169 170
}

171 172
static inline void s5pv210_default_sdhci3(void)
{
173
#ifdef CONFIG_S3C_DEV_HSMMC3
174
	s3c_hsmmc3_def_platdata.cfg_gpio = s5pv210_setup_sdhci3_cfg_gpio;
175
#endif
176 177
}

178 179 180 181
#else
static inline void s5pv210_default_sdhci0(void) { }
static inline void s5pv210_default_sdhci1(void) { }
static inline void s5pv210_default_sdhci2(void) { }
182
static inline void s5pv210_default_sdhci3(void) { }
183

184
#endif /* CONFIG_S5PV210_SETUP_SDHCI */
185

186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
static inline void s3c_sdhci_setname(int id, char *name)
{
	switch (id) {
#ifdef CONFIG_S3C_DEV_HSMMC
	case 0:
		s3c_device_hsmmc0.name = name;
		break;
#endif
#ifdef CONFIG_S3C_DEV_HSMMC1
	case 1:
		s3c_device_hsmmc1.name = name;
		break;
#endif
#ifdef CONFIG_S3C_DEV_HSMMC2
	case 2:
		s3c_device_hsmmc2.name = name;
		break;
#endif
#ifdef CONFIG_S3C_DEV_HSMMC3
	case 3:
		s3c_device_hsmmc3.name = name;
		break;
#endif
209 210
	default:
		break;
211 212
	}
}
213
#endif /* __PLAT_S3C_SDHCI_H */