mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
Merge branch 'spi/next' of git://git.secretlab.ca/git/linux-2.6
* 'spi/next' of git://git.secretlab.ca/git/linux-2.6: (34 commits)
spi/dw_spi: move dw_spi.h into drivers/spi
spi/dw_spi: Fix missing header
gpio/langwell: Clear edge bit before handling
gpio/langwell: Simplify demux loop
gpio/langwell: Convert irq name space
gpio/langwell: Fix broken irq_eoi change.
gpio; Make Intel chipset gpio drivers depend on x86
gpio/cs5535-gpio: Fix section mismatch
spi/rtc-{ds1390,ds3234,m41t94}: Use spi_get_drvdata() for SPI devices
spi/davinci: Support DMA transfers larger than 65535 words
spi/davinci: Use correct length parameter to dma_map_single calls
gpio: Use __devexit at necessary places
gpio: add MODULE_DEVICE_TABLE to pch_gpio and ml_ioh_gpio
gpio/mcp23s08: support mcp23s17 variant
of_mmc_spi: add card detect irq support
spi/omap_mcspi: catch xfers of non-multiple SPI word size
spi/omap_mcspi: Off-by-one error in finding the right divisor
gpio/pca953x: Fix wrong pointer type
spi/pl022: rid dangling labels
spi: add support for SuperH SPI
...
This commit is contained in:
commit
b061c59c27
35 changed files with 1920 additions and 261 deletions
|
|
@ -34,6 +34,7 @@ enum {
|
|||
struct of_mmc_spi {
|
||||
int gpios[NUM_GPIOS];
|
||||
bool alow_gpios[NUM_GPIOS];
|
||||
int detect_irq;
|
||||
struct mmc_spi_platform_data pdata;
|
||||
};
|
||||
|
||||
|
|
@ -61,6 +62,22 @@ static int of_mmc_spi_get_ro(struct device *dev)
|
|||
return of_mmc_spi_read_gpio(dev, WP_GPIO);
|
||||
}
|
||||
|
||||
static int of_mmc_spi_init(struct device *dev,
|
||||
irqreturn_t (*irqhandler)(int, void *), void *mmc)
|
||||
{
|
||||
struct of_mmc_spi *oms = to_of_mmc_spi(dev);
|
||||
|
||||
return request_threaded_irq(oms->detect_irq, NULL, irqhandler, 0,
|
||||
dev_name(dev), mmc);
|
||||
}
|
||||
|
||||
static void of_mmc_spi_exit(struct device *dev, void *mmc)
|
||||
{
|
||||
struct of_mmc_spi *oms = to_of_mmc_spi(dev);
|
||||
|
||||
free_irq(oms->detect_irq, mmc);
|
||||
}
|
||||
|
||||
struct mmc_spi_platform_data *mmc_spi_get_pdata(struct spi_device *spi)
|
||||
{
|
||||
struct device *dev = &spi->dev;
|
||||
|
|
@ -121,8 +138,13 @@ struct mmc_spi_platform_data *mmc_spi_get_pdata(struct spi_device *spi)
|
|||
if (gpio_is_valid(oms->gpios[WP_GPIO]))
|
||||
oms->pdata.get_ro = of_mmc_spi_get_ro;
|
||||
|
||||
/* We don't support interrupts yet, let's poll. */
|
||||
oms->pdata.caps |= MMC_CAP_NEEDS_POLL;
|
||||
oms->detect_irq = irq_of_parse_and_map(np, 0);
|
||||
if (oms->detect_irq != NO_IRQ) {
|
||||
oms->pdata.init = of_mmc_spi_init;
|
||||
oms->pdata.exit = of_mmc_spi_exit;
|
||||
} else {
|
||||
oms->pdata.caps |= MMC_CAP_NEEDS_POLL;
|
||||
}
|
||||
|
||||
dev->platform_data = &oms->pdata;
|
||||
return dev->platform_data;
|
||||
|
|
|
|||
Loading…
Reference in a new issue