All pastes #813476 Raw Edit

Something

public text v1 · immutable
·published 2007-12-12 15:52 UTC
rendered paste body
+static int mmc_slot_init(struct device *dev,
+                irqreturn_t (*handler)(int, void *),
+                void *data)
+{
+        struct spi_device *spi = to_spi_device(dev);
+        return request_irq(spi->irq, handler,
+                          IRQF_TRIGGER_RISING
+                        | IRQF_TRIGGER_FALLING
+                        | IRQF_SAMPLE_RANDOM,
+                        spi->dev.bus_id, data);
+}
+
+static void mmc_slot_exit(struct device *dev, void *data)
+{
+        struct spi_device *spi = to_spi_device(dev);
+
+        free_irq(spi->irq, data);
+}
+
+static const struct mmc_spi_platform_data mmc_spi_data = {
+        .init           = mmc_slot_init,
+        .exit           = mmc_slot_exit,
+        .detect_delay   = 700,  /* msecs */
+        //.get_ro               = ...,
+        .ocr_mask       = MMC_VDD_32_33 | MMC_VDD_33_34,
+};
+
+
+static struct spi_board_info spi1_board_info[] __initdata = {
+       {
+               .modalias       = "mmc_spi",
+               .max_speed_hz   = 18000000,
+//             .max_speed_hz   = MCK,
+               .platform_data  = &mmc_spi_data,
+               /* .irq         = ... set later (PB7) */
+               .chip_select    = 0,
+       },
+};
+

@@ -163,9 +210,14 @@ static int __init atngw100_init(void)
        set_hw_addr(at32_add_device_eth(0, &eth_data[0]));
        set_hw_addr(at32_add_device_eth(1, &eth_data[1]));
 
+       at32_select_gpio(GPIO_PIN_PA(23),
+               AT32_GPIOF_DEGLITCH | AT32_GPIOF_PULLUP);
+       spi1_board_info[0].irq  = gpio_to_irq(GPIO_PIN_PA(23));
+
        at32_add_device_spi(0, spi0_board_info, ARRAY_SIZE(spi0_board_info));
        at32_add_device_mci(0, &mci0_data);
        at32_add_device_usba(0, NULL);
+       at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));