Re: [PATCH 0/5 v9] mfd: omap: usb: Runtime PM support for EHCI and OHCI drivers

2011-09-20 Thread Munegowda, Keshava
On Mon, Sep 19, 2011 at 10:52 PM, Cousson, Benoit b-cous...@ti.com wrote:
 Hi Keshava,

 On 9/19/2011 4:01 PM, Munegowda, Keshava wrote:

 On Mon, Sep 19, 2011 at 7:26 PM, Samuel Ortizsa...@linux.intel.com
  wrote:

 Hi Keshava,

 On Thu, Sep 15, 2011 at 06:52:45PM +0530, Keshava Munegowda wrote:

 From: Keshava Munegowdakeshava_mgo...@ti.com

 The Hwmod structures and Runtime PM features are implemented
 For EHCI and OHCI drivers of OMAP3 and OMAP4.
 The global suspend/resume of EHCI and OHCI
 is validated on OMAP3430 sdp board with these patches.

 these patches are rebased to kevin's pm branch and
 usbhs latest mainline kernel patches

 I'm ready to apply this one to my MFD for-next branch. Or do you want it
 to go
 through Kevin's tree ?

 Cheers,
 Samuel


 Thanks samuel;
 But, patch 1 and 2 requires benoit causson's ack by;
 so , I am waiting for benoit response on this.

 I made a couple of comments in the v8, and you did address only half of
 them. It will be nice to at least answer the remaining points.

 Moreover, Paul is the maintainer of the OMAP3 hwmod data file.

 Regards,
 Benoit


Thanks Benoit
I will reply to your mail which includes your comments with
detailed descriptions.

regards
keshava
--
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 v2 1/3] OMAPDSS/OMAP_VOUT: Fix incorrect OMAP3-alpha compatibility setting

2011-09-20 Thread Archit Taneja

Hi,

On Tuesday 20 September 2011 01:06 AM, Hiremath, Vaibhav wrote:



-Original Message-
From: Taneja, Archit
Sent: Friday, September 16, 2011 12:09 PM
To: Valkeinen, Tomi
Cc: Hiremath, Vaibhav; linux-omap@vger.kernel.org; Taneja, Archit; linux-
me...@vger.kernel.org; Molnar, Lajos
Subject: [PATCH v2 1/3] OMAPDSS/OMAP_VOUT: Fix incorrect OMAP3-alpha
compatibility setting


[Hiremath, Vaibhav] Few minor comments below -


On OMAP3, in order to enable alpha blending for LCD and TV managers, we
needed
to set LCDALPHABLENDERENABLE/TVALPHABLENDERENABLE bits in DISPC_CONFIG. On
OMAP4, alpha blending is always enabled by default, if the above bits are
set,
we switch to an OMAP3 compatibility mode where the zorder values in the
pipeline

[Hiremath, Vaibhav] Spelling mistake???


Thanks, I'll fix this.




attribute registers are ignored and a fixed priority is configured.

Rename the manager_info member alpha_enabled to partial_alpha_enabled
for
more clarity. Introduce two dss_features FEAT_ALPHA_FIXED_ZORDER and
FEAT_ALPHA_FREE_ZORDER which represent OMAP3-alpha compatibility mode and
OMAP4
alpha mode respectively. Introduce an overlay cap for ZORDER. The DSS2
user is
expected to check for the ZORDER cap, if an overlay doesn't have this cap,
the
user is expected to set the parameter partial_alpha_enabled. If the
overlay has
ZORDER cap, the DSS2 user can assume that alpha blending is already
enabled.

Don't support OMAP3 compatibility mode for now. Trying to read/write to
alpha_blending_enabled sysfs attribute issues a warning for OMAP4 and does
not
set the LCDALPHABLENDERENABLE/TVALPHABLENDERENABLE bits.

Change alpha_enabled to partial_alpha_enabled int the omap_vout driver.
Use
overlay cap OMAP_DSS_OVL_CAP_GLOBAL_ALPHA to check if overlay supports
alpha
blending or not. Replace this with checks for VIDEO1 pipeline.

Initial patch was made by: Lajos Molnarmol...@ti.com


[Hiremath, Vaibhav] I think you can put his sign-off as well and remove this 
line or move it below ---


Okay, I'll wait for his comments, and then put his sign-off.





Cc: linux-me...@vger.kernel.org
Cc: Lajos Molnarmol...@ti.com
Signed-off-by: Archit Tanejaarc...@ti.com
---
  drivers/media/video/omap/omap_vout.c   |   16 +++-
  drivers/video/omap2/dss/dispc.c|   24 
  drivers/video/omap2/dss/dss.h  |4 ++--
  drivers/video/omap2/dss/dss_features.c |   22 +++---
  drivers/video/omap2/dss/dss_features.h |3 ++-
  drivers/video/omap2/dss/manager.c  |   28 +++
-
  include/video/omapdss.h|3 ++-
  7 files changed, 59 insertions(+), 41 deletions(-)

