mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 21:07:02 +09:00
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: (68 commits) sdio_uart: Fix SDIO break control to now return success or an error mmc: host driver for Ricoh Bay1Controllers sdio: sdio_io.c Fix sparse warnings sdio: fix the use of hard coded timeout value. mmc: OLPC: update vdd/powerup quirk comment mmc: fix spares errors of sdhci.c mmc: remove multiwrite capability wbsd: fix bad dma_addr_t conversion atmel-mci: Driver for Atmel on-chip MMC controllers mmc: fix sdio_io sparse errors mmc: wbsd.c fix shadowing of 'dma' variable MMC: S3C24XX: Refuse incorrectly aligned transfers MMC: S3C24XX: Add maintainer entry MMC: S3C24XX: Update error debugging. MMC: S3C24XX: Add media presence test to request handling. MMC: S3C24XX: Fix use of msecs where jiffies are needed MMC: S3C24XX: Add MODULE_ALIAS() entries for the platform devices MMC: S3C24XX: Fix s3c2410_dma_request() return code check. MMC: S3C24XX: Allow card-detect on non-IRQ capable pin MMC: S3C24XX: Ensure host->mrq->data is valid ... Manually fixed up bogus executable bits on drivers/mmc/core/sdio_io.c and include/linux/mmc/sdio_func.h when merging.
This commit is contained in:
@@ -75,6 +75,10 @@
|
||||
#define AT91_MCI_TRTYP_MULTIPLE (1 << 19)
|
||||
#define AT91_MCI_TRTYP_STREAM (2 << 19)
|
||||
|
||||
#define AT91_MCI_BLKR 0x18 /* Block Register */
|
||||
#define AT91_MCI_BLKR_BCNT(n) ((0xffff & (n)) << 0) /* Block count */
|
||||
#define AT91_MCI_BLKR_BLKLEN(n) ((0xffff & (n)) << 16) /* Block lenght */
|
||||
|
||||
#define AT91_MCI_RSPR(n) (0x20 + ((n) * 4)) /* Response Registers 0-3 */
|
||||
#define AT91_MCR_RDR 0x30 /* Receive Data Register */
|
||||
#define AT91_MCR_TDR 0x34 /* Transmit Data Register */
|
||||
|
||||
@@ -28,9 +28,15 @@
|
||||
#define S3C2410_SDIDCNT (0x30)
|
||||
#define S3C2410_SDIDSTA (0x34)
|
||||
#define S3C2410_SDIFSTA (0x38)
|
||||
|
||||
#define S3C2410_SDIDATA (0x3C)
|
||||
#define S3C2410_SDIIMSK (0x40)
|
||||
|
||||
#define S3C2440_SDIDATA (0x40)
|
||||
#define S3C2440_SDIIMSK (0x3C)
|
||||
|
||||
#define S3C2440_SDICON_SDRESET (1<<8)
|
||||
#define S3C2440_SDICON_MMCCLOCK (1<<5)
|
||||
#define S3C2410_SDICON_BYTEORDER (1<<4)
|
||||
#define S3C2410_SDICON_SDIOIRQ (1<<3)
|
||||
#define S3C2410_SDICON_RWAITEN (1<<2)
|
||||
@@ -42,7 +48,8 @@
|
||||
#define S3C2410_SDICMDCON_LONGRSP (1<<10)
|
||||
#define S3C2410_SDICMDCON_WAITRSP (1<<9)
|
||||
#define S3C2410_SDICMDCON_CMDSTART (1<<8)
|
||||
#define S3C2410_SDICMDCON_INDEX (0xff)
|
||||
#define S3C2410_SDICMDCON_SENDERHOST (1<<6)
|
||||
#define S3C2410_SDICMDCON_INDEX (0x3f)
|
||||
|
||||
#define S3C2410_SDICMDSTAT_CRCFAIL (1<<12)
|
||||
#define S3C2410_SDICMDSTAT_CMDSENT (1<<11)
|
||||
@@ -51,6 +58,9 @@
|
||||
#define S3C2410_SDICMDSTAT_XFERING (1<<8)
|
||||
#define S3C2410_SDICMDSTAT_INDEX (0xff)
|
||||
|
||||
#define S3C2440_SDIDCON_DS_BYTE (0<<22)
|
||||
#define S3C2440_SDIDCON_DS_HALFWORD (1<<22)
|
||||
#define S3C2440_SDIDCON_DS_WORD (2<<22)
|
||||
#define S3C2410_SDIDCON_IRQPERIOD (1<<21)
|
||||
#define S3C2410_SDIDCON_TXAFTERRESP (1<<20)
|
||||
#define S3C2410_SDIDCON_RXAFTERCMD (1<<19)
|
||||
@@ -59,6 +69,7 @@
|
||||
#define S3C2410_SDIDCON_WIDEBUS (1<<16)
|
||||
#define S3C2410_SDIDCON_DMAEN (1<<15)
|
||||
#define S3C2410_SDIDCON_STOP (1<<14)
|
||||
#define S3C2440_SDIDCON_DATSTART (1<<14)
|
||||
#define S3C2410_SDIDCON_DATMODE (3<<12)
|
||||
#define S3C2410_SDIDCON_BLKNUM (0x7ff)
|
||||
|
||||
@@ -68,6 +79,7 @@
|
||||
#define S3C2410_SDIDCON_XFER_RXSTART (2<<12)
|
||||
#define S3C2410_SDIDCON_XFER_TXSTART (3<<12)
|
||||
|
||||
#define S3C2410_SDIDCON_BLKNUM_MASK (0xFFF)
|
||||
#define S3C2410_SDIDCNT_BLKNUM_SHIFT (12)
|
||||
|
||||
#define S3C2410_SDIDSTA_RDYWAITREQ (1<<10)
|
||||
@@ -82,10 +94,12 @@
|
||||
#define S3C2410_SDIDSTA_TXDATAON (1<<1)
|
||||
#define S3C2410_SDIDSTA_RXDATAON (1<<0)
|
||||
|
||||
#define S3C2440_SDIFSTA_FIFORESET (1<<16)
|
||||
#define S3C2440_SDIFSTA_FIFOFAIL (3<<14) /* 3 is correct (2 bits) */
|
||||
#define S3C2410_SDIFSTA_TFDET (1<<13)
|
||||
#define S3C2410_SDIFSTA_RFDET (1<<12)
|
||||
#define S3C2410_SDIFSTA_TXHALF (1<<11)
|
||||
#define S3C2410_SDIFSTA_TXEMPTY (1<<10)
|
||||
#define S3C2410_SDIFSTA_TFHALF (1<<11)
|
||||
#define S3C2410_SDIFSTA_TFEMPTY (1<<10)
|
||||
#define S3C2410_SDIFSTA_RFLAST (1<<9)
|
||||
#define S3C2410_SDIFSTA_RFFULL (1<<8)
|
||||
#define S3C2410_SDIFSTA_RFHALF (1<<7)
|
||||
|
||||
15
include/asm-arm/plat-s3c24xx/mci.h
Normal file
15
include/asm-arm/plat-s3c24xx/mci.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#ifndef _ARCH_MCI_H
|
||||
#define _ARCH_MCI_H
|
||||
|
||||
struct s3c24xx_mci_pdata {
|
||||
unsigned int wprotect_invert : 1;
|
||||
unsigned int detect_invert : 1; /* set => detect active high. */
|
||||
|
||||
unsigned int gpio_detect;
|
||||
unsigned int gpio_wprotect;
|
||||
unsigned long ocr_avail;
|
||||
void (*set_power)(unsigned char power_mode,
|
||||
unsigned short vdd);
|
||||
};
|
||||
|
||||
#endif /* _ARCH_NCI_H */
|
||||
@@ -77,7 +77,11 @@ struct i2c_board_info;
|
||||
struct platform_device *at32_add_device_twi(unsigned int id,
|
||||
struct i2c_board_info *b,
|
||||
unsigned int n);
|
||||
struct platform_device *at32_add_device_mci(unsigned int id);
|
||||
|
||||
struct mci_platform_data;
|
||||
struct platform_device *
|
||||
at32_add_device_mci(unsigned int id, struct mci_platform_data *data);
|
||||
|
||||
struct platform_device *at32_add_device_ac97c(unsigned int id);
|
||||
struct platform_device *at32_add_device_abdac(unsigned int id);
|
||||
struct platform_device *at32_add_device_psif(unsigned int id);
|
||||
|
||||
9
include/asm-avr32/atmel-mci.h
Normal file
9
include/asm-avr32/atmel-mci.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#ifndef __ASM_AVR32_ATMEL_MCI_H
|
||||
#define __ASM_AVR32_ATMEL_MCI_H
|
||||
|
||||
struct mci_platform_data {
|
||||
int detect_pin;
|
||||
int wp_pin;
|
||||
};
|
||||
|
||||
#endif /* __ASM_AVR32_ATMEL_MCI_H */
|
||||
@@ -38,15 +38,15 @@
|
||||
#ifndef __ASM_AU1100_MMC_H
|
||||
#define __ASM_AU1100_MMC_H
|
||||
|
||||
#include <linux/leds.h>
|
||||
|
||||
#define NUM_AU1100_MMC_CONTROLLERS 2
|
||||
|
||||
#if defined(CONFIG_SOC_AU1100)
|
||||
#define AU1100_SD_IRQ AU1100_SD_INT
|
||||
#elif defined(CONFIG_SOC_AU1200)
|
||||
#define AU1100_SD_IRQ AU1200_SD_INT
|
||||
#endif
|
||||
|
||||
struct au1xmmc_platform_data {
|
||||
int(*cd_setup)(void *mmc_host, int on);
|
||||
int(*card_inserted)(void *mmc_host);
|
||||
int(*card_readonly)(void *mmc_host);
|
||||
void(*set_power)(void *mmc_host, int state);
|
||||
struct led_classdev *led;
|
||||
};
|
||||
|
||||
#define SD0_BASE 0xB0600000
|
||||
#define SD1_BASE 0xB0680000
|
||||
|
||||
@@ -135,6 +135,7 @@ extern int mmc_wait_for_app_cmd(struct mmc_host *, struct mmc_card *,
|
||||
struct mmc_command *, int);
|
||||
|
||||
extern void mmc_set_data_timeout(struct mmc_data *, const struct mmc_card *);
|
||||
extern unsigned int mmc_align_data_size(struct mmc_card *, unsigned int);
|
||||
|
||||
extern int __mmc_claim_host(struct mmc_host *host, atomic_t *abort);
|
||||
extern void mmc_release_host(struct mmc_host *host);
|
||||
|
||||
@@ -51,8 +51,30 @@ struct mmc_ios {
|
||||
|
||||
struct mmc_host_ops {
|
||||
void (*request)(struct mmc_host *host, struct mmc_request *req);
|
||||
/*
|
||||
* Avoid calling these three functions too often or in a "fast path",
|
||||
* since underlaying controller might implement them in an expensive
|
||||
* and/or slow way.
|
||||
*
|
||||
* Also note that these functions might sleep, so don't call them
|
||||
* in the atomic contexts!
|
||||
*
|
||||
* Return values for the get_ro callback should be:
|
||||
* 0 for a read/write card
|
||||
* 1 for a read-only card
|
||||
* -ENOSYS when not supported (equal to NULL callback)
|
||||
* or a negative errno value when something bad happened
|
||||
*
|
||||
* Return values for the get_ro callback should be:
|
||||
* 0 for a absent card
|
||||
* 1 for a present card
|
||||
* -ENOSYS when not supported (equal to NULL callback)
|
||||
* or a negative errno value when something bad happened
|
||||
*/
|
||||
void (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
|
||||
int (*get_ro)(struct mmc_host *host);
|
||||
int (*get_cd)(struct mmc_host *host);
|
||||
|
||||
void (*enable_sdio_irq)(struct mmc_host *host, int enable);
|
||||
};
|
||||
|
||||
@@ -89,11 +111,11 @@ struct mmc_host {
|
||||
unsigned long caps; /* Host capabilities */
|
||||
|
||||
#define MMC_CAP_4_BIT_DATA (1 << 0) /* Can the host do 4 bit transfers */
|
||||
#define MMC_CAP_MULTIWRITE (1 << 1) /* Can accurately report bytes sent to card on error */
|
||||
#define MMC_CAP_MMC_HIGHSPEED (1 << 2) /* Can do MMC high-speed timing */
|
||||
#define MMC_CAP_SD_HIGHSPEED (1 << 3) /* Can do SD high-speed timing */
|
||||
#define MMC_CAP_SDIO_IRQ (1 << 4) /* Can signal pending SDIO IRQs */
|
||||
#define MMC_CAP_SPI (1 << 5) /* Talks only SPI protocols */
|
||||
#define MMC_CAP_MMC_HIGHSPEED (1 << 1) /* Can do MMC high-speed timing */
|
||||
#define MMC_CAP_SD_HIGHSPEED (1 << 2) /* Can do SD high-speed timing */
|
||||
#define MMC_CAP_SDIO_IRQ (1 << 3) /* Can signal pending SDIO IRQs */
|
||||
#define MMC_CAP_SPI (1 << 4) /* Talks only SPI protocols */
|
||||
#define MMC_CAP_NEEDS_POLL (1 << 5) /* Needs polling for card-detection */
|
||||
|
||||
/* host specific block data */
|
||||
unsigned int max_seg_size; /* see blk_queue_max_segment_size */
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
* Based strongly on code by:
|
||||
*
|
||||
* Author: Yong-iL Joh <tolkien@mizi.com>
|
||||
* Date : $Date: 2002/06/18 12:37:30 $
|
||||
*
|
||||
* Author: Andrew Christian
|
||||
* 15 May 2002
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* include/linux/mmc/sdio_func.h
|
||||
*
|
||||
* Copyright 2007 Pierre Ossman
|
||||
* Copyright 2007-2008 Pierre Ossman
|
||||
*
|
||||
* 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
|
||||
@@ -46,6 +46,8 @@ struct sdio_func {
|
||||
unsigned max_blksize; /* maximum block size */
|
||||
unsigned cur_blksize; /* current block size */
|
||||
|
||||
unsigned enable_timeout; /* max enable timeout in msec */
|
||||
|
||||
unsigned int state; /* function state */
|
||||
#define SDIO_STATE_PRESENT (1<<0) /* present in sysfs */
|
||||
|
||||
@@ -120,23 +122,22 @@ extern int sdio_set_block_size(struct sdio_func *func, unsigned blksz);
|
||||
extern int sdio_claim_irq(struct sdio_func *func, sdio_irq_handler_t *handler);
|
||||
extern int sdio_release_irq(struct sdio_func *func);
|
||||
|
||||
extern unsigned char sdio_readb(struct sdio_func *func,
|
||||
unsigned int addr, int *err_ret);
|
||||
extern unsigned short sdio_readw(struct sdio_func *func,
|
||||
unsigned int addr, int *err_ret);
|
||||
extern unsigned long sdio_readl(struct sdio_func *func,
|
||||
unsigned int addr, int *err_ret);
|
||||
extern unsigned int sdio_align_size(struct sdio_func *func, unsigned int sz);
|
||||
|
||||
extern u8 sdio_readb(struct sdio_func *func, unsigned int addr, int *err_ret);
|
||||
extern u16 sdio_readw(struct sdio_func *func, unsigned int addr, int *err_ret);
|
||||
extern u32 sdio_readl(struct sdio_func *func, unsigned int addr, int *err_ret);
|
||||
|
||||
extern int sdio_memcpy_fromio(struct sdio_func *func, void *dst,
|
||||
unsigned int addr, int count);
|
||||
extern int sdio_readsb(struct sdio_func *func, void *dst,
|
||||
unsigned int addr, int count);
|
||||
|
||||
extern void sdio_writeb(struct sdio_func *func, unsigned char b,
|
||||
extern void sdio_writeb(struct sdio_func *func, u8 b,
|
||||
unsigned int addr, int *err_ret);
|
||||
extern void sdio_writew(struct sdio_func *func, unsigned short b,
|
||||
extern void sdio_writew(struct sdio_func *func, u16 b,
|
||||
unsigned int addr, int *err_ret);
|
||||
extern void sdio_writel(struct sdio_func *func, unsigned long b,
|
||||
extern void sdio_writel(struct sdio_func *func, u32 b,
|
||||
unsigned int addr, int *err_ret);
|
||||
|
||||
extern int sdio_memcpy_toio(struct sdio_func *func, unsigned int addr,
|
||||
|
||||
@@ -2190,6 +2190,7 @@
|
||||
#define PCI_DEVICE_ID_JMICRON_JMB366 0x2366
|
||||
#define PCI_DEVICE_ID_JMICRON_JMB368 0x2368
|
||||
#define PCI_DEVICE_ID_JMICRON_JMB38X_SD 0x2381
|
||||
#define PCI_DEVICE_ID_JMICRON_JMB38X_MMC 0x2382
|
||||
#define PCI_DEVICE_ID_JMICRON_JMB38X_MS 0x2383
|
||||
|
||||
#define PCI_VENDOR_ID_KORENIX 0x1982
|
||||
|
||||
@@ -23,6 +23,15 @@ struct mmc_spi_platform_data {
|
||||
/* sense switch on sd cards */
|
||||
int (*get_ro)(struct device *);
|
||||
|
||||
/*
|
||||
* If board does not use CD interrupts, driver can optimize polling
|
||||
* using this function.
|
||||
*/
|
||||
int (*get_cd)(struct device *);
|
||||
|
||||
/* Capabilities to pass into mmc core (e.g. MMC_CAP_NEEDS_POLL). */
|
||||
unsigned long caps;
|
||||
|
||||
/* how long to debounce card detect, in msecs */
|
||||
u16 detect_delay;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user