mirror of https://gitee.com/openkylin/linux.git
146 lines
3.7 KiB
C
146 lines
3.7 KiB
C
|
/*
|
||
|
* Platform glue data for ST-Ericsson CW1200 driver
|
||
|
*
|
||
|
* Copyright (c) 2013, Sagrad, Inc
|
||
|
* Author: Solomon Peachy <speachy@sagrad.com>
|
||
|
*
|
||
|
* 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 <linux/module.h>
|
||
|
#include <linux/cw1200_platform.h>
|
||
|
|
||
|
MODULE_AUTHOR("Solomon Peachy <speachy@sagrad.com>");
|
||
|
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);
|