diff options
Diffstat (limited to 'arch/arm/mach-omap2/board-4430sdp.c')
| -rw-r--r-- | arch/arm/mach-omap2/board-4430sdp.c | 87 | 
1 files changed, 68 insertions, 19 deletions
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index 39fba9df17f..37dcb1bc025 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c @@ -25,6 +25,7 @@  #include <linux/regulator/fixed.h>  #include <linux/leds.h>  #include <linux/leds_pwm.h> +#include <linux/platform_data/omap4-keypad.h>  #include <mach/hardware.h>  #include <asm/hardware/gic.h> @@ -41,6 +42,7 @@  #include <video/omap-panel-nokia-dsi.h>  #include <video/omap-panel-picodlp.h>  #include <linux/wl12xx.h> +#include <linux/platform_data/omap-abe-twl6040.h>  #include "mux.h"  #include "hsmmc.h" @@ -52,8 +54,9 @@  #define ETH_KS8851_QUART		138  #define OMAP4_SFH7741_SENSOR_OUTPUT_GPIO	184  #define OMAP4_SFH7741_ENABLE_GPIO		188 -#define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */ +#define HDMI_GPIO_CT_CP_HPD 60 /* HPD mode enable/disable */  #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */ +#define HDMI_GPIO_HPD  63 /* Hotplug detect */  #define DISPLAY_SEL_GPIO	59	/* LCD2/PicoDLP switch */  #define DLP_POWER_ON_GPIO	40 @@ -321,7 +324,10 @@ static struct spi_board_info sdp4430_spi_board_info[] __initdata = {  		.bus_num                = 1,  		.chip_select            = 0,  		.max_speed_hz           = 24000000, -		.irq                    = ETH_KS8851_IRQ, +		/* +		 * .irq is set to gpio_to_irq(ETH_KS8851_IRQ) +		 * in omap_4430sdp_init +		 */  	},  }; @@ -377,12 +383,40 @@ static struct platform_device sdp4430_dmic_codec = {  	.id	= -1,  }; +static struct omap_abe_twl6040_data sdp4430_abe_audio_data = { +	.card_name = "SDP4430", +	.has_hs		= ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT, +	.has_hf		= ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT, +	.has_ep		= 1, +	.has_aux	= ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT, +	.has_vibra	= ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT, + +	.has_dmic	= 1, +	.has_hsmic	= 1, +	.has_mainmic	= 1, +	.has_submic	= 1, +	.has_afm	= ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT, + +	.jack_detection = 1, +	/* MCLK input is 38.4MHz */ +	.mclk_freq	= 38400000, +}; + +static struct platform_device sdp4430_abe_audio = { +	.name		= "omap-abe-twl6040", +	.id		= -1, +	.dev = { +		.platform_data = &sdp4430_abe_audio_data, +	}, +}; +  static struct platform_device *sdp4430_devices[] __initdata = {  	&sdp4430_gpio_keys_device,  	&sdp4430_leds_gpio,  	&sdp4430_leds_pwm,  	&sdp4430_vbat,  	&sdp4430_dmic_codec, +	&sdp4430_abe_audio,  };  static struct omap_musb_board_data musb_board_data = { @@ -456,21 +490,22 @@ static struct platform_device omap_vwlan_device = {  static int omap4_twl6030_hsmmc_late_init(struct device *dev)  { -	int ret = 0; +	int irq = 0;  	struct platform_device *pdev = container_of(dev,  				struct platform_device, dev);  	struct omap_mmc_platform_data *pdata = dev->platform_data;  	/* Setting MMC1 Card detect Irq */  	if (pdev->id == 0) { -		ret = twl6030_mmc_card_detect_config(); -		if (ret) +		irq = twl6030_mmc_card_detect_config(); +		if (irq < 0) {  			pr_err("Failed configuring MMC1 card detect\n"); -		pdata->slots[0].card_detect_irq = TWL6030_IRQ_BASE + -						MMCDETECT_INTR_OFFSET; +			return irq; +		} +		pdata->slots[0].card_detect_irq = irq;  		pdata->slots[0].card_detect = twl6030_mmc_card_detect;  	} -	return ret; +	return 0;  }  static __init void omap4_twl6030_hsmmc_set_late_init(struct device *dev) @@ -490,9 +525,9 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)  {  	struct omap2_hsmmc_info *c; -	omap2_hsmmc_init(controllers); +	omap_hsmmc_init(controllers);  	for (c = controllers; c->mmc; c++) -		omap4_twl6030_hsmmc_set_late_init(c->dev); +		omap4_twl6030_hsmmc_set_late_init(&c->pdev->dev);  	return 0;  } @@ -603,8 +638,9 @@ static void __init omap_sfh7741prox_init(void)  }  static struct gpio sdp4430_hdmi_gpios[] = { -	{ HDMI_GPIO_HPD,	GPIOF_OUT_INIT_HIGH,	"hdmi_gpio_hpd"   }, +	{ HDMI_GPIO_CT_CP_HPD, GPIOF_OUT_INIT_HIGH, "hdmi_gpio_ct_cp_hpd" },  	{ HDMI_GPIO_LS_OE,	GPIOF_OUT_INIT_HIGH,	"hdmi_gpio_ls_oe" }, +	{ HDMI_GPIO_HPD, GPIOF_DIR_IN, "hdmi_gpio_hpd" },  };  static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev) @@ -621,8 +657,7 @@ static int sdp4430_panel_enable_hdmi(struct omap_dss_device *dssdev)  static void sdp4430_panel_disable_hdmi(struct omap_dss_device *dssdev)  { -	gpio_free(HDMI_GPIO_LS_OE); -	gpio_free(HDMI_GPIO_HPD); +	gpio_free_array(sdp4430_hdmi_gpios, ARRAY_SIZE(sdp4430_hdmi_gpios));  }  static struct nokia_dsi_panel_data dsi1_panel = { @@ -738,6 +773,10 @@ static void sdp4430_lcd_init(void)  		pr_err("%s: Could not get lcd2_reset_gpio\n", __func__);  } +static struct omap_dss_hdmi_data sdp4430_hdmi_data = { +	.hpd_gpio = HDMI_GPIO_HPD, +}; +  static struct omap_dss_device sdp4430_hdmi_device = {  	.name = "hdmi",  	.driver_name = "hdmi_panel", @@ -745,6 +784,7 @@ static struct omap_dss_device sdp4430_hdmi_device = {  	.platform_enable = sdp4430_panel_enable_hdmi,  	.platform_disable = sdp4430_panel_disable_hdmi,  	.channel = OMAP_DSS_CHANNEL_DIGIT, +	.data = &sdp4430_hdmi_data,  };  static struct picodlp_panel_data sdp4430_picodlp_pdata = { @@ -808,7 +848,7 @@ static struct omap_dss_board_info sdp4430_dss_data = {  	.default_device	= &sdp4430_lcd_device,  }; -static void omap_4430sdp_display_init(void) +static void __init omap_4430sdp_display_init(void)  {  	int r; @@ -829,6 +869,10 @@ static void omap_4430sdp_display_init(void)  		omap_hdmi_init(OMAP_HDMI_SDA_SCL_EXTERNAL_PULLUP);  	else  		omap_hdmi_init(0); + +	omap_mux_init_gpio(HDMI_GPIO_LS_OE, OMAP_PIN_OUTPUT); +	omap_mux_init_gpio(HDMI_GPIO_CT_CP_HPD, OMAP_PIN_OUTPUT); +	omap_mux_init_gpio(HDMI_GPIO_HPD, OMAP_PIN_INPUT_PULLDOWN);  }  #ifdef CONFIG_OMAP_MUX @@ -841,7 +885,7 @@ static struct omap_board_mux board_mux[] __initdata = {  #define board_mux	NULL   #endif -static void omap4_sdp4430_wifi_mux_init(void) +static void __init omap4_sdp4430_wifi_mux_init(void)  {  	omap_mux_init_gpio(GPIO_WIFI_IRQ, OMAP_PIN_INPUT |  				OMAP_PIN_OFF_WAKEUPENABLE); @@ -868,12 +912,17 @@ static struct wl12xx_platform_data omap4_sdp4430_wlan_data __initdata = {  	.board_tcxo_clock = WL12XX_TCXOCLOCK_26,  }; -static void omap4_sdp4430_wifi_init(void) +static void __init omap4_sdp4430_wifi_init(void)  { +	int ret; +  	omap4_sdp4430_wifi_mux_init(); -	if (wl12xx_set_platform_data(&omap4_sdp4430_wlan_data)) -		pr_err("Error setting wl12xx data\n"); -	platform_device_register(&omap_vwlan_device); +	ret = wl12xx_set_platform_data(&omap4_sdp4430_wlan_data); +	if (ret) +		pr_err("Error setting wl12xx data: %d\n", ret); +	ret = platform_device_register(&omap_vwlan_device); +	if (ret) +		pr_err("Error registering wl12xx device: %d\n", ret);  }  static void __init omap_4430sdp_init(void)  |