mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-26 14:43:27 -04:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc: (78 commits) mmc: MAINTAINERS: add myself as a tmio-mmc maintainer mmc: print debug messages for runtime PM actions mmc: fix runtime PM with -ENOSYS suspend case mmc: at91_mci: move register header from include/ to drivers/ mmc: mxs-mmc: fix clock rate setting mmc: tmio: fix a deadlock mmc: tmio: fix a recently introduced bug in DMA code mmc: sh_mmcif: maximize power saving mmc: tmio: maximize power saving mmc: tmio: fix recursive spinlock, don't schedule with interrupts disabled mmc: Added quirks for Ricoh 1180:e823 lower base clock frequency mmc: omap_hsmmc: fix oops in omap_hsmmc_dma_cb() mmc: omap_hsmmc: refactor duplicated code mmc: omap_hsmmc: fix a few bugs when setting the clock divisor mmc: omap_hsmmc: introduce start_clock and re-use stop_clock mmc: omap_hsmmc: split duplicate code to calc_divisor() function mmc: omap_hsmmc: move hardcoded frequency constants to defines mmc: omap_hsmmc: correct debug report error status mnemonics mmc: block: fixed NULL pointer dereference mmc: documentation of mmc non-blocking request usage and design. ...
This commit is contained in:
commit
0df55ea55b
69 changed files with 3928 additions and 2061 deletions
|
|
@ -68,6 +68,11 @@
|
|||
* controller and report the event to the driver.
|
||||
*/
|
||||
#define TMIO_MMC_HAS_COLD_CD (1 << 3)
|
||||
/*
|
||||
* Some controllers require waiting for the SD bus to become
|
||||
* idle before writing to some registers.
|
||||
*/
|
||||
#define TMIO_MMC_HAS_IDLE_WAIT (1 << 4)
|
||||
|
||||
int tmio_core_mmc_enable(void __iomem *cnf, int shift, unsigned long base);
|
||||
int tmio_core_mmc_resume(void __iomem *cnf, int shift, unsigned long base);
|
||||
|
|
@ -80,6 +85,8 @@ struct tmio_mmc_dma {
|
|||
int alignment_shift;
|
||||
};
|
||||
|
||||
struct tmio_mmc_host;
|
||||
|
||||
/*
|
||||
* data for the MMC controller
|
||||
*/
|
||||
|
|
@ -94,6 +101,7 @@ struct tmio_mmc_data {
|
|||
void (*set_pwr)(struct platform_device *host, int state);
|
||||
void (*set_clk_div)(struct platform_device *host, int state);
|
||||
int (*get_cd)(struct platform_device *host);
|
||||
int (*write16_hook)(struct tmio_mmc_host *host, int addr);
|
||||
};
|
||||
|
||||
static inline void tmio_mmc_cd_wakeup(struct tmio_mmc_data *pdata)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef MMC_BOOT_H
|
||||
#define MMC_BOOT_H
|
||||
#ifndef LINUX_MMC_BOOT_H
|
||||
#define LINUX_MMC_BOOT_H
|
||||
|
||||
enum { MMC_PROGRESS_ENTER, MMC_PROGRESS_INIT,
|
||||
MMC_PROGRESS_LOAD, MMC_PROGRESS_DONE };
|
||||
|
||||
#endif
|
||||
#endif /* LINUX_MMC_BOOT_H */
|
||||
|
|
|
|||
|
|
@ -403,4 +403,4 @@ extern void mmc_unregister_driver(struct mmc_driver *);
|
|||
extern void mmc_fixup_device(struct mmc_card *card,
|
||||
const struct mmc_fixup *table);
|
||||
|
||||
#endif
|
||||
#endif /* LINUX_MMC_CARD_H */
|
||||
|
|
|
|||
|
|
@ -117,6 +117,7 @@ struct mmc_data {
|
|||
|
||||
unsigned int sg_len; /* size of scatter list */
|
||||
struct scatterlist *sg; /* I/O scatter list */
|
||||
s32 host_cookie; /* host private data */
|
||||
};
|
||||
|
||||
struct mmc_request {
|
||||
|
|
@ -125,13 +126,16 @@ struct mmc_request {
|
|||
struct mmc_data *data;
|
||||
struct mmc_command *stop;
|
||||
|
||||
void *done_data; /* completion data */
|
||||
struct completion completion;
|
||||
void (*done)(struct mmc_request *);/* completion function */
|
||||
};
|
||||
|
||||
struct mmc_host;
|
||||
struct mmc_card;
|
||||
struct mmc_async_req;
|
||||
|
||||
extern struct mmc_async_req *mmc_start_req(struct mmc_host *,
|
||||
struct mmc_async_req *, int *);
|
||||
extern void mmc_wait_for_req(struct mmc_host *, struct mmc_request *);
|
||||
extern int mmc_wait_for_cmd(struct mmc_host *, struct mmc_command *, int);
|
||||
extern int mmc_app_cmd(struct mmc_host *, struct mmc_card *);
|
||||
|
|
@ -155,6 +159,7 @@ extern int mmc_can_trim(struct mmc_card *card);
|
|||
extern int mmc_can_secure_erase_trim(struct mmc_card *card);
|
||||
extern int mmc_erase_group_aligned(struct mmc_card *card, unsigned int from,
|
||||
unsigned int nr);
|
||||
extern unsigned int mmc_calc_max_discard(struct mmc_card *card);
|
||||
|
||||
extern int mmc_set_blocklen(struct mmc_card *card, unsigned int blocklen);
|
||||
|
||||
|
|
@ -179,4 +184,4 @@ static inline void mmc_claim_host(struct mmc_host *host)
|
|||
|
||||
extern u32 mmc_vddrange_to_ocrmask(int vdd_min, int vdd_max);
|
||||
|
||||
#endif
|
||||
#endif /* LINUX_MMC_CORE_H */
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@
|
|||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef _LINUX_MMC_DW_MMC_H_
|
||||
#define _LINUX_MMC_DW_MMC_H_
|
||||
#ifndef LINUX_MMC_DW_MMC_H
|
||||
#define LINUX_MMC_DW_MMC_H
|
||||
|
||||
#define MAX_MCI_SLOTS 2
|
||||
|
||||
|
|
@ -48,6 +48,7 @@ struct mmc_data;
|
|||
* @data: The data currently being transferred, or NULL if no data
|
||||
* transfer is in progress.
|
||||
* @use_dma: Whether DMA channel is initialized or not.
|
||||
* @using_dma: Whether DMA is in use for the current transfer.
|
||||
* @sg_dma: Bus address of DMA buffer.
|
||||
* @sg_cpu: Virtual address of DMA buffer.
|
||||
* @dma_ops: Pointer to platform-specific DMA callbacks.
|
||||
|
|
@ -74,7 +75,11 @@ struct mmc_data;
|
|||
* @pdev: Platform device associated with the MMC controller.
|
||||
* @pdata: Platform data associated with the MMC controller.
|
||||
* @slot: Slots sharing this MMC controller.
|
||||
* @fifo_depth: depth of FIFO.
|
||||
* @data_shift: log2 of FIFO item size.
|
||||
* @part_buf_start: Start index in part_buf.
|
||||
* @part_buf_count: Bytes of partial data in part_buf.
|
||||
* @part_buf: Simple buffer for partial fifo reads/writes.
|
||||
* @push_data: Pointer to FIFO push function.
|
||||
* @pull_data: Pointer to FIFO pull function.
|
||||
* @quirks: Set of quirks that apply to specific versions of the IP.
|
||||
|
|
@ -117,6 +122,7 @@ struct dw_mci {
|
|||
|
||||
/* DMA interface members*/
|
||||
int use_dma;
|
||||
int using_dma;
|
||||
|
||||
dma_addr_t sg_dma;
|
||||
void *sg_cpu;
|
||||
|
|
@ -131,7 +137,7 @@ struct dw_mci {
|
|||
u32 stop_cmdr;
|
||||
u32 dir_status;
|
||||
struct tasklet_struct tasklet;
|
||||
struct tasklet_struct card_tasklet;
|
||||
struct work_struct card_work;
|
||||
unsigned long pending_events;
|
||||
unsigned long completed_events;
|
||||
enum dw_mci_state state;
|
||||
|
|
@ -146,7 +152,15 @@ struct dw_mci {
|
|||
struct dw_mci_slot *slot[MAX_MCI_SLOTS];
|
||||
|
||||
/* FIFO push and pull */
|
||||
int fifo_depth;
|
||||
int data_shift;
|
||||
u8 part_buf_start;
|
||||
u8 part_buf_count;
|
||||
union {
|
||||
u16 part_buf16;
|
||||
u32 part_buf32;
|
||||
u64 part_buf;
|
||||
};
|
||||
void (*push_data)(struct dw_mci *host, void *buf, int cnt);
|
||||
void (*pull_data)(struct dw_mci *host, void *buf, int cnt);
|
||||
|
||||
|
|
@ -196,6 +210,12 @@ struct dw_mci_board {
|
|||
unsigned int bus_hz; /* Bus speed */
|
||||
|
||||
unsigned int caps; /* Capabilities */
|
||||
/*
|
||||
* Override fifo depth. If 0, autodetect it from the FIFOTH register,
|
||||
* but note that this may not be reliable after a bootloader has used
|
||||
* it.
|
||||
*/
|
||||
unsigned int fifo_depth;
|
||||
|
||||
/* delay in mS before detecting cards after interrupt */
|
||||
u32 detect_delay_ms;
|
||||
|
|
@ -219,4 +239,4 @@ struct dw_mci_board {
|
|||
struct block_settings *blk_settings;
|
||||
};
|
||||
|
||||
#endif /* _LINUX_MMC_DW_MMC_H_ */
|
||||
#endif /* LINUX_MMC_DW_MMC_H */
|
||||
|
|
|
|||
|
|
@ -106,6 +106,15 @@ struct mmc_host_ops {
|
|||
*/
|
||||
int (*enable)(struct mmc_host *host);
|
||||
int (*disable)(struct mmc_host *host, int lazy);
|
||||
/*
|
||||
* It is optional for the host to implement pre_req and post_req in
|
||||
* order to support double buffering of requests (prepare one
|
||||
* request while another request is active).
|
||||
*/
|
||||
void (*post_req)(struct mmc_host *host, struct mmc_request *req,
|
||||
int err);
|
||||
void (*pre_req)(struct mmc_host *host, struct mmc_request *req,
|
||||
bool is_first_req);
|
||||
void (*request)(struct mmc_host *host, struct mmc_request *req);
|
||||
/*
|
||||
* Avoid calling these three functions too often or in a "fast path",
|
||||
|
|
@ -139,11 +148,22 @@ struct mmc_host_ops {
|
|||
int (*start_signal_voltage_switch)(struct mmc_host *host, struct mmc_ios *ios);
|
||||
int (*execute_tuning)(struct mmc_host *host);
|
||||
void (*enable_preset_value)(struct mmc_host *host, bool enable);
|
||||
int (*select_drive_strength)(unsigned int max_dtr, int host_drv, int card_drv);
|
||||
};
|
||||
|
||||
struct mmc_card;
|
||||
struct device;
|
||||
|
||||
struct mmc_async_req {
|
||||
/* active mmc request */
|
||||
struct mmc_request *mrq;
|
||||
/*
|
||||
* Check error status of completed mmc request.
|
||||
* Returns 0 if success otherwise non zero.
|
||||
*/
|
||||
int (*err_check) (struct mmc_card *, struct mmc_async_req *);
|
||||
};
|
||||
|
||||
struct mmc_host {
|
||||
struct device *parent;
|
||||
struct device class_dev;
|
||||
|
|
@ -231,6 +251,7 @@ struct mmc_host {
|
|||
unsigned int max_req_size; /* maximum number of bytes in one req */
|
||||
unsigned int max_blk_size; /* maximum size of one mmc block */
|
||||
unsigned int max_blk_count; /* maximum number of blocks in one req */
|
||||
unsigned int max_discard_to; /* max. discard timeout in ms */
|
||||
|
||||
/* private data */
|
||||
spinlock_t lock; /* lock for claim and bus ops */
|
||||
|
|
@ -281,6 +302,8 @@ struct mmc_host {
|
|||
|
||||
struct dentry *debugfs_root;
|
||||
|
||||
struct mmc_async_req *areq; /* active async req */
|
||||
|
||||
unsigned long private[0] ____cacheline_aligned;
|
||||
};
|
||||
|
||||
|
|
@ -373,5 +396,4 @@ static inline int mmc_host_cmd23(struct mmc_host *host)
|
|||
{
|
||||
return host->caps & MMC_CAP_CMD23;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* LINUX_MMC_HOST_H */
|
||||
|
|
|
|||
|
|
@ -51,4 +51,4 @@ struct mmc_ioc_cmd {
|
|||
* block device operations.
|
||||
*/
|
||||
#define MMC_IOC_MAX_BYTES (512L * 256)
|
||||
#endif /* LINUX_MMC_IOCTL_H */
|
||||
#endif /* LINUX_MMC_IOCTL_H */
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@
|
|||
* 15 May 2002
|
||||
*/
|
||||
|
||||
#ifndef MMC_MMC_H
|
||||
#define MMC_MMC_H
|
||||
#ifndef LINUX_MMC_MMC_H
|
||||
#define LINUX_MMC_MMC_H
|
||||
|
||||
/* Standard MMC commands (4.1) type argument response */
|
||||
/* class 1 */
|
||||
|
|
@ -140,6 +140,16 @@ static inline bool mmc_op_multi(u32 opcode)
|
|||
#define R1_SWITCH_ERROR (1 << 7) /* sx, c */
|
||||
#define R1_APP_CMD (1 << 5) /* sr, c */
|
||||
|
||||
#define R1_STATE_IDLE 0
|
||||
#define R1_STATE_READY 1
|
||||
#define R1_STATE_IDENT 2
|
||||
#define R1_STATE_STBY 3
|
||||
#define R1_STATE_TRAN 4
|
||||
#define R1_STATE_DATA 5
|
||||
#define R1_STATE_RCV 6
|
||||
#define R1_STATE_PRG 7
|
||||
#define R1_STATE_DIS 8
|
||||
|
||||
/*
|
||||
* MMC/SD in SPI mode reports R1 status always, and R2 for SEND_STATUS
|
||||
* R1 is the low order byte; R2 is the next highest byte, when present.
|
||||
|
|
@ -327,5 +337,4 @@ struct _mmc_csd {
|
|||
#define MMC_SWITCH_MODE_CLEAR_BITS 0x02 /* Clear bits which are 1 in value */
|
||||
#define MMC_SWITCH_MODE_WRITE_BYTE 0x03 /* Set target to value */
|
||||
|
||||
#endif /* MMC_MMC_PROTOCOL_H */
|
||||
|
||||
#endif /* LINUX_MMC_MMC_H */
|
||||
|
|
|
|||
|
|
@ -27,4 +27,4 @@ typedef unsigned int mmc_pm_flag_t;
|
|||
#define MMC_PM_KEEP_POWER (1 << 0) /* preserve card power during suspend */
|
||||
#define MMC_PM_WAKE_SDIO_IRQ (1 << 1) /* wake up host system on SDIO IRQ assertion */
|
||||
|
||||
#endif
|
||||
#endif /* LINUX_MMC_PM_H */
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@
|
|||
* your option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef MMC_SD_H
|
||||
#define MMC_SD_H
|
||||
#ifndef LINUX_MMC_SD_H
|
||||
#define LINUX_MMC_SD_H
|
||||
|
||||
/* SD commands type argument response */
|
||||
/* class 0 */
|
||||
|
|
@ -91,5 +91,4 @@
|
|||
#define SD_SWITCH_ACCESS_DEF 0
|
||||
#define SD_SWITCH_ACCESS_HS 1
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* LINUX_MMC_SD_H */
|
||||
|
|
|
|||
|
|
@ -1,35 +0,0 @@
|
|||
/*
|
||||
* Platform data declarations for the sdhci-pltfm driver.
|
||||
*
|
||||
* Copyright (c) 2010 MontaVista Software, LLC.
|
||||
*
|
||||
* Author: Anton Vorontsov <avorontsov@ru.mvista.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or (at
|
||||
* your option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef _SDHCI_PLTFM_H
|
||||
#define _SDHCI_PLTFM_H
|
||||
|
||||
struct sdhci_ops;
|
||||
struct sdhci_host;
|
||||
|
||||
/**
|
||||
* struct sdhci_pltfm_data - SDHCI platform-specific information & hooks
|
||||
* @ops: optional pointer to the platform-provided SDHCI ops
|
||||
* @quirks: optional SDHCI quirks
|
||||
* @init: optional hook that is called during device probe, before the
|
||||
* driver tries to access any SDHCI registers
|
||||
* @exit: optional hook that is called during device removal
|
||||
*/
|
||||
struct sdhci_pltfm_data {
|
||||
struct sdhci_ops *ops;
|
||||
unsigned int quirks;
|
||||
int (*init)(struct sdhci_host *host, struct sdhci_pltfm_data *pdata);
|
||||
void (*exit)(struct sdhci_host *host);
|
||||
};
|
||||
|
||||
#endif /* _SDHCI_PLTFM_H */
|
||||
|
|
@ -11,8 +11,8 @@
|
|||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
|
||||
#ifndef MMC_SDHCI_SPEAR_H
|
||||
#define MMC_SDHCI_SPEAR_H
|
||||
#ifndef LINUX_MMC_SDHCI_SPEAR_H
|
||||
#define LINUX_MMC_SDHCI_SPEAR_H
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
/*
|
||||
|
|
@ -39,4 +39,4 @@ sdhci_set_plat_data(struct platform_device *pdev, struct sdhci_plat_data *data)
|
|||
pdev->dev.platform_data = data;
|
||||
}
|
||||
|
||||
#endif /* MMC_SDHCI_SPEAR_H */
|
||||
#endif /* LINUX_MMC_SDHCI_SPEAR_H */
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@
|
|||
* the Free Software Foundation; either version 2 of the License, or (at
|
||||
* your option) any later version.
|
||||
*/
|
||||
#ifndef __SDHCI_H
|
||||
#define __SDHCI_H
|
||||
#ifndef LINUX_MMC_SDHCI_H
|
||||
#define LINUX_MMC_SDHCI_H
|
||||
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/compiler.h>
|
||||
|
|
@ -162,4 +162,4 @@ struct sdhci_host {
|
|||
|
||||
unsigned long private[0] ____cacheline_aligned;
|
||||
};
|
||||
#endif /* __SDHCI_H */
|
||||
#endif /* LINUX_MMC_SDHCI_H */
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@
|
|||
* your option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef MMC_SDIO_H
|
||||
#define MMC_SDIO_H
|
||||
#ifndef LINUX_MMC_SDIO_H
|
||||
#define LINUX_MMC_SDIO_H
|
||||
|
||||
/* SDIO commands type argument response */
|
||||
#define SD_IO_SEND_OP_COND 5 /* bcr [23:0] OCR R4 */
|
||||
|
|
@ -161,5 +161,4 @@
|
|||
|
||||
#define SDIO_FBR_BLKSIZE 0x10 /* block size (2 bytes) */
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* LINUX_MMC_SDIO_H */
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@
|
|||
* your option) any later version.
|
||||
*/
|
||||
|
||||
#ifndef MMC_SDIO_FUNC_H
|
||||
#define MMC_SDIO_FUNC_H
|
||||
#ifndef LINUX_MMC_SDIO_FUNC_H
|
||||
#define LINUX_MMC_SDIO_FUNC_H
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
|
|
@ -161,5 +161,4 @@ extern void sdio_f0_writeb(struct sdio_func *func, unsigned char b,
|
|||
extern mmc_pm_flag_t sdio_get_host_pm_caps(struct sdio_func *func);
|
||||
extern int sdio_set_host_pm_flags(struct sdio_func *func, mmc_pm_flag_t flags);
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* LINUX_MMC_SDIO_FUNC_H */
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
* SDIO Classes, Interface Types, Manufacturer IDs, etc.
|
||||
*/
|
||||
|
||||
#ifndef MMC_SDIO_IDS_H
|
||||
#define MMC_SDIO_IDS_H
|
||||
#ifndef LINUX_MMC_SDIO_IDS_H
|
||||
#define LINUX_MMC_SDIO_IDS_H
|
||||
|
||||
/*
|
||||
* Standard SDIO Function Interfaces
|
||||
|
|
@ -44,4 +44,4 @@
|
|||
#define SDIO_DEVICE_ID_SIANO_NOVA_A0 0x1100
|
||||
#define SDIO_DEVICE_ID_SIANO_STELLAR 0x5347
|
||||
|
||||
#endif
|
||||
#endif /* LINUX_MMC_SDIO_IDS_H */
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#ifndef __SH_MMCIF_H__
|
||||
#define __SH_MMCIF_H__
|
||||
#ifndef LINUX_MMC_SH_MMCIF_H
|
||||
#define LINUX_MMC_SH_MMCIF_H
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
|
@ -220,4 +220,4 @@ static inline void sh_mmcif_boot_init(void __iomem *base)
|
|||
sh_mmcif_boot_cmd(base, 0x03400040, 0x00010000);
|
||||
}
|
||||
|
||||
#endif /* __SH_MMCIF_H__ */
|
||||
#endif /* LINUX_MMC_SH_MMCIF_H */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef __SH_MOBILE_SDHI_H__
|
||||
#define __SH_MOBILE_SDHI_H__
|
||||
#ifndef LINUX_MMC_SH_MOBILE_SDHI_H
|
||||
#define LINUX_MMC_SH_MOBILE_SDHI_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
|
|
@ -17,4 +17,4 @@ struct sh_mobile_sdhi_info {
|
|||
int (*get_cd)(struct platform_device *pdev);
|
||||
};
|
||||
|
||||
#endif /* __SH_MOBILE_SDHI_H__ */
|
||||
#endif /* LINUX_MMC_SH_MOBILE_SDHI_H */
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@
|
|||
*
|
||||
* TC6393XB TC6391XB TC6387XB T7L66XB ASIC3
|
||||
*/
|
||||
#ifndef _LINUX_MMC_TMIO_H_
|
||||
#define _LINUX_MMC_TMIO_H_
|
||||
#ifndef LINUX_MMC_TMIO_H
|
||||
#define LINUX_MMC_TMIO_H
|
||||
|
||||
#define CTL_SD_CMD 0x00
|
||||
#define CTL_ARG_REG 0x04
|
||||
|
|
@ -21,6 +21,7 @@
|
|||
#define CTL_XFER_BLK_COUNT 0xa
|
||||
#define CTL_RESPONSE 0x0c
|
||||
#define CTL_STATUS 0x1c
|
||||
#define CTL_STATUS2 0x1e
|
||||
#define CTL_IRQ_MASK 0x20
|
||||
#define CTL_SD_CARD_CLK_CTL 0x24
|
||||
#define CTL_SD_XFER_LEN 0x26
|
||||
|
|
@ -30,6 +31,7 @@
|
|||
#define CTL_TRANSACTION_CTL 0x34
|
||||
#define CTL_SDIO_STATUS 0x36
|
||||
#define CTL_SDIO_IRQ_MASK 0x38
|
||||
#define CTL_DMA_ENABLE 0xd8
|
||||
#define CTL_RESET_SD 0xe0
|
||||
#define CTL_SDIO_REGS 0x100
|
||||
#define CTL_CLK_AND_WAIT_CTL 0x138
|
||||
|
|
@ -60,4 +62,4 @@
|
|||
|
||||
#define TMIO_BBS 512 /* Boot block size */
|
||||
|
||||
#endif /* _LINUX_MMC_TMIO_H_ */
|
||||
#endif /* LINUX_MMC_TMIO_H */
|
||||
|
|
|
|||
60
include/linux/platform_data/pxa_sdhci.h
Normal file
60
include/linux/platform_data/pxa_sdhci.h
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* include/linux/platform_data/pxa_sdhci.h
|
||||
*
|
||||
* Copyright 2010 Marvell
|
||||
* Zhangfei Gao <zhangfei.gao@marvell.com>
|
||||
*
|
||||
* PXA Platform - SDHCI 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 _PXA_SDHCI_H_
|
||||
#define _PXA_SDHCI_H_
|
||||
|
||||
/* pxa specific flag */
|
||||
/* Require clock free running */
|
||||
#define PXA_FLAG_ENABLE_CLOCK_GATING (1<<0)
|
||||
/* card always wired to host, like on-chip emmc */
|
||||
#define PXA_FLAG_CARD_PERMANENT (1<<1)
|
||||
/* Board design supports 8-bit data on SD/SDIO BUS */
|
||||
#define PXA_FLAG_SD_8_BIT_CAPABLE_SLOT (1<<2)
|
||||
|
||||
/*
|
||||
* struct pxa_sdhci_platdata() - Platform device data for PXA SDHCI
|
||||
* @flags: flags for platform requirement
|
||||
* @clk_delay_cycles:
|
||||
* mmp2: each step is roughly 100ps, 5bits width
|
||||
* pxa910: each step is 1ns, 4bits width
|
||||
* @clk_delay_sel: select clk_delay, used on pxa910
|
||||
* 0: choose feedback clk
|
||||
* 1: choose feedback clk + delay value
|
||||
* 2: choose internal clk
|
||||
* @clk_delay_enable: enable clk_delay or not, used on pxa910
|
||||
* @ext_cd_gpio: gpio pin used for external CD line
|
||||
* @ext_cd_gpio_invert: invert values for external CD gpio line
|
||||
* @max_speed: the maximum speed supported
|
||||
* @host_caps: Standard MMC host capabilities bit field.
|
||||
* @quirks: quirks of platfrom
|
||||
* @pm_caps: pm_caps of platfrom
|
||||
*/
|
||||
struct sdhci_pxa_platdata {
|
||||
unsigned int flags;
|
||||
unsigned int clk_delay_cycles;
|
||||
unsigned int clk_delay_sel;
|
||||
bool clk_delay_enable;
|
||||
unsigned int ext_cd_gpio;
|
||||
bool ext_cd_gpio_invert;
|
||||
unsigned int max_speed;
|
||||
unsigned int host_caps;
|
||||
unsigned int quirks;
|
||||
unsigned int pm_caps;
|
||||
};
|
||||
|
||||
struct sdhci_pxa {
|
||||
u8 clk_enable;
|
||||
u8 power_mode;
|
||||
};
|
||||
#endif /* _PXA_SDHCI_H_ */
|
||||
Loading…
Reference in a new issue