Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc: (32 commits) mmc: tifm: replace kmap with page_address mmc: sdhci: fix voltage ocr mmc: sdhci: replace kmap with page_address mmc: wbsd: replace kmap with page_address mmc: handle pci_enable_device() return value in sdhci mmc: Proper unclaim in mmc_block mmc: change wbsd mailing list mmc: Graceful fallback for fancy features mmc: Handle wbsd's stupid command list mmc: Allow host drivers to specify max block count mmc: Allow host drivers to specify a max block size tifm_sd: add suspend and resume functionality tifm_core: add suspend/resume infrastructure for tifm devices tifm_7xx1: prettify tifm_7xx1: recognize device 0xac8f as supported tifm_7xx1: switch from workqueue to kthread tifm_7xx1: Merge media insert and media remove functions tifm_7xx1: simplify eject function Add dummy_signal_irq function to save check in ISR Remove unused return value from signal_irq callback ...
This commit is contained in:
commit
2442d31099
24 changed files with 895 additions and 583 deletions
|
@ -71,6 +71,7 @@ struct mmc_card {
|
|||
#define MMC_STATE_SDCARD (1<<3) /* is an SD card */
|
||||
#define MMC_STATE_READONLY (1<<4) /* card is read-only */
|
||||
#define MMC_STATE_HIGHSPEED (1<<5) /* card is in high speed mode */
|
||||
#define MMC_STATE_BLOCKADDR (1<<6) /* card uses block-addressing */
|
||||
u32 raw_cid[4]; /* raw card CID */
|
||||
u32 raw_csd[4]; /* raw card CSD */
|
||||
u32 raw_scr[2]; /* raw card SCR */
|
||||
|
@ -87,6 +88,7 @@ struct mmc_card {
|
|||
#define mmc_card_sd(c) ((c)->state & MMC_STATE_SDCARD)
|
||||
#define mmc_card_readonly(c) ((c)->state & MMC_STATE_READONLY)
|
||||
#define mmc_card_highspeed(c) ((c)->state & MMC_STATE_HIGHSPEED)
|
||||
#define mmc_card_blockaddr(c) ((c)->state & MMC_STATE_BLOCKADDR)
|
||||
|
||||
#define mmc_card_set_present(c) ((c)->state |= MMC_STATE_PRESENT)
|
||||
#define mmc_card_set_dead(c) ((c)->state |= MMC_STATE_DEAD)
|
||||
|
@ -94,6 +96,7 @@ struct mmc_card {
|
|||
#define mmc_card_set_sd(c) ((c)->state |= MMC_STATE_SDCARD)
|
||||
#define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)
|
||||
#define mmc_card_set_highspeed(c) ((c)->state |= MMC_STATE_HIGHSPEED)
|
||||
#define mmc_card_set_blockaddr(c) ((c)->state |= MMC_STATE_BLOCKADDR)
|
||||
|
||||
#define mmc_card_name(c) ((c)->cid.prod_name)
|
||||
#define mmc_card_id(c) ((c)->dev.bus_id)
|
||||
|
|
|
@ -92,8 +92,10 @@ struct mmc_host {
|
|||
unsigned int max_seg_size; /* see blk_queue_max_segment_size */
|
||||
unsigned short max_hw_segs; /* see blk_queue_max_hw_segments */
|
||||
unsigned short max_phys_segs; /* see blk_queue_max_phys_segments */
|
||||
unsigned short max_sectors; /* see blk_queue_max_sectors */
|
||||
unsigned short unused;
|
||||
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 */
|
||||
|
||||
/* private data */
|
||||
struct mmc_ios ios; /* current io bus settings */
|
||||
|
@ -106,8 +108,9 @@ struct mmc_host {
|
|||
struct list_head cards; /* devices attached to this host */
|
||||
|
||||
wait_queue_head_t wq;
|
||||
spinlock_t lock; /* card_busy lock */
|
||||
struct mmc_card *card_busy; /* the MMC card claiming host */
|
||||
spinlock_t lock; /* claimed lock */
|
||||
unsigned int claimed:1; /* host exclusively claimed */
|
||||
|
||||
struct mmc_card *card_selected; /* the selected MMC card */
|
||||
|
||||
struct delayed_work detect;
|
||||
|
@ -126,6 +129,7 @@ static inline void *mmc_priv(struct mmc_host *host)
|
|||
}
|
||||
|
||||
#define mmc_dev(x) ((x)->parent)
|
||||
#define mmc_classdev(x) (&(x)->class_dev)
|
||||
#define mmc_hostname(x) ((x)->class_dev.bus_id)
|
||||
|
||||
extern int mmc_suspend_host(struct mmc_host *, pm_message_t);
|
||||
|
|
|
@ -43,6 +43,7 @@ struct mmc_command {
|
|||
#define MMC_RSP_R2 (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC)
|
||||
#define MMC_RSP_R3 (MMC_RSP_PRESENT)
|
||||
#define MMC_RSP_R6 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
|
||||
#define MMC_RSP_R7 (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE)
|
||||
|
||||
#define mmc_resp_type(cmd) ((cmd)->flags & (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC|MMC_RSP_BUSY|MMC_RSP_OPCODE))
|
||||
|
||||
|
|
|
@ -79,9 +79,12 @@
|
|||
#define MMC_GEN_CMD 56 /* adtc [0] RD/WR R1 */
|
||||
|
||||
/* SD commands type argument response */
|
||||
/* class 8 */
|
||||
/* class 0 */
|
||||
/* This is basically the same command as for MMC with some quirks. */
|
||||
#define SD_SEND_RELATIVE_ADDR 3 /* bcr R6 */
|
||||
#define SD_SEND_IF_COND 8 /* bcr [11:0] See below R7 */
|
||||
|
||||
/* class 10 */
|
||||
#define SD_SWITCH 6 /* adtc [31:0] See below R1 */
|
||||
|
||||
/* Application commands */
|
||||
|
@ -114,6 +117,14 @@
|
|||
* [3:0] Function group 1
|
||||
*/
|
||||
|
||||
/*
|
||||
* SD_SEND_IF_COND argument format:
|
||||
*
|
||||
* [31:12] Reserved (0)
|
||||
* [11:8] Host Voltage Supply Flags
|
||||
* [7:0] Check Pattern (0xAA)
|
||||
*/
|
||||
|
||||
/*
|
||||
MMC status in R1
|
||||
Type
|
||||
|
|
|
@ -735,9 +735,11 @@
|
|||
#define PCI_DEVICE_ID_TI_TVP4020 0x3d07
|
||||
#define PCI_DEVICE_ID_TI_4450 0x8011
|
||||
#define PCI_DEVICE_ID_TI_XX21_XX11 0x8031
|
||||
#define PCI_DEVICE_ID_TI_XX21_XX11_FM 0x8033
|
||||
#define PCI_DEVICE_ID_TI_XX21_XX11_SD 0x8034
|
||||
#define PCI_DEVICE_ID_TI_X515 0x8036
|
||||
#define PCI_DEVICE_ID_TI_XX12 0x8039
|
||||
#define PCI_DEVICE_ID_TI_XX12_FM 0x803b
|
||||
#define PCI_DEVICE_ID_TI_1130 0xac12
|
||||
#define PCI_DEVICE_ID_TI_1031 0xac13
|
||||
#define PCI_DEVICE_ID_TI_1131 0xac15
|
||||
|
@ -765,6 +767,7 @@
|
|||
#define PCI_DEVICE_ID_TI_1510 0xac56
|
||||
#define PCI_DEVICE_ID_TI_X620 0xac8d
|
||||
#define PCI_DEVICE_ID_TI_X420 0xac8e
|
||||
#define PCI_DEVICE_ID_TI_XX20_FM 0xac8f
|
||||
|
||||
#define PCI_VENDOR_ID_SONY 0x104d
|
||||
|
||||
|
@ -1971,6 +1974,7 @@
|
|||
#define PCI_DEVICE_ID_TOPIC_TP560 0x0000
|
||||
|
||||
#define PCI_VENDOR_ID_ENE 0x1524
|
||||
#define PCI_DEVICE_ID_ENE_CB712_SD 0x0550
|
||||
#define PCI_DEVICE_ID_ENE_1211 0x1211
|
||||
#define PCI_DEVICE_ID_ENE_1225 0x1225
|
||||
#define PCI_DEVICE_ID_ENE_1410 0x1410
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include <linux/wait.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/kthread.h>
|
||||
|
||||
/* Host registers (relative to pci base address): */
|
||||
enum {
|
||||
|
@ -62,11 +62,10 @@ enum {
|
|||
|
||||
|
||||
#define TIFM_IRQ_ENABLE 0x80000000
|
||||
#define TIFM_IRQ_SOCKMASK 0x00000001
|
||||
#define TIFM_IRQ_CARDMASK 0x00000100
|
||||
#define TIFM_IRQ_FIFOMASK 0x00010000
|
||||
#define TIFM_IRQ_SOCKMASK(x) (x)
|
||||
#define TIFM_IRQ_CARDMASK(x) ((x) << 8)
|
||||
#define TIFM_IRQ_FIFOMASK(x) ((x) << 16)
|
||||
#define TIFM_IRQ_SETALL 0xffffffff
|
||||
#define TIFM_IRQ_SETALLSOCK 0x0000000f
|
||||
|
||||
#define TIFM_CTRL_LED 0x00000040
|
||||
#define TIFM_CTRL_FAST_CLK 0x00000100
|
||||
|
@ -89,10 +88,9 @@ struct tifm_dev {
|
|||
char __iomem *addr;
|
||||
spinlock_t lock;
|
||||
tifm_media_id media_id;
|
||||
char wq_name[KOBJ_NAME_LEN];
|
||||
struct workqueue_struct *wq;
|
||||
unsigned int socket_id;
|
||||
|
||||
unsigned int (*signal_irq)(struct tifm_dev *sock,
|
||||
void (*signal_irq)(struct tifm_dev *sock,
|
||||
unsigned int sock_irq_status);
|
||||
|
||||
struct tifm_driver *drv;
|
||||
|
@ -103,24 +101,23 @@ struct tifm_driver {
|
|||
tifm_media_id *id_table;
|
||||
int (*probe)(struct tifm_dev *dev);
|
||||
void (*remove)(struct tifm_dev *dev);
|
||||
int (*suspend)(struct tifm_dev *dev,
|
||||
pm_message_t state);
|
||||
int (*resume)(struct tifm_dev *dev);
|
||||
|
||||
struct device_driver driver;
|
||||
};
|
||||
|
||||
struct tifm_adapter {
|
||||
char __iomem *addr;
|
||||
unsigned int irq_status;
|
||||
unsigned int insert_mask;
|
||||
unsigned int remove_mask;
|
||||
spinlock_t lock;
|
||||
unsigned int irq_status;
|
||||
unsigned int socket_change_set;
|
||||
wait_queue_head_t change_set_notify;
|
||||
unsigned int id;
|
||||
unsigned int max_sockets;
|
||||
char wq_name[KOBJ_NAME_LEN];
|
||||
unsigned int inhibit_new_cards;
|
||||
struct workqueue_struct *wq;
|
||||
struct work_struct media_inserter;
|
||||
struct work_struct media_remover;
|
||||
unsigned int num_sockets;
|
||||
struct tifm_dev **sockets;
|
||||
struct task_struct *media_switcher;
|
||||
struct class_device cdev;
|
||||
struct device *dev;
|
||||
|
||||
|
@ -130,9 +127,9 @@ struct tifm_adapter {
|
|||
struct tifm_adapter *tifm_alloc_adapter(void);
|
||||
void tifm_free_device(struct device *dev);
|
||||
void tifm_free_adapter(struct tifm_adapter *fm);
|
||||
int tifm_add_adapter(struct tifm_adapter *fm);
|
||||
int tifm_add_adapter(struct tifm_adapter *fm, int (*mediathreadfn)(void *data));
|
||||
void tifm_remove_adapter(struct tifm_adapter *fm);
|
||||
struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm, unsigned int id);
|
||||
struct tifm_dev *tifm_alloc_device(struct tifm_adapter *fm);
|
||||
int tifm_register_driver(struct tifm_driver *drv);
|
||||
void tifm_unregister_driver(struct tifm_driver *drv);
|
||||
void tifm_eject(struct tifm_dev *sock);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue