summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/board-apalis_t30.c
diff options
context:
space:
mode:
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>2014-07-22 17:15:18 +0200
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2014-07-22 17:32:18 +0200
commit17714a865512ad8634bcc616c4e2e65f8fff2646 (patch)
tree8f1810b25de2f5f8fbb89eef5e0cc715b51e7703 /arch/arm/mach-tegra/board-apalis_t30.c
parentbdf9e11d339ebc121e80e7ecdd44e0abcaf4ff38 (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.c36
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",