blob: 4c2e9701577ad09a012a7f339c83a3ce64cfa8f5 [file] [log] [blame]
Colin Crossb44b7d72011-04-08 22:20:53 -07001/*
2 * arch/arm/include/asm/mach/mmc.h
3 */
4#ifndef ASMARM_MACH_MMC_H
5#define ASMARM_MACH_MMC_H
6
7#include <linux/mmc/host.h>
8#include <linux/mmc/card.h>
9#include <linux/mmc/sdio_func.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070010#include <mach/gpio.h>
11
12#define SDC_DAT1_DISABLE 0
13#define SDC_DAT1_ENABLE 1
14#define SDC_DAT1_ENWAKE 2
15#define SDC_DAT1_DISWAKE 3
Colin Crossb44b7d72011-04-08 22:20:53 -070016
17struct embedded_sdio_data {
18 struct sdio_cis cis;
19 struct sdio_cccr cccr;
20 struct sdio_embedded_func *funcs;
21 int num_funcs;
22};
23
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070024/* This structure keeps information per regulator */
25struct msm_mmc_reg_data {
26 /* voltage regulator handle */
27 struct regulator *reg;
28 /* regulator name */
29 const char *name;
30 /* voltage level to be set */
Subhash Jadavani99ba53a2011-08-01 16:04:18 +053031 unsigned int low_vol_level;
32 unsigned int high_vol_level;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070033 /* Load values for low power and high power mode */
34 unsigned int lpm_uA;
35 unsigned int hpm_uA;
36 /*
37 * is set voltage supported for this regulator?
38 * false => set voltage is not supported
39 * true => set voltage is supported
40 */
41 bool set_voltage_sup;
42 /* is this regulator enabled? */
43 bool is_enabled;
44 /* is this regulator needs to be always on? */
45 bool always_on;
46 /* is low power mode setting required for this regulator? */
47 bool lpm_sup;
48};
49
50/*
51 * This structure keeps information for all the
52 * regulators required for a SDCC slot.
53 */
54struct msm_mmc_slot_reg_data {
55 struct msm_mmc_reg_data *vdd_data; /* keeps VDD/VCC regulator info */
56 struct msm_mmc_reg_data *vccq_data; /* keeps VCCQ regulator info */
57 struct msm_mmc_reg_data *vddp_data; /* keeps VDD Pad regulator info */
58};
59
60struct msm_mmc_gpio {
61 u32 no;
62 const char *name;
63 bool is_always_on;
64 bool is_enabled;
65};
66
67struct msm_mmc_gpio_data {
68 struct msm_mmc_gpio *gpio;
69 u8 size;
70};
71
72struct msm_mmc_pad_pull {
73 enum msm_tlmm_pull_tgt no;
74 u32 val;
75};
76
77struct msm_mmc_pad_pull_data {
78 struct msm_mmc_pad_pull *on;
79 struct msm_mmc_pad_pull *off;
80 u8 size;
81};
82
83struct msm_mmc_pad_drv {
84 enum msm_tlmm_hdrive_tgt no;
85 u32 val;
86};
87
88struct msm_mmc_pad_drv_data {
89 struct msm_mmc_pad_drv *on;
90 struct msm_mmc_pad_drv *off;
91 u8 size;
92};
93
94struct msm_mmc_pad_data {
95 struct msm_mmc_pad_pull_data *pull;
96 struct msm_mmc_pad_drv_data *drv;
97};
98
99struct msm_mmc_pin_data {
100 /*
101 * = 1 if controller pins are using gpios
102 * = 0 if controller has dedicated MSM pads
103 */
104 u8 is_gpio;
105 u8 cfg_sts;
106 struct msm_mmc_gpio_data *gpio_data;
107 struct msm_mmc_pad_data *pad_data;
108};
109
Colin Crossb44b7d72011-04-08 22:20:53 -0700110struct mmc_platform_data {
111 unsigned int ocr_mask; /* available voltages */
112 int built_in; /* built-in device flag */
Dmitry Shmidt5228a592011-05-03 11:05:04 -0700113 int card_present; /* card detect state */
Colin Crossb44b7d72011-04-08 22:20:53 -0700114 u32 (*translate_vdd)(struct device *, unsigned int);
115 unsigned int (*status)(struct device *);
116 struct embedded_sdio_data *embedded_sdio;
117 int (*register_status_notify)(void (*callback)(int card_present, void *dev_id), void *dev_id);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700118 /*
119 * XPC controls the maximum current in the
120 * default speed mode of SDXC card.
121 */
122 unsigned int xpc_cap;
123 /* Supported UHS-I Modes */
124 unsigned int uhs_caps;
125 void (*sdio_lpm_gpio_setup)(struct device *, unsigned int);
126 unsigned int status_irq;
127 unsigned int status_gpio;
128 unsigned int sdiowakeup_irq;
129 unsigned long irq_flags;
130 unsigned long mmc_bus_width;
131 int (*wpswitch) (struct device *);
132 int dummy52_required;
133 unsigned int msmsdcc_fmin;
134 unsigned int msmsdcc_fmid;
135 unsigned int msmsdcc_fmax;
136 bool nonremovable;
137 bool pclk_src_dfab;
138 int (*cfg_mpm_sdiowakeup)(struct device *, unsigned);
139 bool sdcc_v4_sup;
140 unsigned int wpswitch_gpio;
141 unsigned char wpswitch_polarity;
142 struct msm_mmc_slot_reg_data *vreg_data;
143 int is_sdio_al_client;
144 unsigned int *sup_clk_table;
145 unsigned char sup_clk_cnt;
146 struct msm_mmc_pin_data *pin_data;
Colin Crossb44b7d72011-04-08 22:20:53 -0700147};
148
149#endif