Skip to contentSkip to conversation

OMAP3: Display Support

PATCH Superseded Samreen 2 participants 5 messages Oct 14, 2010 – Oct 25, 2010

Subsystems (3)

v1 of 3 Superseded Latest is v3 →

lore
Share & tools
lore

Samreen

author
#0 lore raw

cover OMAP3: Display Support

This patch series adds the Display Support for OMAP3 platforms and the corresponding changes in the board files.

Kishore Y (2):
OMAP3: ZOOM2/3/3630SDP: Add display board file for OMAP3
OMAP3: Enable display on ZOOM2/3/3630SDP

 arch/arm/mach-omap2/Makefile                  |    3 +
 arch/arm/mach-omap2/board-3630sdp.c           |    1 +
 arch/arm/mach-omap2/board-zoom-display.c      |  165 +++++++++++++++++++++++++
 arch/arm/mach-omap2/board-zoom-peripherals.c  |   49 +++++++-
 arch/arm/mach-omap2/board-zoom2.c             |    1 +
 arch/arm/mach-omap2/board-zoom3.c             |    1 +
 arch/arm/mach-omap2/include/mach/board-zoom.h |    2 +
 7 files changed, 220 insertions(+), 2 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-zoom-display.c
author
#1 lore raw

PATCH 1/2 OMAP3: ZOOM2/3/3630SDP: Add display board file for OMAP3

From: Kishore Y <[email protected]>

Board-zoom-display.c added as a common file for display functionality on boards zoom2, zoom3 and 3630sdp

---
 arch/arm/mach-omap2/Makefile                  |    3 +
 arch/arm/mach-omap2/board-zoom-display.c      |  165 +++++++++++++++++++++++++
 arch/arm/mach-omap2/board-zoom-peripherals.c  |   49 +++++++-
 arch/arm/mach-omap2/include/mach/board-zoom.h |    2 +
 4 files changed, 217 insertions(+), 2 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-zoom-display.c
arch/arm/mach-omap2/Makefile +3 -0
index 88d3a1e..95e0ecf 100644
@@ -132,16 +132,19 @@ obj-$(CONFIG_MACH_NOKIA_RX51)		+= board-rx51.o \
 					   hsmmc.o
 obj-$(CONFIG_MACH_OMAP_ZOOM2)		+= board-zoom2.o \
 					   board-zoom-peripherals.o \
+					   board-zoom-display.o \
 					   board-flash.o \
 					   hsmmc.o \
 					   board-zoom-debugboard.o
 obj-$(CONFIG_MACH_OMAP_ZOOM3)		+= board-zoom3.o \
 					   board-zoom-peripherals.o \
+					   board-zoom-display.o \
 					   board-flash.o \
 					   hsmmc.o \
 					   board-zoom-debugboard.o
 obj-$(CONFIG_MACH_OMAP_3630SDP)		+= board-3630sdp.o \
 					   board-zoom-peripherals.o \
+					   board-zoom-display.o \
 					   board-flash.o \
 					   hsmmc.o
 obj-$(CONFIG_MACH_CM_T35)		+= board-cm-t35.o \
arch/arm/mach-omap2/board-zoom-display.c new file +165 -0

165 lines not on this page · raw message

arch/arm/mach-omap2/board-zoom-peripherals.c +47 -2

76 lines not on this page · raw message

arch/arm/mach-omap2/include/mach/board-zoom.h +2 -0
index 3af69d2..8d8eeb2 100644
@@ -3,9 +3,11 @@
  */
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
+#include <plat/display.h>
 
 #define ZOOM_NAND_CS    0
 
 extern void __init board_nand_init(struct mtd_partition *, u8 nr_parts, u8 cs);
 extern int __init zoom_debugboard_init(void);
 extern void __init zoom_peripherals_init(void);
+extern void __init zoom_display_init(void);
Signature · 1 line
1.5.6.3
author
#2 lore raw

PATCH 2/2 OMAP3: Enable display on ZOOM2/3/3630SDP

From: Kishore Y <[email protected]>

Enable Display on zoom2, zoom3 and 3630sdp boards.