diff --git a/drivers/media/video/omap/omap_vout.c
b/drivers/media/video/omap/omap_vout.c
index b3a5ecd..95daf98 100644
--- a/drivers/media/video/omap/omap_vout.c
+++ b/drivers/media/video/omap/omap_vout.c
@@ -1165,12 +1165,17 @@ static int vidioc_try_fmt_vid_overlay(struct file
*file, void *fh,
  {
   int ret = 0;
   struct omap_vout_device *vout = fh;
+ struct omap_overlay *ovl;
+ struct omapvideo_info *ovid;
   struct v4l2_window *win =f-fmt.win;

+ ovid =vout-vid_info;
+ ovl = ovid-overlays[0];
+

[Hiremath, Vaibhav] I think it will be helpful if you put some comment above 
this line on why video1, something like,

/*
  * Global alpha is not supported on Video1 pipeline/overlay
  */


Sure, i'll add this comment.




   ret = omap_vout_try_window(vout-fbuf, win);

   if (!ret) {
- if (vout-vid == OMAP_VIDEO1)
+ if ((ovl-caps  OMAP_DSS_OVL_CAP_GLOBAL_ALPHA) == 0)
   win-global_alpha = 255;
   else
   win-global_alpha = f-fmt.win.global_alpha;
@@ -1194,8 +1199,7 @@ static int vidioc_s_fmt_vid_overlay(struct file
*file, void *fh,

   ret = omap_vout_new_window(vout-crop,vout-win,vout-fbuf,
win);
   if (!ret) {
- /* Video1 plane does not support global alpha */
- if (ovl-id == OMAP_DSS_VIDEO1)
+ if ((ovl-caps  OMAP_DSS_OVL_CAP_GLOBAL_ALPHA) == 0)
   vout-win.global_alpha = 255;
   else
   vout-win.global_alpha = f-fmt.win.global_alpha;
@@ -1788,7 +1792,9 @@ static int vidioc_s_fbuf(struct file *file, void *fh,
   if (ovl-manager  ovl-manager-get_manager_info
   ovl-manager-set_manager_info) {
   ovl-manager-get_manager_info(ovl-manager,info);
- info.alpha_enabled = enable;
+ /* enable this only if there is no zorder cap */
+ if ((ovl-caps  OMAP_DSS_OVL_CAP_ZORDER) == 0)
+ info.partial_alpha_enabled = enable;
   if (ovl-manager-set_manager_info(ovl-manager,info))
   return -EINVAL;
   }
@@ -1820,7 +1826,7 @@ static int vidioc_g_fbuf(struct file *file, void *fh,
   }
   if (ovl-manager  ovl-manager-get_manager_info) {
   

Re: [PATCH v2 2/3] OMAPDSS: DISPC: VIDEO3 pipeline support

2011-09-20 Thread Archit Taneja

Hi,

On Tuesday 20 September 2011 01:13 AM, Hiremath, Vaibhav wrote:



-Original Message-
From: Taneja, Archit
Sent: Friday, September 16, 2011 12:09 PM
To: Valkeinen, Tomi
Cc: Hiremath, Vaibhav; linux-omap@vger.kernel.org; Taneja, Archit
Subject: [PATCH v2 2/3] OMAPDSS: DISPC: VIDEO3 pipeline support

Add support for VIDEO3 pipeline on OMAP4:
- Add VIDEO3 pipeline information in dss_features and omapdss.h
- Add VIDEO3 pipeline register coefficients in dispc.h
- Create a new overlay structure corresponding to VIDEO3.
- Make changes in dispc.c for VIDEO3

Signed-off-by: Archit Tanejaarc...@ti.com


snip


diff --git a/drivers/video/omap2/dss/dss_features.h
b/drivers/video/omap2/dss/dss_features.h
index e81271a..6a6c05d 100644
--- a/drivers/video/omap2/dss/dss_features.h
+++ b/drivers/video/omap2/dss/dss_features.h
@@ -25,7 +25,7 @@
  #endif

  #define MAX_DSS_MANAGERS 3
-#define MAX_DSS_OVERLAYS 3
+#define MAX_DSS_OVERLAYS 4

[Hiremath, Vaibhav] Not related to this patch as such, but I think we should 
now get rid of these macros and use run-time mechanism.


This macro is used within DSS2 to declare the size of some arrays. So a 
runtime mechanism isn't possible(unless we allocate the arrays 
dynamically itself, but they are used for trivial purposes, and won't be 
large in size, so I don't think that this is needed).


We anyway use the function omap_dss_get_num_overlays() wherever possible.



Overall this patch looks ok to me, I will test it tomorrow and will update you.


Thanks,
Archit



Thanks,
Vaibhav


  #define MAX_DSS_LCD_MANAGERS 2
  #define MAX_NUM_DSI  2

diff --git a/drivers/video/omap2/dss/overlay.c
b/drivers/video/omap2/dss/overlay.c
index afb7583..11d21e3 100644
--- a/drivers/video/omap2/dss/overlay.c
+++ b/drivers/video/omap2/dss/overlay.c
@@ -615,6 +615,11 @@ void dss_init_overlays(struct platform_device *pdev)
   ovl-id = OMAP_DSS_VIDEO2;
   ovl-info.global_alpha = 255;
   break;
+ case 3:
+ ovl-name = vid3;
+ ovl-id = OMAP_DSS_VIDEO3;
+ ovl-info.global_alpha = 255;
+ break;
   }

   ovl-set_manager =omap_dss_set_manager;
diff --git a/include/video/omapdss.h b/include/video/omapdss.h
index 5f0ce5e..1f12559 100644
--- a/include/video/omapdss.h
+++ b/include/video/omapdss.h
@@ -41,6 +41,8 @@
  #define DISPC_IRQ_WAKEUP (1  16)
  #define DISPC_IRQ_SYNC_LOST2 (1  17)
  #define DISPC_IRQ_VSYNC2 (1  18)
+#define DISPC_IRQ_VID3_END_WIN   (1  19)
+#define DISPC_IRQ_VID3_FIFO_UNDERFLOW(1  20)
  #define DISPC_IRQ_ACBIAS_COUNT_STAT2 (1  21)
  #define DISPC_IRQ_FRAMEDONE2 (1  22)
  #define DISPC_IRQ_FRAMEDONEWB(1  23)
@@ -63,7 +65,8 @@ enum omap_display_type {
  enum omap_plane {
   OMAP_DSS_GFX= 0,
   OMAP_DSS_VIDEO1 = 1,
- OMAP_DSS_VIDEO2 = 2
+ OMAP_DSS_VIDEO2 = 2,
+ OMAP_DSS_VIDEO3 = 3,
  };

  enum omap_channel {
--
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: [PATCH 0/7] Add L2 cache cleaning to generic CPU suspend

2011-09-20 Thread Russell King - ARM Linux
On Tue, Sep 20, 2011 at 11:47:18AM +0800, Shawn Guo wrote:
 On Mon, Sep 19, 2011 at 05:37:41PM +0100, Russell King - ARM Linux wrote:
  This is a re-post of the previous patch series, but with an additional
  TLB flush to ensure that hte global TLB entry in the page tables is
  flushed out.  This is a flush of all TLB entries, but it could probably
  be more targetted if we need to.
  
 
 Here is the diff on suspend.c between last post and this series.  With
 the outer_clean_range() calls added back, the series works fine on
 imx6q, otherwise it hangs on resume.

You seem to be missing patch 7 from the second series.
--
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 0/7] Add L2 cache cleaning to generic CPU suspend

2011-09-20 Thread Shawn Guo
On Tue, Sep 20, 2011 at 08:46:25AM +0100, Russell King - ARM Linux wrote:
 On Tue, Sep 20, 2011 at 11:47:18AM +0800, Shawn Guo wrote:
  On Mon, Sep 19, 2011 at 05:37:41PM +0100, Russell King - ARM Linux wrote:
   This is a re-post of the previous patch series, but with an additional
   TLB flush to ensure that hte global TLB entry in the page tables is
   flushed out.  This is a flush of all TLB entries, but it could probably
   be more targetted if we need to.
   
  
  Here is the diff on suspend.c between last post and this series.  With
  the outer_clean_range() calls added back, the series works fine on
  imx6q, otherwise it hangs on resume.
 
 You seem to be missing patch 7 from the second series.
 
Oops, indeed.  So on imx6q for all the series:

Tested-by: Shawn Guo shawn@linaro.org

-- 
Regards,
Shawn

--
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


suspend/resume trouble on 2.6.39

2011-09-20 Thread Tasslehoff Kjappfot
I have problems making suspend/resume work on 2.6.39 from
org.openembedded.dev. I believe this kernel has most/all functionality
from the pm-branch. I've tested on Beagleboard C3 (which never
resumes), and slightly modified C3 (which resumes, but says that it
had problems with core_pwrdm). Below is some output from the latter.

Output from suspend/resume:
root@proto:~# echo mem  /sys/power/state
[  165.707061] PM: Syncing filesystems ... done.
^C[  186.674713] Freezing user space processes ... (elapsed 0.02 seconds) done.
[  186.703308] Freezing remaining freezable tasks ... (elapsed 0.02
seconds) done.
[  186.734863] Suspending console(s) (use no_console_suspend to debug)
[  186.859222] omap_device: usbhs_omap.-1: new worst case deactivate
latency 0: 61035
[  186.860931] PM: suspend of devices complete after 118.225 msecs
[  186.861663] PM: late suspend of devices complete after 0.701 msecs
[  186.862152] omap_device: omap_uart.1: new worst case deactivate
latency 0: 30517
[  193.183654] Powerdomain (core_pwrdm) didn't enter target state 1
[  193.183685] Could not enter target state in pm_suspend
[  193.184448] PM: early resume of devices complete after 0.579 msecs
[  193.570251] PM: resume of devices complete after 385.467 msecs
[  193.624176] Restarting tasks ... done.

mem
root@proto:~#


Before suspend:

root@proto:~# cat /debug/pm_debug/count
usbhost_pwrdm (ON),OFF:0,RET:0,INA:1,ON:2,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0
sgx_pwrdm (OFF),OFF:1,RET:0,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0
per_pwrdm (ON),OFF:0,RET:0,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0
dss_pwrdm (ON),OFF:0,RET:0,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0
cam_pwrdm (RET),OFF:0,RET:1,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0
core_pwrdm 
(ON),OFF:0,RET:0,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0,RET-MEMBANK2-OFF:0
neon_pwrdm (ON),OFF:0,RET:0,INA:0,ON:1,RET-LOGIC-OFF:0
mpu_pwrdm (ON),OFF:0,RET:0,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0
iva2_pwrdm 
(RET),OFF:0,RET:1,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0,RET-MEMBANK2-OFF:0,RET-MEMBANK3-OFF:0,RET-MEMBANK4-OFF:0
per_clkdm-per_pwrdm (20)
usbhost_clkdm-usbhost_pwrdm (3)
cam_clkdm-cam_pwrdm (0)
dss_clkdm-dss_pwrdm (3)
core_l4_clkdm-core_pwrdm (23)
core_l3_clkdm-core_pwrdm (5)
d2d_clkdm-core_pwrdm (0)
sgx_clkdm-sgx_pwrdm (0)
iva2_clkdm-iva2_pwrdm (0)
neon_clkdm-neon_pwrdm (0)
mpu_clkdm-mpu_pwrdm (0)
prm_clkdm-wkup_pwrdm (0)
cm_clkdm-core_pwrdm (0)

After suspend:

root@proto:~# cat /debug/pm_debug/count
usbhost_pwrdm (ON),OFF:0,RET:1,INA:1,ON:3,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0
sgx_pwrdm (OFF),OFF:1,RET:0,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0
per_pwrdm (ON),OFF:0,RET:1,INA:0,ON:2,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0
dss_pwrdm (ON),OFF:0,RET:1,INA:0,ON:2,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0
cam_pwrdm (RET),OFF:0,RET:1,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0
core_pwrdm 
(ON),OFF:0,RET:0,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0,RET-MEMBANK2-OFF:0
neon_pwrdm (ON),OFF:0,RET:1,INA:0,ON:2,RET-LOGIC-OFF:0
mpu_pwrdm (ON),OFF:0,RET:1,INA:0,ON:2,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0
iva2_pwrdm 
(RET),OFF:0,RET:1,INA:0,ON:1,RET-LOGIC-OFF:0,RET-MEMBANK1-OFF:0,RET-MEMBANK2-OFF:0,RET-MEMBANK3-OFF:0,RET-MEMBANK4-OFF:0
per_clkdm-per_pwrdm (20)
usbhost_clkdm-usbhost_pwrdm (3)
cam_clkdm-cam_pwrdm (0)
dss_clkdm-dss_pwrdm (3)
core_l4_clkdm-core_pwrdm (23)
core_l3_clkdm-core_pwrdm (5)
d2d_clkdm-core_pwrdm (0)
sgx_clkdm-sgx_pwrdm (0)
iva2_clkdm-iva2_pwrdm (0)
neon_clkdm-neon_pwrdm (0)
mpu_clkdm-mpu_pwrdm (0)
prm_clkdm-wkup_pwrdm (0)
cm_clkdm-core_pwrdm (0)

I've started reading kernel source, but so far I have no idea what
could be wrong or how to debug this. Anyone got any ideas?

- Tasslehoff
--
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 00/10] OMAP DSS related board changes

2011-09-20 Thread Tomi Valkeinen
Hi Tony,

Here is a bunch of board file patches related to DSS. They have all been sent
for review earlier, and are currently in my tree. Some of them depend on DSS
driver changes, so I'd like to keep them there to avoid compilation errors
(these won't compile if you apply them without patches from DSS tree).

Can you give your ack for these? Alternatively we can see which of these could
go through your tree and I can make a new set.

 Tomi

Thomas Weber (1):
  OMAP: Devkit8000: Change lcd driver to AT070TN83

Tomi Valkeinen (9):
  OMAP: DSS2: Change DSI device naming
  OMAP4: TWL: Add common omapdss supplies
  OMAP: DSS2: HDMI: use default dividers
  OMAP: use dvi panel driver instead of generic-dpi
  OMAP: stalker: Remove LCD device from board file
  OMAP: Add DDC i2c_bus_num to board files
  OMAP: 4430SDP: Remove unneeded lcd config
  OMAP4: 4430SDP: Add panel support to board file
  OMAP4: 4430SDP: Add picodlp support to board file

 arch/arm/mach-omap2/board-3430sdp.c  |7 +-
 arch/arm/mach-omap2/board-4430sdp.c  |  208 ++
 arch/arm/mach-omap2/board-am3517evm.c|6 +-
 arch/arm/mach-omap2/board-cm-t35.c   |6 +-
 arch/arm/mach-omap2/board-devkit8000.c   |   10 +-
 arch/arm/mach-omap2/board-igep0020.c |8 +-
 arch/arm/mach-omap2/board-omap3beagle.c  |8 +-
 arch/arm/mach-omap2/board-omap3evm.c |7 +-
 arch/arm/mach-omap2/board-omap3pandora.c |2 +-
 arch/arm/mach-omap2/board-omap3stalker.c |   40 +--
 arch/arm/mach-omap2/board-omap4panda.c   |8 +-
 arch/arm/mach-omap2/board-overo.c|7 +-
 arch/arm/mach-omap2/display.c|6 +-
 arch/arm/mach-omap2/twl-common.c |   11 ++-
 14 files changed, 230 insertions(+), 104 deletions(-)

-- 
1.7.4.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 01/10] OMAP: DSS2: Change DSI device naming

2011-09-20 Thread Tomi Valkeinen
Currently, there are 2 differently named platform devices generated for
the 2 DSS DSI modules. In order to use the same driver, the dsi devices
should be 2 instances of the same platform device.

Change the platform device names from omapdss_dsi1 and omapdss_dsi2
to omapdss_dsi, and set the device indices to 0 and 1.

Signed-off-by: Archit Taneja arc...@ti.com
Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
---
 arch/arm/mach-omap2/board-devkit8000.c   |2 +-
 arch/arm/mach-omap2/board-omap3pandora.c |2 +-
 arch/arm/mach-omap2/display.c|6 +++---
 arch/arm/mach-omap2/twl-common.c |2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/arm/mach-omap2/board-devkit8000.c 
b/arch/arm/mach-omap2/board-devkit8000.c
index b6002ec..d3941e6 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -267,7 +267,7 @@ static struct twl4030_gpio_platform_data 
devkit8000_gpio_data = {
 
 static struct regulator_consumer_supply devkit8000_vpll1_supplies[] = {
REGULATOR_SUPPLY(vdds_dsi, omapdss),
-   REGULATOR_SUPPLY(vdds_dsi, omapdss_dsi1),
+   REGULATOR_SUPPLY(vdds_dsi, omapdss_dsi.0),
 };
 
 /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c 
b/arch/arm/mach-omap2/board-omap3pandora.c
index 080d7bd..3f10001 100644
--- a/arch/arm/mach-omap2/board-omap3pandora.c
+++ b/arch/arm/mach-omap2/board-omap3pandora.c
@@ -335,7 +335,7 @@ static struct regulator_consumer_supply 
pandora_vmmc3_supply[] = {
 static struct regulator_consumer_supply pandora_vdds_supplies[] = {
REGULATOR_SUPPLY(vdds_sdi, omapdss),
REGULATOR_SUPPLY(vdds_dsi, omapdss),
-   REGULATOR_SUPPLY(vdds_dsi, omapdss_dsi1),
+   REGULATOR_SUPPLY(vdds_dsi, omapdss_dsi.0),
 };
 
 static struct regulator_consumer_supply pandora_vcc_lcd_supply[] = {
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
index a5b7a23..c42df11 100644
--- a/arch/arm/mach-omap2/display.c
+++ b/arch/arm/mach-omap2/display.c
@@ -61,7 +61,7 @@ static const struct omap_dss_hwmod_data 
omap3_dss_hwmod_data[] __initdata = {
{ dss_dispc, omapdss_dispc, -1 },
{ dss_rfbi, omapdss_rfbi, -1 },
{ dss_venc, omapdss_venc, -1 },
-   { dss_dsi1, omapdss_dsi1, -1 },
+   { dss_dsi1, omapdss_dsi, 0 },
 };
 
 static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initdata = {
@@ -69,8 +69,8 @@ static const struct omap_dss_hwmod_data 
omap4_dss_hwmod_data[] __initdata = {
{ dss_dispc, omapdss_dispc, -1 },
{ dss_rfbi, omapdss_rfbi, -1 },
{ dss_venc, omapdss_venc, -1 },
-   { dss_dsi1, omapdss_dsi1, -1 },
-   { dss_dsi2, omapdss_dsi2, -1 },
+   { dss_dsi1, omapdss_dsi, 0 },
+   { dss_dsi2, omapdss_dsi, 1 },
{ dss_hdmi, omapdss_hdmi, -1 },
 };
 
diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c
index daa056e..4f6d216 100644
--- a/arch/arm/mach-omap2/twl-common.c
+++ b/arch/arm/mach-omap2/twl-common.c
@@ -99,7 +99,7 @@ static struct regulator_init_data omap3_vdac_idata = {
 
 static struct regulator_consumer_supply omap3_vpll2_supplies[] = {
REGULATOR_SUPPLY(vdds_dsi, omapdss),
-   REGULATOR_SUPPLY(vdds_dsi, omapdss_dsi1),
+   REGULATOR_SUPPLY(vdds_dsi, omapdss_dsi.0),
 };
 
 static struct regulator_init_data omap3_vpll2_idata = {
-- 
1.7.4.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 02/10] OMAP4: TWL: Add common omapdss supplies

2011-09-20 Thread Tomi Valkeinen
OMAP DSS normally gets power from VCXIO on OMAP4. Add configuration for
this into twl-common.c

Mark VCXIO as always_on, as VCXIO is used by multiple components,
including the MPU, and turning it off when DSS doesn't need it would
lead the device to halt.

Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
---
 arch/arm/mach-omap2/twl-common.c |9 +
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c
index 4f6d216..52243577 100644
--- a/arch/arm/mach-omap2/twl-common.c
+++ b/arch/arm/mach-omap2/twl-common.c
@@ -235,6 +235,12 @@ static struct regulator_init_data omap4_vana_idata = {
},
 };
 
+static struct regulator_consumer_supply omap4_vcxio_supply[] = {
+   REGULATOR_SUPPLY(vdds_dsi, omapdss_dss),
+   REGULATOR_SUPPLY(vdds_dsi, omapdss_dsi.0),
+   REGULATOR_SUPPLY(vdds_dsi, omapdss_dsi.1),
+};
+
 static struct regulator_init_data omap4_vcxio_idata = {
.constraints = {
.min_uV = 180,
@@ -243,7 +249,10 @@ static struct regulator_init_data omap4_vcxio_idata = {
| REGULATOR_MODE_STANDBY,
.valid_ops_mask = REGULATOR_CHANGE_MODE
| REGULATOR_CHANGE_STATUS,
+   .always_on  = true,
},
+   .num_consumer_supplies  = ARRAY_SIZE(omap4_vcxio_supply),
+   .consumer_supplies  = omap4_vcxio_supply,
 };
 
 static struct regulator_init_data omap4_vusb_idata = {
-- 
1.7.4.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 03/10] OMAP: Devkit8000: Change lcd driver to AT070TN83

2011-09-20 Thread Tomi Valkeinen
From: Thomas Weber we...@corscience.de

Change lcd driver from generic to AT070TN83.

Signed-off-by: Thomas Weber we...@corscience.de
Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
---
 arch/arm/mach-omap2/board-devkit8000.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-omap2/board-devkit8000.c 
b/arch/arm/mach-omap2/board-devkit8000.c
index d3941e6..da5057e 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -139,7 +139,7 @@ static struct regulator_consumer_supply 
devkit8000_vio_supply[] = {
 };
 
 static struct panel_generic_dpi_data lcd_panel = {
-   .name   = generic,
+   .name   = innolux_at070tn83,
.platform_enable= devkit8000_panel_enable_lcd,
.platform_disable   = devkit8000_panel_disable_lcd,
 };
-- 
1.7.4.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 04/10] OMAP: DSS2: HDMI: use default dividers

2011-09-20 Thread Tomi Valkeinen
Use default regn and regm2 dividers in the hdmi driver if the board file
does not define them.

Cc: Mythri P K mythr...@ti.com
Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
---
 arch/arm/mach-omap2/board-4430sdp.c |9 -
 1 files changed, 0 insertions(+), 9 deletions(-)

diff --git a/arch/arm/mach-omap2/board-4430sdp.c 
b/arch/arm/mach-omap2/board-4430sdp.c
index c7cef44..79c2827 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -652,15 +652,6 @@ static struct omap_dss_device sdp4430_hdmi_device = {
.name = hdmi,
.driver_name = hdmi_panel,
.type = OMAP_DISPLAY_TYPE_HDMI,
-   .clocks = {
-   .dispc  = {
-   .dispc_fclk_src = OMAP_DSS_CLK_SRC_FCK,
-   },
-   .hdmi   = {
-   .regn   = 15,
-   .regm2  = 1,
-   },
-   },
.platform_enable = sdp4430_panel_enable_hdmi,
.platform_disable = sdp4430_panel_disable_hdmi,
.channel = OMAP_DSS_CHANNEL_DIGIT,
-- 
1.7.4.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 05/10] OMAP: use dvi panel driver instead of generic-dpi

2011-09-20 Thread Tomi Valkeinen
Multiple OMAP3/4 boards have a DVI framer output. This patch makes the
boards use the new panel-dvi driver, instead of the panel-generic-dpi
driver.

Separate drivers for fixed size panels and DVI framer gives us cleaner
driver code.

Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
---
 arch/arm/mach-omap2/board-3430sdp.c  |7 +++
 arch/arm/mach-omap2/board-am3517evm.c|6 +++---
 arch/arm/mach-omap2/board-cm-t35.c   |6 +++---
 arch/arm/mach-omap2/board-devkit8000.c   |6 +++---
 arch/arm/mach-omap2/board-igep0020.c |7 +++
 arch/arm/mach-omap2/board-omap3beagle.c  |7 +++
 arch/arm/mach-omap2/board-omap3evm.c |7 +++
 arch/arm/mach-omap2/board-omap3stalker.c |6 +++---
 arch/arm/mach-omap2/board-omap4panda.c   |7 +++
 arch/arm/mach-omap2/board-overo.c|6 +++---
 10 files changed, 30 insertions(+), 35 deletions(-)

diff --git a/arch/arm/mach-omap2/board-3430sdp.c 
b/arch/arm/mach-omap2/board-3430sdp.c
index bd600cf..18c4d19 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -37,7 +37,7 @@
 #include plat/dma.h
 #include plat/gpmc.h
 #include video/omapdss.h
-#include video/omap-panel-generic-dpi.h
+#include video/omap-panel-dvi.h
 
 #include plat/gpmc-smc91x.h
 
@@ -186,8 +186,7 @@ static struct omap_dss_device sdp3430_lcd_device = {
.platform_disable   = sdp3430_panel_disable_lcd,
 };
 
-static struct panel_generic_dpi_data dvi_panel = {
-   .name   = generic,
+static struct panel_dvi_platform_data dvi_panel = {
.platform_enable= sdp3430_panel_enable_dvi,
.platform_disable   = sdp3430_panel_disable_dvi,
 };
@@ -195,7 +194,7 @@ static struct panel_generic_dpi_data dvi_panel = {
 static struct omap_dss_device sdp3430_dvi_device = {
.name   = dvi,
.type   = OMAP_DISPLAY_TYPE_DPI,
-   .driver_name= generic_dpi_panel,
+   .driver_name= dvi,
.data   = dvi_panel,
.phy.dpi.data_lines = 24,
 };
diff --git a/arch/arm/mach-omap2/board-am3517evm.c 
b/arch/arm/mach-omap2/board-am3517evm.c
index f3006c3..9a68ef5 100644
--- a/arch/arm/mach-omap2/board-am3517evm.c
+++ b/arch/arm/mach-omap2/board-am3517evm.c
@@ -36,6 +36,7 @@
 #include plat/usb.h
 #include video/omapdss.h
 #include video/omap-panel-generic-dpi.h
+#include video/omap-panel-dvi.h
 
 #include mux.h
 #include control.h
@@ -333,8 +334,7 @@ static void am3517_evm_panel_disable_dvi(struct 
omap_dss_device *dssdev)
dvi_enabled = 0;
 }
 
-static struct panel_generic_dpi_data dvi_panel = {
-   .name   = generic,
+static struct panel_dvi_platform_data dvi_panel = {
.platform_enable= am3517_evm_panel_enable_dvi,
.platform_disable   = am3517_evm_panel_disable_dvi,
 };
@@ -342,7 +342,7 @@ static struct panel_generic_dpi_data dvi_panel = {
 static struct omap_dss_device am3517_evm_dvi_device = {
.type   = OMAP_DISPLAY_TYPE_DPI,
.name   = dvi,
-   .driver_name= generic_dpi_panel,
+   .driver_name= dvi,
.data   = dvi_panel,
.phy.dpi.data_lines = 24,
 };
diff --git a/arch/arm/mach-omap2/board-cm-t35.c 
b/arch/arm/mach-omap2/board-cm-t35.c
index 3af8aab..2d112bf 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -43,6 +43,7 @@
 #include plat/usb.h
 #include video/omapdss.h
 #include video/omap-panel-generic-dpi.h
+#include video/omap-panel-dvi.h
 #include plat/mcspi.h
 
 #include mach/hardware.h
@@ -242,8 +243,7 @@ static struct omap_dss_device cm_t35_lcd_device = {
.phy.dpi.data_lines = 18,
 };
 
-static struct panel_generic_dpi_data dvi_panel = {
-   .name   = generic,
+static struct panel_dvi_platform_data dvi_panel = {
.platform_enable= cm_t35_panel_enable_dvi,
.platform_disable   = cm_t35_panel_disable_dvi,
 };
@@ -251,7 +251,7 @@ static struct panel_generic_dpi_data dvi_panel = {
 static struct omap_dss_device cm_t35_dvi_device = {
.name   = dvi,
.type   = OMAP_DISPLAY_TYPE_DPI,
-   .driver_name= generic_dpi_panel,
+   .driver_name= dvi,
.data   = dvi_panel,
.phy.dpi.data_lines = 24,
 };
diff --git a/arch/arm/mach-omap2/board-devkit8000.c 
b/arch/arm/mach-omap2/board-devkit8000.c
index da5057e..44da207 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -47,6 +47,7 @@
 #include plat/usb.h
 #include video/omapdss.h
 #include video/omap-panel-generic-dpi.h
+#include video/omap-panel-dvi.h
 
 #include plat/mcspi.h
 #include linux/input/matrix_keypad.h
@@ -152,8 +153,7 @@ static struct omap_dss_device devkit8000_lcd_device = {

[PATCH 06/10] OMAP: stalker: Remove LCD device from board file

2011-09-20 Thread Tomi Valkeinen
OMAP3 Stalker board has definitions for LCD, but uses the generic driver
without any information what kind of LCD it has. The board should use a
particular panel type from panel-generic-dpi driver, not the generic
one.

As I haven't gotten response the signer-off of stalker board about the
issue, this patch removes the LCD support from the board file. This will
allow us to clean up the panel-generic-dpi driver and make it support
only fixed size panels.

CC: Jason Lam l...@ema-tech.com
Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
---
 arch/arm/mach-omap2/board-omap3stalker.c |   34 --
 1 files changed, 0 insertions(+), 34 deletions(-)

diff --git a/arch/arm/mach-omap2/board-omap3stalker.c 
b/arch/arm/mach-omap2/board-omap3stalker.c
index 8ab99f1..106a2ba 100644
--- a/arch/arm/mach-omap2/board-omap3stalker.c
+++ b/arch/arm/mach-omap2/board-omap3stalker.c
@@ -108,39 +108,6 @@ static void __init omap3_stalker_display_init(void)
return;
 }
 
-static int omap3_stalker_enable_lcd(struct omap_dss_device *dssdev)
-{
-   if (dvi_enabled) {
-   printk(KERN_ERR cannot enable LCD, DVI is enabled\n);
-   return -EINVAL;
-   }
-   gpio_set_value(DSS_ENABLE_GPIO, 1);
-   gpio_set_value(LCD_PANEL_BKLIGHT_GPIO, 1);
-   lcd_enabled = 1;
-   return 0;
-}
-
-static void omap3_stalker_disable_lcd(struct omap_dss_device *dssdev)
-{
-   gpio_set_value(DSS_ENABLE_GPIO, 0);
-   gpio_set_value(LCD_PANEL_BKLIGHT_GPIO, 0);
-   lcd_enabled = 0;
-}
-
-static struct panel_generic_dpi_data lcd_panel = {
-   .name   = generic,
-   .platform_enable= omap3_stalker_enable_lcd,
-   .platform_disable   = omap3_stalker_disable_lcd,
-};
-
-static struct omap_dss_device omap3_stalker_lcd_device = {
-   .name   = lcd,
-   .driver_name= generic_dpi_panel,
-   .data   = lcd_panel,
-   .phy.dpi.data_lines = 24,
-   .type   = OMAP_DISPLAY_TYPE_DPI,
-};
-
 static int omap3_stalker_enable_tv(struct omap_dss_device *dssdev)
 {
return 0;
@@ -194,7 +161,6 @@ static struct omap_dss_device omap3_stalker_dvi_device = {
 };
 
 static struct omap_dss_device *omap3_stalker_dss_devices[] = {
-   omap3_stalker_lcd_device,
omap3_stalker_tv_device,
omap3_stalker_dvi_device,
 };
-- 
1.7.4.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 07/10] OMAP: Add DDC i2c_bus_num to board files

2011-09-20 Thread Tomi Valkeinen
Add i2c bus number for DVI output for boards with DVI output where the
i2c bus has been confirmed to be connected and working. The driver uses
this to detect if a panel is connected and to read EDID.

Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
---
 arch/arm/mach-omap2/board-igep0020.c|1 +
 arch/arm/mach-omap2/board-omap3beagle.c |1 +
 arch/arm/mach-omap2/board-omap4panda.c  |1 +
 arch/arm/mach-omap2/board-overo.c   |1 +
 4 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/board-igep0020.c 
b/arch/arm/mach-omap2/board-igep0020.c
index 9fda8d8..6ff5222 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -458,6 +458,7 @@ static void igep2_disable_dvi(struct omap_dss_device 
*dssdev)
 static struct panel_dvi_platform_data dvi_panel = {
.platform_enable= igep2_enable_dvi,
.platform_disable   = igep2_disable_dvi,
+   .i2c_bus_num = 3,
 };
 
 static struct omap_dss_device igep2_dvi_device = {
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c 
b/arch/arm/mach-omap2/board-omap3beagle.c
index 26bc860..742ac45 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -206,6 +206,7 @@ static void beagle_disable_dvi(struct omap_dss_device 
*dssdev)
 static struct panel_dvi_platform_data dvi_panel = {
.platform_enable = beagle_enable_dvi,
.platform_disable = beagle_disable_dvi,
+   .i2c_bus_num = 3,
 };
 
 static struct omap_dss_device beagle_dvi_device = {
diff --git a/arch/arm/mach-omap2/board-omap4panda.c 
b/arch/arm/mach-omap2/board-omap4panda.c
index c35384e..a38ed273 100644
--- a/arch/arm/mach-omap2/board-omap4panda.c
+++ b/arch/arm/mach-omap2/board-omap4panda.c
@@ -458,6 +458,7 @@ static void omap4_panda_disable_dvi(struct omap_dss_device 
*dssdev)
 static struct panel_dvi_platform_data omap4_dvi_panel = {
.platform_enable= omap4_panda_enable_dvi,
.platform_disable   = omap4_panda_disable_dvi,
+   .i2c_bus_num = 3,
 };
 
 struct omap_dss_device omap4_panda_dvi_device = {
diff --git a/arch/arm/mach-omap2/board-overo.c 
b/arch/arm/mach-omap2/board-overo.c
index 06064d5..da94376 100644
--- a/arch/arm/mach-omap2/board-overo.c
+++ b/arch/arm/mach-omap2/board-overo.c
@@ -186,6 +186,7 @@ static void overo_panel_disable_dvi(struct omap_dss_device 
*dssdev)
 static struct panel_dvi_platform_data dvi_panel = {
.platform_enable= overo_panel_enable_dvi,
.platform_disable   = overo_panel_disable_dvi,
+   .i2c_bus_num= 3,
 };
 
 static struct omap_dss_device overo_dvi_device = {
-- 
1.7.4.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 08/10] OMAP: 4430SDP: Remove unneeded lcd config

2011-09-20 Thread Tomi Valkeinen
4430SDP board file contains some unused old LCD configurations. They are
not used and can be removed.

Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
---
 arch/arm/mach-omap2/board-4430sdp.c |   17 -
 1 files changed, 0 insertions(+), 17 deletions(-)

diff --git a/arch/arm/mach-omap2/board-4430sdp.c 
b/arch/arm/mach-omap2/board-4430sdp.c
index 79c2827..62ec9f5 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -340,11 +340,6 @@ static int __init omap_ethernet_init(void)
return status;
 }
 
-static struct platform_device sdp4430_lcd_device = {
-   .name   = sdp4430_lcd,
-   .id = -1,
-};
-
 static struct regulator_consumer_supply sdp4430_vbat_supply[] = {
REGULATOR_SUPPLY(vddvibl, twl6040-vibra),
REGULATOR_SUPPLY(vddvibr, twl6040-vibra),
@@ -374,21 +369,12 @@ static struct platform_device sdp4430_vbat = {
 };
 
 static struct platform_device *sdp4430_devices[] __initdata = {
-   sdp4430_lcd_device,
sdp4430_gpio_keys_device,
sdp4430_leds_gpio,
sdp4430_leds_pwm,
sdp4430_vbat,
 };
 
-static struct omap_lcd_config sdp4430_lcd_config __initdata = {
-   .ctrl_name  = internal,
-};
-
-static struct omap_board_config_kernel sdp4430_config[] __initdata = {
-   { OMAP_TAG_LCD, sdp4430_lcd_config },
-};
-
 static void __init omap_4430sdp_init_early(void)
 {
omap2_init_common_infrastructure();
@@ -793,9 +779,6 @@ static void __init omap_4430sdp_init(void)
package = OMAP_PACKAGE_CBL;
omap4_mux_init(board_mux, NULL, package);
 
-   omap_board_config = sdp4430_config;
-   omap_board_config_size = ARRAY_SIZE(sdp4430_config);
-
omap4_i2c_init();
omap_sfh7741prox_init();
platform_add_devices(sdp4430_devices, ARRAY_SIZE(sdp4430_devices));
-- 
1.7.4.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 09/10] OMAP4: 4430SDP: Add panel support to board file

2011-09-20 Thread Tomi Valkeinen
4430SDP has two Taal DSI panels, connected to DSI 1 and DSI 2 modules.
The panels use a common PWM backlight, which will be implemented later
when the PWM driver has been improved to support the backlight.

Until the PWM driver has been improved, the following hack added to
arch/arm/mach-omap2/board-4430sdp.c can be used to set the backlight to
max:

static int omap_4430sdp_hack_backlight(void)
{
   twl_i2c_write_u8(TWL_MODULE_PWM, 0x7f, LED_PWM2OFF);
   twl_i2c_write_u8(TWL_MODULE_PWM, 0x7f, LED_PWM2ON);
   twl_i2c_write_u8(TWL6030_MODULE_ID1, 0x30, TWL6030_TOGGLE3);
   return 0;
}
late_initcall(omap_4430sdp_hack_backlight);

Signed-off-by: Archit Taneja arc...@ti.com
Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
---
 arch/arm/mach-omap2/board-4430sdp.c |  130 ++-
 1 files changed, 128 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-omap2/board-4430sdp.c 
b/arch/arm/mach-omap2/board-4430sdp.c
index 62ec9f5..187fcae 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -38,6 +38,7 @@
 #include plat/mmc.h
 #include plat/omap4-keypad.h
 #include video/omapdss.h
+#include video/omap-panel-nokia-dsi.h
 #include linux/wl12xx.h
 
 #include mux.h
@@ -52,6 +53,7 @@
 #define OMAP4_SFH7741_ENABLE_GPIO  188
 #define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */
 #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
+#define DISPLAY_SEL_GPIO   59  /* LCD2/PicoDLP switch */
 
 #define GPIO_WIFI_PMENA54
 #define GPIO_WIFI_IRQ  53
@@ -634,6 +636,119 @@ static void sdp4430_panel_disable_hdmi(struct 
omap_dss_device *dssdev)
gpio_free(HDMI_GPIO_HPD);
 }
 
+static struct nokia_dsi_panel_data dsi1_panel = {
+   .name   = taal,
+   .reset_gpio = 102,
+   .use_ext_te = false,
+   .ext_te_gpio= 101,
+   .esd_interval   = 0,
+};
+
+static struct omap_dss_device sdp4430_lcd_device = {
+   .name   = lcd,
+   .driver_name= taal,
+   .type   = OMAP_DISPLAY_TYPE_DSI,
+   .data   = dsi1_panel,
+   .phy.dsi= {
+   .clk_lane   = 1,
+   .clk_pol= 0,
+   .data1_lane = 2,
+   .data1_pol  = 0,
+   .data2_lane = 3,
+   .data2_pol  = 0,
+
+   .module = 0,
+   },
+
+   .clocks = {
+   .dispc = {
+   .channel = {
+   /* Logic Clock = 172.8 MHz */
+   .lck_div= 1,
+   /* Pixel Clock = 34.56 MHz */
+   .pck_div= 5,
+   .lcd_clk_src= 
OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC,
+   },
+   .dispc_fclk_src = OMAP_DSS_CLK_SRC_FCK,
+   },
+
+   .dsi = {
+   .regn   = 16,   /* Fint = 2.4 MHz */
+   .regm   = 180,  /* DDR Clock = 216 MHz */
+   .regm_dispc = 5,/* PLL1_CLK1 = 172.8 MHz */
+   .regm_dsi   = 5,/* PLL1_CLK2 = 172.8 MHz */
+
+   .lp_clk_div = 10,   /* LP Clock = 8.64 MHz */
+   .dsi_fclk_src   = OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DSI,
+   },
+   },
+   .channel= OMAP_DSS_CHANNEL_LCD,
+};
+
+static struct nokia_dsi_panel_data dsi2_panel = {
+   .name   = taal,
+   .reset_gpio = 104,
+   .use_ext_te = false,
+   .ext_te_gpio= 103,
+   .esd_interval   = 0,
+};
+
+static struct omap_dss_device sdp4430_lcd2_device = {
+   .name   = lcd2,
+   .driver_name= taal,
+   .type   = OMAP_DISPLAY_TYPE_DSI,
+   .data   = dsi2_panel,
+   .phy.dsi= {
+   .clk_lane   = 1,
+   .clk_pol= 0,
+   .data1_lane = 2,
+   .data1_pol  = 0,
+   .data2_lane = 3,
+   .data2_pol  = 0,
+
+   .module = 1,
+   },
+
+   .clocks = {
+   .dispc = {
+   .channel = {
+   /* Logic Clock = 172.8 MHz */
+   .lck_div= 1,
+   /* Pixel Clock = 34.56 MHz */
+   .pck_div= 5,
+   .lcd_clk_src= 
OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC,
+   },
+   .dispc_fclk_src = OMAP_DSS_CLK_SRC_FCK,
+   },
+
+   .dsi = {
+   .regn   = 16,   /* 

[PATCH 10/10] OMAP4: 4430SDP: Add picodlp support to board file

2011-09-20 Thread Tomi Valkeinen
An on-board projector named picodlp is available for OMAP4430 SDP.

Entry for this picodlp as a panel is being added in dss_devices array to
the board file.  It needs 4 GPIO pins for interfacing with host
processor and these are defined and two of them are configured in board
file.  Two GPIOs power_on and display_select are configured here.
picodlp also needs an i2c client over i2c controller-2 at address 0x1b.

Signed-off-by: Mayuresh Janorkar ma...@ti.com
Signed-off-by: Mythri P K mythr...@ti.com
Signed-off-by: Tomi Valkeinen tomi.valkei...@ti.com
---
 arch/arm/mach-omap2/board-4430sdp.c |   52 +++
 1 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/board-4430sdp.c 
b/arch/arm/mach-omap2/board-4430sdp.c
index 187fcae..d3874a6 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -39,6 +39,7 @@
 #include plat/omap4-keypad.h
 #include video/omapdss.h
 #include video/omap-panel-nokia-dsi.h
+#include video/omap-panel-picodlp.h
 #include linux/wl12xx.h
 
 #include mux.h
@@ -54,6 +55,7 @@
 #define HDMI_GPIO_HPD 60 /* Hot plug pin for HDMI */
 #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
 #define DISPLAY_SEL_GPIO   59  /* LCD2/PicoDLP switch */
+#define DLP_POWER_ON_GPIO  40
 
 #define GPIO_WIFI_PMENA54
 #define GPIO_WIFI_IRQ  53
@@ -758,10 +760,59 @@ static struct omap_dss_device sdp4430_hdmi_device = {
.channel = OMAP_DSS_CHANNEL_DIGIT,
 };
 
+static struct picodlp_panel_data sdp4430_picodlp_pdata = {
+   .picodlp_adapter_id = 2,
+   .emu_done_gpio  = 44,
+   .pwrgood_gpio   = 45,
+};
+
+static void sdp4430_picodlp_init(void)
+{
+   int r;
+   const struct gpio picodlp_gpios[] = {
+   {DLP_POWER_ON_GPIO, GPIOF_OUT_INIT_LOW,
+   DLP POWER ON},
+   {sdp4430_picodlp_pdata.emu_done_gpio, GPIOF_IN,
+   DLP EMU DONE},
+   {sdp4430_picodlp_pdata.pwrgood_gpio, GPIOF_OUT_INIT_LOW,
+   DLP PWRGOOD},
+   };
+
+   r = gpio_request_array(picodlp_gpios, ARRAY_SIZE(picodlp_gpios));
+   if (r)
+   pr_err(Cannot request PicoDLP GPIOs, error %d\n, r);
+}
+
+static int sdp4430_panel_enable_picodlp(struct omap_dss_device *dssdev)
+{
+   gpio_set_value(DISPLAY_SEL_GPIO, 0);
+   gpio_set_value(DLP_POWER_ON_GPIO, 1);
+
+   return 0;
+}
+
+static void sdp4430_panel_disable_picodlp(struct omap_dss_device *dssdev)
+{
+   gpio_set_value(DLP_POWER_ON_GPIO, 0);
+   gpio_set_value(DISPLAY_SEL_GPIO, 1);
+}
+
+static struct omap_dss_device sdp4430_picodlp_device = {
+   .name   = picodlp,
+   .driver_name= picodlp_panel,
+   .type   = OMAP_DISPLAY_TYPE_DPI,
+   .phy.dpi.data_lines = 24,
+   .channel= OMAP_DSS_CHANNEL_LCD2,
+   .platform_enable= sdp4430_panel_enable_picodlp,
+   .platform_disable   = sdp4430_panel_disable_picodlp,
+   .data   = sdp4430_picodlp_pdata,
+};
+
 static struct omap_dss_device *sdp4430_dss_devices[] = {
sdp4430_lcd_device,
sdp4430_lcd2_device,
sdp4430_hdmi_device,
+   sdp4430_picodlp_device,
 };
 
 static struct omap_dss_board_info sdp4430_dss_data = {
@@ -782,6 +833,7 @@ static void omap_4430sdp_display_init(void)
 
sdp4430_lcd_init();
sdp4430_hdmi_mux_init();
+   sdp4430_picodlp_init();
omap_display_init(sdp4430_dss_data);
 }
 
-- 
1.7.4.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] usb: musb: OMAP4430: Remove a redundant omap4430_phy_init call in usb_musb_init

2011-09-20 Thread Axel Lin
Current code calls omap4430_phy_init() twice in usb_musb_init().
Calling omap4430_phy_init() once is enough.
This patch removes the first omap4430_phy_init() call, which using an
uninitialized pointer as parameter.

This patch elimates below build warning:
arch/arm/mach-omap2/usb-musb.c: In function 'usb_musb_init':
arch/arm/mach-omap2/usb-musb.c:141: warning: 'dev' may be used uninitialized in 
this function

Signed-off-by: Axel Lin axel@gmail.com
---
 arch/arm/mach-omap2/usb-musb.c |3 ---
 1 files changed, 0 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-omap2/usb-musb.c b/arch/arm/mach-omap2/usb-musb.c
index a65145b..19e4dac 100644
--- a/arch/arm/mach-omap2/usb-musb.c
+++ b/arch/arm/mach-omap2/usb-musb.c
@@ -137,9 +137,6 @@ void __init usb_musb_init(struct omap_musb_board_data 
*musb_board_data)
musb_plat.mode = board_data-mode;
musb_plat.extvbus = board_data-extvbus;
 
-   if (cpu_is_omap44xx())
-   omap4430_phy_init(dev);
-
if (cpu_is_omap3517() || cpu_is_omap3505()) {
oh_name = am35x_otg_hs;
name = musb-am35x;
-- 
1.7.4.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: [PATCH 00/10] hwspinlock-next

2011-09-20 Thread Ohad Ben-Cohen
On Mon, Sep 12, 2011 at 7:46 PM, Ohad Ben-Cohen o...@wizery.com wrote:
 This series includes a new u8500 hwspinlock driver from Mathieu,
 a core fix from Juan and several other cleanups/fixes
 (some of which were reported by Arnd while reviewing Mathieu's
 driver).
...
  Documentation/hwspinlock.txt             |   74 +++-
  MAINTAINERS                              |   15 +++
  arch/arm/mach-omap2/hwspinlock.c         |    8 +-
  drivers/hwspinlock/Kconfig               |   27 +++--
  drivers/hwspinlock/Makefile              |    2 +
  drivers/hwspinlock/hwspinlock_core.c     |  204 
 +++---
  drivers/hwspinlock/hwspinlock_internal.h |   40 --
  drivers/hwspinlock/omap_hwspinlock.c     |  127 +++
  drivers/hwspinlock/u8500_hsem.c          |  198 +
  include/linux/hwspinlock.h               |   46 +--
  10 files changed, 516 insertions(+), 225 deletions(-)

I'm wondering how hwspinlock updates like this should go upstream.

The first hwspinlock batch was picked by Tony, because it involved a
bulk of OMAP changes.

Hwspinlock isn't OMAP-specific anymore though (we gained support for
STE's u8500) and the vast majority of changes are in drivers/. We're
still very much ARM-related, though this may change too at some point
(c6x has a similar hardware semaphore peripheral like the u8500
does).

Tony, if you're still willing to pick up these updates I'd be happy to
send you pull requests of course.

Otherwise, I'll appreciate if anyone has any suggestions ?

I'll of course set up a tree for this and ask Stephen to take it to
linux-next as expected (unless someone just prefers to pick up the
acked patches into his tree).

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: [PATCH] iommu/omap: Fix build error with !IOMMU_SUPPORT

2011-09-20 Thread Roedel, Joerg
Hi Laurent,

On Sat, Sep 17, 2011 at 08:02:22PM -0400, Laurent Pinchart wrote:
 On Wednesday 14 September 2011 16:07:39 Joerg Roedel wrote:
  Without this patch it is possible to select the VIDEO_OMAP3
  driver which then selects OMAP_IOVMM. But the omap iommu
  driver is not compiled without IOMMU_SUPPORT enabled. Fix
  that by forcing OMAP_IOMMU and OMAP_IOVMM are enabled before
  VIDEO_OMAP3 can be selected.
 
 What about making VIDEO_OMAP3 select IOMMU_SUPPORT instead then ? Your patch 
 would make the OMAP3 ISP driver disappear from the menu until IOMMU_SUPPORT 
 gets turned on, which can confuse users.

Using 'depends on' rather then 'selects' is common standard in Kconfig.
You can't select PCI drivers without selecting PCI first, for example.
Further selecting whole drivers implicitly isn't a good idea. This can
grow out of control very quickly.

Regards,

Joerg

-- 
AMD Operating System Research Center

Advanced Micro Devices GmbH Einsteinring 24 85609 Dornach
General Managers: Alberto Bozzo, Andrew Bowd
Registration: Dornach, Landkr. Muenchen; Registerger. Muenchen, HRB Nr. 43632

--
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 0/7] Add L2 cache cleaning to generic CPU suspend

2011-09-20 Thread Santosh
On Monday 19 September 2011 10:07 PM, Russell King - ARM Linux wrote:
 This is a re-post of the previous patch series, but with an additional
 TLB flush to ensure that hte global TLB entry in the page tables is
 flushed out.  This is a flush of all TLB entries, but it could probably
 be more targetted if we need to.
 
I have tried this seven patches + already merged 4 patches against RC4
and OMAP4 PM patches and they continue to work as expected.

I guess once Lorenzo confirms that his userspace segmentation faults
are fixed with the TLB flush updates, the series is good for the merge.

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


Re: [PATCH] iommu/omap: Fix build error with !IOMMU_SUPPORT

2011-09-20 Thread Laurent Pinchart
Hi Joerg,

On Tuesday 20 September 2011 12:01:46 Roedel, Joerg wrote:
 On Sat, Sep 17, 2011 at 08:02:22PM -0400, Laurent Pinchart wrote:
  On Wednesday 14 September 2011 16:07:39 Joerg Roedel wrote:
   Without this patch it is possible to select the VIDEO_OMAP3
   driver which then selects OMAP_IOVMM. But the omap iommu
   driver is not compiled without IOMMU_SUPPORT enabled. Fix
   that by forcing OMAP_IOMMU and OMAP_IOVMM are enabled before
   VIDEO_OMAP3 can be selected.
  
  What about making VIDEO_OMAP3 select IOMMU_SUPPORT instead then ? Your
  patch would make the OMAP3 ISP driver disappear from the menu until
  IOMMU_SUPPORT gets turned on, which can confuse users.
 
 Using 'depends on' rather then 'selects' is common standard in Kconfig.
 You can't select PCI drivers without selecting PCI first, for example.

You wouldn't expect a PCI driver to work without PCI support. My concern is 
that most OMAP3 ISP users won't know that IOMMU supports is required. Feel 
free to ignore it though :-)

 Further selecting whole drivers implicitly isn't a good idea. This can
 grow out of control very quickly.

-- 
Regards,

Laurent Pinchart
--
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/25] OMAP4: PM: suspend, CPU-hotplug and CPUilde support

2011-09-20 Thread Vishwanath Sripathy
 -Original Message-
 From: linux-arm-kernel-boun...@lists.infradead.org [mailto:linux-
 arm-kernel-boun...@lists.infradead.org] On Behalf Of Santosh
 Shilimkar
 Sent: Sunday, September 04, 2011 7:24 PM
 To: linux-omap@vger.kernel.org
 Cc: khil...@ti.com; Santosh Shilimkar; rna...@ti.com;
 li...@arm.linux.org.uk; linux-arm-ker...@lists.infradead.org
 Subject: [PATCH 00/25] OMAP4: PM: suspend, CPU-hotplug and CPUilde
 support

 This series adds OMAP4 MPUSS (MPU SubSystem) power management
 support for
 suspend (S2R), CPU hotplug and CPUidle.

 Most of these patches have been posted and reviewed earlier [1] on
 the list
 and have missed last couple of merge windows because of dependencies.
 New set of patches have diverged more and hence the series version
 continuity isn't maintained.

 Below are the main updates from previous versions.
 - Use of generic ARM suspend hooks instead of OMAP custom code.
 - Making use of common GIC code instead of OMAP custom code.
 - Use of generic CPU PM notifiers for CPUIDLE and suspend.
 - Use of CPU PM notifiers and hotplug notifiers for GIC extension.
 - PM support of OMAP4 HS devices.
 - Introduction of interconnect barriers as per the OMAP4
 requirements.

 Special thanks to,
 - Kevin Hilman for the detailed reviews.
 - Russell for adding the L2 cache handling support to generic
 suspend.
 - Colin Cross for the generic CPU PM notifier patches.
 - Rajendra Nayak and Paul Walmsley for clock-domain sequencing
 series.

 Below series has dependency on Russell's L2 generic suspend support
 [2]
 and earlier posted CPU PM notifiers series [3].
 An integrated branch with these dependencies can be found here [4].

 The series is tested on OMAP4430 SDP for suspend, hotplug and
 CPUidle
 with OMAP4 GP and HS (secure) devices.

 The following changes since commit
 c6a389f123b9f68d605bb7e0f9b32ec1e3e14132:

   Linux 3.1-rc4 (2011-08-28 21:16:01 -0700)

 are available in the git repository at:
   git://gitorious.org/omap-sw-develoment/linux-omap-dev.git v3.1-
 rc4-omap4-mpuss-pm
I have tested these patch series after adding core retention support  (In
suspend/resume path)[1] and it worked Fine. I do see that Core and MPU are
entering CSWR upon suspend and able to wake up via uart.

You could add tested-by: Vishwanath BS  vishwanath...@ti.com if you
want.

[1]: git://gitorious.org/omap-pm/linux.git omap4_core_pm

Regards
Vishwa

 Santosh Shilimkar (25):
   ARM: mm: Add strongly ordered descriptor support.
   OMAP4: Redefine mandatory barriers for OMAP to include
 interconnect barriers.
   OMAP4: PM: Use custom omap_do_wfi() for suspend and default
 idle.
   OMAP4: Remove un-used do_wfi() macro.
   OMAP4: Use WARN_ON() instead of BUG_ON() with graceful exit
   OMAP4: Export omap4_get_base*() rather than global address
 pointers
   OMAP4: PM: Add SAR RAM support
   OMAP4: PM: Keep static dep between MPUSS-EMIF and MPUSS-L3 and
 DUCATI-L3
   OMAP4: PM: Avoid omap4_pm_init() on OMAP4430 ES1.0
   OMAP4: PM: Initialise all the clockdomains to supported states
   OMAP: Add Secure HAL and monitor mode API infrastructure.
   OMAP: Add support to allocate the memory for secure RAM
   OMAP4: PM: Add WakeupGen module as OMAP gic_arch_extn
   OMAP4: PM: Add CPUX OFF mode support
   OMAP4: Remove __INIT from omap_secondary_startup() to re-use
 it for hotplug.
   OMAP4: PM: Program CPU1 to hit OFF when off-lined
   OMAP4: PM: CPU1 wakeup workaround from Low power modes
   OMAP4: suspend: Add MPUSS power domain RETENTION support
   OMAP4: PM: Add WakeupGen and secure GIC low power support
   OMAP4: PM: Add L2X0 cache lowpower support
   OMAP4: PM: Add MPUSS power domain OSWR support
   OMAP4: PM: Add power domain statistics support
   OMAP4: PM: Add CPUidle support
   OMAP4: cpuidle: Switch to gptimer from twd in deeper C-states.
   OMAP3: CPUidle: Make use of CPU PM notifiers

  arch/arm/include/asm/mach/map.h|1 +
  arch/arm/include/asm/pgtable.h |3 +
  arch/arm/mach-omap2/Kconfig|1 +
  arch/arm/mach-omap2/Makefile   |   15 +-
  arch/arm/mach-omap2/cpuidle34xx.c  |7 +
  arch/arm/mach-omap2/cpuidle44xx.c  |  206
 ++
  arch/arm/mach-omap2/include/mach/barriers.h|   48 +++
  arch/arm/mach-omap2/include/mach/omap-secure.h |   57 +++
  arch/arm/mach-omap2/include/mach/omap-wakeupgen.h  |   39 ++
  arch/arm/mach-omap2/include/mach/omap4-common.h|   70 +++-
  arch/arm/mach-omap2/omap-headsmp.S |5 -
  arch/arm/mach-omap2/omap-hotplug.c |   14 +-
  arch/arm/mach-omap2/omap-mpuss-lowpower.c  |  398
 +++
  arch/arm/mach-omap2/omap-secure.c  |   81 
  arch/arm/mach-omap2/{omap44xx-smc.S = omap-smc.S} |   23 ++
  arch/arm/mach-omap2/omap-smp.c |   38 ++
  

[PATCH v16 10/12] OMAP: dmtimer: extend spinlock in request functions

2011-09-20 Thread Tarun Kanti DebBarma
The request functions now verify the success of omap_dm_timer_prepare() call
after a timer is acquired. If *_prepare() fails then we have to release the
timer. In order to avoid race condition during this time, include *_prepare()
within lock.

Signed-off-by: Tarun Kanti DebBarma tarun.ka...@ti.com
Reviewed-by: Santosh Shilimkar santosh.shilim...@ti.com
---
 arch/arm/plat-omap/dmtimer.c |4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index f549c63..631b6af 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -166,7 +166,6 @@ struct omap_dm_timer *omap_dm_timer_request(void)
timer-reserved = 1;
break;
}
-   spin_unlock_irqrestore(dm_timer_lock, flags);
 
if (timer) {
ret = omap_dm_timer_prepare(timer);
@@ -175,6 +174,7 @@ struct omap_dm_timer *omap_dm_timer_request(void)
timer = NULL;
}
}
+   spin_unlock_irqrestore(dm_timer_lock, flags);
 
if (!timer)
pr_debug(%s: timer request failed!\n, __func__);
@@ -197,7 +197,6 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int id)
break;
}
}
-   spin_unlock_irqrestore(dm_timer_lock, flags);
 
if (timer) {
ret = omap_dm_timer_prepare(timer);
@@ -206,6 +205,7 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int id)
timer = NULL;
}
}
+   spin_unlock_irqrestore(dm_timer_lock, flags);
 
if (!timer)
pr_debug(%s: timer%d request failed!\n, __func__, id);
-- 
1.7.0.4

--
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 v16 07/12] OMAP: dmtimer: add timeout to low-level routines

2011-09-20 Thread Tarun Kanti DebBarma
The low-level read and write access routines wait on write-pending register
in posted mode to make sure that previous write is complete on respective
registers. This waiting is done in an infinite while loop. Now it is being
modified to use timeout instead.

Signed-off-by: Tarun Kanti DebBarma tarun.ka...@ti.com
Reviewed-by: Varadarajan, Charulatha ch...@ti.com
Reviewed-by: Santosh Shilimkar santosh.shilim...@ti.com
Acked-by: Cousson, Benoit b-cous...@ti.com
---
 arch/arm/plat-omap/include/plat/dmtimer.h |   29 +++--
 1 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h 
b/arch/arm/plat-omap/include/plat/dmtimer.h
index 351b6cd..e29adfa 100644
--- a/arch/arm/plat-omap/include/plat/dmtimer.h
+++ b/arch/arm/plat-omap/include/plat/dmtimer.h
@@ -37,6 +37,8 @@
 #include linux/io.h
 #include linux/platform_device.h
 
+#include plat/common.h
+
 #ifndef __ASM_ARCH_DMTIMER_H
 #define __ASM_ARCH_DMTIMER_H
 
@@ -227,6 +229,9 @@ int omap_dm_timers_active(void);
 #define OMAP_TIMER_TICK_INT_MASK_COUNT_REG \
(_OMAP_TIMER_TICK_INT_MASK_COUNT_OFFSET | (WP_TOWR  WPSHIFT))
 
+/* 10ms timeout delay */
+#define MAX_WRITE_PEND_WAIT1
+
 struct omap_dm_timer {
unsigned long phys_base;
int id;
@@ -254,9 +259,15 @@ int omap_dm_timer_prepare(struct omap_dm_timer *timer);
 static inline u32 __omap_dm_timer_read(struct omap_dm_timer *timer, u32 reg,
int posted)
 {
-   if (posted)
-   while (__raw_readl(timer-pend)  (reg  WPSHIFT))
-   cpu_relax();
+   int i = 0;
+
+   if (posted) {
+   omap_test_timeout(!(__raw_readl(timer-pend)  (reg  WPSHIFT))
+   , MAX_WRITE_PEND_WAIT, i);
+
+   if (WARN_ON_ONCE(i == MAX_WRITE_PEND_WAIT))
+   pr_err(Read timeout!\n);
+   }
 
return __raw_readl(timer-func_base + (reg  0xff));
 }
@@ -264,9 +275,15 @@ static inline u32 __omap_dm_timer_read(struct 
omap_dm_timer *timer, u32 reg,
 static inline void __omap_dm_timer_write(struct omap_dm_timer *timer,
u32 reg, u32 val, int posted)
 {
-   if (posted)
-   while (__raw_readl(timer-pend)  (reg  WPSHIFT))
-   cpu_relax();
+   int i = 0;
+
+   if (posted) {
+   omap_test_timeout(!(__raw_readl(timer-pend)  (reg  WPSHIFT))
+   , MAX_WRITE_PEND_WAIT, i);
+
+   if (WARN_ON_ONCE(i == MAX_WRITE_PEND_WAIT))
+   pr_err(Write timeout!\n);
+   }
 
__raw_writel(val, timer-func_base + (reg  0xff));
 }
-- 
1.7.0.4

--
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 v16 06/12] OMAP: dmtimer: pm_runtime support

2011-09-20 Thread Tarun Kanti DebBarma
Add pm_runtime feature to dmtimer whereby *_runtime_get_sync()
is called within omap_dm_timer_enable(), pm_runtime_put()
is called in omap_dm_timer_disable(). In addition to calling
pm_runtime_enable, we are calling pm_runtime_irq_safe so that
they can be called from interrupt context.

Signed-off-by: Tarun Kanti DebBarma tarun.ka...@ti.com
Signed-off-by: Partha Basak p-bas...@ti.com
Reviewed-by: Santosh Shilimkar santosh.shilim...@ti.com
Acked-by: Cousson, Benoit b-cous...@ti.com
---
 arch/arm/plat-omap/dmtimer.c  |   33 
 arch/arm/plat-omap/include/plat/dmtimer.h |1 -
 2 files changed, 10 insertions(+), 24 deletions(-)

diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index b486fd2..53821a3 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -38,6 +38,7 @@
 #include linux/io.h
 #include linux/slab.h
 #include linux/err.h
+#include linux/pm_runtime.h
 
 #include plat/dmtimer.h
 
@@ -202,33 +203,13 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_free);
 
 void omap_dm_timer_enable(struct omap_dm_timer *timer)
 {
-   struct dmtimer_platform_data *pdata = timer-pdev-dev.platform_data;
-
-   if (timer-enabled)
-   return;
-
-   if (!pdata-needs_manual_reset) {
-   clk_enable(timer-fclk);
-   clk_enable(timer-iclk);
-   }
-
-   timer-enabled = 1;
+   pm_runtime_get_sync(timer-pdev-dev);
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_enable);
 
 void omap_dm_timer_disable(struct omap_dm_timer *timer)
 {
-   struct dmtimer_platform_data *pdata = timer-pdev-dev.platform_data;
-
-   if (!timer-enabled)
-   return;
-
-   if (!pdata-needs_manual_reset) {
-   clk_disable(timer-iclk);
-   clk_disable(timer-fclk);
-   }
-
-   timer-enabled = 0;
+   pm_runtime_put(timer-pdev-dev);
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_disable);
 
@@ -463,7 +444,7 @@ int omap_dm_timers_active(void)
struct omap_dm_timer *timer;
 
list_for_each_entry(timer, omap_timer_list, node) {
-   if (!timer-enabled)
+   if (!timer-reserved)
continue;
 
if (omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG) 
@@ -533,6 +514,12 @@ static int __devinit omap_dm_timer_probe(struct 
platform_device *pdev)
timer-irq = irq-start;
timer-pdev = pdev;
 
+   /* Skip pm_runtime_enable for OMAP1 */
+   if (!pdata-needs_manual_reset) {
+   pm_runtime_enable(pdev-dev);
+   pm_runtime_irq_safe(pdev-dev);
+   }
+
/* add the timer element to the list */
spin_lock_irqsave(dm_timer_lock, flags);
list_add_tail(timer-node, omap_timer_list);
diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h 
b/arch/arm/plat-omap/include/plat/dmtimer.h
index 6cedc73..351b6cd 100644
--- a/arch/arm/plat-omap/include/plat/dmtimer.h
+++ b/arch/arm/plat-omap/include/plat/dmtimer.h
@@ -243,7 +243,6 @@ struct omap_dm_timer {
 
unsigned long rate;
unsigned reserved:1;
-   unsigned enabled:1;
unsigned posted:1;
struct platform_device *pdev;
struct list_head node;
-- 
1.7.0.4

--
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 v16 01/12] OMAP2+: dmtimer: add device names to flck nodes

2011-09-20 Thread Tarun Kanti DebBarma
Add device name to OMAP2 dmtimer fclk nodes so that the fclk nodes can be
retrieved by doing a clk_get with the corresponding device pointers or
device names.

Reviewed-by: Santosh Shilimkar santosh.shilim...@ti.com
Signed-off-by: Tarun Kanti DebBarma tarun.ka...@ti.com
Signed-off-by: Thara Gopinath th...@ti.com
Acked-by: Cousson, Benoit b-cous...@ti.com
---
 arch/arm/mach-omap2/clock2420_data.c |   48 ++
 arch/arm/mach-omap2/clock2430_data.c |   48 ++
 arch/arm/mach-omap2/clock3xxx_data.c |   36 +
 arch/arm/mach-omap2/clock44xx_data.c |   33 +++
 4 files changed, 165 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/clock2420_data.c 
b/arch/arm/mach-omap2/clock2420_data.c
index debc040..14a6277 100644
--- a/arch/arm/mach-omap2/clock2420_data.c
+++ b/arch/arm/mach-omap2/clock2420_data.c
@@ -1898,6 +1898,54 @@ static struct omap_clk omap2420_clks[] = {
CLK(NULL,   pka_ick,  pka_ick,   CK_242X),
CLK(NULL,   usb_fck,  usb_fck,   CK_242X),
CLK(musb-hdrc,fck,  osc_ck,CK_242X),
+   CLK(omap_timer.1, fck,  gpt1_fck,  CK_242X),
+   CLK(omap_timer.2, fck,  gpt2_fck,  CK_242X),
+   CLK(omap_timer.3, fck,  gpt3_fck,  CK_242X),
+   CLK(omap_timer.4, fck,  gpt4_fck,  CK_242X),
+   CLK(omap_timer.5, fck,  gpt5_fck,  CK_242X),
+   CLK(omap_timer.6, fck,  gpt6_fck,  CK_242X),
+   CLK(omap_timer.7, fck,  gpt7_fck,  CK_242X),
+   CLK(omap_timer.8, fck,  gpt8_fck,  CK_242X),
+   CLK(omap_timer.9, fck,  gpt9_fck,  CK_242X),
+   CLK(omap_timer.10,fck,  gpt10_fck, CK_242X),
+   CLK(omap_timer.11,fck,  gpt11_fck, CK_242X),
+   CLK(omap_timer.12,fck,  gpt12_fck, CK_242X),
+   CLK(omap_timer.1, 32k_ck,   func_32k_ck,   CK_243X),
+   CLK(omap_timer.2, 32k_ck,   func_32k_ck,   CK_243X),
+   CLK(omap_timer.3, 32k_ck,   func_32k_ck,   CK_243X),
+   CLK(omap_timer.4, 32k_ck,   func_32k_ck,   CK_243X),
+   CLK(omap_timer.5, 32k_ck,   func_32k_ck,   CK_243X),
+   CLK(omap_timer.6, 32k_ck,   func_32k_ck,   CK_243X),
+   CLK(omap_timer.7, 32k_ck,   func_32k_ck,   CK_243X),
+   CLK(omap_timer.8, 32k_ck,   func_32k_ck,   CK_243X),
+   CLK(omap_timer.9, 32k_ck,   func_32k_ck,   CK_243X),
+   CLK(omap_timer.10,32k_ck,   func_32k_ck,   CK_243X),
+   CLK(omap_timer.11,32k_ck,   func_32k_ck,   CK_243X),
+   CLK(omap_timer.12,32k_ck,   func_32k_ck,   CK_243X),
+   CLK(omap_timer.1, sys_ck,   sys_ck,CK_243X),
+   CLK(omap_timer.2, sys_ck,   sys_ck,CK_243X),
+   CLK(omap_timer.3, sys_ck,   sys_ck,CK_243X),
+   CLK(omap_timer.4, sys_ck,   sys_ck,CK_243X),
+   CLK(omap_timer.5, sys_ck,   sys_ck,CK_243X),
+   CLK(omap_timer.6, sys_ck,   sys_ck,CK_243X),
+   CLK(omap_timer.7, sys_ck,   sys_ck,CK_243X),
+   CLK(omap_timer.8, sys_ck,   sys_ck,CK_243X),
+   CLK(omap_timer.9, sys_ck,   sys_ck,CK_243X),
+   CLK(omap_timer.10,sys_ck,   sys_ck,CK_243X),
+   CLK(omap_timer.11,sys_ck,   sys_ck,CK_243X),
+   CLK(omap_timer.12,sys_ck,   sys_ck,CK_243X),
+   CLK(omap_timer.1, alt_ck,   alt_ck,CK_243X),
+   CLK(omap_timer.2, alt_ck,   alt_ck,CK_243X),
+   CLK(omap_timer.3, alt_ck,   alt_ck,CK_243X),
+   CLK(omap_timer.4, alt_ck,   alt_ck,CK_243X),
+   CLK(omap_timer.5, alt_ck,   alt_ck,CK_243X),
+   CLK(omap_timer.6, alt_ck,   alt_ck,CK_243X),
+   CLK(omap_timer.7, alt_ck,   alt_ck,CK_243X),
+   CLK(omap_timer.8, alt_ck,   alt_ck,CK_243X),
+   CLK(omap_timer.9, alt_ck,   alt_ck,CK_243X),
+   CLK(omap_timer.10,alt_ck,   alt_ck,CK_243X),
+   CLK(omap_timer.11,alt_ck,   alt_ck,CK_243X),
+   CLK(omap_timer.12,alt_ck,   alt_ck,CK_243X),
 };
 
 /*
diff --git a/arch/arm/mach-omap2/clock2430_data.c 
b/arch/arm/mach-omap2/clock2430_data.c
index 96a942e..ea6717c 100644
--- a/arch/arm/mach-omap2/clock2430_data.c
+++ b/arch/arm/mach-omap2/clock2430_data.c
@@ -1998,6 +1998,54 @@ static struct omap_clk omap2430_clks[] = {
CLK(NULL,   mdm_intc_ick, mdm_intc_ick,  CK_243X),
CLK(omap_hsmmc.0, mmchsdb_fck,  mmchsdb1_fck,  CK_243X),
CLK(omap_hsmmc.1, mmchsdb_fck,  mmchsdb2_fck,  CK_243X),
+   CLK(omap_timer.1, fck,  gpt1_fck,  CK_243X),
+   CLK(omap_timer.2, fck,  gpt2_fck,  CK_243X),
+

[PATCH v16 02/12] OMAP1: dmtimer: conversion to platform devices

2011-09-20 Thread Tarun Kanti DebBarma
Convert OMAP1 dmtimers into a platform devices and then registers with
device model framework so that it can be bound to corresponding driver.

Signed-off-by: Thara Gopinath th...@ti.com
Signed-off-by: Tarun Kanti DebBarma tarun.ka...@ti.com
Reviewed-by: Santosh Shilimkar santosh.shilim...@ti.com
Acked-by: Cousson, Benoit b-cous...@ti.com
---
 arch/arm/mach-omap1/Makefile  |2 +-
 arch/arm/mach-omap1/timer.c   |  173 +
 arch/arm/plat-omap/dmtimer.c  |   56 ++
 arch/arm/plat-omap/include/plat/dmtimer.h |8 ++
 4 files changed, 194 insertions(+), 45 deletions(-)
 create mode 100644 arch/arm/mach-omap1/timer.c

diff --git a/arch/arm/mach-omap1/Makefile b/arch/arm/mach-omap1/Makefile
index 5b114d1..11c85cd 100644
--- a/arch/arm/mach-omap1/Makefile
+++ b/arch/arm/mach-omap1/Makefile
@@ -4,7 +4,7 @@
 
 # Common support
 obj-y := io.o id.o sram.o time.o irq.o mux.o flash.o serial.o devices.o dma.o
-obj-y += clock.o clock_data.o opp_data.o reset.o pm_bus.o
+obj-y += clock.o clock_data.o opp_data.o reset.o pm_bus.o timer.o
 
 obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
 
diff --git a/arch/arm/mach-omap1/timer.c b/arch/arm/mach-omap1/timer.c
new file mode 100644
index 000..6e90665
--- /dev/null
+++ b/arch/arm/mach-omap1/timer.c
@@ -0,0 +1,173 @@
+/**
+ * OMAP1 Dual-Mode Timers - platform device registration
+ *
+ * Contains first level initialization routines which internally
+ * generates timer device information and registers with linux
+ * device model. It also has low level function to chnage the timer
+ * input clock source.
+ *
+ * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ * Tarun Kanti DebBarma tarun.ka...@ti.com
+ * Thara Gopinath th...@ti.com
+ *
+ * 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/clk.h
+#include linux/io.h
+#include linux/err.h
+#include linux/slab.h
+#include linux/platform_device.h
+
+#include mach/irqs.h
+
+#include plat/dmtimer.h
+
+#define OMAP1610_GPTIMER1_BASE 0xfffb1400
+#define OMAP1610_GPTIMER2_BASE 0xfffb1c00
+#define OMAP1610_GPTIMER3_BASE 0xfffb2400
+#define OMAP1610_GPTIMER4_BASE 0xfffb2c00
+#define OMAP1610_GPTIMER5_BASE 0xfffb3400
+#define OMAP1610_GPTIMER6_BASE 0xfffb3c00
+#define OMAP1610_GPTIMER7_BASE 0xfffb7400
+#define OMAP1610_GPTIMER8_BASE 0xfffbd400
+
+#define OMAP1_DM_TIMER_COUNT   8
+
+static int omap1_dm_timer_set_src(struct platform_device *pdev,
+   int source)
+{
+   int n = (pdev-id - 1)  1;
+   u32 l;
+
+   l = __raw_readl(MOD_CONF_CTRL_1)  ~(0x03  n);
+   l |= source  n;
+   __raw_writel(l, MOD_CONF_CTRL_1);
+
+   return 0;
+}
+
+
+int __init omap1_dm_timer_init(void)
+{
+   int i;
+   int ret;
+   struct dmtimer_platform_data *pdata;
+   struct platform_device *pdev;
+
+   if (!cpu_is_omap16xx())
+   return 0;
+
+   for (i = 1; i = OMAP1_DM_TIMER_COUNT; i++) {
+   struct resource res[2];
+   u32 base, irq;
+
+   switch (i) {
+   case 1:
+   base = OMAP1610_GPTIMER1_BASE;
+   irq = INT_1610_GPTIMER1;
+   break;
+   case 2:
+   base = OMAP1610_GPTIMER2_BASE;
+   irq = INT_1610_GPTIMER2;
+   break;
+   case 3:
+   base = OMAP1610_GPTIMER3_BASE;
+   irq = INT_1610_GPTIMER3;
+   break;
+   case 4:
+   base = OMAP1610_GPTIMER4_BASE;
+   irq = INT_1610_GPTIMER4;
+   break;
+   case 5:
+   base = OMAP1610_GPTIMER5_BASE;
+   irq = INT_1610_GPTIMER5;
+   break;
+   case 6:
+   base = OMAP1610_GPTIMER6_BASE;
+   irq = INT_1610_GPTIMER6;
+   break;
+   case 7:
+   base = OMAP1610_GPTIMER7_BASE;
+   irq = INT_1610_GPTIMER7;
+   break;
+   case 8:
+   base = OMAP1610_GPTIMER8_BASE;
+   irq = INT_1610_GPTIMER8;
+   break;
+   default:
+   /*
+* not supposed to reach here.
+* this is to remove warning.
+ 

[PATCH v16 04/12] OMAP: dmtimer: platform driver

2011-09-20 Thread Tarun Kanti DebBarma
Add dmtimer platform driver functions which include:
(1) platform driver initialization
(2) driver probe function
(3) driver remove function

Signed-off-by: Tarun Kanti DebBarma tarun.ka...@ti.com
Signed-off-by: Thara Gopinath th...@ti.com
Reviewed-by: Santosh Shilimkar santosh.shilim...@ti.com
Acked-by: Cousson, Benoit b-cous...@ti.com
---
 arch/arm/plat-omap/dmtimer.c  |  139 +++--
 arch/arm/plat-omap/include/plat/dmtimer.h |2 +
 2 files changed, 135 insertions(+), 6 deletions(-)

diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index 571c14b..92d5aff 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -35,14 +35,9 @@
  * 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#include linux/init.h
-#include linux/spinlock.h
-#include linux/errno.h
-#include linux/list.h
-#include linux/clk.h
-#include linux/delay.h
 #include linux/io.h
 #include linux/module.h
+#include linux/slab.h
 #include mach/hardware.h
 #include plat/dmtimer.h
 #include mach/irqs.h
@@ -149,6 +144,7 @@ static const char **dm_source_names;
 static struct clk **dm_source_clocks;
 
 static spinlock_t dm_timer_lock;
+static LIST_HEAD(omap_timer_list);
 
 /*
  * Reads timer registers in posted and non-posted mode. The posted mode bit
@@ -549,6 +545,137 @@ int omap_dm_timers_active(void)
 }
 EXPORT_SYMBOL_GPL(omap_dm_timers_active);
 
+/**
+ * omap_dm_timer_probe - probe function called for every registered device
+ * @pdev:  pointer to current timer platform device
+ *
+ * Called by driver framework at the end of device registration for all
+ * timer devices.
+ */
+static int __devinit omap_dm_timer_probe(struct platform_device *pdev)
+{
+   int ret;
+   unsigned long flags;
+   struct omap_dm_timer *timer;
+   struct resource *mem, *irq, *ioarea;
+   struct dmtimer_platform_data *pdata = pdev-dev.platform_data;
+
+   if (!pdata) {
+   dev_err(pdev-dev, %s: no platform data.\n, __func__);
+   return -ENODEV;
+   }
+
+   irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
+   if (unlikely(!irq)) {
+   dev_err(pdev-dev, %s: no IRQ resource.\n, __func__);
+   return -ENODEV;
+   }
+
+   mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+   if (unlikely(!mem)) {
+   dev_err(pdev-dev, %s: no memory resource.\n, __func__);
+   return -ENODEV;
+   }
+
+   ioarea = request_mem_region(mem-start, resource_size(mem),
+   pdev-name);
+   if (!ioarea) {
+   dev_err(pdev-dev, %s: region already claimed.\n, __func__);
+   return -EBUSY;
+   }
+
+   timer = kzalloc(sizeof(struct omap_dm_timer), GFP_KERNEL);
+   if (!timer) {
+   dev_err(pdev-dev, %s: no memory for omap_dm_timer.\n,
+   __func__);
+   ret = -ENOMEM;
+   goto err_free_ioregion;
+   }
+
+   timer-io_base = ioremap(mem-start, resource_size(mem));
+   if (!timer-io_base) {
+   dev_err(pdev-dev, %s: ioremap failed.\n, __func__);
+   ret = -ENOMEM;
+   goto err_free_mem;
+   }
+
+   timer-id = pdev-id;
+   timer-irq = irq-start;
+   timer-pdev = pdev;
+   __omap_dm_timer_init_regs(timer);
+
+   /* add the timer element to the list */
+   spin_lock_irqsave(dm_timer_lock, flags);
+   list_add_tail(timer-node, omap_timer_list);
+   spin_unlock_irqrestore(dm_timer_lock, flags);
+
+   dev_dbg(pdev-dev, Device Probed.\n);
+
+   return 0;
+
+err_free_mem:
+   kfree(timer);
+
+err_free_ioregion:
+   release_mem_region(mem-start, resource_size(mem));
+
+   return ret;
+}
+
+/**
+ * omap_dm_timer_remove - cleanup a registered timer device
+ * @pdev:  pointer to current timer platform device
+ *
+ * Called by driver framework whenever a timer device is unregistered.
+ * In addition to freeing platform resources it also deletes the timer
+ * entry from the local list.
+ */
+static int __devexit omap_dm_timer_remove(struct platform_device *pdev)
+{
+   struct omap_dm_timer *timer;
+   unsigned long flags;
+   int ret = -EINVAL;
+
+   spin_lock_irqsave(dm_timer_lock, flags);
+   list_for_each_entry(timer, omap_timer_list, node)
+   if (timer-pdev-id == pdev-id) {
+   list_del(timer-node);
+   kfree(timer);
+   ret = 0;
+   break;
+   }
+   spin_unlock_irqrestore(dm_timer_lock, flags);
+
+   return ret;
+}
+
+static struct platform_driver omap_dm_timer_driver = {
+   .probe  = omap_dm_timer_probe,
+   .remove = omap_dm_timer_remove,
+   .driver = {
+   .name   = omap_timer,
+   },
+};
+
+static int __init omap_dm_timer_driver_init(void)
+{
+   return platform_driver_register(omap_dm_timer_driver);
+}
+

[PATCH v16 09/12] OMAP: dmtimer: low-power mode support

2011-09-20 Thread Tarun Kanti DebBarma
Clock is enabled only when timer is started and disabled when the the timer
is stopped. Therefore before accessing registers in functions clock is enabled
and then disabled back at the end of access. Context save is done dynamically
whenever the registers are modified. Context restore is called when context is
lost.

Signed-off-by: Tarun Kanti DebBarma tarun.ka...@ti.com
Reviewed-by: Santosh Shilimkar santosh.shilim...@ti.com
---
 arch/arm/mach-omap2/timer.c   |9 ++
 arch/arm/plat-omap/dmtimer.c  |  126 +++-
 arch/arm/plat-omap/include/plat/dmtimer.h |   31 +++
 3 files changed, 161 insertions(+), 5 deletions(-)

diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index e042b3c..041fed9 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -44,6 +44,9 @@
 #include plat/common.h
 #include plat/omap_hwmod.h
 #include plat/omap_device.h
+#include plat/omap-pm.h
+
+#include powerdomain.h
 
 /* Parent clocks, eventually these will come from the clock framework */
 
@@ -433,6 +436,7 @@ static int __init omap_timer_init(struct omap_hwmod *oh, 
void *unused)
struct dmtimer_platform_data *pdata;
struct omap_device *od;
struct omap_timer_capability_dev_attr *timer_dev_attr;
+   struct powerdomain *pwrdm;
 
pr_debug(%s: %s\n, __func__, oh-name);
 
@@ -463,6 +467,11 @@ static int __init omap_timer_init(struct omap_hwmod *oh, 
void *unused)
pdata-set_timer_src = omap2_dm_timer_set_src;
pdata-timer_ip_version = oh-class-rev;
 
+   pwrdm = omap_hwmod_get_pwrdm(oh);
+   pdata-loses_context = pwrdm_can_ever_lose_context(pwrdm);
+#ifdef CONFIG_PM
+   pdata-get_context_loss_count = omap_pm_get_dev_context_loss_count;
+#endif
od = omap_device_build(name, id, oh, pdata, sizeof(*pdata),
omap2_dmtimer_latency,
ARRAY_SIZE(omap2_dmtimer_latency),
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index 9c9feb9..f549c63 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -77,6 +77,29 @@ static void omap_dm_timer_write_reg(struct omap_dm_timer 
*timer, u32 reg,
__omap_dm_timer_write(timer, reg, value, timer-posted);
 }
 
+static void omap_timer_restore_context(struct omap_dm_timer *timer)
+{
+   omap_dm_timer_write_reg(timer, OMAP_TIMER_OCP_CFG_OFFSET,
+   timer-context.tiocp_cfg);
+   if (!(timer-tidr  16))
+   __raw_writel(timer-context.tistat, timer-sys_stat);
+
+   __raw_writel(timer-context.tisr, timer-irq_stat);
+   omap_dm_timer_write_reg(timer, OMAP_TIMER_WAKEUP_EN_REG,
+   timer-context.twer);
+   omap_dm_timer_write_reg(timer, OMAP_TIMER_COUNTER_REG,
+   timer-context.tcrr);
+   omap_dm_timer_write_reg(timer, OMAP_TIMER_LOAD_REG,
+   timer-context.tldr);
+   omap_dm_timer_write_reg(timer, OMAP_TIMER_MATCH_REG,
+   timer-context.tmar);
+   omap_dm_timer_write_reg(timer, OMAP_TIMER_IF_CTRL_REG,
+   timer-context.tsicr);
+   __raw_writel(timer-context.tier, timer-irq_ena);
+   omap_dm_timer_write_reg(timer, OMAP_TIMER_CTRL_REG,
+   timer-context.tclr);
+}
+
 static void omap_dm_timer_wait_for_reset(struct omap_dm_timer *timer)
 {
int c;
@@ -96,12 +119,14 @@ static void omap_dm_timer_wait_for_reset(struct 
omap_dm_timer *timer)
 
 static void omap_dm_timer_reset(struct omap_dm_timer *timer)
 {
+   omap_dm_timer_enable(timer);
if (timer-pdev-id != 1) {
omap_dm_timer_write_reg(timer, OMAP_TIMER_IF_CTRL_REG, 0x06);
omap_dm_timer_wait_for_reset(timer);
}
 
__omap_dm_timer_reset(timer, 0, 0);
+   omap_dm_timer_disable(timer);
timer-posted = 1;
 }
 
@@ -117,8 +142,6 @@ int omap_dm_timer_prepare(struct omap_dm_timer *timer)
return -EINVAL;
}
 
-   omap_dm_timer_enable(timer);
-
if (pdata-needs_manual_reset)
omap_dm_timer_reset(timer);
 
@@ -193,7 +216,6 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_request_specific);
 
 void omap_dm_timer_free(struct omap_dm_timer *timer)
 {
-   omap_dm_timer_disable(timer);
clk_put(timer-fclk);
 
WARN_ON(!timer-reserved);
@@ -275,6 +297,11 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_modify_idlect_mask);
 
 void omap_dm_timer_trigger(struct omap_dm_timer *timer)
 {
+   if (unlikely(pm_runtime_suspended(timer-pdev-dev))) {
+   pr_err(%s: timer%d not enabled.\n, __func__, timer-id);
+   return;
+   }
+
omap_dm_timer_write_reg(timer, OMAP_TIMER_TRIGGER_REG, 0);
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_trigger);
@@ -283,11 +310,23 @@ void omap_dm_timer_start(struct omap_dm_timer *timer)
 {
u32 l;
 
+   

[PATCH v16 03/12] OMAP2+: dmtimer: convert to platform devices

2011-09-20 Thread Tarun Kanti DebBarma
Add routines to converts dmtimers to platform devices. The device data
is obtained from hwmod database of respective platform and is registered
to device model after successful binding to driver.
In addition, capability attribute of each of the timers is added in
hwmod database.

Signed-off-by: Tarun Kanti DebBarma tarun.ka...@ti.com
Signed-off-by: Thara Gopinath th...@ti.com
Reviewed-by: Santosh Shilimkar santosh.shilim...@ti.com
Acked-by: Cousson, Benoit b-cous...@ti.com
---
 arch/arm/mach-omap2/omap_hwmod_2420_data.c |   22 +
 arch/arm/mach-omap2/omap_hwmod_2430_data.c |   22 +
 arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |   27 ++
 arch/arm/mach-omap2/omap_hwmod_44xx_data.c |   22 +
 arch/arm/mach-omap2/timer.c|  136 
 arch/arm/plat-omap/include/plat/dmtimer.h  |   12 +++-
 6 files changed, 240 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c 
b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
index b6ea69a..6d72062 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
@@ -269,6 +269,16 @@ static struct omap_hwmod omap2420_iva_hwmod = {
.masters_cnt= ARRAY_SIZE(omap2420_iva_masters),
 };
 
+/* always-on timers dev attribute */
+static struct omap_timer_capability_dev_attr capability_alwon_dev_attr = {
+   .timer_capability   = OMAP_TIMER_ALWON,
+};
+
+/* pwm timers dev attribute */
+static struct omap_timer_capability_dev_attr capability_pwm_dev_attr = {
+   .timer_capability   = OMAP_TIMER_HAS_PWM,
+};
+
 /* timer1 */
 static struct omap_hwmod omap2420_timer1_hwmod;
 
@@ -309,6 +319,7 @@ static struct omap_hwmod omap2420_timer1_hwmod = {
.idlest_idle_bit = OMAP24XX_ST_GPT1_SHIFT,
},
},
+   .dev_attr   = capability_alwon_dev_attr,
.slaves = omap2420_timer1_slaves,
.slaves_cnt = ARRAY_SIZE(omap2420_timer1_slaves),
.class  = omap2xxx_timer_hwmod_class,
@@ -345,6 +356,7 @@ static struct omap_hwmod omap2420_timer2_hwmod = {
.idlest_idle_bit = OMAP24XX_ST_GPT2_SHIFT,
},
},
+   .dev_attr   = capability_alwon_dev_attr,
.slaves = omap2420_timer2_slaves,
.slaves_cnt = ARRAY_SIZE(omap2420_timer2_slaves),
.class  = omap2xxx_timer_hwmod_class,
@@ -381,6 +393,7 @@ static struct omap_hwmod omap2420_timer3_hwmod = {
.idlest_idle_bit = OMAP24XX_ST_GPT3_SHIFT,
},
},
+   .dev_attr   = capability_alwon_dev_attr,
.slaves = omap2420_timer3_slaves,
.slaves_cnt = ARRAY_SIZE(omap2420_timer3_slaves),
.class  = omap2xxx_timer_hwmod_class,
@@ -417,6 +430,7 @@ static struct omap_hwmod omap2420_timer4_hwmod = {
.idlest_idle_bit = OMAP24XX_ST_GPT4_SHIFT,
},
},
+   .dev_attr   = capability_alwon_dev_attr,
.slaves = omap2420_timer4_slaves,
.slaves_cnt = ARRAY_SIZE(omap2420_timer4_slaves),
.class  = omap2xxx_timer_hwmod_class,
@@ -453,6 +467,7 @@ static struct omap_hwmod omap2420_timer5_hwmod = {
.idlest_idle_bit = OMAP24XX_ST_GPT5_SHIFT,
},
},
+   .dev_attr   = capability_alwon_dev_attr,
.slaves = omap2420_timer5_slaves,
.slaves_cnt = ARRAY_SIZE(omap2420_timer5_slaves),
.class  = omap2xxx_timer_hwmod_class,
@@ -490,6 +505,7 @@ static struct omap_hwmod omap2420_timer6_hwmod = {
.idlest_idle_bit = OMAP24XX_ST_GPT6_SHIFT,
},
},
+   .dev_attr   = capability_alwon_dev_attr,
.slaves = omap2420_timer6_slaves,
.slaves_cnt = ARRAY_SIZE(omap2420_timer6_slaves),
.class  = omap2xxx_timer_hwmod_class,
@@ -526,6 +542,7 @@ static struct omap_hwmod omap2420_timer7_hwmod = {
.idlest_idle_bit = OMAP24XX_ST_GPT7_SHIFT,
},
},
+   .dev_attr   = capability_alwon_dev_attr,
.slaves = omap2420_timer7_slaves,
.slaves_cnt = ARRAY_SIZE(omap2420_timer7_slaves),
.class  = omap2xxx_timer_hwmod_class,
@@ -562,6 +579,7 @@ static struct omap_hwmod omap2420_timer8_hwmod = {
.idlest_idle_bit = OMAP24XX_ST_GPT8_SHIFT,
},
},
+   .dev_attr   = capability_alwon_dev_attr,
.slaves = omap2420_timer8_slaves,
.slaves_cnt = ARRAY_SIZE(omap2420_timer8_slaves),
.class  = omap2xxx_timer_hwmod_class,
@@ -598,6 +616,7 @@ static struct omap_hwmod omap2420_timer9_hwmod = {
.idlest_idle_bit = OMAP24XX_ST_GPT9_SHIFT,
},
},
+   .dev_attr   = capability_pwm_dev_attr,
.slaves 

[PATCH v16 11/12] OMAP: dmtimer: add error handling to export APIs

2011-09-20 Thread Tarun Kanti DebBarma
Add error handling code to export APIs.

Signed-off-by: Tarun Kanti DebBarma tarun.ka...@ti.com
Reviewed-by: Santosh Shilimkar santosh.shilim...@ti.com
---
 arch/arm/plat-omap/dmtimer.c  |  101 ++---
 arch/arm/plat-omap/include/plat/dmtimer.h |   24 
 2 files changed, 88 insertions(+), 37 deletions(-)

diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index 631b6af..41755ff 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -214,12 +214,16 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int 
id)
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_request_specific);
 
