--- arch/arm/mach-ep93xx/simone.c.old 2010-03-20 20:54:28.000000000 +0000 +++ arch/arm/mach-ep93xx/simone.c 2010-03-25 14:27:39.000000000 +0000 @@ -22,9 +22,12 @@ #include #include #include +#include +#include #include #include +#include #include #include @@ -59,6 +62,37 @@ .flags = EP93XXFB_USE_SDCSN0 | EP93XXFB_PCLK_FALLING, }; +static struct mmc_spi_platform_data simone_spi_pdata = { + //.init = &ep93xx_mmc_spi_init, /* set up card detect GPIO IRQ */ + //.exit = &ep93xx_mmc_spi_exit, + .get_ro = NULL, /* no read-only detection here */ + .detect_delay = 500, /* card detection delay in msec */ + .ocr_mask = MMC_VDD_33_34, +}; + +static struct spi_board_info simone_spi_board_info[] = { + { + .modalias = "mmc_spi", + .platform_data = &simone_spi_pdata, + /* 2.0 gives 215kB/s in linear raw read + * 3.7 (max) gives 222 kB/sec, while max from 2.6.24.7 is 235kB/sec + * Safe max: 2.0 * 235/215 = 2186000 so use 2200000 + */ + .max_speed_hz = 3686400, /* Max possible rate: 7.4MHz / 2 */ + .mode = SPI_MODE_0, + } +}; + +static void null_cs_control(unsigned cs, unsigned value, void *data) { + /* Sim.One only has MMC card and no GPIO chip select logic */ +} + +static struct ep93xx_spi_info simone_spi_info = { + .num_chipselect = 1, + .cs_control = null_cs_control, + .data = NULL, +}; + static struct i2c_gpio_platform_data simone_i2c_gpio_data = { .sda_pin = EP93XX_GPIO_LINE_EEDAT, .sda_is_open_drain = 0, @@ -81,6 +115,8 @@ platform_device_register(&simone_flash); ep93xx_register_eth(&simone_eth_data, 1); ep93xx_register_fb(&simone_fb_info); + spi_register_board_info(simone_spi_board_info, ARRAY_SIZE(simone_spi_board_info)); + ep93xx_register_spi(&simone_spi_info); ep93xx_register_i2c(&simone_i2c_gpio_data, simone_i2c_board_info, ARRAY_SIZE(simone_i2c_board_info)); }