---
 arch/arm/mach-omap2/board-3630sdp.c |    1 +
 arch/arm/mach-omap2/board-zoom2.c   |    1 +
 arch/arm/mach-omap2/board-zoom3.c   |    1 +
 3 files changed, 3 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/board-3630sdp.c +1 -0
index b359c3f..d6ba94a 100644
@@ -210,6 +210,7 @@ static void __init omap_sdp_init(void)
 	omap3_mux_init(board_mux, OMAP_PACKAGE_CBP);
 	omap_serial_init();
 	zoom_peripherals_init();
+	zoom_display_init();
 	board_smc91x_init();
 	board_flash_init(sdp_flash_partitions, chip_sel_sdp);
 	enable_board_wakeup_source();
arch/arm/mach-omap2/board-zoom2.c +1 -0
index 3ad9ecf..1db4d95 100644
@@ -138,6 +138,7 @@ static void __init omap_zoom2_init(void)
 	board_nand_init(zoom_nand_partitions,
 			ARRAY_SIZE(zoom_nand_partitions), ZOOM_NAND_CS);
 	zoom_debugboard_init();
+	zoom_display_init();
 }
 
 MACHINE_START(OMAP_ZOOM2, "OMAP Zoom2 board")
arch/arm/mach-omap2/board-zoom3.c +1 -0
index 6ca0b83..6e012f6 100644
@@ -117,6 +117,7 @@ static void __init omap_zoom_init(void)
 	board_nand_init(zoom_nand_partitions,
 			 ARRAY_SIZE(zoom_nand_partitions), ZOOM_NAND_CS);
 	zoom_debugboard_init();
+	zoom_display_init();
 
 	omap_mux_init_gpio(64, OMAP_PIN_OUTPUT);
 	usb_ehci_init(&ehci_pdata);
Signature · 1 line
1.5.6.3
#3 lore raw

RE: [PATCH 1/2] OMAP3: ZOOM2/3/3630SDP: Add display board file for OMAP3

In reply to Samreen
Quoted 70 lines

-----Original Message-----
From: [email protected] [mailto:linux-omap- [email protected]] On Behalf Of Nilofer, Samreen
Sent: Thursday, October 14, 2010 4:57 PM
To: [email protected]
Cc: Kishore Y; Mittal, Mukund; Rajkumar N; Nilofer, Samreen
Subject: [PATCH 1/2] OMAP3: ZOOM2/3/3630SDP: Add display board file for OMAP3

From: Kishore Y <[email protected]>

Board-zoom-display.c added as a common file for display functionality on boards zoom2, zoom3 and 3630sdp

---
 arch/arm/mach-omap2/Makefile                  |    3 +
 arch/arm/mach-omap2/board-zoom-display.c      |  165
+++++++++++++++++++++++++
 arch/arm/mach-omap2/board-zoom-peripherals.c  |   49 +++++++-
 arch/arm/mach-omap2/include/mach/board-zoom.h |    2 +
 4 files changed, 217 insertions(+), 2 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-zoom-display.c
arch/arm/mach-omap2/Makefile +3 -0
index 88d3a1e..95e0ecf 100644
@@ -132,16 +132,19 @@ obj-$(CONFIG_MACH_NOKIA_RX51)		+= board-
 rx51.o \
 					   hsmmc.o
 obj-$(CONFIG_MACH_OMAP_ZOOM2)		+= board-zoom2.o \
 					   board-zoom-peripherals.o \
+					   board-zoom-display.o \
 					   board-flash.o \
 					   hsmmc.o \
 					   board-zoom-debugboard.o
 obj-$(CONFIG_MACH_OMAP_ZOOM3)		+= board-zoom3.o \
 					   board-zoom-peripherals.o \
+					   board-zoom-display.o \
 					   board-flash.o \
 					   hsmmc.o \
 					   board-zoom-debugboard.o
 obj-$(CONFIG_MACH_OMAP_3630SDP)		+= board-3630sdp.o \
 					   board-zoom-peripherals.o \
+					   board-zoom-display.o \
 					   board-flash.o \
 					   hsmmc.o

obj-$(CONFIG_MACH_CM_T35) += board-cm-t35.o \

arch/arm/mach- renamed from arch/arm/mach-omap2/board-zoom-display.c +0 -0

omap2/board-zoom-display.c
new file mode 100644
index 0000000..1e0b3da

