diff options
author | David Brownell <david-b@pacbell.net> | 2008-02-29 01:09:15 -0500 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2008-04-14 12:57:06 -0400 |
commit | d94577d5a581fe55c46b5b82eee733b8d053db19 (patch) | |
tree | 74dac4dcaab082077effb08a09f4d74a8873d072 /arch/arm/mach-omap1/board-osk.c | |
parent | 79966fd9b4781f9bd257312489ff511f2c01f210 (diff) |
ARM: OMAP: Use gpiolib with tps65010 for OSK 5912
Convert OSK board to use new tps65010 gpiolib support. This
includes moving its LED support from leds-osk to gpio-leds,
giving more trigger options and a net platform code shrink.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/mach-omap1/board-osk.c')
-rw-r--r-- | arch/arm/mach-omap1/board-osk.c | 108 |
1 files changed, 70 insertions, 38 deletions
diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c index dd9ece8f409f..4f9baba7d893 100644 --- a/arch/arm/mach-omap1/board-osk.c +++ b/arch/arm/mach-omap1/board-osk.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/interrupt.h> | 32 | #include <linux/interrupt.h> |
33 | #include <linux/irq.h> | 33 | #include <linux/irq.h> |
34 | #include <linux/i2c.h> | 34 | #include <linux/i2c.h> |
35 | #include <linux/leds.h> | ||
35 | 36 | ||
36 | #include <linux/mtd/mtd.h> | 37 | #include <linux/mtd/mtd.h> |
37 | #include <linux/mtd/partitions.h> | 38 | #include <linux/mtd/partitions.h> |
@@ -183,11 +184,80 @@ static struct platform_device *osk5912_devices[] __initdata = { | |||
183 | &osk5912_mcbsp1_device, | 184 | &osk5912_mcbsp1_device, |
184 | }; | 185 | }; |
185 | 186 | ||
187 | static struct gpio_led tps_leds[] = { | ||
188 | /* NOTE: D9 and D2 have hardware blink support. | ||
189 | * Also, D9 requires non-battery power. | ||
190 | */ | ||
191 | { .gpio = OSK_TPS_GPIO_LED_D9, .name = "d9", }, | ||
192 | { .gpio = OSK_TPS_GPIO_LED_D2, .name = "d2", }, | ||
193 | { .gpio = OSK_TPS_GPIO_LED_D3, .name = "d3", .active_low = 1, | ||
194 | .default_trigger = "heartbeat", }, | ||
195 | }; | ||
196 | |||
197 | static struct gpio_led_platform_data tps_leds_data = { | ||
198 | .num_leds = 3, | ||
199 | .leds = tps_leds, | ||
200 | }; | ||
201 | |||
202 | static struct platform_device osk5912_tps_leds = { | ||
203 | .name = "leds-gpio", | ||
204 | .id = 0, | ||
205 | .dev.platform_data = &tps_leds_data, | ||
206 | }; | ||
207 | |||
208 | static int osk_tps_setup(struct i2c_client *client, void *context) | ||
209 | { | ||
210 | /* Set GPIO 1 HIGH to disable VBUS power supply; | ||
211 | * OHCI driver powers it up/down as needed. | ||
212 | */ | ||
213 | gpio_request(OSK_TPS_GPIO_USB_PWR_EN, "n_vbus_en"); | ||
214 | gpio_direction_output(OSK_TPS_GPIO_USB_PWR_EN, 1); | ||
215 | |||
216 | /* Set GPIO 2 high so LED D3 is off by default */ | ||
217 | tps65010_set_gpio_out_value(GPIO2, HIGH); | ||
218 | |||
219 | /* Set GPIO 3 low to take ethernet out of reset */ | ||
220 | gpio_request(OSK_TPS_GPIO_LAN_RESET, "smc_reset"); | ||
221 | gpio_direction_output(OSK_TPS_GPIO_LAN_RESET, 0); | ||
222 | |||
223 | /* GPIO4 is VDD_DSP */ | ||
224 | gpio_request(OSK_TPS_GPIO_DSP_PWR_EN, "dsp_power"); | ||
225 | gpio_direction_output(OSK_TPS_GPIO_DSP_PWR_EN, 1); | ||
226 | /* REVISIT if DSP support isn't configured, power it off ... */ | ||
227 | |||
228 | /* Let LED1 (D9) blink; leds-gpio may override it */ | ||
229 | tps65010_set_led(LED1, BLINK); | ||
230 | |||
231 | /* Set LED2 off by default */ | ||
232 | tps65010_set_led(LED2, OFF); | ||
233 | |||
234 | /* Enable LOW_PWR handshake */ | ||
235 | tps65010_set_low_pwr(ON); | ||
236 | |||
237 | /* Switch VLDO2 to 3.0V for AIC23 */ | ||
238 | tps65010_config_vregs1(TPS_LDO2_ENABLE | TPS_VLDO2_3_0V | ||
239 | | TPS_LDO1_ENABLE); | ||
240 | |||
241 | /* register these three LEDs */ | ||
242 | osk5912_tps_leds.dev.parent = &client->dev; | ||
243 | platform_device_register(&osk5912_tps_leds); | ||
244 | |||
245 | return 0; | ||
246 | } | ||
247 | |||
248 | static struct tps65010_board tps_board = { | ||
249 | .base = OSK_TPS_GPIO_BASE, | ||
250 | .outmask = 0x0f, | ||
251 | .setup = osk_tps_setup, | ||
252 | }; | ||
253 | |||
186 | static struct i2c_board_info __initdata osk_i2c_board_info[] = { | 254 | static struct i2c_board_info __initdata osk_i2c_board_info[] = { |
187 | { | 255 | { |
188 | I2C_BOARD_INFO("tps65010", 0x48), | 256 | I2C_BOARD_INFO("tps65010", 0x48), |
189 | .type = "tps65010", | 257 | .type = "tps65010", |
190 | .irq = OMAP_GPIO_IRQ(OMAP_MPUIO(1)), | 258 | .irq = OMAP_GPIO_IRQ(OMAP_MPUIO(1)), |
259 | .platform_data = &tps_board, | ||
260 | |||
191 | }, | 261 | }, |
192 | /* TODO when driver support is ready: | 262 | /* TODO when driver support is ready: |
193 | * - aic23 audio chip at 0x1a | 263 | * - aic23 audio chip at 0x1a |
@@ -488,44 +558,6 @@ static void __init osk_map_io(void) | |||
488 | omap1_map_common_io(); | 558 | omap1_map_common_io(); |
489 | } | 559 | } |
490 | 560 | ||
491 | #ifdef CONFIG_TPS65010 | ||
492 | static int __init osk_tps_init(void) | ||
493 | { | ||
494 | if (!machine_is_omap_osk()) | ||
495 | return 0; | ||
496 | |||
497 | /* Let LED1 (D9) blink */ | ||
498 | tps65010_set_led(LED1, BLINK); | ||
499 | |||
500 | /* Disable LED 2 (D2) */ | ||
501 | tps65010_set_led(LED2, OFF); | ||
502 | |||
503 | /* Set GPIO 1 HIGH to disable VBUS power supply; | ||
504 | * OHCI driver powers it up/down as needed. | ||
505 | */ | ||
506 | tps65010_set_gpio_out_value(GPIO1, HIGH); | ||
507 | |||
508 | /* Set GPIO 2 low to turn on LED D3 */ | ||
509 | tps65010_set_gpio_out_value(GPIO2, HIGH); | ||
510 | |||
511 | /* Set GPIO 3 low to take ethernet out of reset */ | ||
512 | tps65010_set_gpio_out_value(GPIO3, LOW); | ||
513 | |||
514 | /* gpio4 for VDD_DSP */ | ||
515 | /* FIXME send power to DSP iff it's configured */ | ||
516 | |||
517 | /* Enable LOW_PWR */ | ||
518 | tps65010_set_low_pwr(ON); | ||
519 | |||
520 | /* Switch VLDO2 to 3.0V for AIC23 */ | ||
521 | tps65010_config_vregs1(TPS_LDO2_ENABLE | TPS_VLDO2_3_0V | ||
522 | | TPS_LDO1_ENABLE); | ||
523 | |||
524 | return 0; | ||
525 | } | ||
526 | fs_initcall(osk_tps_init); | ||
527 | #endif | ||
528 | |||
529 | MACHINE_START(OMAP_OSK, "TI-OSK") | 561 | MACHINE_START(OMAP_OSK, "TI-OSK") |
530 | /* Maintainer: Dirk Behme <dirk.behme@de.bosch.com> */ | 562 | /* Maintainer: Dirk Behme <dirk.behme@de.bosch.com> */ |
531 | .phys_io = 0xfff00000, | 563 | .phys_io = 0xfff00000, |