]>
Commit | Line | Data |
---|---|---|
0cde7228 GJ |
1 | /* |
2 | * Atheros PB44 reference board support | |
3 | * | |
4 | * Copyright (C) 2009-2010 Gabor Juhos <[email protected]> | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify it | |
7 | * under the terms of the GNU General Public License version 2 as published | |
8 | * by the Free Software Foundation. | |
9 | */ | |
10 | ||
11 | #include <linux/init.h> | |
12 | #include <linux/platform_device.h> | |
13 | #include <linux/i2c.h> | |
14 | #include <linux/i2c-gpio.h> | |
15 | #include <linux/i2c/pcf857x.h> | |
16 | ||
17 | #include "machtypes.h" | |
3f348c5d | 18 | #include "dev-gpio-buttons.h" |
d8fec1fc | 19 | #include "dev-leds-gpio.h" |
68a1d316 | 20 | #include "dev-spi.h" |
7e98aa46 | 21 | #include "dev-usb.h" |
1f3a92de | 22 | #include "pci.h" |
0cde7228 GJ |
23 | |
24 | #define PB44_GPIO_I2C_SCL 0 | |
25 | #define PB44_GPIO_I2C_SDA 1 | |
26 | ||
27 | #define PB44_GPIO_EXP_BASE 16 | |
3f348c5d GJ |
28 | #define PB44_GPIO_SW_RESET (PB44_GPIO_EXP_BASE + 6) |
29 | #define PB44_GPIO_SW_JUMP (PB44_GPIO_EXP_BASE + 8) | |
d8fec1fc GJ |
30 | #define PB44_GPIO_LED_JUMP1 (PB44_GPIO_EXP_BASE + 9) |
31 | #define PB44_GPIO_LED_JUMP2 (PB44_GPIO_EXP_BASE + 10) | |
0cde7228 | 32 | |
3f348c5d GJ |
33 | #define PB44_KEYS_POLL_INTERVAL 20 /* msecs */ |
34 | #define PB44_KEYS_DEBOUNCE_INTERVAL (3 * PB44_KEYS_POLL_INTERVAL) | |
35 | ||
0cde7228 | 36 | static struct i2c_gpio_platform_data pb44_i2c_gpio_data = { |
70342287 RB |
37 | .sda_pin = PB44_GPIO_I2C_SDA, |
38 | .scl_pin = PB44_GPIO_I2C_SCL, | |
0cde7228 GJ |
39 | }; |
40 | ||
41 | static struct platform_device pb44_i2c_gpio_device = { | |
42 | .name = "i2c-gpio", | |
43 | .id = 0, | |
44 | .dev = { | |
45 | .platform_data = &pb44_i2c_gpio_data, | |
46 | } | |
47 | }; | |
48 | ||
49 | static struct pcf857x_platform_data pb44_pcf857x_data = { | |
50 | .gpio_base = PB44_GPIO_EXP_BASE, | |
51 | }; | |
52 | ||
53 | static struct i2c_board_info pb44_i2c_board_info[] __initdata = { | |
54 | { | |
55 | I2C_BOARD_INFO("pcf8575", 0x20), | |
70342287 | 56 | .platform_data = &pb44_pcf857x_data, |
0cde7228 GJ |
57 | }, |
58 | }; | |
59 | ||
d8fec1fc GJ |
60 | static struct gpio_led pb44_leds_gpio[] __initdata = { |
61 | { | |
62 | .name = "pb44:amber:jump1", | |
63 | .gpio = PB44_GPIO_LED_JUMP1, | |
64 | .active_low = 1, | |
65 | }, { | |
66 | .name = "pb44:green:jump2", | |
67 | .gpio = PB44_GPIO_LED_JUMP2, | |
68 | .active_low = 1, | |
69 | }, | |
70 | }; | |
71 | ||
3f348c5d GJ |
72 | static struct gpio_keys_button pb44_gpio_keys[] __initdata = { |
73 | { | |
74 | .desc = "soft_reset", | |
75 | .type = EV_KEY, | |
76 | .code = KEY_RESTART, | |
77 | .debounce_interval = PB44_KEYS_DEBOUNCE_INTERVAL, | |
78 | .gpio = PB44_GPIO_SW_RESET, | |
79 | .active_low = 1, | |
80 | } , { | |
81 | .desc = "jumpstart", | |
82 | .type = EV_KEY, | |
83 | .code = KEY_WPS_BUTTON, | |
84 | .debounce_interval = PB44_KEYS_DEBOUNCE_INTERVAL, | |
85 | .gpio = PB44_GPIO_SW_JUMP, | |
86 | .active_low = 1, | |
87 | } | |
88 | }; | |
89 | ||
68a1d316 GJ |
90 | static struct spi_board_info pb44_spi_info[] = { |
91 | { | |
92 | .bus_num = 0, | |
93 | .chip_select = 0, | |
94 | .max_speed_hz = 25000000, | |
95 | .modalias = "m25p64", | |
96 | }, | |
97 | }; | |
98 | ||
99 | static struct ath79_spi_platform_data pb44_spi_data = { | |
100 | .bus_num = 0, | |
101 | .num_chipselect = 1, | |
102 | }; | |
103 | ||
0cde7228 GJ |
104 | static void __init pb44_init(void) |
105 | { | |
106 | i2c_register_board_info(0, pb44_i2c_board_info, | |
107 | ARRAY_SIZE(pb44_i2c_board_info)); | |
108 | platform_device_register(&pb44_i2c_gpio_device); | |
d8fec1fc GJ |
109 | |
110 | ath79_register_leds_gpio(-1, ARRAY_SIZE(pb44_leds_gpio), | |
111 | pb44_leds_gpio); | |
3f348c5d GJ |
112 | ath79_register_gpio_keys_polled(-1, PB44_KEYS_POLL_INTERVAL, |
113 | ARRAY_SIZE(pb44_gpio_keys), | |
114 | pb44_gpio_keys); | |
68a1d316 GJ |
115 | ath79_register_spi(&pb44_spi_data, pb44_spi_info, |
116 | ARRAY_SIZE(pb44_spi_info)); | |
7e98aa46 | 117 | ath79_register_usb(); |
1f3a92de | 118 | ath79_register_pci(); |
0cde7228 GJ |
119 | } |
120 | ||
121 | MIPS_MACHINE(ATH79_MACH_PB44, "PB44", "Atheros PB44 reference board", | |
122 | pb44_init); |