static void imx_gpioc_demux_handler(unsigned int irq_unused, struct irq_desc *desc) { unsigned int mask, irq; mask = ISR(2); irq = IRQ_GPIOC(0); imx_gpio_handler(mask, irq, desc); }
static int pcm970_sdhc2_init(struct device *dev, irq_handler_t detect_irq, void *data) { int ret; ret = request_irq(IRQ_GPIOC(29), detect_irq, IRQF_TRIGGER_FALLING, "imx-mmc-detect", data); if (ret) return ret; ret = gpio_request(GPIO_PORTC + 28, "imx-mmc-ro"); if (ret) { free_irq(IRQ_GPIOC(29), data); return ret; } gpio_direction_input(GPIO_PORTC + 28); return 0; }
static int pca100_sdhc2_init(struct device *dev, irq_handler_t detect_irq, void *data) { int ret; ret = request_irq(IRQ_GPIOC(29), detect_irq, IRQF_DISABLED | IRQF_TRIGGER_FALLING, "imx-mmc-detect", data); if (ret) printk(KERN_ERR "pca100: Failed to reuest irq for sd/mmc detection\n"); return ret; }
static void pca100_sdhc2_exit(struct device *dev, void *data) { free_irq(IRQ_GPIOC(29), data); }
* the DM9000 drivers wants two defined address spaces * to gain access to address latch registers and the data path. */ static struct resource dm9000x_resources[] = { { .name = "address area", .start = MX1_CS5_PHYS, .end = MX1_CS5_PHYS + 1, .flags = IORESOURCE_MEM, /* address access */ }, { .name = "data area", .start = MX1_CS5_PHYS + 4, .end = MX1_CS5_PHYS + 5, .flags = IORESOURCE_MEM, /* data access */ }, { .start = IRQ_GPIOC(3), .end = IRQ_GPIOC(3), .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWLEVEL, }, }; static struct platform_device dm9000x_device = { .name = "dm9000", .id = 0, .num_resources = ARRAY_SIZE(dm9000x_resources), .resource = dm9000x_resources, .dev = { .platform_data = &dm9000_platdata, } };
static void pcm970_sdhc2_exit(struct device *dev, void *data) { free_irq(IRQ_GPIOC(29), data); gpio_free(GPIO_PORTC + 28); }
#include <asm/mach/map.h> #include <asm/mach-types.h> #include <asm/mach/arch.h> #include <linux/interrupt.h> #include "generic.h" static struct resource cs89x0_resources[] = { [0] = { .start = IMX_CS4_PHYS + 0x300, .end = IMX_CS4_PHYS + 0x300 + 16, .flags = IORESOURCE_MEM, }, [1] = { .start = IRQ_GPIOC(17), .end = IRQ_GPIOC(17), .flags = IORESOURCE_IRQ, }, }; static struct platform_device cs89x0_device = { .name = "cirrus-cs89x0", .num_resources = ARRAY_SIZE(cs89x0_resources), .resource = cs89x0_resources, }; static struct platform_device *devices[] __initdata = { &cs89x0_device, };
/* SPI */ static int spi2_internal_chipselect[] = {SPI2_SS0}; static const struct spi_imx_master spi2_pdata __initconst = { .chipselect = spi2_internal_chipselect, .num_chipselect = ARRAY_SIZE(spi2_internal_chipselect), }; static struct spi_board_info mx27_3ds_spi_devs[] __initdata = { { .modalias = "mc13783", .max_speed_hz = 1000000, .bus_num = 1, .chip_select = 0, /* SS0 */ .platform_data = &mc13783_pdata, .irq = IRQ_GPIOC(14), .mode = SPI_CS_HIGH, }, }; static const struct imxi2c_platform_data mx27_3ds_i2c0_data __initconst = { .bitrate = 100000, }; static void __init mx27pdk_init(void) { imx27_soc_init(); mxc_gpio_setup_multiple_pins(mx27pdk_pins, ARRAY_SIZE(mx27pdk_pins), "mx27pdk"); mx27_3ds_sdhc1_enable_level_translator();