arch/arm/mach-omap2/board-zoom-display.c new file +10 -0
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2010 Texas Instruments Inc.
+ *
+ * Modified from mach-omap2/board-zoom-peripherals.c
+ *
+ * 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.
+ */
+

arch/arm/mach-omap2/board-zoom-display.c line 20

Quoted 10 lines
arch/arm/mach-omap2/board-zoom-display.c new file +10 -0
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/gpio.h>
+#include <linux/i2c/twl.h>
+#include <linux/spi/spi.h>
+#include <plat/mcspi.h>
+#include <plat/display.h>
+
+#define LCD_PANEL_ENABLE_GPIO		(7 + OMAP_MAX_GPIO_LINES)

[Hiremath, Vaibhav] Are you sure that you don't want to use this GPIO in your enable/disable callback API?

Quoted 57 lines
arch/arm/mach-omap2/board-zoom-display.c new file +52 -0
+#define LCD_PANEL_RESET_GPIO_PROD	96
+#define LCD_PANEL_RESET_GPIO_PILOT	55
+#define LCD_PANEL_QVGA_GPIO		56
+
+static void zoom_lcd_panel_init(void)
+{
+	int ret;
+	unsigned char lcd_panel_reset_gpio;
+
+	lcd_panel_reset_gpio = (omap_rev() > OMAP3430_REV_ES3_0) ?
+			LCD_PANEL_RESET_GPIO_PROD :
+			LCD_PANEL_RESET_GPIO_PILOT;
+
+	ret = gpio_request(lcd_panel_reset_gpio, "lcd reset");
+	if (ret) {
+		pr_err("Failed to get LCD reset GPIO (gpio%d).\n",
+			lcd_panel_reset_gpio);
+		return;
+	}
+	gpio_direction_output(lcd_panel_reset_gpio, 1);
+
+	ret = gpio_request(LCD_PANEL_QVGA_GPIO, "lcd qvga");
+	if (ret) {
+		pr_err("Failed to get LCD_PANEL_QVGA_GPIO (gpio%d).\n",
+			LCD_PANEL_QVGA_GPIO);
+		goto err0;
+	}
+	gpio_direction_output(LCD_PANEL_QVGA_GPIO, 1);
+
+	return;
+err0:
+	gpio_free(lcd_panel_reset_gpio);
+}
+
+static int zoom_panel_enable_lcd(struct omap_dss_device *dssdev)
+{
+	return 0;
+}
+
+static void zoom_panel_disable_lcd(struct omap_dss_device *dssdev)
+{
+}
+
+/*
+ * PWMA/B register offsets (TWL4030_MODULE_PWMA)
+ */
+#define TWL_INTBR_PMBR1	0xD
+#define TWL_INTBR_GPBR1	0xC
+#define TWL_LED_PWMON	0x0
+#define TWL_LED_PWMOFF	0x1
+
+static int zoom_set_bl_intensity(struct omap_dss_device *dssdev, int

level)

