/* * Platform glue data for ST-Ericsson CW1200 driver * * Copyright (c) 2013, Sagrad, Inc * Author: Solomon Peachy * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #include #include MODULE_AUTHOR("Solomon Peachy "); MODULE_DESCRIPTION("ST-Ericsson CW1200 Platform glue driver"); MODULE_LICENSE("GPL"); /* Define just one of these. Feel free to customize as needed */ #define SAGRAD_1091_1098_EVK_SDIO /* #define SAGRAD_1091_1098_EVK_SPI */ #ifdef SAGRAD_1091_1098_EVK_SDIO #if 0 static struct resource cw1200_href_resources[] = { { .start = 215, /* fix me as appropriate */ .end = 215, /* ditto */ .flags = IORESOURCE_IO, .name = "cw1200_wlan_reset", }, { .start = 216, /* fix me as appropriate */ .end = 216, /* ditto */ .flags = IORESOURCE_IO, .name = "cw1200_wlan_powerup", }, { .start = NOMADIK_GPIO_TO_IRQ(216), /* fix me as appropriate */ .end = NOMADIK_GPIO_TO_IRQ(216), /* ditto */ .flags = IORESOURCE_IRQ, .name = "cw1200_wlan_irq", }, }; #endif static int cw1200_power_ctrl(const struct cw1200_platform_data_sdio *pdata, bool enable) { /* Control 3v3 and 1v8 to hardware as appropriate */ /* Note this is not needed if it's controlled elsewhere or always on */ /* May require delay for power to stabilize */ return 0; } static int cw1200_clk_ctrl(const struct cw1200_platform_data_sdio *pdata, bool enable) { /* Turn CLK_32K off and on as appropriate. */ /* Note this is not needed if it's always on */ /* May require delay for clock to stabilize */ return 0; } static struct cw1200_platform_data_sdio cw1200_platform_data = { .ref_clk = 38400, .have_5ghz = false, #if 0 .reset = &cw1200_href_resources[0], .powerup = &cw1200_href_resources[1], .irq = &cw1200_href_resources[2], #endif .power_ctrl = cw1200_power_ctrl, .clk_ctrl = cw1200_clk_ctrl, /* .macaddr = ??? */ .sdd_file = "sdd_sagrad_1091_1098.bin", }; #endif #ifdef SAGRAD_1091_1098_EVK_SPI /* Note that this is an example of integrating into your board support file */ static struct resource cw1200_href_resources[] = { { .start = GPIO_RF_RESET, .end = GPIO_RF_RESET, .flags = IORESOURCE_IO, .name = "cw1200_wlan_reset", }, { .start = GPIO_RF_POWERUP, .end = GPIO_RF_POWERUP, .flags = IORESOURCE_IO, .name = "cw1200_wlan_powerup", }, }; static int cw1200_power_ctrl(const struct cw1200_platform_data_spi *pdata, bool enable) { /* Control 3v3 and 1v8 to hardware as appropriate */ /* Note this is not needed if it's controlled elsewhere or always on */ /* May require delay for power to stabilize */ return 0; } static int cw1200_clk_ctrl(const struct cw1200_platform_data_spi *pdata, bool enable) { /* Turn CLK_32K off and on as appropriate. */ /* Note this is not needed if it's always on */ /* May require delay for clock to stabilize */ return 0; } static struct cw1200_platform_data_spi cw1200_platform_data = { .ref_clk = 38400, .spi_bits_per_word = 16, .reset = &cw1200_href_resources[0], .powerup = &cw1200_href_resources[1], .power_ctrl = cw1200_power_ctrl, .clk_ctrl = cw1200_clk_ctrl, /* .macaddr = ??? */ .sdd_file = "sdd_sagrad_1091_1098.bin", }; static struct spi_board_info myboard_spi_devices[] __initdata = { { .modalias = "cw1200_wlan_spi", .max_speed_hz = 10000000, /* 52MHz Max */ .bus_num = 0, .irq = WIFI_IRQ, .platform_data = &cw1200_platform_data, .chip_select = 0, }, }; #endif const void *cw1200_get_platform_data(void) { return &cw1200_platform_data; } EXPORT_SYMBOL_GPL(cw1200_get_platform_data);