diff options
author | Marcel Ziswiler <marcel.ziswiler@toradex.com> | 2014-07-22 17:15:18 +0200 |
---|---|---|
committer | Marcel Ziswiler <marcel.ziswiler@toradex.com> | 2014-07-22 17:32:18 +0200 |
commit | 17714a865512ad8634bcc616c4e2e65f8fff2646 (patch) | |
tree | 8f1810b25de2f5f8fbb89eef5e0cc715b51e7703 /arch/arm/mach-tegra/board-apalis_t30.c | |
parent | bdf9e11d339ebc121e80e7ecdd44e0abcaf4ff38 (diff) |
apalis/colibri t20/t30: fix/introduce spi device controller data
Fix (Colibri) resp. introduce (Apalis) SPI device controller data to
properly use HW based chip select with one clock of setup and hold time
each for both MCP2515 CAN controller(s) as well as spidev.
Diffstat (limited to 'arch/arm/mach-tegra/board-apalis_t30.c')
-rw-r--r-- | arch/arm/mach-tegra/board-apalis_t30.c | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/arch/arm/mach-tegra/board-apalis_t30.c b/arch/arm/mach-tegra/board-apalis_t30.c index d7e5396220e9..a10064ae73ca 100644 --- a/arch/arm/mach-tegra/board-apalis_t30.c +++ b/arch/arm/mach-tegra/board-apalis_t30.c @@ -278,6 +278,12 @@ static struct platform_device soc_camera_as0260soc = { /* CAN */ #if defined(CONFIG_CAN_MCP251X) || defined(CONFIG_CAN_MCP251X_MODULE) +static struct tegra_spi_device_controller_data mcp251x_controller_data = { + .cs_hold_clk_count = 1, /* at least 50 ns */ + .cs_setup_clk_count = 1, /* at least 50 ns */ + .is_hw_based_cs = 1, +}; + static struct mcp251x_platform_data can_pdata = { .oscillator_frequency = 16000000, .power_enable = NULL, @@ -286,18 +292,20 @@ static struct mcp251x_platform_data can_pdata = { static struct spi_board_info can_board_info[] = { { - .bus_num = 1, /* SPI2: CAN1 */ - .chip_select = 0, - .max_speed_hz = 10000000, - .modalias = "mcp2515", - .platform_data = &can_pdata, + .bus_num = 1, /* SPI2: CAN1 */ + .chip_select = 0, + .controller_data = &mcp251x_controller_data, + .max_speed_hz = 10000000, + .modalias = "mcp2515", + .platform_data = &can_pdata, }, { - .bus_num = 3, /* SPI4: CAN2 */ - .chip_select = 1, - .max_speed_hz = 10000000, - .modalias = "mcp2515", - .platform_data = &can_pdata, + .bus_num = 3, /* SPI4: CAN2 */ + .chip_select = 1, + .controller_data = &mcp251x_controller_data, + .max_speed_hz = 10000000, + .modalias = "mcp2515", + .platform_data = &can_pdata, }, }; @@ -803,10 +811,17 @@ static void apalis_t30_sata_init(void) { } /* SPI */ #if defined(CONFIG_SPI_TEGRA) && defined(CONFIG_SPI_SPIDEV) +static struct tegra_spi_device_controller_data spidev_controller_data = { + .cs_hold_clk_count = 1, + .cs_setup_clk_count = 1, + .is_hw_based_cs = 1, +}; + static struct spi_board_info tegra_spi_devices[] __initdata = { { .bus_num = 0, /* SPI1: Apalis SPI1 */ .chip_select = 0, + .controller_data = &spidev_controller_data, .irq = 0, .max_speed_hz = 50000000, .modalias = "spidev", @@ -816,6 +831,7 @@ static struct spi_board_info tegra_spi_devices[] __initdata = { { .bus_num = 4, /* SPI5: Apalis SPI2 */ .chip_select = 2, + .controller_data = &spidev_controller_data, .irq = 0, .max_speed_hz = 50000000, .modalias = "spidev", |