Loading arch/arm/mach-pxa/include/mach/zeus.h +2 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,8 @@ #define ZEUS_EXT1_GPIO(x) (ZEUS_EXT1_GPIO_BASE + (x)) #define ZEUS_USER_GPIO(x) (ZEUS_USER_GPIO_BASE + (x)) #define ZEUS_CAN_SHDN_GPIO ZEUS_EXT1_GPIO(2) /* * CPLD registers: * Only 4 registers, but spreaded over a 32MB address space. Loading arch/arm/mach-pxa/zeus.c +49 −6 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <linux/i2c.h> #include <linux/i2c/pca953x.h> #include <linux/apm-emulation.h> #include <linux/can/platform/mcp251x.h> #include <asm/mach-types.h> #include <asm/mach/arch.h> Loading Loading @@ -387,11 +388,47 @@ static struct pxa2xx_spi_master pxa2xx_spi_ssp3_master_info = { .enable_dma = 1, }; static struct platform_device pxa2xx_spi_ssp3_device = { .name = "pxa2xx-spi", .id = 3, .dev = { .platform_data = &pxa2xx_spi_ssp3_master_info, /* CAN bus on SPI */ static int zeus_mcp2515_setup(struct spi_device *sdev) { int err; err = gpio_request(ZEUS_CAN_SHDN_GPIO, "CAN shutdown"); if (err) return err; err = gpio_direction_output(ZEUS_CAN_SHDN_GPIO, 1); if (err) { gpio_free(ZEUS_CAN_SHDN_GPIO); return err; } return 0; } static int zeus_mcp2515_transceiver_enable(int enable) { gpio_set_value(ZEUS_CAN_SHDN_GPIO, !enable); return 0; } static struct mcp251x_platform_data zeus_mcp2515_pdata = { .oscillator_frequency = 16*1000*1000, .model = CAN_MCP251X_MCP2515, .board_specific_setup = zeus_mcp2515_setup, .transceiver_enable = zeus_mcp2515_transceiver_enable, .power_enable = zeus_mcp2515_transceiver_enable, }; static struct spi_board_info zeus_spi_board_info[] = { [0] = { .modalias = "mcp251x", .platform_data = &zeus_mcp2515_pdata, .irq = gpio_to_irq(ZEUS_CAN_GPIO), .max_speed_hz = 1*1000*1000, .bus_num = 3, .mode = SPI_MODE_0, .chip_select = 0, }, }; Loading Loading @@ -476,7 +513,6 @@ static struct platform_device *zeus_devices[] __initdata = { &zeus_dm9k0_device, &zeus_dm9k1_device, &zeus_sram_device, &pxa2xx_spi_ssp3_device, &zeus_leds_device, &zeus_pcmcia_device, &zeus_max6369_device, Loading Loading @@ -757,6 +793,11 @@ static mfp_cfg_t zeus_pin_config[] __initdata = { GPIO104_CIF_DD_2, GPIO105_CIF_DD_1, GPIO81_SSP3_TXD, GPIO82_SSP3_RXD, GPIO83_SSP3_SFRM, GPIO84_SSP3_SCLK, GPIO48_nPOE, GPIO49_nPWE, GPIO50_nPIOR, Loading Loading @@ -811,6 +852,8 @@ static void __init zeus_init(void) pxa_set_ac97_info(&zeus_ac97_info); pxa_set_i2c_info(NULL); i2c_register_board_info(0, ARRAY_AND_SIZE(zeus_i2c_devices)); pxa2xx_set_spi_info(3, &pxa2xx_spi_ssp3_master_info); spi_register_board_info(zeus_spi_board_info, ARRAY_SIZE(zeus_spi_board_info)); } static struct map_desc zeus_io_desc[] __initdata = { Loading Loading
arch/arm/mach-pxa/include/mach/zeus.h +2 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,8 @@ #define ZEUS_EXT1_GPIO(x) (ZEUS_EXT1_GPIO_BASE + (x)) #define ZEUS_USER_GPIO(x) (ZEUS_USER_GPIO_BASE + (x)) #define ZEUS_CAN_SHDN_GPIO ZEUS_EXT1_GPIO(2) /* * CPLD registers: * Only 4 registers, but spreaded over a 32MB address space. Loading
arch/arm/mach-pxa/zeus.c +49 −6 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include <linux/i2c.h> #include <linux/i2c/pca953x.h> #include <linux/apm-emulation.h> #include <linux/can/platform/mcp251x.h> #include <asm/mach-types.h> #include <asm/mach/arch.h> Loading Loading @@ -387,11 +388,47 @@ static struct pxa2xx_spi_master pxa2xx_spi_ssp3_master_info = { .enable_dma = 1, }; static struct platform_device pxa2xx_spi_ssp3_device = { .name = "pxa2xx-spi", .id = 3, .dev = { .platform_data = &pxa2xx_spi_ssp3_master_info, /* CAN bus on SPI */ static int zeus_mcp2515_setup(struct spi_device *sdev) { int err; err = gpio_request(ZEUS_CAN_SHDN_GPIO, "CAN shutdown"); if (err) return err; err = gpio_direction_output(ZEUS_CAN_SHDN_GPIO, 1); if (err) { gpio_free(ZEUS_CAN_SHDN_GPIO); return err; } return 0; } static int zeus_mcp2515_transceiver_enable(int enable) { gpio_set_value(ZEUS_CAN_SHDN_GPIO, !enable); return 0; } static struct mcp251x_platform_data zeus_mcp2515_pdata = { .oscillator_frequency = 16*1000*1000, .model = CAN_MCP251X_MCP2515, .board_specific_setup = zeus_mcp2515_setup, .transceiver_enable = zeus_mcp2515_transceiver_enable, .power_enable = zeus_mcp2515_transceiver_enable, }; static struct spi_board_info zeus_spi_board_info[] = { [0] = { .modalias = "mcp251x", .platform_data = &zeus_mcp2515_pdata, .irq = gpio_to_irq(ZEUS_CAN_GPIO), .max_speed_hz = 1*1000*1000, .bus_num = 3, .mode = SPI_MODE_0, .chip_select = 0, }, }; Loading Loading @@ -476,7 +513,6 @@ static struct platform_device *zeus_devices[] __initdata = { &zeus_dm9k0_device, &zeus_dm9k1_device, &zeus_sram_device, &pxa2xx_spi_ssp3_device, &zeus_leds_device, &zeus_pcmcia_device, &zeus_max6369_device, Loading Loading @@ -757,6 +793,11 @@ static mfp_cfg_t zeus_pin_config[] __initdata = { GPIO104_CIF_DD_2, GPIO105_CIF_DD_1, GPIO81_SSP3_TXD, GPIO82_SSP3_RXD, GPIO83_SSP3_SFRM, GPIO84_SSP3_SCLK, GPIO48_nPOE, GPIO49_nPWE, GPIO50_nPIOR, Loading Loading @@ -811,6 +852,8 @@ static void __init zeus_init(void) pxa_set_ac97_info(&zeus_ac97_info); pxa_set_i2c_info(NULL); i2c_register_board_info(0, ARRAY_AND_SIZE(zeus_i2c_devices)); pxa2xx_set_spi_info(3, &pxa2xx_spi_ssp3_master_info); spi_register_board_info(zeus_spi_board_info, ARRAY_SIZE(zeus_spi_board_info)); } static struct map_desc zeus_io_desc[] __initdata = { Loading