diff options
Diffstat (limited to 'arch/arm/mach-omap2/board-omap3beagle.c')
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3beagle.c | 49 | 
1 files changed, 37 insertions, 12 deletions
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 1957426b96f..6c949bc8625 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -20,6 +20,8 @@  #include <linux/clk.h>  #include <linux/io.h>  #include <linux/leds.h> +#include <linux/pwm.h> +#include <linux/leds_pwm.h>  #include <linux/gpio.h>  #include <linux/input.h>  #include <linux/gpio_keys.h> @@ -30,6 +32,7 @@  #include <linux/mtd/partitions.h>  #include <linux/mtd/nand.h>  #include <linux/mmc/host.h> +#include <linux/usb/phy.h>  #include <linux/regulator/machine.h>  #include <linux/i2c/twl.h> @@ -55,6 +58,32 @@  #define	NAND_CS	0 +static struct pwm_lookup pwm_lookup[] = { +	/* LEDB -> PMU_STAT */ +	PWM_LOOKUP("twl-pwmled", 1, "leds_pwm", "beagleboard::pmu_stat"), +}; + +static struct led_pwm pwm_leds[] = { +	{ +		.name		= "beagleboard::pmu_stat", +		.max_brightness	= 127, +		.pwm_period_ns	= 7812500, +	}, +}; + +static struct led_pwm_platform_data pwm_data = { +	.num_leds	= ARRAY_SIZE(pwm_leds), +	.leds		= pwm_leds, +}; + +static struct platform_device leds_pwm = { +	.name	= "leds_pwm", +	.id	= -1, +	.dev	= { +		.platform_data = &pwm_data, +	}, +}; +  /*   * OMAP3 Beagle revision   * Run time detection of Beagle revision is done by reading GPIO. @@ -292,9 +321,6 @@ static int beagle_twl_gpio_setup(struct device *dev,  	gpio_request_one(gpio + TWL4030_GPIO_MAX, beagle_config.usb_pwr_level,  			"nEN_USB_PWR"); -	/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ -	gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; -  	return 0;  } @@ -376,11 +402,6 @@ static struct gpio_led gpio_leds[] = {  		.default_trigger	= "mmc0",  		.gpio			= 149,  	}, -	{ -		.name			= "beagleboard::pmu_stat", -		.gpio			= -EINVAL,	/* gets replaced */ -		.active_low		= true, -	},  };  static struct gpio_led_platform_data gpio_led_info = { @@ -428,9 +449,10 @@ static struct platform_device *omap3_beagle_devices[] __initdata = {  	&leds_gpio,  	&keys_gpio,  	&madc_hwmon, +	&leds_pwm,  }; -static const struct usbhs_omap_board_data usbhs_bdata __initconst = { +static struct usbhs_omap_platform_data usbhs_bdata __initdata = {  	.port_mode[0] = OMAP_USBHS_PORT_MODE_UNUSED,  	.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY, @@ -494,7 +516,7 @@ static int __init beagle_opp_init(void)  	}  	return 0;  } -device_initcall(beagle_opp_init); +omap_device_initcall(beagle_opp_init);  static void __init omap3_beagle_init(void)  { @@ -519,12 +541,13 @@ static void __init omap3_beagle_init(void)  	omap_sdrc_init(mt46h32m32lf6_sdrc_params,  				  mt46h32m32lf6_sdrc_params); +	usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");  	usb_musb_init(NULL);  	usbhs_init(&usbhs_bdata);  	board_nand_init(omap3beagle_nand_partitions,  			ARRAY_SIZE(omap3beagle_nand_partitions), NAND_CS,  			NAND_BUSWIDTH_16, NULL); -	omap_twl4030_audio_init("omap3beagle"); +	omap_twl4030_audio_init("omap3beagle", NULL);  	/* Ensure msecure is mux'd to be able to set the RTC. */  	omap_mux_init_signal("sys_drm_msecure", OMAP_PIN_OFF_OUTPUT_HIGH); @@ -532,6 +555,8 @@ static void __init omap3_beagle_init(void)  	/* Ensure SDRC pins are mux'd for self-refresh */  	omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);  	omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); + +	pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup));  }  MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") @@ -544,6 +569,6 @@ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")  	.handle_irq	= omap3_intc_handle_irq,  	.init_machine	= omap3_beagle_init,  	.init_late	= omap3_init_late, -	.timer		= &omap3_secure_timer, +	.init_time	= omap3_secure_sync32k_timer_init,  	.restart	= omap3xxx_restart,  MACHINE_END  |