diff options
| -rw-r--r-- | arch/arm/mach-omap2/board-rx51-peripherals.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c index fb5988c1a884..15ce6514c5fd 100644 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/input.h> | 14 | #include <linux/input.h> |
| 15 | #include <linux/input/matrix_keypad.h> | 15 | #include <linux/input/matrix_keypad.h> |
| 16 | #include <linux/spi/spi.h> | 16 | #include <linux/spi/spi.h> |
| 17 | #include <linux/spi/wl12xx.h> | ||
| 17 | #include <linux/i2c.h> | 18 | #include <linux/i2c.h> |
| 18 | #include <linux/i2c/twl4030.h> | 19 | #include <linux/i2c/twl4030.h> |
| 19 | #include <linux/clk.h> | 20 | #include <linux/clk.h> |
| @@ -37,6 +38,33 @@ | |||
| 37 | #define SYSTEM_REV_B_USES_VAUX3 0x1699 | 38 | #define SYSTEM_REV_B_USES_VAUX3 0x1699 |
| 38 | #define SYSTEM_REV_S_USES_VAUX3 0x8 | 39 | #define SYSTEM_REV_S_USES_VAUX3 0x8 |
| 39 | 40 | ||
| 41 | #define RX51_WL1251_POWER_GPIO 87 | ||
| 42 | #define RX51_WL1251_IRQ_GPIO 42 | ||
| 43 | |||
| 44 | /* list all spi devices here */ | ||
| 45 | enum { | ||
| 46 | RX51_SPI_WL1251, | ||
| 47 | }; | ||
| 48 | |||
| 49 | static struct wl12xx_platform_data wl1251_pdata; | ||
| 50 | |||
| 51 | static struct omap2_mcspi_device_config wl1251_mcspi_config = { | ||
| 52 | .turbo_mode = 0, | ||
| 53 | .single_channel = 1, | ||
| 54 | }; | ||
| 55 | |||
| 56 | static struct spi_board_info rx51_peripherals_spi_board_info[] __initdata = { | ||
| 57 | [RX51_SPI_WL1251] = { | ||
| 58 | .modalias = "wl1251", | ||
| 59 | .bus_num = 4, | ||
| 60 | .chip_select = 0, | ||
| 61 | .max_speed_hz = 48000000, | ||
| 62 | .mode = SPI_MODE_2, | ||
| 63 | .controller_data = &wl1251_mcspi_config, | ||
| 64 | .platform_data = &wl1251_pdata, | ||
| 65 | }, | ||
| 66 | }; | ||
| 67 | |||
| 40 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | 68 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) |
| 41 | 69 | ||
| 42 | #define RX51_GPIO_CAMERA_LENS_COVER 110 | 70 | #define RX51_GPIO_CAMERA_LENS_COVER 110 |
| @@ -617,11 +645,64 @@ static inline void board_smc91x_init(void) | |||
| 617 | 645 | ||
| 618 | #endif | 646 | #endif |
| 619 | 647 | ||
| 648 | static void rx51_wl1251_set_power(bool enable) | ||
| 649 | { | ||
| 650 | gpio_set_value(RX51_WL1251_POWER_GPIO, enable); | ||
| 651 | } | ||
| 652 | |||
| 653 | static void __init rx51_init_wl1251(void) | ||
| 654 | { | ||
| 655 | int irq, ret; | ||
| 656 | |||
| 657 | ret = gpio_request(RX51_WL1251_POWER_GPIO, "wl1251 power"); | ||
| 658 | if (ret < 0) | ||
| 659 | goto error; | ||
| 660 | |||
| 661 | ret = gpio_direction_output(RX51_WL1251_POWER_GPIO, 0); | ||
| 662 | if (ret < 0) | ||
| 663 | goto err_power; | ||
| 664 | |||
| 665 | ret = gpio_request(RX51_WL1251_IRQ_GPIO, "wl1251 irq"); | ||
| 666 | if (ret < 0) | ||
| 667 | goto err_power; | ||
| 668 | |||
| 669 | ret = gpio_direction_input(RX51_WL1251_IRQ_GPIO); | ||
| 670 | if (ret < 0) | ||
| 671 | goto err_irq; | ||
| 672 | |||
| 673 | irq = gpio_to_irq(RX51_WL1251_IRQ_GPIO); | ||
| 674 | if (irq < 0) | ||
| 675 | goto err_irq; | ||
| 676 | |||
| 677 | wl1251_pdata.set_power = rx51_wl1251_set_power; | ||
| 678 | rx51_peripherals_spi_board_info[RX51_SPI_WL1251].irq = irq; | ||
| 679 | |||
| 680 | return; | ||
| 681 | |||
| 682 | err_irq: | ||
| 683 | gpio_free(RX51_WL1251_IRQ_GPIO); | ||
| 684 | |||
| 685 | err_power: | ||
| 686 | gpio_free(RX51_WL1251_POWER_GPIO); | ||
| 687 | |||
| 688 | error: | ||
| 689 | printk(KERN_ERR "wl1251 board initialisation failed\n"); | ||
| 690 | wl1251_pdata.set_power = NULL; | ||
| 691 | |||
| 692 | /* | ||
| 693 | * Now rx51_peripherals_spi_board_info[1].irq is zero and | ||
| 694 | * set_power is null, and wl1251_probe() will fail. | ||
| 695 | */ | ||
| 696 | } | ||
| 697 | |||
| 620 | void __init rx51_peripherals_init(void) | 698 | void __init rx51_peripherals_init(void) |
| 621 | { | 699 | { |
| 622 | rx51_i2c_init(); | 700 | rx51_i2c_init(); |
| 623 | board_onenand_init(); | 701 | board_onenand_init(); |
| 624 | board_smc91x_init(); | 702 | board_smc91x_init(); |
| 625 | rx51_add_gpio_keys(); | 703 | rx51_add_gpio_keys(); |
| 704 | rx51_init_wl1251(); | ||
| 705 | spi_register_board_info(rx51_peripherals_spi_board_info, | ||
| 706 | ARRAY_SIZE(rx51_peripherals_spi_board_info)); | ||
| 626 | } | 707 | } |
| 627 | 708 | ||
