Re: [PATCH 0/5 v9] mfd: omap: usb: Runtime PM support for EHCI and OHCI drivers
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
-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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
* 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
* 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
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
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
* 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
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
* 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)
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
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
* 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
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