diff options
Diffstat (limited to 'arch/arm/mach-omap2')
| -rw-r--r-- | arch/arm/mach-omap2/Kconfig | 6 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/Makefile | 1 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-3430sdp.c | 20 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-4430sdp.c | 30 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-am3517crane.c | 59 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-apollon.c | 342 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-cm-t35.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-cm-t3517.c | 27 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-devkit8000.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-igep0020.c | 18 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3beagle.c | 41 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3evm.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-overo.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-rx51-peripherals.c | 20 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-zoom-peripherals.c | 39 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/gpmc.c | 3 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/twl-common.c | 17 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/twl-common.h | 3 | 
18 files changed, 234 insertions, 400 deletions
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 41b581fd021..d4e4f9590a9 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -165,12 +165,6 @@ config MACH_OMAP_H4  	select OMAP_DEBUG_DEVICES  	select OMAP_PACKAGE_ZAF -config MACH_OMAP_APOLLON -	bool "OMAP 2420 Apollon board" -	depends on SOC_OMAP2420 -	default y -	select OMAP_PACKAGE_ZAC -  config MACH_OMAP_2430SDP  	bool "OMAP 2430 SDP board"  	depends on SOC_OMAP2430 diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile index 947cafe65ae..0c66759a117 100644 --- a/arch/arm/mach-omap2/Makefile +++ b/arch/arm/mach-omap2/Makefile @@ -220,7 +220,6 @@ endif  obj-$(CONFIG_MACH_OMAP_GENERIC)		+= board-generic.o  obj-$(CONFIG_MACH_OMAP_H4)		+= board-h4.o  obj-$(CONFIG_MACH_OMAP_2430SDP)		+= board-2430sdp.o -obj-$(CONFIG_MACH_OMAP_APOLLON)		+= board-apollon.o  obj-$(CONFIG_MACH_OMAP3_BEAGLE)		+= board-omap3beagle.o  obj-$(CONFIG_MACH_DEVKIT8000)     	+= board-devkit8000.o  obj-$(CONFIG_MACH_OMAP_LDP)		+= board-ldp.o diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index bb73afc9ac1..e7ef3111a0f 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c @@ -25,6 +25,7 @@  #include <linux/gpio.h>  #include <linux/mmc/host.h>  #include <linux/platform_data/spi-omap2-mcspi.h> +#include <linux/platform_data/omap-twl4030.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> @@ -209,6 +210,19 @@ static struct omap2_hsmmc_info mmc[] = {  	{}	/* Terminator */  }; +static struct omap_tw4030_pdata omap_twl4030_audio_data = { +	.voice_connected = true, +	.custom_routing	= true, + +	.has_hs		= OMAP_TWL4030_LEFT | OMAP_TWL4030_RIGHT, +	.has_hf		= OMAP_TWL4030_LEFT | OMAP_TWL4030_RIGHT, + +	.has_mainmic	= true, +	.has_submic	= true, +	.has_hsmic	= true, +	.has_linein	= OMAP_TWL4030_LEFT | OMAP_TWL4030_RIGHT, +}; +  static int sdp3430_twl_gpio_setup(struct device *dev,  		unsigned gpio, unsigned ngpio)  { @@ -225,6 +239,9 @@ static int sdp3430_twl_gpio_setup(struct device *dev,  	/* gpio + 15 is "sub_lcd_nRST" (output) */  	gpio_request_one(gpio + 15, GPIOF_OUT_INIT_LOW, "sub_lcd_nRST"); +	omap_twl4030_audio_data.jack_detect = gpio + 2; +	omap_twl4030_audio_init("SDP3430", &omap_twl4030_audio_data); +  	return 0;  } @@ -382,6 +399,9 @@ static int __init omap3430_i2c_init(void)  	sdp3430_twldata.vpll2->constraints.apply_uV = true;  	sdp3430_twldata.vpll2->constraints.name = "VDVI"; +	sdp3430_twldata.audio->codec->hs_extmute = 1; +	sdp3430_twldata.audio->codec->hs_extmute_gpio = -EINVAL; +  	omap3_pmic_init("twl4030", &sdp3430_twldata);  	/* i2c2 on camera connector (for sensor control) and optional isp1301 */ diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index 1cc6696594f..918b73bd021 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c @@ -24,8 +24,10 @@  #include <linux/gpio_keys.h>  #include <linux/regulator/machine.h>  #include <linux/regulator/fixed.h> +#include <linux/pwm.h>  #include <linux/leds.h>  #include <linux/leds_pwm.h> +#include <linux/pwm_backlight.h>  #include <linux/platform_data/omap4-keypad.h>  #include <linux/usb/musb.h> @@ -256,10 +258,20 @@ static struct gpio_led_platform_data sdp4430_led_data = {  	.num_leds	= ARRAY_SIZE(sdp4430_gpio_leds),  }; +static struct pwm_lookup sdp4430_pwm_lookup[] = { +	PWM_LOOKUP("twl-pwm", 0, "leds_pwm", "omap4::keypad"), +	PWM_LOOKUP("twl-pwm", 1, "pwm-backlight", NULL), +	PWM_LOOKUP("twl-pwmled", 0, "leds_pwm", "omap4:green:chrg"), +}; +  static struct led_pwm sdp4430_pwm_leds[] = {  	{ +		.name		= "omap4::keypad", +		.max_brightness	= 127, +		.pwm_period_ns	= 7812500, +	}, +	{  		.name		= "omap4:green:chrg", -		.pwm_id		= 1,  		.max_brightness	= 255,  		.pwm_period_ns	= 7812500,  	}, @@ -278,6 +290,20 @@ static struct platform_device sdp4430_leds_pwm = {  	},  }; +static struct platform_pwm_backlight_data sdp4430_backlight_data = { +	.max_brightness = 127, +	.dft_brightness = 127, +	.pwm_period_ns = 7812500, +}; + +static struct platform_device sdp4430_backlight_pwm = { +	.name   = "pwm-backlight", +	.id     = -1, +	.dev    = { +		.platform_data = &sdp4430_backlight_data, +	}, +}; +  static int omap_prox_activate(struct device *dev)  {  	gpio_set_value(OMAP4_SFH7741_ENABLE_GPIO , 1); @@ -412,6 +438,7 @@ static struct platform_device *sdp4430_devices[] __initdata = {  	&sdp4430_gpio_keys_device,  	&sdp4430_leds_gpio,  	&sdp4430_leds_pwm, +	&sdp4430_backlight_pwm,  	&sdp4430_vbat,  	&sdp4430_dmic_codec,  	&sdp4430_abe_audio, @@ -707,6 +734,7 @@ static void __init omap_4430sdp_init(void)  				ARRAY_SIZE(sdp4430_spi_board_info));  	} +	pwm_add_table(sdp4430_pwm_lookup, ARRAY_SIZE(sdp4430_pwm_lookup));  	status = omap4_keyboard_init(&sdp4430_keypad_data, &keypad_data);  	if (status)  		pr_err("Keypad initialization failed: %d\n", status); diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c index 51b96a1206d..82805de8005 100644 --- a/arch/arm/mach-omap2/board-am3517crane.c +++ b/arch/arm/mach-omap2/board-am3517crane.c @@ -20,12 +20,18 @@  #include <linux/kernel.h>  #include <linux/init.h>  #include <linux/gpio.h> +#include <linux/mfd/tps65910.h> +#include <linux/mtd/mtd.h> +#include <linux/mtd/nand.h> +#include <linux/mtd/partitions.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h>  #include <asm/mach/map.h>  #include "common.h" +#include "common-board-devices.h" +#include "board-flash.h"  #include "am35xx-emac.h"  #include "mux.h" @@ -36,6 +42,7 @@  #ifdef CONFIG_OMAP_MUX  static struct omap_board_mux board_mux[] __initdata = { +	OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLUP),  	{ .reg_offset = OMAP_MUX_TERMINATOR },  };  #endif @@ -51,6 +58,54 @@ static struct usbhs_omap_board_data usbhs_bdata __initdata = {  	.reset_gpio_port[2]  = -EINVAL  }; +static struct mtd_partition crane_nand_partitions[] = { +	{ +		.name		= "X-Loader", +		.offset		= 0, +		.size		= 4 * NAND_BLOCK_SIZE, +		.mask_flags	= MTD_WRITEABLE, +	}, +	{ +		.name		= "U-Boot", +		.offset		= MTDPART_OFS_APPEND, +		.size		= 14 * NAND_BLOCK_SIZE, +		.mask_flags	= MTD_WRITEABLE, +	}, +	{ +		.name		= "U-Boot Env", +		.offset		= MTDPART_OFS_APPEND, +		.size		= 2 * NAND_BLOCK_SIZE, +	}, +	{ +		.name		= "Kernel", +		.offset		= MTDPART_OFS_APPEND, +		.size		= 40 * NAND_BLOCK_SIZE, +	}, +	{ +		.name		= "File System", +		.offset		= MTDPART_OFS_APPEND, +		.size		= MTDPART_SIZ_FULL, +	}, +}; + +static struct tps65910_board tps65910_pdata = { +	.irq = 7 + OMAP_INTC_START, +	.en_ck32k_xtal = true, +}; + +static struct i2c_board_info __initdata tps65910_board_info[] = { +	{ +		I2C_BOARD_INFO("tps65910", 0x2d), +		.platform_data = &tps65910_pdata, +	}, +}; + +static void __init am3517_crane_i2c_init(void) +{ +	omap_register_i2c_bus(1, 2600, tps65910_board_info, +			ARRAY_SIZE(tps65910_board_info)); +} +  static void __init am3517_crane_init(void)  {  	int ret; @@ -58,6 +113,10 @@ static void __init am3517_crane_init(void)  	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);  	omap_serial_init();  	omap_sdrc_init(NULL, NULL); +	board_nand_init(crane_nand_partitions, +			ARRAY_SIZE(crane_nand_partitions), 0, +			NAND_BUSWIDTH_16, NULL); +	am3517_crane_i2c_init();  	/* Configure GPIO for EHCI port */  	if (omap_mux_init_gpio(GPIO_USB_NRESET, OMAP_PIN_OUTPUT)) { diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c deleted file mode 100644 index 5d0a61f5416..00000000000 --- a/arch/arm/mach-omap2/board-apollon.c +++ /dev/null @@ -1,342 +0,0 @@ -/* - * linux/arch/arm/mach-omap2/board-apollon.c - * - * Copyright (C) 2005,2006 Samsung Electronics - * Author: Kyungmin Park <kyungmin.park@samsung.com> - * - * Modified from mach-omap/omap2/board-h4.c - * - * Code for apollon OMAP2 board. Should work on many OMAP2 systems where - * the bootloader passes the board-specific data to the kernel. - * Do not put any board specific code to this file; create a new machine - * type if you need custom low-level initializations. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include <linux/kernel.h> -#include <linux/init.h> -#include <linux/platform_device.h> -#include <linux/mtd/mtd.h> -#include <linux/mtd/partitions.h> -#include <linux/mtd/onenand.h> -#include <linux/delay.h> -#include <linux/leds.h> -#include <linux/err.h> -#include <linux/clk.h> -#include <linux/smc91x.h> -#include <linux/gpio.h> -#include <linux/platform_data/leds-omap.h> - -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <asm/mach/flash.h> - -#include "common.h" -#include "gpmc.h" - -#include <video/omapdss.h> -#include <video/omap-panel-generic-dpi.h> - -#include "mux.h" -#include "control.h" - -/* LED & Switch macros */ -#define LED0_GPIO13		13 -#define LED1_GPIO14		14 -#define LED2_GPIO15		15 -#define SW_ENTER_GPIO16		16 -#define SW_UP_GPIO17		17 -#define SW_DOWN_GPIO58		58 - -#define APOLLON_FLASH_CS	0 -#define APOLLON_ETH_CS		1 -#define APOLLON_ETHR_GPIO_IRQ	74 - -static struct mtd_partition apollon_partitions[] = { -	{ -		.name		= "X-Loader + U-Boot", -		.offset		= 0, -		.size		= SZ_128K, -		.mask_flags	= MTD_WRITEABLE, -	}, -	{ -		.name		= "params", -		.offset		= MTDPART_OFS_APPEND, -		.size		= SZ_128K, -	}, -	{ -		.name		= "kernel", -		.offset		= MTDPART_OFS_APPEND, -		.size		= SZ_2M, -	}, -	{ -		.name		= "rootfs", -		.offset		= MTDPART_OFS_APPEND, -		.size		= SZ_16M, -	}, -	{ -		.name		= "filesystem00", -		.offset		= MTDPART_OFS_APPEND, -		.size		= SZ_32M, -	}, -	{ -		.name		= "filesystem01", -		.offset		= MTDPART_OFS_APPEND, -		.size		= MTDPART_SIZ_FULL, -	}, -}; - -static struct onenand_platform_data apollon_flash_data = { -	.parts		= apollon_partitions, -	.nr_parts	= ARRAY_SIZE(apollon_partitions), -}; - -static struct resource apollon_flash_resource[] = { -	[0] = { -		.flags		= IORESOURCE_MEM, -	}, -}; - -static struct platform_device apollon_onenand_device = { -	.name		= "onenand-flash", -	.id		= -1, -	.dev		= { -		.platform_data	= &apollon_flash_data, -	}, -	.num_resources	= ARRAY_SIZE(apollon_flash_resource), -	.resource	= apollon_flash_resource, -}; - -static void __init apollon_flash_init(void) -{ -	unsigned long base; - -	if (gpmc_cs_request(APOLLON_FLASH_CS, SZ_128K, &base) < 0) { -		printk(KERN_ERR "Cannot request OneNAND GPMC CS\n"); -		return; -	} -	apollon_flash_resource[0].start = base; -	apollon_flash_resource[0].end   = base + SZ_128K - 1; -} - -static struct smc91x_platdata appolon_smc91x_info = { -	.flags	= SMC91X_USE_16BIT | SMC91X_NOWAIT, -	.leda	= RPC_LED_100_10, -	.ledb	= RPC_LED_TX_RX, -}; - -static struct resource apollon_smc91x_resources[] = { -	[0] = { -		.flags  = IORESOURCE_MEM, -	}, -	[1] = { -		.flags	= IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, -	}, -}; - -static struct platform_device apollon_smc91x_device = { -	.name		= "smc91x", -	.id		= -1, -	.dev	= { -		.platform_data	= &appolon_smc91x_info, -	}, -	.num_resources	= ARRAY_SIZE(apollon_smc91x_resources), -	.resource	= apollon_smc91x_resources, -}; - -static struct omap_led_config apollon_led_config[] = { -	{ -		.cdev	= { -			.name	= "apollon:led0", -		}, -		.gpio	= LED0_GPIO13, -	}, -	{ -		.cdev	= { -			.name	= "apollon:led1", -		}, -		.gpio	= LED1_GPIO14, -	}, -	{ -		.cdev	= { -			.name	= "apollon:led2", -		}, -		.gpio	= LED2_GPIO15, -	}, -}; - -static struct omap_led_platform_data apollon_led_data = { -	.nr_leds	= ARRAY_SIZE(apollon_led_config), -	.leds		= apollon_led_config, -}; - -static struct platform_device apollon_led_device = { -	.name		= "omap-led", -	.id		= -1, -	.dev		= { -		.platform_data	= &apollon_led_data, -	}, -}; - -static struct platform_device *apollon_devices[] __initdata = { -	&apollon_onenand_device, -	&apollon_smc91x_device, -	&apollon_led_device, -}; - -static inline void __init apollon_init_smc91x(void) -{ -	unsigned long base; - -	unsigned int rate; -	struct clk *gpmc_fck; -	int eth_cs; -	int err; - -	gpmc_fck = clk_get(NULL, "gpmc_fck");	/* Always on ENABLE_ON_INIT */ -	if (IS_ERR(gpmc_fck)) { -		WARN_ON(1); -		return; -	} - -	clk_prepare_enable(gpmc_fck); -	rate = clk_get_rate(gpmc_fck); - -	eth_cs = APOLLON_ETH_CS; - -	/* Make sure CS1 timings are correct */ -	gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG1, 0x00011200); - -	if (rate >= 160000000) { -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG2, 0x001f1f01); -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG3, 0x00080803); -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG4, 0x1c0b1c0a); -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG5, 0x041f1F1F); -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG6, 0x000004C4); -	} else if (rate >= 130000000) { -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG2, 0x001f1f00); -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG3, 0x00080802); -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG4, 0x1C091C09); -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG5, 0x041f1F1F); -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG6, 0x000004C4); -	} else {/* rate = 100000000 */ -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG2, 0x001f1f00); -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG3, 0x00080802); -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG4, 0x1C091C09); -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG5, 0x031A1F1F); -		gpmc_cs_write_reg(eth_cs, GPMC_CS_CONFIG6, 0x000003C2); -	} - -	if (gpmc_cs_request(APOLLON_ETH_CS, SZ_16M, &base) < 0) { -		printk(KERN_ERR "Failed to request GPMC CS for smc91x\n"); -		goto out; -	} -	apollon_smc91x_resources[0].start = base + 0x300; -	apollon_smc91x_resources[0].end   = base + 0x30f; -	udelay(100); - -	omap_mux_init_gpio(APOLLON_ETHR_GPIO_IRQ, 0); -	err = gpio_request_one(APOLLON_ETHR_GPIO_IRQ, GPIOF_IN, "SMC91x irq"); -	if (err) { -		printk(KERN_ERR "Failed to request GPIO%d for smc91x IRQ\n", -			APOLLON_ETHR_GPIO_IRQ); -		gpmc_cs_free(APOLLON_ETH_CS); -	} -out: -	clk_disable_unprepare(gpmc_fck); -	clk_put(gpmc_fck); -} - -static struct panel_generic_dpi_data apollon_panel_data = { -	.name			= "apollon", -}; - -static struct omap_dss_device apollon_lcd_device = { -	.name			= "lcd", -	.driver_name		= "generic_dpi_panel", -	.type			= OMAP_DISPLAY_TYPE_DPI, -	.phy.dpi.data_lines	= 18, -	.data			= &apollon_panel_data, -}; - -static struct omap_dss_device *apollon_dss_devices[] = { -	&apollon_lcd_device, -}; - -static struct omap_dss_board_info apollon_dss_data = { -	.num_devices	= ARRAY_SIZE(apollon_dss_devices), -	.devices	= apollon_dss_devices, -	.default_device	= &apollon_lcd_device, -}; - -static struct gpio apollon_gpio_leds[] __initdata = { -	{ LED0_GPIO13, GPIOF_OUT_INIT_LOW, "LED0" }, /* LED0 - AA10 */ -	{ LED1_GPIO14, GPIOF_OUT_INIT_LOW, "LED1" }, /* LED1 - AA6  */ -	{ LED2_GPIO15, GPIOF_OUT_INIT_LOW, "LED2" }, /* LED2 - AA4  */ -}; - -static void __init apollon_led_init(void) -{ -	omap_mux_init_signal("vlynq_clk.gpio_13", 0); -	omap_mux_init_signal("vlynq_rx1.gpio_14", 0); -	omap_mux_init_signal("vlynq_rx0.gpio_15", 0); - -	gpio_request_array(apollon_gpio_leds, ARRAY_SIZE(apollon_gpio_leds)); -} - -#ifdef CONFIG_OMAP_MUX -static struct omap_board_mux board_mux[] __initdata = { -	{ .reg_offset = OMAP_MUX_TERMINATOR }, -}; -#endif - -static void __init omap_apollon_init(void) -{ -	u32 v; - -	omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAC); - -	apollon_init_smc91x(); -	apollon_led_init(); -	apollon_flash_init(); - -	/* REVISIT: where's the correct place */ -	omap_mux_init_signal("sys_nirq", OMAP_PULL_ENA | OMAP_PULL_UP); - -	/* LCD PWR_EN */ -	omap_mux_init_signal("mcbsp2_dr.gpio_11", OMAP_PULL_ENA | OMAP_PULL_UP); - -	/* Use Internal loop-back in MMC/SDIO Module Input Clock selection */ -	v = omap_ctrl_readl(OMAP2_CONTROL_DEVCONF0); -	v |= (1 << 24); -	omap_ctrl_writel(v, OMAP2_CONTROL_DEVCONF0); - -	/* - 	 * Make sure the serial ports are muxed on at this point. -	 * You have to mux them off in device drivers later on -	 * if not needed. -	 */ -	apollon_smc91x_resources[1].start = gpio_to_irq(APOLLON_ETHR_GPIO_IRQ); -	apollon_smc91x_resources[1].end = gpio_to_irq(APOLLON_ETHR_GPIO_IRQ); -	platform_add_devices(apollon_devices, ARRAY_SIZE(apollon_devices)); -	omap_serial_init(); -	omap_sdrc_init(NULL, NULL); -	omap_display_init(&apollon_dss_data); -} - -MACHINE_START(OMAP_APOLLON, "OMAP24xx Apollon") -	/* Maintainer: Kyungmin Park <kyungmin.park@samsung.com> */ -	.atag_offset	= 0x100, -	.reserve	= omap_reserve, -	.map_io		= omap242x_map_io, -	.init_early	= omap2420_init_early, -	.init_irq	= omap2_init_irq, -	.handle_irq	= omap2_intc_handle_irq, -	.init_machine	= omap_apollon_init, -	.init_late	= omap2420_init_late, -	.timer		= &omap2_timer, -	.restart	= omap2xxx_restart, -MACHINE_END diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index b3102c2f4a3..eec635e15ed 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c @@ -722,7 +722,7 @@ static void __init cm_t3x_common_init(void)  	cm_t35_init_ethernet();  	cm_t35_init_led();  	cm_t35_init_display(); -	omap_twl4030_audio_init("cm-t3x"); +	omap_twl4030_audio_init("cm-t3x", NULL);  	usb_musb_init(NULL);  	cm_t35_init_usbh(); diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c index ebbc2adb499..792d6841790 100644 --- a/arch/arm/mach-omap2/board-cm-t3517.c +++ b/arch/arm/mach-omap2/board-cm-t3517.c @@ -32,6 +32,7 @@  #include <linux/mtd/mtd.h>  #include <linux/mtd/nand.h>  #include <linux/mtd/partitions.h> +#include <linux/mmc/host.h>  #include <linux/can/platform/ti_hecc.h>  #include <asm/mach-types.h> @@ -46,6 +47,7 @@  #include "mux.h"  #include "control.h" +#include "hsmmc.h"  #include "common-board-devices.h"  #include "am35xx-emac.h"  #include "gpmc-nand.h" @@ -121,6 +123,26 @@ static void cm_t3517_init_hecc(void)  static inline void cm_t3517_init_hecc(void) {}  #endif +#if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE) +static struct omap2_hsmmc_info cm_t3517_mmc[] = { +	{ +		.mmc		= 1, +		.caps		= MMC_CAP_4_BIT_DATA, +		.gpio_cd	= 144, +		.gpio_wp	= 59, +	}, +	{ +		.mmc		= 2, +		.caps		= MMC_CAP_4_BIT_DATA, +		.gpio_cd	= -EINVAL, +		.gpio_wp	= -EINVAL, +	}, +	{}	/* Terminator */ +}; +#else +#define cm_t3517_mmc NULL +#endif +  #if defined(CONFIG_RTC_DRV_V3020) || defined(CONFIG_RTC_DRV_V3020_MODULE)  #define RTC_IO_GPIO		(153)  #define RTC_WR_GPIO		(154) @@ -271,6 +293,10 @@ static struct omap_board_mux board_mux[] __initdata = {  	/* CM-T3517 USB HUB nRESET */  	OMAP3_MUX(MCBSP4_CLKX, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), +	/* CD - GPIO144 and WP - GPIO59 for MMC1 - SB-T35 */ +	OMAP3_MUX(UART2_CTS, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP), +	OMAP3_MUX(GPMC_CLK, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP), +  	{ .reg_offset = OMAP_MUX_TERMINATOR },  };  #endif @@ -286,6 +312,7 @@ static void __init cm_t3517_init(void)  	cm_t3517_init_usbh();  	cm_t3517_init_hecc();  	am35xx_emac_init(AM35XX_DEFAULT_MDIO_FREQUENCY, 1); +	omap_hsmmc_init(cm_t3517_mmc);  }  MACHINE_START(CM_T3517, "Compulab CM-T3517") diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index 12865af25d3..f0aa64b1e97 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c @@ -627,7 +627,7 @@ static void __init devkit8000_init(void)  	board_nand_init(devkit8000_nand_partitions,  			ARRAY_SIZE(devkit8000_nand_partitions), NAND_CS,  			NAND_BUSWIDTH_16, NULL); -	omap_twl4030_audio_init("omap3beagle"); +	omap_twl4030_audio_init("omap3beagle", NULL);  	/* Ensure SDRC pins are mux'd for self-refresh */  	omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c index 0f24cb84ba5..2939c3d6549 100644 --- a/arch/arm/mach-omap2/board-igep0020.c +++ b/arch/arm/mach-omap2/board-igep0020.c @@ -300,20 +300,20 @@ static struct omap2_hsmmc_info mmc[] = {  static struct gpio_led igep_gpio_leds[] = {  	[0] = { -		.name			= "gpio-led:red:d0", -		.default_trigger	= "default-off" +		.name			= "omap3:red:user0", +		.default_state		= 0,  	},  	[1] = { -		.name			= "gpio-led:green:d0", -		.default_trigger	= "default-off", +		.name			= "omap3:green:boot", +		.default_state		= 1,  	},  	[2] = { -		.name			= "gpio-led:red:d1", -		.default_trigger	= "default-off", +		.name			= "omap3:red:user1", +		.default_state		= 0,  	},  	[3] = { -		.name			= "gpio-led:green:d1", -		.default_trigger	= "heartbeat", +		.name			= "omap3:green:user1", +		.default_state		= 0,  		.gpio			= -EINVAL, /* gets replaced */  		.active_low		= 1,  	}, @@ -629,7 +629,7 @@ static void __init igep_init(void)  	igep_flash_init();  	igep_leds_init(); -	omap_twl4030_audio_init("igep2"); +	omap_twl4030_audio_init("igep2", NULL);  	/*  	 * WLAN-BT combo module from MuRata which has a Marvell WLAN diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c index 22c483d5dfa..2a6e8ad1d68 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> @@ -55,6 +57,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 +320,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 +401,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,6 +448,7 @@ 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 = { @@ -524,7 +545,7 @@ static void __init omap3_beagle_init(void)  	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 +553,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") diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index 3985f35aee0..8803b5cff09 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c @@ -744,7 +744,7 @@ static void __init omap3_evm_init(void)  	omap3evm_init_smsc911x();  	omap3_evm_display_init();  	omap3_evm_wl12xx_init(); -	omap_twl4030_audio_init("omap3evm"); +	omap_twl4030_audio_init("omap3evm", NULL);  }  MACHINE_START(OMAP3EVM, "OMAP3 EVM") diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index c8fde3e5644..fe644ebe765 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c @@ -506,7 +506,7 @@ static void __init overo_init(void)  	overo_display_init();  	overo_init_led();  	overo_init_keys(); -	omap_twl4030_audio_init("overo"); +	omap_twl4030_audio_init("overo", NULL);  	/* Ensure SDRC pins are mux'd for self-refresh */  	omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c index cf07e289b4e..07a9ca8eda9 100644 --- a/arch/arm/mach-omap2/board-rx51-peripherals.c +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c @@ -162,30 +162,39 @@ static struct tsl2563_platform_data rx51_tsl2563_platform_data = {  #if defined(CONFIG_LEDS_LP5523) || defined(CONFIG_LEDS_LP5523_MODULE)  static struct lp5523_led_config rx51_lp5523_led_config[] = {  	{ +		.name		= "lp5523:kb1",  		.chan_nr	= 0,  		.led_current	= 50,  	}, { +		.name		= "lp5523:kb2",  		.chan_nr	= 1,  		.led_current	= 50,  	}, { +		.name		= "lp5523:kb3",  		.chan_nr	= 2,  		.led_current	= 50,  	}, { +		.name		= "lp5523:kb4",  		.chan_nr	= 3,  		.led_current	= 50,  	}, { +		.name		= "lp5523:b",  		.chan_nr	= 4,  		.led_current	= 50,  	}, { +		.name		= "lp5523:g",  		.chan_nr	= 5,  		.led_current	= 50,  	}, { +		.name		= "lp5523:r",  		.chan_nr	= 6,  		.led_current	= 50,  	}, { +		.name		= "lp5523:kb5",  		.chan_nr	= 7,  		.led_current	= 50,  	}, { +		.name		= "lp5523:kb6",  		.chan_nr	= 8,  		.led_current	= 50,  	} @@ -1253,6 +1262,16 @@ static void __init rx51_init_lirc(void)  }  #endif +static struct platform_device madc_hwmon = { +	.name	= "twl4030_madc_hwmon", +	.id	= -1, +}; + +static void __init rx51_init_twl4030_hwmon(void) +{ +	platform_device_register(&madc_hwmon); +} +  void __init rx51_peripherals_init(void)  {  	rx51_i2c_init(); @@ -1272,5 +1291,6 @@ void __init rx51_peripherals_init(void)  		omap_hsmmc_init(mmc);  	rx51_charger_init(); +	rx51_init_twl4030_hwmon();  } diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c index 26e07addc9d..0745bd93f39 100644 --- a/arch/arm/mach-omap2/board-zoom-peripherals.c +++ b/arch/arm/mach-omap2/board-zoom-peripherals.c @@ -20,6 +20,7 @@  #include <linux/wl12xx.h>  #include <linux/mmc/host.h>  #include <linux/platform_data/gpio-omap.h> +#include <linux/platform_data/omap-twl4030.h>  #include <asm/mach-types.h>  #include <asm/mach/arch.h> @@ -34,11 +35,9 @@  #include "common-board-devices.h"  #define OMAP_ZOOM_WLAN_PMENA_GPIO	(101) -#define ZOOM2_HEADSET_EXTMUTE_GPIO	(153) +#define OMAP_ZOOM_TSC2004_IRQ_GPIO	(153)  #define OMAP_ZOOM_WLAN_IRQ_GPIO		(162) -#define LCD_PANEL_ENABLE_GPIO		(7 + OMAP_MAX_GPIO_LINES) -  /* Zoom2 has Qwerty keyboard*/  static uint32_t board_keymap[] = {  	KEY(0, 0, KEY_E), @@ -226,22 +225,31 @@ static struct omap2_hsmmc_info mmc[] = {  	{}      /* Terminator */  }; +static struct omap_tw4030_pdata omap_twl4030_audio_data = { +	.voice_connected = true, +	.custom_routing	= true, + +	.has_hs		= OMAP_TWL4030_LEFT | OMAP_TWL4030_RIGHT, +	.has_hf		= OMAP_TWL4030_LEFT | OMAP_TWL4030_RIGHT, + +	.has_mainmic	= true, +	.has_submic	= true, +	.has_hsmic	= true, +	.has_linein	= OMAP_TWL4030_LEFT | OMAP_TWL4030_RIGHT, +}; +  static int zoom_twl_gpio_setup(struct device *dev,  		unsigned gpio, unsigned ngpio)  { -	int ret; -  	/* gpio + 0 is "mmc0_cd" (input/IRQ) */  	mmc[0].gpio_cd = gpio + 0;  	omap_hsmmc_late_init(mmc); -	ret = gpio_request_one(LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW, -			       "lcd enable"); -	if (ret) -		pr_err("Failed to get LCD_PANEL_ENABLE_GPIO (gpio%d).\n", -				LCD_PANEL_ENABLE_GPIO); +	/* Audio setup */ +	omap_twl4030_audio_data.jack_detect = gpio + 2; +	omap_twl4030_audio_init("Zoom2", &omap_twl4030_audio_data); -	return ret; +	return 0;  }  static struct twl4030_gpio_platform_data zoom_gpio_data = { @@ -264,14 +272,9 @@ static int __init omap_i2c_init(void)  			TWL_COMMON_PDATA_MADC | TWL_COMMON_PDATA_AUDIO,  			TWL_COMMON_REGULATOR_VDAC | TWL_COMMON_REGULATOR_VPLL2); -	if (machine_is_omap_zoom2()) { -		struct twl4030_codec_data *codec_data; -		codec_data = zoom_twldata.audio->codec; +	if (machine_is_omap_zoom2()) +		zoom_twldata.audio->codec->ramp_delay_value = 3; /* 161 ms */ -		codec_data->ramp_delay_value = 3;	/* 161 ms */ -		codec_data->hs_extmute = 1; -		codec_data->hs_extmute_gpio = ZOOM2_HEADSET_EXTMUTE_GPIO; -	}  	omap_pmic_init(1, 2400, "twl5030", 7 + OMAP_INTC_START, &zoom_twldata);  	omap_register_i2c_bus(2, 400, NULL, 0);  	omap_register_i2c_bus(3, 400, NULL, 0); diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index 8033cb747c8..609c0913b0f 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -783,9 +783,6 @@ static int gpmc_mem_init(void)  	 * even if we didn't boot from ROM.  	 */  	boot_rom_space = BOOT_ROM_SPACE; -	/* In apollon the CS0 is mapped as 0x0000 0000 */ -	if (machine_is_omap_apollon()) -		boot_rom_space = 0;  	gpmc_mem_root.start = GPMC_MEM_START + boot_rom_space;  	gpmc_mem_root.end = GPMC_MEM_END; diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c index e49b40b4c90..62cf40b86e4 100644 --- a/arch/arm/mach-omap2/twl-common.c +++ b/arch/arm/mach-omap2/twl-common.c @@ -528,24 +528,29 @@ void __init omap4_pmic_get_config(struct twl4030_platform_data *pmic_data,  	defined(CONFIG_SND_OMAP_SOC_OMAP_TWL4030_MODULE)  #include <linux/platform_data/omap-twl4030.h> +/* Commonly used configuration */  static struct omap_tw4030_pdata omap_twl4030_audio_data;  static struct platform_device audio_device = {  	.name		= "omap-twl4030",  	.id		= -1, -	.dev = { -		.platform_data = &omap_twl4030_audio_data, -	},  }; -void __init omap_twl4030_audio_init(char *card_name) +void omap_twl4030_audio_init(char *card_name, +				    struct omap_tw4030_pdata *pdata)  { -	omap_twl4030_audio_data.card_name = card_name; +	if (!pdata) +		pdata = &omap_twl4030_audio_data; + +	pdata->card_name = card_name; + +	audio_device.dev.platform_data = pdata;  	platform_device_register(&audio_device);  }  #else /* SOC_OMAP_TWL4030 */ -void __init omap_twl4030_audio_init(char *card_name) +void omap_twl4030_audio_init(char *card_name, +				    struct omap_tw4030_pdata *pdata)  {  	return;  } diff --git a/arch/arm/mach-omap2/twl-common.h b/arch/arm/mach-omap2/twl-common.h index dcfbad5ac47..24b65d081b6 100644 --- a/arch/arm/mach-omap2/twl-common.h +++ b/arch/arm/mach-omap2/twl-common.h @@ -32,6 +32,7 @@  struct twl4030_platform_data;  struct twl6040_platform_data; +struct omap_tw4030_pdata;  struct i2c_board_info;  void omap_pmic_init(int bus, u32 clkrate, const char *pmic_type, int pmic_irq, @@ -60,6 +61,6 @@ void omap3_pmic_get_config(struct twl4030_platform_data *pmic_data,  void omap4_pmic_get_config(struct twl4030_platform_data *pmic_data,  			   u32 pdata_flags, u32 regulators_flags); -void omap_twl4030_audio_init(char *card_name); +void omap_twl4030_audio_init(char *card_name, struct omap_tw4030_pdata *pdata);  #endif /* __OMAP_PMIC_COMMON__ */  |