arch/arm/mach-omap2/board-zoom-display.c new file +4 -0
+{
+	unsigned char c;
+	u8 mux_pwm, enb_pwm;
+

arch/arm/mach-omap2/board-zoom-display.c line 86

Quoted 10 lines
arch/arm/mach-omap2/board-zoom-display.c new file +10 -0
+	if (level > 100)
+		return -1;
+
+	twl_i2c_read_u8(TWL4030_MODULE_INTBR, &mux_pwm, TWL_INTBR_PMBR1);
+	twl_i2c_read_u8(TWL4030_MODULE_INTBR, &enb_pwm, TWL_INTBR_GPBR1);
+
+	if (level == 0) {
+		/* disable pwm1 output and clock */
+		enb_pwm = enb_pwm & 0xF5;
+		/* change pwm1 pin to gpio pin */

[Hiremath, Vaibhav] If I understand correctly you don't have to configure this to GPIO mode and again to PWM mode every time. In case of oMAP3EVM we have something -

                c = ((125 * (100 - intensity)) / 100) + 1;
                twl_i2c_write_u8(TWL4030_MODULE_PWMA, 0x7F,
                                TWL_LED_PWMOFF);
                twl_i2c_write_u8(TWL4030_MODULE_PWMA, c,
                                TWL_LED_PWMON);

This should be enough to handle all the

Thanks,
Vaibhav

Quoted 189 lines
arch/arm/mach-omap2/board-zoom-display.c new file +79 -0
+		mux_pwm = mux_pwm & 0xCF;
+		twl_i2c_write_u8(TWL4030_MODULE_INTBR,
+					enb_pwm, TWL_INTBR_GPBR1);
+		twl_i2c_write_u8(TWL4030_MODULE_INTBR,
+					mux_pwm, TWL_INTBR_PMBR1);
+		return 0;
+	}
+
+	/* change gpio pin to pwm1 pin */
+	mux_pwm = mux_pwm | 0x30;
+	/* enable pwm1 output and clock*/
+	enb_pwm = enb_pwm | 0x0A;
+	twl_i2c_write_u8(TWL4030_MODULE_INTBR, mux_pwm, TWL_INTBR_PMBR1);
+	twl_i2c_write_u8(TWL4030_MODULE_INTBR, enb_pwm, TWL_INTBR_GPBR1);
+
+	c = ((50 * (100 - level)) / 100) + 1;
+	twl_i2c_write_u8(TWL4030_MODULE_PWM1, 0x7F, TWL_LED_PWMOFF);
+	twl_i2c_write_u8(TWL4030_MODULE_PWM1, c, TWL_LED_PWMON);
+
+	return 0;
+}
+
+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,
+	.max_backlight_level	= 100,
+	.set_backlight		= zoom_set_bl_intensity,
+};
+
+static struct omap_dss_device *zoom_dss_devices[] = {
+	&zoom_lcd_device,
+};
+
+static struct omap_dss_board_info zoom_dss_data = {
+	.num_devices		= ARRAY_SIZE(zoom_dss_devices),
+	.devices		= zoom_dss_devices,
+	.default_device		= &zoom_lcd_device,
+};
+
+static struct platform_device zoom_dss_device = {
+	.name				= "omapdss",
+	.id				= -1,
+	.dev				= {
+		.platform_data		= &zoom_dss_data,
+	},
+};
+
+static struct omap2_mcspi_device_config dss_lcd_mcspi_config = {
+	.turbo_mode		= 1,
+	.single_channel	= 1,  /* 0: slave, 1: master */
+};
+
+static struct spi_board_info nec_8048_spi_board_info[] __initdata = {
+	[0] = {
+		.modalias		= "nec_8048_spi",
+		.bus_num		= 1,
+		.chip_select		= 2,
+		.max_speed_hz		= 375000,
+		.controller_data	= &dss_lcd_mcspi_config,
+	},
+};
+
+static struct platform_device *zoom_display_devices[] __initdata = {
+	&zoom_dss_device,
+};
+
+void __init zoom_display_init(void)
+{
+	platform_add_devices(zoom_display_devices,
+				ARRAY_SIZE(zoom_display_devices));
+	spi_register_board_info(nec_8048_spi_board_info,
+				ARRAY_SIZE(nec_8048_spi_board_info));
+	zoom_lcd_panel_init();
+}
+
arch/arm/mach- renamed from arch/arm/mach-omap2/board-zoom-peripherals.c +0 -0

omap2/board-zoom-peripherals.c
index 6b39849..ebcfbed 100644

arch/arm/mach-omap2/board-zoom-peripherals.c +47 -2
@@ -27,6 +27,8 @@
 #include "mux.h"
 #include "hsmmc.h"
 
