blob: a6ec7b247a01ca374857dcd79b3c965d43cc56a5 [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>
Subhash Jadavanibcd435f2012-04-24 18:26:49 +053011#include <mach/msm_bus.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070012
13#define SDC_DAT1_DISABLE 0
14#define SDC_DAT1_ENABLE 1
15#define SDC_DAT1_ENWAKE 2
16#define SDC_DAT1_DISWAKE 3
Colin Crossb44b7d72011-04-08 22:20:53 -070017
18struct embedded_sdio_data {
19 struct sdio_cis cis;
20 struct sdio_cccr cccr;
21 struct sdio_embedded_func *funcs;
22 int num_funcs;
23};
24
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070025/* This structure keeps information per regulator */
26struct msm_mmc_reg_data {
27 /* voltage regulator handle */
28 struct regulator *reg;
29 /* regulator name */
30 const char *name;
31 /* voltage level to be set */
Subhash Jadavani99ba53a2011-08-01 16:04:18 +053032 unsigned int low_vol_level;
33 unsigned int high_vol_level;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070034 /* Load values for low power and high power mode */
35 unsigned int lpm_uA;
36 unsigned int hpm_uA;
37 /*
38 * is set voltage supported for this regulator?
39 * false => set voltage is not supported
40 * true => set voltage is supported
Krishna Kondafea60182011-11-01 16:01:34 -070041 *
42 * Some regulators (like gpio-regulators, LVS (low voltage swtiches)
43 * PMIC regulators) dont have the capability to call
44 * regulator_set_voltage or regulator_set_optimum_mode
45 * Use this variable to indicate if its a such regulator or not
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070046 */
47 bool set_voltage_sup;
48 /* is this regulator enabled? */
49 bool is_enabled;
50 /* is this regulator needs to be always on? */
51 bool always_on;
52 /* is low power mode setting required for this regulator? */
53 bool lpm_sup;
54};
55
56/*
57 * This structure keeps information for all the
58 * regulators required for a SDCC slot.
59 */
60struct msm_mmc_slot_reg_data {
61 struct msm_mmc_reg_data *vdd_data; /* keeps VDD/VCC regulator info */
Subhash Jadavani937c7502012-06-01 15:34:46 +053062 struct msm_mmc_reg_data *vdd_io_data; /* keeps VDD IO regulator info */
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070063};
64
65struct msm_mmc_gpio {
66 u32 no;
67 const char *name;
68 bool is_always_on;
69 bool is_enabled;
70};
71
72struct msm_mmc_gpio_data {
73 struct msm_mmc_gpio *gpio;
74 u8 size;
75};
76
77struct msm_mmc_pad_pull {
78 enum msm_tlmm_pull_tgt no;
79 u32 val;
80};
81
82struct msm_mmc_pad_pull_data {
83 struct msm_mmc_pad_pull *on;
84 struct msm_mmc_pad_pull *off;
85 u8 size;
86};
87
88struct msm_mmc_pad_drv {
89 enum msm_tlmm_hdrive_tgt no;
90 u32 val;
91};
92
93struct msm_mmc_pad_drv_data {
94 struct msm_mmc_pad_drv *on;
95 struct msm_mmc_pad_drv *off;
96 u8 size;
97};
98
99struct msm_mmc_pad_data {
100 struct msm_mmc_pad_pull_data *pull;
101 struct msm_mmc_pad_drv_data *drv;
102};
103
104struct msm_mmc_pin_data {
105 /*
106 * = 1 if controller pins are using gpios
107 * = 0 if controller has dedicated MSM pads
108 */
109 u8 is_gpio;
110 u8 cfg_sts;
111 struct msm_mmc_gpio_data *gpio_data;
112 struct msm_mmc_pad_data *pad_data;
113};
114
Subhash Jadavanibcd435f2012-04-24 18:26:49 +0530115struct msm_mmc_bus_voting_data {
116 struct msm_bus_scale_pdata *use_cases;
117 unsigned int *bw_vecs;
118 unsigned int bw_vecs_size;
119};
120
Colin Crossb44b7d72011-04-08 22:20:53 -0700121struct mmc_platform_data {
122 unsigned int ocr_mask; /* available voltages */
123 int built_in; /* built-in device flag */
Dmitry Shmidt5228a592011-05-03 11:05:04 -0700124 int card_present; /* card detect state */
Colin Crossb44b7d72011-04-08 22:20:53 -0700125 u32 (*translate_vdd)(struct device *, unsigned int);
126 unsigned int (*status)(struct device *);
127 struct embedded_sdio_data *embedded_sdio;
128 int (*register_status_notify)(void (*callback)(int card_present, void *dev_id), void *dev_id);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700129 /*
130 * XPC controls the maximum current in the
131 * default speed mode of SDXC card.
132 */
133 unsigned int xpc_cap;
134 /* Supported UHS-I Modes */
135 unsigned int uhs_caps;
136 void (*sdio_lpm_gpio_setup)(struct device *, unsigned int);
137 unsigned int status_irq;
138 unsigned int status_gpio;
Krishna Konda360aa422011-12-06 18:27:41 -0800139 /* Indicates the polarity of the GPIO line when card is inserted */
140 bool is_status_gpio_active_low;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700141 unsigned int sdiowakeup_irq;
142 unsigned long irq_flags;
143 unsigned long mmc_bus_width;
144 int (*wpswitch) (struct device *);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700145 unsigned int msmsdcc_fmin;
146 unsigned int msmsdcc_fmid;
147 unsigned int msmsdcc_fmax;
148 bool nonremovable;
Subhash Jadavanic9b85752012-04-13 11:16:49 +0530149 unsigned int mpm_sdiowakeup_int;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700150 unsigned int wpswitch_gpio;
151 unsigned char wpswitch_polarity;
152 struct msm_mmc_slot_reg_data *vreg_data;
153 int is_sdio_al_client;
154 unsigned int *sup_clk_table;
155 unsigned char sup_clk_cnt;
156 struct msm_mmc_pin_data *pin_data;
Sahitya Tummalad9df3272011-08-19 16:50:46 +0530157 bool disable_bam;
Sahitya Tummalab07e1ae2011-09-02 11:58:42 +0530158 bool disable_runtime_pm;
Sahitya Tummala85fa0702011-09-15 09:39:37 +0530159 bool disable_cmd23;
Oluwafemi Adeyemi784b4392012-04-10 13:49:38 -0700160 u32 cpu_dma_latency;
Subhash Jadavanibcd435f2012-04-24 18:26:49 +0530161 struct msm_mmc_bus_voting_data *msm_bus_voting_data;
Colin Crossb44b7d72011-04-08 22:20:53 -0700162};
163
164#endif