176 lines
4.4 KiB
C
176 lines
4.4 KiB
C
/*
|
|
* arch/arm/include/asm/mach/mmc.h
|
|
*/
|
|
#ifndef ASMARM_MACH_MMC_H
|
|
#define ASMARM_MACH_MMC_H
|
|
|
|
#include <linux/mmc/host.h>
|
|
#include <linux/mmc/card.h>
|
|
#include <linux/mmc/sdio_func.h>
|
|
#include <mach/gpio.h>
|
|
#include <mach/msm_bus.h>
|
|
|
|
#define SDC_DAT1_DISABLE 0
|
|
#define SDC_DAT1_ENABLE 1
|
|
#define SDC_DAT1_ENWAKE 2
|
|
#define SDC_DAT1_DISWAKE 3
|
|
|
|
struct embedded_sdio_data {
|
|
struct sdio_cis cis;
|
|
struct sdio_cccr cccr;
|
|
struct sdio_embedded_func *funcs;
|
|
int num_funcs;
|
|
};
|
|
|
|
/* This structure keeps information per regulator */
|
|
struct msm_mmc_reg_data {
|
|
/* voltage regulator handle */
|
|
struct regulator *reg;
|
|
/* regulator name */
|
|
const char *name;
|
|
/* voltage level to be set */
|
|
unsigned int low_vol_level;
|
|
unsigned int high_vol_level;
|
|
/* Load values for low power and high power mode */
|
|
unsigned int lpm_uA;
|
|
unsigned int hpm_uA;
|
|
/*
|
|
* is set voltage supported for this regulator?
|
|
* false => set voltage is not supported
|
|
* true => set voltage is supported
|
|
*
|
|
* Some regulators (like gpio-regulators, LVS (low voltage swtiches)
|
|
* PMIC regulators) dont have the capability to call
|
|
* regulator_set_voltage or regulator_set_optimum_mode
|
|
* Use this variable to indicate if its a such regulator or not
|
|
*/
|
|
bool set_voltage_sup;
|
|
/* is this regulator enabled? */
|
|
bool is_enabled;
|
|
/* is this regulator needs to be always on? */
|
|
bool always_on;
|
|
/* is low power mode setting required for this regulator? */
|
|
bool lpm_sup;
|
|
/*
|
|
* Use to indicate if the regulator should be reset at boot time.
|
|
* Its needed only when sd card's vdd regulator is always on
|
|
* since always on regulators dont get reset at boot time.
|
|
*
|
|
* It is needed for sd 3.0 card to be detected as a sd 3.0 card
|
|
* on device reboot.
|
|
*/
|
|
bool reset_at_init;
|
|
};
|
|
|
|
/*
|
|
* This structure keeps information for all the
|
|
* regulators required for a SDCC slot.
|
|
*/
|
|
struct msm_mmc_slot_reg_data {
|
|
struct msm_mmc_reg_data *vdd_data; /* keeps VDD/VCC regulator info */
|
|
struct msm_mmc_reg_data *vdd_io_data; /* keeps VDD IO regulator info */
|
|
};
|
|
|
|
struct msm_mmc_gpio {
|
|
u32 no;
|
|
const char *name;
|
|
bool is_always_on;
|
|
bool is_enabled;
|
|
};
|
|
|
|
struct msm_mmc_gpio_data {
|
|
struct msm_mmc_gpio *gpio;
|
|
u8 size;
|
|
};
|
|
|
|
struct msm_mmc_pad_pull {
|
|
enum msm_tlmm_pull_tgt no;
|
|
u32 val;
|
|
};
|
|
|
|
struct msm_mmc_pad_pull_data {
|
|
struct msm_mmc_pad_pull *on;
|
|
struct msm_mmc_pad_pull *off;
|
|
u8 size;
|
|
};
|
|
|
|
struct msm_mmc_pad_drv {
|
|
enum msm_tlmm_hdrive_tgt no;
|
|
u32 val;
|
|
};
|
|
|
|
struct msm_mmc_pad_drv_data {
|
|
struct msm_mmc_pad_drv *on;
|
|
struct msm_mmc_pad_drv *off;
|
|
u8 size;
|
|
};
|
|
|
|
struct msm_mmc_pad_data {
|
|
struct msm_mmc_pad_pull_data *pull;
|
|
struct msm_mmc_pad_drv_data *drv;
|
|
};
|
|
|
|
struct msm_mmc_pin_data {
|
|
/*
|
|
* = 1 if controller pins are using gpios
|
|
* = 0 if controller has dedicated MSM pads
|
|
*/
|
|
u8 is_gpio;
|
|
u8 cfg_sts;
|
|
struct msm_mmc_gpio_data *gpio_data;
|
|
struct msm_mmc_pad_data *pad_data;
|
|
};
|
|
|
|
struct msm_mmc_bus_voting_data {
|
|
struct msm_bus_scale_pdata *use_cases;
|
|
unsigned int *bw_vecs;
|
|
unsigned int bw_vecs_size;
|
|
};
|
|
|
|
struct mmc_platform_data {
|
|
unsigned int ocr_mask; /* available voltages */
|
|
int built_in; /* built-in device flag */
|
|
int card_present; /* card detect state */
|
|
u32 (*translate_vdd)(struct device *, unsigned int);
|
|
unsigned int (*status)(struct device *);
|
|
struct embedded_sdio_data *embedded_sdio;
|
|
int (*register_status_notify)(void (*callback)(int card_present, void *dev_id), void *dev_id);
|
|
/*
|
|
* XPC controls the maximum current in the
|
|
* default speed mode of SDXC card.
|
|
*/
|
|
unsigned int xpc_cap;
|
|
/* Supported UHS-I Modes */
|
|
unsigned int uhs_caps;
|
|
/* More capabilities */
|
|
unsigned int uhs_caps2;
|
|
void (*sdio_lpm_gpio_setup)(struct device *, unsigned int);
|
|
unsigned int status_irq;
|
|
int status_gpio;
|
|
/* Indicates the polarity of the GPIO line when card is inserted */
|
|
bool is_status_gpio_active_low;
|
|
int sdiowakeup_irq;
|
|
unsigned long irq_flags;
|
|
unsigned long mmc_bus_width;
|
|
int (*wpswitch) (struct device *);
|
|
unsigned int msmsdcc_fmin;
|
|
unsigned int msmsdcc_fmid;
|
|
unsigned int msmsdcc_fmax;
|
|
bool nonremovable;
|
|
unsigned int mpm_sdiowakeup_int;
|
|
int wpswitch_gpio;
|
|
bool is_wpswitch_active_low;
|
|
struct msm_mmc_slot_reg_data *vreg_data;
|
|
int is_sdio_al_client;
|
|
unsigned int *sup_clk_table;
|
|
unsigned char sup_clk_cnt;
|
|
struct msm_mmc_pin_data *pin_data;
|
|
bool disable_bam;
|
|
bool disable_runtime_pm;
|
|
bool disable_cmd23;
|
|
u32 cpu_dma_latency;
|
|
struct msm_mmc_bus_voting_data *msm_bus_voting_data;
|
|
};
|
|
|
|
#endif
|