+#define LCD_PANEL_ENABLE_GPIO		(7 + OMAP_MAX_GPIO_LINES)
+
 /* Zoom2 has Qwerty keyboard*/
 static int board_keymap[] = {
 	KEY(0, 0, KEY_E),
@@ -171,9 +173,43 @@ static struct omap2_hsmmc_info mmc[] __initdata = {
 	{}      /* Terminator */
 };
 
+static struct regulator_consumer_supply zoom_vpll2_supply =
+	REGULATOR_SUPPLY("vdds_dsi", "omapdss");
+
+static struct regulator_consumer_supply zoom_vdda_dac_supply =
+	REGULATOR_SUPPLY("vdda_dac", "omapdss");
+
+static struct regulator_init_data zoom_vpll2 = {
+	.constraints = {
+		.min_uV                 = 1800000,
+		.max_uV                 = 1800000,
+		.valid_modes_mask       = REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask         = REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+	.num_consumer_supplies		= 1,
+	.consumer_supplies		= &zoom_vpll2_supply,
+};
+
+static struct regulator_init_data zoom_vdac = {
+	.constraints = {
+		.min_uV                 = 1800000,
+		.max_uV                 = 1800000,
+		.valid_modes_mask       = REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask         = REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+	.num_consumer_supplies		= 1,
+	.consumer_supplies		= &zoom_vdda_dac_supply,
+};
+
 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;
 	omap2_hsmmc_init(mmc);
@@ -185,7 +221,15 @@ static int zoom_twl_gpio_setup(struct device *dev,
 	zoom_vsim_supply.dev = mmc[0].dev;
 	zoom_vmmc2_supply.dev = mmc[1].dev;
 
-	return 0;
+	ret = gpio_request(LCD_PANEL_ENABLE_GPIO, "lcd enable");
+	if (ret) {
+		pr_err("Failed to get LCD_PANEL_ENABLE_GPIO (gpio%d).\n",
+				LCD_PANEL_ENABLE_GPIO);
+		return ret;
+	}
+	gpio_direction_output(LCD_PANEL_ENABLE_GPIO, 0);
+
+	return ret;
 }
 
 
@@ -243,7 +287,8 @@ static struct twl4030_platform_data zoom_twldata = {
 	.vmmc1          = &zoom_vmmc1,
 	.vmmc2          = &zoom_vmmc2,
 	.vsim           = &zoom_vsim,
-
+	.vpll2		= &zoom_vpll2,
+	.vdac		= &zoom_vdac,
 };
 
 static struct i2c_board_info __initdata zoom_i2c_boardinfo[] = {
arch/arm/mach-omap2/include/mach/board-zoom.h +2 -1
index 3af69d2..8d8eeb2 100644
@@ -3,9 +3,11 @@
  */
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
+#include <plat/display.h>
 
 #define ZOOM_NAND_CS    0
 
 extern void __init board_nand_init(struct mtd_partition *, u8 nr_parts,
 u8 cs);
 extern int __init zoom_debugboard_init(void);
 extern void __init zoom_peripherals_init(void);
+extern void __init zoom_display_init(void);
--

1.5.6.3

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

#4 lore raw

RE: [PATCH 1/2] OMAP3: ZOOM2/3/3630SDP: Add display board file for OMAP3

Quoted 68 lines · Vaibhav
Quoted 68 lines

-----Original Message-----
From: [email protected] [mailto:linux-omap- [email protected]] On Behalf Of Nilofer, Samreen
Sent: Thursday, October 14, 2010 4:57 PM
To: [email protected]
Cc: Kishore Y; Mittal, Mukund; Rajkumar N; Nilofer, Samreen
Subject: [PATCH 1/2] OMAP3: ZOOM2/3/3630SDP: Add display board file for OMAP3

From: Kishore Y <[email protected]>

Board-zoom-display.c added as a common file for display functionality on boards zoom2, zoom3 and 3630sdp

---
 arch/arm/mach-omap2/Makefile                  |    3 +
 arch/arm/mach-omap2/board-zoom-display.c      |  165
 +++++++++++++++++++++++++ arch/arm/mach-omap2/board-zoom-peripherals.c  |  
 49 +++++++- arch/arm/mach-omap2/include/mach/board-zoom.h |    2 +
 4 files changed, 217 insertions(+), 2 deletions(-)  create mode

100644 arch/arm/mach-omap2/board-zoom-display.c

(quoted diff) +0 -0

b/arch/arm/mach-omap2/Makefile index 88d3a1e..95e0ecf 100644

arch/arm/mach-omap2/Makefile +3 -0
@@ -132,16 +132,19 @@ obj-$(CONFIG_MACH_NOKIA_RX51) += board- rx51.o \
 					   hsmmc.o
 obj-$(CONFIG_MACH_OMAP_ZOOM2)		+= board-zoom2.o \
 					   board-zoom-peripherals.o \
+					   board-zoom-display.o \
 					   board-flash.o \
 					   hsmmc.o \
 					   board-zoom-debugboard.o
 obj-$(CONFIG_MACH_OMAP_ZOOM3)		+= board-zoom3.o \
 					   board-zoom-peripherals.o \
+					   board-zoom-display.o \
 					   board-flash.o \
 					   hsmmc.o \
 					   board-zoom-debugboard.o
 obj-$(CONFIG_MACH_OMAP_3630SDP)		+= board-3630sdp.o \
 					   board-zoom-peripherals.o \
+					   board-zoom-display.o \
 					   board-flash.o \
 					   hsmmc.o
 obj-$(CONFIG_MACH_CM_T35)		+= board-cm-t35.o \
arch/arm/mach- renamed from arch/arm/mach-omap2/board-zoom-display.c +0 -0

omap2/board-zoom-display.c new file mode 100644 index 0000000..1e0b3da --- /dev/null +++ b/arch/arm/mach-omap2/board-zoom-display.c

arch/arm/mach- renamed from arch/arm/mach-omap2/board-zoom-display.c +14 -0
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2010 Texas Instruments Inc.
+ *
+ * Modified from mach-omap2/board-zoom-peripherals.c + *
+ * 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/gpio.h>
+#include <linux/i2c/twl.h>
Quoted 9 lines

arch/arm/mach- line 19

Quoted 5 lines
arch/arm/mach- renamed from arch/arm/mach-omap2/board-zoom-display.c +5 -0
+#include <linux/spi/spi.h>
+#include <plat/mcspi.h>
+#include <plat/display.h>
+
+#define LCD_PANEL_ENABLE_GPIO		(7 +

OMAP_MAX_GPIO_LINES)
[Hiremath, Vaibhav] Are you sure that you don't want to use this GPIO in your enable/disable callback API?

[Samreen]
This will be taken care through the Backlight function,
Where it would be enabled/disabled accordingly.
I will remove this define from this file as it is not used.

Quoted 65 lines
Quoted 44 lines
arch/arm/mach- renamed from arch/arm/mach-omap2/board-zoom-display.c +30 -0
+#define LCD_PANEL_RESET_GPIO_PROD	96
+#define LCD_PANEL_RESET_GPIO_PILOT	55
+#define LCD_PANEL_QVGA_GPIO		56
+
+static void zoom_lcd_panel_init(void) {
+	int ret;
+	unsigned char lcd_panel_reset_gpio;
+
+	lcd_panel_reset_gpio = (omap_rev() > OMAP3430_REV_ES3_0) ?
+			LCD_PANEL_RESET_GPIO_PROD :
+			LCD_PANEL_RESET_GPIO_PILOT;
+
+	ret = gpio_request(lcd_panel_reset_gpio, "lcd reset"); +	if (ret) {
+		pr_err("Failed to get LCD reset GPIO (gpio%d).\n",
+			lcd_panel_reset_gpio); +		return;
+	}
+	gpio_direction_output(lcd_panel_reset_gpio, 1);
+
+	ret = gpio_request(LCD_PANEL_QVGA_GPIO, "lcd qvga"); +	if (ret) {
+		pr_err("Failed to get LCD_PANEL_QVGA_GPIO (gpio%d).\n",
+			LCD_PANEL_QVGA_GPIO); +		goto err0;
+	}
+	gpio_direction_output(LCD_PANEL_QVGA_GPIO, 1);
+
+	return;
+err0:
+	gpio_free(lcd_panel_reset_gpio);
+}
+
+static int zoom_panel_enable_lcd(struct omap_dss_device *dssdev) { +	return

0; +}

arch/arm/mach- renamed from arch/arm/mach-omap2/board-zoom-display.c +5 -0
+
+static void zoom_panel_disable_lcd(struct omap_dss_device *dssdev) { +}
+
+/*
+ * PWMA/B register offsets (TWL4030_MODULE_PWMA)  */ +#define

TWL_INTBR_PMBR1 0xD +#define TWL_INTBR_GPBR1 0xC

arch/arm/mach- renamed from arch/arm/mach-omap2/board-zoom-display.c +7 -0
+#define TWL_LED_PWMON	0x0
+#define TWL_LED_PWMOFF	0x1
+
+static int zoom_set_bl_intensity(struct omap_dss_device *dssdev, int level)
+{
+	unsigned char c;
+	u8 mux_pwm, enb_pwm;

arch/arm/mach-

Quoted 10 lines
arch/arm/mach- renamed from arch/arm/mach-omap2/board-zoom-display.c +10 -0
+
+	if (level > 100)
+		return -1;
+
+	twl_i2c_read_u8(TWL4030_MODULE_INTBR, &mux_pwm, TWL_INTBR_PMBR1);
+	twl_i2c_read_u8(TWL4030_MODULE_INTBR, &enb_pwm, TWL_INTBR_GPBR1); +
+	if (level == 0) {
+		/* disable pwm1 output and clock */
+		enb_pwm = enb_pwm & 0xF5;
+		/* change pwm1 pin to gpio pin */

[Hiremath, Vaibhav] If I understand correctly you don't have to configure this to GPIO mode and again to PWM mode every time. In case of oMAP3EVM we have something -

                c = ((125 * (100 - intensity)) / 100) + 1;
                twl_i2c_write_u8(TWL4030_MODULE_PWMA, 0x7F,
                                TWL_LED_PWMOFF);
                twl_i2c_write_u8(TWL4030_MODULE_PWMA, c,
                                TWL_LED_PWMON);
Quoted 4 lines

This should be enough to handle all the

Thanks,
Vaibhav

[Samreen]
I will modify this code to change gpio mode to PWM1 mode only when
it is not in gpio mode. Instead of it being repeatedly configured

Quoted 177 lines
Quoted 177 lines
arch/arm/mach- renamed from arch/arm/mach-omap2/board-zoom-display.c +53 -0
+		mux_pwm = mux_pwm & 0xCF;
+		twl_i2c_write_u8(TWL4030_MODULE_INTBR,
+					enb_pwm, TWL_INTBR_GPBR1);
+		twl_i2c_write_u8(TWL4030_MODULE_INTBR,
+					mux_pwm, TWL_INTBR_PMBR1);
+		return 0;
+	}
+
+	/* change gpio pin to pwm1 pin */
+	mux_pwm = mux_pwm | 0x30;
+	/* enable pwm1 output and clock*/
+	enb_pwm = enb_pwm | 0x0A;
+	twl_i2c_write_u8(TWL4030_MODULE_INTBR, mux_pwm, TWL_INTBR_PMBR1);
+	twl_i2c_write_u8(TWL4030_MODULE_INTBR, enb_pwm, TWL_INTBR_GPBR1); +
+	c = ((50 * (100 - level)) / 100) + 1;
+	twl_i2c_write_u8(TWL4030_MODULE_PWM1, 0x7F, TWL_LED_PWMOFF);
+	twl_i2c_write_u8(TWL4030_MODULE_PWM1, c, TWL_LED_PWMON); +
+	return 0;
+}
+
+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,
+	.max_backlight_level	= 100,
+	.set_backlight		= zoom_set_bl_intensity,
+};
+
+static struct omap_dss_device *zoom_dss_devices[] = { +	&zoom_lcd_device,
+};
+
+static struct omap_dss_board_info zoom_dss_data = {
+	.num_devices		= ARRAY_SIZE(zoom_dss_devices),
+	.devices		= zoom_dss_devices,
+	.default_device		= &zoom_lcd_device,
+};
+
+static struct platform_device zoom_dss_device = {
+	.name				= "omapdss",
+	.id				= -1,
+	.dev				= {
+		.platform_data		= &zoom_dss_data,
+	},
+};
+
+static struct omap2_mcspi_device_config dss_lcd_mcspi_config = {
+	.turbo_mode		= 1, +	.single_channel	= 1,  /* 0: slave, 1: master */
+};
+
+static struct spi_board_info nec_8048_spi_board_info[] __initdata = { +	[0]

= { + .modalias = "nec_8048_spi",

arch/arm/mach- renamed from arch/arm/mach-omap2/board-zoom-display.c +19 -0
+		.bus_num		= 1,
+		.chip_select		= 2,
+		.max_speed_hz		= 375000,
+		.controller_data	= &dss_lcd_mcspi_config,
+	},
+};
+
+static struct platform_device *zoom_display_devices[] __initdata = {
+	&zoom_dss_device, +};
+
+void __init zoom_display_init(void)
+{
+	platform_add_devices(zoom_display_devices,
+				ARRAY_SIZE(zoom_display_devices));
+	spi_register_board_info(nec_8048_spi_board_info,
+				ARRAY_SIZE(nec_8048_spi_board_info));
+	zoom_lcd_panel_init();
+}
+
(quoted diff) +0 -0

b/arch/arm/mach- omap2/board-zoom-peripherals.c index 6b39849..ebcfbed 100644

arch/arm/mach-omap2/board-zoom-peripherals.c +44 -3
@@ -27,6 +27,8 @@
 #include "mux.h"
 #include "hsmmc.h"
 
+#define LCD_PANEL_ENABLE_GPIO		(7 + OMAP_MAX_GPIO_LINES) +
 /* Zoom2 has Qwerty keyboard*/
 static int board_keymap[] = {
 	KEY(0, 0, KEY_E),
@@ -171,9 +173,43 @@ static struct omap2_hsmmc_info mmc[] __initdata = { 
 {}      /* Terminator */ };
 
+static struct regulator_consumer_supply zoom_vpll2_supply =
+	REGULATOR_SUPPLY("vdds_dsi", "omapdss");
+
+static struct regulator_consumer_supply zoom_vdda_dac_supply =
+	REGULATOR_SUPPLY("vdda_dac", "omapdss");
+
+static struct regulator_init_data zoom_vpll2 = {
+	.constraints = {
+		.min_uV                 = 1800000,
+		.max_uV                 = 1800000,
+		.valid_modes_mask       = REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask         = REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+	.num_consumer_supplies		= 1,
+	.consumer_supplies		= &zoom_vpll2_supply,
+};
+
+static struct regulator_init_data zoom_vdac = {
+	.constraints = {
+		.min_uV                 = 1800000,
+		.max_uV                 = 1800000,
+		.valid_modes_mask       = REGULATOR_MODE_NORMAL
+					| REGULATOR_MODE_STANDBY,
+		.valid_ops_mask         = REGULATOR_CHANGE_MODE
+					| REGULATOR_CHANGE_STATUS,
+	},
+	.num_consumer_supplies		= 1,
+	.consumer_supplies		= &zoom_vdda_dac_supply,
+};
+
 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;
 	omap2_hsmmc_init(mmc);
@@ -185,7 +221,15 @@ static int zoom_twl_gpio_setup(struct device *dev,
 	zoom_vsim_supply.dev = mmc[0].dev;
 	zoom_vmmc2_supply.dev = mmc[1].dev;
 
-	return 0;
+	ret = gpio_request(LCD_PANEL_ENABLE_GPIO, "lcd enable"); +	if (ret) {
+		pr_err("Failed to get LCD_PANEL_ENABLE_GPIO (gpio%d).\n",
+				LCD_PANEL_ENABLE_GPIO); +		return ret;
+	}
+	gpio_direction_output(LCD_PANEL_ENABLE_GPIO, 0);
+
+	return ret;
 }
 
 
@@ -243,7 +287,8 @@ static struct twl4030_platform_data zoom_twldata = {
 	.vmmc1          = &zoom_vmmc1,
 	.vmmc2          = &zoom_vmmc2,
 	.vsim           = &zoom_vsim,
-
+	.vpll2		= &zoom_vpll2,
+	.vdac		= &zoom_vdac,
 };
 
 static struct i2c_board_info __initdata zoom_i2c_boardinfo[] = { diff
--git a/arch/arm/mach-omap2/include/mach/board-zoom.h

b/arch/arm/mach-omap2/include/mach/board-zoom.h
index 3af69d2..8d8eeb2 100644

arch/arm/mach-omap2/include/mach/board-zoom.h @@ -3,9 +3,11 @@ renamed from arch/arm/mach-omap2/include/mach/board-zoom.h +1 -0
  */
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
+#include <plat/display.h>
 
 #define ZOOM_NAND_CS    0
 
 extern void __init board_nand_init(struct mtd_partition *, u8 nr_parts,

u8 cs);
extern int __init zoom_debugboard_init(void); extern void __init
zoom_peripherals_init(void); +extern void __init zoom_display_init(void); --
1.5.6.3

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