blob: d439160a51cdc34fd648e61d665f4cb097174a2b [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 */
31 unsigned int level;
32 /* Load values for low power and high power mode */
33 unsigned int lpm_uA;
34 unsigned int hpm_uA;
35 /*
36 * is set voltage supported for this regulator?
37 * false => set voltage is not supported
38 * true => set voltage is supported
39 */
40 bool set_voltage_sup;
41 /* is this regulator enabled? */
42 bool is_enabled;
43 /* is this regulator needs to be always on? */
44 bool always_on;
45 /* is low power mode setting required for this regulator? */
46 bool lpm_sup;
47};
48
49/*
50 * This structure keeps information for all the
51 * regulators required for a SDCC slot.
52 */
53struct msm_mmc_slot_reg_data {
54 struct msm_mmc_reg_data *vdd_data; /* keeps VDD/VCC regulator info */
55 struct msm_mmc_reg_data *vccq_data; /* keeps VCCQ regulator info */
56 struct msm_mmc_reg_data *vddp_data; /* keeps VDD Pad regulator info */
57};
58
59struct msm_mmc_gpio {
60 u32 no;
61 const char *name;
62 bool is_always_on;
63 bool is_enabled;
64};
65
66struct msm_mmc_gpio_data {
67 struct msm_mmc_gpio *gpio;
68 u8 size;
69};
70
71struct msm_mmc_pad_pull {
72 enum msm_tlmm_pull_tgt no;
73 u32 val;
74};
75
76struct msm_mmc_pad_pull_data {
77 struct msm_mmc_pad_pull *on;
78 struct msm_mmc_pad_pull *off;
79 u8 size;
80};
81
82struct msm_mmc_pad_drv {
83 enum msm_tlmm_hdrive_tgt no;
84 u32 val;
85};
86
87struct msm_mmc_pad_drv_data {
88 struct msm_mmc_pad_drv *on;
89 struct msm_mmc_pad_drv *off;
90 u8 size;
91};
92
93struct msm_mmc_pad_data {
94 struct msm_mmc_pad_pull_data *pull;
95 struct msm_mmc_pad_drv_data *drv;
96};
97
98struct msm_mmc_pin_data {
99 /*
100 * = 1 if controller pins are using gpios
101 * = 0 if controller has dedicated MSM pads
102 */
103 u8 is_gpio;
104 u8 cfg_sts;
105 struct msm_mmc_gpio_data *gpio_data;
106 struct msm_mmc_pad_data *pad_data;
107};
108
Colin Crossb44b7d72011-04-08 22:20:53 -0700109struct mmc_platform_data {
110 unsigned int ocr_mask; /* available voltages */
111 int built_in; /* built-in device flag */
Dmitry Shmidt5228a592011-05-03 11:05:04 -0700112 int card_present; /* card detect state */
Colin Crossb44b7d72011-04-08 22:20:53 -0700113 u32 (*translate_vdd)(struct device *, unsigned int);
114 unsigned int (*status)(struct device *);
115 struct embedded_sdio_data *embedded_sdio;
116 int (*register_status_notify)(void (*callback)(int card_present, void *dev_id), void *dev_id);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700117 /*
118 * XPC controls the maximum current in the
119 * default speed mode of SDXC card.
120 */
121 unsigned int xpc_cap;
122 /* Supported UHS-I Modes */
123 unsigned int uhs_caps;
124 void (*sdio_lpm_gpio_setup)(struct device *, unsigned int);
125 unsigned int status_irq;
126 unsigned int status_gpio;
127 unsigned int sdiowakeup_irq;
128 unsigned long irq_flags;
129 unsigned long mmc_bus_width;
130 int (*wpswitch) (struct device *);
131 int dummy52_required;
132 unsigned int msmsdcc_fmin;
133 unsigned int msmsdcc_fmid;
134 unsigned int msmsdcc_fmax;
135 bool nonremovable;
136 bool pclk_src_dfab;
137 int (*cfg_mpm_sdiowakeup)(struct device *, unsigned);
138 bool sdcc_v4_sup;
139 unsigned int wpswitch_gpio;
140 unsigned char wpswitch_polarity;
141 struct msm_mmc_slot_reg_data *vreg_data;
142 int is_sdio_al_client;
143 unsigned int *sup_clk_table;
144 unsigned char sup_clk_cnt;
145 struct msm_mmc_pin_data *pin_data;
Colin Crossb44b7d72011-04-08 22:20:53 -0700146};
147
148#endif