[PATCH v9 00/18] OMAP2,3: hwmod DSS Adaptation

2011-01-22 Thread Sumit Semwal
v9 of this patch series adds reviewed-by and acked-by from Kevin Hilman.

v8 of the DSS hwmod patch series fixes some issues based on findings of 
Kevin Hilman on beagle.

The VENC platform driver was not getting registered due to missed device
name update for vdda_dac regulator in some board files. This was moved from
'omap_display' device to 'omap_venc' device in patch 14/18.

Also, similarly for DSI platform driver, the regulator name 'vdds_dsi' needs two
instances - one for dpi, and one for dsi.

This version corrects the above two for all board files where 'vdda_dac' and
'vdds_dsi' regulators are defined. [patches 14/18 and 15/18]

Post this change, boot w/ visible framebuffer and tux was successfully validated
on beagle, 3430SDP and zoom3.

A patch mentioned in 
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg42384.html
was needed to get OMAP3 to boot up on top of linux-next of 20110115.

OMAP4 hwmod support will be posted after the acceptance of this basic change in
the dss2 design.

-
[original patch introduction]

This patch series decouples the Clocks for DSS in hwmod adaptation changes
from this series.  Another series would be posted which could be discussed
w.r.t clocks in DSS across omap2,3.

Removing the SYSCONFIG settings from DSS driver would also be part of these
clock changes series and not covered in this series as it depends on some of
the omap_hwmod framework changes w.r.t opt clocks handling.

Summary of the hwmod DSS design:

DSS, DISPC, DSI, RFBI, VENC are made as platform drivers each 
corresponding to the hwmod class in the hwmod database. 

Each of these platform drivers' init / deinit are handled from core.c's
omap_dss_probe() in the exact sequence as required.

No Hardcoding of silicon data:
hwmod database abstracts the SOC data like base addr, irq numbers and are
implemented in this patch series.

Continue to have custom bus for display panels:
omap_display driver continues to be a platform driver that registers the 
custom
bus.  It also continues to register the display panels(omap_dss_device) on the
board to the panel drivers (omap_dss_driver)
For Eg:  primary lcd device would be registered with lcd panel driver.
lcd panel driver if it is on a parallel interface would use library functions 
exported from dpi.o.  if it is on a dsi interface would use library functions
exported from dsi platform driver(dsi.o).

Clocks:
Handling of clocks in DSS only is one of the design approaches, that does not
change the existing implementation.  If each of the DSS HW IPs had to handle
their own clocks, then corresponding clock changes can be requested in the hwmod
database as well which is not the current design/implementation.  As stated, 
this would be handled in another series seperately.
For Eg: VENC would need 54MCLK which is termed as dss_opt clocks as of now apart
for the dss main clocks.  Currently VENC driver needs to be aware of this and 
has to
use clk_get/put, clk_enable/disable, since VENC hwmod is not aware of 54MCLK.



Current dss driver:
---
1.  Omapdss platform driver
- initialises necessary Ips dss, dispc.
- also initialises Ips like sdi, dsi, venc, rfbi
- creates a custom bus and registers the display devices/drivers
connected on the board to the custom bus.

2.  Suspend/resume of omapdss
- in turn sends suspend/resume calls for each of the display devices
registered to it.

Modified change:
---
Platform driver for each DSS HW IP in addition to the software omap_display
driver.

Omapdss platform driver
- initialises necessary h/w IPs' platform drivers [dss, dispc, dsi, 
venc, rfbi]
  and software libraries like dpi, sdi.
- continues to have a custom bus and registers the display devices 
and drivers connected on the board to the custom bus.
- continues to handle suspend/resume of the display devices registered
to the custom bus.

DSS platform driver
- initialises DSS IP alone
- Handles the clocks related to the DSS and other DSSHW IPs like RFBI,
DSI, VENC, DISPC.  Previously this was a part of omapdss driver in 
core.c
- Continues to handle the DSS IRQs.
- No suspend/resume hooks.

DISPC platform driver
- initialises DISPC IP alone
- Gets the required clock from DSS platform driver.
- No suspend/resume hooks.
- Continues to provide DISPC library functions.

DSI platform driver
- initialises DSI IP alone
- Gets the required clock from DSS platform driver.
- No suspend/resume hooks.
- Continues to provide DSI library functions.

RFBI, VENC platform drivers
- initialises DSI,VENC IPs
- Gets the required clock from DSS platform driver.
- No suspend/resume hooks.
- Continues to provide RFBI and VENC library functions.

Testing:

[PATCH v9 01/18] OMAP2,3: DSS2: remove forced clk-disable from omap_dss_remove

2011-01-22 Thread Sumit Semwal
As part of omap hwmod changes, DSS will not be the only controller of its
clocks. hwmod initialization also enables the interface clocks, and
manages them.
So, when DSS is built as a module, omap_dss_remove doesn't try to disable
all clocks that have a higher usecount.

Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
---
 drivers/video/omap2/dss/core.c |   46 ++-
 1 files changed, 7 insertions(+), 39 deletions(-)

diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 8e89f60..ee56859 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -623,7 +623,6 @@ static int omap_dss_remove(struct platform_device *pdev)
 {
struct omap_dss_board_info *pdata = pdev-dev.platform_data;
int i;
-   int c;
 
dss_uninitialize_debugfs();
 
@@ -638,44 +637,13 @@ static int omap_dss_remove(struct platform_device *pdev)
 
dss_exit();
 
-   /* these should be removed at some point */
-   c = core.dss_ick-usecount;
-   if (c  0) {
-   DSSERR(warning: dss_ick usecount %d, disabling\n, c);
-   while (c--  0)
-   clk_disable(core.dss_ick);
-   }
-
-   c = core.dss1_fck-usecount;
-   if (c  0) {
-   DSSERR(warning: dss1_fck usecount %d, disabling\n, c);
-   while (c--  0)
-   clk_disable(core.dss1_fck);
-   }
-
-   c = core.dss2_fck-usecount;
-   if (c  0) {
-   DSSERR(warning: dss2_fck usecount %d, disabling\n, c);
-   while (c--  0)
-   clk_disable(core.dss2_fck);
-   }
-
-   c = core.dss_54m_fck-usecount;
-   if (c  0) {
-   DSSERR(warning: dss_54m_fck usecount %d, disabling\n, c);
-   while (c--  0)
-   clk_disable(core.dss_54m_fck);
-   }
-
-   if (core.dss_96m_fck) {
-   c = core.dss_96m_fck-usecount;
-   if (c  0) {
-   DSSERR(warning: dss_96m_fck usecount %d, disabling\n,
-   c);
-   while (c--  0)
-   clk_disable(core.dss_96m_fck);
-   }
-   }
+   /*
+* As part of hwmod changes, DSS is not the only controller of dss
+* clocks; hwmod framework itself will also enable clocks during hwmod
+* init for dss, and autoidle is set in h/w for DSS. Hence, there's no
+* need to disable clocks if their usecounts  1.
+*/
+   WARN_ON(core.num_clks_enabled  0);
 
dss_put_clocks();
 
-- 
1.7.1

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


[PATCH v9 02/18] OMAP2420: hwmod data: add DSS DISPC RFBI VENC

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

Hwmod needs database of all IPs in a system. This patch generates the hwmod
database for OMAP2420 Display Sub System,. Since DSS is also considered as an
IP as DISPC, RFBI, name it as dss_core.

Acked-by: Benoit Cousson b-cous...@ti.com
Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
---
 arch/arm/mach-omap2/omap_hwmod_2420_data.c |  311 +++-
 arch/arm/plat-omap/include/plat/l3_2xxx.h  |   20 ++
 arch/arm/plat-omap/include/plat/l4_2xxx.h  |   24 +++
 3 files changed, 354 insertions(+), 1 deletions(-)
 create mode 100644 arch/arm/plat-omap/include/plat/l3_2xxx.h
 create mode 100644 arch/arm/plat-omap/include/plat/l4_2xxx.h

diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c 
b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
index b85c630..21014de 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
@@ -18,7 +18,8 @@
 #include plat/serial.h
 #include plat/i2c.h
 #include plat/gpio.h
-
+#include plat/l3_2xxx.h
+#include plat/l4_2xxx.h
 #include omap_hwmod_common_data.h
 
 #include cm-regbits-24xx.h
@@ -38,6 +39,10 @@ static struct omap_hwmod omap2420_mpu_hwmod;
 static struct omap_hwmod omap2420_iva_hwmod;
 static struct omap_hwmod omap2420_l3_main_hwmod;
 static struct omap_hwmod omap2420_l4_core_hwmod;
+static struct omap_hwmod omap2420_dss_core_hwmod;
+static struct omap_hwmod omap2420_dss_dispc_hwmod;
+static struct omap_hwmod omap2420_dss_rfbi_hwmod;
+static struct omap_hwmod omap2420_dss_venc_hwmod;
 static struct omap_hwmod omap2420_wd_timer2_hwmod;
 static struct omap_hwmod omap2420_gpio1_hwmod;
 static struct omap_hwmod omap2420_gpio2_hwmod;
@@ -64,6 +69,19 @@ static struct omap_hwmod_ocp_if *omap2420_l3_main_slaves[] = 
{
omap2420_mpu__l3_main,
 };
 
+/* DSS - l3 */
+static struct omap_hwmod_ocp_if omap2420_dss__l3 = {
+   .master = omap2420_dss_core_hwmod,
+   .slave  = omap2420_l3_main_hwmod,
+   .fw = {
+   .omap2 = {
+   .l3_perm_bit  = OMAP2_L3_CORE_FW_CONNID_DSS,
+   .flags  = OMAP_FIREWALL_L3,
+   }
+   },
+   .user   = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
 /* Master interfaces on the L3 interconnect */
 static struct omap_hwmod_ocp_if *omap2420_l3_main_masters[] = {
omap2420_l3_main__l4_core,
@@ -470,6 +488,291 @@ static struct omap_hwmod omap2420_uart3_hwmod = {
.omap_chip  = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
 };
 
+/*
+ * 'dss' class
+ * display sub-system
+ */
+
+static struct omap_hwmod_class_sysconfig omap2420_dss_sysc = {
+   .rev_offs   = 0x,
+   .sysc_offs  = 0x0010,
+   .syss_offs  = 0x0014,
+   .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+   .sysc_fields= omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap2420_dss_hwmod_class = {
+   .name = dss,
+   .sysc = omap2420_dss_sysc,
+};
+
+/* dss */
+static struct omap_hwmod_irq_info omap2420_dss_irqs[] = {
+   { .irq = 25 },
+};
+
+static struct omap_hwmod_dma_info omap2420_dss_sdma_chs[] = {
+   { .name = dispc, .dma_req = 5 },
+};
+
+/* dss */
+/* dss master ports */
+static struct omap_hwmod_ocp_if *omap2420_dss_masters[] = {
+   omap2420_dss__l3,
+};
+
+static struct omap_hwmod_addr_space omap2420_dss_addrs[] = {
+   {
+   .pa_start   = 0x4805,
+   .pa_end = 0x480503FF,
+   .flags  = ADDR_TYPE_RT
+   },
+};
+
+/* l4_core - dss */
+static struct omap_hwmod_ocp_if omap2420_l4_core__dss = {
+   .master = omap2420_l4_core_hwmod,
+   .slave  = omap2420_dss_core_hwmod,
+   .clk= dss_ick,
+   .addr   = omap2420_dss_addrs,
+   .addr_cnt   = ARRAY_SIZE(omap2420_dss_addrs),
+   .fw = {
+   .omap2 = {
+   .l4_fw_region  = OMAP2420_L4_CORE_FW_DSS_CORE_REGION,
+   .flags  = OMAP_FIREWALL_L4,
+   }
+   },
+   .user   = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* dss slave ports */
+static struct omap_hwmod_ocp_if *omap2420_dss_slaves[] = {
+   omap2420_l4_core__dss,
+};
+
+static struct omap_hwmod_opt_clk dss_opt_clks[] = {
+   { .role = tv_clk, .clk = dss_54m_fck },
+   { .role = sys_clk, .clk = dss2_fck },
+};
+
+static struct omap_hwmod omap2420_dss_core_hwmod = {
+   .name   = dss_core,
+   .class  = omap2420_dss_hwmod_class,
+   .main_clk   = dss1_fck, /* instead of dss_fck */
+   .mpu_irqs   = omap2420_dss_irqs,
+   .mpu_irqs_cnt   = ARRAY_SIZE(omap2420_dss_irqs),
+   .sdma_reqs  = omap2420_dss_sdma_chs,
+   .sdma_reqs_cnt  = ARRAY_SIZE(omap2420_dss_sdma_chs),
+   .prcm   = {
+ 

[PATCH v9 03/18] OMAP2430: hwmod data: add DSS DISPC RFBI VENC

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

Hwmod needs database of all IPs in a system. This patch generates the hwmod
database for OMAP2430 Display Sub System. Since DSS is also considered as an
IP as DISPC, RFBI, name it as dss_core.

Acked-by: Benoit Cousson b-cous...@ti.com
Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
---
 arch/arm/mach-omap2/omap_hwmod_2430_data.c |  284 
 1 files changed, 284 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c 
b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
index 8ecfbcd..1ef3f3f 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
@@ -18,6 +18,7 @@
 #include plat/serial.h
 #include plat/i2c.h
 #include plat/gpio.h
+#include plat/l3_2xxx.h
 
 #include omap_hwmod_common_data.h
 
@@ -38,6 +39,10 @@ static struct omap_hwmod omap2430_mpu_hwmod;
 static struct omap_hwmod omap2430_iva_hwmod;
 static struct omap_hwmod omap2430_l3_main_hwmod;
 static struct omap_hwmod omap2430_l4_core_hwmod;
+static struct omap_hwmod omap2430_dss_core_hwmod;
+static struct omap_hwmod omap2430_dss_dispc_hwmod;
+static struct omap_hwmod omap2430_dss_rfbi_hwmod;
+static struct omap_hwmod omap2430_dss_venc_hwmod;
 static struct omap_hwmod omap2430_wd_timer2_hwmod;
 static struct omap_hwmod omap2430_gpio1_hwmod;
 static struct omap_hwmod omap2430_gpio2_hwmod;
@@ -65,6 +70,19 @@ static struct omap_hwmod_ocp_if *omap2430_l3_main_slaves[] = 
{
omap2430_mpu__l3_main,
 };
 
+/* DSS - l3 */
+static struct omap_hwmod_ocp_if omap2430_dss__l3 = {
+   .master = omap2430_dss_core_hwmod,
+   .slave  = omap2430_l3_main_hwmod,
+   .fw = {
+   .omap2 = {
+   .l3_perm_bit  = OMAP2_L3_CORE_FW_CONNID_DSS,
+   .flags  = OMAP_FIREWALL_L3,
+   }
+   },
+   .user   = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
 /* Master interfaces on the L3 interconnect */
 static struct omap_hwmod_ocp_if *omap2430_l3_main_masters[] = {
omap2430_l3_main__l4_core,
@@ -469,6 +487,266 @@ static struct omap_hwmod omap2430_uart3_hwmod = {
.omap_chip  = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
 };
 
+/*
+ * 'dss' class
+ * display sub-system
+ */
+
+static struct omap_hwmod_class_sysconfig omap2430_dss_sysc = {
+   .rev_offs   = 0x,
+   .sysc_offs  = 0x0010,
+   .syss_offs  = 0x0014,
+   .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+   .sysc_fields= omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap2430_dss_hwmod_class = {
+   .name = dss,
+   .sysc = omap2430_dss_sysc,
+};
+
+/* dss */
+static struct omap_hwmod_irq_info omap2430_dss_irqs[] = {
+   { .irq = 25 },
+};
+static struct omap_hwmod_dma_info omap2430_dss_sdma_chs[] = {
+   { .name = dispc, .dma_req = 5 },
+};
+
+/* dss */
+/* dss master ports */
+static struct omap_hwmod_ocp_if *omap2430_dss_masters[] = {
+   omap2430_dss__l3,
+};
+
+static struct omap_hwmod_addr_space omap2430_dss_addrs[] = {
+   {
+   .pa_start   = 0x4805,
+   .pa_end = 0x480503FF,
+   .flags  = ADDR_TYPE_RT
+   },
+};
+
+/* l4_core - dss */
+static struct omap_hwmod_ocp_if omap2430_l4_core__dss = {
+   .master = omap2430_l4_core_hwmod,
+   .slave  = omap2430_dss_core_hwmod,
+   .clk= dss_ick,
+   .addr   = omap2430_dss_addrs,
+   .addr_cnt   = ARRAY_SIZE(omap2430_dss_addrs),
+   .user   = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* dss slave ports */
+static struct omap_hwmod_ocp_if *omap2430_dss_slaves[] = {
+   omap2430_l4_core__dss,
+};
+
+static struct omap_hwmod_opt_clk dss_opt_clks[] = {
+   { .role = tv_clk, .clk = dss_54m_fck },
+   { .role = sys_clk, .clk = dss2_fck },
+};
+
+static struct omap_hwmod omap2430_dss_core_hwmod = {
+   .name   = dss_core,
+   .class  = omap2430_dss_hwmod_class,
+   .main_clk   = dss1_fck, /* instead of dss_fck */
+   .mpu_irqs   = omap2430_dss_irqs,
+   .mpu_irqs_cnt   = ARRAY_SIZE(omap2430_dss_irqs),
+   .sdma_reqs  = omap2430_dss_sdma_chs,
+   .sdma_reqs_cnt  = ARRAY_SIZE(omap2430_dss_sdma_chs),
+   .prcm   = {
+   .omap2 = {
+   .prcm_reg_id = 1,
+   .module_bit = OMAP24XX_EN_DSS1_SHIFT,
+   .module_offs = CORE_MOD,
+   .idlest_reg_id = 1,
+   .idlest_stdby_bit = OMAP24XX_ST_DSS_SHIFT,
+   },
+   },
+   .opt_clks   = dss_opt_clks,
+   .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
+   .slaves = omap2430_dss_slaves,
+   .slaves_cnt = 

[PATCH v9 04/18] OMAP3: hwmod data: add DSS DISPC RFBI DSI VENC

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

Hwmod needs database of all IPs in a system. This patch generates the hwmod
database for Display Sub System applicable for OMAP3430 and
OMAP36xx.  DSS is also considered as an IP as DISPC, RFBI and named as dss_core.
For all the IP modules in DSS, same clock is needed for enabling. Hwmod sees
DSS IPs as independent IPs, so same clock has to be repeated for .main_clk in
each IP.

This patch defines separate hwmod databases for OMAP3430ES1 and (OMAP3430ES2 and
OMAP36xx) as OMAP3430ES1 does not have IDLEST bit to poll on for dss IP, and 
also
the firewall regions are different between 3430es1 and later.

Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
---
 arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |  433 
 arch/arm/plat-omap/include/plat/l3_3xxx.h  |   20 ++
 arch/arm/plat-omap/include/plat/l4_3xxx.h  |   10 +
 3 files changed, 463 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/plat-omap/include/plat/l3_3xxx.h

diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c 
b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
index 8d81813..713165d 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -18,6 +18,7 @@
 #include plat/cpu.h
 #include plat/dma.h
 #include plat/serial.h
+#include plat/l3_3xxx.h
 #include plat/l4_3xxx.h
 #include plat/i2c.h
 #include plat/gpio.h
@@ -44,6 +45,12 @@ static struct omap_hwmod omap3xxx_l3_main_hwmod;
 static struct omap_hwmod omap3xxx_l4_core_hwmod;
 static struct omap_hwmod omap3xxx_l4_per_hwmod;
 static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
+static struct omap_hwmod omap3430es1_dss_core_hwmod;
+static struct omap_hwmod omap3xxx_dss_core_hwmod;
+static struct omap_hwmod omap3xxx_dss_dispc_hwmod;
+static struct omap_hwmod omap3xxx_dss_dsi1_hwmod;
+static struct omap_hwmod omap3xxx_dss_rfbi_hwmod;
+static struct omap_hwmod omap3xxx_dss_venc_hwmod;
 static struct omap_hwmod omap3xxx_i2c1_hwmod;
 static struct omap_hwmod omap3xxx_i2c2_hwmod;
 static struct omap_hwmod omap3xxx_i2c3_hwmod;
@@ -84,6 +91,19 @@ static struct omap_hwmod_ocp_if *omap3xxx_l3_main_slaves[] = 
{
omap3xxx_mpu__l3_main,
 };
 
+/* DSS - l3 */
+static struct omap_hwmod_ocp_if omap3xxx_dss__l3 = {
+   .master = omap3xxx_dss_core_hwmod,
+   .slave  = omap3xxx_l3_main_hwmod,
+   .fw = {
+   .omap2 = {
+   .l3_perm_bit  = OMAP3_L3_CORE_FW_INIT_ID_DSS,
+   .flags  = OMAP_FIREWALL_L3,
+   }
+   },
+   .user   = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
 /* Master interfaces on the L3 interconnect */
 static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = {
omap3xxx_l3_main__l4_core,
@@ -664,6 +684,410 @@ static struct omap_hwmod_class i2c_class = {
.sysc = i2c_sysc,
 };
 
+/*
+ * 'dss' class
+ * display sub-system
+ */
+
+static struct omap_hwmod_class_sysconfig omap3xxx_dss_sysc = {
+   .rev_offs   = 0x,
+   .sysc_offs  = 0x0010,
+   .syss_offs  = 0x0014,
+   .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+   .sysc_fields= omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap3xxx_dss_hwmod_class = {
+   .name = dss,
+   .sysc = omap3xxx_dss_sysc,
+};
+
+/* dss */
+static struct omap_hwmod_irq_info omap3xxx_dss_irqs[] = {
+   { .irq = 25 },
+};
+
+static struct omap_hwmod_dma_info omap3xxx_dss_sdma_chs[] = {
+   { .name = dispc, .dma_req = 5 },
+   { .name = dsi1, .dma_req = 74 },
+};
+
+/* dss */
+/* dss master ports */
+static struct omap_hwmod_ocp_if *omap3xxx_dss_masters[] = {
+   omap3xxx_dss__l3,
+};
+
+static struct omap_hwmod_addr_space omap3xxx_dss_addrs[] = {
+   {
+   .pa_start   = 0x4805,
+   .pa_end = 0x480503FF,
+   .flags  = ADDR_TYPE_RT
+   },
+};
+
+/* l4_core - dss */
+static struct omap_hwmod_ocp_if omap3430es1_l4_core__dss = {
+   .master = omap3xxx_l4_core_hwmod,
+   .slave  = omap3430es1_dss_core_hwmod,
+   .clk= dss_ick,
+   .addr   = omap3xxx_dss_addrs,
+   .addr_cnt   = ARRAY_SIZE(omap3xxx_dss_addrs),
+   .fw = {
+   .omap2 = {
+   .l4_fw_region  = OMAP3ES1_L4_CORE_FW_DSS_CORE_REGION,
+   .l4_prot_group = OMAP3_L4_CORE_FW_DSS_PROT_GROUP,
+   .flags  = OMAP_FIREWALL_L4,
+   }
+   },
+   .user   = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss = {
+   .master = omap3xxx_l4_core_hwmod,
+   .slave  = omap3xxx_dss_core_hwmod,
+   .clk= dss_ick,
+   .addr   = omap3xxx_dss_addrs,
+   

[PATCH v9 05/18] OMAP2,3 DSS2 Change driver name to omap_display

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

Change the driver name from omapdss to omap_display as the driver takes care of
the display devices ie number of panels, type of panels available in the
platform.  Change the device name in the board files and 2420,2430,3xxx clock
files from omapdss to omap_display to match the driver name.

Signed-off-by: Sumit Semwal sumit.sem...@ti.com
Acked-by: Paul Walmsley p...@pwsan.com
for: The clkdev changes in clock2420_data.c, clock2430_data.c, clock3xxx_data.c

Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
---
 arch/arm/mach-omap2/board-3430sdp.c  |2 +-
 arch/arm/mach-omap2/board-am3517evm.c|2 +-
 arch/arm/mach-omap2/board-cm-t35.c   |2 +-
 arch/arm/mach-omap2/board-devkit8000.c   |6 +++---
 arch/arm/mach-omap2/board-igep0020.c |2 +-
 arch/arm/mach-omap2/board-omap3beagle.c  |6 +++---
 arch/arm/mach-omap2/board-omap3evm.c |4 ++--
 arch/arm/mach-omap2/board-omap3pandora.c |8 
 arch/arm/mach-omap2/board-omap3stalker.c |2 +-
 arch/arm/mach-omap2/board-rx51-peripherals.c |4 ++--
 arch/arm/mach-omap2/board-rx51-video.c   |2 +-
 arch/arm/mach-omap2/board-zoom-display.c |2 +-
 arch/arm/mach-omap2/board-zoom-peripherals.c |4 ++--
 arch/arm/mach-omap2/clock2420_data.c |8 
 arch/arm/mach-omap2/clock2430_data.c |8 
 arch/arm/mach-omap2/clock3xxx_data.c |   14 +++---
 drivers/video/omap2/dss/core.c   |2 +-
 17 files changed, 39 insertions(+), 39 deletions(-)

diff --git a/arch/arm/mach-omap2/board-3430sdp.c 
b/arch/arm/mach-omap2/board-3430sdp.c
index d4e41ef..6f4e7cf 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -308,7 +308,7 @@ static struct omap_dss_board_info sdp3430_dss_data = {
 };
 
 static struct platform_device sdp3430_dss_device = {
-   .name   = omapdss,
+   .name   = omap_display,
.id = -1,
.dev= {
.platform_data = sdp3430_dss_data,
diff --git a/arch/arm/mach-omap2/board-am3517evm.c 
b/arch/arm/mach-omap2/board-am3517evm.c
index 10d60b7..6bb5f53 100644
--- a/arch/arm/mach-omap2/board-am3517evm.c
+++ b/arch/arm/mach-omap2/board-am3517evm.c
@@ -379,7 +379,7 @@ static struct omap_dss_board_info am3517_evm_dss_data = {
 };
 
 static struct platform_device am3517_evm_dss_device = {
-   .name   = omapdss,
+   .name   = omap_display,
.id = -1,
.dev= {
.platform_data  = am3517_evm_dss_data,
diff --git a/arch/arm/mach-omap2/board-cm-t35.c 
b/arch/arm/mach-omap2/board-cm-t35.c
index dac1416..79f87ec 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -402,7 +402,7 @@ static struct omap_dss_board_info cm_t35_dss_data = {
 };
 
 static struct platform_device cm_t35_dss_device = {
-   .name   = omapdss,
+   .name   = omap_display,
.id = -1,
.dev= {
.platform_data = cm_t35_dss_data,
diff --git a/arch/arm/mach-omap2/board-devkit8000.c 
b/arch/arm/mach-omap2/board-devkit8000.c
index 00bb1fc..ca8e1b1 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -199,7 +199,7 @@ static struct omap_dss_board_info devkit8000_dss_data = {
 };
 
 static struct platform_device devkit8000_dss_device = {
-   .name   = omapdss,
+   .name   = omap_display,
.id = -1,
.dev= {
.platform_data = devkit8000_dss_data,
@@ -207,7 +207,7 @@ static struct platform_device devkit8000_dss_device = {
 };
 
 static struct regulator_consumer_supply devkit8000_vdda_dac_supply =
-   REGULATOR_SUPPLY(vdda_dac, omapdss);
+   REGULATOR_SUPPLY(vdda_dac, omap_display);
 
 static uint32_t board_keymap[] = {
KEY(0, 0, KEY_1),
@@ -282,7 +282,7 @@ static struct twl4030_gpio_platform_data 
devkit8000_gpio_data = {
 };
 
 static struct regulator_consumer_supply devkit8000_vpll1_supply =
-   REGULATOR_SUPPLY(vdds_dsi, omapdss);
+   REGULATOR_SUPPLY(vdds_dsi, omap_display);
 
 /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
 static struct regulator_init_data devkit8000_vmmc1 = {
diff --git a/arch/arm/mach-omap2/board-igep0020.c 
b/arch/arm/mach-omap2/board-igep0020.c
index 3be85a1..23abfa3 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -486,7 +486,7 @@ static struct omap_dss_board_info igep2_dss_data = {
 };
 
 static struct platform_device igep2_dss_device = {
-   .name   = omapdss,
+   .name   = omap_display,
.id = -1,
.dev= {
.platform_data = 

[PATCH v9 06/18] OMAP2,3 DSS2 Use Regulator init with driver name

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

Use driver name in regulator inits needed for display instead of using device
structure name.

Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
---
 arch/arm/mach-omap2/board-3430sdp.c  |   11 +++
 arch/arm/mach-omap2/board-cm-t35.c   |   12 
 arch/arm/mach-omap2/board-igep0020.c |6 ++
 arch/arm/mach-omap2/board-omap3evm.c |6 ++
 arch/arm/mach-omap2/board-omap3stalker.c |   12 
 5 files changed, 15 insertions(+), 32 deletions(-)

diff --git a/arch/arm/mach-omap2/board-3430sdp.c 
b/arch/arm/mach-omap2/board-3430sdp.c
index 6f4e7cf..d99902c 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -315,10 +315,8 @@ static struct platform_device sdp3430_dss_device = {
},
 };
 
-static struct regulator_consumer_supply sdp3430_vdda_dac_supply = {
-   .supply = vdda_dac,
-   .dev= sdp3430_dss_device.dev,
-};
+static struct regulator_consumer_supply sdp3430_vdda_dac_supply =
+   REGULATOR_SUPPLY(vdda_dac, omap_display);
 
 static struct platform_device *sdp3430_devices[] __initdata = {
sdp3430_dss_device,
@@ -546,10 +544,7 @@ static struct regulator_init_data sdp3430_vdac = {
 
 /* VPLL2 for digital video outputs */
 static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
-   {
-   .supply = vdds_dsi,
-   .dev= sdp3430_dss_device.dev,
-   }
+   REGULATOR_SUPPLY(vdds_dsi, omap_display),
 };
 
 static struct regulator_init_data sdp3430_vpll2 = {
diff --git a/arch/arm/mach-omap2/board-cm-t35.c 
b/arch/arm/mach-omap2/board-cm-t35.c
index 79f87ec..22322d1 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -495,15 +495,11 @@ static struct regulator_consumer_supply 
cm_t35_vsim_supply = {
.supply = vmmc_aux,
 };
 
-static struct regulator_consumer_supply cm_t35_vdac_supply = {
-   .supply = vdda_dac,
-   .dev= cm_t35_dss_device.dev,
-};
+static struct regulator_consumer_supply cm_t35_vdac_supply =
+   REGULATOR_SUPPLY(vdda_dac, omap_display);
 
-static struct regulator_consumer_supply cm_t35_vdvi_supply = {
-   .supply = vdvi,
-   .dev= cm_t35_dss_device.dev,
-};
+static struct regulator_consumer_supply cm_t35_vdvi_supply =
+   REGULATOR_SUPPLY(vdvi, omap_display);
 
 /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
 static struct regulator_init_data cm_t35_vmmc1 = {
diff --git a/arch/arm/mach-omap2/board-igep0020.c 
b/arch/arm/mach-omap2/board-igep0020.c
index 23abfa3..238c69e 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -493,10 +493,8 @@ static struct platform_device igep2_dss_device = {
},
 };
 
-static struct regulator_consumer_supply igep2_vpll2_supply = {
-   .supply = vdds_dsi,
-   .dev= igep2_dss_device.dev,
-};
+static struct regulator_consumer_supply igep2_vpll2_supply =
+   REGULATOR_SUPPLY(vdds_dsi, omap_display);
 
 static struct regulator_init_data igep2_vpll2 = {
.constraints = {
diff --git a/arch/arm/mach-omap2/board-omap3evm.c 
b/arch/arm/mach-omap2/board-omap3evm.c
index 4ad3c4d..32ac816 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -500,10 +500,8 @@ static struct twl4030_codec_data omap3evm_codec_data = {
.audio = omap3evm_audio_data,
 };
 
-static struct regulator_consumer_supply omap3_evm_vdda_dac_supply = {
-   .supply = vdda_dac,
-   .dev= omap3_evm_dss_device.dev,
-};
+static struct regulator_consumer_supply omap3_evm_vdda_dac_supply =
+   REGULATOR_SUPPLY(vdda_dac, omap_display);
 
 /* VDAC for DSS driving S-Video */
 static struct regulator_init_data omap3_evm_vdac = {
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c 
b/arch/arm/mach-omap2/board-omap3stalker.c
index 51c010c..7b675cb 100644
--- a/arch/arm/mach-omap2/board-omap3stalker.c
+++ b/arch/arm/mach-omap2/board-omap3stalker.c
@@ -448,10 +448,8 @@ static struct twl4030_codec_data omap3stalker_codec_data = 
{
.audio  = omap3stalker_audio_data,
 };
 
-static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply = {
-   .supply = vdda_dac,
-   .dev= omap3_stalker_dss_device.dev,
-};
+static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply =
+   REGULATOR_SUPPLY(vdda_dac, omap_display);
 
 /* VDAC for DSS driving S-Video */
 static struct regulator_init_data omap3_stalker_vdac = {
@@ -469,10 +467,8 @@ static struct regulator_init_data omap3_stalker_vdac = {
 };
 
 /* VPLL2 for digital video outputs */
-static struct regulator_consumer_supply 

[PATCH v9 07/18] OMAP2,3: DSS2: Create new file display.c for central dss driver registration.

2011-01-22 Thread Sumit Semwal
A new file display.c is introduced for display driver init, which adds a 
function
omap_display_init to do the DSS driver registration. This is the first step in 
moving
away registration of DSS from board files into a common place.

Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
---
 arch/arm/mach-omap2/Makefile  |3 ++
 arch/arm/mach-omap2/display.c |   46 +
 arch/arm/plat-omap/include/plat/display.h |   11 +++
 3 files changed, 60 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/display.c

diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 1c0c2b0..2e81173 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -242,3 +242,6 @@ obj-y   += $(smc91x-m) 
$(smc91x-y)
 
 smsc911x-$(CONFIG_SMSC911X):= gpmc-smsc911x.o
 obj-y  += $(smsc911x-m) $(smsc911x-y)
+
+disp-$(CONFIG_OMAP2_DSS)   := display.o
+obj-y  += $(disp-m) $(disp-y)
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
new file mode 100644
index 000..6e21cb8
--- /dev/null
+++ b/arch/arm/mach-omap2/display.c
@@ -0,0 +1,46 @@
+/*
+ * OMAP2plus display device setup / initialization.
+ *
+ * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
+ * Senthilvadivu Guruswamy
+ * Sumit Semwal
+ *
+ * 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.
+ *
+ * This program is distributed as is WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include linux/kernel.h
+#include linux/init.h
+#include linux/platform_device.h
+#include linux/io.h
+#include linux/clk.h
+#include linux/err.h
+
+#include plat/display.h
+
+static struct platform_device omap_display_device = {
+   .name  = omap_display,
+   .id= -1,
+   .dev= {
+   .platform_data = NULL,
+   },
+};
+
+int __init omap_display_init(struct omap_dss_board_info
+   *board_data)
+{
+   int r = 0;
+   omap_display_device.dev.platform_data = board_data;
+
+   r = platform_device_register(omap_display_device);
+   if (r  0)
+   printk(KERN_ERR Unable to register OMAP-Display device\n);
+
+   return r;
+}
diff --git a/arch/arm/plat-omap/include/plat/display.h 
b/arch/arm/plat-omap/include/plat/display.h
index 537f4e4..0f140ec 100644
--- a/arch/arm/plat-omap/include/plat/display.h
+++ b/arch/arm/plat-omap/include/plat/display.h
@@ -23,6 +23,7 @@
 #include linux/list.h
 #include linux/kobject.h
 #include linux/device.h
+#include linux/platform_device.h
 #include asm/atomic.h
 
 #define DISPC_IRQ_FRAMEDONE(1  0)
@@ -226,6 +227,16 @@ struct omap_dss_board_info {
struct omap_dss_device *default_device;
 };
 
+#if defined(CONFIG_OMAP2_DSS_MODULE) || defined(CONFIG_OMAP2_DSS)
+/* Init with the board info */
+extern int omap_display_init(struct omap_dss_board_info *board_data);
+#else
+static inline int omap_display_init(struct omap_dss_board_info *board_data)
+{
+   return 0;
+}
+#endif
+
 struct omap_video_timings {
/* Unit: pixels */
u16 x_res;
-- 
1.7.1

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


[PATCH v9 08/18] OMAP2,3: DSS2: board files: replace platform_device_register with omap_display_init()

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

This patch updated board files to replace platform_device_register or
platform_add_devices of DSS with omap_display_init(). This moves away
registration of DSS from board files into a common place.

Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
---
 arch/arm/mach-omap2/board-3430sdp.c  |   14 +-
 arch/arm/mach-omap2/board-am3517evm.c|   16 +---
 arch/arm/mach-omap2/board-cm-t35.c   |   10 +-
 arch/arm/mach-omap2/board-devkit8000.c   |   10 +-
 arch/arm/mach-omap2/board-igep0020.c |   10 +-
 arch/arm/mach-omap2/board-omap3beagle.c  |   10 +-
 arch/arm/mach-omap2/board-omap3evm.c |   14 +-
 arch/arm/mach-omap2/board-omap3pandora.c |   10 +-
 arch/arm/mach-omap2/board-omap3stalker.c |   10 +-
 arch/arm/mach-omap2/board-rx51-video.c   |   15 +--
 arch/arm/mach-omap2/board-zoom-display.c |   15 +--
 11 files changed, 11 insertions(+), 123 deletions(-)

diff --git a/arch/arm/mach-omap2/board-3430sdp.c 
b/arch/arm/mach-omap2/board-3430sdp.c
index d99902c..d00f356 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -307,21 +307,9 @@ static struct omap_dss_board_info sdp3430_dss_data = {
.default_device = sdp3430_lcd_device,
 };
 
-static struct platform_device sdp3430_dss_device = {
-   .name   = omap_display,
-   .id = -1,
-   .dev= {
-   .platform_data = sdp3430_dss_data,
-   },
-};
-
 static struct regulator_consumer_supply sdp3430_vdda_dac_supply =
REGULATOR_SUPPLY(vdda_dac, omap_display);
 
-static struct platform_device *sdp3430_devices[] __initdata = {
-   sdp3430_dss_device,
-};
-
 static struct omap_board_config_kernel sdp3430_config[] __initdata = {
 };
 
@@ -796,7 +784,7 @@ static void __init omap_3430sdp_init(void)
 {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap3430_i2c_init();
-   platform_add_devices(sdp3430_devices, ARRAY_SIZE(sdp3430_devices));
+   omap_display_init(sdp3430_dss_data);
if (omap_rev()  OMAP3430_REV_ES1_0)
ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV2;
else
diff --git a/arch/arm/mach-omap2/board-am3517evm.c 
b/arch/arm/mach-omap2/board-am3517evm.c
index 6bb5f53..548f524 100644
--- a/arch/arm/mach-omap2/board-am3517evm.c
+++ b/arch/arm/mach-omap2/board-am3517evm.c
@@ -378,24 +378,12 @@ static struct omap_dss_board_info am3517_evm_dss_data = {
.default_device = am3517_evm_lcd_device,
 };
 
-static struct platform_device am3517_evm_dss_device = {
-   .name   = omap_display,
-   .id = -1,
-   .dev= {
-   .platform_data  = am3517_evm_dss_data,
-   },
-};
-
 /*
  * Board initialization
  */
 static struct omap_board_config_kernel am3517_evm_config[] __initdata = {
 };
 
-static struct platform_device *am3517_evm_devices[] __initdata = {
-   am3517_evm_dss_device,
-};
-
 static void __init am3517_evm_init_irq(void)
 {
omap_board_config = am3517_evm_config;
@@ -495,9 +483,7 @@ static void __init am3517_evm_init(void)
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
 
am3517_evm_i2c_init();
-   platform_add_devices(am3517_evm_devices,
-   ARRAY_SIZE(am3517_evm_devices));
-
+   omap_display_init(am3517_evm_dss_data);
omap_serial_init();
 
/* Configure GPIO for EHCI port */
diff --git a/arch/arm/mach-omap2/board-cm-t35.c 
b/arch/arm/mach-omap2/board-cm-t35.c
index 22322d1..1c36ec8 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -401,14 +401,6 @@ static struct omap_dss_board_info cm_t35_dss_data = {
.default_device = cm_t35_dvi_device,
 };
 
-static struct platform_device cm_t35_dss_device = {
-   .name   = omap_display,
-   .id = -1,
-   .dev= {
-   .platform_data = cm_t35_dss_data,
-   },
-};
-
 static struct omap2_mcspi_device_config tdo24m_mcspi_config = {
.turbo_mode = 0,
.single_channel = 1,/* 0: slave, 1: master */
@@ -468,7 +460,7 @@ static void __init cm_t35_init_display(void)
msleep(50);
gpio_set_value(lcd_en_gpio, 1);
 
-   err = platform_device_register(cm_t35_dss_device);
+   err = omap_display_init(cm_t35_dss_data);
if (err) {
pr_err(CM-T35: failed to register DSS device\n);
goto err_dev_reg;
diff --git a/arch/arm/mach-omap2/board-devkit8000.c 
b/arch/arm/mach-omap2/board-devkit8000.c
index ca8e1b1..6a2eb49 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -198,14 +198,6 @@ static struct omap_dss_board_info 

[PATCH v9 09/18] OMAP2,3: DSS2: Build omap_device for each DSS HWIP

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

Looks up the hwmod database for each of the given DSS HW IP and builds
omap_device which inturn does the platform device register for each of DSS HW IP

Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
---
 arch/arm/mach-omap2/display.c |   50 +
 arch/arm/plat-omap/include/plat/display.h |5 +++
 2 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
index 6e21cb8..5c0a78b 100644
--- a/arch/arm/mach-omap2/display.c
+++ b/arch/arm/mach-omap2/display.c
@@ -23,6 +23,8 @@
 #include linux/err.h
 
 #include plat/display.h
+#include plat/omap_hwmod.h
+#include plat/omap_device.h
 
 static struct platform_device omap_display_device = {
.name  = omap_display,
@@ -32,10 +34,58 @@ static struct platform_device omap_display_device = {
},
 };
 
+static struct omap_device_pm_latency omap_dss_latency[] = {
+   [0] = {
+   .deactivate_func= omap_device_idle_hwmods,
+   .activate_func  = omap_device_enable_hwmods,
+   .flags  = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
+   },
+};
+
 int __init omap_display_init(struct omap_dss_board_info
*board_data)
 {
int r = 0;
+   struct omap_hwmod *oh;
+   struct omap_device *od;
+   int i;
+   struct omap_display_platform_data pdata;
+
+   /*
+* omap: valid DSS hwmod names
+* omap2,3: dss_core, dss_dispc, dss_rfbi, dss_venc
+* omap3: dss_dsi1
+*/
+   char *oh_name[] = {dss_core, dss_dispc, dss_rfbi, dss_venc, 
dss_dsi1};
+   char *dev_name[] = { omap_dss, omap_dispc, omap_rfbi, 
omap_venc, omap_dsi1 };
+   int oh_count;
+
+   memset(pdata, 0, sizeof(pdata));
+
+   if (cpu_is_omap24xx())
+   oh_count = ARRAY_SIZE(oh_name) - 1;
+   /* last hwmod dev in oh_name is not available for omap2 */
+   else
+   oh_count = ARRAY_SIZE(oh_name);
+
+   pdata.board_data = board_data;
+   pdata.board_data-get_last_off_on_transaction_id = NULL;
+
+   for (i = 0; i  oh_count; i++) {
+   oh = omap_hwmod_lookup(oh_name[i]);
+   if (!oh) {
+   pr_err(Could not look up %s\n, oh_name[i]);
+   return -ENODEV;
+   }
+   od = omap_device_build(dev_name[i], -1, oh, pdata,
+   sizeof(struct omap_display_platform_data),
+   omap_dss_latency,
+   ARRAY_SIZE(omap_dss_latency), 0);
+
+   if (WARN((IS_ERR(od)), Could not build omap_device for %s\n,
+   oh_name[i]))
+   return -ENODEV;
+   }
omap_display_device.dev.platform_data = board_data;
 
r = platform_device_register(omap_display_device);
diff --git a/arch/arm/plat-omap/include/plat/display.h 
b/arch/arm/plat-omap/include/plat/display.h
index 0f140ec..2fb057e 100644
--- a/arch/arm/plat-omap/include/plat/display.h
+++ b/arch/arm/plat-omap/include/plat/display.h
@@ -237,6 +237,11 @@ static inline int omap_display_init(struct 
omap_dss_board_info *board_data)
 }
 #endif
 
+struct omap_display_platform_data {
+   struct omap_dss_board_info *board_data;
+   /* TODO: Additional members to be added when PM is considered */
+};
+
 struct omap_video_timings {
/* Unit: pixels */
u16 x_res;
-- 
1.7.1

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


[PATCH v9 10/18] OMAP2,3: DSS2: DSS: create platform_driver, move init,exit to driver

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
So a platform_driver of DSS is created and init exit methods are moved from 
core.c
to its driver probe,remove. pdev member has to be maintained by its own drivers.

DSS platform driver is registered from inside omap_dss_probe, in the order 
desired.

Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
---
 drivers/video/omap2/dss/core.c |   19 ++---
 drivers/video/omap2/dss/dss.c  |   55 ++-
 drivers/video/omap2/dss/dss.h  |4 +-
 3 files changed, 64 insertions(+), 14 deletions(-)

diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 1bbc004..1aace9e 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -517,15 +517,9 @@ static int omap_dss_probe(struct platform_device *pdev)
core.ctx_id = dss_get_ctx_id();
DSSDBG(initial ctx id %u\n, core.ctx_id);
 
-#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
-   /* DISPC_CONTROL */
-   if (omap_readl(0x48050440)  1) /* LCD enabled? */
-   skip_init = 1;
-#endif
-
-   r = dss_init(skip_init);
+   r = dss_init_platform_driver();
if (r) {
-   DSSERR(Failed to initialize DSS\n);
+   DSSERR(Failed to initialize DSS platform driver\n);
goto err_dss;
}
 
@@ -553,6 +547,11 @@ static int omap_dss_probe(struct platform_device *pdev)
goto err_venc;
}
 
+#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
+   /* DISPC_CONTROL */
+   if (omap_readl(0x48050440)  1) /* LCD enabled? */
+   skip_init = 1;
+#endif
if (cpu_is_omap34xx()) {
r = sdi_init(skip_init);
if (r) {
@@ -610,7 +609,7 @@ err_dispc:
 err_dpi:
rfbi_exit();
 err_rfbi:
-   dss_exit();
+   dss_uninit_platform_driver();
 err_dss:
dss_clk_disable_all_no_ctx();
dss_put_clocks();
@@ -635,7 +634,7 @@ static int omap_dss_remove(struct platform_device *pdev)
sdi_exit();
}
 
-   dss_exit();
+   dss_uninit_platform_driver();
 
/*
 * As part of hwmod changes, DSS is not the only controller of dss
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 77c3621..d130f04 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -59,6 +59,7 @@ struct dss_reg {
dss_write_reg(idx, FLD_MOD(dss_read_reg(idx), val, start, end))
 
 static struct {
+   struct platform_device *pdev;
void __iomem*base;
 
struct clk  *dpll4_m4_ck;
@@ -549,7 +550,7 @@ void dss_set_dac_pwrdn_bgz(bool enable)
REG_FLD_MOD(DSS_CONTROL, enable, 5, 5); /* DAC Power-Down Control */
 }
 
-int dss_init(bool skip_init)
+static int dss_init(bool skip_init)
 {
int r;
u32 rev;
@@ -629,7 +630,7 @@ fail0:
return r;
 }
 
-void dss_exit(void)
+static void dss_exit(void)
 {
if (cpu_is_omap34xx())
clk_put(dss.dpll4_m4_ck);
@@ -639,3 +640,53 @@ void dss_exit(void)
iounmap(dss.base);
 }
 
+/* DSS HW IP initialisation */
+static int omap_dsshw_probe(struct platform_device *pdev)
+{
+   int r;
+   int skip_init = 0;
+
+   dss.pdev = pdev;
+
+#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
+   /* DISPC_CONTROL */
+   if (omap_readl(0x48050440)  1) /* LCD enabled? */
+   skip_init = 1;
+#endif
+
+   r = dss_init(skip_init);
+   if (r) {
+   DSSERR(Failed to initialize DSS\n);
+   goto err_dss;
+   }
+
+err_dss:
+
+   return r;
+}
+
+static int omap_dsshw_remove(struct platform_device *pdev)
+{
+   dss_exit();
+
+   return 0;
+}
+
+static struct platform_driver omap_dsshw_driver = {
+   .probe  = omap_dsshw_probe,
+   .remove = omap_dsshw_remove,
+   .driver = {
+   .name   = omap_dss,
+   .owner  = THIS_MODULE,
+   },
+};
+
+int dss_init_platform_driver(void)
+{
+   return platform_driver_register(omap_dsshw_driver);
+}
+
+void dss_uninit_platform_driver(void)
+{
+   return platform_driver_unregister(omap_dsshw_driver);
+}
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index b394951..37c4544 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -214,8 +214,8 @@ void dss_overlay_setup_l4_manager(struct 
omap_overlay_manager *mgr);
 void dss_recheck_connections(struct omap_dss_device *dssdev, bool force);
 
 /* DSS */
-int dss_init(bool skip_init);
-void dss_exit(void);
+int dss_init_platform_driver(void);
+void dss_uninit_platform_driver(void);
 
 void dss_save_context(void);
 void dss_restore_context(void);
-- 
1.7.1

--
To unsubscribe from this 

[PATCH v9 11/18] OMAP2,3: DSS2: Move clocks from core driver to dss driver

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

All clock management is moved to dss platform driver. clk_get/put APIs use
dss device instead of core platform device.

Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
So the device name is changed from omap_display to omap_dss in 2420, 2430,
3xxx clock database files. Now the core driver omap_display only takes care
of panel registration with the custom bus.
core driver also uses the clk_enable() / clk_disable() APIs exposed by DSS for
clock management.
DSS driver would do clock management of clocks needed by DISPC, RFBI, DSI, VENC

TODO:  The clock content would be adapted to omap_hwmod in a seperate series.

Acked-by: Paul Walmsley p...@pwsan.com
Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
---
 arch/arm/mach-omap2/clock2420_data.c |8 +-
 arch/arm/mach-omap2/clock2430_data.c |8 +-
 arch/arm/mach-omap2/clock3xxx_data.c |   14 +-
 drivers/video/omap2/dss/core.c   |  343 +-
 drivers/video/omap2/dss/dss.c|  334 +-
 drivers/video/omap2/dss/dss.h|   13 +-
 6 files changed, 360 insertions(+), 360 deletions(-)

diff --git a/arch/arm/mach-omap2/clock2420_data.c 
b/arch/arm/mach-omap2/clock2420_data.c
index b412958..d2abc2f 100644
--- a/arch/arm/mach-omap2/clock2420_data.c
+++ b/arch/arm/mach-omap2/clock2420_data.c
@@ -1786,10 +1786,10 @@ static struct omap_clk omap2420_clks[] = {
CLK(NULL,   gfx_2d_fck,   gfx_2d_fck,CK_242X),
CLK(NULL,   gfx_ick,  gfx_ick,   CK_242X),
/* DSS domain clocks */
-   CLK(omap_display, ick,  dss_ick,   CK_242X),
-   CLK(omap_display, dss1_fck, dss1_fck,  CK_242X),
-   CLK(omap_display, dss2_fck, dss2_fck,  CK_242X),
-   CLK(omap_display, tv_fck,   dss_54m_fck,   CK_242X),
+   CLK(omap_dss, ick,  dss_ick,   CK_242X),
+   CLK(omap_dss, dss1_fck, dss1_fck,  CK_242X),
+   CLK(omap_dss, dss2_fck, dss2_fck,  CK_242X),
+   CLK(omap_dss, tv_fck,   dss_54m_fck,   CK_242X),
/* L3 domain clocks */
CLK(NULL,   core_l3_ck,   core_l3_ck,CK_242X),
CLK(NULL,   ssi_fck,  ssi_ssr_sst_fck, CK_242X),
diff --git a/arch/arm/mach-omap2/clock2430_data.c 
b/arch/arm/mach-omap2/clock2430_data.c
index 039155e..663f298 100644
--- a/arch/arm/mach-omap2/clock2430_data.c
+++ b/arch/arm/mach-omap2/clock2430_data.c
@@ -1890,10 +1890,10 @@ static struct omap_clk omap2430_clks[] = {
CLK(NULL,   mdm_ick,  mdm_ick,   CK_243X),
CLK(NULL,   mdm_osc_ck,   mdm_osc_ck,CK_243X),
/* DSS domain clocks */
-   CLK(omap_display, ick,  dss_ick,   CK_243X),
-   CLK(omap_display, dss1_fck, dss1_fck,  CK_243X),
-   CLK(omap_display, dss2_fck, dss2_fck,  CK_243X),
-   CLK(omap_display, tv_fck,   dss_54m_fck,   CK_243X),
+   CLK(omap_dss, ick,  dss_ick,   CK_243X),
+   CLK(omap_dss, dss1_fck, dss1_fck,  CK_243X),
+   CLK(omap_dss, dss2_fck, dss2_fck,  CK_243X),
+   CLK(omap_dss, tv_fck,   dss_54m_fck,   CK_243X),
/* L3 domain clocks */
CLK(NULL,   core_l3_ck,   core_l3_ck,CK_243X),
CLK(NULL,   ssi_fck,  ssi_ssr_sst_fck, CK_243X),
diff --git a/arch/arm/mach-omap2/clock3xxx_data.c 
b/arch/arm/mach-omap2/clock3xxx_data.c
index 8618262..5c97b93 100644
--- a/arch/arm/mach-omap2/clock3xxx_data.c
+++ b/arch/arm/mach-omap2/clock3xxx_data.c
@@ -3357,13 +3357,13 @@ static struct omap_clk omap3xxx_clks[] = {
CLK(omap_rng, ick,  rng_ick,   CK_34XX | CK_36XX),
CLK(NULL,   sha11_ick,sha11_ick, CK_34XX | CK_36XX),
CLK(NULL,   des1_ick, des1_ick,  CK_34XX | CK_36XX),
-   CLK(omap_display, dss1_fck, dss1_alwon_fck_3430es1, 
CK_3430ES1),
-   CLK(omap_display, dss1_fck, dss1_alwon_fck_3430es2, 
CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
-   CLK(omap_display, tv_fck,   dss_tv_fck,CK_3XXX),
-   CLK(omap_display, video_fck,dss_96m_fck,   CK_3XXX),
-   CLK(omap_display, dss2_fck, dss2_alwon_fck, CK_3XXX),
-   CLK(omap_display, ick,  dss_ick_3430es1,   
CK_3430ES1),
-   CLK(omap_display, ick,  dss_ick_3430es2,   
CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
+   CLK(omap_dss, dss1_fck, dss1_alwon_fck_3430es1, CK_3430ES1),
+   CLK(omap_dss, dss1_fck, dss1_alwon_fck_3430es2, CK_3430ES2PLUS 
| CK_AM35XX | CK_36XX),
+   CLK(omap_dss, tv_fck,   dss_tv_fck,CK_3XXX),
+   CLK(omap_dss, video_fck,dss_96m_fck,   CK_3XXX),
+   CLK(omap_dss, dss2_fck, dss2_alwon_fck, CK_3XXX),
+   

[PATCH v9 13/18] OMAP2,3: DSS2: DISPC: create platform_driver, move init,exit to driver

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
So a platform_driver for DISPC is created and init exit methods are moved from 
core.c
to its driver probe,remove. pdev member has to be maintained by its own drivers.

DISPC platform driver is registered from inside omap_dss_probe, in the order 
desired.

Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
---
 drivers/video/omap2/dss/core.c  |8 ++--
 drivers/video/omap2/dss/dispc.c |  105 ---
 drivers/video/omap2/dss/dss.h   |4 +-
 3 files changed, 70 insertions(+), 47 deletions(-)

diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index d4b3da3..5acb5e6 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -213,9 +213,9 @@ static int omap_dss_probe(struct platform_device *pdev)
goto err_dpi;
}
 
-   r = dispc_init();
+   r = dispc_init_platform_driver();
if (r) {
-   DSSERR(Failed to initialize dispc\n);
+   DSSERR(Failed to initialize dispc platform driver\n);
goto err_dispc;
}
 
@@ -281,7 +281,7 @@ err_dsi:
 err_sdi:
venc_exit();
 err_venc:
-   dispc_exit();
+   dispc_uninit_platform_driver();
 err_dispc:
dpi_exit();
 err_dpi:
@@ -301,7 +301,7 @@ static int omap_dss_remove(struct platform_device *pdev)
dss_uninitialize_debugfs();
 
venc_exit();
-   dispc_exit();
+   dispc_uninit_platform_driver();
dpi_exit();
rfbi_uninit_platform_driver();
if (cpu_is_omap34xx()) {
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index 9f8c69f..abfed47 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -178,6 +178,7 @@ struct dispc_irq_stats {
 };
 
 static struct {
+   struct platform_device *pdev;
void __iomem*base;
 
u32 fifo_size[3];
@@ -3269,47 +3270,6 @@ static void _omap_dispc_initial_config(void)
dispc_read_plane_fifo_sizes();
 }
 
-int dispc_init(void)
-{
-   u32 rev;
-
-   spin_lock_init(dispc.irq_lock);
-
-#ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
-   spin_lock_init(dispc.irq_stats_lock);
-   dispc.irq_stats.last_reset = jiffies;
-#endif
-
-   INIT_WORK(dispc.error_work, dispc_error_worker);
-
-   dispc.base = ioremap(DISPC_BASE, DISPC_SZ_REGS);
-   if (!dispc.base) {
-   DSSERR(can't ioremap DISPC\n);
-   return -ENOMEM;
-   }
-
-   enable_clocks(1);
-
-   _omap_dispc_initial_config();
-
-   _omap_dispc_initialize_irq();
-
-   dispc_save_context();
-
-   rev = dispc_read_reg(DISPC_REVISION);
-   printk(KERN_INFO OMAP DISPC rev %d.%d\n,
-  FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
-
-   enable_clocks(0);
-
-   return 0;
-}
-
-void dispc_exit(void)
-{
-   iounmap(dispc.base);
-}
-
 int dispc_enable_plane(enum omap_plane plane, bool enable)
 {
DSSDBG(dispc_enable_plane %d, %d\n, plane, enable);
@@ -3359,3 +3319,66 @@ int dispc_setup_plane(enum omap_plane plane,
 
return r;
 }
+
+/* DISPC HW IP initialisation */
+static int omap_dispchw_probe(struct platform_device *pdev)
+{
+   u32 rev;
+   dispc.pdev = pdev;
+
+   spin_lock_init(dispc.irq_lock);
+
+#ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
+   spin_lock_init(dispc.irq_stats_lock);
+   dispc.irq_stats.last_reset = jiffies;
+#endif
+
+   INIT_WORK(dispc.error_work, dispc_error_worker);
+
+   dispc.base = ioremap(DISPC_BASE, DISPC_SZ_REGS);
+   if (!dispc.base) {
+   DSSERR(can't ioremap DISPC\n);
+   return -ENOMEM;
+   }
+
+   enable_clocks(1);
+
+   _omap_dispc_initial_config();
+
+   _omap_dispc_initialize_irq();
+
+   dispc_save_context();
+
+   rev = dispc_read_reg(DISPC_REVISION);
+   printk(KERN_INFO OMAP DISPC rev %d.%d\n,
+  FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
+
+   enable_clocks(0);
+
+   return 0;
+}
+
+static int omap_dispchw_remove(struct platform_device *pdev)
+{
+   iounmap(dispc.base);
+   return 0;
+}
+
+static struct platform_driver omap_dispchw_driver = {
+   .probe  = omap_dispchw_probe,
+   .remove = omap_dispchw_remove,
+   .driver = {
+   .name   = omap_dispc,
+   .owner  = THIS_MODULE,
+   },
+};
+
+int dispc_init_platform_driver(void)
+{
+   return platform_driver_register(omap_dispchw_driver);
+}
+
+void dispc_uninit_platform_driver(void)
+{
+   return platform_driver_unregister(omap_dispchw_driver);
+}
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 0ba4bdb..f4835c8 100644
--- 

[PATCH v9 14/18] OMAP2,3: DSS2: VENC: create platform_driver, move init,exit to driver

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
So a platform_driver for VENC is created and init exit methods are moved from 
core.c
to its driver probe,remove. pdev member has to be maintained by its own drivers.

Also, venc_vdda_dac reading is moved to venc.c.

VENC platform driver is registered from inside omap_dss_probe, in the order 
desired.

Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
---
 arch/arm/mach-omap2/board-3430sdp.c  |2 +-
 arch/arm/mach-omap2/board-cm-t35.c   |2 +-
 arch/arm/mach-omap2/board-devkit8000.c   |2 +-
 arch/arm/mach-omap2/board-omap3beagle.c  |2 +-
 arch/arm/mach-omap2/board-omap3evm.c |2 +-
 arch/arm/mach-omap2/board-omap3pandora.c |2 +-
 arch/arm/mach-omap2/board-omap3stalker.c |2 +-
 arch/arm/mach-omap2/board-rx51-peripherals.c |2 +-
 arch/arm/mach-omap2/board-zoom-peripherals.c |2 +-
 drivers/video/omap2/dss/core.c   |   28 +--
 drivers/video/omap2/dss/dss.h|9 +-
 drivers/video/omap2/dss/venc.c   |  116 +-
 12 files changed, 93 insertions(+), 78 deletions(-)

diff --git a/arch/arm/mach-omap2/board-3430sdp.c 
b/arch/arm/mach-omap2/board-3430sdp.c
index d00f356..e0d13ae 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -308,7 +308,7 @@ static struct omap_dss_board_info sdp3430_dss_data = {
 };
 
 static struct regulator_consumer_supply sdp3430_vdda_dac_supply =
-   REGULATOR_SUPPLY(vdda_dac, omap_display);
+   REGULATOR_SUPPLY(vdda_dac, omap_venc);
 
 static struct omap_board_config_kernel sdp3430_config[] __initdata = {
 };
diff --git a/arch/arm/mach-omap2/board-cm-t35.c 
b/arch/arm/mach-omap2/board-cm-t35.c
index 1c36ec8..2e9265e 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -488,7 +488,7 @@ static struct regulator_consumer_supply cm_t35_vsim_supply 
= {
 };
 
 static struct regulator_consumer_supply cm_t35_vdac_supply =
-   REGULATOR_SUPPLY(vdda_dac, omap_display);
+   REGULATOR_SUPPLY(vdda_dac, omap_venc);
 
 static struct regulator_consumer_supply cm_t35_vdvi_supply =
REGULATOR_SUPPLY(vdvi, omap_display);
diff --git a/arch/arm/mach-omap2/board-devkit8000.c 
b/arch/arm/mach-omap2/board-devkit8000.c
index 6a2eb49..331b94e 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -199,7 +199,7 @@ static struct omap_dss_board_info devkit8000_dss_data = {
 };
 
 static struct regulator_consumer_supply devkit8000_vdda_dac_supply =
-   REGULATOR_SUPPLY(vdda_dac, omap_display);
+   REGULATOR_SUPPLY(vdda_dac, omap_venc);
 
 static uint32_t board_keymap[] = {
KEY(0, 0, KEY_1),
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c 
b/arch/arm/mach-omap2/board-omap3beagle.c
index c0a5066..4dd1475 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -229,7 +229,7 @@ static struct omap_dss_board_info beagle_dss_data = {
 };
 
 static struct regulator_consumer_supply beagle_vdac_supply =
-   REGULATOR_SUPPLY(vdda_dac, omap_display);
+   REGULATOR_SUPPLY(vdda_dac, omap_venc);
 
 static struct regulator_consumer_supply beagle_vdvi_supply =
REGULATOR_SUPPLY(vdds_dsi, omap_display);
diff --git a/arch/arm/mach-omap2/board-omap3evm.c 
b/arch/arm/mach-omap2/board-omap3evm.c
index 5f156fe..ec45575 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -493,7 +493,7 @@ static struct twl4030_codec_data omap3evm_codec_data = {
 };
 
 static struct regulator_consumer_supply omap3_evm_vdda_dac_supply =
-   REGULATOR_SUPPLY(vdda_dac, omap_display);
+   REGULATOR_SUPPLY(vdda_dac, omap_venc);
 
 /* VDAC for DSS driving S-Video */
 static struct regulator_init_data omap3_evm_vdac = {
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c 
b/arch/arm/mach-omap2/board-omap3pandora.c
index 613ab58..b44e604 100644
--- a/arch/arm/mach-omap2/board-omap3pandora.c
+++ b/arch/arm/mach-omap2/board-omap3pandora.c
@@ -342,7 +342,7 @@ static struct regulator_consumer_supply 
pandora_vmmc3_supply =
REGULATOR_SUPPLY(vmmc, mmci-omap-hs.2);
 
 static struct regulator_consumer_supply pandora_vdda_dac_supply =
-   REGULATOR_SUPPLY(vdda_dac, omap_display);
+   REGULATOR_SUPPLY(vdda_dac, omap_venc);
 
 static struct regulator_consumer_supply pandora_vdds_supplies[] = {
REGULATOR_SUPPLY(vdds_sdi, omap_display),
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c 
b/arch/arm/mach-omap2/board-omap3stalker.c
index 7671218..ab98a64 100644
--- a/arch/arm/mach-omap2/board-omap3stalker.c
+++ b/arch/arm/mach-omap2/board-omap3stalker.c
@@ -441,7 +441,7 @@ static struct 

[PATCH v9 15/18] OMAP2,3: DSS2: DSI: create platform_driver, move init,exit to driver

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
So a platform_driver for DSI is created and init exit methods are moved from 
core.c
to its driver probe,remove. pdev member has to be maintained by its own drivers.

Also, vdds_dsi regulator handling is copied to dsi.c, since vdds_dsi regulator 
is
needed by dpi_init() too. Board files are updated accordingly to add 2 
instances of
vdds_dsi regulator.

DSI platform driver is registered from inside omap_dss_probe, in the order 
desired.

Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
---
 arch/arm/mach-omap2/board-3430sdp.c  |1 +
 arch/arm/mach-omap2/board-devkit8000.c   |   10 ++--
 arch/arm/mach-omap2/board-igep0020.c |   10 ++--
 arch/arm/mach-omap2/board-omap3beagle.c  |   10 ++--
 arch/arm/mach-omap2/board-omap3evm.c |   10 ++--
 arch/arm/mach-omap2/board-omap3pandora.c |1 +
 arch/arm/mach-omap2/board-omap3stalker.c |   10 ++--
 arch/arm/mach-omap2/board-zoom-peripherals.c |   10 ++--
 drivers/video/omap2/dss/core.c   |8 ++--
 drivers/video/omap2/dss/dsi.c|   64 -
 drivers/video/omap2/dss/dss.h|8 ++--
 11 files changed, 107 insertions(+), 35 deletions(-)

diff --git a/arch/arm/mach-omap2/board-3430sdp.c 
b/arch/arm/mach-omap2/board-3430sdp.c
index e0d13ae..33ff4f6 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -533,6 +533,7 @@ static struct regulator_init_data sdp3430_vdac = {
 /* VPLL2 for digital video outputs */
 static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
REGULATOR_SUPPLY(vdds_dsi, omap_display),
+   REGULATOR_SUPPLY(vdds_dsi, omap_dsi1),
 };
 
 static struct regulator_init_data sdp3430_vpll2 = {
diff --git a/arch/arm/mach-omap2/board-devkit8000.c 
b/arch/arm/mach-omap2/board-devkit8000.c
index 331b94e..6cdedd9 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -273,8 +273,10 @@ static struct twl4030_gpio_platform_data 
devkit8000_gpio_data = {
.setup  = devkit8000_twl_gpio_setup,
 };
 
-static struct regulator_consumer_supply devkit8000_vpll1_supply =
-   REGULATOR_SUPPLY(vdds_dsi, omap_display);
+static struct regulator_consumer_supply devkit8000_vpll1_supplies[] = {
+   REGULATOR_SUPPLY(vdds_dsi, omap_display),
+   REGULATOR_SUPPLY(vdds_dsi, omap_dsi1),
+};
 
 /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
 static struct regulator_init_data devkit8000_vmmc1 = {
@@ -315,8 +317,8 @@ static struct regulator_init_data devkit8000_vpll1 = {
.valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS,
},
-   .num_consumer_supplies  = 1,
-   .consumer_supplies  = devkit8000_vpll1_supply,
+   .num_consumer_supplies  = ARRAY_SIZE(devkit8000_vpll1_supplies),
+   .consumer_supplies  = devkit8000_vpll1_supplies,
 };
 
 /* VAUX4 for ads7846 and nubs */
diff --git a/arch/arm/mach-omap2/board-igep0020.c 
b/arch/arm/mach-omap2/board-igep0020.c
index d79dcd5..dfbe3a1 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -485,8 +485,10 @@ static struct omap_dss_board_info igep2_dss_data = {
.default_device = igep2_dvi_device,
 };
 
-static struct regulator_consumer_supply igep2_vpll2_supply =
-   REGULATOR_SUPPLY(vdds_dsi, omap_display);
+static struct regulator_consumer_supply igep2_vpll2_supplies[] = {
+   REGULATOR_SUPPLY(vdds_dsi, omap_display),
+   REGULATOR_SUPPLY(vdds_dsi, omap_dsi1),
+};
 
 static struct regulator_init_data igep2_vpll2 = {
.constraints = {
@@ -499,8 +501,8 @@ static struct regulator_init_data igep2_vpll2 = {
.valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS,
},
-   .num_consumer_supplies  = 1,
-   .consumer_supplies  = igep2_vpll2_supply,
+   .num_consumer_supplies  = ARRAY_SIZE(igep2_vpll2_supplies),
+   .consumer_supplies  = igep2_vpll2_supplies,
 };
 
 static void __init igep2_display_init(void)
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c 
b/arch/arm/mach-omap2/board-omap3beagle.c
index 4dd1475..caf6c8a 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -231,8 +231,10 @@ static struct omap_dss_board_info beagle_dss_data = {
 static struct regulator_consumer_supply beagle_vdac_supply =
REGULATOR_SUPPLY(vdda_dac, omap_venc);
 
-static struct regulator_consumer_supply beagle_vdvi_supply =
-   REGULATOR_SUPPLY(vdds_dsi, omap_display);
+static struct 

[PATCH v9 16/18] OMAP2,3: DSS2: replace printk with dev_dbg in init

2011-01-22 Thread Sumit Semwal
This patch replaces printk's in the init/probe functions to dev_dbg
for boot time optimization.

Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
---
 drivers/video/omap2/dss/dispc.c |2 +-
 drivers/video/omap2/dss/dsi.c   |2 +-
 drivers/video/omap2/dss/rfbi.c  |2 +-
 drivers/video/omap2/dss/venc.c  |2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index abfed47..1c22cf0 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -3350,7 +3350,7 @@ static int omap_dispchw_probe(struct platform_device 
*pdev)
dispc_save_context();
 
rev = dispc_read_reg(DISPC_REVISION);
-   printk(KERN_INFO OMAP DISPC rev %d.%d\n,
+   dev_dbg(pdev-dev, OMAP DISPC rev %d.%d\n,
   FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
 
enable_clocks(0);
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index d854137..39a1c04 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -3300,7 +3300,7 @@ static int dsi_init(struct platform_device *pdev)
enable_clocks(1);
 
rev = dsi_read_reg(DSI_REVISION);
-   printk(KERN_INFO OMAP DSI rev %d.%d\n,
+   dev_dbg(pdev-dev, OMAP DSI rev %d.%d\n,
   FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
 
enable_clocks(0);
diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
index a64e119..93b13c5 100644
--- a/drivers/video/omap2/dss/rfbi.c
+++ b/drivers/video/omap2/dss/rfbi.c
@@ -1046,7 +1046,7 @@ static int omap_rfbihw_probe(struct platform_device *pdev)
rfbi_write_reg(RFBI_SYSCONFIG, l);
 
rev = rfbi_read_reg(RFBI_REVISION);
-   printk(KERN_INFO OMAP RFBI rev %d.%d\n,
+   dev_dbg(pdev-dev, OMAP RFBI rev %d.%d\n,
   FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
 
rfbi_enable_clocks(0);
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index 935ae8e..3db9061 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -739,7 +739,7 @@ static int omap_venchw_probe(struct platform_device *pdev)
venc_enable_clocks(1);
 
rev_id = (u8)(venc_read_reg(VENC_REV_ID)  0xff);
-   printk(KERN_INFO OMAP VENC rev %d\n, rev_id);
+   dev_dbg(pdev-dev, OMAP VENC rev %d\n, rev_id);
 
venc_enable_clocks(0);
 
-- 
1.7.1

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


[PATCH v9 17/18] OMAP2,3: DSS2: Use platform device to get baseaddr

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

DSS, DISPC, DSI, RFBI, VENC baseaddr can be obtained from 
platform_get_resource().
This API in turn picks the right silicon baseaddr from the hwmod database.
So hardcoding of base addr could be removed.

Reviewed-by: Paul Walmsley p...@pwsan.com
Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
---
 drivers/video/omap2/dss/dispc.c |   11 ---
 drivers/video/omap2/dss/dsi.c   |   12 +---
 drivers/video/omap2/dss/dss.c   |   11 ---
 drivers/video/omap2/dss/rfbi.c  |   10 +++---
 drivers/video/omap2/dss/venc.c  |   11 ---
 5 files changed, 40 insertions(+), 15 deletions(-)

diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index 1c22cf0..381942d 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -42,8 +42,6 @@
 #include dss_features.h
 
 /* DISPC */
-#define DISPC_BASE 0x48050400
-
 #define DISPC_SZ_REGS  SZ_4K
 
 struct dispc_reg { u16 idx; };
@@ -3324,6 +3322,8 @@ int dispc_setup_plane(enum omap_plane plane,
 static int omap_dispchw_probe(struct platform_device *pdev)
 {
u32 rev;
+   struct resource *dispc_mem;
+
dispc.pdev = pdev;
 
spin_lock_init(dispc.irq_lock);
@@ -3335,7 +3335,12 @@ static int omap_dispchw_probe(struct platform_device 
*pdev)
 
INIT_WORK(dispc.error_work, dispc_error_worker);
 
-   dispc.base = ioremap(DISPC_BASE, DISPC_SZ_REGS);
+   dispc_mem = platform_get_resource(dispc.pdev, IORESOURCE_MEM, 0);
+   if (!dispc_mem) {
+   DSSERR(can't get IORESOURCE_MEM DISPC\n);
+   return -EINVAL;
+   }
+   dispc.base = ioremap(dispc_mem-start, resource_size(dispc_mem));
if (!dispc.base) {
DSSERR(can't ioremap DISPC\n);
return -ENOMEM;
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index 39a1c04..cab08cb 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -42,8 +42,6 @@
 /*#define VERBOSE_IRQ*/
 #define DSI_CATCH_MISSING_TE
 
-#define DSI_BASE   0x4804FC00
-
 struct dsi_reg { u16 idx; };
 
 #define DSI_REG(idx)   ((const struct dsi_reg) { idx })
@@ -3257,6 +3255,7 @@ static int dsi_init(struct platform_device *pdev)
 {
u32 rev;
int r;
+   struct resource *dsi_mem;
 
spin_lock_init(dsi.errors_lock);
dsi.errors = 0;
@@ -3283,7 +3282,13 @@ static int dsi_init(struct platform_device *pdev)
dsi.te_timer.function = dsi_te_timeout;
dsi.te_timer.data = 0;
 #endif
-   dsi.base = ioremap(DSI_BASE, DSI_SZ_REGS);
+   dsi_mem = platform_get_resource(dsi.pdev, IORESOURCE_MEM, 0);
+   if (!dsi_mem) {
+   DSSERR(can't get IORESOURCE_MEM DSI\n);
+   r = -EINVAL;
+   goto err0;
+   }
+   dsi.base = ioremap(dsi_mem-start, resource_size(dsi_mem));
if (!dsi.base) {
DSSERR(can't ioremap DSI\n);
r = -ENOMEM;
@@ -3310,6 +3315,7 @@ err2:
iounmap(dsi.base);
 err1:
destroy_workqueue(dsi.workqueue);
+err0:
return r;
 }
 
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 8b7972e..4d7a816 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -34,8 +34,6 @@
 #include plat/clock.h
 #include dss.h
 
-#define DSS_BASE   0x4805
-
 #define DSS_SZ_REGSSZ_512
 
 struct dss_reg {
@@ -567,8 +565,15 @@ static int dss_init(bool skip_init)
 {
int r;
u32 rev;
+   struct resource *dss_mem;
 
-   dss.base = ioremap(DSS_BASE, DSS_SZ_REGS);
+   dss_mem = platform_get_resource(dss.pdev, IORESOURCE_MEM, 0);
+   if (!dss_mem) {
+   DSSERR(can't get IORESOURCE_MEM DSS\n);
+   r = -EINVAL;
+   goto fail0;
+   }
+   dss.base = ioremap(dss_mem-start, resource_size(dss_mem));
if (!dss.base) {
DSSERR(can't ioremap DSS\n);
r = -ENOMEM;
diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
index 93b13c5..fc665a7 100644
--- a/drivers/video/omap2/dss/rfbi.c
+++ b/drivers/video/omap2/dss/rfbi.c
@@ -36,8 +36,6 @@
 #include plat/display.h
 #include dss.h
 
-#define RFBI_BASE   0x48050800
-
 struct rfbi_reg { u16 idx; };
 
 #define RFBI_REG(idx)  ((const struct rfbi_reg) { idx })
@@ -1019,6 +1017,7 @@ static int omap_rfbihw_probe(struct platform_device *pdev)
 {
u32 rev;
u32 l;
+   struct resource *rfbi_mem;
 
rfbi.pdev = pdev;
 
@@ -1028,7 +1027,12 @@ static int omap_rfbihw_probe(struct platform_device 
*pdev)
atomic_set(rfbi.cmd_fifo_full, 0);
atomic_set(rfbi.cmd_pending, 0);
 
-   

[PATCH v9 18/18] OMAP2,3: DSS2: Get DSS IRQ from platform device

2011-01-22 Thread Sumit Semwal
From: Senthilvadivu Guruswamy svad...@ti.com

DSS IRQ number can be obtained from platform_get_irq().  This API in turn
picks the right IRQ number belonging to HW IP from the hwmod database.
So hardcoding of IRQ number could be removed.

Reviewed-by: Paul Walmsley p...@pwsan.com
Reviewed-by: Kevin Hilman khil...@ti.com
Tested-by: Kevin Hilman khil...@ti.com
Signed-off-by: Senthilvadivu Guruswamy svad...@ti.com
Signed-off-by: Sumit Semwal sumit.sem...@ti.com
---
 drivers/video/omap2/dss/dss.c |   13 -
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 4d7a816..22690e9 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -563,7 +563,7 @@ void dss_set_dac_pwrdn_bgz(bool enable)
 
 static int dss_init(bool skip_init)
 {
-   int r;
+   int r, dss_irq;
u32 rev;
struct resource *dss_mem;
 
@@ -609,15 +609,18 @@ static int dss_init(bool skip_init)
REG_FLD_MOD(DSS_CONTROL, 0, 2, 2);  /* venc clock mode = normal */
 #endif
 
-   r = request_irq(INT_24XX_DSS_IRQ,
+   dss_irq = platform_get_irq(dss.pdev, 0);
+   if (dss_irq != -ENXIO) {
+   r = request_irq(dss_irq,
cpu_is_omap24xx()
? dss_irq_handler_omap2
: dss_irq_handler_omap3,
0, OMAP DSS, NULL);
 
-   if (r  0) {
-   DSSERR(omap2 dss: request_irq failed\n);
-   goto fail1;
+   if (r  0) {
+   DSSERR(omap2 dss: request_irq failed\n);
+   goto fail1;
+   }
}
 
if (cpu_is_omap34xx()) {
-- 
1.7.1

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


Re: Setting MMC_CAP_POWER_OFF_CARD on mmc2 leads to filesystem problems on mmc1

2011-01-22 Thread Ohad Ben-Cohen
Hi Koen,

On Fri, Jan 21, 2011 at 4:49 PM, Luciano Coelho coe...@ti.com wrote:
 My patch basically does:

 --- a/arch/arm/mach-omap2/board-omap3beagle.c
 +++ b/arch/arm/mach-omap2/board-omap3beagle.c
 @@ -270,7 +270,7 @@ static struct omap2_hsmmc_info mmc[] = {
        {
                .name           = wl1271,
                .mmc            = 2,
 -               .caps           = MMC_CAP_4_BIT_DATA,
 +               .caps           = MMC_CAP_4_BIT_DATA | 
 MMC_CAP_POWER_OFF_CARD,

 And does NOT touch mmc1. But after adding MMC_CAP_POWER_OFF_CARD I get tons 
 of:


Hmm. The snippet above looks different in your patch.

It seems that you're adding a new mmcbbt array, along with the
existing mmc one, but still using unchanged board-omap3beagle code,
and I suspect you have some unhealthy  mmc/mmcbbt references.

Particularly, look at this:

@@ -384,7 +445,14 @@ static int beagle_twl_gpio_setup(struct device *dev,
}
/* gpio + 0 is mmc0_cd (input/IRQ) */
mmc[0].gpio_cd = gpio + 0;
+#if defined(CONFIG_WL1271) || defined(CONFIG_WL1271_MODULE)
+   if(!strcmp(expansionboard_name, fixme-beagletoy))
+   omap2_hsmmc_init(mmcbbt);
+   else
+   omap2_hsmmc_init(mmc);
+#else
omap2_hsmmc_init(mmc);
+#endif

/* link regulators to MMC adapters */
beagle_vmmc1_supply.dev = mmc[0].dev;

When WL1271 is configured, and you have your fixme-beagletoy
expansionboard around, you're only initializing mmcbbt, but still
using mmc for regulators references.

Care to check if fixing that makes your issues go away ?

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


Re: Setting MMC_CAP_POWER_OFF_CARD on mmc2 leads to filesystem problems on mmc1

2011-01-22 Thread Koen Kooi

Op 22 jan 2011, om 11:36 heeft Ohad Ben-Cohen het volgende geschreven:

 Hi Koen,
 
 On Fri, Jan 21, 2011 at 4:49 PM, Luciano Coelho coe...@ti.com wrote:
 My patch basically does:
 
 --- a/arch/arm/mach-omap2/board-omap3beagle.c
 +++ b/arch/arm/mach-omap2/board-omap3beagle.c
 @@ -270,7 +270,7 @@ static struct omap2_hsmmc_info mmc[] = {
{
.name   = wl1271,
.mmc= 2,
 -   .caps   = MMC_CAP_4_BIT_DATA,
 +   .caps   = MMC_CAP_4_BIT_DATA | 
 MMC_CAP_POWER_OFF_CARD,
 
 And does NOT touch mmc1. But after adding MMC_CAP_POWER_OFF_CARD I get tons 
 of:
 
 
 Hmm. The snippet above looks different in your patch.
 
 It seems that you're adding a new mmcbbt array, along with the
 existing mmc one, but still using unchanged board-omap3beagle code,
 and I suspect you have some unhealthy  mmc/mmcbbt references.
 
 Particularly, look at this:
 
 @@ -384,7 +445,14 @@ static int beagle_twl_gpio_setup(struct device *dev,
   }
   /* gpio + 0 is mmc0_cd (input/IRQ) */
   mmc[0].gpio_cd = gpio + 0;
 +#if defined(CONFIG_WL1271) || defined(CONFIG_WL1271_MODULE)
 + if(!strcmp(expansionboard_name, fixme-beagletoy))
 + omap2_hsmmc_init(mmcbbt);
 + else
 + omap2_hsmmc_init(mmc);
 +#else
   omap2_hsmmc_init(mmc);
 +#endif
 
   /* link regulators to MMC adapters */
   beagle_vmmc1_supply.dev = mmc[0].dev;
 
 When WL1271 is configured, and you have your fixme-beagletoy
 expansionboard around, you're only initializing mmcbbt, but still
 using mmc for regulators references.
 
 Care to check if fixing that makes your issues go away ?

That was indeed the problem, not I get:

[   35.417053] wl1271: firmware booted (Rev 6.1.0.0.343)

and

root@beagleboard-xm-next:~# ifconfig wlan0 hw eth 00:11:22:33:44:55
root@beagleboard-xm-next:~# iwlist wlan0 scanning | grep ESSID | wc -l
13

That get's me a lot further!

regards,

Koen

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


Re: Setting MMC_CAP_POWER_OFF_CARD on mmc2 leads to filesystem problems on mmc1

2011-01-22 Thread Ohad Ben-Cohen
On Sat, Jan 22, 2011 at 5:30 PM, Koen Kooi k...@dominion.thruhere.net wrote:
 That was indeed the problem, not I get:

 [   35.417053] wl1271: firmware booted (Rev 6.1.0.0.343)

 and

 root@beagleboard-xm-next:~# ifconfig wlan0 hw eth 00:11:22:33:44:55
 root@beagleboard-xm-next:~# iwlist wlan0 scanning | grep ESSID | wc -l
 13

 That get's me a lot further!

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


Re: 2.6.38-rc1-git1 musb undefined references

2011-01-22 Thread Sid Boyce

On 21/01/11 06:03, Sid Boyce wrote:

On 21/01/11 03:22, Felipe Balbi wrote:

Hi,

(please, keep also linux-usb@vger on the Cc list on any patch regarding
drivers/usb)

On Thu, Jan 20, 2011 at 04:22:01PM +, Sid Boyce wrote:

Cross compiling for Beagleboard on Ubuntu 11.04 x86_64.
# make-kpkg --revision=0 --append-to-version=-custom --arch=armel
--cross-compile=/opt/arm-2010q1/bin/arm-none-linux-gnueabi-
kernel-image --initrd

== making target debian/stamp/build/kernel [new prereqs: vars]==
This is kernel package version 12.036+nmu1.
restore_upstream_debianization
test ! -f scripts/package/builddeb.kpkg-dist || mv -f
scripts/package/builddeb.kpkg-dist scripts/package/builddeb
test ! -f scripts/package/Makefile.kpkg-dist || mv -f
scripts/package/Makefile.kpkg-dist scripts/package/Makefile
/usr/bin/make EXTRAVERSION=-rc1-git1-custom ARCH=arm \

CROSS_COMPILE=/opt/arm-2010q1/bin/arm-none-linux-gnueabi- zImage
make[1]: Entering directory `/usr/src/XXX/linux-2.6.38-rc1-git1'
scripts/kconfig/conf --silentoldconfig Kconfig
make[1]: Leaving directory `/usr/src/XXX/linux-2.6.38-rc1-git1'
make[1]: Entering directory `/usr/src/XXX/linux-2.6.38-rc1-git1'
CHK include/linux/version.h
CHK include/generated/utsrelease.h
make[2]: `include/generated/mach-types.h' is up to date.
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
LD fs/built-in.o
LD lib/zlib_deflate/built-in.o
LD lib/built-in.o
LD vmlinux.o
MODPOST vmlinux.o
WARNING: modpost: Found 3 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
drivers/built-in.o: In function `musb_free':
clkdev.c:(.text+0xf3d08): undefined reference to
`dma_controller_destroy'
drivers/built-in.o: In function `musb_probe':
clkdev.c:(.init.text+0x64a8): undefined reference to
`dma_controller_create'
make[1]: *** [.tmp_vmlinux1] Error 1
make[1]: Leaving directory `/usr/src/XXX/linux-2.6.38-rc1-git1'
make: *** [debian/stamp/build/kernel] Error 2
root@sdrbox:/usr/src/XXX/linux-2.6.38-rc1-git1#


I just compiled 2.6.38-rc1 and it doesn't fail for me.


root@sdrbox:/usr/src/XXX/linux-2.6.38-rc1-git1# grep OMAP2PLUS .config
CONFIG_ARCH_OMAP2PLUS=y
CONFIG_ARCH_OMAP2PLUS_TYPICAL=y
# CONFIG_USB_MUSB_OMAP2PLUS is not set
root@sdrbox:/usr/src/XXX/linux-2.6.38-rc1-git1# grep MUSB .config
CONFIG_USB_MUSB_HDRC=y
# CONFIG_USB_MUSB_TUSB6010 is not set
# CONFIG_USB_MUSB_OMAP2PLUS is not set
CONFIG_USB_MUSB_AM35X=y
# CONFIG_USB_MUSB_HOST is not set
# CONFIG_USB_MUSB_PERIPHERAL is not set
CONFIG_USB_MUSB_OTG=y
CONFIG_USB_GADGET_MUSB_HDRC=y
CONFIG_USB_MUSB_HDRC_HCD=y
# CONFIG_MUSB_PIO_ONLY is not set
# CONFIG_USB_MUSB_DEBUG is not set


There's a bug on your .config, did you edit by hand ? AM35X doesn't have
DMA support as of today, that's why we have:

config MUSB_PIO_ONLY
bool 'Disable DMA (always use PIO)'
depends on USB_MUSB_HDRC
default USB_MUSB_TUSB6010 || USB_MUSB_DA8XX || USB_MUSB_AM35X

did you disable PIO only ? I know that's a bit fuzzy still, a few
patches will be needed to clean up the entire MUSB Kconfig, I apologize
for that.



I copied the .config from the Beagleboard and did ARCH=arm make
oldconfig.
Thanks, I shall do make omap2plus_defconfig.
Regards
Sid.



make omap2plus_defconfig corrected the problem, kernel builds up to 
2.6.38-rc1-git3 completed.

Regards
Sid.
--
Sid Boyce ... Hamradio License G3VBV, Licensed Private Pilot
Emeritus IBM/Amdahl Mainframes and Sun/Fujitsu Servers Tech Support
Senior Staff Specialist, Cricket Coach
Microsoft Windows Free Zone - Linux used for all Computing Tasks

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


Re: [lm-sensors] [PATCH v3] hwmon: twl4030: Driver for twl4030 madc module

2011-01-22 Thread J, KEERTHY
On Fri, Jan 7, 2011 at 5:42 PM, J, KEERTHY j-keer...@ti.com wrote:
 On Fri, Jan 7, 2011 at 3:25 AM, Guenter Roeck
 guenter.ro...@ericsson.com wrote:
 On Thu, 2011-01-06 at 15:21 -0500, Mark Brown wrote:
 On Thu, Jan 06, 2011 at 07:04:30AM -0800, Guenter Roeck wrote:
  On Thu, Jan 06, 2011 at 07:07:13AM -0500, Mark Brown wrote:

   Why?  It's not like hwmon has an unreasonably large core or similar.

  Because it creates an unnecessary dependency, and because it is not 
  hwmon's
  responsibility to provide infrastructure for other subsystems or drivers.

 hwmon isn't really doing anything, though.  The *driver* is doing
 something but it doesn't really impact the core that much.  Not that I'm
 particularly sold on putting the ADC core in here, but total NACK based
 on that alone seems rather harsh.

 Possibly. However, I had suggested the following earlier (to the 1st
 version of the patch):

 I commented on this a couple of times below - the driver mixes generic
 ADC reading functions with hwmon functionality. Generic ADC reading
 functionality should be moved into another driver, possibly to mfd.

 Obviously that was ignored. Maybe someone is willing to listen this time
 around.

 I am sorry for not responding on the generic ADC handling part. Since many
 other ADC drivers are part of hwmon i thought hwmon was the appropriate
 place. However I can surely split the generic ADC handling part in mfd and
 only hardware monitoring part in hwmon as suggested.

 I won't let people break modularity just for convenience in a subsystem
 I am responsible for. And forcing the hwmon subsystem, and with it a
 specific hwmon driver, to exist just because the adc functionality it
 provides is needed by some other (most likely unrelated) subsystem /
 driver _does_ break modularity. Worse, it is completely unnecessary to
 do so. Other twl4030 functionality was extracted into generic code.
 twl-core.c, twl4030-codec.c, twl4030-irq.c, twl4030-power.c are all in
 mfd. I fail to see the problem with mfd/twl4030-adc.c.

 Guenter




 Hello Samuel,

 Is it ok to have the generic ADC functionality in mfd as a separate file?

 Regards,
 Keerthy


Hello Samuel,

We need your valuable inputs. Can generic ADC functionality can be in
mfd as a separate file?

Regards and Thanks,
Keerthy
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/13] OMAP: Basic DVFS Framework

2011-01-22 Thread Felipe Balbi
Hi,

On Fri, Jan 21, 2011 at 07:30:52PM +0530, Vishwanath BS wrote:
 This patch series introduces support for Dynamic Voltage and Frequency Scaling
 (DVFS) for OMAP devices. 
 
 For detailed design details, refer to DVFS Documentation.

If this is supposed to be used by drivers I would rather not as it's yet
another OMAP-specific API to use.

Before you reply with you can pass function pointers via platform_data
let me say that even that is a burden, specially on devices which are
used by several archs.

Why don't you make it more generic like the OPP layer was created ?
Isn't it better to just build on top of the OPP layer and make this one
also generic ?

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


Re: [PATCHv2] OMAP: Enable Magic SysRq on serial console ttyOx

2011-01-22 Thread Govindraj
On Sat, Jan 22, 2011 at 6:33 AM, Kevin Hilman khil...@ti.com wrote:
 G, Manjunath Kondaiah manj...@ti.com writes:

 On Fri, Jan 21, 2011 at 12:54:29PM +0530, Govindraj wrote:
 On Thu, Jan 20, 2011 at 5:49 PM, Anand Gadiyar gadi...@ti.com wrote:
Magic SysRq key is not working for OMAP on new serial
console ttyOx because SUPPORT_SYSRQ is not defined
for omap-serial.
   
This patch defines SUPPORT_SYSRQ in omap-serial and
enables handling of Magic SysRq character.
   
Signed-off-by: Thomas Weber we...@corscience.de
   
Looks fine to me.
   
Acked-by: Govindraj.R govindraj.r...@ti.com
I tried to use SysRq key on minicom after applying this patch, it
  looks
like it is not triggering sysrq event.
   
Am I missing anything?
   
-Manjunath
--
Hello Manjunath,
   
Do you have CONFIG_MAGIC_SYSRQ enabled?
Magic SysRq key in Kernel Hacking
   
I tested it on Devkit8000 (beagle board clone).
   
  
   re-setting lsr_break_flag to 0 in receive chars is causing issues
   in getting sysrq key break sequence on omap-serial.c
  
   Manju,
  
   can you try this change on your environment.
   With below change works for me on 3430SDP/4430SDP.
   key sequence I checked.
   [alt + b + t]  = shows trace of tasks running.
   [alt + b + b] = system reboot.
 
  With below patch, it works fine on TeraTerm. However, I am not able to
  perform the same on minicom.
 
  Tested-by: Manjunath G Kondaiah manj...@ti.com
 
  -Manjunath
 
 
  Not sure what you guys are trying out, but I am able to use sysrq
  just fine in minicom (using only Thomas' original patch) - you need
  to send a break sequence, and the way to do this in minicom is to
  do Ctrl-A followed by F.
 
  Works for me, without the resetting lsr_break_flag to 0 part.
 
  @Govind,
 
  What are the issues you see in getting sysrq key break sequence
  without your change? And how is your change fixing this?

 Actually I was using teraterm on windows platform.
 using keyboard to send a break char [alt + b] sometimes
 i observed that first break char was getting lost and subsequent break
 chars where getting
 recognized. However using send break option from terterm menu seems to
 work most of times.
 my change can be dropped.
 If it is fixing the issue of losing first break character, what is wrong in
 having this patch?

 Do you see any other issues because of this change?

 Were you loosing the first break character because of PM?  i.e., if the
 OMAP is in retention or off while idle, we will always loose the first
 character.  The first character causes the wakeup, but does not make it
 to the UART.


No, even without PM i.e., even without setting sleep_while_idle and timeouts for
uart I observed on windows-teraterm sometimes first break char was getting lost.

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


Re: 2.6.38-rc1-git1 musb undefined references

2011-01-22 Thread Felipe Balbi
Hi,

On Sat, Jan 22, 2011 at 04:11:57PM +, Sid Boyce wrote:
 make omap2plus_defconfig corrected the problem, kernel builds up to
 2.6.38-rc1-git3 completed.

Thanks, I'll try to cleanup the DMA stuff for next merge window.

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


RE: [PATCH RESEND v8 3/7] omap: gpmc: enable irq mode in gpmc

2011-01-22 Thread Ghorai, Sukumar


 -Original Message-
 From: Tony Lindgren [mailto:t...@atomide.com]
 Sent: Saturday, January 22, 2011 12:10 AM
 To: Ghorai, Sukumar
 Cc: linux-omap@vger.kernel.org; linux-...@lists.infradead.org; linux-arm-
 ker...@lists.infradead.org
 Subject: Re: [PATCH RESEND v8 3/7] omap: gpmc: enable irq mode in gpmc
 
 * Sukumar Ghorai s-gho...@ti.com [110119 05:24]:
  add support the irq mode in GPMC.
  gpmc_init() function move after omap_init_irq() as it has dependecy on
 irq.
 
[..snip..]

 
   static struct twl4030_gpio_platform_data sdp2430_gpio_data = {
  diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-
 omap2/board-3430sdp.c
  index 8fb5f43..8304d16 100644
  --- a/arch/arm/mach-omap2/board-3430sdp.c
  +++ b/arch/arm/mach-omap2/board-3430sdp.c
  @@ -335,6 +335,7 @@ static void __init omap_3430sdp_init_irq(void)
  omap2_init_common_infrastructure();
  omap2_init_common_devices(hyb18m512160af6_sdrc_params, NULL);
  omap_init_irq();
  +   gpmc_init();
   }
 ...
 
 I think I've commented on this before, but why don't you make gpmc_init
 a subsys_initcall? There should be no reason to call this earlier.
 If something does not work because of that, then that issue must be
 fixed.

[Ghorai] You suggested the same in previous v5 and v6; and I mentioned 
the issues [1] that - nand_init()called before subsys_initcall(gpmc_init);
Let me know if I am missing anything again.
 
[1] https://patchwork.kernel.org/patch/212452/
[2] https://patchwork.kernel.org/patch/359152/


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


Re: [PATCH] ARM: smp: Introduce ARCH_HAS_COMMON_CORES_CLOCK tospeed-up boot

2011-01-22 Thread Russell King - ARM Linux
On Sat, Jan 22, 2011 at 01:14:21PM +0530, Santosh Shilimkar wrote:
 Surely whichever way we should remove the recalibration otherwise
 every time secondary cpus spend ~ 200 ms there.
 
 Russell,
 How do you like to address this?

Well, the last piece of the puzzle which needs consideration is that
omitting the calibration means that it produces user-visible
/proc/cpuinfo changes.  I can't say what effect that has.  So, I
think we need to do something about that to ensure that userspace
won't be impacted should they be using the information in there.

Maybe we need to initialize the secondary CPU bogomips values
accordingly?  Maybe zero is acceptable to mark that the calculation
hasn't been done?  Dunno.
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 02/14] ARM: bitops: switch set/clear/change bitops to use ldrex/strex

2011-01-22 Thread Russell King - ARM Linux
On Mon, Jan 17, 2011 at 07:21:40PM +, Russell King - ARM Linux wrote:
 Switch the set/clear/change bitops to use the word-based exclusive
 operations, which are only present in a wider range of ARM architectures
 than the byte-based exclusive operations.
 
 Signed-off-by: Russell King rmk+ker...@arm.linux.org.uk

As only one person replied to this patch with test information, I'm
not happy to push this into -rc, and hence that prevents it going into
-stable too.  That means omap2plus_defconfig .38 mainline kernels
(including -stable) will remain potentially dangerous when run on
SMP capable hardware.

Therefore, I see no alternative at the moment but to purposely cause
builds which cover ARMv6, and ARMv6K or ARMv7 CPUs to save people from
data corruption.

Please get your tested-by's to me for at least the first three patches
of this series ASAP.
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 02/14] ARM: bitops: switch set/clear/change bitops to use ldrex/strex

2011-01-22 Thread Nicolas Pitre
On Sun, 23 Jan 2011, Russell King - ARM Linux wrote:

 On Mon, Jan 17, 2011 at 07:21:40PM +, Russell King - ARM Linux wrote:
  Switch the set/clear/change bitops to use the word-based exclusive
  operations, which are only present in a wider range of ARM architectures
  than the byte-based exclusive operations.
  
  Signed-off-by: Russell King rmk+ker...@arm.linux.org.uk
 
 As only one person replied to this patch with test information, I'm
 not happy to push this into -rc, and hence that prevents it going into
 -stable too.  

At least another person did post results:

http://mid.gmane.org/20110117094602.ga2...@pulham.picochip.com
http://mid.gmane.org/20110117110308.gc2...@pulham.picochip.com

 That means omap2plus_defconfig .38 mainline kernels
 (including -stable) will remain potentially dangerous when run on
 SMP capable hardware.

I must admit that this series looks a bit large for stable IMHO.  I 
think that the fix for stable should limit itself only to prevent SMP 
from being selected if anything else than CPU_32v6K is selected.

This looks perfectly reasonable for 2.6.38-rc to me though.


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


RE: [PATCH] ARM: smp: Introduce ARCH_HAS_COMMON_CORES_CLOCKtospeed-up boot

2011-01-22 Thread Santosh Shilimkar
 -Original Message-
 From: Russell King - ARM Linux [mailto:li...@arm.linux.org.uk]
 Sent: Sunday, January 23, 2011 2:50 AM
 To: Santosh Shilimkar
 Cc: Rob Herring; linux-omap@vger.kernel.org; Linus Walleij; linux-
 arm-ker...@lists.infradead.org
 Subject: Re: [PATCH] ARM: smp: Introduce
 ARCH_HAS_COMMON_CORES_CLOCKtospeed-up boot

 On Sat, Jan 22, 2011 at 01:14:21PM +0530, Santosh Shilimkar wrote:
  Surely whichever way we should remove the recalibration otherwise
  every time secondary cpus spend ~ 200 ms there.
 
  Russell,
  How do you like to address this?

 Well, the last piece of the puzzle which needs consideration is that
 omitting the calibration means that it produces user-visible
 /proc/cpuinfo changes.  I can't say what effect that has.  So, I
 think we need to do something about that to ensure that userspace
 won't be impacted should they be using the information in there.

Ok. /proc/cpuinfo uses the per-cpu lpj which gets updated as mentioned
as part of the arch cpufreq drivers. So this not seems to be the
problem.

 Maybe we need to initialize the secondary CPU bogomips values
 accordingly?  Maybe zero is acceptable to mark that the calculation
 hasn't been done?  Dunno.
The only issue is global lpj not getting updated as part of CPU
scaling. This is anyway broken today on SMP machines even without
cpufreq. It's getting corrected as part of the hotplug path if
recalibration is carried out. And same value gets copied to
per-cpu lpj for the secondary cores.

The above gets completely wrong if the individual CPUs can
scale with different speed.

Since per-cpu lpj is suppose to be taken care by scaling
Code, /proc/cpuinfo will get updated with right information.

With this, I think we could safely skip secondary cpu
calibration.

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