diff options
Diffstat (limited to 'arch/arm/mach-omap2')
| -rw-r--r-- | arch/arm/mach-omap2/board-2430sdp.c | 43 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-3430sdp.c | 53 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-4430sdp.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-am3517evm.c | 74 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-cm-t35.c | 60 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-devkit8000.c | 27 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-ldp.c | 59 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3evm.c | 70 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3pandora.c | 7 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap3stalker.c | 11 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-omap4panda.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-overo.c | 58 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-rx51-video.c | 26 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/board-zoom-display.c | 38 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/dss-common.c | 54 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/timer.c | 7 | 
16 files changed, 129 insertions, 462 deletions
diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c index 5b86423c89f..244d8a5aa54 100644 --- a/arch/arm/mach-omap2/board-2430sdp.c +++ b/arch/arm/mach-omap2/board-2430sdp.c @@ -108,24 +108,13 @@ static struct platform_device *sdp2430_devices[] __initdata = {  #define SDP2430_LCD_PANEL_BACKLIGHT_GPIO	91  #define SDP2430_LCD_PANEL_ENABLE_GPIO		154 -static int sdp2430_panel_enable_lcd(struct omap_dss_device *dssdev) -{ -	gpio_direction_output(SDP2430_LCD_PANEL_ENABLE_GPIO, 1); -	gpio_direction_output(SDP2430_LCD_PANEL_BACKLIGHT_GPIO, 1); - -	return 0; -} - -static void sdp2430_panel_disable_lcd(struct omap_dss_device *dssdev) -{ -	gpio_direction_output(SDP2430_LCD_PANEL_ENABLE_GPIO, 0); -	gpio_direction_output(SDP2430_LCD_PANEL_BACKLIGHT_GPIO, 0); -} -  static struct panel_generic_dpi_data sdp2430_panel_data = {  	.name			= "nec_nl2432dr22-11b", -	.platform_enable	= sdp2430_panel_enable_lcd, -	.platform_disable	= sdp2430_panel_disable_lcd, +	.num_gpios		= 2, +	.gpios			= { +		SDP2430_LCD_PANEL_ENABLE_GPIO, +		SDP2430_LCD_PANEL_BACKLIGHT_GPIO, +	},  };  static struct omap_dss_device sdp2430_lcd_device = { @@ -146,26 +135,6 @@ static struct omap_dss_board_info sdp2430_dss_data = {  	.default_device	= &sdp2430_lcd_device,  }; -static void __init sdp2430_display_init(void) -{ -	int r; - -	static struct gpio gpios[] __initdata = { -		{ SDP2430_LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW, -			"LCD reset" }, -		{ SDP2430_LCD_PANEL_BACKLIGHT_GPIO, GPIOF_OUT_INIT_LOW, -			"LCD Backlight" }, -	}; - -	r = gpio_request_array(gpios, ARRAY_SIZE(gpios)); -	if (r) { -		pr_err("Cannot request LCD GPIOs, error %d\n", r); -		return; -	} - -	omap_display_init(&sdp2430_dss_data); -} -  #if IS_ENABLED(CONFIG_SMC91X)  static struct omap_smc91x_platform_data board_smc91x_data = { @@ -273,7 +242,7 @@ static void __init omap_2430sdp_init(void)  	gpio_request_one(SECONDARY_LCD_GPIO, GPIOF_OUT_INIT_LOW,  			 "Secondary LCD backlight"); -	sdp2430_display_init(); +	omap_display_init(&sdp2430_dss_data);  }  MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board") diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c index a4d4664894e..23b004afa3f 100644 --- a/arch/arm/mach-omap2/board-3430sdp.c +++ b/arch/arm/mach-omap2/board-3430sdp.c @@ -108,53 +108,38 @@ static struct twl4030_keypad_data sdp3430_kp_data = {  #define SDP3430_LCD_PANEL_BACKLIGHT_GPIO	8  #define SDP3430_LCD_PANEL_ENABLE_GPIO		5 -static struct gpio sdp3430_dss_gpios[] __initdata = { -	{SDP3430_LCD_PANEL_ENABLE_GPIO,    GPIOF_OUT_INIT_LOW, "LCD reset"    }, -	{SDP3430_LCD_PANEL_BACKLIGHT_GPIO, GPIOF_OUT_INIT_LOW, "LCD Backlight"}, -}; -  static void __init sdp3430_display_init(void)  {  	int r; -	r = gpio_request_array(sdp3430_dss_gpios, -			       ARRAY_SIZE(sdp3430_dss_gpios)); +	/* +	 * the backlight GPIO doesn't directly go to the panel, it enables +	 * an internal circuit on 3430sdp to create the signal V_BKL_28V, +	 * this is connected to LED+ pin of the sharp panel. This GPIO +	 * is left enabled in the board file, and not passed to the panel +	 * as platform_data. +	 */ +	r = gpio_request_one(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, +				GPIOF_OUT_INIT_HIGH, "LCD Backlight");  	if (r) -		printk(KERN_ERR "failed to get LCD control GPIOs\n"); - -} +		pr_err("failed to get LCD Backlight GPIO\n"); -static int sdp3430_panel_enable_lcd(struct omap_dss_device *dssdev) -{ -	gpio_direction_output(SDP3430_LCD_PANEL_ENABLE_GPIO, 1); -	gpio_direction_output(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, 1); - -	return 0; -} - -static void sdp3430_panel_disable_lcd(struct omap_dss_device *dssdev) -{ -	gpio_direction_output(SDP3430_LCD_PANEL_ENABLE_GPIO, 0); -	gpio_direction_output(SDP3430_LCD_PANEL_BACKLIGHT_GPIO, 0); -} - -static int sdp3430_panel_enable_tv(struct omap_dss_device *dssdev) -{ -	return 0; -} - -static void sdp3430_panel_disable_tv(struct omap_dss_device *dssdev) -{  } +static struct panel_sharp_ls037v7dw01_data sdp3430_lcd_data = { +	.resb_gpio = SDP3430_LCD_PANEL_ENABLE_GPIO, +	.ini_gpio = -1, +	.mo_gpio = -1, +	.lr_gpio = -1, +	.ud_gpio = -1, +};  static struct omap_dss_device sdp3430_lcd_device = {  	.name			= "lcd",  	.driver_name		= "sharp_ls_panel",  	.type			= OMAP_DISPLAY_TYPE_DPI,  	.phy.dpi.data_lines	= 16, -	.platform_enable	= sdp3430_panel_enable_lcd, -	.platform_disable	= sdp3430_panel_disable_lcd, +	.data			= &sdp3430_lcd_data,  };  static struct tfp410_platform_data dvi_panel = { @@ -175,8 +160,6 @@ static struct omap_dss_device sdp3430_tv_device = {  	.driver_name		= "venc",  	.type			= OMAP_DISPLAY_TYPE_VENC,  	.phy.venc.type		= OMAP_DSS_VENC_TYPE_SVIDEO, -	.platform_enable	= sdp3430_panel_enable_tv, -	.platform_disable	= sdp3430_panel_disable_tv,  }; diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c index 00d72902ef4..56a9a4f855c 100644 --- a/arch/arm/mach-omap2/board-4430sdp.c +++ b/arch/arm/mach-omap2/board-4430sdp.c @@ -730,7 +730,7 @@ static void __init omap_4430sdp_init(void)  	omap4_sdp4430_wifi_init();  	omap4_twl6030_hsmmc_init(mmc); -	usb_bind_phy("musb-hdrc.0.auto", 0, "omap-usb2.1.auto"); +	usb_bind_phy("musb-hdrc.2.auto", 0, "omap-usb2.3.auto");  	usb_musb_init(&musb_board_data);  	status = omap_ethernet_init(); diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c index c29d2e74368..d63f14b534b 100644 --- a/arch/arm/mach-omap2/board-am3517evm.c +++ b/arch/arm/mach-omap2/board-am3517evm.c @@ -120,63 +120,14 @@ static int __init am3517_evm_i2c_init(void)  	return 0;  } -static int lcd_enabled; -static int dvi_enabled; - -#if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \ -		defined(CONFIG_PANEL_SHARP_LQ043T1DG01_MODULE) -static struct gpio am3517_evm_dss_gpios[] __initdata = { -	/* GPIO 182 = LCD Backlight Power */ -	{ LCD_PANEL_BKLIGHT_PWR, GPIOF_OUT_INIT_HIGH, "lcd_backlight_pwr" }, -	/* GPIO 181 = LCD Panel PWM */ -	{ LCD_PANEL_PWM,	 GPIOF_OUT_INIT_HIGH, "lcd bl enable"	  }, -	/* GPIO 176 = LCD Panel Power enable pin */ -	{ LCD_PANEL_PWR,	 GPIOF_OUT_INIT_HIGH, "dvi enable"	  }, -}; - -static void __init am3517_evm_display_init(void) -{ -	int r; - -	omap_mux_init_gpio(LCD_PANEL_PWR, OMAP_PIN_INPUT_PULLUP); -	omap_mux_init_gpio(LCD_PANEL_BKLIGHT_PWR, OMAP_PIN_INPUT_PULLDOWN); -	omap_mux_init_gpio(LCD_PANEL_PWM, OMAP_PIN_INPUT_PULLDOWN); - -	r = gpio_request_array(am3517_evm_dss_gpios, -			       ARRAY_SIZE(am3517_evm_dss_gpios)); -	if (r) { -		printk(KERN_ERR "failed to get DSS panel control GPIOs\n"); -		return; -	} - -	printk(KERN_INFO "Display initialized successfully\n"); -} -#else -static void __init am3517_evm_display_init(void) {} -#endif - -static int am3517_evm_panel_enable_lcd(struct omap_dss_device *dssdev) -{ -	if (dvi_enabled) { -		printk(KERN_ERR "cannot enable LCD, DVI is enabled\n"); -		return -EINVAL; -	} -	gpio_set_value(LCD_PANEL_PWR, 1); -	lcd_enabled = 1; - -	return 0; -} - -static void am3517_evm_panel_disable_lcd(struct omap_dss_device *dssdev) -{ -	gpio_set_value(LCD_PANEL_PWR, 0); -	lcd_enabled = 0; -} -  static struct panel_generic_dpi_data lcd_panel = {  	.name			= "sharp_lq", -	.platform_enable	= am3517_evm_panel_enable_lcd, -	.platform_disable	= am3517_evm_panel_disable_lcd, +	.num_gpios		= 3, +	.gpios			= { +		LCD_PANEL_PWR, +		LCD_PANEL_BKLIGHT_PWR, +		LCD_PANEL_PWM, +	},  };  static struct omap_dss_device am3517_evm_lcd_device = { @@ -187,22 +138,11 @@ static struct omap_dss_device am3517_evm_lcd_device = {  	.phy.dpi.data_lines 	= 16,  }; -static int am3517_evm_panel_enable_tv(struct omap_dss_device *dssdev) -{ -	return 0; -} - -static void am3517_evm_panel_disable_tv(struct omap_dss_device *dssdev) -{ -} -  static struct omap_dss_device am3517_evm_tv_device = {  	.type 			= OMAP_DISPLAY_TYPE_VENC,  	.name 			= "tv",  	.driver_name		= "venc",  	.phy.venc.type		= OMAP_DSS_VENC_TYPE_SVIDEO, -	.platform_enable	= am3517_evm_panel_enable_tv, -	.platform_disable	= am3517_evm_panel_disable_tv,  };  static struct tfp410_platform_data dvi_panel = { @@ -365,8 +305,6 @@ static void __init am3517_evm_init(void)  	usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data));  	usbhs_init(&usbhs_bdata);  	am3517_evm_hecc_init(&am3517_evm_hecc_pdata); -	/* DSS */ -	am3517_evm_display_init();  	/* RTC - S35390A */  	am3517_evm_rtc_init(); diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c index e0ed8c07fc5..ee6218c7480 100644 --- a/arch/arm/mach-omap2/board-cm-t35.c +++ b/arch/arm/mach-omap2/board-cm-t35.c @@ -190,45 +190,12 @@ static inline void cm_t35_init_nand(void) {}  #define CM_T35_LCD_BL_GPIO 58  #define CM_T35_DVI_EN_GPIO 54 -static int lcd_enabled; -static int dvi_enabled; - -static int cm_t35_panel_enable_lcd(struct omap_dss_device *dssdev) -{ -	if (dvi_enabled) { -		printk(KERN_ERR "cannot enable LCD, DVI is enabled\n"); -		return -EINVAL; -	} - -	gpio_set_value(CM_T35_LCD_EN_GPIO, 1); -	gpio_set_value(CM_T35_LCD_BL_GPIO, 1); - -	lcd_enabled = 1; - -	return 0; -} - -static void cm_t35_panel_disable_lcd(struct omap_dss_device *dssdev) -{ -	lcd_enabled = 0; - -	gpio_set_value(CM_T35_LCD_BL_GPIO, 0); -	gpio_set_value(CM_T35_LCD_EN_GPIO, 0); -} - -static int cm_t35_panel_enable_tv(struct omap_dss_device *dssdev) -{ -	return 0; -} - -static void cm_t35_panel_disable_tv(struct omap_dss_device *dssdev) -{ -} -  static struct panel_generic_dpi_data lcd_panel = {  	.name			= "toppoly_tdo35s", -	.platform_enable	= cm_t35_panel_enable_lcd, -	.platform_disable	= cm_t35_panel_disable_lcd, +	.num_gpios		= 1, +	.gpios			= { +		CM_T35_LCD_BL_GPIO, +	},  };  static struct omap_dss_device cm_t35_lcd_device = { @@ -257,8 +224,6 @@ static struct omap_dss_device cm_t35_tv_device = {  	.driver_name		= "venc",  	.type			= OMAP_DISPLAY_TYPE_VENC,  	.phy.venc.type		= OMAP_DSS_VENC_TYPE_SVIDEO, -	.platform_enable	= cm_t35_panel_enable_tv, -	.platform_disable	= cm_t35_panel_disable_tv,  };  static struct omap_dss_device *cm_t35_dss_devices[] = { @@ -292,11 +257,6 @@ static struct spi_board_info cm_t35_lcd_spi_board_info[] __initdata = {  	},  }; -static struct gpio cm_t35_dss_gpios[] __initdata = { -	{ CM_T35_LCD_EN_GPIO, GPIOF_OUT_INIT_LOW,  "lcd enable"    }, -	{ CM_T35_LCD_BL_GPIO, GPIOF_OUT_INIT_LOW,  "lcd bl enable" }, -}; -  static void __init cm_t35_init_display(void)  {  	int err; @@ -304,23 +264,21 @@ static void __init cm_t35_init_display(void)  	spi_register_board_info(cm_t35_lcd_spi_board_info,  				ARRAY_SIZE(cm_t35_lcd_spi_board_info)); -	err = gpio_request_array(cm_t35_dss_gpios, -				 ARRAY_SIZE(cm_t35_dss_gpios)); + +	err = gpio_request_one(CM_T35_LCD_EN_GPIO, GPIOF_OUT_INIT_LOW, +			"lcd bl enable");  	if (err) { -		pr_err("CM-T35: failed to request DSS control GPIOs\n"); +		pr_err("CM-T35: failed to request LCD EN GPIO\n");  		return;  	} -	gpio_export(CM_T35_LCD_EN_GPIO, 0); -	gpio_export(CM_T35_LCD_BL_GPIO, 0); -  	msleep(50);  	gpio_set_value(CM_T35_LCD_EN_GPIO, 1);  	err = omap_display_init(&cm_t35_dss_data);  	if (err) {  		pr_err("CM-T35: failed to register DSS device\n"); -		gpio_free_array(cm_t35_dss_gpios, ARRAY_SIZE(cm_t35_dss_gpios)); +		gpio_free(CM_T35_LCD_EN_GPIO);  	}  } diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c index e44b804f75a..57642054417 100644 --- a/arch/arm/mach-omap2/board-devkit8000.c +++ b/arch/arm/mach-omap2/board-devkit8000.c @@ -103,19 +103,6 @@ static struct omap2_hsmmc_info mmc[] = {  	{}	/* Terminator */  }; -static int devkit8000_panel_enable_lcd(struct omap_dss_device *dssdev) -{ -	if (gpio_is_valid(dssdev->reset_gpio)) -		gpio_set_value_cansleep(dssdev->reset_gpio, 1); -	return 0; -} - -static void devkit8000_panel_disable_lcd(struct omap_dss_device *dssdev) -{ -	if (gpio_is_valid(dssdev->reset_gpio)) -		gpio_set_value_cansleep(dssdev->reset_gpio, 0); -} -  static struct regulator_consumer_supply devkit8000_vmmc1_supply[] = {  	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),  }; @@ -127,8 +114,7 @@ static struct regulator_consumer_supply devkit8000_vio_supply[] = {  static struct panel_generic_dpi_data lcd_panel = {  	.name			= "innolux_at070tn83", -	.platform_enable        = devkit8000_panel_enable_lcd, -	.platform_disable       = devkit8000_panel_disable_lcd, +	/* gpios filled in code */  };  static struct omap_dss_device devkit8000_lcd_device = { @@ -210,8 +196,6 @@ static struct gpio_led gpio_leds[];  static int devkit8000_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); @@ -220,13 +204,8 @@ static int devkit8000_twl_gpio_setup(struct device *dev,  	gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;  	/* TWL4030_GPIO_MAX + 0 is "LCD_PWREN" (out, active high) */ -	devkit8000_lcd_device.reset_gpio = gpio + TWL4030_GPIO_MAX + 0; -	ret = gpio_request_one(devkit8000_lcd_device.reset_gpio, -			       GPIOF_OUT_INIT_LOW, "LCD_PWREN"); -	if (ret < 0) { -		devkit8000_lcd_device.reset_gpio = -EINVAL; -		printk(KERN_ERR "Failed to request GPIO for LCD_PWRN\n"); -	} +	lcd_panel.num_gpios = 1; +	lcd_panel.gpios[0] = gpio + TWL4030_GPIO_MAX + 0;  	/* gpio + 7 is "DVI_PD" (out, active low) */  	dvi_panel.power_down_gpio = gpio + 7; diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c index 8a8e505a0e9..d0d17bc58d9 100644 --- a/arch/arm/mach-omap2/board-ldp.c +++ b/arch/arm/mach-omap2/board-ldp.c @@ -181,34 +181,13 @@ static inline void __init ldp_init_smsc911x(void)  /* LCD */ -static int ldp_backlight_gpio; -static int ldp_lcd_enable_gpio; -  #define LCD_PANEL_RESET_GPIO		55  #define LCD_PANEL_QVGA_GPIO		56 -static int ldp_panel_enable_lcd(struct omap_dss_device *dssdev) -{ -	if (gpio_is_valid(ldp_lcd_enable_gpio)) -		gpio_direction_output(ldp_lcd_enable_gpio, 1); -	if (gpio_is_valid(ldp_backlight_gpio)) -		gpio_direction_output(ldp_backlight_gpio, 1); - -	return 0; -} - -static void ldp_panel_disable_lcd(struct omap_dss_device *dssdev) -{ -	if (gpio_is_valid(ldp_lcd_enable_gpio)) -		gpio_direction_output(ldp_lcd_enable_gpio, 0); -	if (gpio_is_valid(ldp_backlight_gpio)) -		gpio_direction_output(ldp_backlight_gpio, 0); -} -  static struct panel_generic_dpi_data ldp_panel_data = {  	.name			= "nec_nl2432dr22-11b", -	.platform_enable	= ldp_panel_enable_lcd, -	.platform_disable	= ldp_panel_disable_lcd, +	.num_gpios		= 4, +	/* gpios filled in code */  };  static struct omap_dss_device ldp_lcd_device = { @@ -231,41 +210,19 @@ static struct omap_dss_board_info ldp_dss_data = {  static void __init ldp_display_init(void)  { -	int r; - -	static struct gpio gpios[] __initdata = { -		{LCD_PANEL_RESET_GPIO, GPIOF_OUT_INIT_HIGH, "LCD RESET"}, -		{LCD_PANEL_QVGA_GPIO, GPIOF_OUT_INIT_HIGH, "LCD QVGA"}, -	}; - -	r = gpio_request_array(gpios, ARRAY_SIZE(gpios)); -	if (r) { -		pr_err("Cannot request LCD GPIOs, error %d\n", r); -		return; -	} +	ldp_panel_data.gpios[2] = LCD_PANEL_RESET_GPIO; +	ldp_panel_data.gpios[3] = LCD_PANEL_QVGA_GPIO;  	omap_display_init(&ldp_dss_data);  }  static int ldp_twl_gpio_setup(struct device *dev, unsigned gpio, unsigned ngpio)  { -	int r; - -	struct gpio gpios[] = { -		{gpio + 7 , GPIOF_OUT_INIT_LOW, "LCD ENABLE"}, -		{gpio + 15, GPIOF_OUT_INIT_LOW, "LCD BACKLIGHT"}, -	}; - -	r = gpio_request_array(gpios, ARRAY_SIZE(gpios)); -	if (r) { -		pr_err("Cannot request LCD GPIOs, error %d\n", r); -		ldp_backlight_gpio = -EINVAL; -		ldp_lcd_enable_gpio = -EINVAL; -		return r; -	} +	ldp_panel_data.gpios[0] = gpio + 7; +	ldp_panel_data.gpio_invert[0] = true; -	ldp_backlight_gpio = gpio + 15; -	ldp_lcd_enable_gpio = gpio + 7; +	ldp_panel_data.gpios[1] = gpio + 15; +	ldp_panel_data.gpio_invert[1] = true;  	return 0;  } diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c index 4f1bbc3cc29..f76d0de7b40 100644 --- a/arch/arm/mach-omap2/board-omap3evm.c +++ b/arch/arm/mach-omap2/board-omap3evm.c @@ -155,61 +155,43 @@ static inline void __init omap3evm_init_smsc911x(void) { return; }  #define OMAP3EVM_LCD_PANEL_LR		2  #define OMAP3EVM_LCD_PANEL_UD		3  #define OMAP3EVM_LCD_PANEL_INI		152 -#define OMAP3EVM_LCD_PANEL_ENVDD	153  #define OMAP3EVM_LCD_PANEL_QVGA		154  #define OMAP3EVM_LCD_PANEL_RESB		155 + +#define OMAP3EVM_LCD_PANEL_ENVDD	153  #define OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO	210 + +/* + * OMAP3EVM DVI control signals + */  #define OMAP3EVM_DVI_PANEL_EN_GPIO	199 -static struct gpio omap3_evm_dss_gpios[] __initdata = { -	{ OMAP3EVM_LCD_PANEL_RESB,  GPIOF_OUT_INIT_HIGH, "lcd_panel_resb"  }, -	{ OMAP3EVM_LCD_PANEL_INI,   GPIOF_OUT_INIT_HIGH, "lcd_panel_ini"   }, -	{ OMAP3EVM_LCD_PANEL_QVGA,  GPIOF_OUT_INIT_LOW,  "lcd_panel_qvga"  }, -	{ OMAP3EVM_LCD_PANEL_LR,    GPIOF_OUT_INIT_HIGH, "lcd_panel_lr"    }, -	{ OMAP3EVM_LCD_PANEL_UD,    GPIOF_OUT_INIT_HIGH, "lcd_panel_ud"    }, -	{ OMAP3EVM_LCD_PANEL_ENVDD, GPIOF_OUT_INIT_LOW,  "lcd_panel_envdd" }, +static struct panel_sharp_ls037v7dw01_data omap3_evm_lcd_data = { +	.resb_gpio = OMAP3EVM_LCD_PANEL_RESB, +	.ini_gpio = OMAP3EVM_LCD_PANEL_INI, +	.mo_gpio = OMAP3EVM_LCD_PANEL_QVGA, +	.lr_gpio = OMAP3EVM_LCD_PANEL_LR, +	.ud_gpio = OMAP3EVM_LCD_PANEL_UD,  }; -static int lcd_enabled; -static int dvi_enabled; -  static void __init omap3_evm_display_init(void)  {  	int r; -	r = gpio_request_array(omap3_evm_dss_gpios, -			       ARRAY_SIZE(omap3_evm_dss_gpios)); +	r = gpio_request_one(OMAP3EVM_LCD_PANEL_ENVDD, GPIOF_OUT_INIT_LOW, +				"lcd_panel_envdd");  	if (r) -		printk(KERN_ERR "failed to get lcd_panel_* gpios\n"); -} +		pr_err("failed to get lcd_panel_envdd GPIO\n"); -static int omap3_evm_enable_lcd(struct omap_dss_device *dssdev) -{ -	if (dvi_enabled) { -		printk(KERN_ERR "cannot enable LCD, DVI is enabled\n"); -		return -EINVAL; -	} -	gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 0); +	r = gpio_request_one(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, +				GPIOF_OUT_INIT_LOW, "lcd_panel_bklight"); +	if (r) +		pr_err("failed to get lcd_panel_bklight GPIO\n");  	if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2)  		gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);  	else  		gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1); - -	lcd_enabled = 1; -	return 0; -} - -static void omap3_evm_disable_lcd(struct omap_dss_device *dssdev) -{ -	gpio_set_value(OMAP3EVM_LCD_PANEL_ENVDD, 1); - -	if (get_omap3_evm_rev() >= OMAP3EVM_BOARD_GEN_2) -		gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 1); -	else -		gpio_set_value_cansleep(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0); - -	lcd_enabled = 0;  }  static struct omap_dss_device omap3_evm_lcd_device = { @@ -217,26 +199,14 @@ static struct omap_dss_device omap3_evm_lcd_device = {  	.driver_name		= "sharp_ls_panel",  	.type			= OMAP_DISPLAY_TYPE_DPI,  	.phy.dpi.data_lines	= 18, -	.platform_enable	= omap3_evm_enable_lcd, -	.platform_disable	= omap3_evm_disable_lcd, +	.data			= &omap3_evm_lcd_data,  }; -static int omap3_evm_enable_tv(struct omap_dss_device *dssdev) -{ -	return 0; -} - -static void omap3_evm_disable_tv(struct omap_dss_device *dssdev) -{ -} -  static struct omap_dss_device omap3_evm_tv_device = {  	.name			= "tv",  	.driver_name		= "venc",  	.type			= OMAP_DISPLAY_TYPE_VENC,  	.phy.venc.type		= OMAP_DSS_VENC_TYPE_SVIDEO, -	.platform_enable	= omap3_evm_enable_tv, -	.platform_disable	= omap3_evm_disable_tv,  };  static struct tfp410_platform_data dvi_panel = { diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c index 1004d2aaa68..28133d5b4fe 100644 --- a/arch/arm/mach-omap2/board-omap3pandora.c +++ b/arch/arm/mach-omap2/board-omap3pandora.c @@ -44,6 +44,7 @@  #include "common.h"  #include <video/omapdss.h> +#include <video/omap-panel-data.h>  #include <linux/platform_data/mtd-nand-omap2.h>  #include "mux.h" @@ -230,12 +231,16 @@ static struct twl4030_keypad_data pandora_kp_data = {  	.rep		= 1,  }; +static struct panel_tpo_td043_data lcd_data = { +	.nreset_gpio		= 157, +}; +  static struct omap_dss_device pandora_lcd_device = {  	.name			= "lcd",  	.driver_name		= "tpo_td043mtea1_panel",  	.type			= OMAP_DISPLAY_TYPE_DPI,  	.phy.dpi.data_lines	= 24, -	.reset_gpio		= 157, +	.data			= &lcd_data,  };  static struct omap_dss_device pandora_tv_device = { diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c index 8afbba0923d..d37e6b187ae 100644 --- a/arch/arm/mach-omap2/board-omap3stalker.c +++ b/arch/arm/mach-omap2/board-omap3stalker.c @@ -94,15 +94,6 @@ static void __init omap3_stalker_display_init(void)  	return;  } -static int omap3_stalker_enable_tv(struct omap_dss_device *dssdev) -{ -	return 0; -} - -static void omap3_stalker_disable_tv(struct omap_dss_device *dssdev) -{ -} -  static struct omap_dss_device omap3_stalker_tv_device = {  	.name			= "tv",  	.driver_name		= "venc", @@ -112,8 +103,6 @@ static struct omap_dss_device omap3_stalker_tv_device = {  #elif defined(CONFIG_OMAP2_VENC_OUT_TYPE_COMPOSITE)  	.u.venc.type		= OMAP_DSS_VENC_TYPE_COMPOSITE,  #endif -	.platform_enable	= omap3_stalker_enable_tv, -	.platform_disable	= omap3_stalker_disable_tv,  };  static struct tfp410_platform_data dvi_panel = { diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c index a71ad345f20..1e2c75eee91 100644 --- a/arch/arm/mach-omap2/board-omap4panda.c +++ b/arch/arm/mach-omap2/board-omap4panda.c @@ -435,7 +435,7 @@ static void __init omap4_panda_init(void)  	omap_sdrc_init(NULL, NULL);  	omap4_twl6030_hsmmc_init(mmc);  	omap4_ehci_init(); -	usb_bind_phy("musb-hdrc.0.auto", 0, "omap-usb2.1.auto"); +	usb_bind_phy("musb-hdrc.2.auto", 0, "omap-usb2.3.auto");  	usb_musb_init(&musb_board_data);  	omap4_panda_display_init();  } diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index f9101407cd5..4ca6b680aa7 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c @@ -145,28 +145,9 @@ static inline void __init overo_init_smsc911x(void) { return; }  #endif  /* DSS */ -static int lcd_enabled; -static int dvi_enabled; -  #define OVERO_GPIO_LCD_EN 144  #define OVERO_GPIO_LCD_BL 145 -static struct gpio overo_dss_gpios[] __initdata = { -	{ OVERO_GPIO_LCD_EN, GPIOF_OUT_INIT_HIGH, "OVERO_GPIO_LCD_EN" }, -	{ OVERO_GPIO_LCD_BL, GPIOF_OUT_INIT_HIGH, "OVERO_GPIO_LCD_BL" }, -}; - -static void __init overo_display_init(void) -{ -	if (gpio_request_array(overo_dss_gpios, ARRAY_SIZE(overo_dss_gpios))) { -		printk(KERN_ERR "could not obtain DSS control GPIOs\n"); -		return; -	} - -	gpio_export(OVERO_GPIO_LCD_EN, 0); -	gpio_export(OVERO_GPIO_LCD_BL, 0); -} -  static struct tfp410_platform_data dvi_panel = {  	.i2c_bus_num		= 3,  	.power_down_gpio	= -1, @@ -187,30 +168,13 @@ static struct omap_dss_device overo_tv_device = {  	.phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,  }; -static int overo_panel_enable_lcd(struct omap_dss_device *dssdev) -{ -	if (dvi_enabled) { -		printk(KERN_ERR "cannot enable LCD, DVI is enabled\n"); -		return -EINVAL; -	} - -	gpio_set_value(OVERO_GPIO_LCD_EN, 1); -	gpio_set_value(OVERO_GPIO_LCD_BL, 1); -	lcd_enabled = 1; -	return 0; -} - -static void overo_panel_disable_lcd(struct omap_dss_device *dssdev) -{ -	gpio_set_value(OVERO_GPIO_LCD_EN, 0); -	gpio_set_value(OVERO_GPIO_LCD_BL, 0); -	lcd_enabled = 0; -} -  static struct panel_generic_dpi_data lcd43_panel = {  	.name			= "samsung_lte430wq_f0c", -	.platform_enable	= overo_panel_enable_lcd, -	.platform_disable	= overo_panel_disable_lcd, +	.num_gpios		= 2, +	.gpios			= { +		OVERO_GPIO_LCD_EN, +		OVERO_GPIO_LCD_BL +	},  };  static struct omap_dss_device overo_lcd43_device = { @@ -223,13 +187,20 @@ static struct omap_dss_device overo_lcd43_device = {  #if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \  	defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE) +static struct panel_generic_dpi_data lcd35_panel = { +	.num_gpios		= 2, +	.gpios			= { +		OVERO_GPIO_LCD_EN, +		OVERO_GPIO_LCD_BL +	}, +}; +  static struct omap_dss_device overo_lcd35_device = {  	.type			= OMAP_DISPLAY_TYPE_DPI,  	.name			= "lcd35",  	.driver_name		= "lgphilips_lb035q02_panel",  	.phy.dpi.data_lines	= 24, -	.platform_enable	= overo_panel_enable_lcd, -	.platform_disable	= overo_panel_disable_lcd, +	.data			= &lcd35_panel,  };  #endif @@ -508,7 +479,6 @@ static void __init overo_init(void)  	usbhs_init(&usbhs_bdata);  	overo_spi_init();  	overo_init_smsc911x(); -	overo_display_init();  	overo_init_led();  	overo_init_keys();  	omap_twl4030_audio_init("overo", NULL); diff --git a/arch/arm/mach-omap2/board-rx51-video.c b/arch/arm/mach-omap2/board-rx51-video.c index eb667261df0..bd74f9f6063 100644 --- a/arch/arm/mach-omap2/board-rx51-video.c +++ b/arch/arm/mach-omap2/board-rx51-video.c @@ -16,6 +16,8 @@  #include <linux/mm.h>  #include <asm/mach-types.h>  #include <video/omapdss.h> +#include <video/omap-panel-data.h> +  #include <linux/platform_data/spi-omap2-mcspi.h>  #include "soc.h" @@ -27,25 +29,16 @@  #if defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE) -static int rx51_lcd_enable(struct omap_dss_device *dssdev) -{ -	gpio_set_value(dssdev->reset_gpio, 1); -	return 0; -} - -static void rx51_lcd_disable(struct omap_dss_device *dssdev) -{ -	gpio_set_value(dssdev->reset_gpio, 0); -} +static struct panel_acx565akm_data lcd_data = { +	.reset_gpio	= RX51_LCD_RESET_GPIO, +};  static struct omap_dss_device rx51_lcd_device = {  	.name			= "lcd",  	.driver_name		= "panel-acx565akm",  	.type			= OMAP_DISPLAY_TYPE_SDI,  	.phy.sdi.datapairs	= 2, -	.reset_gpio		= RX51_LCD_RESET_GPIO, -	.platform_enable	= rx51_lcd_enable, -	.platform_disable	= rx51_lcd_disable, +	.data			= &lcd_data,  };  static struct omap_dss_device  rx51_tv_device = { @@ -76,13 +69,8 @@ static int __init rx51_video_init(void)  		return 0;  	} -	if (gpio_request_one(RX51_LCD_RESET_GPIO, GPIOF_OUT_INIT_HIGH, -			     "LCD ACX565AKM reset")) { -		pr_err("%s failed to get LCD Reset GPIO\n", __func__); -		return 0; -	} -  	omap_display_init(&rx51_dss_board_info); +  	return 0;  } diff --git a/arch/arm/mach-omap2/board-zoom-display.c b/arch/arm/mach-omap2/board-zoom-display.c index 9a7174faac5..c2a079cb76f 100644 --- a/arch/arm/mach-omap2/board-zoom-display.c +++ b/arch/arm/mach-omap2/board-zoom-display.c @@ -15,8 +15,9 @@  #include <linux/spi/spi.h>  #include <linux/platform_data/spi-omap2-mcspi.h>  #include <video/omapdss.h> -#include "board-zoom.h" +#include <video/omap-panel-data.h> +#include "board-zoom.h"  #include "soc.h"  #include "common.h" @@ -24,37 +25,17 @@  #define LCD_PANEL_RESET_GPIO_PILOT	55  #define LCD_PANEL_QVGA_GPIO		56 -static struct gpio zoom_lcd_gpios[] __initdata = { -	{ -EINVAL,		GPIOF_OUT_INIT_HIGH, "lcd reset" }, -	{ LCD_PANEL_QVGA_GPIO,	GPIOF_OUT_INIT_HIGH, "lcd qvga"	 }, +static struct panel_nec_nl8048_data zoom_lcd_data = { +	/* res_gpio filled in code */ +	.qvga_gpio = LCD_PANEL_QVGA_GPIO,  }; -static void __init zoom_lcd_panel_init(void) -{ -	zoom_lcd_gpios[0].gpio = (omap_rev() > OMAP3430_REV_ES3_0) ? -			LCD_PANEL_RESET_GPIO_PROD : -			LCD_PANEL_RESET_GPIO_PILOT; - -	if (gpio_request_array(zoom_lcd_gpios, ARRAY_SIZE(zoom_lcd_gpios))) -		pr_err("%s: Failed to get LCD GPIOs.\n", __func__); -} - -static int zoom_panel_enable_lcd(struct omap_dss_device *dssdev) -{ -	return 0; -} - -static void zoom_panel_disable_lcd(struct omap_dss_device *dssdev) -{ -} -  static struct omap_dss_device zoom_lcd_device = {  	.name			= "lcd",  	.driver_name		= "NEC_8048_panel",  	.type			= OMAP_DISPLAY_TYPE_DPI,  	.phy.dpi.data_lines	= 24, -	.platform_enable	= zoom_panel_enable_lcd, -	.platform_disable	= zoom_panel_disable_lcd, +	.data			= &zoom_lcd_data,  };  static struct omap_dss_device *zoom_dss_devices[] = { @@ -67,6 +48,13 @@ static struct omap_dss_board_info zoom_dss_data = {  	.default_device		= &zoom_lcd_device,  }; +static void __init zoom_lcd_panel_init(void) +{ +	zoom_lcd_data.res_gpio = (omap_rev() > OMAP3430_REV_ES3_0) ? +			LCD_PANEL_RESET_GPIO_PROD : +			LCD_PANEL_RESET_GPIO_PILOT; +} +  static struct omap2_mcspi_device_config dss_lcd_mcspi_config = {  	.turbo_mode		= 1,  }; diff --git a/arch/arm/mach-omap2/dss-common.c b/arch/arm/mach-omap2/dss-common.c index 9c49bbe825f..393aeefaebb 100644 --- a/arch/arm/mach-omap2/dss-common.c +++ b/arch/arm/mach-omap2/dss-common.c @@ -52,7 +52,6 @@ static struct omap_dss_device omap4_panda_dvi_device = {  	.driver_name		= "tfp410",  	.data			= &omap4_dvi_panel,  	.phy.dpi.data_lines	= 24, -	.reset_gpio		= PANDA_DVI_TFP410_POWER_DOWN_GPIO,  	.channel		= OMAP_DSS_CHANNEL_LCD2,  }; @@ -177,45 +176,12 @@ static struct picodlp_panel_data sdp4430_picodlp_pdata = {  	.pwrgood_gpio		= 45,  }; -static void sdp4430_picodlp_init(void) -{ -	int r; -	const struct gpio picodlp_gpios[] = { -		{DLP_POWER_ON_GPIO, GPIOF_OUT_INIT_LOW, -			"DLP POWER ON"}, -		{sdp4430_picodlp_pdata.emu_done_gpio, GPIOF_IN, -			"DLP EMU DONE"}, -		{sdp4430_picodlp_pdata.pwrgood_gpio, GPIOF_OUT_INIT_LOW, -			"DLP PWRGOOD"}, -	}; - -	r = gpio_request_array(picodlp_gpios, ARRAY_SIZE(picodlp_gpios)); -	if (r) -		pr_err("Cannot request PicoDLP GPIOs, error %d\n", r); -} - -static int sdp4430_panel_enable_picodlp(struct omap_dss_device *dssdev) -{ -	gpio_set_value(DISPLAY_SEL_GPIO, 0); -	gpio_set_value(DLP_POWER_ON_GPIO, 1); - -	return 0; -} - -static void sdp4430_panel_disable_picodlp(struct omap_dss_device *dssdev) -{ -	gpio_set_value(DLP_POWER_ON_GPIO, 0); -	gpio_set_value(DISPLAY_SEL_GPIO, 1); -} -  static struct omap_dss_device sdp4430_picodlp_device = {  	.name			= "picodlp",  	.driver_name		= "picodlp_panel",  	.type			= OMAP_DISPLAY_TYPE_DPI,  	.phy.dpi.data_lines	= 24,  	.channel		= OMAP_DSS_CHANNEL_LCD2, -	.platform_enable	= sdp4430_panel_enable_picodlp, -	.platform_disable	= sdp4430_panel_disable_picodlp,  	.data			= &sdp4430_picodlp_pdata,  }; @@ -232,17 +198,26 @@ static struct omap_dss_board_info sdp4430_dss_data = {  	.default_device	= &sdp4430_lcd_device,  }; +/* + * we select LCD2 by default (instead of Pico DLP) by setting DISPLAY_SEL_GPIO. + * Setting DLP_POWER_ON gpio enables the VDLP_2V5 VDLP_1V8 and VDLP_1V0 rails + * used by picodlp on the 4430sdp platform. Keep this gpio disabled as LCD2 is + * selected by default + */  void __init omap_4430sdp_display_init(void)  {  	int r; -	/* Enable LCD2 by default (instead of Pico DLP) */  	r = gpio_request_one(DISPLAY_SEL_GPIO, GPIOF_OUT_INIT_HIGH,  			"display_sel");  	if (r)  		pr_err("%s: Could not get display_sel GPIO\n", __func__); -	sdp4430_picodlp_init(); +	r = gpio_request_one(DLP_POWER_ON_GPIO, GPIOF_OUT_INIT_LOW, +		"DLP POWER ON"); +	if (r) +		pr_err("%s: Could not get DLP POWER ON GPIO\n", __func__); +  	omap_display_init(&sdp4430_dss_data);  	/*  	 * OMAP4460SDP/Blaze and OMAP4430 ES2.3 SDP/Blaze boards and @@ -262,12 +237,15 @@ void __init omap_4430sdp_display_init_of(void)  {  	int r; -	/* Enable LCD2 by default (instead of Pico DLP) */  	r = gpio_request_one(DISPLAY_SEL_GPIO, GPIOF_OUT_INIT_HIGH,  			"display_sel");  	if (r)  		pr_err("%s: Could not get display_sel GPIO\n", __func__); -	sdp4430_picodlp_init(); +	r = gpio_request_one(DLP_POWER_ON_GPIO, GPIOF_OUT_INIT_LOW, +		"DLP POWER ON"); +	if (r) +		pr_err("%s: Could not get DLP POWER ON GPIO\n", __func__); +  	omap_display_init(&sdp4430_dss_data);  } diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index 02e1d56a3fe..05481490a50 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c @@ -46,7 +46,6 @@  #include <asm/smp_twd.h>  #include <asm/sched_clock.h> -#include <asm/arch_timer.h>  #include "omap_hwmod.h"  #include "omap_device.h"  #include <plat/counter-32k.h> @@ -627,14 +626,10 @@ void __init omap4_local_timer_init(void)  #ifdef CONFIG_SOC_OMAP5  void __init omap5_realtime_timer_init(void)  { -	int err; -  	omap4_sync32k_timer_init();  	realtime_counter_init(); -	err = arch_timer_of_register(); -	if (err) -		pr_err("%s: arch_timer_register failed %d\n", __func__, err); +	clocksource_of_init();  }  #endif /* CONFIG_SOC_OMAP5 */  |