-void omap_dm_timer_free(struct omap_dm_timer *timer)
+int omap_dm_timer_free(struct omap_dm_timer *timer)
 {
+   if (unlikely(!timer))
+   return -EINVAL;
+
clk_put(timer-fclk);
 
WARN_ON(!timer-reserved);
timer-reserved = 0;
+   return 0;
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_free);
 
@@ -237,7 +241,9 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_disable);
 
 int omap_dm_timer_get_irq(struct omap_dm_timer *timer)
 {
-   return timer-irq;
+   if (timer)
+   return timer-irq;
+   return -EINVAL;
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_get_irq);
 
@@ -281,7 +287,9 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_modify_idlect_mask);
 
 struct clk *omap_dm_timer_get_fclk(struct omap_dm_timer *timer)
 {
-   return timer-fclk;
+   if (timer)
+   return timer-fclk;
+   return NULL;
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_get_fclk);
 
@@ -295,21 +303,25 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_modify_idlect_mask);
 
 #endif
 
-void omap_dm_timer_trigger(struct omap_dm_timer *timer)
+int omap_dm_timer_trigger(struct omap_dm_timer *timer)
 {
-   if (unlikely(pm_runtime_suspended(timer-pdev-dev))) {
-   pr_err(%s: timer%d not enabled.\n, __func__, timer-id);
-   return;
+   if (unlikely(!timer || pm_runtime_suspended(timer-pdev-dev))) {
+   pr_err(%s: timer not available or enabled.\n, __func__);
+   return -EINVAL;
}
 
omap_dm_timer_write_reg(timer, OMAP_TIMER_TRIGGER_REG, 0);
+   return 0;
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_trigger);
 
-void omap_dm_timer_start(struct omap_dm_timer *timer)
+int omap_dm_timer_start(struct omap_dm_timer *timer)
 {
u32 l;
 
+   if (unlikely(!timer))
+   return -EINVAL;
+
omap_dm_timer_enable(timer);
 
if (timer-loses_context) {
@@ -327,15 +339,19 @@ void omap_dm_timer_start(struct omap_dm_timer *timer)
 
/* Save the context */
timer-context.tclr = l;
+   return 0;
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_start);
 
-void omap_dm_timer_stop(struct omap_dm_timer *timer)
+int omap_dm_timer_stop(struct omap_dm_timer *timer)
 {
unsigned long rate = 0;
struct dmtimer_platform_data *pdata = timer-pdev-dev.platform_data;
bool is_omap2 = true;
 
+   if (unlikely(!timer))
+   return -EINVAL;
+
if (pdata-needs_manual_reset)
is_omap2 = false;
else
@@ -358,13 +374,19 @@ void omap_dm_timer_stop(struct omap_dm_timer *timer)
omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
timer-context.tisr = __raw_readl(timer-irq_stat);
omap_dm_timer_disable(timer);
+   return 0;
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_stop);
 
 int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source)
 {
int ret;
-   struct dmtimer_platform_data *pdata = timer-pdev-dev.platform_data;
+   struct dmtimer_platform_data *pdata;
+
+   if (unlikely(!timer))
+   return -EINVAL;
+
+   pdata = timer-pdev-dev.platform_data;
 
if (source  0 || source = 3)
return -EINVAL;
@@ -375,11 +397,14 @@ int omap_dm_timer_set_source(struct omap_dm_timer *timer, 
int source)
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_set_source);
 
-void omap_dm_timer_set_load(struct omap_dm_timer *timer, int autoreload,
+int omap_dm_timer_set_load(struct omap_dm_timer *timer, int autoreload,
unsigned int load)
 {
u32 l;
 
+   if (unlikely(!timer))
+   return -EINVAL;
+
omap_dm_timer_enable(timer);
l = omap_dm_timer_read_reg(timer, OMAP_TIMER_CTRL_REG);
if (autoreload)
@@ -394,15 +419,19 @@ void omap_dm_timer_set_load(struct omap_dm_timer *timer, 
int autoreload,
timer-context.tclr = l;
timer-context.tldr = load;
omap_dm_timer_disable(timer);
+   return 0;
 }
 EXPORT_SYMBOL_GPL(omap_dm_timer_set_load);
 
 /* Optimized set_load which removes costly spin wait in timer_start */
-void omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload,
+int omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload,
 unsigned int load)
 {
u32 l;
 
+   if (unlikely(!timer))
+   return -EINVAL;
+
  

[PATCH v16 05/12] OMAP: dmtimer: switch-over to platform device driver

2011-09-20 Thread Tarun Kanti DebBarma
Register timer devices by going through hwmod database using
hwmod API. The driver probes each of the registered devices.
Functionality which are already performed by hwmod framework
are removed from timer code. New set of timers present on
OMAP4 are now supported.

Signed-off-by: Tarun Kanti DebBarma tarun.ka...@ti.com
Acked-by: Cousson, Benoit b-cous...@ti.com
---
 arch/arm/mach-omap2/timer.c   |   22 ++-
 arch/arm/plat-omap/dmtimer.c  |  353 +
 arch/arm/plat-omap/include/plat/dmtimer.h |   26 +-
 3 files changed, 140 insertions(+), 261 deletions(-)

diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index 2b6632c..e042b3c 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -106,7 +106,7 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode 
mode,
 {
u32 period;
 
-   __omap_dm_timer_stop(clkev, 1, clkev.rate);
+   __omap_dm_timer_stop(clkev, 1, clkev.rate, true);
 
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC:
@@ -478,3 +478,23 @@ static int __init omap_timer_init(struct omap_hwmod *oh, 
void *unused)
 
return ret;
 }
+
+/**
+ * omap2_dm_timer_init - top level regular device initialization
+ *
+ * Uses dedicated hwmod api to parse through hwmod database for
+ * given class name and then build and register the timer device.
+ */
+static int __init omap2_dm_timer_init(void)
+{
+   int ret;
+
+   ret = omap_hwmod_for_each_by_class(timer, omap_timer_init, NULL);
+   if (unlikely(ret)) {
+   pr_err(%s: device registration failed.\n, __func__);
+   return -EINVAL;
+   }
+
+   return 0;
+}
+arch_initcall(omap2_dm_timer_init);
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index 92d5aff..b486fd2 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -36,120 +36,22 @@
  */
 
 #include linux/io.h
-#include linux/module.h
 #include linux/slab.h
-#include mach/hardware.h
-#include plat/dmtimer.h
-#include mach/irqs.h
-
-static int dm_timer_count;
-
-#ifdef CONFIG_ARCH_OMAP2
-static struct omap_dm_timer omap2_dm_timers[] = {
-   { .phys_base = 0x48028000, .irq = INT_24XX_GPTIMER1 },
-   { .phys_base = 0x4802a000, .irq = INT_24XX_GPTIMER2 },
-   { .phys_base = 0x48078000, .irq = INT_24XX_GPTIMER3 },
-   { .phys_base = 0x4807a000, .irq = INT_24XX_GPTIMER4 },
-   { .phys_base = 0x4807c000, .irq = INT_24XX_GPTIMER5 },
-   { .phys_base = 0x4807e000, .irq = INT_24XX_GPTIMER6 },
-   { .phys_base = 0x4808, .irq = INT_24XX_GPTIMER7 },
-   { .phys_base = 0x48082000, .irq = INT_24XX_GPTIMER8 },
-   { .phys_base = 0x48084000, .irq = INT_24XX_GPTIMER9 },
-   { .phys_base = 0x48086000, .irq = INT_24XX_GPTIMER10 },
-   { .phys_base = 0x48088000, .irq = INT_24XX_GPTIMER11 },
-   { .phys_base = 0x4808a000, .irq = INT_24XX_GPTIMER12 },
-};
-
-static const char *omap2_dm_source_names[] __initdata = {
-   sys_ck,
-   func_32k_ck,
-   alt_ck,
-   NULL
-};
-
-static struct clk *omap2_dm_source_clocks[3];
-static const int omap2_dm_timer_count = ARRAY_SIZE(omap2_dm_timers);
-
-#else
-#define omap2_dm_timersNULL
-#define omap2_dm_timer_count   0
-#define omap2_dm_source_names  NULL
-#define omap2_dm_source_clocks NULL
-#endif /* CONFIG_ARCH_OMAP2 */
-
-#ifdef CONFIG_ARCH_OMAP3
-static struct omap_dm_timer omap3_dm_timers[] = {
-   { .phys_base = 0x48318000, .irq = INT_24XX_GPTIMER1 },
-   { .phys_base = 0x49032000, .irq = INT_24XX_GPTIMER2 },
-   { .phys_base = 0x49034000, .irq = INT_24XX_GPTIMER3 },
-   { .phys_base = 0x49036000, .irq = INT_24XX_GPTIMER4 },
-   { .phys_base = 0x49038000, .irq = INT_24XX_GPTIMER5 },
-   { .phys_base = 0x4903A000, .irq = INT_24XX_GPTIMER6 },
-   { .phys_base = 0x4903C000, .irq = INT_24XX_GPTIMER7 },
-   { .phys_base = 0x4903E000, .irq = INT_24XX_GPTIMER8 },
-   { .phys_base = 0x4904, .irq = INT_24XX_GPTIMER9 },
-   { .phys_base = 0x48086000, .irq = INT_24XX_GPTIMER10 },
-   { .phys_base = 0x48088000, .irq = INT_24XX_GPTIMER11 },
-   { .phys_base = 0x48304000, .irq = INT_34XX_GPT12_IRQ },
-};
-
-static const char *omap3_dm_source_names[] __initdata = {
-   sys_ck,
-   omap_32k_fck,
-   NULL
-};
-
-static struct clk *omap3_dm_source_clocks[2];
-static const int omap3_dm_timer_count = ARRAY_SIZE(omap3_dm_timers);
-
-#else
-#define omap3_dm_timersNULL
-#define omap3_dm_timer_count   0
-#define omap3_dm_source_names  NULL
-#define omap3_dm_source_clocks NULL
-#endif /* CONFIG_ARCH_OMAP3 */
-
-#ifdef CONFIG_ARCH_OMAP4
-static struct omap_dm_timer omap4_dm_timers[] = {
-   { .phys_base = 0x4a318000, .irq = OMAP44XX_IRQ_GPT1 },
-   { .phys_base = 0x48032000, .irq = OMAP44XX_IRQ_GPT2 },
-   { .phys_base = 0x48034000, .irq = OMAP44XX_IRQ_GPT3 },

[PATCH v16 00/12] OMAP: dmtimer: adaptation to platform_driver

2011-09-20 Thread Tarun Kanti DebBarma
Adaptation of dmtimer code to platform driver using omap_device and
omap_hwmod abstraction. It also include pm-runtime and off-mode support.

Baseline: git://github.com/tmlind/linux.git
Branch: cleanup

Test Info:
- OMAP4430SDP: Functional tests.
- OMAP3430SDP: Functional. Off-mode does not work.
- OMAP2430SDP: Functional tests.
- OMAP2420SDP: Functional tests.
- OMAP1710SDP: Boot test.

v16:
(1) Baselined on top of Tony Lindgren's following patch:
ARM: OMAP: Add support for dmtimer v2 ip
(2) Removed usage of ip version constants from dmtimer files
as well as hwmod database.
(3) Use __omap_dm_timer_init_regs() to initialize timer base
and offsets for both old and new ip versions in probe().
(4) Added tidr register field in omap_dm_timer{} which is
is initialized with TIDR register value during probe.
This is used in context restore function to differentiate
ip version. This avoids reading the TIDR register whenever
context restore function is called.

v15:
(1) Use pm_runtime_put() instead of pm_runtime_put_sync_suspend().
(2) Call pm_runtime_irq_safe() so that dmtimer is usable in interrupt
context.
(3) Dynamic context save whenever registers are modified. This avoids
overhead of calling context save routine which saves all registers.
(4) Avoid use of omap_readl(), omap_writel() in mach-omap1/timer.c.
Instead use __raw_readl() and __raw_writel().
(5) Handle failure of *_dm_timer_prepare() in *_dm_timer_request()
and *_dm_timer_request_specific().
(6) In mach-omap2/timer.c make sure that any of the timers can be
used as iclocksource/clockevent timer by initializing func_offset
and intr_offset correctly.
(7) Maintain proper register context restoration order. Specifically,
made sure that interrupt enable and control registers are restored
at the end.
(8) Remove wrapper around omap_pm_get_dev_context_loss_count(). Instead
use it directly.
(9) Extend protection of exported APIs using spinlock.
(10) Remove the patch which uses mutex instead of spinlock because dmtimer
can be used in interrupt context.
(11) Removed system_timer_reserved variable declaration in mach-omap1/timer.c
which was added to remove compilation error while building for OMAP1.

v14:
(1) Baselined on top of Tony Lindgren's latest timer patch series.
(2) Context save/restore routines.
(3) Off-mode support
(4)  Following comments from Todd Poynor toddpoy...@google.com implemented
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg52677.html
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg52676.html
(5) Incorrect balancing of *_runtime_get/put_sync for wakeup domain timers
  in the off-mode patch corrected.


v13:
(1) Handling of early timer removed because this is being taken care by
Tony's patch series.
(2) Timers reserved for clockevent/clocksource during early boot are
registered and marked reserved.
(3) Platform specific timer code merged to mach-omap2/timer.c.
(4) Timer capabilities are added in the hwmod database to each of the
omap timers.
(5) plat-omap/dmtimer.c plat-omap/include/plat/dmtimer.h are converted
to a driver by moving them to drivers/misc/timer-omap.c and 
include/linux/timer-omap.h

v12:
(1) Remove registration and initialization of all timers during early boot.
Initialize only the system timer which is set by the board file or default
value assigned to it. This timer is not considered later during rest of the
timers initialization.

(2) Use mutex instead of spinlock since there is no interrupt context.

(3) Remove hacky code to manage GPTIMER12 in mach-omap2/dmtimer.c. This is
now changed to use dev_attr instead to identify if it is a secure timer.
In the hwmod database, any secure timer entry can use this dev_attr so that
driver avoids registering tha particular timer.

(4) Removed reset function from OMAP1 and kept it back to its original place
in plat-omap/dmtimer.c, with modification of course. Instead of (is_omap16xx)
flag a new variable (needs_manual_reset) added. This flag is set for OMAP1.
So, call to reset function is made if this value is set implying that reset
is called only for OMAP1.

(5) Timer enable and disable functions cleanup with checks for early boot
condition removed. Added new interface wrapper function to configure
system timer clock source.

(6) Move OMAP4 specific register offsets from mach-omap2 to driver code
along with other register offset definitions.

(7) omap2_dm_timer_early_init() renamed to omap2_system_timer_init(),
omap2_dm_timer_normal_init() renamed to omap2_dm_timer_init().

(8) Use dev_err() instead of pr_err() in low level read/write functions.

v11:
(1) Removed early timer initialization call from omap2_init_common_devices()
in io.c. It is now called from omap2_gp_timer_init() in timer-gp.c as part
of following call sequence:
start_kernel()-time_init()-timer-init()-omap2_gp_timer_init()
(2) Basedlined on top of Paul's patch series mentioned above.

v10:
(1) Update PM runtime for active early 

[PATCH v16 12/12] OMAP: dmtimer: get rid of timer_ip_version field

2011-09-20 Thread Tarun Kanti DebBarma
We do not need this field in dmtimer_platform_data{} anymore.
Instead, read tidr register to identify the ip version now.

Signed-off-by: Tarun Kanti DebBarma tarun.ka...@ti.com
---
 arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c |1 -
 arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |2 --
 arch/arm/mach-omap2/timer.c|8 +---
 arch/arm/plat-omap/dmtimer.c   |2 ++
 arch/arm/plat-omap/include/plat/dmtimer.h  |7 ---
 5 files changed, 7 insertions(+), 13 deletions(-)

diff --git a/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c 
b/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c
index 177dee2..dc6ec15 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c
@@ -43,7 +43,6 @@ static struct omap_hwmod_class_sysconfig omap2xxx_timer_sysc 
= {
 struct omap_hwmod_class omap2xxx_timer_hwmod_class = {
.name   = timer,
.sysc   = omap2xxx_timer_sysc,
-   .rev= OMAP_TIMER_IP_VERSION_1,
 };
 
 /*
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c 
b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
index 2e4852d..463ad78 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -545,7 +545,6 @@ static struct omap_hwmod_class_sysconfig 
omap3xxx_timer_1ms_sysc = {
 static struct omap_hwmod_class omap3xxx_timer_1ms_hwmod_class = {
.name = timer,
.sysc = omap3xxx_timer_1ms_sysc,
-   .rev = OMAP_TIMER_IP_VERSION_1,
 };
 
 static struct omap_hwmod_class_sysconfig omap3xxx_timer_sysc = {
@@ -561,7 +560,6 @@ static struct omap_hwmod_class_sysconfig 
omap3xxx_timer_sysc = {
 static struct omap_hwmod_class omap3xxx_timer_hwmod_class = {
.name = timer,
.sysc = omap3xxx_timer_sysc,
-   .rev =  OMAP_TIMER_IP_VERSION_1,
 };
 
 /* secure timers dev attribute */
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index 041fed9..c784eda 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -356,9 +356,10 @@ OMAP_SYS_TIMER(4)
 static int omap2_dm_timer_set_src(struct platform_device *pdev, int source)
 {
int ret;
-   struct dmtimer_platform_data *pdata = pdev-dev.platform_data;
+   struct omap_dm_timer *timer = platform_get_drvdata(pdev);
struct clk *fclk, *parent;
char *parent_name = NULL;
+   u32 tidr;
 
fclk = clk_get(pdev-dev, fck);
if (IS_ERR_OR_NULL(fclk)) {
@@ -377,10 +378,12 @@ static int omap2_dm_timer_set_src(struct platform_device 
*pdev, int source)
break;
 
case OMAP_TIMER_SRC_EXT_CLK:
-   if (pdata-timer_ip_version == OMAP_TIMER_IP_VERSION_1) {
+   tidr = __raw_readl(timer-io_base);
+   if (!(tidr  16)) {
parent_name = alt_ck;
break;
}
+
dev_err(pdev-dev, %s: %d: invalid clk src.\n,
__func__, __LINE__);
clk_put(fclk);
@@ -465,7 +468,6 @@ static int __init omap_timer_init(struct omap_hwmod *oh, 
void *unused)
sscanf(oh-name, timer%2d, id);
 
pdata-set_timer_src = omap2_dm_timer_set_src;
-   pdata-timer_ip_version = oh-class-rev;
 
pwrdm = omap_hwmod_get_pwrdm(oh);
pdata-loses_context = pwrdm_can_ever_lose_context(pwrdm);
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index 41755ff..b66f93f 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -700,6 +700,8 @@ static int __devinit omap_dm_timer_probe(struct 
platform_device *pdev)
pm_runtime_put(pdev-dev);
}
 
+   platform_set_drvdata(pdev, timer);
+
/* add the timer element to the list */
spin_lock_irqsave(dm_timer_lock, flags);
list_add_tail(timer-node, omap_timer_list);
diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h 
b/arch/arm/plat-omap/include/plat/dmtimer.h
index 639957f..5025c2d 100644
--- a/arch/arm/plat-omap/include/plat/dmtimer.h
+++ b/arch/arm/plat-omap/include/plat/dmtimer.h
@@ -57,12 +57,6 @@
 #define OMAP_TIMER_TRIGGER_OVERFLOW0x01
 #define OMAP_TIMER_TRIGGER_OVERFLOW_AND_COMPARE0x02
 
-/*
- * IP revision identifier so that Highlander IP
- * in OMAP4 can be distinguished.
- */
-#define OMAP_TIMER_IP_VERSION_10x1
-
 /* timer capabilities used in hwmod database */
 #define OMAP_TIMER_SECURE  0x8000
 #define OMAP_TIMER_ALWON   0x4000
@@ -77,7 +71,6 @@ struct clk;
 
 struct dmtimer_platform_data {
int (*set_timer_src)(struct platform_device *pdev, int source);
-   int timer_ip_version;
u32 needs_manual_reset:1;
bool loses_context;
 
-- 
1.7.0.4

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to 

[PATCH v16 08/12] OMAP: dmtimer: do remaining initialization in probe

2011-09-20 Thread Tarun Kanti DebBarma
Use sys_timer_reserved to identify which all timers have already been
used for clocksource and clockevent. Mark all those timers as reserved
so that no one else uses them.
Call __omap_dm_timer_init_regs for the remaining timers so that their
base and offsets are configured correctly based upon timer ip version.

Signed-off-by: Tarun Kanti DebBarma tarun.ka...@ti.com
Reviewed-by: Santosh Shilimkar santosh.shilim...@ti.com
---
 arch/arm/plat-omap/dmtimer.c  |   21 +
 arch/arm/plat-omap/include/plat/dmtimer.h |1 +
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
index 53821a3..9c9feb9 100644
--- a/arch/arm/plat-omap/dmtimer.c
+++ b/arch/arm/plat-omap/dmtimer.c
@@ -514,10 +514,23 @@ static int __devinit omap_dm_timer_probe(struct 
platform_device *pdev)
timer-irq = irq-start;
timer-pdev = pdev;
 
-   /* Skip pm_runtime_enable for OMAP1 */
-   if (!pdata-needs_manual_reset) {
-   pm_runtime_enable(pdev-dev);
-   pm_runtime_irq_safe(pdev-dev);
+/*
+ * sys_timer_reserved is not defined for OMAP1.
+ * Use the macro to avoid compilation error on OMAP1.
+ */
+#if defined(CONFIG_ARCH_OMAP2PLUS)
+   pm_runtime_enable(pdev-dev);
+   pm_runtime_irq_safe(pdev-dev);
+   /* Mark clocksource and clockevent timers as reserved */
+   if ((sys_timer_reserved  (pdev-id - 1))  0x1)
+   timer-reserved = 1;
+#endif
+
+   if (!timer-reserved) {
+   pm_runtime_get_sync(pdev-dev);
+   __omap_dm_timer_init_regs(timer);
+   timer-tidr = __raw_readl(timer-io_base);
+   pm_runtime_put(pdev-dev);
}
 
/* add the timer element to the list */
diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h 
b/arch/arm/plat-omap/include/plat/dmtimer.h
index e29adfa..6413fe2 100644
--- a/arch/arm/plat-omap/include/plat/dmtimer.h
+++ b/arch/arm/plat-omap/include/plat/dmtimer.h
@@ -246,6 +246,7 @@ struct omap_dm_timer {
void __iomem*pend;  /* write pending */
void __iomem*func_base; /* function register base */
 
+   u32 tidr;   /* TIDR register value */
unsigned long rate;
unsigned reserved:1;
unsigned posted:1;
-- 
1.7.0.4

--
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/25] OMAP4: PM: suspend, CPU-hotplug and CPUilde support

2011-09-20 Thread Santosh
On Tuesday 20 September 2011 04:54 PM, Vishwanath Sripathy wrote:
 -Original Message-
 From: linux-arm-kernel-boun...@lists.infradead.org [mailto:linux-
 arm-kernel-boun...@lists.infradead.org] On Behalf Of Santosh
 Shilimkar
 Sent: Sunday, September 04, 2011 7:24 PM
 To: linux-omap@vger.kernel.org
 Cc: khil...@ti.com; Santosh Shilimkar; rna...@ti.com;
 li...@arm.linux.org.uk; linux-arm-ker...@lists.infradead.org
 Subject: [PATCH 00/25] OMAP4: PM: suspend, CPU-hotplug and CPUilde
 support


[...]

 The series is tested on OMAP4430 SDP for suspend, hotplug and
 CPUidle
 with OMAP4 GP and HS (secure) devices.

 The following changes since commit
 c6a389f123b9f68d605bb7e0f9b32ec1e3e14132:

   Linux 3.1-rc4 (2011-08-28 21:16:01 -0700)

 are available in the git repository at:
   git://gitorious.org/omap-sw-develoment/linux-omap-dev.git v3.1-
 rc4-omap4-mpuss-pm
 I have tested these patch series after adding core retention support  (In
 suspend/resume path)[1] and it worked Fine. I do see that Core and MPU are
 entering CSWR upon suspend and able to wake up via uart.
 
 You could add tested-by: Vishwanath BS  vishwanath...@ti.com if you
 want.
 
Yes I want tested-by and will add your tested-by on the series.
Thanks for testing

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


Re: [PATCH v2] OMAP2PLUS: DSS: Ensure DSS works correctly if display is enabled in bootloader

2011-09-20 Thread Archit Taneja

Hi Paul,

On Monday 12 September 2011 12:38 PM, Taneja, Archit wrote:

Resetting DISPC when a DISPC output is enabled causes the DSS to go into an
inconsistent state. Thus if the bootloader has enabled a display, the hwmod code
cannot reset the DISPC module just like that, but the outputs need to be
disabled first.

Add function dispc_disable_outputs() which disables all active overlay manager
and ensure all frame transfers are completed.

Modify omap_dss_reset() to call this function and clear DSS_CONTROL,
DSS_SDI_CONTROL and DSS_PLL_CONTROL so that DSS is in a clean state when the
DSS2 driver starts.

This resolves the hang issue(caused by a L3 error during boot) seen on the
beagle board C3, which has a factory bootloader that enables display. The issue
is resolved with this patch.


Is it possible to get this in for the next merge window? It applies over 
your branch hwmod_dss_fixes_3.2.


Thanks,
Archit



Acked-by: Tomi Valkeinentomi.valkei...@ti.com
Tested-by: R, Sricharanr.sricha...@ti.com
Signed-off-by: Archit Tanejaarc...@ti.com
---
v2:

- Added more info in the commit message, fixed some typos.

The patch depends on a HWMOD patch series which has been posted by Tomi, it can
be tested by applying over the following branch:

https://gitorious.org/linux-omap-dss2/linux/commits/master

  arch/arm/mach-omap2/display.c |  110 +
  1 files changed, 110 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
index 93db7c1..eab81f4 100644
--- a/arch/arm/mach-omap2/display.c
+++ b/arch/arm/mach-omap2/display.c
@@ -30,6 +30,30 @@

  #include control.h

+#define DISPC_BASE_OMAP2   0x48050400
+#define DISPC_BASE_OMAP4   0x48041000
+
+#define DISPC_REG(base, offset)(base + offset)
+
+#define DISPC_CONTROL  0x0040
+#define DISPC_CONTROL2 0x0238
+#define DISPC_IRQSTATUS0x0018
+
+#define DSS_SYSCONFIG  0x10
+#define DSS_SYSSTATUS  0x14
+#define DSS_CONTROL0x40
+#define DSS_SDI_CONTROL0x44
+#define DSS_PLL_CONTROL0x48
+
+#define LCD_EN_MASK(0x1  0)
+#define DIGIT_EN_MASK  (0x1  1)
+
+#define FRAMEDONE_IRQ_SHIFT0
+#define EVSYNC_EVEN_IRQ_SHIFT  2
+#define EVSYNC_ODD_IRQ_SHIFT   3
+#define FRAMEDONE2_IRQ_SHIFT   22
+#define FRAMEDONETV_IRQ_SHIFT  24
+
  static struct platform_device omap_display_device = {
.name  = omapdss,
.id= -1,
@@ -182,6 +206,78 @@ int __init omap_display_init(struct omap_dss_board_info 
*board_data)
return r;
  }

+static void dispc_disable_outputs(void)
+{
+   u32 val, irq_mask, base;
+   bool lcd_en, digit_en, lcd2_en = false;
+   int i, num_mgrs;
+
+   if (cpu_is_omap44xx()) {
+   base = DISPC_BASE_OMAP4;
+   num_mgrs = 3;
+   } else {
+   base = DISPC_BASE_OMAP2;
+   num_mgrs = 2;
+   }
+
+   /* store value of LCDENABLE and DIGITENABLE bits */
+   val = omap_readl(DISPC_REG(base, DISPC_CONTROL));
+   lcd_en = val  LCD_EN_MASK;
+   digit_en = val  DIGIT_EN_MASK;
+
+   /* store value of LCDENABLE for LCD2 */
+   if (num_mgrs  2) {
+   val = omap_readl(DISPC_REG(base, DISPC_CONTROL2));
+   lcd2_en = val  LCD_EN_MASK;
+   }
+
+   /*
+* If any manager was enabled, we need to disable it before DSS clocks
+* are disabled or DISPC module is reset
+*/
+   if (lcd_en || digit_en || lcd2_en) {
+   irq_mask = (lcd_en ? 1 : 0)  FRAMEDONE_IRQ_SHIFT;
+
+   if (cpu_is_omap44xx())
+   irq_mask |= (digit_en ? 1 : 0)  FRAMEDONETV_IRQ_SHIFT;
+   else
+   irq_mask |= (digit_en ? 1 : 0)  EVSYNC_EVEN_IRQ_SHIFT 
|
+   (digit_en ? 1 : 0)  EVSYNC_ODD_IRQ_SHIFT;
+
+   irq_mask |= (lcd2_en ? 1 : 0)  FRAMEDONE2_IRQ_SHIFT;
+
+   /*
+* clear any previous FRAMEDONE, FRAMEDONETV, EVSYNC_EVEN/ODD
+* or FRAMEDONE2 interrupts
+*/
+   omap_writel(irq_mask, DISPC_REG(base, DISPC_IRQSTATUS));
+
+   /* disable LCD and TV managers */
+   val = omap_readl(DISPC_REG(base, DISPC_CONTROL));
+   val= ~(LCD_EN_MASK | DIGIT_EN_MASK);
+   omap_writel(val, DISPC_REG(base, DISPC_CONTROL));
+
+   /* disable LCD2 manager */
+   if (num_mgrs  2) {
+   val = omap_readl(DISPC_REG(base, DISPC_CONTROL2));
+   val= ~LCD_EN_MASK;
+   omap_writel(val, DISPC_REG(base, DISPC_CONTROL2));
+   }
+
+   i = 0;
+   while ((omap_readl(DISPC_REG(base, DISPC_IRQSTATUS))  
irq_mask) !=
+   irq_mask) {
+   i++;
+   if (i  100) {
+  

Re: [PATCH 0/7] Add L2 cache cleaning to generic CPU suspend

2011-09-20 Thread Lorenzo Pieralisi
On Mon, Sep 19, 2011 at 05:37:41PM +0100, Russell King - ARM Linux wrote:
 This is a re-post of the previous patch series, but with an additional
 TLB flush to ensure that hte global TLB entry in the page tables is
 flushed out.  This is a flush of all TLB entries, but it could probably
 be more targetted if we need to.
 
 Original cover mail follows:
 
 Some systems (such as OMAP) preserve the L2 cache across a suspend/
 resume cycle.  This means they do not perform L2 cache maintanence
 in their suspend finisher function.
 
 However, the side effect is that the saved CPU state is not readable
 by the resume code because it is sitting in the L2 cache.
 
 This patch series adds L2 cache cleaning to the generic CPU suspend/
 resume support code, making it possible to use this on systems with
 L2 cache enabled without having to clean/invalidate the entire L2
 cache.
 
 We also add a separate page table, allocated at boot time, for the
 resume process to use so we don't have to fiddle about with tweaking
 entries in the current processes page table.  Moreover, the current
 processes page table may be in use by another CPU in the system if
 these paths are used from cpuidle or hotplug, so changing the page
 table is technically unsound.
 
 Overall, this makes it possible for OMAP4 systems to use this code.
 
 

Thanks Russell for this.
As expected, it does fix the issue. Tested on ARM internal platforms
and Origen with both suspend and cpuidle. So, on the whole series:

Tested-by: Lorenzo Pieralisi lorenzo.pieral...@arm.com

--
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/25] OMAP4: PM: suspend, CPU-hotplug and CPUilde support

2011-09-20 Thread Santosh
On Sunday 04 September 2011 07:24 PM, Santosh Shilimkar wrote:
 This series adds OMAP4 MPUSS (MPU SubSystem) power management support for
 suspend (S2R), CPU hotplug and CPUidle.
 
Thanks all for your review's and testing of this series. Have addressed
all the concerns/comments as part of the next post which  I am holding
for couple of days more.

Reason is mainly to ensure that dependent patches(series) are merged or
on the way for 3.2, and the patches are re-based against the
right tree for the merge.

As documented earlier, there are 3 dependencies for this series.

1) Russell's L2 cache update to generic suspend which seems to be
be ready now since Lorenzo confirmed that pending issue is fixed.
http://www.spinics.net/lists/linux-omap/msg57625.html

2) CPU PM notifier series for which I have pull request ready
to be send.
https://lkml.org/lkml/2011/9/3/49

3) IRQ subystem patch which is already in Thomas's irq/core for 3.2
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg55483.html

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


Re: [PATCH 03/10] OMAP: Devkit8000: Change lcd driver to AT070TN83

2011-09-20 Thread Thomas Weber
Hello Tomi,

I'm missing the following patch:
OMAP: DSS2: Support for Innolux AT070TN83

http://www.spinics.net/lists/linux-omap/msg56495.html

Thomas
--
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 03/10] OMAP: Devkit8000: Change lcd driver to AT070TN83

2011-09-20 Thread Tomi Valkeinen
Hi Thomas,

On Tue, 2011-09-20 at 14:35 +0200, Thomas Weber wrote:
 Hello Tomi,
 
 I'm missing the following patch:
 OMAP: DSS2: Support for Innolux AT070TN83

That patch is in my DSS2 tree. This patch series is only board file
changes for Tony to ack.

 Tomi


--
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 0/5] OMAPDSS: HDMI: Debug support and Register cleanup

2011-09-20 Thread mythripk
From: Mythri P K mythr...@ti.com

Add support to dump HDMI core, wrapper, PHY and PLL registers and the clock
dividers for HDMI.
Some changes such as 
1.Add some H/w indexable registers missed in definition.
2.Remove usage of struct hdmi_reg and use u16 instead.
3.Move the avi_infoframe parameters comments above the field.
are also added as a part of this patch series.

Mythri P K (5):
  OMAPDSS: HDMI: Move the comments in avi infoframe structure
  OMAPDSS: HDMI: Replace hdmi_reg struct with u16
  OMAPDSS: HDMI: Add missing register definitions
  OMAPDSS: HDMI: Add support to dump registers through debugfs
  OMAPDSS: HDMI: Add support to dump clocks through debugfs

 drivers/video/omap2/dss/core.c|4 +
 drivers/video/omap2/dss/dss.c |3 +
 drivers/video/omap2/dss/dss.h |2 +
 drivers/video/omap2/dss/dss_features.c|5 +
 drivers/video/omap2/dss/hdmi.c|   47 +
 drivers/video/omap2/dss/ti_hdmi.h |   14 ++
 drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c |  178 +-
 drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h |  296 ++---
 8 files changed, 394 insertions(+), 155 deletions(-)

-- 
1.7.5.4

--
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 1/5] OMAPDSS: HDMI: Move the comments in avi infoframe

2011-09-20 Thread mythripk
From: Mythri P K mythr...@ti.com

Move the comments in AVI infoframe structure above each parameter
to align with other comments in the header file

Signed-off-by: Mythri P K mythr...@ti.com
---
 drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h |   34 ++--
 1 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h 
b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h
index 929de88..de1e199 100644
--- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h
+++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h
@@ -455,40 +455,40 @@ struct hdmi_core_video_config {
  * details about infoframe databytes
  */
 struct hdmi_core_infoframe_avi {
+   /* Y0, Y1 rgb,yCbCr */
u8  db1_format;
-   /* Y0, Y1 rgb,yCbCr */
+   /* A0  Active information Present */
u8  db1_active_info;
-   /* A0  Active information Present */
+   /* B0, B1 Bar info data valid */
u8  db1_bar_info_dv;
-   /* B0, B1 Bar info data valid */
+   /* S0, S1 scan information */
u8  db1_scan_info;
-   /* S0, S1 scan information */
+   /* C0, C1 colorimetry */
u8  db2_colorimetry;
-   /* C0, C1 colorimetry */
+   /* M0, M1 Aspect ratio (4:3, 16:9) */
u8  db2_aspect_ratio;
-   /* M0, M1 Aspect ratio (4:3, 16:9) */
+   /* R0...R3 Active format aspect ratio */
u8  db2_active_fmt_ar;
-   /* R0...R3 Active format aspect ratio */
+   /* ITC IT content. */
u8  db3_itc;
-   /* ITC IT content. */
+   /* EC0, EC1, EC2 Extended colorimetry */
u8  db3_ec;
-   /* EC0, EC1, EC2 Extended colorimetry */
+   /* Q1, Q0 Quantization range */
u8  db3_q_range;
-   /* Q1, Q0 Quantization range */
+   /* SC1, SC0 Non-uniform picture scaling */
u8  db3_nup_scaling;
-   /* SC1, SC0 Non-uniform picture scaling */
+   /* VIC0..6 Video format identification */
u8  db4_videocode;
-   /* VIC0..6 Video format identification */
+   /* PR0..PR3 Pixel repetition factor */
u8  db5_pixel_repeat;
-   /* PR0..PR3 Pixel repetition factor */
+   /* Line number end of top bar */
u16 db6_7_line_eoftop;
-   /* Line number end of top bar */
+   /* Line number start of bottom bar */
u16 db8_9_line_sofbottom;
-   /* Line number start of bottom bar */
+   /* Pixel number end of left bar */
u16 db10_11_pixel_eofleft;
-   /* Pixel number end of left bar */
+   /* Pixel number start of right bar */
u16 db12_13_pixel_sofright;
-   /* Pixel number start of right bar */
 };
 /*
  * Refer to section 8.2 in HDMI 1.3 specification for
-- 
1.7.5.4

--
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 4/5] OMAPDSS: HDMI: Add support to dump registers through

2011-09-20 Thread mythripk
From: Mythri P K mythr...@ti.com

Add support to dump the HDMI core, PLL and PHY registers through debugfs

Signed-off-by: Mythri P K mythr...@ti.com
---
 drivers/video/omap2/dss/core.c|4 +
 drivers/video/omap2/dss/dss.h |1 +
 drivers/video/omap2/dss/dss_features.c|5 +
 drivers/video/omap2/dss/hdmi.c|   16 +++
 drivers/video/omap2/dss/ti_hdmi.h |   14 +++
 drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c |  168 +
 6 files changed, 208 insertions(+), 0 deletions(-)

diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 76821fe..86ec12e 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -145,6 +145,10 @@ static int dss_initialize_debugfs(void)
debugfs_create_file(venc, S_IRUGO, dss_debugfs_dir,
venc_dump_regs, dss_debug_fops);
 #endif
+#ifdef CONFIG_OMAP4_DSS_HDMI
+   debugfs_create_file(hdmi, S_IRUGO, dss_debugfs_dir,
+   hdmi_dump_regs, dss_debug_fops);
+#endif
return 0;
 }
 
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 47eebd8..8652007 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -472,6 +472,7 @@ int hdmi_init_platform_driver(void);
 void hdmi_uninit_platform_driver(void);
 int hdmi_init_display(struct omap_dss_device *dssdev);
 unsigned long hdmi_get_pixel_clock(void);
+void hdmi_dump_regs(struct seq_file *s);
 #else
 static inline int hdmi_init_display(struct omap_dss_device *dssdev)
 {
diff --git a/drivers/video/omap2/dss/dss_features.c 
b/drivers/video/omap2/dss/dss_features.c
index 47e66d8..a2fc8e0 100644
--- a/drivers/video/omap2/dss/dss_features.c
+++ b/drivers/video/omap2/dss/dss_features.c
@@ -447,6 +447,11 @@ static const struct ti_hdmi_ip_ops omap4_hdmi_functions = {
.pll_enable =   ti_hdmi_4xxx_pll_enable,
.pll_disable=   ti_hdmi_4xxx_pll_disable,
.video_enable   =   ti_hdmi_4xxx_wp_video_start,
+   .dump_wrapper   =   ti_hdmi_4xxx_wp_dump,
+   .dump_core  =   ti_hdmi_4xxx_core_dump,
+   .dump_pll   =   ti_hdmi_4xxx_pll_dump,
+   .dump_phy   =   ti_hdmi_4xxx_phy_dump,
+
 };
 
 void dss_init_hdmi_ip_ops(struct hdmi_ip_data *ip_data)
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index 2f554ae..3262f0f 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -438,6 +438,22 @@ void omapdss_hdmi_display_set_timing(struct 
omap_dss_device *dssdev)
}
 }
 
+void hdmi_dump_regs(struct seq_file *s)
+{
+   mutex_lock(hdmi.lock);
+
+   if (hdmi_runtime_get())
+   return;
+
+   hdmi.ip_data.ops-dump_wrapper(hdmi.ip_data, s);
+   hdmi.ip_data.ops-dump_pll(hdmi.ip_data, s);
+   hdmi.ip_data.ops-dump_phy(hdmi.ip_data, s);
+   hdmi.ip_data.ops-dump_core(hdmi.ip_data, s);
+
+   hdmi_runtime_put();
+   mutex_unlock(hdmi.lock);
+}
+
 int omapdss_hdmi_read_edid(u8 *buf, int len)
 {
int r;
diff --git a/drivers/video/omap2/dss/ti_hdmi.h 
b/drivers/video/omap2/dss/ti_hdmi.h
index d48603c..2c3443d 100644
--- a/drivers/video/omap2/dss/ti_hdmi.h
+++ b/drivers/video/omap2/dss/ti_hdmi.h
@@ -101,6 +101,15 @@ struct ti_hdmi_ip_ops {
void (*pll_disable)(struct hdmi_ip_data *ip_data);
 
void (*video_enable)(struct hdmi_ip_data *ip_data, bool start);
+
+   void (*dump_wrapper)(struct hdmi_ip_data *ip_data, struct seq_file *s);
+
+   void (*dump_core)(struct hdmi_ip_data *ip_data, struct seq_file *s);
+
+   void (*dump_pll)(struct hdmi_ip_data *ip_data, struct seq_file *s);
+
+   void (*dump_phy)(struct hdmi_ip_data *ip_data, struct seq_file *s);
+
 };
 
 struct hdmi_ip_data {
@@ -121,4 +130,9 @@ void ti_hdmi_4xxx_wp_video_start(struct hdmi_ip_data 
*ip_data, bool start);
 int ti_hdmi_4xxx_pll_enable(struct hdmi_ip_data *ip_data);
 void ti_hdmi_4xxx_pll_disable(struct hdmi_ip_data *ip_data);
 void ti_hdmi_4xxx_basic_configure(struct hdmi_ip_data *ip_data);
+void ti_hdmi_4xxx_wp_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
+void ti_hdmi_4xxx_pll_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
+void ti_hdmi_4xxx_core_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
+void ti_hdmi_4xxx_phy_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
+
 #endif
diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c 
b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
index 5f22d2e..8355c4f 100644
--- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
+++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
@@ -27,6 +27,7 @@
 #include linux/mutex.h
 #include linux/delay.h
 #include linux/string.h
+#include linux/seq_file.h
 
 #include ti_hdmi_4xxx_ip.h
 #include dss.h
@@ -805,6 +806,173 @@ void ti_hdmi_4xxx_basic_configure(struct hdmi_ip_data 
*ip_data)

[PATCH 3/5] OMAPDSS: HDMI: Add missing register definitions

2011-09-20 Thread mythripk
From: Mythri P K mythr...@ti.com

Add some of the missing register definitions, which are h/w indexable.

Signed-off-by: Mythri P K mythr...@ti.com
---
 drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h |8 
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h 
b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h
index 694888a..2040956 100644
--- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h
+++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h
@@ -100,15 +100,15 @@
 #define HDMI_CORE_AV_AVI_CHSUM 0x10C
 #define HDMI_CORE_AV_AVI_DBYTE(n)  (n * 4 + 0x110)
 #define HDMI_CORE_AV_AVI_DBYTE_NELEMS  15
-#define HDMI_CORE_AV_SPD_DBYTE 0x190
+#define HDMI_CORE_AV_SPD_DBYTE(n)  (n * 4 + 0x190)
 #define HDMI_CORE_AV_SPD_DBYTE_NELEMS  27
 #define HDMI_CORE_AV_AUD_DBYTE(n)  (n * 4 + 0x210)
 #define HDMI_CORE_AV_AUD_DBYTE_NELEMS  10
-#define HDMI_CORE_AV_MPEG_DBYTE0x290
+#define HDMI_CORE_AV_MPEG_DBYTE(n) (n * 4 + 0x290)
 #define HDMI_CORE_AV_MPEG_DBYTE_NELEMS 27
-#define HDMI_CORE_AV_GEN_DBYTE 0x300
+#define HDMI_CORE_AV_GEN_DBYTE(n)  (n * 4 + 0x300)
 #define HDMI_CORE_AV_GEN_DBYTE_NELEMS  31
-#define HDMI_CORE_AV_GEN2_DBYTE0x380
+#define HDMI_CORE_AV_GEN2_DBYTE(n) (n * 4 + 0x380)
 #define HDMI_CORE_AV_GEN2_DBYTE_NELEMS 31
 #define HDMI_CORE_AV_ACR_CTRL  0x4
 #define HDMI_CORE_AV_FREQ_SVAL 0x8
-- 
1.7.5.4

--
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 2/5] OMAPDSS: HDMI: Replace hdmi_reg struct with u16

2011-09-20 Thread mythripk
From: Mythri P K mythr...@ti.com

Remove usage of hdmi_reg struct to use u16 instead in the HDMI IP header file.

Signed-off-by: Mythri P K mythr...@ti.com
---
 drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c |   10 +-
 drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h |  262 ++---
 2 files changed, 134 insertions(+), 138 deletions(-)

diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c 
b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
index da7fe50..5f22d2e 100644
--- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
+++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c
@@ -32,15 +32,15 @@
 #include dss.h
 
 static inline void hdmi_write_reg(void __iomem *base_addr,
-   const struct hdmi_reg idx, u32 val)
+   const u16 idx, u32 val)
 {
-   __raw_writel(val, base_addr + idx.idx);
+   __raw_writel(val, base_addr + idx);
 }
 
 static inline u32 hdmi_read_reg(void __iomem *base_addr,
-   const struct hdmi_reg idx)
+   const u16 idx)
 {
-   return __raw_readl(base_addr + idx.idx);
+   return __raw_readl(base_addr + idx);
 }
 
 static inline void __iomem *hdmi_wp_base(struct hdmi_ip_data *ip_data)
@@ -69,7 +69,7 @@ static inline void __iomem *hdmi_core_sys_base(struct 
hdmi_ip_data *ip_data)
 }
 
 static inline int hdmi_wait_for_bit_change(void __iomem *base_addr,
-   const struct hdmi_reg idx,
+   const u16 idx,
int b2, int b1, u32 val)
 {
u32 t = 0;
diff --git a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h 
b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h
index de1e199..694888a 100644
--- a/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h
+++ b/drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h
@@ -30,142 +30,138 @@
 #include sound/pcm_params.h
 #endif
 
-struct hdmi_reg { u16 idx; };
-
-#define HDMI_REG(idx)  ((const struct hdmi_reg) { idx })
-
 /* HDMI Wrapper */
 
-#define HDMI_WP_REVISION   HDMI_REG(0x0)
-#define HDMI_WP_SYSCONFIG  HDMI_REG(0x10)
-#define HDMI_WP_IRQSTATUS_RAW  HDMI_REG(0x24)
-#define HDMI_WP_IRQSTATUS  HDMI_REG(0x28)
-#define HDMI_WP_PWR_CTRL   HDMI_REG(0x40)
-#define HDMI_WP_IRQENABLE_SET  HDMI_REG(0x2C)
-#define HDMI_WP_VIDEO_CFG  HDMI_REG(0x50)
-#define HDMI_WP_VIDEO_SIZE HDMI_REG(0x60)
-#define HDMI_WP_VIDEO_TIMING_H HDMI_REG(0x68)
-#define HDMI_WP_VIDEO_TIMING_V HDMI_REG(0x6C)
-#define HDMI_WP_WP_CLK HDMI_REG(0x70)
-#define HDMI_WP_AUDIO_CFG  HDMI_REG(0x80)
-#define HDMI_WP_AUDIO_CFG2 HDMI_REG(0x84)
-#define HDMI_WP_AUDIO_CTRL HDMI_REG(0x88)
-#define HDMI_WP_AUDIO_DATA HDMI_REG(0x8C)
+#define HDMI_WP_REVISION   0x0
+#define HDMI_WP_SYSCONFIG  0x10
+#define HDMI_WP_IRQSTATUS_RAW  0x24
+#define HDMI_WP_IRQSTATUS  0x28
+#define HDMI_WP_PWR_CTRL   0x40
+#define HDMI_WP_IRQENABLE_SET  0x2C
+#define HDMI_WP_VIDEO_CFG  0x50
+#define HDMI_WP_VIDEO_SIZE 0x60
+#define HDMI_WP_VIDEO_TIMING_H 0x68
+#define HDMI_WP_VIDEO_TIMING_V 0x6C
+#define HDMI_WP_WP_CLK 0x70
+#define HDMI_WP_AUDIO_CFG  0x80
+#define HDMI_WP_AUDIO_CFG2 0x84
+#define HDMI_WP_AUDIO_CTRL 0x88
+#define HDMI_WP_AUDIO_DATA 0x8C
 
 /* HDMI IP Core System */
 
-#define HDMI_CORE_SYS_VND_IDL  HDMI_REG(0x0)
-#define HDMI_CORE_SYS_DEV_IDL  HDMI_REG(0x8)
-#define HDMI_CORE_SYS_DEV_IDH  HDMI_REG(0xC)
-#define HDMI_CORE_SYS_DEV_REV  HDMI_REG(0x10)
-#define HDMI_CORE_SYS_SRST HDMI_REG(0x14)
-#define HDMI_CORE_CTRL1HDMI_REG(0x20)
-#define HDMI_CORE_SYS_SYS_STAT HDMI_REG(0x24)
-#define HDMI_CORE_SYS_VID_ACEN HDMI_REG(0x124)
-#define HDMI_CORE_SYS_VID_MODE HDMI_REG(0x128)
-#define HDMI_CORE_SYS_INTR_STATE   HDMI_REG(0x1C0)
-#define HDMI_CORE_SYS_INTR1HDMI_REG(0x1C4)
-#define HDMI_CORE_SYS_INTR2HDMI_REG(0x1C8)
-#define HDMI_CORE_SYS_INTR3HDMI_REG(0x1CC)
-#define HDMI_CORE_SYS_INTR4HDMI_REG(0x1D0)
-#define HDMI_CORE_SYS_UMASK1   HDMI_REG(0x1D4)
-#define HDMI_CORE_SYS_TMDS_CTRLHDMI_REG(0x208)
-#define HDMI_CORE_SYS_DE_DLY   HDMI_REG(0xC8)
-#define HDMI_CORE_SYS_DE_CTRL  HDMI_REG(0xCC)
-#define HDMI_CORE_SYS_DE_TOP   HDMI_REG(0xD0)

[PATCH 5/5] OMAPDSS: HDMI: Add support to dump clocks through

2011-09-20 Thread mythripk
From: Mythri P K mythr...@ti.com

Add support to dump the HDMI regm, regn, and other clock parameters.

Signed-off-by: Mythri P K mythr...@ti.com
---
 drivers/video/omap2/dss/dss.c  |3 +++
 drivers/video/omap2/dss/dss.h  |1 +
 drivers/video/omap2/dss/hdmi.c |   31 +++
 3 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 3e09726..816daef 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -732,6 +732,9 @@ void dss_debug_dump_clocks(struct seq_file *s)
 #ifdef CONFIG_OMAP2_DSS_DSI
dsi_dump_clocks(s);
 #endif
+#ifdef CONFIG_OMAP2_DSS_HDMI
+   hdmi_dump_clocks(s);
+#endif
 }
 #endif
 
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 8652007..ef8770a 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -473,6 +473,7 @@ void hdmi_uninit_platform_driver(void);
 int hdmi_init_display(struct omap_dss_device *dssdev);
 unsigned long hdmi_get_pixel_clock(void);
 void hdmi_dump_regs(struct seq_file *s);
+void hdmi_dump_clocks(struct seq_file *s);
 #else
 static inline int hdmi_init_display(struct omap_dss_device *dssdev)
 {
diff --git a/drivers/video/omap2/dss/hdmi.c b/drivers/video/omap2/dss/hdmi.c
index 3262f0f..6751b1a 100644
--- a/drivers/video/omap2/dss/hdmi.c
+++ b/drivers/video/omap2/dss/hdmi.c
@@ -33,6 +33,8 @@
 #include linux/pm_runtime.h
 #include linux/clk.h
 #include video/omapdss.h
+#include linux/seq_file.h
+
 #if defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) || \
defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI_MODULE)
 #include sound/soc.h
@@ -454,6 +456,35 @@ void hdmi_dump_regs(struct seq_file *s)
mutex_unlock(hdmi.lock);
 }
 
+void hdmi_dump_clocks(struct seq_file *s)
+{
+   enum omap_dss_clk_source dispc_clk_src;
+
+   dispc_clk_src = dss_get_dispc_clk_source();
+
+   if (hdmi_runtime_get())
+   return;
+
+   seq_printf(s, HDMI Clock Info\n);
+
+   seq_printf(s, regm\t\t%dregmf %u\n,
+   hdmi.ip_data.pll_data.regm, hdmi.ip_data.pll_data.regm);
+
+   seq_printf(s, dcofreq\t%dregsd %u\n,
+   hdmi.ip_data.pll_data.dcofreq,
+   hdmi.ip_data.pll_data.regsd);
+
+   seq_printf(s, %s (%s)\t(%s)\n,
+   dss_get_generic_clk_source_name(dispc_clk_src),
+   dss_feat_get_clk_source_name(dispc_clk_src),
+   dispc_clk_src == OMAP_DSS_CLK_SRC_FCK ?
+   off : on);
+
+   seq_printf(s, hdmi fclk source = %d\n, hdmi.ip_data.pll_data.refsel);
+
+   hdmi_runtime_put();
+}
+
 int omapdss_hdmi_read_edid(u8 *buf, int len)
 {
int r;
-- 
1.7.5.4

--
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 4/5] OMAPDSS: HDMI: Add support to dump registers through

2011-09-20 Thread Tomi Valkeinen
On Tue, 2011-09-20 at 18:19 +0530, mythr...@ti.com wrote:
 From: Mythri P K mythr...@ti.com
 
 Add support to dump the HDMI core, PLL and PHY registers through debugfs

The subject seems to be broken.

This prints PLL registers twice, second time is when it should be
printing PHY registers.

It also prints lines like:

HDMI_CORE_AV_SPD_DBYTE(i)   
HDMI_CORE_AV_SPD_DBYTE(i)   
HDMI_CORE_AV_SPD_DBYTE(i)   
HDMI_CORE_AV_SPD_DBYTE(i)   

 Tomi


--
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 5/5] OMAPDSS: HDMI: Add support to dump clocks through

2011-09-20 Thread Tomi Valkeinen
On Tue, 2011-09-20 at 18:19 +0530, mythr...@ti.com wrote:
 From: Mythri P K mythr...@ti.com
 
 Add support to dump the HDMI regm, regn, and other clock parameters.

This patch doesn't work at all. It's checking for CONFIG_OMAP2_DSS_HDMI,
whereas the actual define is CONFIG_OMAP4_DSS_HDMI. And even after
fixing that, the output is:

HDMI Clock Info
regm104regmf 104
dcofreq 0regsd 1
DSS_FCK (DSS_FCLK)  (off)
hdmi fclk source = 3

Did you test your patches at all?

 Tomi


--
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] usb: musb: OMAP4430: Remove a redundant omap4430_phy_init call in usb_musb_init

2011-09-20 Thread Bjarne Steinsbo
Ref thread starting at http://marc.info/?l=linux-omapm=131316289211258w=2

Bjarne Steinsbo

On Tue, Sep 20, 2011 at 10:50 AM, Axel Lin axel@gmail.com wrote:
 Current code calls omap4430_phy_init() twice in usb_musb_init().
 Calling omap4430_phy_init() once is enough.
 This patch removes the first omap4430_phy_init() call, which using an
 uninitialized pointer as parameter.

 This patch elimates below build warning:
 arch/arm/mach-omap2/usb-musb.c: In function 'usb_musb_init':
 arch/arm/mach-omap2/usb-musb.c:141: warning: 'dev' may be used uninitialized 
 in this function

 Signed-off-by: Axel Lin axel@gmail.com
 ---
  arch/arm/mach-omap2/usb-musb.c |    3 ---
  1 files changed, 0 insertions(+), 3 deletions(-)

 diff --git a/arch/arm/mach-omap2/usb-musb.c b/arch/arm/mach-omap2/usb-musb.c
 index a65145b..19e4dac 100644
 --- a/arch/arm/mach-omap2/usb-musb.c
 +++ b/arch/arm/mach-omap2/usb-musb.c
 @@ -137,9 +137,6 @@ void __init usb_musb_init(struct omap_musb_board_data 
 *musb_board_data)
        musb_plat.mode = board_data-mode;
        musb_plat.extvbus = board_data-extvbus;

 -       if (cpu_is_omap44xx())
 -               omap4430_phy_init(dev);
 -
        if (cpu_is_omap3517() || cpu_is_omap3505()) {
                oh_name = am35x_otg_hs;
                name = musb-am35x;
 --
 1.7.4.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

--
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 4/5 v10] arm: omap: usb: device name change for the clk names of usbhs

2011-09-20 Thread Keshava Munegowda
From: Keshava Munegowda keshava_mgo...@ti.com

device name usbhs clocks are changed from
usbhs-omap.0 to usbhs_omap; this is because
in the hwmod registration the device name is set
as usbhs_omap; The redudant clock nodes are removed.

Signed-off-by: Keshava Munegowda keshava_mgo...@ti.com
---
 arch/arm/mach-omap2/clock3xxx_data.c |   26 --
 arch/arm/mach-omap2/clock44xx_data.c |   10 +-
 drivers/mfd/omap-usb-host.c  |2 +-
 3 files changed, 18 insertions(+), 20 deletions(-)

diff --git a/arch/arm/mach-omap2/clock3xxx_data.c 
b/arch/arm/mach-omap2/clock3xxx_data.c
index ffd55b1..63a822f 100644
--- a/arch/arm/mach-omap2/clock3xxx_data.c
+++ b/arch/arm/mach-omap2/clock3xxx_data.c
@@ -3285,7 +3285,7 @@ static struct omap_clk omap3xxx_clks[] = {
CLK(NULL,   cpefuse_fck,  cpefuse_fck,   CK_3430ES2PLUS | 
CK_AM35XX | CK_36XX),
CLK(NULL,   ts_fck,   ts_fck,CK_3430ES2PLUS | 
CK_AM35XX | CK_36XX),
CLK(NULL,   usbtll_fck,   usbtll_fck,CK_3430ES2PLUS | 
CK_AM35XX | CK_36XX),
-   CLK(usbhs-omap.0, usbtll_fck,   usbtll_fck,CK_3430ES2PLUS 
| CK_AM35XX | CK_36XX),
+   CLK(usbhs_omap,   usbtll_fck,   usbtll_fck,CK_3430ES2PLUS 
| CK_AM35XX | CK_36XX),
CLK(omap-mcbsp.1, prcm_fck, core_96m_fck,  CK_3XXX),
CLK(omap-mcbsp.5, prcm_fck, core_96m_fck,  CK_3XXX),
CLK(NULL,   core_96m_fck, core_96m_fck,  CK_3XXX),
@@ -3321,7 +3321,7 @@ static struct omap_clk omap3xxx_clks[] = {
CLK(NULL,   pka_ick,  pka_ick,   CK_34XX | CK_36XX),
CLK(NULL,   core_l4_ick,  core_l4_ick,   CK_3XXX),
CLK(NULL,   usbtll_ick,   usbtll_ick,CK_3430ES2PLUS | 
CK_AM35XX | CK_36XX),
-   CLK(usbhs-omap.0, usbtll_ick,   usbtll_ick,CK_3430ES2PLUS 
| CK_AM35XX | CK_36XX),
+   CLK(usbhs_omap,   usbtll_ick,   usbtll_ick,CK_3430ES2PLUS 
| CK_AM35XX | CK_36XX),
CLK(omap_hsmmc.2, ick,  mmchs3_ick,CK_3430ES2PLUS | 
CK_AM35XX | CK_36XX),
CLK(NULL,   icr_ick,  icr_ick,   CK_34XX | CK_36XX),
CLK(omap-aes, ick,  aes2_ick,  CK_34XX | CK_36XX),
@@ -3367,20 +3367,18 @@ static struct omap_clk omap3xxx_clks[] = {
CLK(NULL,   cam_ick,  cam_ick,   CK_34XX | CK_36XX),
CLK(NULL,   csi2_96m_fck, csi2_96m_fck,  CK_34XX | CK_36XX),
CLK(NULL,   usbhost_120m_fck, usbhost_120m_fck, CK_3430ES2PLUS | 
CK_AM35XX | CK_36XX),
-   CLK(usbhs-omap.0, hs_fck, usbhost_120m_fck, CK_3430ES2PLUS | 
CK_AM35XX | CK_36XX),
CLK(NULL,   usbhost_48m_fck, usbhost_48m_fck, CK_3430ES2PLUS | 
CK_AM35XX | CK_36XX),
-   CLK(usbhs-omap.0, fs_fck, usbhost_48m_fck, CK_3430ES2PLUS | 
CK_AM35XX | CK_36XX),
CLK(NULL,   usbhost_ick,  usbhost_ick,   CK_3430ES2PLUS | 
CK_AM35XX | CK_36XX),
-   CLK(usbhs-omap.0, usbhost_ick,  usbhost_ick,   CK_3430ES2PLUS 
| CK_AM35XX | CK_36XX),
-   CLK(usbhs-omap.0, utmi_p1_gfclk,dummy_ck,  
CK_3XXX),
-   CLK(usbhs-omap.0, utmi_p2_gfclk,dummy_ck,  
CK_3XXX),
-   CLK(usbhs-omap.0, xclk60mhsp1_ck,   dummy_ck,  
CK_3XXX),
-   CLK(usbhs-omap.0, xclk60mhsp2_ck,   dummy_ck,  
CK_3XXX),
-   CLK(usbhs-omap.0, usb_host_hs_utmi_p1_clk,  dummy_ck,  
CK_3XXX),
-   CLK(usbhs-omap.0, usb_host_hs_utmi_p2_clk,  dummy_ck,  
CK_3XXX),
-   CLK(usbhs-omap.0, usb_tll_hs_usb_ch0_clk,   dummy_ck,  
CK_3XXX),
-   CLK(usbhs-omap.0, usb_tll_hs_usb_ch1_clk,   dummy_ck,  
CK_3XXX),
-   CLK(usbhs-omap.0, init_60m_fclk,dummy_ck,  
CK_3XXX),
+   CLK(usbhs_omap,   usbhost_ick,  usbhost_ick,   CK_3430ES2PLUS 
| CK_AM35XX | CK_36XX),
+   CLK(usbhs_omap,   utmi_p1_gfclk,dummy_ck,  
CK_3XXX),
+   CLK(usbhs_omap,   utmi_p2_gfclk,dummy_ck,  
CK_3XXX),
+   CLK(usbhs_omap,   xclk60mhsp1_ck,   dummy_ck,  
CK_3XXX),
+   CLK(usbhs_omap,   xclk60mhsp2_ck,   dummy_ck,  
CK_3XXX),
+   CLK(usbhs_omap,   usb_host_hs_utmi_p1_clk,  dummy_ck,  
CK_3XXX),
+   CLK(usbhs_omap,   usb_host_hs_utmi_p2_clk,  dummy_ck,  
CK_3XXX),
+   CLK(usbhs_omap,   usb_tll_hs_usb_ch0_clk,   dummy_ck,  
CK_3XXX),
+   CLK(usbhs_omap,   usb_tll_hs_usb_ch1_clk,   dummy_ck,  
CK_3XXX),
+   CLK(usbhs_omap,   init_60m_fclk,dummy_ck,  
CK_3XXX),
CLK(NULL,   usim_fck, usim_fck,  CK_3430ES2PLUS | 
CK_36XX),
CLK(NULL,   gpt1_fck, gpt1_fck,  CK_3XXX),
CLK(NULL,   wkup_32k_fck, wkup_32k_fck,  CK_3XXX),
diff --git a/arch/arm/mach-omap2/clock44xx_data.c 
b/arch/arm/mach-omap2/clock44xx_data.c
index 2af0e3f..088977a 100644
--- a/arch/arm/mach-omap2/clock44xx_data.c
+++ b/arch/arm/mach-omap2/clock44xx_data.c
@@ -3281,7 +3281,7 @@ static 

[PATCH 2/5 v10] arm: omap: usb: ehci and ohci hwmod structures for omap3

2011-09-20 Thread Keshava Munegowda
Following 4 hwmod structure are added:
UHH hwmod of usbhs with uhh base address and functional clock,
EHCI hwmod with irq and base address,
OHCI hwmod with irq and base address,
TLL hwmod of usbhs with the TLL base address and irq.

Signed-off-by: Keshava Munegowda keshava_mgo...@ti.com
---
 arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |  299 
 1 files changed, 299 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c 
b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
index 59fdb9f..5658035 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -84,6 +84,10 @@ static struct omap_hwmod omap3xxx_mcbsp4_hwmod;
 static struct omap_hwmod omap3xxx_mcbsp5_hwmod;
 static struct omap_hwmod omap3xxx_mcbsp2_sidetone_hwmod;
 static struct omap_hwmod omap3xxx_mcbsp3_sidetone_hwmod;
+static struct omap_hwmod omap34xx_usb_host_hs_hwmod;
+static struct omap_hwmod omap34xx_usbhs_ohci_hwmod;
+static struct omap_hwmod omap34xx_usbhs_ehci_hwmod;
+static struct omap_hwmod omap34xx_usb_tll_hs_hwmod;
 
 /* L3 - L4_CORE interface */
 static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
@@ -3196,6 +3200,294 @@ static struct omap_hwmod omap3xxx_mmc3_hwmod = {
.omap_chip  = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
 };
 
+/*
+ * 'usb_host_hs' class
+ * high-speed multi-port usb host controller
+ */
+static struct omap_hwmod_ocp_if omap34xx_usb_host_hs__l3_main_2 = {
+   .master = omap34xx_usb_host_hs_hwmod,
+   .slave  = omap3xxx_l3_main_hwmod,
+   .clk= core_l3_ick,
+   .user   = OCP_USER_MPU,
+};
+
+static struct omap_hwmod_class_sysconfig omap34xx_usb_host_hs_sysc = {
+   .rev_offs   = 0x,
+   .sysc_offs  = 0x0010,
+   .syss_offs  = 0x0014,
+   .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
+   .idlemodes  = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+  MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
+   .sysc_fields= omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap34xx_usb_host_hs_hwmod_class = {
+   .name = usbhs_uhh,
+   .sysc = omap34xx_usb_host_hs_sysc,
+};
+
+static struct omap_hwmod_ocp_if *omap34xx_usb_host_hs_masters[] = {
+   omap34xx_usb_host_hs__l3_main_2,
+};
+
+static struct omap_hwmod_addr_space omap34xx_usb_host_hs_addrs[] = {
+   {
+   .name   = uhh,
+   .pa_start   = 0x48064000,
+   .pa_end = 0x480643ff,
+   .flags  = ADDR_TYPE_RT
+   },
+   {}
+};
+
+static struct omap_hwmod_ocp_if omap34xx_l4_cfg__usb_host_hs = {
+   .master = omap3xxx_l4_core_hwmod,
+   .slave  = omap34xx_usb_host_hs_hwmod,
+   .clk= l4_ick,
+   .addr   = omap34xx_usb_host_hs_addrs,
+   .user   = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+static struct omap_hwmod_ocp_if omap34xx_f128m_cfg__usb_host_hs = {
+   .clk= usbhost_120m_fck,
+   .user   = OCP_USER_MPU,
+   .flags  = OCPIF_SWSUP_IDLE,
+};
+
+static struct omap_hwmod_ocp_if omap34xx_f48m_cfg__usb_host_hs = {
+   .clk= usbhost_48m_fck,
+   .user   = OCP_USER_MPU,
+   .flags  = OCPIF_SWSUP_IDLE,
+};
+
+static struct omap_hwmod_ocp_if *omap34xx_usb_host_hs_slaves[] = {
+   omap34xx_l4_cfg__usb_host_hs,
+   omap34xx_f128m_cfg__usb_host_hs,
+   omap34xx_f48m_cfg__usb_host_hs,
+};
+
+static struct omap_hwmod omap34xx_usb_host_hs_hwmod = {
+   .name   = usbhs_uhh,
+   .class  = omap34xx_usb_host_hs_hwmod_class,
+   .main_clk   = usbhost_ick,
+   .prcm = {
+   .omap2 = {
+   .module_offs = OMAP3430ES2_USBHOST_MOD,
+   .prcm_reg_id = 1,
+   .module_bit = 0,
+   .idlest_reg_id = 1,
+   .idlest_idle_bit = 1,
+   .idlest_stdby_bit = 0,
+   },
+   },
+   .slaves = omap34xx_usb_host_hs_slaves,
+   .slaves_cnt = ARRAY_SIZE(omap34xx_usb_host_hs_slaves),
+   .masters= omap34xx_usb_host_hs_masters,
+   .masters_cnt= ARRAY_SIZE(omap34xx_usb_host_hs_masters),
+/*
+ * The usbhs controller prevents the enter omap to low power mode
+ * if other than FORCE IDLE and FORCE STANDBY are used.
+ */
+   .flags  = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
+   .omap_chip  = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
+};
+
+/* 'usbhs_ohci' class  */
+static struct omap_hwmod_ocp_if omap34xx_usbhs_ohci__l3_main_2 = {
+   .master = omap34xx_usbhs_ohci_hwmod,
+   .slave  = omap3xxx_l3_main_hwmod,
+   .clk= core_l3_ick,
+   .user   = OCP_USER_MPU,
+};
+
+static struct omap_hwmod_class omap34xx_usbhs_ohci_hwmod_class = {
+   

[PATCH 1/5 v10] arm: omap: usb: ehci and ohci hwmod structures for omap4

2011-09-20 Thread Keshava Munegowda
From: Benoit Cousson b-cous...@ti.com

Following 4 hwmod structures are added:
UHH hwmod of usbhs with uhh base address and functional clock,
EHCI hwmod with irq and base address,
OHCI hwmod with irq and base address,
TLL hwmod of usbhs with the TLL base address and irq.

Signed-off-by: Benoit Cousson b-cous...@ti.com
Signed-off-by: Keshava Munegowda keshava_mgo...@ti.com
---
 arch/arm/mach-omap2/omap_hwmod_44xx_data.c |  265 +++-
 1 files changed, 264 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c 
b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
index 6201422..084f602 100644
--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
@@ -68,6 +68,10 @@ static struct omap_hwmod omap44xx_mmc2_hwmod;
 static struct omap_hwmod omap44xx_mpu_hwmod;
 static struct omap_hwmod omap44xx_mpu_private_hwmod;
 static struct omap_hwmod omap44xx_usb_otg_hs_hwmod;
+static struct omap_hwmod omap44xx_usb_host_hs_hwmod;
+static struct omap_hwmod omap44xx_usbhs_ohci_hwmod;
+static struct omap_hwmod omap44xx_usbhs_ehci_hwmod;
+static struct omap_hwmod omap44xx_usb_tll_hs_hwmod;
 
 /*
  * Interconnects omap_hwmod structures
@@ -5336,6 +5340,260 @@ static struct omap_hwmod omap44xx_wd_timer3_hwmod = {
.omap_chip  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
 };
 
+/*
+ * 'usb_host_hs' class
+ * high-speed multi-port usb host controller
+ */
+static struct omap_hwmod_ocp_if omap44xx_usb_host_hs__l3_main_2 = {
+   .master = omap44xx_usb_host_hs_hwmod,
+   .slave  = omap44xx_l3_main_2_hwmod,
+   .clk= l3_div_ck,
+   .user   = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+static struct omap_hwmod_class_sysconfig omap44xx_usb_host_hs_sysc = {
+   .rev_offs   = 0x,
+   .sysc_offs  = 0x0010,
+   .syss_offs  = 0x0014,
+   .sysc_flags = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
+   .idlemodes  = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+   SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
+   MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
+   .sysc_fields= omap_hwmod_sysc_type2,
+};
+
+static struct omap_hwmod_class omap44xx_usb_host_hs_hwmod_class = {
+   .name = usbhs_uhh,
+   .sysc = omap44xx_usb_host_hs_sysc,
+};
+
+static struct omap_hwmod_ocp_if *omap44xx_usb_host_hs_masters[] = {
+   omap44xx_usb_host_hs__l3_main_2,
+};
+
+static struct omap_hwmod_addr_space omap44xx_usb_host_hs_addrs[] = {
+   {
+   .name   = uhh,
+   .pa_start   = 0x4a064000,
+   .pa_end = 0x4a0647ff,
+   .flags  = ADDR_TYPE_RT
+   },
+   {}
+};
+
+static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_host_hs = {
+   .master = omap44xx_l4_cfg_hwmod,
+   .slave  = omap44xx_usb_host_hs_hwmod,
+   .clk= l4_div_ck,
+   .addr   = omap44xx_usb_host_hs_addrs,
+   .user   = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+static struct omap_hwmod_ocp_if *omap44xx_usb_host_hs_slaves[] = {
+   omap44xx_l4_cfg__usb_host_hs,
+};
+
+static struct omap_hwmod omap44xx_usb_host_hs_hwmod = {
+   .name   = usbhs_uhh,
+   .class  = omap44xx_usb_host_hs_hwmod_class,
+   .clkdm_name = l3_init_clkdm,
+   .main_clk   = usb_host_hs_fck,
+   .prcm = {
+   .omap4 = {
+   .clkctrl_offs = OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET,
+   .context_offs = OMAP4_RM_L3INIT_USB_HOST_CONTEXT_OFFSET,
+   .modulemode   = MODULEMODE_SWCTRL,
+   },
+   },
+   .slaves = omap44xx_usb_host_hs_slaves,
+   .slaves_cnt = ARRAY_SIZE(omap44xx_usb_host_hs_slaves),
+   .masters= omap44xx_usb_host_hs_masters,
+   .masters_cnt= ARRAY_SIZE(omap44xx_usb_host_hs_masters),
+/*
+ * The usbhs controller prevents the enter omap to low power mode
+ * if other than FORCE IDLE and FORCE STANDBY are used.
+ */
+   .flags  = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,
+   .omap_chip  = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+};
+
+/* 'usbhs_ohci' class */
+static struct omap_hwmod_class omap44xx_usbhs_ohci_hwmod_class = {
+   .name = usbhs_ohci,
+};
+
+static struct omap_hwmod_irq_info omap44xx_usbhs_ohci_irqs[] = {
+   { .name = ohci-irq, .irq = 76 + OMAP44XX_IRQ_GIC_START },
+   { .irq = -1 }
+};
+
+static struct omap_hwmod_addr_space omap44xx_usbhs_ohci_addrs[] = {
+   {
+   .name   = ohci,
+   .pa_start   = 0x4a064800,
+   .pa_end = 0x4a064bff,
+   .flags  = ADDR_MAP_ON_INIT
+   },
+   {}
+};
+
+static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usbhs_ohci = {
+   .master = omap44xx_l4_cfg_hwmod,
+   .slave  = omap44xx_usbhs_ohci_hwmod,
+   

[PATCH 0/5 v10] mfd: omap: usb: Runtime PM support for EHCI and OHCI drivers

2011-09-20 Thread Keshava Munegowda
From: Keshava Munegowda keshava_mgo...@ti.com

The Hwmod structures and Runtime PM features are implemented
For EHCI and OHCI drivers of OMAP3 and OMAP4.
The global suspend/resume of EHCI and OHCI
is validated on OMAP3430 sdp board with these patches.

these patches are rebased to kevin's pm branch and
usbhs latest mainline kernel patches

TODO:
   - Adding pad configurations to Hwmods
   - Aggressive clock cutting in usb bus suspends
   - Remote Wakeup implementation using irq-chaining


Benoit Cousson (1):
  arm: omap: usb: ehci and ohci hwmod structures for omap4

Keshava Munegowda (4):
  arm: omap: usb: ehci and ohci hwmod structures for omap3
  arm: omap: usb: register hwmods of usbhs
  arm: omap: usb: device name change for the clk names of usbhs
  mfd: omap: usb: Runtime PM support

 arch/arm/mach-omap2/clock3xxx_data.c   |   26 +-
 arch/arm/mach-omap2/clock44xx_data.c   |   10 +-
 arch/arm/mach-omap2/omap_hwmod_3xxx_data.c |  281 +++
 arch/arm/mach-omap2/omap_hwmod_44xx_data.c |  247 ++
 arch/arm/mach-omap2/usb-host.c |  114 ++---
 arch/arm/plat-omap/include/plat/usb.h  |3 -
 drivers/mfd/omap-usb-host.c|  733 +++-
 drivers/usb/host/ehci-omap.c   |   17 +-
 drivers/usb/host/ohci-omap3.c  |   18 +-
 9 files changed, 891 insertions(+), 558 deletions(-)

--
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 3/5 v10] arm: omap: usb: register hwmods of usbhs

2011-09-20 Thread Keshava Munegowda
The hwmod structure of uhh, ohci, ehci and tll are
retrieved and registered with omap device

Signed-off-by: Keshava Munegowda keshava_mgo...@ti.com
---
 arch/arm/mach-omap2/usb-host.c |  114 +--
 1 files changed, 50 insertions(+), 64 deletions(-)

diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
index 89ae298..9c37db9 100644
--- a/arch/arm/mach-omap2/usb-host.c
+++ b/arch/arm/mach-omap2/usb-host.c
@@ -28,51 +28,30 @@
 #include mach/hardware.h
 #include mach/irqs.h
 #include plat/usb.h
+#include plat/omap_device.h
 
 #include mux.h
 
 #ifdef CONFIG_MFD_OMAP_USB_HOST
 
-#define OMAP_USBHS_DEVICE  usbhs-omap
-
-static struct resource usbhs_resources[] = {
-   {
-   .name   = uhh,
-   .flags  = IORESOURCE_MEM,
-   },
-   {
-   .name   = tll,
-   .flags  = IORESOURCE_MEM,
-   },
-   {
-   .name   = ehci,
-   .flags  = IORESOURCE_MEM,
-   },
-   {
-   .name   = ehci-irq,
-   .flags  = IORESOURCE_IRQ,
-   },
-   {
-   .name   = ohci,
-   .flags  = IORESOURCE_MEM,
-   },
-   {
-   .name   = ohci-irq,
-   .flags  = IORESOURCE_IRQ,
-   }
-};
-
-static struct platform_device usbhs_device = {
-   .name   = OMAP_USBHS_DEVICE,
-   .id = 0,
-   .num_resources  = ARRAY_SIZE(usbhs_resources),
-   .resource   = usbhs_resources,
-};
+#define OMAP_USBHS_DEVICE  usbhs_omap
+#defineUSBHS_UHH_HWMODNAME usbhs_uhh
+#defineUSBHS_OHCI_HWMODNAMEusbhs_ohci
+#define USBHS_EHCI_HWMODNAME   usbhs_ehci
+#define USBHS_TLL_HWMODNAMEusbhs_tll
 
 static struct usbhs_omap_platform_data usbhs_data;
 static struct ehci_hcd_omap_platform_data  ehci_data;
 static struct ohci_hcd_omap_platform_data  ohci_data;
 
+static struct omap_device_pm_latency omap_uhhtll_latency[] = {
+ {
+   .deactivate_func = omap_device_idle_hwmods,
+   .activate_func   = omap_device_enable_hwmods,
+   .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
+ },
+};
+
 /* MUX settings for EHCI pins */
 /*
  * setup_ehci_io_mux - initialize IO pad mux for USBHOST
@@ -508,7 +487,10 @@ static void setup_4430ohci_io_mux(const enum 
usbhs_omap_port_mode *port_mode)
 
 void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
 {
-   int i;
+   struct omap_hwmod   *oh[4];
+   struct omap_device  *od;
+   int bus_id = -1;
+   int i;
 
for (i = 0; i  OMAP3_HS_USB_PORTS; i++) {
usbhs_data.port_mode[i] = pdata-port_mode[i];
@@ -523,44 +505,48 @@ void __init usbhs_init(const struct usbhs_omap_board_data 
*pdata)
usbhs_data.ohci_data = ohci_data;
 
if (cpu_is_omap34xx()) {
-   usbhs_resources[0].start = OMAP34XX_UHH_CONFIG_BASE;
-   usbhs_resources[0].end = OMAP34XX_UHH_CONFIG_BASE + SZ_1K - 1;
-   usbhs_resources[1].start = OMAP34XX_USBTLL_BASE;
-   usbhs_resources[1].end = OMAP34XX_USBTLL_BASE + SZ_4K - 1;
-   usbhs_resources[2].start= OMAP34XX_EHCI_BASE;
-   usbhs_resources[2].end  = OMAP34XX_EHCI_BASE + SZ_1K - 1;
-   usbhs_resources[3].start = INT_34XX_EHCI_IRQ;
-   usbhs_resources[4].start= OMAP34XX_OHCI_BASE;
-   usbhs_resources[4].end  = OMAP34XX_OHCI_BASE + SZ_1K - 1;
-   usbhs_resources[5].start = INT_34XX_OHCI_IRQ;
setup_ehci_io_mux(pdata-port_mode);
setup_ohci_io_mux(pdata-port_mode);
} else if (cpu_is_omap44xx()) {
-   usbhs_resources[0].start = OMAP44XX_UHH_CONFIG_BASE;
-   usbhs_resources[0].end = OMAP44XX_UHH_CONFIG_BASE + SZ_1K - 1;
-   usbhs_resources[1].start = OMAP44XX_USBTLL_BASE;
-   usbhs_resources[1].end = OMAP44XX_USBTLL_BASE + SZ_4K - 1;
-   usbhs_resources[2].start = OMAP44XX_HSUSB_EHCI_BASE;
-   usbhs_resources[2].end = OMAP44XX_HSUSB_EHCI_BASE + SZ_1K - 1;
-   usbhs_resources[3].start = OMAP44XX_IRQ_EHCI;
-   usbhs_resources[4].start = OMAP44XX_HSUSB_OHCI_BASE;
-   usbhs_resources[4].end = OMAP44XX_HSUSB_OHCI_BASE + SZ_1K - 1;
-   usbhs_resources[5].start = OMAP44XX_IRQ_OHCI;
setup_4430ehci_io_mux(pdata-port_mode);
setup_4430ohci_io_mux(pdata-port_mode);
}
 
-   if (platform_device_add_data(usbhs_device,
-   usbhs_data, sizeof(usbhs_data))  0) {
-   printk(KERN_ERR USBHS platform_device_add_data failed\n);
-   goto init_end;
+   oh[0] = omap_hwmod_lookup(USBHS_UHH_HWMODNAME);
+   if (!oh[0]) {
+   pr_err(Could not look up %s\n, USBHS_UHH_HWMODNAME);
+

[PATCH 5/5 v10] mfd: omap: usb: Runtime PM support

2011-09-20 Thread Keshava Munegowda
From: Keshava Munegowda keshava_mgo...@ti.com

The usbhs core driver does not enable/disable the interface and
functional clocks; These clocks are handled by hwmod and runtime pm,
hence instead of the clock enable/disable, the runtime pm APIS are
used. however,the port clocks are handled by the usbhs core.

Signed-off-by: Keshava Munegowda keshava_mgo...@ti.com
Reviewed-by: Kevin Hilman khil...@ti.com
---
 arch/arm/plat-omap/include/plat/usb.h |3 -
 drivers/mfd/omap-usb-host.c   |  731 +
 drivers/usb/host/ehci-omap.c  |   17 +-
 drivers/usb/host/ohci-omap3.c |   18 +-
 4 files changed, 295 insertions(+), 474 deletions(-)

diff --git a/arch/arm/plat-omap/include/plat/usb.h 
b/arch/arm/plat-omap/include/plat/usb.h
index 17d3c93..2b66dc2 100644
--- a/arch/arm/plat-omap/include/plat/usb.h
+++ b/arch/arm/plat-omap/include/plat/usb.h
@@ -100,9 +100,6 @@ extern void usb_musb_init(struct omap_musb_board_data 
*board_data);
 
 extern void usbhs_init(const struct usbhs_omap_board_data *pdata);
 
-extern int omap_usbhs_enable(struct device *dev);
-extern void omap_usbhs_disable(struct device *dev);
-
 extern int omap4430_phy_power(struct device *dev, int ID, int on);
 extern int omap4430_phy_set_clk(struct device *dev, int on);
 extern int omap4430_phy_init(struct device *dev);
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
index 9c2da29..e6f3b01 100644
--- a/drivers/mfd/omap-usb-host.c
+++ b/drivers/mfd/omap-usb-host.c
@@ -26,6 +26,7 @@
 #include linux/spinlock.h
 #include linux/gpio.h
 #include plat/usb.h
+#include linux/pm_runtime.h
 
 #define USBHS_DRIVER_NAME  usbhs_omap
 #define OMAP_EHCI_DEVICE   ehci-omap
@@ -146,9 +147,6 @@
 
 
 struct usbhs_hcd_omap {
-   struct clk  *usbhost_ick;
-   struct clk  *usbhost_hs_fck;
-   struct clk  *usbhost_fs_fck;
struct clk  *xclk60mhsp1_ck;
struct clk  *xclk60mhsp2_ck;
struct clk  *utmi_p1_fck;
@@ -158,8 +156,6 @@ struct usbhs_hcd_omap {
struct clk  *usbhost_p2_fck;
struct clk  *usbtll_p2_fck;
struct clk  *init_60m_fclk;
-   struct clk  *usbtll_fck;
-   struct clk  *usbtll_ick;
 
void __iomem*uhh_base;
void __iomem*tll_base;
@@ -168,7 +164,6 @@ struct usbhs_hcd_omap {
 
u32 usbhs_rev;
spinlock_t  lock;
-   int count;
 };
 /*-*/
 
@@ -318,269 +313,6 @@ err_end:
return ret;
 }
 
-/**
- * usbhs_omap_probe - initialize TI-based HCDs
- *
- * Allocates basic resources for this USB host controller.
- */
-static int __devinit usbhs_omap_probe(struct platform_device *pdev)
-{
-   struct device   *dev =  pdev-dev;
-   struct usbhs_omap_platform_data *pdata = dev-platform_data;
-   struct usbhs_hcd_omap   *omap;
-   struct resource *res;
-   int ret = 0;
-   int i;
-
-   if (!pdata) {
-   dev_err(dev, Missing platform data\n);
-   ret = -ENOMEM;
-   goto end_probe;
-   }
-
-   omap = kzalloc(sizeof(*omap), GFP_KERNEL);
-   if (!omap) {
-   dev_err(dev, Memory allocation failed\n);
-   ret = -ENOMEM;
-   goto end_probe;
-   }
-
-   spin_lock_init(omap-lock);
-
-   for (i = 0; i  OMAP3_HS_USB_PORTS; i++)
-   omap-platdata.port_mode[i] = pdata-port_mode[i];
-
-   omap-platdata.ehci_data = pdata-ehci_data;
-   omap-platdata.ohci_data = pdata-ohci_data;
-
-   omap-usbhost_ick = clk_get(dev, usbhost_ick);
-   if (IS_ERR(omap-usbhost_ick)) {
-   ret =  PTR_ERR(omap-usbhost_ick);
-   dev_err(dev, usbhost_ick failed error:%d\n, ret);
-   goto err_end;
-   }
-
-   omap-usbhost_hs_fck = clk_get(dev, hs_fck);
-   if (IS_ERR(omap-usbhost_hs_fck)) {
-   ret = PTR_ERR(omap-usbhost_hs_fck);
-   dev_err(dev, usbhost_hs_fck failed error:%d\n, ret);
-   goto err_usbhost_ick;
-   }
-
-   omap-usbhost_fs_fck = clk_get(dev, fs_fck);
-   if (IS_ERR(omap-usbhost_fs_fck)) {
-   ret = PTR_ERR(omap-usbhost_fs_fck);
-   dev_err(dev, usbhost_fs_fck failed error:%d\n, ret);
-   goto err_usbhost_hs_fck;
-   }
-
-   omap-usbtll_fck = clk_get(dev, usbtll_fck);
-   if (IS_ERR(omap-usbtll_fck)) {
-   ret = PTR_ERR(omap-usbtll_fck);
-   dev_err(dev, usbtll_fck failed error:%d\n, ret);
-   goto 

[PATCH-V3 0/4] Introducing TI's New SoC/board AM335XEVM

2011-09-20 Thread hvaibhav
From: Vaibhav Hiremath hvaib...@ti.com

This patch set adds support for AM335x device having
Cortex-A8 MPU.

AM335X is treated as another OMAP3 variant, where,
along with existing cpu class OMAP34XX, new cpu class AM33XX is created
and the respective type is AM335X, which is newly added device in the family.
This means, cpu_is_omap34xx(), cpu_is_am33xx() and
cpu_is_am335x() checks return success for AM335X.

Also, I have validated OMAP3 boot test with this patch-series on OMAP3EVM.

Changes from V1(RFC):
- Created separate cpu/SoC class for AM33XX family of devices,
  due to all known facts. This is been mentioned in main-chain
https://patchwork.kernel.org/patch/1056312/
- BUG Fix in debug-macro.S, which was leading to build failure.
https://patchwork.kernel.org/patch/1056302/

Changes from V2(RFC):
- Rebased against Paul's OMAP_CHIP* cleanup patches
  git://git.pwsan.com/linux-2.6 omap_chip_remove_cleanup_3.2
- Removed dependancy on Hemant's submitted patches for TI814X
  support, in order to get it upstream.

Afzal Mohammed (4):
  arm:omap:am33xx: Update common omap platform files
  arm:omap:am33xx: Update common OMAP machine specific sources
  arm:omap:am33xx: Create board support and enable build for AM335XEVM
  arm:omap:am33xx: Add low level debugging support

 arch/arm/mach-omap2/Kconfig|   10 
 arch/arm/mach-omap2/Makefile   |2 +
 arch/arm/mach-omap2/board-am335xevm.c  |   57 
 arch/arm/mach-omap2/clock.c|2 +-
 arch/arm/mach-omap2/clock.h|2 +-
 arch/arm/mach-omap2/clock3xxx_data.c   |6 ++-
 arch/arm/mach-omap2/common.c   |   16 +++
 arch/arm/mach-omap2/id.c   |   10 +++-
 arch/arm/mach-omap2/include/mach/debug-macro.S |   22 +
 arch/arm/mach-omap2/io.c   |   25 ++
 arch/arm/mach-omap2/opp2xxx.h  |2 +-
 arch/arm/mach-omap2/serial.c   |6 +-
 arch/arm/plat-omap/include/plat/am33xx.h   |   25 ++
 arch/arm/plat-omap/include/plat/clkdev_omap.h  |1 +
 arch/arm/plat-omap/include/plat/clock.h|3 +-
 arch/arm/plat-omap/include/plat/common.h   |1 +
 arch/arm/plat-omap/include/plat/cpu.h  |   25 ++
 arch/arm/plat-omap/include/plat/hardware.h |1 +
 arch/arm/plat-omap/include/plat/io.h   |   20 
 arch/arm/plat-omap/include/plat/omap34xx.h |2 +
 arch/arm/plat-omap/include/plat/serial.h   |4 ++
 arch/arm/plat-omap/include/plat/uncompress.h   |6 +++
 arch/arm/plat-omap/io.c|5 ++
 23 files changed, 243 insertions(+), 10 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-am335xevm.c
 create mode 100644 arch/arm/plat-omap/include/plat/am33xx.h

--
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-V3 1/4] arm:omap:am33xx: Update common omap platform files

2011-09-20 Thread hvaibhav
From: Afzal Mohammed af...@ti.com

This patch updates the common platform files with AM335X device
support (AM33XX family).

The approach taken in this patch is,
AM33XX device will be considered as OMAP3 variant, and a separate
SoC class created for AM33XX family of devices with a subclass type
for AM335X device, which is newly added device in the family.

This means, cpu_is_omap34xx(), cpu_is_am33xx() and cpu_is_am335x()
checks will return success on AM335X device.
A kernel config option CONFIG_SOC_OMAPAM33XX is added under OMAP3
to include support for AM33XX build.

Also, cpu_mask and RATE_IN_XXX flags have crossed 8 bit hence
struct clksel_rate.flags, struct prcm_config.flags and cpu_mask
are changed to u16 from u8.

Signed-off-by: Afzal Mohammed af...@ti.com
Signed-off-by: Vaibhav Hiremath hvaib...@ti.com
Cc: Hemant Pedanekar hema...@ti.com
---
 arch/arm/mach-omap2/Kconfig   |5 +
 arch/arm/mach-omap2/clock.c   |2 +-
 arch/arm/mach-omap2/clock.h   |2 +-
 arch/arm/mach-omap2/opp2xxx.h |2 +-
 arch/arm/plat-omap/include/plat/clkdev_omap.h |1 +
 arch/arm/plat-omap/include/plat/clock.h   |3 ++-
 arch/arm/plat-omap/include/plat/cpu.h |   25 +
 7 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 57b66d5..12ab835 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -78,6 +78,11 @@ config SOC_OMAPTI816X
depends on ARCH_OMAP3
default y

+config SOC_OMAPAM33XX
+   bool AM33XX support
+   depends on ARCH_OMAP3
+   default y
+
 config OMAP_PACKAGE_ZAF
bool

diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c
index 1f3481f..f57ed5b 100644
--- a/arch/arm/mach-omap2/clock.c
+++ b/arch/arm/mach-omap2/clock.c
@@ -35,7 +35,7 @@
 #include cm-regbits-24xx.h
 #include cm-regbits-34xx.h

-u8 cpu_mask;
+u16 cpu_mask;

 /*
  * clkdm_control: if true, then when a clock is enabled in the
diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h
index 48ac568..687d3d3 100644
--- a/arch/arm/mach-omap2/clock.h
+++ b/arch/arm/mach-omap2/clock.h
@@ -130,7 +130,7 @@ void omap2_clk_print_new_rates(const char *hfclkin_ck_name,
   const char *core_ck_name,
   const char *mpu_ck_name);

-extern u8 cpu_mask;
+extern u16 cpu_mask;

 extern const struct clkops clkops_omap2_dflt_wait;
 extern const struct clkops clkops_dummy;
diff --git a/arch/arm/mach-omap2/opp2xxx.h b/arch/arm/mach-omap2/opp2xxx.h
index 8affc66..8fae534 100644
--- a/arch/arm/mach-omap2/opp2xxx.h
+++ b/arch/arm/mach-omap2/opp2xxx.h
@@ -51,7 +51,7 @@ struct prcm_config {
unsigned long cm_clksel2_pll;   /* dpllx1 or x2 out */
unsigned long cm_clksel_mdm;/* modem dividers 2430 only */
unsigned long base_sdrc_rfr;/* base refresh timing for a set */
-   unsigned char flags;
+   unsigned short flags;
 };


diff --git a/arch/arm/plat-omap/include/plat/clkdev_omap.h 
b/arch/arm/plat-omap/include/plat/clkdev_omap.h
index 387a963..6d84c0c 100644
--- a/arch/arm/plat-omap/include/plat/clkdev_omap.h
+++ b/arch/arm/plat-omap/include/plat/clkdev_omap.h
@@ -40,6 +40,7 @@ struct omap_clk {
 #define CK_443X(1  11)
 #define CK_TI816X  (1  12)
 #define CK_446X(1  13)
+#define CK_AM33XX  (1  14)   /* AM33xx specific clocks */


 #define CK_34XX(CK_3430ES1 | CK_3430ES2PLUS)
diff --git a/arch/arm/plat-omap/include/plat/clock.h 
b/arch/arm/plat-omap/include/plat/clock.h
index 197ca03..168c54e 100644
--- a/arch/arm/plat-omap/include/plat/clock.h
+++ b/arch/arm/plat-omap/include/plat/clock.h
@@ -59,6 +59,7 @@ struct clkops {
 #define RATE_IN_4430   (1  5)
 #define RATE_IN_TI816X (1  6)
 #define RATE_IN_4460   (1  7)
+#define RATE_IN_AM33XX (1  8)

 #define RATE_IN_24XX   (RATE_IN_242X | RATE_IN_243X)
 #define RATE_IN_34XX   (RATE_IN_3430ES1 | RATE_IN_3430ES2PLUS)
@@ -84,7 +85,7 @@ struct clkops {
 struct clksel_rate {
u32 val;
u8  div;
-   u8  flags;
+   u16 flags;
 };

 /**
diff --git a/arch/arm/plat-omap/include/plat/cpu.h 
b/arch/arm/plat-omap/include/plat/cpu.h
index 2f90269..9f4d5c3 100644
--- a/arch/arm/plat-omap/include/plat/cpu.h
+++ b/arch/arm/plat-omap/include/plat/cpu.h
@@ -78,6 +78,14 @@ static inline int is_omap ##class (void) \
return (GET_OMAP_CLASS == (id)) ? 1 : 0;\
 }

+#define GET_AM_CLASS   ((omap_rev()  24)  0xff)
+
+#define IS_AM_CLASS(class, id) \
+static inline int is_am ##class (void) \
+{  \
+   return (GET_AM_CLASS == (id)) ? 1 : 0;  \
+}
+
 #define GET_OMAP_SUBCLASS  

[PATCH-V3 3/4] arm:omap:am33xx: Create board support and enable build for AM335XEVM

2011-09-20 Thread hvaibhav
From: Afzal Mohammed af...@ti.com

This patch adds minimal support and build configuration for
AM335X EVM.

Signed-off-by: Afzal Mohammed af...@ti.com
Signed-off-by: Vaibhav Hiremath hvaib...@ti.com
---
 arch/arm/mach-omap2/Kconfig   |5 +++
 arch/arm/mach-omap2/Makefile  |2 +
 arch/arm/mach-omap2/board-am335xevm.c |   57 +
 3 files changed, 64 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-am335xevm.c

diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 12ab835..8533008 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -315,6 +315,11 @@ config MACH_TI8168EVM
depends on SOC_OMAPTI816X
default y

+config MACH_AM335XEVM
+   bool AM335X Evaluation Module
+   depends on SOC_OMAPAM33XX
+   default y
+
 config MACH_OMAP_4430SDP
bool OMAP 4430 SDP board
default y
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 5a6fe73..47d8de1 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -259,6 +259,8 @@ obj-$(CONFIG_MACH_CRANEBOARD)   += 
board-am3517crane.o
 obj-$(CONFIG_MACH_SBC3530) += board-omap3stalker.o \
   hsmmc.o
 obj-$(CONFIG_MACH_TI8168EVM)   += board-ti8168evm.o
+obj-$(CONFIG_MACH_AM335XEVM)   += board-am335xevm.o
+
 # Platform specific device init code
 usbfs-$(CONFIG_ARCH_OMAP_OTG)  := usb-fs.o
 obj-y  += $(usbfs-m) $(usbfs-y)
diff --git a/arch/arm/mach-omap2/board-am335xevm.c 
b/arch/arm/mach-omap2/board-am335xevm.c
new file mode 100644
index 000..afa3f26
--- /dev/null
+++ b/arch/arm/mach-omap2/board-am335xevm.c
@@ -0,0 +1,57 @@
+/*
+ * Code for AM335X EVM.
+ *
+ * Copyright (C) 2011 Texas Instruments, Inc. - http://www.ti.com/
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation version 2.
+ *
+ * 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 mach/hardware.h
+#include asm/mach-types.h
+#include asm/mach/arch.h
+#include asm/mach/map.h
+
+#include plat/irqs.h
+#include plat/board.h
+#include plat/common.h
+
+static struct omap_board_config_kernel am335x_evm_config[] __initdata = {
+};
+
+static void __init am335x_init_early(void)
+{
+   omap2_init_common_infrastructure();
+   omap2_init_common_devices(NULL, NULL);
+}
+
+static void __init am335x_evm_init(void)
+{
+   omap_serial_init();
+   omap_board_config = am335x_evm_config;
+   omap_board_config_size = ARRAY_SIZE(am335x_evm_config);
+}
+
+static void __init am335x_evm_map_io(void)
+{
+   omap2_set_globals_am33xx();
+   omapam33xx_map_common_io();
+}
+
+MACHINE_START(AM335XEVM, am335xevm)
+   /* Maintainer: Texas Instruments */
+   .boot_params= 0x8100,
+   .map_io = am335x_evm_map_io,
+   .init_early = am335x_init_early,
+   .init_irq   = ti816x_init_irq,
+   .timer  = omap3_timer,
+   .init_machine   = am335x_evm_init,
+MACHINE_END
--
1.7.0.4

--
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-V3 4/4] arm:omap:am33xx: Add low level debugging support

2011-09-20 Thread hvaibhav
From: Afzal Mohammed af...@ti.com

Add support for low level debugging on AM335X EVM (AM33XX family).
Currently only support for UART1 console, which is used on AM335X EVM
is added.

Signed-off-by: Afzal Mohammed af...@ti.com
Signed-off-by: Vaibhav Hiremath hvaib...@ti.com
---
 arch/arm/mach-omap2/include/mach/debug-macro.S |   22 ++
 arch/arm/plat-omap/include/plat/serial.h   |4 
 arch/arm/plat-omap/include/plat/uncompress.h   |6 ++
 3 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/include/mach/debug-macro.S 
b/arch/arm/mach-omap2/include/mach/debug-macro.S
index 48adfe9..f649973 100644
--- a/arch/arm/mach-omap2/include/mach/debug-macro.S
+++ b/arch/arm/mach-omap2/include/mach/debug-macro.S
@@ -78,6 +78,8 @@ omap_uart_lsr:.word   0
beq 82f @ configure UART2
cmp \rp, #TI816XUART3   @ ti816x UART offsets different
beq 83f @ configure UART3
+   cmp \rp, #AM33XXUART1   @ AM33XX UART offsets different
+   beq 84f @ configure UART1
cmp \rp, #ZOOM_UART @ only on zoom2/3
beq 95f @ configure ZOOM_UART

@@ -106,6 +108,9 @@ omap_uart_lsr:  .word   0
b   98f
 83:mov \rp, #UART_OFFSET(TI816X_UART3_BASE)
b   98f
+84:ldr \rp, =AM33XX_UART1_BASE
+   and \rp, \rp, #0x00ff
+   b   97f
 95:ldr \rp, =ZOOM_UART_BASE
mrc p15, 0, \rv, c1, c0
tst \rv, #1 @ MMU enabled?
@@ -121,6 +126,23 @@ omap_uart_lsr: .word   0
b   10b

/* Store both phys and virt address for the uart */
+97:add \rp, \rp, #0x4400   @ phys base
+   mrc p15, 0, \rv, c1, c0
+   tst \rv, #1 @ MMU enabled?
+   ldreq   \rv, =omap_uart_v2p(omap_uart_phys) @ MMU disabled
+   ldrne   \rv, =omap_uart_phys@ MMU enabled
+   str \rp, [\rv, #0]
+   sub \rp, \rp, #0x4400   @ phys base
+   add \rp, \rp, #0xf900   @ virt base
+   add \rv, \rv, #4@ omap_uart_virt
+   str \rp, [\rv, #0]
+   mov \rp, #(UART_LSR  OMAP_PORT_SHIFT)
+   add \rv, \rv, #4@ omap_uart_lsr
+   str \rp, [\rv, #0]
+
+   b   10b
+
+   /* Store both phys and virt address for the uart */
 98:add \rp, \rp, #0x4800   @ phys base
mrc p15, 0, \rv, c1, c0
tst \rv, #1 @ MMU enabled?
diff --git a/arch/arm/plat-omap/include/plat/serial.h 
b/arch/arm/plat-omap/include/plat/serial.h
index de3b10c..ad19377 100644
--- a/arch/arm/plat-omap/include/plat/serial.h
+++ b/arch/arm/plat-omap/include/plat/serial.h
@@ -59,6 +59,9 @@
 /* AM3505/3517 UART4 */
 #define AM35XX_UART4_BASE  0x4809E000  /* Only on AM3505/3517 */

+/* AM33XX serial port */
+#define AM33XX_UART1_BASE  0x44E09000
+
 /* External port on Zoom2/3 */
 #define ZOOM_UART_BASE 0x1000
 #define ZOOM_UART_VIRT 0xfa40
@@ -92,6 +95,7 @@
 #define TI816XUART181
 #define TI816XUART282
 #define TI816XUART383
+#define AM33XXUART184
 #define ZOOM_UART  95  /* Only on zoom2/3 */

 /* This is only used by 8250.c for omap1510 */
diff --git a/arch/arm/plat-omap/include/plat/uncompress.h 
b/arch/arm/plat-omap/include/plat/uncompress.h
index a067484..bd1e051 100644
--- a/arch/arm/plat-omap/include/plat/uncompress.h
+++ b/arch/arm/plat-omap/include/plat/uncompress.h
@@ -97,6 +97,10 @@ static inline void flush(void)
_DEBUG_LL_ENTRY(mach, TI816X_UART##p##_BASE, OMAP_PORT_SHIFT,   \
TI816XUART##p)

+#define DEBUG_LL_AM33XX(p, mach)   \
+   _DEBUG_LL_ENTRY(mach, AM33XX_UART##p##_BASE, OMAP_PORT_SHIFT,   \
+   AM33XXUART##p)
+
 static inline void __arch_decomp_setup(unsigned long arch_id)
 {
int port = 0;
@@ -173,6 +177,8 @@ static inline void __arch_decomp_setup(unsigned long 
arch_id)
/* TI8168 base boards using UART3 */
DEBUG_LL_TI816X(3, ti8168evm);

+   /* AM33XX base boards using UART1 */
+   DEBUG_LL_AM33XX(1, am335xevm);
} while (0);
 }

--
1.7.0.4

--
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-V3 2/4] arm:omap:am33xx: Update common OMAP machine specific sources

2011-09-20 Thread hvaibhav
From: Afzal Mohammed af...@ti.com

This patch updates the common machine specific source files for
support for AM33XX/AM335x with cpu type, macros for identification of
AM33XX/AM335X device.

Signed-off-by: Afzal Mohammed af...@ti.com
Signed-off-by: Vaibhav Hiremath hvaib...@ti.com
---
 arch/arm/mach-omap2/clock3xxx_data.c   |6 +-
 arch/arm/mach-omap2/common.c   |   16 
 arch/arm/mach-omap2/id.c   |   10 --
 arch/arm/mach-omap2/io.c   |   25 +
 arch/arm/mach-omap2/serial.c   |6 +++---
 arch/arm/plat-omap/include/plat/am33xx.h   |   25 +
 arch/arm/plat-omap/include/plat/common.h   |1 +
 arch/arm/plat-omap/include/plat/hardware.h |1 +
 arch/arm/plat-omap/include/plat/io.h   |   20 
 arch/arm/plat-omap/include/plat/omap34xx.h |2 ++
 arch/arm/plat-omap/io.c|5 +
 11 files changed, 111 insertions(+), 6 deletions(-)
 create mode 100644 arch/arm/plat-omap/include/plat/am33xx.h

diff --git a/arch/arm/mach-omap2/clock3xxx_data.c 
b/arch/arm/mach-omap2/clock3xxx_data.c
index dadb8c6..2ee472c 100644
--- a/arch/arm/mach-omap2/clock3xxx_data.c
+++ b/arch/arm/mach-omap2/clock3xxx_data.c
@@ -3493,6 +3493,9 @@ int __init omap3xxx_clk_init(void)
} else if (cpu_is_ti816x()) {
cpu_mask = RATE_IN_TI816X;
cpu_clkflg = CK_TI816X;
+   } else if (cpu_is_am33xx()) {
+   cpu_mask = RATE_IN_AM33XX;
+   cpu_clkflg = CK_AM33XX;
} else if (cpu_is_omap34xx()) {
if (omap_rev() == OMAP3430_REV_ES1_0) {
cpu_mask = RATE_IN_3430ES1;
@@ -3576,7 +3579,8 @@ int __init omap3xxx_clk_init(void)
 * Lock DPLL5 -- here only until other device init code can
 * handle this
 */
-   if (!cpu_is_ti816x()  (omap_rev() = OMAP3430_REV_ES2_0))
+   if (!cpu_is_ti816x()  !cpu_is_am33xx() 
+   (omap_rev() = OMAP3430_REV_ES2_0))
omap3_clk_lock_dpll5();

/* Avoid sleeping during omap3_core_dpll_m2_set_rate() */
diff --git a/arch/arm/mach-omap2/common.c b/arch/arm/mach-omap2/common.c
index 3f20cbb..395a9b6 100644
--- a/arch/arm/mach-omap2/common.c
+++ b/arch/arm/mach-omap2/common.c
@@ -119,6 +119,22 @@ void __init omap2_set_globals_ti816x(void)
 {
__omap2_set_globals(ti816x_globals);
 }
+
+#define AM33XX_TAP_BASE(AM33XX_CTRL_BASE + \
+   TI816X_CONTROL_DEVICE_ID - 0x204)
+
+static struct omap_globals am33xx_globals = {
+   .class  = OMAP343X_CLASS,
+   .tap= OMAP2_L4_IO_ADDRESS(AM33XX_TAP_BASE),
+   .ctrl   = AM33XX_CTRL_BASE,
+   .prm= AM33XX_PRCM_BASE,
+   .cm = AM33XX_PRCM_BASE,
+};
+
+void __init omap2_set_globals_am33xx(void)
+{
+   __omap2_set_globals(am33xx_globals);
+}
 #endif

 #if defined(CONFIG_ARCH_OMAP4)
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
index d27daf9..540b6f1 100644
--- a/arch/arm/mach-omap2/id.c
+++ b/arch/arm/mach-omap2/id.c
@@ -337,6 +337,10 @@ static void __init omap3_check_revision(const char 
**cpu_rev)
break;
}
break;
+   case 0xb944:
+   omap_revision = AM335X_REV_ES1_0;
+   *cpu_rev = 1.0;
+   break;
default:
/* Unknown default to latest silicon rev as default */
omap_revision = OMAP3630_REV_ES1_2;
@@ -429,6 +433,8 @@ static void __init omap3_cpuinfo(const char *cpu_rev)
cpu_name = (omap3_has_sgx()) ? AM3517 : AM3505;
} else if (cpu_is_ti816x()) {
cpu_name = TI816X;
+   } else if (cpu_is_am335x()) {
+   cpu_name =  AM335X;
} else if (omap3_has_iva()  omap3_has_sgx()) {
/* OMAP3430, OMAP3525, OMAP3515, OMAP3503 devices */
cpu_name = OMAP3430/3530;
@@ -469,8 +475,8 @@ void __init omap2_check_revision(void)
} else if (cpu_is_omap34xx()) {
omap3_check_revision(cpu_rev);

-   /* TI816X doesn't have feature register */
-   if (!cpu_is_ti816x())
+   /* TI816X/AM335X doesn't have feature register */
+   if (!cpu_is_ti816x()  !cpu_is_am33xx())
omap3_check_features();
else
ti816x_check_features();
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c
index 40b6d47..ccd50de 100644
--- a/arch/arm/mach-omap2/io.c
+++ b/arch/arm/mach-omap2/io.c
@@ -182,7 +182,24 @@ static struct map_desc omapti816x_io_desc[] __initdata = {
.pfn= __phys_to_pfn(L4_34XX_PHYS),
.length = L4_34XX_SIZE,
.type   = MT_DEVICE
+   }
+};
+#endif
+
+#ifdef CONFIG_SOC_OMAPAM33XX
+static struct map_desc omapam33xx_io_desc[] 

Re: [PATCH 1/5 v9] arm: omap: usb: ehci and ohci hwmod structures for omap4

2011-09-20 Thread Munegowda, Keshava
On Tue, Sep 20, 2011 at 2:16 AM, Cousson, Benoit b-cous...@ti.com wrote:
 Keshava,

 I've just replied to your previous v8 version about the comments you didn't
 take into account.
 I just have one minor nit on that one I missed previously, plus a couple of
 clarifications.

 On 9/15/2011 3:22 PM, Munegowda, Keshava wrote:

 From: Benoit Coussonb-cous...@ti.com

 Following 4 hwmod structures are added:
 UHH hwmod of usbhs with uhh base address and functional clock,
 EHCI hwmod with irq and base address,
 OHCI hwmod with irq and base address,
 TLL hwmod of usbhs with the TLL base address and irq.

 Signed-off-by: Benoit Coussonb-cous...@ti.com
 Signed-off-by: Keshava Munegowdakeshava_mgo...@ti.com
 ---
  arch/arm/mach-omap2/omap_hwmod_44xx_data.c |  249
 +++-
  1 files changed, 248 insertions(+), 1 deletions(-)

 diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
 b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
 index 6201422..f06efa6 100644
 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
 +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
 @@ -68,6 +68,10 @@ static struct omap_hwmod omap44xx_mmc2_hwmod;
  static struct omap_hwmod omap44xx_mpu_hwmod;
  static struct omap_hwmod omap44xx_mpu_private_hwmod;
  static struct omap_hwmod omap44xx_usb_otg_hs_hwmod;
 +static struct omap_hwmod omap44xx_usb_host_hs_hwmod;
 +static struct omap_hwmod omap44xx_usbhs_ohci_hwmod;
 +static struct omap_hwmod omap44xx_usbhs_ehci_hwmod;
 +static struct omap_hwmod omap44xx_usb_tll_hs_hwmod;

  /*
   * Interconnects omap_hwmod structures
 @@ -5336,6 +5340,244 @@ static struct omap_hwmod omap44xx_wd_timer3_hwmod
 = {
        .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
  };

 +/*
 + * 'usb_host_hs' class
 + * high-speed multi-port usb host controller
 + */
 +static struct omap_hwmod_ocp_if omap44xx_usb_host_hs__l3_main_2 = {
 +       .master         =omap44xx_usb_host_hs_hwmod,
 +       .slave          =omap44xx_l3_main_2_hwmod,
 +       .clk            = l3_div_ck,
 +       .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +static struct omap_hwmod_class_sysconfig omap44xx_usb_host_hs_sysc = {
 +       .rev_offs       = 0x,
 +       .sysc_offs      = 0x0010,
 +       .syss_offs      = 0x0014,
 +       .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
 +       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 +                       SIDLE_SMART_WKUP | MSTANDBY_FORCE | MSTANDBY_NO |
 +                       MSTANDBY_SMART | MSTANDBY_SMART_WKUP),
 +       .sysc_fields    =omap_hwmod_sysc_type2,
 +};
 +
 +static struct omap_hwmod_class omap44xx_usb_host_hs_hwmod_class = {
 +       .name = usbhs_uhh,
 +       .sysc =omap44xx_usb_host_hs_sysc,
 +};
 +
 +static struct omap_hwmod_ocp_if *omap44xx_usb_host_hs_masters[] = {
 +       omap44xx_usb_host_hs__l3_main_2,
 +};
 +
 +static struct omap_hwmod_addr_space omap44xx_usb_host_hs_addrs[] = {
 +       {
 +               .name           = uhh,
 +               .pa_start       = 0x4a064000,
 +               .pa_end         = 0x4a0647ff,
 +               .flags          = ADDR_TYPE_RT
 +       },
 +       {}
 +};
 +
 +static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_host_hs = {
 +       .master         =omap44xx_l4_cfg_hwmod,
 +       .slave          =omap44xx_usb_host_hs_hwmod,
 +       .clk            = l4_div_ck,
 +       .addr           = omap44xx_usb_host_hs_addrs,
 +       .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +static struct omap_hwmod_ocp_if *omap44xx_usb_host_hs_slaves[] = {
 +       omap44xx_l4_cfg__usb_host_hs,
 +};
 +
 +static struct omap_hwmod omap44xx_usb_host_hs_hwmod = {
 +       .name           = usbhs_uhh,
 +       .class          =omap44xx_usb_host_hs_hwmod_class,
 +       .clkdm_name     = l3_init_clkdm,
 +       .main_clk       = usb_host_hs_fck,
 +       .prcm = {
 +               .omap4 = {
 +                       .clkctrl_offs =
 OMAP4_CM_L3INIT_USB_HOST_CLKCTRL_OFFSET,
 +                       .context_offs =
 OMAP4_RM_L3INIT_USB_HOST_CONTEXT_OFFSET,
 +                       .modulemode   = MODULEMODE_SWCTRL,
 +               },
 +       },
 +       .slaves         = omap44xx_usb_host_hs_slaves,
 +       .slaves_cnt     = ARRAY_SIZE(omap44xx_usb_host_hs_slaves),
 +       .masters        = omap44xx_usb_host_hs_masters,
 +       .masters_cnt    = ARRAY_SIZE(omap44xx_usb_host_hs_masters),
 +       .flags          = HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY,

 Why do you need these flags? These flags are reserved for non-standard
 behavior / HW bugs. I know that this IP is full of various bugs, but it will
 be nice to add some explanation in the changelog and a small comment here as
 well.

 +       .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
 +};
 +
 +/* 'usbhs_ohci' class */
 +static struct omap_hwmod_class omap44xx_usbhs_ohci_hwmod_class = {
 +       .name = usbhs_ohci,
 +};
 +
 +static struct omap_hwmod_irq_info omap44xx_usbhs_ohci_irqs[] = {
 +       { .name = ohci-irq, 

Re: [PATCH 1/5 v8] arm: omap: usb: ehci and ohci hwmod structures for omap4

2011-09-20 Thread Munegowda, Keshava
On Tue, Sep 20, 2011 at 2:03 AM, Cousson, Benoit b-cous...@ti.com wrote:
 OK, it looks like the second half of the answer was in a second email...
 that makes sense:-)

 On 9/15/2011 9:22 AM, Munegowda, Keshava wrote:

 On Thu, Sep 15, 2011 at 11:25 AM, Munegowda, Keshava
 keshava_mgo...@ti.com  wrote:

 On Wed, Sep 14, 2011 at 10:20 PM, Cousson, Benoitb-cous...@ti.com
  wrote:

 Hi Keshava,

 On 8/25/2011 9:01 AM, Munegowda, Keshava wrote:

 From: Benoit Coussonb-cous...@ti.com

 Following 4 hwmod structures are added:
 UHH hwmod of usbhs with uhh base address and functional clock,
 EHCI hwmod with irq and base address,
 OHCI hwmod with irq and base address,
 TLL hwmod of usbhs with the TLL base address and irq.

 Signed-off-by: Benoit Coussonb-cous...@ti.com

 That version is really different compared to my original patch, so you
 should highlight the diff you introduced.

 Since there are too many changes are done compare to your original
 patch; i prefer keep a single patch,rather
 keeping your original patch and my changes are another patch.

 This is not really what I was asking for. You changed at least 30% of the
 original patch without mentioning anything in the changelog.
 You should at least add a history to clarify what part you edited / added
 compared to the original.

 Signed-off-by: Keshava Munegowdakeshava_mgo...@ti.com
 ---
   arch/arm/mach-omap2/omap_hwmod_44xx_data.c |  247
 
   1 files changed, 247 insertions(+), 0 deletions(-)

 diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
 b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
 index 6201422..0bc01dd 100644
 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
 +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
 @@ -68,6 +68,10 @@ static struct omap_hwmod omap44xx_mmc2_hwmod;
   static struct omap_hwmod omap44xx_mpu_hwmod;
   static struct omap_hwmod omap44xx_mpu_private_hwmod;
   static struct omap_hwmod omap44xx_usb_otg_hs_hwmod;
 +static struct omap_hwmod omap44xx_usb_host_hs_hwmod;
 +static struct omap_hwmod omap44xx_usbhs_ohci_hwmod;
 +static struct omap_hwmod omap44xx_usbhs_ehci_hwmod;
 +static struct omap_hwmod omap44xx_usb_tll_hs_hwmod;

 None of the 3 last entries are master, and thus should not need any
 backward declaration.

 yes, I will make this change.

 But you didn't...

If I remove these backward declaration It is causing compilation error;
This is because omap44xx_l4_cfg__usbhs_ohci structures includes
omap44xx_usbhs_ohci_hwmod structure and then this structure
omap44xx_usbhs_ohci_hwmod
is defined; you need backward declaration;
please let me know if i am missing anything here.


   /*
    * Interconnects omap_hwmod structures
 @@ -5336,6 +5340,245 @@ static struct omap_hwmod
 omap44xx_wd_timer3_hwmod = {
       .omap_chip      = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
   };

 +/*
 + * 'usb_host_hs' class
 + * high-speed multi-port usb host controller
 + */
 +static struct omap_hwmod_ocp_if omap44xx_usb_host_hs__l3_main_2 = {
 +     .master         =omap44xx_usb_host_hs_hwmod,
 +     .slave          =omap44xx_l3_main_2_hwmod,
 +     .clk            = l3_div_ck,
 +     .user           = OCP_USER_MPU | OCP_USER_SDMA,
 +};
 +
 +static struct omap_hwmod_class_sysconfig omap44xx_usb_host_hs_sysc = {
 +     .rev_offs       = 0x,
 +     .sysc_offs      = 0x0010,
 +     .syss_offs      = 0x0014,
 +     .sysc_flags     = (SYSC_HAS_MIDLEMODE | SYSC_HAS_SIDLEMODE),
 +     .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 +                             SIDLE_SMART_WKUP | MSTANDBY_FORCE |
 +                             MSTANDBY_NO | MSTANDBY_SMART |
 +                             MSTANDBY_SMART_WKUP),

 Minor, but it should be:
 +       .idlemodes      = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
 +                          SIDLE_SMART_WKUP | MSTANDBY_FORCE |
 MSTANDBY_NO |
 +                          MSTANDBY_SMART | MSTANDBY_SMART_WKUP),

 +     .sysc_fields    =omap_hwmod_sysc_type2,
 +};
 +
 +static struct omap_hwmod_class omap44xx_usb_host_hs_hwmod_class = {
 +     .name = usbhs_uhh,
 +     .sysc =omap44xx_usb_host_hs_sysc,
 +};
 +
 +static struct omap_hwmod_ocp_if *omap44xx_usb_host_hs_masters[] = {
 +omap44xx_usb_host_hs__l3_main_2,
 +};
 +
 +static struct omap_hwmod_addr_space omap44xx_usb_host_hs_addrs[] = {
 +     {
 +             .name           = uhh,

 In general, there is no name for unique entry. And if you need a name,
 you should find something relevant considering this is local to the hwmod.

 No answer and no change on that one.

The usbhs driver internally uses platform_get_resource_byname , hence
it is useful.


 +             .pa_start       = 0x4a064000,
 +             .pa_end         = 0x4a0647ff,
 +             .flags          = ADDR_TYPE_RT
 +     },
 +     {} /* Terminating Entry */

 That comment is useless. Paul added one space inside the terminator as
 well.

 +};
 +
 +static struct omap_hwmod_ocp_if omap44xx_l4_cfg__usb_host_hs = {
 +     .master         

[PATCH 5/5] omap2plus_defconfig: Enable omap3isp and MT9T111 sensor drivers

2011-09-20 Thread Deepthy Ravi
Enables multimedia driver, media controller api,
v4l2-subdev-api, omap3isp and mt9t111 sensor
drivers in omap2plus_defconfig.

Signed-off-by: Deepthy Ravi deepthy.r...@ti.com
---
 arch/arm/configs/omap2plus_defconfig |   10 ++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/arch/arm/configs/omap2plus_defconfig 
b/arch/arm/configs/omap2plus_defconfig
index d5f00d7..548823d 100644
--- a/arch/arm/configs/omap2plus_defconfig
+++ b/arch/arm/configs/omap2plus_defconfig
@@ -133,6 +133,16 @@ CONFIG_TWL4030_WATCHDOG=y
 CONFIG_REGULATOR_TWL4030=y
 CONFIG_REGULATOR_TPS65023=y
 CONFIG_REGULATOR_TPS6507X=y
+CONFIG_MEDIA_SUPPORT=y
+CONFIG_MEDIA_CONTROLLER=y
+CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_V4L2_COMMON=y
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
+CONFIG_VIDEO_MEDIA=y
+CONFIG_VIDEO_MT9T111=y
+CONFIG_VIDEO_OMAP3=y
 CONFIG_FB=y
 CONFIG_FIRMWARE_EDID=y
 CONFIG_FB_MODE_HELPERS=y
-- 
1.7.0.4

--
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 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats

2011-09-20 Thread Deepthy Ravi
Configure INPMOD and PACK8 fileds of CCDC_SYN_MODE
register for UYVY8_2X8 and YUYV8_2X8 formats.

Signed-off-by: Deepthy Ravi deepthy.r...@ti.com
---
 drivers/media/video/omap3isp/ispccdc.c |   11 ---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/media/video/omap3isp/ispccdc.c 
b/drivers/media/video/omap3isp/ispccdc.c
index 418ba65..1dcf180 100644
--- a/drivers/media/video/omap3isp/ispccdc.c
+++ b/drivers/media/video/omap3isp/ispccdc.c
@@ -985,8 +985,12 @@ static void ccdc_config_sync_if(struct isp_ccdc_device 
*ccdc,
 
syn_mode = ~ISPCCDC_SYN_MODE_INPMOD_MASK;
if (format-code == V4L2_MBUS_FMT_YUYV8_2X8 ||
-   format-code == V4L2_MBUS_FMT_UYVY8_2X8)
-   syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
+   format-code == V4L2_MBUS_FMT_UYVY8_2X8){
+   if (pdata  pdata-bt656)
+   syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
+   else
+   syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
+   }
else if (format-code == V4L2_MBUS_FMT_YUYV8_1X16 ||
 format-code == V4L2_MBUS_FMT_UYVY8_1X16)
syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
@@ -1172,7 +1176,8 @@ static void ccdc_configure(struct isp_ccdc_device *ccdc)
syn_mode = ~ISPCCDC_SYN_MODE_SDR2RSZ;
 
/* Use PACK8 mode for 1byte per pixel formats. */
-   if (omap3isp_video_format_info(format-code)-width = 8)
+   if ((omap3isp_video_format_info(format-code)-width = 8) 
+   (omap3isp_video_format_info(format-code)-bpp = 8))
syn_mode |= ISPCCDC_SYN_MODE_PACK8;
else
syn_mode = ~ISPCCDC_SYN_MODE_PACK8;
-- 
1.7.0.4

--
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 0/5] OMAP3EVM: Add support for MT9T111 sensor

2011-09-20 Thread Deepthy Ravi
This patchset
-adds support for MT9T111 sensor on omap3evm.
Currently the sensor driver supports only
VGA resolution.
-enables MT9T111 sensor in omap2plus_defconfig.

This is applied on top of the following patchset
http://www.spinics.net/lists/linux-media/msg37270.html 
which adds YUYV input support for OMAP3ISP.
---

Deepthy Ravi (2):
  ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and
YUYV8_2X8 formats
  omap2plus_defconfig: Enable omap3isp and MT9T111 sensor drivers

Vaibhav Hiremath (3):
  omap3evm: Enable regulators for camera interface
  [media] v4l: Add mt9t111 sensor driver
  omap3evm: Add Camera board init/hookup file

 arch/arm/configs/omap2plus_defconfig|   10 +
 arch/arm/mach-omap2/Makefile|5 +
 arch/arm/mach-omap2/board-omap3evm-camera.c |  185 
 arch/arm/mach-omap2/board-omap3evm.c|   25 +
 drivers/media/video/Kconfig |7 +
 drivers/media/video/Makefile|1 +
 drivers/media/video/mt9t111.c   |  793 
 drivers/media/video/mt9t111_reg.h   | 1367 +++
 drivers/media/video/omap3isp/ispccdc.c  |   11 +-
 include/media/mt9t111.h |   45 +
 10 files changed, 2446 insertions(+), 3 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-omap3evm-camera.c
 create mode 100644 drivers/media/video/mt9t111.c
 create mode 100644 drivers/media/video/mt9t111_reg.h
 create mode 100644 include/media/mt9t111.h

--
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 3/5] omap3evm: Add Camera board init/hookup file

2011-09-20 Thread Deepthy Ravi
From: Vaibhav Hiremath hvaib...@ti.com

Adds board support for MT9T111 sensor.

Signed-off-by: Vaibhav Hiremath hvaib...@ti.com
Signed-off-by: Deepthy Ravi deepthy.r...@ti.com
---
 arch/arm/mach-omap2/Makefile|5 +
 arch/arm/mach-omap2/board-omap3evm-camera.c |  185 +++
 arch/arm/mach-omap2/board-omap3evm.c|4 +
 3 files changed, 194 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-omap2/board-omap3evm-camera.c

diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index f343365..a19753c 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -280,3 +280,8 @@ disp-$(CONFIG_OMAP2_DSS):= display.o
 obj-y  += $(disp-m) $(disp-y)
 
 obj-y  += common-board-devices.o twl-common.o
+
+ifeq ($(CONFIG_MACH_OMAP3EVM),y)
+evm-camera-$(CONFIG_VIDEO_OMAP3)   := board-omap3evm-camera.o
+obj-y  += $(evm-camera-m) $(evm-camera-y)
+endif
diff --git a/arch/arm/mach-omap2/board-omap3evm-camera.c 
b/arch/arm/mach-omap2/board-omap3evm-camera.c
new file mode 100644
index 000..e762f61
--- /dev/null
+++ b/arch/arm/mach-omap2/board-omap3evm-camera.c
@@ -0,0 +1,185 @@
+/*
+ * arch/arm/mach-omap2/board-omap3evm-camera.c
+ *
+ * OMAP3EVM: Driver for Leopard Module Board
+ *
+ * Copyright (C) 2011 Texas Instruments Inc
+ * Author: Vaibhav Hiremath hvaib...@ti.com
+ *
+ * This package 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 in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include linux/io.h
+#include linux/i2c.h
+#include linux/delay.h
+#include linux/gpio.h
+#include linux/err.h
+#include linux/platform_device.h
+#include mach/gpio.h
+#include media/mt9t111.h
+#include media/omap3isp.h
+#include ../drivers/media/video/omap3isp/isp.h
+#include devices.h
+
+#define CAM_USE_XCLKA  0
+
+#define T2_GPIO_2  194
+#define nCAM_VD_SEL157
+#define nCAM_VD_EN 200
+
+/* mux id to enable/disable signal routing to different peripherals */
+enum omap3evm_cam_mux {
+   MUX_EN_TVP5146 = 0,
+   MUX_EN_CAMERA_SENSOR,
+   MUX_EN_EXP_CAMERA_SENSOR,
+   MUX_INVALID,
+};
+
+/**
+ * @brief omap3evm_set_mux - Sets mux to enable/disable signal routing to
+ * different peripherals present on new EVM board
+ *
+ * @param mux_id - enum, mux id to enable/disable
+ * @param value - enum, ENABLE_MUX for enabling and DISABLE_MUX for disabling
+ *
+ */
+static void omap3evm_set_mux(enum omap3evm_cam_mux mux_id)
+{
+   switch (mux_id) {
+   /*
+   * JP1 jumper need to configure to choose between on-board
+   * camera sensor conn and on-board LI-3MC02 camera sensor.
+   */
+   case MUX_EN_CAMERA_SENSOR:
+   /* Set nCAM_VD_EN (T2_GPIO8) = 0 */
+   gpio_set_value_cansleep(nCAM_VD_EN, 0);
+   /* Set nCAM_VD_SEL (GPIO157) = 0 */
+   gpio_set_value(nCAM_VD_SEL, 0);
+   break;
+   case MUX_EN_EXP_CAMERA_SENSOR:
+   /* Set nCAM_VD_EN (T2_GPIO8) = 1 */
+   gpio_set_value_cansleep(nCAM_VD_EN, 1);
+   break;
+   case MUX_EN_TVP5146:
+   default:
+   /* Set nCAM_VD_EN (T2_GPIO8) = 0 */
+   gpio_set_value_cansleep(nCAM_VD_EN, 0);
+   /* Set nCAM_VD_SEL (GPIO157) = 1 */
+   gpio_set_value(nCAM_VD_SEL, 1);
+   break;
+   }
+}
+
+/* MT9T111: 3M sensor */
+static int omap3evm_mt9t111_s_power(struct v4l2_subdev *subdev, u32 on)
+{
+   struct isp_device *isp = v4l2_dev_to_isp_device(subdev-v4l2_dev);
+
+   omap3evm_set_mux(MUX_EN_CAMERA_SENSOR);
+
+   if (on) {
+   /* Enable EXTCLK */
+   if (isp-platform_cb.set_xclk)
+   isp-platform_cb.set_xclk(isp, 2400, CAM_USE_XCLKA);
+   udelay(5);
+   } else {
+   if (isp-platform_cb.set_xclk)
+   isp-platform_cb.set_xclk(isp, 0, CAM_USE_XCLKA);
+   }
+
+   return 0;
+}
+
+static struct mt9t111_platform_data omap3evm_mt9t111_platform_data = {
+   .s_power= omap3evm_mt9t111_s_power,
+};
+
+
+#define MT9T111_I2C_BUS_NUM2
+
+static struct i2c_board_info omap3evm_camera_i2c_devices[] = {
+   {
+   

[PATCH 1/5] omap3evm: Enable regulators for camera interface

2011-09-20 Thread Deepthy Ravi
From: Vaibhav Hiremath hvaib...@ti.com

Enabled 1v8 and 2v8 regulator output, which is being used by
camera module.

Signed-off-by: Vaibhav Hiremath hvaib...@ti.com
Signed-off-by: Deepthy Ravi deepthy.r...@ti.com
---
 arch/arm/mach-omap2/board-omap3evm.c |   21 +
 1 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/board-omap3evm.c 
b/arch/arm/mach-omap2/board-omap3evm.c
index c452b3f..cf30fff 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -273,6 +273,25 @@ static struct omap_dss_board_info omap3_evm_dss_data = {
.default_device = omap3_evm_lcd_device,
 };
 
+static struct regulator_consumer_supply omap3evm_vaux3_supply[] = {
+   REGULATOR_SUPPLY(cam_2v8, NULL),
+};
+
+/* VAUX3 for CAM_2V8 */
+static struct regulator_init_data omap3evm_vaux3 = {
+   .constraints = {
+   .min_uV = 280,
+   .max_uV = 280,
+   .apply_uV   = true,
+   .valid_modes_mask   = REGULATOR_MODE_NORMAL
+   | REGULATOR_MODE_STANDBY,
+   .valid_ops_mask = REGULATOR_CHANGE_MODE
+   | REGULATOR_CHANGE_STATUS,
+   },
+   .num_consumer_supplies  = ARRAY_SIZE(omap3evm_vaux3_supply),
+   .consumer_supplies  = omap3evm_vaux3_supply,
+};
+
 static struct regulator_consumer_supply omap3evm_vmmc1_supply[] = {
REGULATOR_SUPPLY(vmmc, omap_hsmmc.0),
 };
@@ -433,6 +452,7 @@ static struct twl4030_keypad_data omap3evm_kp_data = {
 /* ads7846 on SPI */
 static struct regulator_consumer_supply omap3evm_vio_supply[] = {
REGULATOR_SUPPLY(vcc, spi1.0),
+   REGULATOR_SUPPLY(vio_1v8, NULL),
 };
 
 /* VIO for ads7846 */
@@ -499,6 +519,7 @@ static struct twl4030_platform_data omap3evm_twldata = {
.vio= omap3evm_vio,
.vmmc1  = omap3evm_vmmc1,
.vsim   = omap3evm_vsim,
+   .vaux3  = omap3evm_vaux3,
 };
 
 static int __init omap3_evm_i2c_init(void)
-- 
1.7.0.4

--
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 8/8] OMAP4: Fix the emif and dmm virtual mapping

2011-09-20 Thread Santosh Shilimkar
On Friday 16 September 2011 11:26 PM, Kevin Hilman wrote:
 Santosh Shilimkar santosh.shilim...@ti.com writes:
 
 Fix the address overlap with Emulation domain (EMU).

 The previous mapping was entering into EMU mapping
 and was not as per comments. Fix the mapping accordingly.

 [giris...@ti.com: Helped fixing comments.]
 Signed-off-by: Girish S G giris...@ti.com
 Signed-off-by: Santosh Shilimkar santosh.shilim...@ti.com
 ---
  arch/arm/plat-omap/include/plat/io.h |4 ++--
  1 files changed, 2 insertions(+), 2 deletions(-)

 diff --git a/arch/arm/plat-omap/include/plat/io.h 
 b/arch/arm/plat-omap/include/plat/io.h
 index d72ec85..a2f7d31 100644
 --- a/arch/arm/plat-omap/include/plat/io.h
 +++ b/arch/arm/plat-omap/include/plat/io.h
 @@ -228,12 +228,12 @@
  
  #define OMAP44XX_EMIF2_PHYS OMAP44XX_EMIF2_BASE
  /* 0x4d00 -- 0xfd20 */
 -#define OMAP44XX_EMIF2_VIRT (OMAP44XX_EMIF2_PHYS + OMAP4_L3_PER_IO_OFFSET)
 +#define OMAP44XX_EMIF2_VIRT (OMAP44XX_EMIF1_VIRT + SZ_1M)
 
 IMO, this would be much clearer (and future proof) if you used
 '+ OMAP44XX_EMIF1_SIZE' instead of SZ_1M.
 
ok.

  #define OMAP44XX_EMIF2_SIZE SZ_1M
  
  #define OMAP44XX_DMM_PHYS   OMAP44XX_DMM_BASE
  /* 0x4e00 -- 0xfd30 */
 -#define OMAP44XX_DMM_VIRT   (OMAP44XX_DMM_PHYS + OMAP4_L3_PER_IO_OFFSET)
 +#define OMAP44XX_DMM_VIRT   (OMAP44XX_EMIF2_VIRT + SZ_1M)
 
 and '+ OMAP44XX_EMIF2_SIZE' here.
 
Will add OMAP44XX_EMIF_SIZE since 2 EMIFs instaces are and
suppose to be identical.Almost missed this email in other traffic.

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


Re: [PATCH 2/5] [media] v4l: Add mt9t111 sensor driver

2011-09-20 Thread Guennadi Liakhovetski
On Tue, 20 Sep 2011, Deepthy Ravi wrote:

 From: Vaibhav Hiremath hvaib...@ti.com
 
 The MT9T111 is a 3.1Mp CMOS sensor from Aptina with
 its latest image signal processing (ISP) and 1.75ÎŒm
 pixel technology.
 The sensor driver currently supports only VGA
 resolution.
 
 Signed-off-by: Vaibhav Hiremath hvaib...@ti.com
 Signed-off-by: Deepthy Ravi deepthy.r...@ti.com
 ---
  drivers/media/video/Kconfig   |7 +
  drivers/media/video/Makefile  |1 +
  drivers/media/video/mt9t111.c |  793 +
  drivers/media/video/mt9t111_reg.h | 1367 
 +
  include/media/mt9t111.h   |   45 ++
  5 files changed, 2213 insertions(+), 0 deletions(-)
  create mode 100644 drivers/media/video/mt9t111.c
  create mode 100644 drivers/media/video/mt9t111_reg.h
  create mode 100644 include/media/mt9t111.h

NAK. The mt9t112 driver claims to also support mt9t111. I'm not sure, 
whether the driver has indeed been tested with mt9t111, but this is 
definitely something to verify. If the chips are indeed similar, please 
use the tree at

http://git.linuxtv.org/gliakhovetski/v4l-dvb.git/shortlog/refs/heads/rc1-for-3.2

which has converted the mt9t112 driver to be also used outside ot the 
soc-camera subsystem, and use that driver instead of adding another one.

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/
--
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 5/5] OMAPDSS: HDMI: Add support to dump clocks through

2011-09-20 Thread K, Mythri P
Hi,

On Tue, Sep 20, 2011 at 7:01 PM, Tomi Valkeinen tomi.valkei...@ti.com wrote:
 On Tue, 2011-09-20 at 18:19 +0530, mythr...@ti.com wrote:
 From: Mythri P K mythr...@ti.com

 Add support to dump the HDMI regm, regn, and other clock parameters.

 This patch doesn't work at all. It's checking for CONFIG_OMAP2_DSS_HDMI,
 whereas the actual define is CONFIG_OMAP4_DSS_HDMI. And even after
 fixing that, the output is:

 HDMI Clock Info
 regm            104regmf 104
 dcofreq 0regsd 1
 DSS_FCK (DSS_FCLK)      (off)
 hdmi fclk source = 3

These are the reg m , mf , dcofreq , by default the HDMI clock input is sysclk ,
These values are based on the pixel clock.I suppose all the other
clock values are
printed via dss / dispc clock dump , is there any other dump that is missing?
Thanks and regards,
Mythri.
 Did you test your patches at all?

  Tomi



--
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 5/5] OMAPDSS: HDMI: Add support to dump clocks through

2011-09-20 Thread Tomi Valkeinen
On Tue, 2011-09-20 at 21:06 +0530, K, Mythri P wrote:
 Hi,
 
 On Tue, Sep 20, 2011 at 7:01 PM, Tomi Valkeinen tomi.valkei...@ti.com wrote:
  On Tue, 2011-09-20 at 18:19 +0530, mythr...@ti.com wrote:
  From: Mythri P K mythr...@ti.com
 
  Add support to dump the HDMI regm, regn, and other clock parameters.
 
  This patch doesn't work at all. It's checking for CONFIG_OMAP2_DSS_HDMI,
  whereas the actual define is CONFIG_OMAP4_DSS_HDMI. And even after
  fixing that, the output is:
 
  HDMI Clock Info
  regm104regmf 104
  dcofreq 0regsd 1
  DSS_FCK (DSS_FCLK)  (off)
  hdmi fclk source = 3
 
 These are the reg m , mf , dcofreq , by default the HDMI clock input is 
 sysclk ,
 These values are based on the pixel clock.I suppose all the other
 clock values are
 printed via dss / dispc clock dump , is there any other dump that is missing?

I don't know, as the output was so garbled that I didn't look any
further.

But just look at the outputs from other interfaces, mainly DSI. Make the
output format similar, and print relevant information in the same way.

 Tomi


--
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: [GIT PULL] omap cleanup part1 for v3.2 merge window

2011-09-20 Thread Arnd Bergmann
On Saturday 17 September 2011, Tony Lindgren wrote:
 Please pull the first part of omap cleanup from:
 
 git://github.com/tmlind/linux.git cleanup
 
 This series cleans up early_init functions and removes
 CHIP_IS macro usage. This makes it easier to have SoC
 specific init functions so adding support for new omap
 variants does not require patching all over the place.

Thanks, pulled.

Note that we are trying to get everyone to use the similar
prefixes for patch summaries, so it would be nice if you could
change 'OMAP: powerdomain:' to 'ARM: OMAP: powerdomain' or
'ARM: omap/powerdowmain:' in the future.

Arnd
--
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: [GIT PULL] omap voltage cleanup for v3.2 merge window

2011-09-20 Thread Arnd Bergmann
On Saturday 17 September 2011, Tony Lindgren wrote:
 Please pull omap voltage cleanup series:
 
 git://github.com/tmlind/linux.git voltage
 
 This has a dependency to the cleanup part 1 series. As
 this contains some voltage fixes too, it's a separate
 series. You can either pull it into cleanup or keep it
 separate.

Hi Tony,

I've pulled it into the for-next branch, but haven't
made up my mind how it I will send it upstream.
I definitely think it's good that you sent it to me
as a separate series, given the number of patches in it.

Thanks,

Arnd
--
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: [GIT PULL] omap cleanup part1 for v3.2 merge window

2011-09-20 Thread Tony Lindgren
* Arnd Bergmann a...@arndb.de [110920 12:27]:
 On Saturday 17 September 2011, Tony Lindgren wrote:
  Please pull the first part of omap cleanup from:
  
  git://github.com/tmlind/linux.git cleanup
  
  This series cleans up early_init functions and removes
  CHIP_IS macro usage. This makes it easier to have SoC
  specific init functions so adding support for new omap
  variants does not require patching all over the place.
 
 Thanks, pulled.
 
 Note that we are trying to get everyone to use the similar
 prefixes for patch summaries, so it would be nice if you could
 change 'OMAP: powerdomain:' to 'ARM: OMAP: powerdomain' or
 'ARM: omap/powerdowmain:' in the future.

Already did that for my patches.. Paul and Kevin, can you
please also start following that standard too?

Thanks,

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: [GIT PULL] omap voltage cleanup for v3.2 merge window

2011-09-20 Thread Tony Lindgren
* Arnd Bergmann a...@arndb.de [110920 12:32]:
 On Saturday 17 September 2011, Tony Lindgren wrote:
  Please pull omap voltage cleanup series:
  
  git://github.com/tmlind/linux.git voltage
  
  This has a dependency to the cleanup part 1 series. As
  this contains some voltage fixes too, it's a separate
  series. You can either pull it into cleanup or keep it
  separate.
 
 Hi Tony,
 
 I've pulled it into the for-next branch, but haven't
 made up my mind how it I will send it upstream.
 I definitely think it's good that you sent it to me
 as a separate series, given the number of patches in it.

OK thanks. FYI, most of the voltage stuff can eventually
become just a regular device driver. But that depends on
some other changes, like PRCM interrupt driver.

Regards,

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: [GIT PULL] omap cleanup part1 for v3.2 merge window

2011-09-20 Thread Arnd Bergmann
On Saturday 17 September 2011, Tony Lindgren wrote:
 Hi Arnd,
 
 Please pull the first part of omap cleanup from:
 
 git://github.com/tmlind/linux.git cleanup
 
 This series cleans up early_init functions and removes
 CHIP_IS macro usage. This makes it easier to have SoC
 specific init functions so adding support for new omap
 variants does not require patching all over the place.

One more thing: my randconfig tests are running now and
have spit out a new error after merging lost of stuff
today:

arch/arm/mach-omap2/built-in.o: In function `omap_zoom_init':
/home/arnd/linux-arm/arch/arm/mach-omap2/board-zoom.c:117: undefined reference 
to `board_nand_init'
make[1]: *** [.tmp_vmlinux1] Error 1
make[1]: Target `_all' not remade because of errors.
make: *** [sub-make] Error 2
make: Target `_all' not remade because of errors.

It's not clear to me if this is actually caused by one of your
changes, or just a mismerge of some sort. I've attached
the defconfig that was used for your reference.

Also, I've got a branch with lots of omap specific randconfig
patches at

git://git.linaro.org/people/arnd/linux.git randconfig/omap

Probably not all of them are correct, but it would be nice
if you could take a look and cherry-pick the ones you like.

Arnd


defconfig.gz
Description: GNU Zip compressed data


Re: [GIT PULL] omap cleanup part1 for v3.2 merge window

2011-09-20 Thread Arnd Bergmann
On Tuesday 20 September 2011, Arnd Bergmann wrote:
 On Saturday 17 September 2011, Tony Lindgren wrote:
  Hi Arnd,
  
  Please pull the first part of omap cleanup from:
  
  git://github.com/tmlind/linux.git cleanup
  
  This series cleans up early_init functions and removes
  CHIP_IS macro usage. This makes it easier to have SoC
  specific init functions so adding support for new omap
  variants does not require patching all over the place.
 
 One more thing: my randconfig tests are running now and
 have spit out a new error after merging lost of stuff
 today:
 
 arch/arm/mach-omap2/built-in.o: In function `omap_zoom_init':
 /home/arnd/linux-arm/arch/arm/mach-omap2/board-zoom.c:117: undefined 
 reference to `board_nand_init'
 make[1]: *** [.tmp_vmlinux1] Error 1
 make[1]: Target `_all' not remade because of errors.
 make: *** [sub-make] Error 2
 make: Target `_all' not remade because of errors.

Found it: the offending patch is:

  omap2+: Use Kconfig symbol in Makefile instead of obj-y


It seems that you replace the #ifdef in the board-flash.c file
with a similar #ifdef in the header that replaces this with an
empty inline function when the object is not built.

Arnd
--
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: [GIT PULL] omap cleanup part1 for v3.2 merge window

2011-09-20 Thread Tony Lindgren
* Arnd Bergmann a...@arndb.de [110920 14:12]:
 On Tuesday 20 September 2011, Arnd Bergmann wrote:
  
  One more thing: my randconfig tests are running now and
  have spit out a new error after merging lost of stuff
  today:

Good to hear you got arndconfig running :)

Do you think we could also add support for something
like this:

$ echo CONFIG_ARCH_OMAP=y  .config
$ make randconfig

or

$ make --force=CONFIG_ARCH_OMAP randconfig

Where randconfig would keep the forced CONFIG_ARCH_OMAP
static while randomly selecting the others?

This would allow targeted randconfig for each patch more
or less..
 
  arch/arm/mach-omap2/built-in.o: In function `omap_zoom_init':
  /home/arnd/linux-arm/arch/arm/mach-omap2/board-zoom.c:117: undefined 
  reference to `board_nand_init'
  make[1]: *** [.tmp_vmlinux1] Error 1
  make[1]: Target `_all' not remade because of errors.
  make: *** [sub-make] Error 2
  make: Target `_all' not remade because of errors.
 
 Found it: the offending patch is:
 
   omap2+: Use Kconfig symbol in Makefile instead of obj-y
 
 
 It seems that you replace the #ifdef in the board-flash.c file
 with a similar #ifdef in the header that replaces this with an
 empty inline function when the object is not built.

Oops. I'll do a fix for that. Those should be now inline
functions in the header.

As various other omap branches are based on the cleanup I'd
rather not go mess with the original patch unless you insist.

Regards,

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 5/5] omap2plus_defconfig: Enable omap3isp and MT9T111 sensor drivers

2011-09-20 Thread Laurent Pinchart
Hi Deepthy,

Thanks for the patch.

On Tuesday 20 September 2011 16:56:52 Deepthy Ravi wrote:
 Enables multimedia driver, media controller api,
 v4l2-subdev-api, omap3isp and mt9t111 sensor
 drivers in omap2plus_defconfig.
 
 Signed-off-by: Deepthy Ravi deepthy.r...@ti.com
 ---
  arch/arm/configs/omap2plus_defconfig |   10 ++
  1 files changed, 10 insertions(+), 0 deletions(-)
 
 diff --git a/arch/arm/configs/omap2plus_defconfig
 b/arch/arm/configs/omap2plus_defconfig index d5f00d7..548823d 100644
 --- a/arch/arm/configs/omap2plus_defconfig
 +++ b/arch/arm/configs/omap2plus_defconfig
 @@ -133,6 +133,16 @@ CONFIG_TWL4030_WATCHDOG=y
  CONFIG_REGULATOR_TWL4030=y
  CONFIG_REGULATOR_TPS65023=y
  CONFIG_REGULATOR_TPS6507X=y
 +CONFIG_MEDIA_SUPPORT=y
 +CONFIG_MEDIA_CONTROLLER=y
 +CONFIG_VIDEO_DEV=y
 +CONFIG_VIDEO_V4L2_COMMON=y
 +CONFIG_VIDEO_ALLOW_V4L1=y
 +CONFIG_VIDEO_V4L1_COMPAT=y
 +CONFIG_VIDEO_V4L2_SUBDEV_API=y
 +CONFIG_VIDEO_MEDIA=y
 +CONFIG_VIDEO_MT9T111=y
 +CONFIG_VIDEO_OMAP3=y

Shouldn't they be compiled as modules instead ?

  CONFIG_FB=y
  CONFIG_FIRMWARE_EDID=y
  CONFIG_FB_MODE_HELPERS=y

-- 
Regards,

Laurent Pinchart
--
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/10] hwspinlock-next

2011-09-20 Thread Tony Lindgren
* Ohad Ben-Cohen o...@wizery.com [110920 01:34]:
 On Mon, Sep 12, 2011 at 7:46 PM, Ohad Ben-Cohen o...@wizery.com wrote:
 
 I'm wondering how hwspinlock updates like this should go upstream.
 
 The first hwspinlock batch was picked by Tony, because it involved a
 bulk of OMAP changes.
 
 Hwspinlock isn't OMAP-specific anymore though (we gained support for
 STE's u8500) and the vast majority of changes are in drivers/. We're
 still very much ARM-related, though this may change too at some point
 (c6x has a similar hardware semaphore peripheral like the u8500
 does).
 
 Tony, if you're still willing to pick up these updates I'd be happy to
 send you pull requests of course.

I'd prefer for Greg to take these as these are drivers.

If he's not taking it at this point based on it being ARM only,
I can take it then.

Regards,

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


[PATCH] ARM: OMAP2+: Fix missing inline functions for Makefile cleanup (Re: [GIT PULL] omap cleanup part1 for v3.2 merge window)

2011-09-20 Thread Tony Lindgren
Commit f41caddbe73f52a42f529d668ce47b4d693fd2c0 (omap2+: Use
Kconfig symbol in Makefile instead of obj-y) cleaned up the
omap2+ Makefile. However this did not account for the inline
functions that are now needed for board_flash_init and
board_nand_init.

Reported-by: Arnd Bergmann a...@arndb.de
Signed-off-by: Tony Lindgren t...@atomide.com

---

Will have this in the next pull request for cleanup

--- a/arch/arm/mach-omap2/board-flash.c
+++ b/arch/arm/mach-omap2/board-flash.c
@@ -148,11 +148,6 @@ __init board_nand_init(struct mtd_partition *nand_parts,
board_nand_data.gpmc_irq = OMAP_GPMC_IRQ_BASE + cs;
gpmc_nand_init(board_nand_data);
 }
-#else
-void
-__init board_nand_init(struct mtd_partition *nand_parts, u8 nr_parts, u8 cs, 
int nand_type)
-{
-}
 #endif /* CONFIG_MTD_NAND_OMAP2 || CONFIG_MTD_NAND_OMAP2_MODULE */
 
 /**
--- a/arch/arm/mach-omap2/board-flash.h
+++ b/arch/arm/mach-omap2/board-flash.h
@@ -24,7 +24,26 @@ struct flash_partitions {
int nr_parts;
 };
 
+#if defined(CONFIG_MTD_NAND_OMAP2) || \
+   defined(CONFIG_MTD_NAND_OMAP2_MODULE) || \
+   defined(CONFIG_MTD_ONENAND_OMAP2) || \
+   defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
 extern void board_flash_init(struct flash_partitions [],
char chip_sel[][GPMC_CS_NUM], int nand_type);
+#else
+static inline void board_flash_init(struct flash_partitions part[],
+   char chip_sel[][GPMC_CS_NUM], int nand_type)
+{
+}
+#endif
+
+#if defined(CONFIG_MTD_NAND_OMAP2) || \
+   defined(CONFIG_MTD_NAND_OMAP2_MODULE)
 extern void board_nand_init(struct mtd_partition *nand_parts,
u8 nr_parts, u8 cs, int nand_type);
+#else
+static inline void board_nand_init(struct mtd_partition *nand_parts,
+   u8 nr_parts, u8 cs, int nand_type)
+{
+}
+#endif
--
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 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats

2011-09-20 Thread Laurent Pinchart
Hi Deepthy,

Thanks for the patch.

On Tuesday 20 September 2011 16:56:51 Deepthy Ravi wrote:
 Configure INPMOD and PACK8 fileds of CCDC_SYN_MODE
 register for UYVY8_2X8 and YUYV8_2X8 formats.
 
 Signed-off-by: Deepthy Ravi deepthy.r...@ti.com
 ---
  drivers/media/video/omap3isp/ispccdc.c |   11 ---
  1 files changed, 8 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/media/video/omap3isp/ispccdc.c
 b/drivers/media/video/omap3isp/ispccdc.c index 418ba65..1dcf180 100644
 --- a/drivers/media/video/omap3isp/ispccdc.c
 +++ b/drivers/media/video/omap3isp/ispccdc.c
 @@ -985,8 +985,12 @@ static void ccdc_config_sync_if(struct isp_ccdc_device
 *ccdc,
 
   syn_mode = ~ISPCCDC_SYN_MODE_INPMOD_MASK;
   if (format-code == V4L2_MBUS_FMT_YUYV8_2X8 ||
 - format-code == V4L2_MBUS_FMT_UYVY8_2X8)
 - syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
 + format-code == V4L2_MBUS_FMT_UYVY8_2X8){
 + if (pdata  pdata-bt656)
 + syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
 + else
 + syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
 + }
   else if (format-code == V4L2_MBUS_FMT_YUYV8_1X16 ||
format-code == V4L2_MBUS_FMT_UYVY8_1X16)
   syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
 @@ -1172,7 +1176,8 @@ static void ccdc_configure(struct isp_ccdc_device
 *ccdc) syn_mode = ~ISPCCDC_SYN_MODE_SDR2RSZ;
 
   /* Use PACK8 mode for 1byte per pixel formats. */
 - if (omap3isp_video_format_info(format-code)-width = 8)
 + if ((omap3isp_video_format_info(format-code)-width = 8) 
 + (omap3isp_video_format_info(format-code)-bpp = 8))

I'm not sure to follow you. This will clear the PACK8 bit for the YUYV8_2X8 
formats. Those formats are 8 bits wide, shouldn't PACK8 be set to store 
samples on 8 bits instead of 16 bits ?

Is this patch intended to support YUYV8_2X8 sensors in non BT.656 mode with 
the bridge enabled ? In that case, what would you think about setting the CCDC 
input format to YUYV8_1X16 instead ? This would better reflect the reality, as 
the bridge converts YUYV8_2X8 to YUYV8_1X16, and the CCDC is then fed with 
YUYV8_1X16.

   syn_mode |= ISPCCDC_SYN_MODE_PACK8;
   else
   syn_mode = ~ISPCCDC_SYN_MODE_PACK8;

-- 
Regards,

Laurent Pinchart
--
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 5/5] omap2plus_defconfig: Enable omap3isp and MT9T111 sensor drivers

2011-09-20 Thread Tony Lindgren
* Laurent Pinchart laurent.pinch...@ideasonboard.com [110920 15:40]:
   CONFIG_REGULATOR_TPS65023=y
   CONFIG_REGULATOR_TPS6507X=y
  +CONFIG_MEDIA_SUPPORT=y
  +CONFIG_MEDIA_CONTROLLER=y
  +CONFIG_VIDEO_DEV=y
  +CONFIG_VIDEO_V4L2_COMMON=y
  +CONFIG_VIDEO_ALLOW_V4L1=y
  +CONFIG_VIDEO_V4L1_COMPAT=y
  +CONFIG_VIDEO_V4L2_SUBDEV_API=y
  +CONFIG_VIDEO_MEDIA=y
  +CONFIG_VIDEO_MT9T111=y
  +CONFIG_VIDEO_OMAP3=y
 
 Shouldn't they be compiled as modules instead ?

Yes, let's not apply this.

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 4/5] ispccdc: Configure CCDC_SYN_MODE register for UYVY8_2X8 and YUYV8_2X8 formats

2011-09-20 Thread Ravi, Deepthy
Hi Laurent,
 
 From: Laurent Pinchart [laurent.pinch...@ideasonboard.com]
 Sent: Wednesday, September 21, 2011 4:56 AM
 To: Ravi, Deepthy
 Cc: mche...@infradead.org; t...@atomide.com; Hiremath, Vaibhav;
 linux-me...@vger.kernel.org; li...@arm.linux.org.uk;
 linux-arm-ker...@lists.infradead.org; kyungmin.p...@samsung.com;
 hverk...@xs4all.nl; m.szyprow...@samsung.com; g.liakhovet...@gmx.de;
 Shilimkar, Santosh; khil...@deeprootsystems.com; david.woodho...@intel.com;
 a...@linux-foundation.org; linux-ker...@vger.kernel.org;
 linux-omap@vger.kernel.org; Sakari Ailus
 Subject: Re: [PATCH 4/5] ispccdc: Configure CCDC_SYN_MODE register for
 UYVY8_2X8 and YUYV8_2X8 formats

 Hi Deepthy,

 Thanks for the patch.

 On Tuesday 20 September 2011 16:56:51 Deepthy Ravi wrote:
 Configure INPMOD and PACK8 fileds of CCDC_SYN_MODE
 register for UYVY8_2X8 and YUYV8_2X8 formats.

 Signed-off-by: Deepthy Ravi deepthy.r...@ti.com
 ---
  drivers/media/video/omap3isp/ispccdc.c |   11 ---
  1 files changed, 8 insertions(+), 3 deletions(-)

 diff --git a/drivers/media/video/omap3isp/ispccdc.c
 b/drivers/media/video/omap3isp/ispccdc.c index 418ba65..1dcf180 100644
 --- a/drivers/media/video/omap3isp/ispccdc.c
 +++ b/drivers/media/video/omap3isp/ispccdc.c
 @@ -985,8 +985,12 @@ static void ccdc_config_sync_if(struct
 isp_ccdc_device
 *ccdc,

   syn_mode = ~ISPCCDC_SYN_MODE_INPMOD_MASK;
   if (format-code == V4L2_MBUS_FMT_YUYV8_2X8 ||
 - format-code == V4L2_MBUS_FMT_UYVY8_2X8)
 - syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
 + format-code == V4L2_MBUS_FMT_UYVY8_2X8){
 + if (pdata  pdata-bt656)
 + syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR8;
 + else
 + syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
 + }
   else if (format-code == V4L2_MBUS_FMT_YUYV8_1X16 ||
format-code == V4L2_MBUS_FMT_UYVY8_1X16)
   syn_mode |= ISPCCDC_SYN_MODE_INPMOD_YCBCR16;
 @@ -1172,7 +1176,8 @@ static void ccdc_configure(struct isp_ccdc_device
 *ccdc) syn_mode = ~ISPCCDC_SYN_MODE_SDR2RSZ;

   /* Use PACK8 mode for 1byte per pixel formats. */
 - if (omap3isp_video_format_info(format-code)-width = 8)
 + if ((omap3isp_video_format_info(format-code)-width = 8) 
 + (omap3isp_video_format_info(format-code)-bpp =
 8))

 I'm not sure to follow you. This will clear the PACK8 bit for the YUYV8_2X8
 formats. Those formats are 8 bits wide, shouldn't PACK8 be set to store
 samples on 8 bits instead of 16 bits ?

 Is this patch intended to support YUYV8_2X8 sensors in non BT.656 mode with
 the bridge enabled ? In that case, what would you think about setting the
 CCDC
 input format to YUYV8_1X16 instead ? This would better reflect the reality,
 as
 the bridge converts YUYV8_2X8 to YUYV8_1X16, and the CCDC is then fed with
 YUYV8_1X16.

[Deepthy Ravi] Yes this is intended for  YUYV8_2X8 sensors in non BT.656 with 8 
to 16 bit bridge enabled. So the data has to be stored as 16 bits per sample. 
Thats why PACK8 is cleared . I am not sure about using YUYV8_1X16. 

   syn_mode |= ISPCCDC_SYN_MODE_PACK8;
   else
   syn_mode = ~ISPCCDC_SYN_MODE_PACK8;

 --
 Regards,

 Laurent Pinchart



-- 
Thanks,
Deepthy Ravi

--
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