RE: [PATCH 1/2] OMAP3: Enable DSS2 for OMAP3EVM board

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Hiremath, Vaibhav
> Sent: Wednesday, October 28, 2009 3:34 PM
> To: linux-omap@xxxxxxxxxxxxxxx
> Cc: Hiremath, Vaibhav
> Subject: [PATCH 1/2] OMAP3: Enable DSS2 for OMAP3EVM board
> 
[Hiremath, Vaibhav] Tony,

Can you merge these 2 patches to "dss2" branch (if they do not have any comments)? So that they will also be get merged along with DSS2.

Thanks,
Vaibhav

> From: Vaibhav Hiremath <hvaibhav@xxxxxx>
> 
> 
> Signed-off-by: Vaibhav Hiremath <hvaibhav@xxxxxx>
> ---
>  arch/arm/configs/omap3_evm_defconfig |   51 +++++++-
>  arch/arm/mach-omap2/board-omap3evm.c |  238
> ++++++++++++++++++++++++++++++++--
>  2 files changed, 277 insertions(+), 12 deletions(-)
> 
> diff --git a/arch/arm/configs/omap3_evm_defconfig
> b/arch/arm/configs/omap3_evm_defconfig
> index d5ff477..ba395a2 100644
> --- a/arch/arm/configs/omap3_evm_defconfig
> +++ b/arch/arm/configs/omap3_evm_defconfig
> @@ -903,7 +903,56 @@ CONFIG_DAB=y
>  #
>  # CONFIG_VGASTATE is not set
>  CONFIG_VIDEO_OUTPUT_CONTROL=m
> -# CONFIG_FB is not set
> +CONFIG_FB=y
> +# CONFIG_FIRMWARE_EDID is not set
> +# CONFIG_FB_DDC is not set
> +# CONFIG_FB_BOOT_VESA_SUPPORT is not set
> +CONFIG_FB_CFB_FILLRECT=y
> +CONFIG_FB_CFB_COPYAREA=y
> +CONFIG_FB_CFB_IMAGEBLIT=y
> +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
> +# CONFIG_FB_SYS_FILLRECT is not set
> +# CONFIG_FB_SYS_COPYAREA is not set
> +# CONFIG_FB_SYS_IMAGEBLIT is not set
> +# CONFIG_FB_FOREIGN_ENDIAN is not set
> +# CONFIG_FB_SYS_FOPS is not set
> +# CONFIG_FB_SVGALIB is not set
> +# CONFIG_FB_MACMODES is not set
> +# CONFIG_FB_BACKLIGHT is not set
> +# CONFIG_FB_MODE_HELPERS is not set
> +# CONFIG_FB_TILEBLITTING is not set
> +
> +#
> +# Frame buffer hardware drivers
> +#
> +# CONFIG_FB_S1D13XXX is not set
> +# CONFIG_FB_VIRTUAL is not set
> +# CONFIG_FB_METRONOME is not set
> +# CONFIG_FB_MB862XX is not set
> +# CONFIG_FB_BROADSHEET is not set
> +# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
> +CONFIG_OMAP2_VRAM=y
> +CONFIG_OMAP2_VRFB=y
> +CONFIG_OMAP2_DSS=y
> +CONFIG_OMAP2_VRAM_SIZE=4
> +# CONFIG_OMAP2_DSS_DEBUG_SUPPORT is not set
> +# CONFIG_OMAP2_DSS_RFBI is not set
> +CONFIG_OMAP2_DSS_VENC=y
> +# CONFIG_OMAP2_DSS_SDI is not set
> +# CONFIG_OMAP2_DSS_DSI is not set
> +# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
> +CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
> +CONFIG_FB_OMAP2=y
> +# CONFIG_FB_OMAP2_DEBUG_SUPPORT is not set
> +# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
> +CONFIG_FB_OMAP2_NUM_FBS=3
> +
> +#
> +# OMAP2/3 Display Device Drivers
> +#
> +CONFIG_PANEL_GENERIC=y
> +# CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C is not set
> +CONFIG_PANEL_SHARP_LS037V7DW01=y
>  # CONFIG_BACKLIGHT_LCD_SUPPORT is not set
> 
>  #
> diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-
> omap2/board-omap3evm.c
> index e4ec0c5..f2c4979 100644
> --- a/arch/arm/mach-omap2/board-omap3evm.c
> +++ b/arch/arm/mach-omap2/board-omap3evm.c
> @@ -22,6 +22,7 @@
>  #include <linux/input.h>
>  #include <linux/leds.h>
> 
> +#include <linux/regulator/machine.h>
>  #include <linux/spi/spi.h>
>  #include <linux/spi/ads7846.h>
>  #include <linux/i2c/twl4030.h>
> @@ -38,6 +39,7 @@
>  #include <mach/common.h>
>  #include <mach/mcspi.h>
>  #include <mach/keypad.h>
> +#include <mach/display.h>
> 
>  #include "sdram-micron-mt46h32m32lf-6.h"
>  #include "mmc-twl4030.h"
> @@ -91,6 +93,178 @@ static inline void __init
> omap3evm_init_smc911x(void)
> 
>  	gpio_direction_input(OMAP3EVM_ETHR_GPIO_IRQ);
>  }
> +/*
> + * OMAP3EVM LCD Panel control signals
> + */
> +#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_BKLIGHT_GPIO	210
> +#define OMAP3EVM_DVI_PANEL_EN_GPIO	199
> +
> +static int lcd_enabled;
> +static int dvi_enabled;
> +
> +static void __init omap3_evm_display_init(void)
> +{
> +	int r;
> +
> +	r = gpio_request(OMAP3EVM_LCD_PANEL_RESB, "lcd_panel_resb");
> +	if (r) {
> +		printk(KERN_ERR "failed to get lcd_panel_resb\n");
> +		return;
> +	}
> +	gpio_direction_output(OMAP3EVM_LCD_PANEL_RESB, 1);
> +
> +	r = gpio_request(OMAP3EVM_LCD_PANEL_INI, "lcd_panel_ini");
> +	if (r) {
> +		printk(KERN_ERR "failed to get lcd_panel_ini\n");
> +		goto err_1;
> +	}
> +	gpio_direction_output(OMAP3EVM_LCD_PANEL_INI, 1);
> +
> +	r = gpio_request(OMAP3EVM_LCD_PANEL_QVGA, "lcd_panel_qvga");
> +	if (r) {
> +		printk(KERN_ERR "failed to get lcd_panel_qvga\n");
> +		goto err_2;
> +	}
> +	gpio_direction_output(OMAP3EVM_LCD_PANEL_QVGA, 0);
> +
> +	r = gpio_request(OMAP3EVM_LCD_PANEL_LR, "lcd_panel_lr");
> +	if (r) {
> +		printk(KERN_ERR "failed to get lcd_panel_lr\n");
> +		goto err_3;
> +	}
> +	gpio_direction_output(OMAP3EVM_LCD_PANEL_LR, 1);
> +
> +	r = gpio_request(OMAP3EVM_LCD_PANEL_UD, "lcd_panel_ud");
> +	if (r) {
> +		printk(KERN_ERR "failed to get lcd_panel_ud\n");
> +		goto err_4;
> +	}
> +	gpio_direction_output(OMAP3EVM_LCD_PANEL_UD, 1);
> +
> +	r = gpio_request(OMAP3EVM_LCD_PANEL_ENVDD, "lcd_panel_envdd");
> +	if (r) {
> +		printk(KERN_ERR "failed to get lcd_panel_envdd\n");
> +		goto err_5;
> +	}
> +
> +	return;
> +
> +err_5:
> +	gpio_free(OMAP3EVM_LCD_PANEL_UD);
> +err_4:
> +	gpio_free(OMAP3EVM_LCD_PANEL_LR);
> +err_3:
> +	gpio_free(OMAP3EVM_LCD_PANEL_QVGA);
> +err_2:
> +	gpio_free(OMAP3EVM_LCD_PANEL_INI);
> +err_1:
> +	gpio_free(OMAP3EVM_LCD_PANEL_RESB);
> +
> +}
> +
> +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);
> +	gpio_set_value(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);
> +	gpio_set_value(OMAP3EVM_LCD_PANEL_BKLIGHT_GPIO, 0);
> +
> +	lcd_enabled = 0;
> +}
> +
> +static struct omap_dss_device omap3_evm_lcd_device = {
> +	.name			= "lcd",
> +	.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,
> +};
> +
> +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 int omap3_evm_enable_dvi(struct omap_dss_device *dssdev)
> +{
> +	if (lcd_enabled) {
> +		printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
> +		return -EINVAL;
> +	}
> +
> +	gpio_set_value(OMAP3EVM_DVI_PANEL_EN_GPIO, 1);
> +
> +	dvi_enabled = 1;
> +	return 0;
> +}
> +
> +static void omap3_evm_disable_dvi(struct omap_dss_device *dssdev)
> +{
> +	gpio_set_value(OMAP3EVM_DVI_PANEL_EN_GPIO, 0);
> +
> +	dvi_enabled = 0;
> +}
> +
> +static struct omap_dss_device omap3_evm_dvi_device = {
> +	.name			= "dvi",
> +	.driver_name		= "generic_panel",
> +	.type			= OMAP_DISPLAY_TYPE_DPI,
> +	.phy.dpi.data_lines	= 24,
> +	.platform_enable	= omap3_evm_enable_dvi,
> +	.platform_disable	= omap3_evm_disable_dvi,
> +};
> +
> +static struct omap_dss_device *omap3_evm_dss_devices[] = {
> +	&omap3_evm_lcd_device,
> +	&omap3_evm_tv_device,
> +	&omap3_evm_dvi_device,
> +};
> +
> +static struct omap_dss_board_info omap3_evm_dss_data = {
> +	.num_devices	= ARRAY_SIZE(omap3_evm_dss_devices),
> +	.devices	= omap3_evm_dss_devices,
> +	.default_device	= &omap3_evm_lcd_device,
> +};
> +
> +static struct platform_device omap3_evm_dss_device = {
> +	.name		= "omapdss",
> +	.id		= -1,
> +	.dev		= {
> +		.platform_data = &omap3_evm_dss_data,
> +	},
> +};
> 
>  static struct twl4030_hsmmc_info mmc[] = {
>  	{
> @@ -139,6 +313,14 @@ static int omap3evm_twl_gpio_setup(struct
> device *dev,
>  	 * the P2 connector; notably LEDA for the LCD backlight.
>  	 */
> 
> +	/* TWL4030_GPIO_MAX + 0 == ledA, LCD Backlight control */
> +	gpio_request(gpio + TWL4030_GPIO_MAX, "EN_LCD_BKL");
> +	gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
> +
> +	/* gpio + 7 == DVI Enable */
> +	gpio_request(gpio + 7, "EN_DVI");
> +	gpio_direction_output(gpio + 7, 0);
> +
>  	/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
>  	gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
> 
> @@ -194,6 +376,47 @@ static struct twl4030_madc_platform_data
> omap3evm_madc_data = {
>  	.irq_line	= 1,
>  };
> 
> +static struct regulator_consumer_supply omap3_evm_vdda_dac_supply =
> {
> +	.supply		= "vdda_dac",
> +	.dev		= &omap3_evm_dss_device.dev,
> +};
> +
> +/* VDAC for DSS driving S-Video */
> +static struct regulator_init_data omap3_evm_vdac = {
> +	.constraints = {
> +		.min_uV			= 1800000,
> +		.max_uV			= 1800000,
> +		.apply_uV		= true,
> +		.valid_modes_mask	= REGULATOR_MODE_NORMAL
> +					| REGULATOR_MODE_STANDBY,
> +		.valid_ops_mask		= REGULATOR_CHANGE_MODE
> +					| REGULATOR_CHANGE_STATUS,
> +	},
> +	.num_consumer_supplies	= 1,
> +	.consumer_supplies	= &omap3_evm_vdda_dac_supply,
> +};
> +
> +/* VPLL2 for digital video outputs */
> +static struct regulator_consumer_supply omap3_evm_vpll2_supply = {
> +	.supply		= "vdvi",
> +	.dev		= &omap3_evm_lcd_device.dev,
> +};
> +
> +static struct regulator_init_data omap3_evm_vpll2 = {
> +	.constraints = {
> +		.name			= "VDVI",
> +		.min_uV			= 1800000,
> +		.max_uV			= 1800000,
> +		.apply_uV		= true,
> +		.valid_modes_mask	= REGULATOR_MODE_NORMAL
> +					| REGULATOR_MODE_STANDBY,
> +		.valid_ops_mask		= REGULATOR_CHANGE_MODE
> +					| REGULATOR_CHANGE_STATUS,
> +	},
> +	.num_consumer_supplies	= 1,
> +	.consumer_supplies	= &omap3_evm_vpll2_supply,
> +};
> +
>  static struct twl4030_platform_data omap3evm_twldata = {
>  	.irq_base	= TWL4030_IRQ_BASE,
>  	.irq_end	= TWL4030_IRQ_END,
> @@ -203,6 +426,8 @@ static struct twl4030_platform_data
> omap3evm_twldata = {
>  	.madc		= &omap3evm_madc_data,
>  	.usb		= &omap3evm_usb_data,
>  	.gpio		= &omap3evm_gpio_data,
> +	.vdac		= &omap3_evm_vdac,
> +	.vpll2		= &omap3_evm_vpll2,
>  };
> 
>  static struct i2c_board_info __initdata omap3evm_i2c_boardinfo[] =
> {
> @@ -223,15 +448,6 @@ static int __init omap3_evm_i2c_init(void)
>  	return 0;
>  }
> 
> -static struct platform_device omap3_evm_lcd_device = {
> -	.name		= "omap3evm_lcd",
> -	.id		= -1,
> -};
> -
> -static struct omap_lcd_config omap3_evm_lcd_config __initdata = {
> -	.ctrl_name	= "internal",
> -};
> -
>  static void ads7846_dev_init(void)
>  {
>  	if (gpio_request(OMAP3_EVM_TS_GPIO, "ADS7846 pendown") < 0)
> @@ -279,7 +495,6 @@ struct spi_board_info omap3evm_spi_board_info[]
> = {
>  };
> 
>  static struct omap_board_config_kernel omap3_evm_config[]
> __initdata = {
> -	{ OMAP_TAG_LCD,		&omap3_evm_lcd_config },
>  };
> 
>  static void __init omap3_evm_init_irq(void)
> @@ -293,7 +508,7 @@ static void __init omap3_evm_init_irq(void)
>  }
> 
>  static struct platform_device *omap3_evm_devices[] __initdata = {
> -	&omap3_evm_lcd_device,
> +	&omap3_evm_dss_device,
>  	&omap3evm_smc911x_device,
>  };
> 
> @@ -313,6 +528,7 @@ static void __init omap3_evm_init(void)
>  #endif
>  	usb_musb_init();
>  	ads7846_dev_init();
> +	omap3_evm_display_init();
>  }
> 
>  static void __init omap3_evm_map_io(void)
> --
> 1.6.2.4

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux