* [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation
@ 2011-01-07 11:25 Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 01/17] OMAP2420: hwmod data: add DSS DISPC RFBI VENC Sumit Semwal
` (17 more replies)
0 siblings, 18 replies; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap; +Cc: Sumit Semwal
v4 of the DSS hwmod patch series focusses on fixing the review comments. OMAP4
hwmod support will be posted after the acceptance of this basic change in
the dss2 design.
This patch series decouples the "Clocks for DSS in hwmod adaptation" changes
from this series. Another series would be posted which could be discussed
w.r.t clocks in DSS across omap2,3.
Removing the SYSCONFIG settings from DSS driver would also be part of these
clock changes series and not covered in this series as it depends on some of
the omap_hwmod framework changes w.r.t opt clocks handling.
Summary of the hwmod DSS design:
================================
DSS, DISPC, DSI, RFBI, VENC are made as platform drivers each
corresponding to the hwmod class in the hwmod database.
Each of these platform drivers' init / deinit are handled from core.c's
omap_dss_probe() in the exact sequence as required.
No Hardcoding of silicon data:
hwmod database abstracts the SOC data like base addr, irq numbers and are
implemented in this patch series.
Continue to have custom bus for display panels:
"omapdss" driver continues to be a platform driver that registers the custom
bus. It also continues to register the display panels(omap_dss_device) on the
board to the panel drivers (omap_dss_driver)
For Eg: primary lcd device would be registered with lcd panel driver.
lcd panel driver if it is on a parallel interface would use library functions
exported from dpi.o. if it is on a dsi interface would use library functions
exported from dsi platform driver(dsi.o).
Clocks:
Handling of clocks in DSS only is one of the design approaches, that does not
change the existing implementation. If each of the DSS HW IPs had to handle
their own clocks, then corresponding clock changes can be requested in the hwmod
database as well which is not the current design/implementation. As stated,
this would be handled in another series seperately.
For Eg: VENC would need 54MCLK which is termed as dss_opt clocks as of now apart
for the dss main clocks. Currently VENC driver needs to be aware of this and has to
use clk_get/put, clk_enable/disable, since VENC hwmod is not aware of 54MCLK.
Current dss driver:
-------------------
1. Omapdss platform driver
- initialises necessary Ips dss, dispc.
- also initialises Ips like sdi, dsi, venc, rfbi
- creates a custom bus and registers the display devices/drivers
connected on the board to the custom bus.
2. Suspend/resume of omapdss
- in turn sends suspend/resume calls for each of the display devices
registered to it.
Modified change:
---------------
Platform driver for each DSS HW IP in addition to the software "omapdss"
driver.
Omapdss platform driver
- initialises necessary h/w IPs' platform drivers [dss, dispc, dsi, venc, rfbi]
and software libraries like dpi, sdi.
- continues to have a custom bus and registers the display devices
and drivers connected on the board to the custom bus.
- continues to handle suspend/resume of the display devices registered
to the custom bus.
DSS platform driver
- initialises DSS IP alone
- Handles the clocks related to the DSS and other DSSHW IPs like RFBI,
DSI, VENC, DISPC. Previously this was a part of "omapdss" driver in core.c
- Continues to handle the DSS IRQs.
- No suspend/resume hooks.
DISPC platform driver
- initialises DISPC IP alone
- Gets the required clock from DSS platform driver.
- No suspend/resume hooks.
- Continues to provide DISPC library functions.
DSI platform driver
- initialises DSI IP alone
- Gets the required clock from DSS platform driver.
- No suspend/resume hooks.
- Continues to provide DSI library functions.
RFBI, VENC platform drivers
- initialises DSI,VENC IPs
- Gets the required clock from DSS platform driver.
- No suspend/resume hooks.
- Continues to provide RFBI and VENC library functions.
Testing:
---------
The patches are tested on 2420-n800, 2430sdp, 3630zoom, 3430sdp.
Complete bootup with penguins on panel is done on 3430sdp.
For the rest of the mentioned platforms, kernel is built with "OMAP2_DSS"
and bootup is tested so that base address and clk_get calls are successful.
DSS was built successfully as module, though not tested yet.
Changes since v4:
----------------
1) Following review comments incorporated:
* http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41970.html
Corrected the clocks to be enabled in omap_dss_probe.
Changes since v3:
----------------
1.) Following review comments incorporated:
* http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41705.html
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41683.html
Created a new display.c file for dss driver registration
related code.
* http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41573.html
Changed the oh_name/dev_name handling in hwmod usage.
* http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41753.html
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41718.html
removed device_initcall_sync(); init / deinit of each DSS h/w IP
platform drivers are done from omap_dss_probe() in sequence.
* http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41754.html
clock patches were cleaned up as per review comments.
* http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41756.html
printk() => dev_dbg change was separated out.
Changes since v2:
-------------------
1.) Following review comments incorporated:
Split the device/driver name change and registration patches logically.
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41205.html
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41204.html
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41203.html
Changes since v1:
------------------
1.) Dynamically register for OMAP2,3 specific DSS HW IPs in devices.c
2.) Following review comments incorporated:
Updation of all the board files on l-o dss2 branch as per
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg36915.html
Comments incorporated in devices.c and display.h as per
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg36919.html
Comments incorporated in dispc.c, dss.c, dsi.c, venc.c, rfbi.c
so that platform_device is just above platform_driver registrations as per
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg36963.html
3.) Squashed some of the patches to one patch.
Changes since RFC:
-------------------
1) All the platform driver registration except DSS, were within the file core.c.
Registeration of these driver got seperated to its own file.
2) Usage of regulators by different drivers are implemented.
For Eg: Regulator used by VENC is moved to venc driver. But vdda_dac would be
needed by DPI and DSI as well.
4) OMAP2420 and OMAP2430 hwmod database are generated in this v1.
5) Module support for omapdss driver can continue as the DSS HW IP specific platform
drivers are decoupled from omapdss driver.
6) Following review comments incorporated:
Changed the hwmod device name from "dss" to "dss_dss"
Changed name of core driver from "omapdss" to "omap_display" as it deals with panels.
Fixed comments on return values from platform_get_resource/irq functions.
Patch Base:
===========
url = git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git
branch "master"
Commit id: fa3b4e23ec20cfc944db7cc2b30b0d82c20e4472
Description: cbus: Fix retu_rtc_do_reset
----------------------------------------------------------------------------
Senthilvadivu Guruswamy (15):
OMAP2420: hwmod data: add DSS DISPC RFBI VENC
OMAP2430: hwmod data: add DSS DISPC RFBI VENC
OMAP3: hwmod data: add DSS DISPC RFBI DSI VENC
OMAP2,3 DSS2 Change driver name to omap_display
OMAP2,3 DSS2 Use Regulator init with driver name
OMAP2,3: DSS2: board files: replace platform_device_register with
omap_display_init()
OMAP2,3: DSS2: Build omap_device for each DSS HWIP
OMAP2,3: DSS2: DSS: create platform_driver, move init,exit to driver
OMAP2,3: DSS2: Move clocks from core driver to dss driver
OMAP2,3: DSS2: RFBI: create platform_driver, move init,exit to driver
OMAP2,3: DSS2: DISPC: create platform_driver, move init,exit to
driver
OMAP2,3: DSS2: VENC: create platform_driver, move init,exit to driver
OMAP2,3: DSS2: DSI: create platform_driver, move init,exit to driver
OMAP2,3: DSS2: Use platform device to get baseaddr
OMAP2,3: DSS2: Get DSS IRQ from platform device
Sumit Semwal (2):
OMAP2,3: DSS2: Create new file display.c for central dss driver
registration.
OMAP2,3: DSS2: replace printk with dev_dbg in init
arch/arm/mach-omap2/Makefile | 2 +
arch/arm/mach-omap2/board-3430sdp.c | 26 +--
arch/arm/mach-omap2/board-am3517evm.c | 16 +-
arch/arm/mach-omap2/board-cm-t35.c | 22 +-
arch/arm/mach-omap2/board-devkit8000.c | 14 +-
arch/arm/mach-omap2/board-igep0020.c | 16 +-
arch/arm/mach-omap2/board-omap3beagle.c | 14 +-
arch/arm/mach-omap2/board-omap3evm.c | 22 +-
arch/arm/mach-omap2/board-omap3pandora.c | 16 +-
arch/arm/mach-omap2/board-omap3stalker.c | 16 +-
arch/arm/mach-omap2/board-rx51-peripherals.c | 4 +-
arch/arm/mach-omap2/board-rx51-video.c | 15 +-
arch/arm/mach-omap2/clock2420_data.c | 8 +-
arch/arm/mach-omap2/clock2430_data.c | 8 +-
arch/arm/mach-omap2/clock3xxx_data.c | 14 +-
arch/arm/mach-omap2/display.c | 101 ++++++
arch/arm/mach-omap2/omap_hwmod_2420_data.c | 283 ++++++++++++++++
arch/arm/mach-omap2/omap_hwmod_2430_data.c | 282 ++++++++++++++++
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 339 +++++++++++++++++++
arch/arm/plat-omap/include/plat/display.h | 10 +
drivers/video/omap2/dss/core.c | 450 ++------------------------
drivers/video/omap2/dss/dispc.c | 114 ++++---
drivers/video/omap2/dss/dsi.c | 78 ++++-
drivers/video/omap2/dss/dss.c | 443 +++++++++++++++++++++++++-
drivers/video/omap2/dss/dss.h | 46 ++--
drivers/video/omap2/dss/rfbi.c | 118 ++++---
drivers/video/omap2/dss/venc.c | 125 +++++---
27 files changed, 1851 insertions(+), 751 deletions(-)
create mode 100644 arch/arm/mach-omap2/display.c
^ permalink raw reply [flat|nested] 37+ messages in thread
* [PATCH v5 01/17] OMAP2420: hwmod data: add DSS DISPC RFBI VENC
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-10 23:21 ` Paul Walmsley
2011-01-07 11:25 ` [PATCH v5 02/17] OMAP2430: " Sumit Semwal
` (16 subsequent siblings)
17 siblings, 1 reply; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy
From: Senthilvadivu Guruswamy <svadivu@ti.com>
Hwmod needs database of all IPs in a system. This patch generates the hwmod
database for OMAP2420 Display Sub System,. Since DSS is also considered as an
IP as DISPC, RFBI, name it as dss_dss.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Acked-by: Benoit Cousson <b-cousson@ti.com>
---
arch/arm/mach-omap2/omap_hwmod_2420_data.c | 283 ++++++++++++++++++++++++++++
1 files changed, 283 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
index b85c630..14ae4a8 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
@@ -38,6 +38,10 @@ static struct omap_hwmod omap2420_mpu_hwmod;
static struct omap_hwmod omap2420_iva_hwmod;
static struct omap_hwmod omap2420_l3_main_hwmod;
static struct omap_hwmod omap2420_l4_core_hwmod;
+static struct omap_hwmod omap2420_dss_dss_hwmod;
+static struct omap_hwmod omap2420_dss_dispc_hwmod;
+static struct omap_hwmod omap2420_dss_rfbi_hwmod;
+static struct omap_hwmod omap2420_dss_venc_hwmod;
static struct omap_hwmod omap2420_wd_timer2_hwmod;
static struct omap_hwmod omap2420_gpio1_hwmod;
static struct omap_hwmod omap2420_gpio2_hwmod;
@@ -64,6 +68,13 @@ static struct omap_hwmod_ocp_if *omap2420_l3_main_slaves[] = {
&omap2420_mpu__l3_main,
};
+/* DSS -> l3 */
+static struct omap_hwmod_ocp_if omap2420_dss__l3 = {
+ .master = &omap2420_dss_dss_hwmod,
+ .slave = &omap2420_l3_main_hwmod,
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
/* Master interfaces on the L3 interconnect */
static struct omap_hwmod_ocp_if *omap2420_l3_main_masters[] = {
&omap2420_l3_main__l4_core,
@@ -470,6 +481,272 @@ static struct omap_hwmod omap2420_uart3_hwmod = {
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
};
+/*
+ * 'dss' class
+ * display sub-system
+ */
+
+static struct omap_hwmod_class_sysconfig omap2420_dss_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap2420_dss_hwmod_class = {
+ .name = "dss",
+ .sysc = &omap2420_dss_sysc,
+};
+
+/* dss */
+static struct omap_hwmod_irq_info omap2420_dss_irqs[] = {
+ { .irq = 25 },
+};
+
+static struct omap_hwmod_dma_info omap2420_dss_sdma_chs[] = {
+ { .name = "dispc", .dma_req = 5 },
+};
+
+/* dss */
+/* dss master ports */
+static struct omap_hwmod_ocp_if *omap2420_dss_masters[] = {
+ &omap2420_dss__l3,
+};
+
+static struct omap_hwmod_addr_space omap2420_dss_addrs[] = {
+ {
+ .pa_start = 0x48050000,
+ .pa_end = 0x480503FF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss */
+static struct omap_hwmod_ocp_if omap2420_l4_core__dss = {
+ .master = &omap2420_l4_core_hwmod,
+ .slave = &omap2420_dss_dss_hwmod,
+ .clk = "dss_ick",
+ .addr = omap2420_dss_addrs,
+ .addr_cnt = ARRAY_SIZE(omap2420_dss_addrs),
+ .user = OCP_USER_MPU,
+};
+
+/* dss slave ports */
+static struct omap_hwmod_ocp_if *omap2420_dss_slaves[] = {
+ &omap2420_l4_core__dss,
+};
+
+static struct omap_hwmod_opt_clk dss_opt_clks[] = {
+ { .role = "tv_clk", .clk = "dss_54m_fck" },
+ { .role = "sys_clk", .clk = "dss2_fck" },
+};
+
+static struct omap_hwmod omap2420_dss_dss_hwmod = {
+ .name = "dss_dss",
+ .class = &omap2420_dss_hwmod_class,
+ .main_clk = "dss1_fck", /* instead of dss_fck */
+ .mpu_irqs = omap2420_dss_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap2420_dss_irqs),
+ .sdma_reqs = omap2420_dss_sdma_chs,
+ .sdma_reqs_cnt = ARRAY_SIZE(omap2420_dss_sdma_chs),
+
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_DSS1_SHIFT,
+ .module_offs = CORE_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
+ },
+ },
+ .opt_clks = dss_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
+ .slaves = omap2420_dss_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2420_dss_slaves),
+ .masters = omap2420_dss_masters,
+ .masters_cnt = ARRAY_SIZE(omap2420_dss_masters),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
+ .flags = HWMOD_NO_IDLEST,
+};
+
+/*
+ * 'dispc' class
+ * display controller
+ */
+
+static struct omap_hwmod_class_sysconfig omap2420_dispc_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
+ SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+ MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap2420_dispc_hwmod_class = {
+ .name = "dispc",
+ .sysc = &omap2420_dispc_sysc,
+};
+
+static struct omap_hwmod_addr_space omap2420_dss_dispc_addrs[] = {
+ {
+ .pa_start = 0x48050400,
+ .pa_end = 0x480507FF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss_dispc */
+static struct omap_hwmod_ocp_if omap2420_l4_core__dss_dispc = {
+ .master = &omap2420_l4_core_hwmod,
+ .slave = &omap2420_dss_dispc_hwmod,
+ .clk = "dss_ick",
+ .addr = omap2420_dss_dispc_addrs,
+ .addr_cnt = ARRAY_SIZE(omap2420_dss_dispc_addrs),
+ .user = OCP_USER_MPU,
+};
+
+/* dss_dispc slave ports */
+static struct omap_hwmod_ocp_if *omap2420_dss_dispc_slaves[] = {
+ &omap2420_l4_core__dss_dispc,
+};
+
+static struct omap_hwmod omap2420_dss_dispc_hwmod = {
+ .name = "dss_dispc",
+ .class = &omap2420_dispc_hwmod_class,
+ .main_clk = "dss1_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_DSS1_SHIFT,
+ .module_offs = CORE_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
+ },
+ },
+ .slaves = omap2420_dss_dispc_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2420_dss_dispc_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
+ .flags = HWMOD_NO_IDLEST,
+};
+
+/*
+ * 'rfbi' class
+ * remote frame buffer interface
+ */
+
+static struct omap_hwmod_class_sysconfig omap2420_rfbi_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
+ SYSC_HAS_AUTOIDLE),
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap2420_rfbi_hwmod_class = {
+ .name = "rfbi",
+ .sysc = &omap2420_rfbi_sysc,
+};
+
+static struct omap_hwmod_addr_space omap2420_dss_rfbi_addrs[] = {
+ {
+ .pa_start = 0x48050800,
+ .pa_end = 0x48050BFF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss_rfbi */
+static struct omap_hwmod_ocp_if omap2420_l4_core__dss_rfbi = {
+ .master = &omap2420_l4_core_hwmod,
+ .slave = &omap2420_dss_rfbi_hwmod,
+ .clk = "dss_ick",
+ .addr = omap2420_dss_rfbi_addrs,
+ .addr_cnt = ARRAY_SIZE(omap2420_dss_rfbi_addrs),
+ .user = OCP_USER_MPU,
+};
+
+/* dss_rfbi slave ports */
+static struct omap_hwmod_ocp_if *omap2420_dss_rfbi_slaves[] = {
+ &omap2420_l4_core__dss_rfbi,
+};
+
+static struct omap_hwmod omap2420_dss_rfbi_hwmod = {
+ .name = "dss_rfbi",
+ .class = &omap2420_rfbi_hwmod_class,
+ .main_clk = "dss1_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_DSS1_SHIFT,
+ .module_offs = CORE_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
+ },
+ },
+ .slaves = omap2420_dss_rfbi_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2420_dss_rfbi_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
+ .flags = HWMOD_NO_IDLEST,
+};
+
+/*
+ * 'venc' class
+ * video encoder
+ */
+
+static struct omap_hwmod_class omap2420_venc_hwmod_class = {
+ .name = "venc",
+};
+
+/* dss_venc */
+static struct omap_hwmod_addr_space omap2420_dss_venc_addrs[] = {
+ {
+ .pa_start = 0x48050C00,
+ .pa_end = 0x48050FFF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss_venc */
+static struct omap_hwmod_ocp_if omap2420_l4_core__dss_venc = {
+ .master = &omap2420_l4_core_hwmod,
+ .slave = &omap2420_dss_venc_hwmod,
+ .clk = "dss_54m_fck",
+ .addr = omap2420_dss_venc_addrs,
+ .addr_cnt = ARRAY_SIZE(omap2420_dss_venc_addrs),
+ .user = OCP_USER_MPU,
+};
+
+/* dss_venc slave ports */
+static struct omap_hwmod_ocp_if *omap2420_dss_venc_slaves[] = {
+ &omap2420_l4_core__dss_venc,
+};
+
+static struct omap_hwmod omap2420_dss_venc_hwmod = {
+ .name = "dss_venc",
+ .class = &omap2420_venc_hwmod_class,
+ .main_clk = "dss1_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_DSS1_SHIFT,
+ .module_offs = CORE_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
+ },
+ },
+ .slaves = omap2420_dss_venc_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2420_dss_venc_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
+ .flags = HWMOD_NO_IDLEST,
+};
+
/* I2C common */
static struct omap_hwmod_class_sysconfig i2c_sysc = {
.rev_offs = 0x00,
@@ -874,6 +1151,12 @@ static __initdata struct omap_hwmod *omap2420_hwmods[] = {
&omap2420_uart1_hwmod,
&omap2420_uart2_hwmod,
&omap2420_uart3_hwmod,
+ /* dss class */
+ &omap2420_dss_dss_hwmod,
+ &omap2420_dss_dispc_hwmod,
+ &omap2420_dss_rfbi_hwmod,
+ &omap2420_dss_venc_hwmod,
+ /* i2c class */
&omap2420_i2c1_hwmod,
&omap2420_i2c2_hwmod,
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 02/17] OMAP2430: hwmod data: add DSS DISPC RFBI VENC
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 01/17] OMAP2420: hwmod data: add DSS DISPC RFBI VENC Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-10 23:43 ` Paul Walmsley
2011-01-07 11:25 ` [PATCH v5 03/17] OMAP3: hwmod data: add DSS DISPC RFBI DSI VENC Sumit Semwal
` (15 subsequent siblings)
17 siblings, 1 reply; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy
From: Senthilvadivu Guruswamy <svadivu@ti.com>
Hwmod needs database of all IPs in a system. This patch generates the hwmod
database for OMAP2430 Display Sub System. Since DSS is also considered as an
IP as DISPC, RFBI, name it as dss_dss.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Acked-by: Benoit Cousson <b-cousson@ti.com>
---
arch/arm/mach-omap2/omap_hwmod_2430_data.c | 282 ++++++++++++++++++++++++++++
1 files changed, 282 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
index 8ecfbcd..b06eeea 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
@@ -38,6 +38,10 @@ static struct omap_hwmod omap2430_mpu_hwmod;
static struct omap_hwmod omap2430_iva_hwmod;
static struct omap_hwmod omap2430_l3_main_hwmod;
static struct omap_hwmod omap2430_l4_core_hwmod;
+static struct omap_hwmod omap2430_dss_dss_hwmod;
+static struct omap_hwmod omap2430_dss_dispc_hwmod;
+static struct omap_hwmod omap2430_dss_rfbi_hwmod;
+static struct omap_hwmod omap2430_dss_venc_hwmod;
static struct omap_hwmod omap2430_wd_timer2_hwmod;
static struct omap_hwmod omap2430_gpio1_hwmod;
static struct omap_hwmod omap2430_gpio2_hwmod;
@@ -65,6 +69,13 @@ static struct omap_hwmod_ocp_if *omap2430_l3_main_slaves[] = {
&omap2430_mpu__l3_main,
};
+/* DSS -> l3 */
+static struct omap_hwmod_ocp_if omap2430_dss__l3 = {
+ .master = &omap2430_dss_dss_hwmod,
+ .slave = &omap2430_l3_main_hwmod,
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
/* Master interfaces on the L3 interconnect */
static struct omap_hwmod_ocp_if *omap2430_l3_main_masters[] = {
&omap2430_l3_main__l4_core,
@@ -469,6 +480,271 @@ static struct omap_hwmod omap2430_uart3_hwmod = {
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
};
+/*
+ * 'dss' class
+ * display sub-system
+ */
+
+static struct omap_hwmod_class_sysconfig omap2430_dss_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap2430_dss_hwmod_class = {
+ .name = "dss",
+ .sysc = &omap2430_dss_sysc,
+};
+
+/* dss */
+static struct omap_hwmod_irq_info omap2430_dss_irqs[] = {
+ { .irq = 25 },
+};
+static struct omap_hwmod_dma_info omap2430_dss_sdma_chs[] = {
+ { .name = "dispc", .dma_req = 5 },
+};
+
+/* dss */
+/* dss master ports */
+static struct omap_hwmod_ocp_if *omap2430_dss_masters[] = {
+ &omap2430_dss__l3,
+};
+
+static struct omap_hwmod_addr_space omap2430_dss_addrs[] = {
+ {
+ .pa_start = 0x48050000,
+ .pa_end = 0x480503FF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss */
+static struct omap_hwmod_ocp_if omap2430_l4_core__dss = {
+ .master = &omap2430_l4_core_hwmod,
+ .slave = &omap2430_dss_dss_hwmod,
+ .clk = "dss_ick",
+ .addr = omap2430_dss_addrs,
+ .addr_cnt = ARRAY_SIZE(omap2430_dss_addrs),
+ .user = OCP_USER_MPU,
+};
+
+/* dss slave ports */
+static struct omap_hwmod_ocp_if *omap2430_dss_slaves[] = {
+ &omap2430_l4_core__dss,
+};
+
+static struct omap_hwmod_opt_clk dss_opt_clks[] = {
+ { .role = "tv_clk", .clk = "dss_54m_fck" },
+ { .role = "sys_clk", .clk = "dss2_fck" },
+};
+
+static struct omap_hwmod omap2430_dss_dss_hwmod = {
+ .name = "dss_dss",
+ .class = &omap2430_dss_hwmod_class,
+ .main_clk = "dss1_fck", /* instead of dss_fck */
+ .mpu_irqs = omap2430_dss_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap2430_dss_irqs),
+ .sdma_reqs = omap2430_dss_sdma_chs,
+ .sdma_reqs_cnt = ARRAY_SIZE(omap2430_dss_sdma_chs),
+
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_DSS1_SHIFT,
+ .module_offs = CORE_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
+ },
+ },
+ .opt_clks = dss_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
+ .slaves = omap2430_dss_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2430_dss_slaves),
+ .masters = omap2430_dss_masters,
+ .masters_cnt = ARRAY_SIZE(omap2430_dss_masters),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
+ .flags = HWMOD_NO_IDLEST,
+};
+
+/*
+ * 'dispc' class
+ * display controller
+ */
+
+static struct omap_hwmod_class_sysconfig omap2430_dispc_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
+ SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+ MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap2430_dispc_hwmod_class = {
+ .name = "dispc",
+ .sysc = &omap2430_dispc_sysc,
+};
+
+static struct omap_hwmod_addr_space omap2430_dss_dispc_addrs[] = {
+ {
+ .pa_start = 0x48050400,
+ .pa_end = 0x480507FF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss_dispc */
+static struct omap_hwmod_ocp_if omap2430_l4_core__dss_dispc = {
+ .master = &omap2430_l4_core_hwmod,
+ .slave = &omap2430_dss_dispc_hwmod,
+ .clk = "dss_ick",
+ .addr = omap2430_dss_dispc_addrs,
+ .addr_cnt = ARRAY_SIZE(omap2430_dss_dispc_addrs),
+ .user = OCP_USER_MPU,
+};
+
+/* dss_dispc slave ports */
+static struct omap_hwmod_ocp_if *omap2430_dss_dispc_slaves[] = {
+ &omap2430_l4_core__dss_dispc,
+};
+
+static struct omap_hwmod omap2430_dss_dispc_hwmod = {
+ .name = "dss_dispc",
+ .class = &omap2430_dispc_hwmod_class,
+ .main_clk = "dss1_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_DSS1_SHIFT,
+ .module_offs = CORE_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
+ },
+ },
+ .slaves = omap2430_dss_dispc_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2430_dss_dispc_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
+ .flags = HWMOD_NO_IDLEST,
+};
+
+/*
+ * 'rfbi' class
+ * remote frame buffer interface
+ */
+
+static struct omap_hwmod_class_sysconfig omap2430_rfbi_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
+ SYSC_HAS_AUTOIDLE),
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap2430_rfbi_hwmod_class = {
+ .name = "rfbi",
+ .sysc = &omap2430_rfbi_sysc,
+};
+
+static struct omap_hwmod_addr_space omap2430_dss_rfbi_addrs[] = {
+ {
+ .pa_start = 0x48050800,
+ .pa_end = 0x48050BFF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss_rfbi */
+static struct omap_hwmod_ocp_if omap2430_l4_core__dss_rfbi = {
+ .master = &omap2430_l4_core_hwmod,
+ .slave = &omap2430_dss_rfbi_hwmod,
+ .clk = "dss_ick",
+ .addr = omap2430_dss_rfbi_addrs,
+ .addr_cnt = ARRAY_SIZE(omap2430_dss_rfbi_addrs),
+ .user = OCP_USER_MPU,
+};
+
+/* dss_rfbi slave ports */
+static struct omap_hwmod_ocp_if *omap2430_dss_rfbi_slaves[] = {
+ &omap2430_l4_core__dss_rfbi,
+};
+
+static struct omap_hwmod omap2430_dss_rfbi_hwmod = {
+ .name = "dss_rfbi",
+ .class = &omap2430_rfbi_hwmod_class,
+ .main_clk = "dss1_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_DSS1_SHIFT,
+ .module_offs = CORE_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
+ },
+ },
+ .slaves = omap2430_dss_rfbi_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2430_dss_rfbi_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
+ .flags = HWMOD_NO_IDLEST,
+};
+
+/*
+ * 'venc' class
+ * video encoder
+ */
+
+static struct omap_hwmod_class omap2430_venc_hwmod_class = {
+ .name = "venc",
+};
+
+/* dss_venc */
+static struct omap_hwmod_addr_space omap2430_dss_venc_addrs[] = {
+ {
+ .pa_start = 0x48050C00,
+ .pa_end = 0x48050FFF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss_venc */
+static struct omap_hwmod_ocp_if omap2430_l4_core__dss_venc = {
+ .master = &omap2430_l4_core_hwmod,
+ .slave = &omap2430_dss_venc_hwmod,
+ .clk = "dss_54m_fck",
+ .addr = omap2430_dss_venc_addrs,
+ .addr_cnt = ARRAY_SIZE(omap2430_dss_venc_addrs),
+ .user = OCP_USER_MPU,
+};
+
+/* dss_venc slave ports */
+static struct omap_hwmod_ocp_if *omap2430_dss_venc_slaves[] = {
+ &omap2430_l4_core__dss_venc,
+};
+
+static struct omap_hwmod omap2430_dss_venc_hwmod = {
+ .name = "dss_venc",
+ .class = &omap2430_venc_hwmod_class,
+ .main_clk = "dss1_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_DSS1_SHIFT,
+ .module_offs = CORE_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
+ },
+ },
+ .slaves = omap2430_dss_venc_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2430_dss_venc_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
+ .flags = HWMOD_NO_IDLEST,
+};
+
/* I2C common */
static struct omap_hwmod_class_sysconfig i2c_sysc = {
.rev_offs = 0x00,
@@ -929,6 +1205,12 @@ static __initdata struct omap_hwmod *omap2430_hwmods[] = {
&omap2430_uart1_hwmod,
&omap2430_uart2_hwmod,
&omap2430_uart3_hwmod,
+ /* dss class */
+ &omap2430_dss_dss_hwmod,
+ &omap2430_dss_dispc_hwmod,
+ &omap2430_dss_rfbi_hwmod,
+ &omap2430_dss_venc_hwmod,
+ /* i2c class */
&omap2430_i2c1_hwmod,
&omap2430_i2c2_hwmod,
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 03/17] OMAP3: hwmod data: add DSS DISPC RFBI DSI VENC
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 01/17] OMAP2420: hwmod data: add DSS DISPC RFBI VENC Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 02/17] OMAP2430: " Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-10 22:51 ` Paul Walmsley
2011-01-07 11:25 ` [PATCH v5 04/17] OMAP2,3 DSS2 Change driver name to omap_display Sumit Semwal
` (14 subsequent siblings)
17 siblings, 1 reply; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy
From: Senthilvadivu Guruswamy <svadivu@ti.com>
Hwmod needs database of all IPs in a system. This patch generates the hwmod
database for Display Sub System applicable for OMAP3430-ES2 onwards and
OMAP36xx. DSS is also considered as an IP as DISPC, RFBI and named as dss_dss.
For all the IP modules in DSS, same clock is needed for enabling. Hwmod sees
DSS IPs as independent IPs, so same clock has to be repeated for .main_clk in
each IP.
OMAP3430ES1 do not have IDLEST bit to poll on for dss IP. So this hwmod is
not applicable for 3430ES1.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
---
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 339 ++++++++++++++++++++++++++++
1 files changed, 339 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 8d81813..5f5fbe8 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -44,6 +44,11 @@ static struct omap_hwmod omap3xxx_l3_main_hwmod;
static struct omap_hwmod omap3xxx_l4_core_hwmod;
static struct omap_hwmod omap3xxx_l4_per_hwmod;
static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
+static struct omap_hwmod omap3xxx_dss_dss_hwmod;
+static struct omap_hwmod omap3xxx_dss_dispc_hwmod;
+static struct omap_hwmod omap3xxx_dss_dsi1_hwmod;
+static struct omap_hwmod omap3xxx_dss_rfbi_hwmod;
+static struct omap_hwmod omap3xxx_dss_venc_hwmod;
static struct omap_hwmod omap3xxx_i2c1_hwmod;
static struct omap_hwmod omap3xxx_i2c2_hwmod;
static struct omap_hwmod omap3xxx_i2c3_hwmod;
@@ -84,6 +89,13 @@ static struct omap_hwmod_ocp_if *omap3xxx_l3_main_slaves[] = {
&omap3xxx_mpu__l3_main,
};
+/* DSS -> l3 */
+static struct omap_hwmod_ocp_if omap3xxx_dss__l3 = {
+ .master = &omap3xxx_dss_dss_hwmod,
+ .slave = &omap3xxx_l3_main_hwmod,
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
/* Master interfaces on the L3 interconnect */
static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = {
&omap3xxx_l3_main__l4_core,
@@ -664,6 +676,326 @@ static struct omap_hwmod_class i2c_class = {
.sysc = &i2c_sysc,
};
+/*
+ * 'dss' class
+ * display sub-system
+ */
+
+static struct omap_hwmod_class_sysconfig omap3xxx_dss_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap3xxx_dss_hwmod_class = {
+ .name = "dss",
+ .sysc = &omap3xxx_dss_sysc,
+};
+
+/* dss */
+static struct omap_hwmod_irq_info omap3xxx_dss_irqs[] = {
+ { .irq = 25 },
+};
+
+static struct omap_hwmod_dma_info omap3xxx_dss_sdma_chs[] = {
+ { .name = "dispc", .dma_req = 5 },
+ { .name = "dsi1", .dma_req = 74 },
+};
+
+/* dss */
+/* dss master ports */
+static struct omap_hwmod_ocp_if *omap3xxx_dss_masters[] = {
+ &omap3xxx_dss__l3,
+};
+
+static struct omap_hwmod_addr_space omap3xxx_dss_addrs[] = {
+ {
+ .pa_start = 0x48050000,
+ .pa_end = 0x480503FF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss */
+static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss = {
+ .master = &omap3xxx_l4_core_hwmod,
+ .slave = &omap3xxx_dss_dss_hwmod,
+ .clk = "dss_ick",
+ .addr = omap3xxx_dss_addrs,
+ .addr_cnt = ARRAY_SIZE(omap3xxx_dss_addrs),
+ .user = OCP_USER_MPU,
+};
+
+/* dss slave ports */
+static struct omap_hwmod_ocp_if *omap3xxx_dss_slaves[] = {
+ &omap3xxx_l4_core__dss,
+};
+
+static struct omap_hwmod_opt_clk dss_opt_clks[] = {
+ { .role = "tv_clk", .clk = "dss_tv_fck" },
+ { .role = "dssclk", .clk = "dss_96m_fck" },
+ { .role = "sys_clk", .clk = "dss2_alwon_fck" },
+};
+
+static struct omap_hwmod omap3xxx_dss_dss_hwmod = {
+ .name = "dss_dss",
+ .class = &omap3xxx_dss_hwmod_class,
+ .main_clk = "dss1_alwon_fck", /* instead of dss_fck */
+ .mpu_irqs = omap3xxx_dss_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dss_irqs),
+ .sdma_reqs = omap3xxx_dss_sdma_chs,
+ .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_dss_sdma_chs),
+
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP3430_EN_DSS1_SHIFT,
+ .module_offs = OMAP3430_DSS_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
+ },
+ },
+ .opt_clks = dss_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
+ .slaves = omap3xxx_dss_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_slaves),
+ .masters = omap3xxx_dss_masters,
+ .masters_cnt = ARRAY_SIZE(omap3xxx_dss_masters),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
+ CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
+};
+
+/*
+ * 'dispc' class
+ * display controller
+ */
+
+static struct omap_hwmod_class_sysconfig omap3xxx_dispc_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
+ SYSC_HAS_MIDLEMODE | SYSC_HAS_ENAWAKEUP |
+ SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
+ MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap3xxx_dispc_hwmod_class = {
+ .name = "dispc",
+ .sysc = &omap3xxx_dispc_sysc,
+};
+
+static struct omap_hwmod_addr_space omap3xxx_dss_dispc_addrs[] = {
+ {
+ .pa_start = 0x48050400,
+ .pa_end = 0x480507FF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss_dispc */
+static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dispc = {
+ .master = &omap3xxx_l4_core_hwmod,
+ .slave = &omap3xxx_dss_dispc_hwmod,
+ .clk = "dss_ick",
+ .addr = omap3xxx_dss_dispc_addrs,
+ .addr_cnt = ARRAY_SIZE(omap3xxx_dss_dispc_addrs),
+ .user = OCP_USER_MPU,
+};
+
+/* dss_dispc slave ports */
+static struct omap_hwmod_ocp_if *omap3xxx_dss_dispc_slaves[] = {
+ &omap3xxx_l4_core__dss_dispc,
+};
+
+static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
+ .name = "dss_dispc",
+ .class = &omap3xxx_dispc_hwmod_class,
+ .main_clk = "dss1_alwon_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP3430_EN_DSS1_SHIFT,
+ .module_offs = OMAP3430_DSS_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
+ },
+ },
+ .slaves = omap3xxx_dss_dispc_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_dispc_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
+ CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
+};
+
+/*
+ * 'dsi' class
+ * display serial interface controller
+ */
+
+static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
+ .name = "dsi",
+};
+
+/* dss_dsi1 */
+static struct omap_hwmod_addr_space omap3xxx_dss_dsi1_addrs[] = {
+ {
+ .pa_start = 0x4804FC00,
+ .pa_end = 0x4804FFFF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss_dsi1 */
+static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dsi1 = {
+ .master = &omap3xxx_l4_core_hwmod,
+ .slave = &omap3xxx_dss_dsi1_hwmod,
+ .addr = omap3xxx_dss_dsi1_addrs,
+ .addr_cnt = ARRAY_SIZE(omap3xxx_dss_dsi1_addrs),
+ .user = OCP_USER_MPU,
+};
+
+
+/* dss_dsi1 slave ports */
+static struct omap_hwmod_ocp_if *omap3xxx_dss_dsi1_slaves[] = {
+ &omap3xxx_l4_core__dss_dsi1,
+};
+
+static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = {
+ .name = "dss_dsi1",
+ .class = &omap3xxx_dsi_hwmod_class,
+ .main_clk = "dss1_alwon_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP3430_EN_DSS1_SHIFT,
+ .module_offs = OMAP3430_DSS_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
+ },
+ },
+ .slaves = omap3xxx_dss_dsi1_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_dsi1_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
+ CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
+};
+/*
+ * 'rfbi' class
+ * remote frame buffer interface
+ */
+
+static struct omap_hwmod_class_sysconfig omap3xxx_rfbi_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
+ SYSC_HAS_AUTOIDLE),
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap3xxx_rfbi_hwmod_class = {
+ .name = "rfbi",
+ .sysc = &omap3xxx_rfbi_sysc,
+};
+
+static struct omap_hwmod_addr_space omap3xxx_dss_rfbi_addrs[] = {
+ {
+ .pa_start = 0x48050800,
+ .pa_end = 0x48050BFF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss_rfbi */
+static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_rfbi = {
+ .master = &omap3xxx_l4_core_hwmod,
+ .slave = &omap3xxx_dss_rfbi_hwmod,
+ .clk = "dss_ick",
+ .addr = omap3xxx_dss_rfbi_addrs,
+ .addr_cnt = ARRAY_SIZE(omap3xxx_dss_rfbi_addrs),
+ .user = OCP_USER_MPU,
+};
+
+/* dss_rfbi slave ports */
+static struct omap_hwmod_ocp_if *omap3xxx_dss_rfbi_slaves[] = {
+ &omap3xxx_l4_core__dss_rfbi,
+};
+
+static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = {
+ .name = "dss_rfbi",
+ .class = &omap3xxx_rfbi_hwmod_class,
+ .main_clk = "dss1_alwon_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP3430_EN_DSS1_SHIFT,
+ .module_offs = OMAP3430_DSS_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
+ },
+ },
+ .slaves = omap3xxx_dss_rfbi_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_rfbi_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
+ CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
+};
+
+/*
+ * 'venc' class
+ * video encoder
+ */
+
+static struct omap_hwmod_class omap3xxx_venc_hwmod_class = {
+ .name = "venc",
+};
+
+/* dss_venc */
+static struct omap_hwmod_addr_space omap3xxx_dss_venc_addrs[] = {
+ {
+ .pa_start = 0x48050C00,
+ .pa_end = 0x48050FFF,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_core -> dss_venc */
+static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
+ .master = &omap3xxx_l4_core_hwmod,
+ .slave = &omap3xxx_dss_venc_hwmod,
+ .clk = "dss_tv_fck",
+ .addr = omap3xxx_dss_venc_addrs,
+ .addr_cnt = ARRAY_SIZE(omap3xxx_dss_venc_addrs),
+ .user = OCP_USER_MPU,
+};
+
+/* dss_venc slave ports */
+static struct omap_hwmod_ocp_if *omap3xxx_dss_venc_slaves[] = {
+ &omap3xxx_l4_core__dss_venc,
+};
+
+static struct omap_hwmod omap3xxx_dss_venc_hwmod = {
+ .name = "dss_venc",
+ .class = &omap3xxx_venc_hwmod_class,
+ .main_clk = "dss1_alwon_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP3430_EN_DSS1_SHIFT,
+ .module_offs = OMAP3430_DSS_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
+ },
+ },
+ .slaves = omap3xxx_dss_venc_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_venc_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
+ CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
+};
+
/* I2C1 */
static struct omap_i2c_dev_attr i2c1_dev_attr = {
@@ -1368,6 +1700,13 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
&omap3xxx_uart2_hwmod,
&omap3xxx_uart3_hwmod,
&omap3xxx_uart4_hwmod,
+ /* dss class */
+ &omap3xxx_dss_dss_hwmod,
+ &omap3xxx_dss_dispc_hwmod,
+ &omap3xxx_dss_dsi1_hwmod,
+ &omap3xxx_dss_rfbi_hwmod,
+ &omap3xxx_dss_venc_hwmod,
+ /* i2c class */
&omap3xxx_i2c1_hwmod,
&omap3xxx_i2c2_hwmod,
&omap3xxx_i2c3_hwmod,
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 04/17] OMAP2,3 DSS2 Change driver name to omap_display
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (2 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 03/17] OMAP3: hwmod data: add DSS DISPC RFBI DSI VENC Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-10 23:55 ` Paul Walmsley
2011-01-07 11:25 ` [PATCH v5 05/17] OMAP2,3 DSS2 Use Regulator init with driver name Sumit Semwal
` (13 subsequent siblings)
17 siblings, 1 reply; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy
From: Senthilvadivu Guruswamy <svadivu@ti.com>
Change the driver name from omapdss to omap_display as the driver takes care of
the display devices ie number of panels, type of panels available in the
platform. Change the device name in the board files and 2420,2430,3xxx clock
files from omapdss to omap_display to match the driver name.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
---
arch/arm/mach-omap2/board-3430sdp.c | 2 +-
arch/arm/mach-omap2/board-am3517evm.c | 2 +-
arch/arm/mach-omap2/board-cm-t35.c | 2 +-
arch/arm/mach-omap2/board-devkit8000.c | 6 +++---
arch/arm/mach-omap2/board-igep0020.c | 2 +-
arch/arm/mach-omap2/board-omap3beagle.c | 6 +++---
arch/arm/mach-omap2/board-omap3evm.c | 4 ++--
arch/arm/mach-omap2/board-omap3pandora.c | 8 ++++----
arch/arm/mach-omap2/board-omap3stalker.c | 2 +-
arch/arm/mach-omap2/board-rx51-peripherals.c | 4 ++--
arch/arm/mach-omap2/board-rx51-video.c | 2 +-
arch/arm/mach-omap2/clock2420_data.c | 8 ++++----
arch/arm/mach-omap2/clock2430_data.c | 8 ++++----
arch/arm/mach-omap2/clock3xxx_data.c | 14 +++++++-------
drivers/video/omap2/dss/core.c | 2 +-
15 files changed, 36 insertions(+), 36 deletions(-)
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index 3b39ef1..10a399e 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -302,7 +302,7 @@ static struct omap_dss_board_info sdp3430_dss_data = {
};
static struct platform_device sdp3430_dss_device = {
- .name = "omapdss",
+ .name = "omap_display",
.id = -1,
.dev = {
.platform_data = &sdp3430_dss_data,
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c
index bc15626..2b37dcf 100644
--- a/arch/arm/mach-omap2/board-am3517evm.c
+++ b/arch/arm/mach-omap2/board-am3517evm.c
@@ -368,7 +368,7 @@ static struct omap_dss_board_info am3517_evm_dss_data = {
};
static struct platform_device am3517_evm_dss_device = {
- .name = "omapdss",
+ .name = "omap_display",
.id = -1,
.dev = {
.platform_data = &am3517_evm_dss_data,
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
index 486a3de..f0293a3 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -391,7 +391,7 @@ static struct omap_dss_board_info cm_t35_dss_data = {
};
static struct platform_device cm_t35_dss_device = {
- .name = "omapdss",
+ .name = "omap_display",
.id = -1,
.dev = {
.platform_data = &cm_t35_dss_data,
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
index 451e7ff..f948435 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -189,7 +189,7 @@ static struct omap_dss_board_info devkit8000_dss_data = {
};
static struct platform_device devkit8000_dss_device = {
- .name = "omapdss",
+ .name = "omap_display",
.id = -1,
.dev = {
.platform_data = &devkit8000_dss_data,
@@ -197,7 +197,7 @@ static struct platform_device devkit8000_dss_device = {
};
static struct regulator_consumer_supply devkit8000_vdda_dac_supply =
- REGULATOR_SUPPLY("vdda_dac", "omapdss");
+ REGULATOR_SUPPLY("vdda_dac", "omap_display");
static uint32_t board_keymap[] = {
KEY(0, 0, KEY_1),
@@ -272,7 +272,7 @@ static struct twl4030_gpio_platform_data devkit8000_gpio_data = {
};
static struct regulator_consumer_supply devkit8000_vpll1_supply =
- REGULATOR_SUPPLY("vdds_dsi", "omapdss");
+ REGULATOR_SUPPLY("vdds_dsi", "omap_display");
/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
static struct regulator_init_data devkit8000_vmmc1 = {
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index 0afa301..46985eb 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -479,7 +479,7 @@ static struct omap_dss_board_info igep2_dss_data = {
};
static struct platform_device igep2_dss_device = {
- .name = "omapdss",
+ .name = "omap_display",
.id = -1,
.dev = {
.platform_data = &igep2_dss_data,
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index 6c12760..ebfddb8 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -223,7 +223,7 @@ static struct omap_dss_board_info beagle_dss_data = {
};
static struct platform_device beagle_dss_device = {
- .name = "omapdss",
+ .name = "omap_display",
.id = -1,
.dev = {
.platform_data = &beagle_dss_data,
@@ -231,10 +231,10 @@ static struct platform_device beagle_dss_device = {
};
static struct regulator_consumer_supply beagle_vdac_supply =
- REGULATOR_SUPPLY("vdda_dac", "omapdss");
+ REGULATOR_SUPPLY("vdda_dac", "omap_display");
static struct regulator_consumer_supply beagle_vdvi_supply =
- REGULATOR_SUPPLY("vdds_dsi", "omapdss");
+ REGULATOR_SUPPLY("vdds_dsi", "omap_display");
static void __init beagle_display_init(void)
{
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index 3de8d9b..2851984 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -323,7 +323,7 @@ static struct omap_dss_board_info omap3_evm_dss_data = {
};
static struct platform_device omap3_evm_dss_device = {
- .name = "omapdss",
+ .name = "omap_display",
.id = -1,
.dev = {
.platform_data = &omap3_evm_dss_data,
@@ -516,7 +516,7 @@ static struct regulator_init_data omap3_evm_vdac = {
/* VPLL2 for digital video outputs */
static struct regulator_consumer_supply omap3_evm_vpll2_supply =
- REGULATOR_SUPPLY("vdds_dsi", "omapdss");
+ REGULATOR_SUPPLY("vdds_dsi", "omap_display");
static struct regulator_init_data omap3_evm_vpll2 = {
.constraints = {
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
index d457b59..5d69320 100644
--- a/arch/arm/mach-omap2/board-omap3pandora.c
+++ b/arch/arm/mach-omap2/board-omap3pandora.c
@@ -254,7 +254,7 @@ static struct omap_dss_board_info pandora_dss_data = {
};
static struct platform_device pandora_dss_device = {
- .name = "omapdss",
+ .name = "omap_display",
.id = -1,
.dev = {
.platform_data = &pandora_dss_data,
@@ -350,11 +350,11 @@ static struct regulator_consumer_supply pandora_vmmc3_supply =
REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.2");
static struct regulator_consumer_supply pandora_vdda_dac_supply =
- REGULATOR_SUPPLY("vdda_dac", "omapdss");
+ REGULATOR_SUPPLY("vdda_dac", "omap_display");
static struct regulator_consumer_supply pandora_vdds_supplies[] = {
- REGULATOR_SUPPLY("vdds_sdi", "omapdss"),
- REGULATOR_SUPPLY("vdds_dsi", "omapdss"),
+ REGULATOR_SUPPLY("vdds_sdi", "omap_display"),
+ REGULATOR_SUPPLY("vdds_dsi", "omap_display"),
};
static struct regulator_consumer_supply pandora_vcc_lcd_supply =
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
index 9df9d93..7f080d6 100644
--- a/arch/arm/mach-omap2/board-omap3stalker.c
+++ b/arch/arm/mach-omap2/board-omap3stalker.c
@@ -230,7 +230,7 @@ static struct omap_dss_board_info omap3_stalker_dss_data = {
};
static struct platform_device omap3_stalker_dss_device = {
- .name = "omapdss",
+ .name = "omap_display",
.id = -1,
.dev = {
.platform_data = &omap3_stalker_dss_data,
diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c b/arch/arm/mach-omap2/board-rx51-peripherals.c
index e75e240..7aedafd 100644
--- a/arch/arm/mach-omap2/board-rx51-peripherals.c
+++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
@@ -360,11 +360,11 @@ static struct regulator_consumer_supply rx51_vio_supplies[] = {
};
static struct regulator_consumer_supply rx51_vaux1_consumers[] = {
- REGULATOR_SUPPLY("vdds_sdi", "omapdss"),
+ REGULATOR_SUPPLY("vdds_sdi", "omap_display"),
};
static struct regulator_consumer_supply rx51_vdac_supply[] = {
- REGULATOR_SUPPLY("vdda_dac", "omapdss"),
+ REGULATOR_SUPPLY("vdda_dac", "omap_display"),
};
static struct regulator_init_data rx51_vaux1 = {
diff --git a/arch/arm/mach-omap2/board-rx51-video.c b/arch/arm/mach-omap2/board-rx51-video.c
index acd6700..8140d05 100644
--- a/arch/arm/mach-omap2/board-rx51-video.c
+++ b/arch/arm/mach-omap2/board-rx51-video.c
@@ -67,7 +67,7 @@ static struct omap_dss_board_info rx51_dss_board_info = {
};
struct platform_device rx51_display_device = {
- .name = "omapdss",
+ .name = "omap_display",
.id = -1,
.dev = {
.platform_data = &rx51_dss_board_info,
diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c
index ed1295f..a220820 100644
--- a/arch/arm/mach-omap2/clock2420_data.c
+++ b/arch/arm/mach-omap2/clock2420_data.c
@@ -1786,10 +1786,10 @@ static struct omap_clk omap2420_clks[] = {
CLK(NULL, "gfx_2d_fck", &gfx_2d_fck, CK_242X),
CLK(NULL, "gfx_ick", &gfx_ick, CK_242X),
/* DSS domain clocks */
- CLK("omapdss", "ick", &dss_ick, CK_242X),
- CLK("omapdss", "dss1_fck", &dss1_fck, CK_242X),
- CLK("omapdss", "dss2_fck", &dss2_fck, CK_242X),
- CLK("omapdss", "tv_fck", &dss_54m_fck, CK_242X),
+ CLK("omap_display", "ick", &dss_ick, CK_242X),
+ CLK("omap_display", "dss1_fck", &dss1_fck, CK_242X),
+ CLK("omap_display", "dss2_fck", &dss2_fck, CK_242X),
+ CLK("omap_display", "tv_fck", &dss_54m_fck, CK_242X),
/* L3 domain clocks */
CLK(NULL, "core_l3_ck", &core_l3_ck, CK_242X),
CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_242X),
diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c
index 38341a7..78f7712 100644
--- a/arch/arm/mach-omap2/clock2430_data.c
+++ b/arch/arm/mach-omap2/clock2430_data.c
@@ -1890,10 +1890,10 @@ static struct omap_clk omap2430_clks[] = {
CLK(NULL, "mdm_ick", &mdm_ick, CK_243X),
CLK(NULL, "mdm_osc_ck", &mdm_osc_ck, CK_243X),
/* DSS domain clocks */
- CLK("omapdss", "ick", &dss_ick, CK_243X),
- CLK("omapdss", "dss1_fck", &dss1_fck, CK_243X),
- CLK("omapdss", "dss2_fck", &dss2_fck, CK_243X),
- CLK("omapdss", "tv_fck", &dss_54m_fck, CK_243X),
+ CLK("omap_display", "ick", &dss_ick, CK_243X),
+ CLK("omap_display", "dss1_fck", &dss1_fck, CK_243X),
+ CLK("omap_display", "dss2_fck", &dss2_fck, CK_243X),
+ CLK("omap_display", "tv_fck", &dss_54m_fck, CK_243X),
/* L3 domain clocks */
CLK(NULL, "core_l3_ck", &core_l3_ck, CK_243X),
CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_243X),
diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c
index 9ab817e..8c9e4c4 100644
--- a/arch/arm/mach-omap2/clock3xxx_data.c
+++ b/arch/arm/mach-omap2/clock3xxx_data.c
@@ -3355,13 +3355,13 @@ static struct omap_clk omap3xxx_clks[] = {
CLK("omap_rng", "ick", &rng_ick, CK_34XX | CK_36XX),
CLK(NULL, "sha11_ick", &sha11_ick, CK_34XX | CK_36XX),
CLK(NULL, "des1_ick", &des1_ick, CK_34XX | CK_36XX),
- CLK("omapdss", "dss1_fck", &dss1_alwon_fck_3430es1, CK_3430ES1),
- CLK("omapdss", "dss1_fck", &dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
- CLK("omapdss", "tv_fck", &dss_tv_fck, CK_3XXX),
- CLK("omapdss", "video_fck", &dss_96m_fck, CK_3XXX),
- CLK("omapdss", "dss2_fck", &dss2_alwon_fck, CK_3XXX),
- CLK("omapdss", "ick", &dss_ick_3430es1, CK_3430ES1),
- CLK("omapdss", "ick", &dss_ick_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
+ CLK("omap_display", "dss1_fck", &dss1_alwon_fck_3430es1, CK_3430ES1),
+ CLK("omap_display", "dss1_fck", &dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
+ CLK("omap_display", "tv_fck", &dss_tv_fck, CK_3XXX),
+ CLK("omap_display", "video_fck", &dss_96m_fck, CK_3XXX),
+ CLK("omap_display", "dss2_fck", &dss2_alwon_fck, CK_3XXX),
+ CLK("omap_display", "ick", &dss_ick_3430es1, CK_3430ES1),
+ CLK("omap_display", "ick", &dss_ick_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK(NULL, "cam_mclk", &cam_mclk, CK_34XX | CK_36XX),
CLK(NULL, "cam_ick", &cam_ick, CK_34XX | CK_36XX),
CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_34XX | CK_36XX),
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 8e89f60..48d20d8 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -715,7 +715,7 @@ static struct platform_driver omap_dss_driver = {
.suspend = omap_dss_suspend,
.resume = omap_dss_resume,
.driver = {
- .name = "omapdss",
+ .name = "omap_display",
.owner = THIS_MODULE,
},
};
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 05/17] OMAP2,3 DSS2 Use Regulator init with driver name
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (3 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 04/17] OMAP2,3 DSS2 Change driver name to omap_display Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 06/17] OMAP2,3: DSS2: Create new file display.c for central dss driver registration Sumit Semwal
` (12 subsequent siblings)
17 siblings, 0 replies; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy
From: Senthilvadivu Guruswamy <svadivu@ti.com>
Use driver name in regulator inits needed for display instead of using device
structure name.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
---
arch/arm/mach-omap2/board-3430sdp.c | 11 +++--------
arch/arm/mach-omap2/board-cm-t35.c | 12 ++++--------
arch/arm/mach-omap2/board-igep0020.c | 6 ++----
arch/arm/mach-omap2/board-omap3evm.c | 6 ++----
arch/arm/mach-omap2/board-omap3stalker.c | 6 ++----
5 files changed, 13 insertions(+), 28 deletions(-)
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index 10a399e..29e56a2 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -309,10 +309,8 @@ static struct platform_device sdp3430_dss_device = {
},
};
-static struct regulator_consumer_supply sdp3430_vdda_dac_supply = {
- .supply = "vdda_dac",
- .dev = &sdp3430_dss_device.dev,
-};
+static struct regulator_consumer_supply sdp3430_vdda_dac_supply =
+ REGULATOR_SUPPLY("vdda_dac", "omap_display");
static struct platform_device *sdp3430_devices[] __initdata = {
&sdp3430_dss_device,
@@ -540,10 +538,7 @@ static struct regulator_init_data sdp3430_vdac = {
/* VPLL2 for digital video outputs */
static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
- {
- .supply = "vdds_dsi",
- .dev = &sdp3430_dss_device.dev,
- }
+ REGULATOR_SUPPLY("vdds_dsi", "omap_display"),
};
static struct regulator_init_data sdp3430_vpll2 = {
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
index f0293a3..307e93a 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -484,15 +484,11 @@ static struct regulator_consumer_supply cm_t35_vsim_supply = {
.supply = "vmmc_aux",
};
-static struct regulator_consumer_supply cm_t35_vdac_supply = {
- .supply = "vdda_dac",
- .dev = &cm_t35_dss_device.dev,
-};
+static struct regulator_consumer_supply cm_t35_vdac_supply =
+ REGULATOR_SUPPLY("vdda_dac", "omap_display");
-static struct regulator_consumer_supply cm_t35_vdvi_supply = {
- .supply = "vdvi",
- .dev = &cm_t35_dss_device.dev,
-};
+static struct regulator_consumer_supply cm_t35_vdvi_supply =
+ REGULATOR_SUPPLY("vdvi", "omap_display");
/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
static struct regulator_init_data cm_t35_vmmc1 = {
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index 46985eb..3b8b0d0 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -486,10 +486,8 @@ static struct platform_device igep2_dss_device = {
},
};
-static struct regulator_consumer_supply igep2_vpll2_supply = {
- .supply = "vdds_dsi",
- .dev = &igep2_dss_device.dev,
-};
+static struct regulator_consumer_supply igep2_vpll2_supply =
+ REGULATOR_SUPPLY("vdds_dsi", "omap_display");
static struct regulator_init_data igep2_vpll2 = {
.constraints = {
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index 2851984..8f9dece 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -494,10 +494,8 @@ static struct twl4030_codec_data omap3evm_codec_data = {
.audio = &omap3evm_audio_data,
};
-static struct regulator_consumer_supply omap3_evm_vdda_dac_supply = {
- .supply = "vdda_dac",
- .dev = &omap3_evm_dss_device.dev,
-};
+static struct regulator_consumer_supply omap3_evm_vdda_dac_supply =
+ REGULATOR_SUPPLY("vdda_dac", "omap_display");
/* VDAC for DSS driving S-Video */
static struct regulator_init_data omap3_evm_vdac = {
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
index 7f080d6..085ec27 100644
--- a/arch/arm/mach-omap2/board-omap3stalker.c
+++ b/arch/arm/mach-omap2/board-omap3stalker.c
@@ -437,10 +437,8 @@ static struct twl4030_codec_data omap3stalker_codec_data = {
.audio = &omap3stalker_audio_data,
};
-static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply = {
- .supply = "vdda_dac",
- .dev = &omap3_stalker_dss_device.dev,
-};
+static struct regulator_consumer_supply omap3_stalker_vdda_dac_supply =
+ REGULATOR_SUPPLY("vdda_dac", "omap_display");
/* VDAC for DSS driving S-Video */
static struct regulator_init_data omap3_stalker_vdac = {
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 06/17] OMAP2,3: DSS2: Create new file display.c for central dss driver registration.
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (4 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 05/17] OMAP2,3 DSS2 Use Regulator init with driver name Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-07 14:03 ` Tomi Valkeinen
2011-01-07 21:26 ` Kevin Hilman
2011-01-07 11:25 ` [PATCH v5 07/17] OMAP2,3: DSS2: board files: replace platform_device_register with omap_display_init() Sumit Semwal
` (11 subsequent siblings)
17 siblings, 2 replies; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Sumit Semwal, Senthilvadivu Guruswamy
A new file display.c is introduced for display driver init, which adds a function
omap_display_init to do the DSS driver registration. This is the first step in moving
away registration of DSS from board files into a common place.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
---
arch/arm/mach-omap2/Makefile | 2 +
arch/arm/mach-omap2/display.c | 57 +++++++++++++++++++++++++++++
arch/arm/plat-omap/include/plat/display.h | 4 ++
3 files changed, 63 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/mach-omap2/display.c
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index 4ab82f6..57b89e6 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -237,3 +237,5 @@ obj-y += $(smc91x-m) $(smc91x-y)
smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o
obj-y += $(smsc911x-m) $(smsc911x-y)
+
+obj-y += display.o
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
new file mode 100644
index 0000000..26d3feb
--- /dev/null
+++ b/arch/arm/mach-omap2/display.c
@@ -0,0 +1,57 @@
+/*
+ * OMAP2plus display device setup / initialization.
+ *
+ * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
+ * Senthilvadivu Guruswamy
+ * Sumit Semwal
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/io.h>
+#include <linux/clk.h>
+#include <linux/err.h>
+
+#include <plat/display.h>
+#include <plat/omap_hwmod.h>
+#include <plat/omap_device.h>
+
+#ifdef CONFIG_OMAP2_DSS
+
+static struct platform_device omap_display_device = {
+ .name = "omap_display",
+ .id = -1,
+ .dev = {
+ .platform_data = NULL,
+ },
+};
+
+int __init omap_display_init(struct omap_dss_board_info
+ *board_data)
+{
+ int r = 0;
+ omap_display_device.dev.platform_data = board_data;
+
+ r = platform_device_register(&omap_display_device);
+ if (r < 0)
+ printk(KERN_ERR "Unable to register OMAP-Display device\n");
+
+ return r;
+}
+
+#else
+int __init omap_display_init(struct omap_dss_board_info *board_data)
+{
+ return 0;
+}
+#endif
diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h
index c915a66..871bbae 100644
--- a/arch/arm/plat-omap/include/plat/display.h
+++ b/arch/arm/plat-omap/include/plat/display.h
@@ -23,6 +23,7 @@
#include <linux/list.h>
#include <linux/kobject.h>
#include <linux/device.h>
+#include <linux/platform_device.h>
#include <asm/atomic.h>
#define DISPC_IRQ_FRAMEDONE (1 << 0)
@@ -220,6 +221,9 @@ struct omap_dss_board_info {
struct omap_dss_device *default_device;
};
+/* Init with the board info */
+extern int omap_display_init(struct omap_dss_board_info *board_data);
+
struct omap_video_timings {
/* Unit: pixels */
u16 x_res;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 07/17] OMAP2,3: DSS2: board files: replace platform_device_register with omap_display_init()
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (5 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 06/17] OMAP2,3: DSS2: Create new file display.c for central dss driver registration Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 08/17] OMAP2,3: DSS2: Build omap_device for each DSS HWIP Sumit Semwal
` (10 subsequent siblings)
17 siblings, 0 replies; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy, Sumit Semwal
From: Senthilvadivu Guruswamy <svadivu@ti.com>
This patch updated board files to replace platform_device_register or
platform_add_devices of DSS with omap_display_init(). This moves away
registration of DSS from board files into a common place.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
---
arch/arm/mach-omap2/board-3430sdp.c | 14 +-------------
arch/arm/mach-omap2/board-am3517evm.c | 16 +---------------
arch/arm/mach-omap2/board-cm-t35.c | 10 +---------
arch/arm/mach-omap2/board-devkit8000.c | 10 +---------
arch/arm/mach-omap2/board-igep0020.c | 10 +---------
arch/arm/mach-omap2/board-omap3beagle.c | 10 +---------
arch/arm/mach-omap2/board-omap3evm.c | 14 +-------------
arch/arm/mach-omap2/board-omap3pandora.c | 10 +---------
arch/arm/mach-omap2/board-omap3stalker.c | 10 +---------
arch/arm/mach-omap2/board-rx51-video.c | 15 +--------------
10 files changed, 10 insertions(+), 109 deletions(-)
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index 29e56a2..e1a3318 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -301,21 +301,9 @@ static struct omap_dss_board_info sdp3430_dss_data = {
.default_device = &sdp3430_lcd_device,
};
-static struct platform_device sdp3430_dss_device = {
- .name = "omap_display",
- .id = -1,
- .dev = {
- .platform_data = &sdp3430_dss_data,
- },
-};
-
static struct regulator_consumer_supply sdp3430_vdda_dac_supply =
REGULATOR_SUPPLY("vdda_dac", "omap_display");
-static struct platform_device *sdp3430_devices[] __initdata = {
- &sdp3430_dss_device,
-};
-
static struct omap_board_config_kernel sdp3430_config[] __initdata = {
};
@@ -790,7 +778,7 @@ static void __init omap_3430sdp_init(void)
{
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap3430_i2c_init();
- platform_add_devices(sdp3430_devices, ARRAY_SIZE(sdp3430_devices));
+ omap_display_init(&sdp3430_dss_data);
if (omap_rev() > OMAP3430_REV_ES1_0)
ts_gpio = SDP3430_TS_GPIO_IRQ_SDPV2;
else
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c
index 2b37dcf..782d270 100644
--- a/arch/arm/mach-omap2/board-am3517evm.c
+++ b/arch/arm/mach-omap2/board-am3517evm.c
@@ -367,24 +367,12 @@ static struct omap_dss_board_info am3517_evm_dss_data = {
.default_device = &am3517_evm_lcd_device,
};
-static struct platform_device am3517_evm_dss_device = {
- .name = "omap_display",
- .id = -1,
- .dev = {
- .platform_data = &am3517_evm_dss_data,
- },
-};
-
/*
* Board initialization
*/
static struct omap_board_config_kernel am3517_evm_config[] __initdata = {
};
-static struct platform_device *am3517_evm_devices[] __initdata = {
- &am3517_evm_dss_device,
-};
-
static void __init am3517_evm_init_irq(void)
{
omap_board_config = am3517_evm_config;
@@ -484,9 +472,7 @@ static void __init am3517_evm_init(void)
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
am3517_evm_i2c_init();
- platform_add_devices(am3517_evm_devices,
- ARRAY_SIZE(am3517_evm_devices));
-
+ omap_display_init(&am3517_evm_dss_data);
omap_serial_init();
/* Configure GPIO for EHCI port */
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
index 307e93a..c5e80ad 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -390,14 +390,6 @@ static struct omap_dss_board_info cm_t35_dss_data = {
.default_device = &cm_t35_dvi_device,
};
-static struct platform_device cm_t35_dss_device = {
- .name = "omap_display",
- .id = -1,
- .dev = {
- .platform_data = &cm_t35_dss_data,
- },
-};
-
static struct omap2_mcspi_device_config tdo24m_mcspi_config = {
.turbo_mode = 0,
.single_channel = 1, /* 0: slave, 1: master */
@@ -457,7 +449,7 @@ static void __init cm_t35_init_display(void)
msleep(50);
gpio_set_value(lcd_en_gpio, 1);
- err = platform_device_register(&cm_t35_dss_device);
+ err = omap_display_init(&cm_t35_dss_data);
if (err) {
pr_err("CM-T35: failed to register DSS device\n");
goto err_dev_reg;
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
index f948435..78f2951 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -188,14 +188,6 @@ static struct omap_dss_board_info devkit8000_dss_data = {
.default_device = &devkit8000_lcd_device,
};
-static struct platform_device devkit8000_dss_device = {
- .name = "omap_display",
- .id = -1,
- .dev = {
- .platform_data = &devkit8000_dss_data,
- },
-};
-
static struct regulator_consumer_supply devkit8000_vdda_dac_supply =
REGULATOR_SUPPLY("vdda_dac", "omap_display");
@@ -561,7 +553,6 @@ static void __init omap_dm9000_init(void)
}
static struct platform_device *devkit8000_devices[] __initdata = {
- &devkit8000_dss_device,
&leds_gpio,
&keys_gpio,
&omap_dm9000_dev,
@@ -783,6 +774,7 @@ static void __init devkit8000_init(void)
platform_add_devices(devkit8000_devices,
ARRAY_SIZE(devkit8000_devices));
+ omap_display_init(&devkit8000_dss_data);
spi_register_board_info(devkit8000_spi_board_info,
ARRAY_SIZE(devkit8000_spi_board_info));
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index 3b8b0d0..6d45efd 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -478,14 +478,6 @@ static struct omap_dss_board_info igep2_dss_data = {
.default_device = &igep2_dvi_device,
};
-static struct platform_device igep2_dss_device = {
- .name = "omap_display",
- .id = -1,
- .dev = {
- .platform_data = &igep2_dss_data,
- },
-};
-
static struct regulator_consumer_supply igep2_vpll2_supply =
REGULATOR_SUPPLY("vdds_dsi", "omap_display");
@@ -512,7 +504,6 @@ static void __init igep2_display_init(void)
}
static struct platform_device *igep2_devices[] __initdata = {
- &igep2_dss_device,
&igep2_vwlan_device,
};
@@ -656,6 +647,7 @@ static void __init igep2_init(void)
/* Register I2C busses and drivers */
igep2_i2c_init();
platform_add_devices(igep2_devices, ARRAY_SIZE(igep2_devices));
+ omap_display_init(&igep2_dss_data);
omap_serial_init();
usb_musb_init(&musb_board_data);
usb_ehci_init(&ehci_pdata);
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index ebfddb8..b82e677 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -222,14 +222,6 @@ static struct omap_dss_board_info beagle_dss_data = {
.default_device = &beagle_dvi_device,
};
-static struct platform_device beagle_dss_device = {
- .name = "omap_display",
- .id = -1,
- .dev = {
- .platform_data = &beagle_dss_data,
- },
-};
-
static struct regulator_consumer_supply beagle_vdac_supply =
REGULATOR_SUPPLY("vdda_dac", "omap_display");
@@ -496,7 +488,6 @@ static void __init omap3_beagle_init_irq(void)
static struct platform_device *omap3_beagle_devices[] __initdata = {
&leds_gpio,
&keys_gpio,
- &beagle_dss_device,
};
static void __init omap3beagle_flash_init(void)
@@ -563,6 +554,7 @@ static void __init omap3_beagle_init(void)
omap3_beagle_i2c_init();
platform_add_devices(omap3_beagle_devices,
ARRAY_SIZE(omap3_beagle_devices));
+ omap_display_init(&beagle_dss_data);
omap_serial_init();
omap_mux_init_gpio(170, OMAP_PIN_INPUT);
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index 8f9dece..a7406e9 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -322,14 +322,6 @@ static struct omap_dss_board_info omap3_evm_dss_data = {
.default_device = &omap3_evm_lcd_device,
};
-static struct platform_device omap3_evm_dss_device = {
- .name = "omap_display",
- .id = -1,
- .dev = {
- .platform_data = &omap3_evm_dss_data,
- },
-};
-
static struct regulator_consumer_supply omap3evm_vmmc1_supply = {
.supply = "vmmc",
};
@@ -626,10 +618,6 @@ static void __init omap3_evm_init_irq(void)
omap_init_irq();
}
-static struct platform_device *omap3_evm_devices[] __initdata = {
- &omap3_evm_dss_device,
-};
-
static struct ehci_hcd_omap_platform_data ehci_pdata __initdata = {
.port_mode[0] = EHCI_HCD_OMAP_MODE_UNKNOWN,
@@ -667,7 +655,7 @@ static void __init omap3_evm_init(void)
omap3_evm_i2c_init();
- platform_add_devices(omap3_evm_devices, ARRAY_SIZE(omap3_evm_devices));
+ omap_display_init(&omap3_evm_dss_data);
spi_register_board_info(omap3evm_spi_board_info,
ARRAY_SIZE(omap3evm_spi_board_info));
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
index 5d69320..a13afb9 100644
--- a/arch/arm/mach-omap2/board-omap3pandora.c
+++ b/arch/arm/mach-omap2/board-omap3pandora.c
@@ -253,14 +253,6 @@ static struct omap_dss_board_info pandora_dss_data = {
.default_device = &pandora_lcd_device,
};
-static struct platform_device pandora_dss_device = {
- .name = "omap_display",
- .id = -1,
- .dev = {
- .platform_data = &pandora_dss_data,
- },
-};
-
static void pandora_wl1251_init_card(struct mmc_card *card)
{
/*
@@ -690,7 +682,6 @@ fail:
static struct platform_device *omap3pandora_devices[] __initdata = {
&pandora_leds_gpio,
&pandora_keys_gpio,
- &pandora_dss_device,
&pandora_wl1251_data,
&pandora_vwlan_device,
};
@@ -726,6 +717,7 @@ static void __init omap3pandora_init(void)
pandora_wl1251_init();
platform_add_devices(omap3pandora_devices,
ARRAY_SIZE(omap3pandora_devices));
+ omap_display_init(&pandora_dss_data);
omap_serial_init();
spi_register_board_info(omap3pandora_spi_board_info,
ARRAY_SIZE(omap3pandora_spi_board_info));
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
index 085ec27..0eed665 100644
--- a/arch/arm/mach-omap2/board-omap3stalker.c
+++ b/arch/arm/mach-omap2/board-omap3stalker.c
@@ -229,14 +229,6 @@ static struct omap_dss_board_info omap3_stalker_dss_data = {
.default_device = &omap3_stalker_dvi_device,
};
-static struct platform_device omap3_stalker_dss_device = {
- .name = "omap_display",
- .id = -1,
- .dev = {
- .platform_data = &omap3_stalker_dss_data,
- },
-};
-
static struct regulator_consumer_supply omap3stalker_vmmc1_supply = {
.supply = "vmmc",
};
@@ -591,7 +583,6 @@ static void __init omap3_stalker_init_irq(void)
}
static struct platform_device *omap3_stalker_devices[] __initdata = {
- &omap3_stalker_dss_device,
&keys_gpio,
};
@@ -631,6 +622,7 @@ static void __init omap3_stalker_init(void)
platform_add_devices(omap3_stalker_devices,
ARRAY_SIZE(omap3_stalker_devices));
+ omap_display_init(&omap3_stalker_dss_data);
spi_register_board_info(omap3stalker_spi_board_info,
ARRAY_SIZE(omap3stalker_spi_board_info));
diff --git a/arch/arm/mach-omap2/board-rx51-video.c b/arch/arm/mach-omap2/board-rx51-video.c
index 8140d05..89a66db 100644
--- a/arch/arm/mach-omap2/board-rx51-video.c
+++ b/arch/arm/mach-omap2/board-rx51-video.c
@@ -66,18 +66,6 @@ static struct omap_dss_board_info rx51_dss_board_info = {
.default_device = &rx51_lcd_device,
};
-struct platform_device rx51_display_device = {
- .name = "omap_display",
- .id = -1,
- .dev = {
- .platform_data = &rx51_dss_board_info,
- },
-};
-
-static struct platform_device *rx51_video_devices[] __initdata = {
- &rx51_display_device,
-};
-
static int __init rx51_video_init(void)
{
if (!machine_is_nokia_rx51())
@@ -95,8 +83,7 @@ static int __init rx51_video_init(void)
gpio_direction_output(RX51_LCD_RESET_GPIO, 1);
- platform_add_devices(rx51_video_devices,
- ARRAY_SIZE(rx51_video_devices));
+ omap_display_init(&rx51_dss_board_info);
return 0;
}
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 08/17] OMAP2,3: DSS2: Build omap_device for each DSS HWIP
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (6 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 07/17] OMAP2,3: DSS2: board files: replace platform_device_register with omap_display_init() Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-07 23:34 ` Kevin Hilman
2011-01-07 11:25 ` [PATCH v5 09/17] OMAP2,3: DSS2: DSS: create platform_driver, move init,exit to driver Sumit Semwal
` (9 subsequent siblings)
17 siblings, 1 reply; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy, Sumit Semwal
From: Senthilvadivu Guruswamy <svadivu@ti.com>
Looks up the hwmod database for each of the given DSS HW IP and builds
omap_device which inturn does the platform device register for each of DSS HW IP
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
---
arch/arm/mach-omap2/display.c | 44 +++++++++++++++++++++++++++++
arch/arm/plat-omap/include/plat/display.h | 6 ++++
2 files changed, 50 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
index 26d3feb..276b800 100644
--- a/arch/arm/mach-omap2/display.c
+++ b/arch/arm/mach-omap2/display.c
@@ -36,10 +36,54 @@ static struct platform_device omap_display_device = {
},
};
+static struct omap_device_pm_latency omap_dss_latency[] = {
+ [0] = {
+ .deactivate_func = omap_device_idle_hwmods,
+ .activate_func = omap_device_enable_hwmods,
+ },
+};
+
int __init omap_display_init(struct omap_dss_board_info
*board_data)
{
int r = 0;
+ struct omap_hwmod *oh;
+ struct omap_device *od;
+ int i;
+ struct omap_display_platform_data pdata;
+ char *oh_name[] = { "dss_dss", /* omap2,3 */
+ "dss_dispc", /* omap2,3 */
+ "dss_rfbi", /* omap2,3 */
+ "dss_venc", /* omap2,3 */
+ "dss_dsi1" }; /* omap3 */
+ char *dev_name[] = { "omap_dss", "omap_dispc", "omap_rfbi",
+ "omap_venc", "omap_dsi1" };
+ int oh_count;
+
+ if (cpu_is_omap24xx()) {
+ oh_count = ARRAY_SIZE(oh_name) - 1;
+ /* last hwmod dev in oh_name is not available for omap2 */
+ } else {
+ oh_count = ARRAY_SIZE(oh_name);
+ }
+
+ pdata.board_data = board_data;
+ pdata.board_data->get_last_off_on_transaction_id = NULL;
+
+ for (i = 0; i < oh_count; i++) {
+ oh = omap_hwmod_lookup(oh_name[i]);
+ if (!oh) {
+ pr_err("Could not look up %s\n", oh_name[i]);
+ return r;
+ }
+ od = omap_device_build(dev_name[i], -1, oh, &pdata,
+ sizeof(struct omap_display_platform_data),
+ omap_dss_latency,
+ ARRAY_SIZE(omap_dss_latency), 0);
+
+ WARN((IS_ERR(od)), "Could not build omap_device for %s\n",
+ oh_name[i]);
+ }
omap_display_device.dev.platform_data = board_data;
r = platform_device_register(&omap_display_device);
diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h
index 871bbae..23afd6d 100644
--- a/arch/arm/plat-omap/include/plat/display.h
+++ b/arch/arm/plat-omap/include/plat/display.h
@@ -26,6 +26,7 @@
#include <linux/platform_device.h>
#include <asm/atomic.h>
+
#define DISPC_IRQ_FRAMEDONE (1 << 0)
#define DISPC_IRQ_VSYNC (1 << 1)
#define DISPC_IRQ_EVSYNC_EVEN (1 << 2)
@@ -224,6 +225,11 @@ struct omap_dss_board_info {
/* Init with the board info */
extern int omap_display_init(struct omap_dss_board_info *board_data);
+struct omap_display_platform_data {
+ struct omap_dss_board_info *board_data;
+ /* TODO: Additional members to be added when PM is considered */
+};
+
struct omap_video_timings {
/* Unit: pixels */
u16 x_res;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 09/17] OMAP2,3: DSS2: DSS: create platform_driver, move init,exit to driver
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (7 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 08/17] OMAP2,3: DSS2: Build omap_device for each DSS HWIP Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-07 23:43 ` Kevin Hilman
2011-01-07 11:25 ` [PATCH v5 10/17] OMAP2,3: DSS2: Move clocks from core driver to dss driver Sumit Semwal
` (8 subsequent siblings)
17 siblings, 1 reply; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy, Sumit Semwal
From: Senthilvadivu Guruswamy <svadivu@ti.com>
Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
So a platform_driver of DSS is created and init exit methods are moved from core.c
to its driver probe,remove. pdev member has to be maintained by its own drivers.
DSS platform driver is registered from inside omap_dss_probe, in the order desired.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
---
drivers/video/omap2/dss/core.c | 21 +++++++--------
drivers/video/omap2/dss/dss.c | 55 ++++++++++++++++++++++++++++++++++++++-
drivers/video/omap2/dss/dss.h | 4 +-
3 files changed, 65 insertions(+), 15 deletions(-)
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 48d20d8..faca859 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -497,9 +497,9 @@ static inline void dss_uninitialize_debugfs(void)
static int omap_dss_probe(struct platform_device *pdev)
{
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
- int skip_init = 0;
int r;
int i;
+ int skip_init = 0;
core.pdev = pdev;
@@ -517,15 +517,9 @@ static int omap_dss_probe(struct platform_device *pdev)
core.ctx_id = dss_get_ctx_id();
DSSDBG("initial ctx id %u\n", core.ctx_id);
-#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
- /* DISPC_CONTROL */
- if (omap_readl(0x48050440) & 1) /* LCD enabled? */
- skip_init = 1;
-#endif
-
- r = dss_init(skip_init);
+ r = dss_init_platform_driver();
if (r) {
- DSSERR("Failed to initialize DSS\n");
+ DSSERR("Failed to initialize DSS platform driver\n");
goto err_dss;
}
@@ -553,6 +547,11 @@ static int omap_dss_probe(struct platform_device *pdev)
goto err_venc;
}
+#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
+ /* DISPC_CONTROL */
+ if (omap_readl(0x48050440) & 1) /* LCD enabled? */
+ skip_init = 1;
+#endif
if (cpu_is_omap34xx()) {
r = sdi_init(skip_init);
if (r) {
@@ -610,7 +609,7 @@ err_dispc:
err_dpi:
rfbi_exit();
err_rfbi:
- dss_exit();
+ dss_deinit_platform_driver();
err_dss:
dss_clk_disable_all_no_ctx();
dss_put_clocks();
@@ -636,7 +635,7 @@ static int omap_dss_remove(struct platform_device *pdev)
sdi_exit();
}
- dss_exit();
+ dss_deinit_platform_driver();
/* these should be removed at some point */
c = core.dss_ick->usecount;
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 77c3621..ebb294a 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -59,6 +59,7 @@ struct dss_reg {
dss_write_reg(idx, FLD_MOD(dss_read_reg(idx), val, start, end))
static struct {
+ struct platform_device *pdev;
void __iomem *base;
struct clk *dpll4_m4_ck;
@@ -549,7 +550,7 @@ void dss_set_dac_pwrdn_bgz(bool enable)
REG_FLD_MOD(DSS_CONTROL, enable, 5, 5); /* DAC Power-Down Control */
}
-int dss_init(bool skip_init)
+static int dss_init(bool skip_init)
{
int r;
u32 rev;
@@ -629,7 +630,7 @@ fail0:
return r;
}
-void dss_exit(void)
+static void dss_exit(void)
{
if (cpu_is_omap34xx())
clk_put(dss.dpll4_m4_ck);
@@ -639,3 +640,53 @@ void dss_exit(void)
iounmap(dss.base);
}
+/* DSS HW IP initialisation */
+static int omap_dsshw_probe(struct platform_device *pdev)
+{
+ int r;
+ int skip_init = 0;
+
+ dss.pdev = pdev;
+
+#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
+ /* DISPC_CONTROL */
+ if (omap_readl(0x48050440) & 1) /* LCD enabled? */
+ skip_init = 1;
+#endif
+
+ r = dss_init(skip_init);
+ if (r) {
+ DSSERR("Failed to initialize DSS\n");
+ goto err_dss;
+ }
+
+err_dss:
+
+ return r;
+}
+
+static int omap_dsshw_remove(struct platform_device *pdev)
+{
+ dss_exit();
+
+ return 0;
+}
+
+static struct platform_driver omap_dsshw_driver = {
+ .probe = omap_dsshw_probe,
+ .remove = omap_dsshw_remove,
+ .driver = {
+ .name = "omap_dss",
+ .owner = THIS_MODULE,
+ },
+};
+
+int dss_init_platform_driver(void)
+{
+ return platform_driver_register(&omap_dsshw_driver);
+}
+
+void dss_deinit_platform_driver(void)
+{
+ return platform_driver_unregister(&omap_dsshw_driver);
+}
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 5c7940d..50b4223 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -214,8 +214,8 @@ void dss_overlay_setup_l4_manager(struct omap_overlay_manager *mgr);
void dss_recheck_connections(struct omap_dss_device *dssdev, bool force);
/* DSS */
-int dss_init(bool skip_init);
-void dss_exit(void);
+int dss_init_platform_driver(void);
+void dss_deinit_platform_driver(void);
void dss_save_context(void);
void dss_restore_context(void);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 10/17] OMAP2,3: DSS2: Move clocks from core driver to dss driver
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (8 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 09/17] OMAP2,3: DSS2: DSS: create platform_driver, move init,exit to driver Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-10 23:59 ` Paul Walmsley
2011-01-07 11:25 ` [PATCH v5 11/17] OMAP2,3: DSS2: RFBI: create platform_driver, move init,exit to driver Sumit Semwal
` (7 subsequent siblings)
17 siblings, 1 reply; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy, Sumit Semwal
From: Senthilvadivu Guruswamy <svadivu@ti.com>
All clock management is moved to dss platform driver. clk_get/put APIs use
dss device instead of core platform device.
Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
So the device name is changed from omap_display to omap_dss in 2420, 2430,
3xxx clock database files. Now the core driver "omap_display" only takes care
of panel registration with the custom bus.
core driver also uses the clk_enable() / clk_disable() APIs exposed by DSS for
clock management.
DSS driver would do clock management of clocks needed by DISPC, RFBI, DSI, VENC
TODO: The clock content would be adapted to omap_hwmod in a seperate series.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
---
arch/arm/mach-omap2/clock2420_data.c | 8 +-
arch/arm/mach-omap2/clock2430_data.c | 8 +-
arch/arm/mach-omap2/clock3xxx_data.c | 14 +-
drivers/video/omap2/dss/core.c | 375 +---------------------------------
drivers/video/omap2/dss/dss.c | 366 +++++++++++++++++++++++++++++++++-
drivers/video/omap2/dss/dss.h | 13 +-
6 files changed, 392 insertions(+), 392 deletions(-)
diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c
index a220820..7a56c67 100644
--- a/arch/arm/mach-omap2/clock2420_data.c
+++ b/arch/arm/mach-omap2/clock2420_data.c
@@ -1786,10 +1786,10 @@ static struct omap_clk omap2420_clks[] = {
CLK(NULL, "gfx_2d_fck", &gfx_2d_fck, CK_242X),
CLK(NULL, "gfx_ick", &gfx_ick, CK_242X),
/* DSS domain clocks */
- CLK("omap_display", "ick", &dss_ick, CK_242X),
- CLK("omap_display", "dss1_fck", &dss1_fck, CK_242X),
- CLK("omap_display", "dss2_fck", &dss2_fck, CK_242X),
- CLK("omap_display", "tv_fck", &dss_54m_fck, CK_242X),
+ CLK("omap_dss", "ick", &dss_ick, CK_242X),
+ CLK("omap_dss", "dss1_fck", &dss1_fck, CK_242X),
+ CLK("omap_dss", "dss2_fck", &dss2_fck, CK_242X),
+ CLK("omap_dss", "tv_fck", &dss_54m_fck, CK_242X),
/* L3 domain clocks */
CLK(NULL, "core_l3_ck", &core_l3_ck, CK_242X),
CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_242X),
diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c
index 78f7712..48d3437 100644
--- a/arch/arm/mach-omap2/clock2430_data.c
+++ b/arch/arm/mach-omap2/clock2430_data.c
@@ -1890,10 +1890,10 @@ static struct omap_clk omap2430_clks[] = {
CLK(NULL, "mdm_ick", &mdm_ick, CK_243X),
CLK(NULL, "mdm_osc_ck", &mdm_osc_ck, CK_243X),
/* DSS domain clocks */
- CLK("omap_display", "ick", &dss_ick, CK_243X),
- CLK("omap_display", "dss1_fck", &dss1_fck, CK_243X),
- CLK("omap_display", "dss2_fck", &dss2_fck, CK_243X),
- CLK("omap_display", "tv_fck", &dss_54m_fck, CK_243X),
+ CLK("omap_dss", "ick", &dss_ick, CK_243X),
+ CLK("omap_dss", "dss1_fck", &dss1_fck, CK_243X),
+ CLK("omap_dss", "dss2_fck", &dss2_fck, CK_243X),
+ CLK("omap_dss", "tv_fck", &dss_54m_fck, CK_243X),
/* L3 domain clocks */
CLK(NULL, "core_l3_ck", &core_l3_ck, CK_243X),
CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_243X),
diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c
index 8c9e4c4..be9077b 100644
--- a/arch/arm/mach-omap2/clock3xxx_data.c
+++ b/arch/arm/mach-omap2/clock3xxx_data.c
@@ -3355,13 +3355,13 @@ static struct omap_clk omap3xxx_clks[] = {
CLK("omap_rng", "ick", &rng_ick, CK_34XX | CK_36XX),
CLK(NULL, "sha11_ick", &sha11_ick, CK_34XX | CK_36XX),
CLK(NULL, "des1_ick", &des1_ick, CK_34XX | CK_36XX),
- CLK("omap_display", "dss1_fck", &dss1_alwon_fck_3430es1, CK_3430ES1),
- CLK("omap_display", "dss1_fck", &dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
- CLK("omap_display", "tv_fck", &dss_tv_fck, CK_3XXX),
- CLK("omap_display", "video_fck", &dss_96m_fck, CK_3XXX),
- CLK("omap_display", "dss2_fck", &dss2_alwon_fck, CK_3XXX),
- CLK("omap_display", "ick", &dss_ick_3430es1, CK_3430ES1),
- CLK("omap_display", "ick", &dss_ick_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
+ CLK("omap_dss", "dss1_fck", &dss1_alwon_fck_3430es1, CK_3430ES1),
+ CLK("omap_dss", "dss1_fck", &dss1_alwon_fck_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
+ CLK("omap_dss", "tv_fck", &dss_tv_fck, CK_3XXX),
+ CLK("omap_dss", "video_fck", &dss_96m_fck, CK_3XXX),
+ CLK("omap_dss", "dss2_fck", &dss2_alwon_fck, CK_3XXX),
+ CLK("omap_dss", "ick", &dss_ick_3430es1, CK_3430ES1),
+ CLK("omap_dss", "ick", &dss_ick_3430es2, CK_3430ES2PLUS | CK_AM35XX | CK_36XX),
CLK(NULL, "cam_mclk", &cam_mclk, CK_34XX | CK_36XX),
CLK(NULL, "cam_ick", &cam_ick, CK_34XX | CK_36XX),
CLK(NULL, "csi2_96m_fck", &csi2_96m_fck, CK_34XX | CK_36XX),
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index faca859..1ba4c81 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -34,32 +34,18 @@
#include <linux/regulator/consumer.h>
#include <plat/display.h>
-#include <plat/clock.h>
#include "dss.h"
#include "dss_features.h"
static struct {
struct platform_device *pdev;
- int ctx_id;
-
- struct clk *dss_ick;
- struct clk *dss1_fck;
- struct clk *dss2_fck;
- struct clk *dss_54m_fck;
- struct clk *dss_96m_fck;
- unsigned num_clks_enabled;
struct regulator *vdds_dsi_reg;
struct regulator *vdds_sdi_reg;
struct regulator *vdda_dac_reg;
} core;
-static void dss_clk_enable_all_no_ctx(void);
-static void dss_clk_disable_all_no_ctx(void);
-static void dss_clk_enable_no_ctx(enum dss_clock clks);
-static void dss_clk_disable_no_ctx(enum dss_clock clks);
-
static char *def_disp_name;
module_param_named(def_disp, def_disp_name, charp, 0);
MODULE_PARM_DESC(def_disp_name, "default display name");
@@ -69,297 +55,6 @@ unsigned int dss_debug;
module_param_named(debug, dss_debug, bool, 0644);
#endif
-/* CONTEXT */
-static int dss_get_ctx_id(void)
-{
- struct omap_dss_board_info *pdata = core.pdev->dev.platform_data;
- int r;
-
- if (!pdata->get_last_off_on_transaction_id)
- return 0;
- r = pdata->get_last_off_on_transaction_id(&core.pdev->dev);
- if (r < 0) {
- dev_err(&core.pdev->dev, "getting transaction ID failed, "
- "will force context restore\n");
- r = -1;
- }
- return r;
-}
-
-int dss_need_ctx_restore(void)
-{
- int id = dss_get_ctx_id();
-
- if (id < 0 || id != core.ctx_id) {
- DSSDBG("ctx id %d -> id %d\n",
- core.ctx_id, id);
- core.ctx_id = id;
- return 1;
- } else {
- return 0;
- }
-}
-
-static void save_all_ctx(void)
-{
- DSSDBG("save context\n");
-
- dss_clk_enable_no_ctx(DSS_CLK_ICK | DSS_CLK_FCK1);
-
- dss_save_context();
- dispc_save_context();
-#ifdef CONFIG_OMAP2_DSS_DSI
- dsi_save_context();
-#endif
-
- dss_clk_disable_no_ctx(DSS_CLK_ICK | DSS_CLK_FCK1);
-}
-
-static void restore_all_ctx(void)
-{
- DSSDBG("restore context\n");
-
- dss_clk_enable_all_no_ctx();
-
- dss_restore_context();
- dispc_restore_context();
-#ifdef CONFIG_OMAP2_DSS_DSI
- dsi_restore_context();
-#endif
-
- dss_clk_disable_all_no_ctx();
-}
-
-#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
-/* CLOCKS */
-static void core_dump_clocks(struct seq_file *s)
-{
- int i;
- struct clk *clocks[5] = {
- core.dss_ick,
- core.dss1_fck,
- core.dss2_fck,
- core.dss_54m_fck,
- core.dss_96m_fck
- };
-
- seq_printf(s, "- CORE -\n");
-
- seq_printf(s, "internal clk count\t\t%u\n", core.num_clks_enabled);
-
- for (i = 0; i < 5; i++) {
- if (!clocks[i])
- continue;
- seq_printf(s, "%-15s\t%lu\t%d\n",
- clocks[i]->name,
- clk_get_rate(clocks[i]),
- clocks[i]->usecount);
- }
-}
-#endif /* defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT) */
-
-static int dss_get_clock(struct clk **clock, const char *clk_name)
-{
- struct clk *clk;
-
- clk = clk_get(&core.pdev->dev, clk_name);
-
- if (IS_ERR(clk)) {
- DSSERR("can't get clock %s", clk_name);
- return PTR_ERR(clk);
- }
-
- *clock = clk;
-
- DSSDBG("clk %s, rate %ld\n", clk_name, clk_get_rate(clk));
-
- return 0;
-}
-
-static int dss_get_clocks(void)
-{
- int r;
-
- core.dss_ick = NULL;
- core.dss1_fck = NULL;
- core.dss2_fck = NULL;
- core.dss_54m_fck = NULL;
- core.dss_96m_fck = NULL;
-
- r = dss_get_clock(&core.dss_ick, "ick");
- if (r)
- goto err;
-
- r = dss_get_clock(&core.dss1_fck, "dss1_fck");
- if (r)
- goto err;
-
- r = dss_get_clock(&core.dss2_fck, "dss2_fck");
- if (r)
- goto err;
-
- r = dss_get_clock(&core.dss_54m_fck, "tv_fck");
- if (r)
- goto err;
-
- r = dss_get_clock(&core.dss_96m_fck, "video_fck");
- if (r)
- goto err;
-
- return 0;
-
-err:
- if (core.dss_ick)
- clk_put(core.dss_ick);
- if (core.dss1_fck)
- clk_put(core.dss1_fck);
- if (core.dss2_fck)
- clk_put(core.dss2_fck);
- if (core.dss_54m_fck)
- clk_put(core.dss_54m_fck);
- if (core.dss_96m_fck)
- clk_put(core.dss_96m_fck);
-
- return r;
-}
-
-static void dss_put_clocks(void)
-{
- if (core.dss_96m_fck)
- clk_put(core.dss_96m_fck);
- clk_put(core.dss_54m_fck);
- clk_put(core.dss1_fck);
- clk_put(core.dss2_fck);
- clk_put(core.dss_ick);
-}
-
-unsigned long dss_clk_get_rate(enum dss_clock clk)
-{
- switch (clk) {
- case DSS_CLK_ICK:
- return clk_get_rate(core.dss_ick);
- case DSS_CLK_FCK1:
- return clk_get_rate(core.dss1_fck);
- case DSS_CLK_FCK2:
- return clk_get_rate(core.dss2_fck);
- case DSS_CLK_54M:
- return clk_get_rate(core.dss_54m_fck);
- case DSS_CLK_96M:
- return clk_get_rate(core.dss_96m_fck);
- }
-
- BUG();
- return 0;
-}
-
-static unsigned count_clk_bits(enum dss_clock clks)
-{
- unsigned num_clks = 0;
-
- if (clks & DSS_CLK_ICK)
- ++num_clks;
- if (clks & DSS_CLK_FCK1)
- ++num_clks;
- if (clks & DSS_CLK_FCK2)
- ++num_clks;
- if (clks & DSS_CLK_54M)
- ++num_clks;
- if (clks & DSS_CLK_96M)
- ++num_clks;
-
- return num_clks;
-}
-
-static void dss_clk_enable_no_ctx(enum dss_clock clks)
-{
- unsigned num_clks = count_clk_bits(clks);
-
- if (clks & DSS_CLK_ICK)
- clk_enable(core.dss_ick);
- if (clks & DSS_CLK_FCK1)
- clk_enable(core.dss1_fck);
- if (clks & DSS_CLK_FCK2)
- clk_enable(core.dss2_fck);
- if (clks & DSS_CLK_54M)
- clk_enable(core.dss_54m_fck);
- if (clks & DSS_CLK_96M)
- clk_enable(core.dss_96m_fck);
-
- core.num_clks_enabled += num_clks;
-}
-
-void dss_clk_enable(enum dss_clock clks)
-{
- bool check_ctx = core.num_clks_enabled == 0;
-
- dss_clk_enable_no_ctx(clks);
-
- if (check_ctx && cpu_is_omap34xx() && dss_need_ctx_restore())
- restore_all_ctx();
-}
-
-static void dss_clk_disable_no_ctx(enum dss_clock clks)
-{
- unsigned num_clks = count_clk_bits(clks);
-
- if (clks & DSS_CLK_ICK)
- clk_disable(core.dss_ick);
- if (clks & DSS_CLK_FCK1)
- clk_disable(core.dss1_fck);
- if (clks & DSS_CLK_FCK2)
- clk_disable(core.dss2_fck);
- if (clks & DSS_CLK_54M)
- clk_disable(core.dss_54m_fck);
- if (clks & DSS_CLK_96M)
- clk_disable(core.dss_96m_fck);
-
- core.num_clks_enabled -= num_clks;
-}
-
-void dss_clk_disable(enum dss_clock clks)
-{
- if (cpu_is_omap34xx()) {
- unsigned num_clks = count_clk_bits(clks);
-
- BUG_ON(core.num_clks_enabled < num_clks);
-
- if (core.num_clks_enabled == num_clks)
- save_all_ctx();
- }
-
- dss_clk_disable_no_ctx(clks);
-}
-
-static void dss_clk_enable_all_no_ctx(void)
-{
- enum dss_clock clks;
-
- clks = DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_FCK2 | DSS_CLK_54M;
- if (cpu_is_omap34xx())
- clks |= DSS_CLK_96M;
- dss_clk_enable_no_ctx(clks);
-}
-
-static void dss_clk_disable_all_no_ctx(void)
-{
- enum dss_clock clks;
-
- clks = DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_FCK2 | DSS_CLK_54M;
- if (cpu_is_omap34xx())
- clks |= DSS_CLK_96M;
- dss_clk_disable_no_ctx(clks);
-}
-
-static void dss_clk_disable_all(void)
-{
- enum dss_clock clks;
-
- clks = DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_FCK2 | DSS_CLK_54M;
- if (cpu_is_omap34xx())
- clks |= DSS_CLK_96M;
- dss_clk_disable(clks);
-}
-
/* REGULATORS */
struct regulator *dss_get_vdds_dsi(void)
@@ -404,18 +99,7 @@ struct regulator *dss_get_vdda_dac(void)
return reg;
}
-/* DEBUGFS */
#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
-static void dss_debug_dump_clocks(struct seq_file *s)
-{
- core_dump_clocks(s);
- dss_dump_clocks(s);
- dispc_dump_clocks(s);
-#ifdef CONFIG_OMAP2_DSS_DSI
- dsi_dump_clocks(s);
-#endif
-}
-
static int dss_debug_show(struct seq_file *s, void *unused)
{
void (*func)(struct seq_file *) = s->private;
@@ -508,21 +192,15 @@ static int omap_dss_probe(struct platform_device *pdev)
dss_init_overlay_managers(pdev);
dss_init_overlays(pdev);
- r = dss_get_clocks();
- if (r)
- goto err_clocks;
-
- dss_clk_enable_all_no_ctx();
-
- core.ctx_id = dss_get_ctx_id();
- DSSDBG("initial ctx id %u\n", core.ctx_id);
-
r = dss_init_platform_driver();
if (r) {
DSSERR("Failed to initialize DSS platform driver\n");
goto err_dss;
}
+ /* keep clocks enabled to prevent context saves/restores during init */
+ dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
+
r = rfbi_init();
if (r) {
DSSERR("Failed to initialize rfbi\n");
@@ -588,7 +266,7 @@ static int omap_dss_probe(struct platform_device *pdev)
pdata->default_device = dssdev;
}
- dss_clk_disable_all();
+ dss_clk_disable(DSS_CLK_ICK | DSS_CLK_FCK1);
return 0;
@@ -611,9 +289,6 @@ err_dpi:
err_rfbi:
dss_deinit_platform_driver();
err_dss:
- dss_clk_disable_all_no_ctx();
- dss_put_clocks();
-err_clocks:
return r;
}
@@ -622,7 +297,6 @@ static int omap_dss_remove(struct platform_device *pdev)
{
struct omap_dss_board_info *pdata = pdev->dev.platform_data;
int i;
- int c;
dss_uninitialize_debugfs();
@@ -637,47 +311,6 @@ static int omap_dss_remove(struct platform_device *pdev)
dss_deinit_platform_driver();
- /* these should be removed at some point */
- c = core.dss_ick->usecount;
- if (c > 0) {
- DSSERR("warning: dss_ick usecount %d, disabling\n", c);
- while (c-- > 0)
- clk_disable(core.dss_ick);
- }
-
- c = core.dss1_fck->usecount;
- if (c > 0) {
- DSSERR("warning: dss1_fck usecount %d, disabling\n", c);
- while (c-- > 0)
- clk_disable(core.dss1_fck);
- }
-
- c = core.dss2_fck->usecount;
- if (c > 0) {
- DSSERR("warning: dss2_fck usecount %d, disabling\n", c);
- while (c-- > 0)
- clk_disable(core.dss2_fck);
- }
-
- c = core.dss_54m_fck->usecount;
- if (c > 0) {
- DSSERR("warning: dss_54m_fck usecount %d, disabling\n", c);
- while (c-- > 0)
- clk_disable(core.dss_54m_fck);
- }
-
- if (core.dss_96m_fck) {
- c = core.dss_96m_fck->usecount;
- if (c > 0) {
- DSSERR("warning: dss_96m_fck usecount %d, disabling\n",
- c);
- while (c-- > 0)
- clk_disable(core.dss_96m_fck);
- }
- }
-
- dss_put_clocks();
-
dss_uninit_overlays(pdev);
dss_uninit_overlay_managers(pdev);
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index ebb294a..02a2a3e 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -31,6 +31,7 @@
#include <linux/clk.h>
#include <plat/display.h>
+#include <plat/clock.h>
#include "dss.h"
#define DSS_BASE 0x48050000
@@ -61,8 +62,15 @@ struct dss_reg {
static struct {
struct platform_device *pdev;
void __iomem *base;
+ int ctx_id;
struct clk *dpll4_m4_ck;
+ struct clk *dss_ick;
+ struct clk *dss1_fck;
+ struct clk *dss2_fck;
+ struct clk *dss_54m_fck;
+ struct clk *dss_96m_fck;
+ unsigned num_clks_enabled;
unsigned long cache_req_pck;
unsigned long cache_prate;
@@ -75,6 +83,11 @@ static struct {
u32 ctx[DSS_SZ_REGS / sizeof(u32)];
} dss;
+static void dss_clk_enable_all_no_ctx(void);
+static void dss_clk_disable_all_no_ctx(void);
+static void dss_clk_enable_no_ctx(enum dss_clock clks);
+static void dss_clk_disable_no_ctx(enum dss_clock clks);
+
static int _omap_dss_wait_reset(void);
static inline void dss_write_reg(const struct dss_reg idx, u32 val)
@@ -640,6 +653,301 @@ static void dss_exit(void)
iounmap(dss.base);
}
+/* CONTEXT */
+static int dss_get_ctx_id(void)
+{
+ struct omap_display_platform_data *pdata = dss.pdev->dev.platform_data;
+ int r;
+
+ if (!pdata->board_data->get_last_off_on_transaction_id)
+ return 0;
+ r = pdata->board_data->get_last_off_on_transaction_id(&dss.pdev->dev);
+ if (r < 0) {
+ dev_err(&dss.pdev->dev, "getting transaction ID failed, "
+ "will force context restore\n");
+ r = -1;
+ }
+ return r;
+}
+
+int dss_need_ctx_restore(void)
+{
+ int id = dss_get_ctx_id();
+
+ if (id < 0 || id != dss.ctx_id) {
+ DSSDBG("ctx id %d -> id %d\n",
+ dss.ctx_id, id);
+ dss.ctx_id = id;
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+static void save_all_ctx(void)
+{
+ DSSDBG("save context\n");
+
+ dss_clk_enable_no_ctx(DSS_CLK_ICK | DSS_CLK_FCK1);
+
+ dss_save_context();
+ dispc_save_context();
+#ifdef CONFIG_OMAP2_DSS_DSI
+ dsi_save_context();
+#endif
+
+ dss_clk_disable_no_ctx(DSS_CLK_ICK | DSS_CLK_FCK1);
+}
+
+static void restore_all_ctx(void)
+{
+ DSSDBG("restore context\n");
+
+ dss_clk_enable_all_no_ctx();
+
+ dss_restore_context();
+ dispc_restore_context();
+#ifdef CONFIG_OMAP2_DSS_DSI
+ dsi_restore_context();
+#endif
+
+ dss_clk_disable_all_no_ctx();
+}
+
+static int dss_get_clock(struct clk **clock, const char *clk_name)
+{
+ struct clk *clk;
+
+ clk = clk_get(&dss.pdev->dev, clk_name);
+
+ if (IS_ERR(clk)) {
+ DSSERR("can't get clock %s", clk_name);
+ return PTR_ERR(clk);
+ }
+
+ *clock = clk;
+
+ DSSDBG("clk %s, rate %ld\n", clk_name, clk_get_rate(clk));
+
+ return 0;
+}
+
+static int dss_get_clocks(void)
+{
+ int r;
+
+ dss.dss_ick = NULL;
+ dss.dss1_fck = NULL;
+ dss.dss2_fck = NULL;
+ dss.dss_54m_fck = NULL;
+ dss.dss_96m_fck = NULL;
+
+ r = dss_get_clock(&dss.dss_ick, "ick");
+ if (r)
+ goto err;
+
+ r = dss_get_clock(&dss.dss1_fck, "dss1_fck");
+ if (r)
+ goto err;
+
+ r = dss_get_clock(&dss.dss2_fck, "dss2_fck");
+ if (r)
+ goto err;
+
+ r = dss_get_clock(&dss.dss_54m_fck, "tv_fck");
+ if (r)
+ goto err;
+
+ r = dss_get_clock(&dss.dss_96m_fck, "video_fck");
+ if (r)
+ goto err;
+
+ return 0;
+
+err:
+ if (dss.dss_ick)
+ clk_put(dss.dss_ick);
+ if (dss.dss1_fck)
+ clk_put(dss.dss1_fck);
+ if (dss.dss2_fck)
+ clk_put(dss.dss2_fck);
+ if (dss.dss_54m_fck)
+ clk_put(dss.dss_54m_fck);
+ if (dss.dss_96m_fck)
+ clk_put(dss.dss_96m_fck);
+
+ return r;
+}
+
+static void dss_put_clocks(void)
+{
+ if (dss.dss_96m_fck)
+ clk_put(dss.dss_96m_fck);
+ clk_put(dss.dss_54m_fck);
+ clk_put(dss.dss1_fck);
+ clk_put(dss.dss2_fck);
+ clk_put(dss.dss_ick);
+}
+
+unsigned long dss_clk_get_rate(enum dss_clock clk)
+{
+ switch (clk) {
+ case DSS_CLK_ICK:
+ return clk_get_rate(dss.dss_ick);
+ case DSS_CLK_FCK1:
+ return clk_get_rate(dss.dss1_fck);
+ case DSS_CLK_FCK2:
+ return clk_get_rate(dss.dss2_fck);
+ case DSS_CLK_54M:
+ return clk_get_rate(dss.dss_54m_fck);
+ case DSS_CLK_96M:
+ return clk_get_rate(dss.dss_96m_fck);
+ }
+
+ BUG();
+ return 0;
+}
+
+static unsigned count_clk_bits(enum dss_clock clks)
+{
+ unsigned num_clks = 0;
+
+ if (clks & DSS_CLK_ICK)
+ ++num_clks;
+ if (clks & DSS_CLK_FCK1)
+ ++num_clks;
+ if (clks & DSS_CLK_FCK2)
+ ++num_clks;
+ if (clks & DSS_CLK_54M)
+ ++num_clks;
+ if (clks & DSS_CLK_96M)
+ ++num_clks;
+
+ return num_clks;
+}
+
+static void dss_clk_enable_no_ctx(enum dss_clock clks)
+{
+ unsigned num_clks = count_clk_bits(clks);
+
+ if (clks & DSS_CLK_ICK)
+ clk_enable(dss.dss_ick);
+ if (clks & DSS_CLK_FCK1)
+ clk_enable(dss.dss1_fck);
+ if (clks & DSS_CLK_FCK2)
+ clk_enable(dss.dss2_fck);
+ if (clks & DSS_CLK_54M)
+ clk_enable(dss.dss_54m_fck);
+ if (clks & DSS_CLK_96M)
+ clk_enable(dss.dss_96m_fck);
+
+ dss.num_clks_enabled += num_clks;
+}
+
+void dss_clk_enable(enum dss_clock clks)
+{
+ bool check_ctx = dss.num_clks_enabled == 0;
+
+ dss_clk_enable_no_ctx(clks);
+
+ if (check_ctx && cpu_is_omap34xx() && dss_need_ctx_restore())
+ restore_all_ctx();
+}
+
+static void dss_clk_disable_no_ctx(enum dss_clock clks)
+{
+ unsigned num_clks = count_clk_bits(clks);
+
+ if (clks & DSS_CLK_ICK)
+ clk_disable(dss.dss_ick);
+ if (clks & DSS_CLK_FCK1)
+ clk_disable(dss.dss1_fck);
+ if (clks & DSS_CLK_FCK2)
+ clk_disable(dss.dss2_fck);
+ if (clks & DSS_CLK_54M)
+ clk_disable(dss.dss_54m_fck);
+ if (clks & DSS_CLK_96M)
+ clk_disable(dss.dss_96m_fck);
+
+ dss.num_clks_enabled -= num_clks;
+}
+
+void dss_clk_disable(enum dss_clock clks)
+{
+ if (cpu_is_omap34xx()) {
+ unsigned num_clks = count_clk_bits(clks);
+
+ BUG_ON(dss.num_clks_enabled < num_clks);
+
+ if (dss.num_clks_enabled == num_clks)
+ save_all_ctx();
+ }
+
+ dss_clk_disable_no_ctx(clks);
+}
+
+static void dss_clk_enable_all_no_ctx(void)
+{
+ enum dss_clock clks;
+
+ clks = DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_FCK2 | DSS_CLK_54M;
+ if (cpu_is_omap34xx())
+ clks |= DSS_CLK_96M;
+ dss_clk_enable_no_ctx(clks);
+}
+
+static void dss_clk_disable_all_no_ctx(void)
+{
+ enum dss_clock clks;
+
+ clks = DSS_CLK_ICK | DSS_CLK_FCK1 | DSS_CLK_FCK2 | DSS_CLK_54M;
+ if (cpu_is_omap34xx())
+ clks |= DSS_CLK_96M;
+ dss_clk_disable_no_ctx(clks);
+}
+
+#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
+/* CLOCKS */
+static void core_dump_clocks(struct seq_file *s)
+{
+ int i;
+ struct clk *clocks[5] = {
+ dss.dss_ick,
+ dss.dss1_fck,
+ dss.dss2_fck,
+ dss.dss_54m_fck,
+ dss.dss_96m_fck
+ };
+
+ seq_printf(s, "- CORE -\n");
+
+ seq_printf(s, "internal clk count\t\t%u\n", dss.num_clks_enabled);
+
+ for (i = 0; i < 5; i++) {
+ if (!clocks[i])
+ continue;
+ seq_printf(s, "%-15s\t%lu\t%d\n",
+ clocks[i]->name,
+ clk_get_rate(clocks[i]),
+ clocks[i]->usecount);
+ }
+}
+#endif /* defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT) */
+
+/* DEBUGFS */
+#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
+void dss_debug_dump_clocks(struct seq_file *s)
+{
+ core_dump_clocks(s);
+ dss_dump_clocks(s);
+ dispc_dump_clocks(s);
+#ifdef CONFIG_OMAP2_DSS_DSI
+ dsi_dump_clocks(s);
+#endif
+}
+#endif
+
+
/* DSS HW IP initialisation */
static int omap_dsshw_probe(struct platform_device *pdev)
{
@@ -648,6 +956,15 @@ static int omap_dsshw_probe(struct platform_device *pdev)
dss.pdev = pdev;
+ r = dss_get_clocks();
+ if (r)
+ goto err_clocks;
+
+ dss_clk_enable_all_no_ctx();
+
+ dss.ctx_id = dss_get_ctx_id();
+ DSSDBG("initial ctx id %u\n", dss.ctx_id);
+
#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
/* DISPC_CONTROL */
if (omap_readl(0x48050440) & 1) /* LCD enabled? */
@@ -660,15 +977,62 @@ static int omap_dsshw_probe(struct platform_device *pdev)
goto err_dss;
}
-err_dss:
+ dss_clk_disable_all_no_ctx();
+ return 0;
+err_dss:
+ dss_clk_disable_all_no_ctx();
+ dss_put_clocks();
+err_clocks:
return r;
}
static int omap_dsshw_remove(struct platform_device *pdev)
{
+ int c;
+
dss_exit();
+ /* these should be removed at some point */
+ c = dss.dss_ick->usecount;
+ if (c > 0) {
+ DSSERR("warning: dss_ick usecount %d, disabling\n", c);
+ while (c-- > 0)
+ clk_disable(dss.dss_ick);
+ }
+
+ c = dss.dss1_fck->usecount;
+ if (c > 0) {
+ DSSERR("warning: dss1_fck usecount %d, disabling\n", c);
+ while (c-- > 0)
+ clk_disable(dss.dss1_fck);
+ }
+
+ c = dss.dss2_fck->usecount;
+ if (c > 0) {
+ DSSERR("warning: dss2_fck usecount %d, disabling\n", c);
+ while (c-- > 0)
+ clk_disable(dss.dss2_fck);
+ }
+
+ c = dss.dss_54m_fck->usecount;
+ if (c > 0) {
+ DSSERR("warning: dss_54m_fck usecount %d, disabling\n", c);
+ while (c-- > 0)
+ clk_disable(dss.dss_54m_fck);
+ }
+
+ if (dss.dss_96m_fck) {
+ c = dss.dss_96m_fck->usecount;
+ if (c > 0) {
+ DSSERR("warning: dss_96m_fck usecount %d, disabling\n",
+ c);
+ while (c-- > 0)
+ clk_disable(dss.dss_96m_fck);
+ }
+ }
+
+ dss_put_clocks();
return 0;
}
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 50b4223..7c6bff5 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -169,11 +169,6 @@ struct seq_file;
struct platform_device;
/* core */
-void dss_clk_enable(enum dss_clock clks);
-void dss_clk_disable(enum dss_clock clks);
-unsigned long dss_clk_get_rate(enum dss_clock clk);
-int dss_need_ctx_restore(void);
-void dss_dump_clocks(struct seq_file *s);
struct bus_type *dss_get_bus(void);
struct regulator *dss_get_vdds_dsi(void);
struct regulator *dss_get_vdds_sdi(void);
@@ -219,8 +214,16 @@ void dss_deinit_platform_driver(void);
void dss_save_context(void);
void dss_restore_context(void);
+void dss_clk_enable(enum dss_clock clks);
+void dss_clk_disable(enum dss_clock clks);
+unsigned long dss_clk_get_rate(enum dss_clock clk);
+int dss_need_ctx_restore(void);
+void dss_dump_clocks(struct seq_file *s);
void dss_dump_regs(struct seq_file *s);
+#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
+void dss_debug_dump_clocks(struct seq_file *s);
+#endif
void dss_sdi_init(u8 datapairs);
int dss_sdi_enable(void);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 11/17] OMAP2,3: DSS2: RFBI: create platform_driver, move init,exit to driver
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (9 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 10/17] OMAP2,3: DSS2: Move clocks from core driver to dss driver Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 12/17] OMAP2,3: DSS2: DISPC: " Sumit Semwal
` (6 subsequent siblings)
17 siblings, 0 replies; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy, Sumit Semwal
From: Senthilvadivu Guruswamy <svadivu@ti.com>
Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
So a platform_driver for RFBI is created and init exit methods are moved from core.c
to its driver probe,remove. pdev member has to be maintained by its own drivers.
RFBI platform driver is registered from inside omap_dss_probe, in the order desired.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
---
drivers/video/omap2/dss/core.c | 8 ++--
drivers/video/omap2/dss/dss.h | 8 ++--
drivers/video/omap2/dss/rfbi.c | 110 ++++++++++++++++++++++++----------------
3 files changed, 74 insertions(+), 52 deletions(-)
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 1ba4c81..2ad7351 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -201,9 +201,9 @@ static int omap_dss_probe(struct platform_device *pdev)
/* keep clocks enabled to prevent context saves/restores during init */
dss_clk_enable(DSS_CLK_ICK | DSS_CLK_FCK1);
- r = rfbi_init();
+ r = rfbi_init_platform_driver();
if (r) {
- DSSERR("Failed to initialize rfbi\n");
+ DSSERR("Failed to initialize rfbi platform driver\n");
goto err_rfbi;
}
@@ -285,7 +285,7 @@ err_venc:
err_dispc:
dpi_exit();
err_dpi:
- rfbi_exit();
+ rfbi_deinit_platform_driver();
err_rfbi:
dss_deinit_platform_driver();
err_dss:
@@ -303,7 +303,7 @@ static int omap_dss_remove(struct platform_device *pdev)
venc_exit();
dispc_exit();
dpi_exit();
- rfbi_exit();
+ rfbi_deinit_platform_driver();
if (cpu_is_omap34xx()) {
dsi_exit();
sdi_exit();
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 7c6bff5..665ad58 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -421,8 +421,8 @@ static inline void venc_exit(void)
/* RFBI */
#ifdef CONFIG_OMAP2_DSS_RFBI
-int rfbi_init(void);
-void rfbi_exit(void);
+int rfbi_init_platform_driver(void);
+void rfbi_deinit_platform_driver(void);
void rfbi_dump_regs(struct seq_file *s);
int rfbi_configure(int rfbi_module, int bpp, int lines);
@@ -433,11 +433,11 @@ void rfbi_set_timings(int rfbi_module, struct rfbi_timings *t);
unsigned long rfbi_get_max_tx_rate(void);
int rfbi_init_display(struct omap_dss_device *display);
#else
-static inline int rfbi_init(void)
+static inline int rfbi_init_platform_driver(void)
{
return 0;
}
-static inline void rfbi_exit(void)
+static inline void rfbi_deinit_platform_driver(void)
{
}
#endif
diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
index bbe6246..52bfb1c 100644
--- a/drivers/video/omap2/dss/rfbi.c
+++ b/drivers/video/omap2/dss/rfbi.c
@@ -100,6 +100,7 @@ static int rfbi_convert_timings(struct rfbi_timings *t);
static void rfbi_get_clk_info(u32 *clk_period, u32 *max_clk_div);
static struct {
+ struct platform_device *pdev;
void __iomem *base;
unsigned long l4_khz;
@@ -957,50 +958,6 @@ void rfbi_dump_regs(struct seq_file *s)
#undef DUMPREG
}
-int rfbi_init(void)
-{
- u32 rev;
- u32 l;
-
- spin_lock_init(&rfbi.cmd_lock);
-
- init_completion(&rfbi.cmd_done);
- atomic_set(&rfbi.cmd_fifo_full, 0);
- atomic_set(&rfbi.cmd_pending, 0);
-
- rfbi.base = ioremap(RFBI_BASE, SZ_256);
- if (!rfbi.base) {
- DSSERR("can't ioremap RFBI\n");
- return -ENOMEM;
- }
-
- rfbi_enable_clocks(1);
-
- msleep(10);
-
- rfbi.l4_khz = dss_clk_get_rate(DSS_CLK_ICK) / 1000;
-
- /* Enable autoidle and smart-idle */
- l = rfbi_read_reg(RFBI_SYSCONFIG);
- l |= (1 << 0) | (2 << 3);
- rfbi_write_reg(RFBI_SYSCONFIG, l);
-
- rev = rfbi_read_reg(RFBI_REVISION);
- printk(KERN_INFO "OMAP RFBI rev %d.%d\n",
- FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
-
- rfbi_enable_clocks(0);
-
- return 0;
-}
-
-void rfbi_exit(void)
-{
- DSSDBG("rfbi_exit\n");
-
- iounmap(rfbi.base);
-}
-
int omapdss_rfbi_display_enable(struct omap_dss_device *dssdev)
{
int r;
@@ -1054,3 +1011,68 @@ int rfbi_init_display(struct omap_dss_device *dssdev)
dssdev->caps = OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE;
return 0;
}
+
+/* RFBI HW IP initialisation */
+static int omap_rfbihw_probe(struct platform_device *pdev)
+{
+ u32 rev;
+ u32 l;
+
+ rfbi.pdev = pdev;
+
+ spin_lock_init(&rfbi.cmd_lock);
+
+ init_completion(&rfbi.cmd_done);
+ atomic_set(&rfbi.cmd_fifo_full, 0);
+ atomic_set(&rfbi.cmd_pending, 0);
+
+ rfbi.base = ioremap(RFBI_BASE, SZ_256);
+ if (!rfbi.base) {
+ DSSERR("can't ioremap RFBI\n");
+ return -ENOMEM;
+ }
+
+ rfbi_enable_clocks(1);
+
+ msleep(10);
+
+ rfbi.l4_khz = dss_clk_get_rate(DSS_CLK_ICK) / 1000;
+
+ /* Enable autoidle and smart-idle */
+ l = rfbi_read_reg(RFBI_SYSCONFIG);
+ l |= (1 << 0) | (2 << 3);
+ rfbi_write_reg(RFBI_SYSCONFIG, l);
+
+ rev = rfbi_read_reg(RFBI_REVISION);
+ printk(KERN_INFO "OMAP RFBI rev %d.%d\n",
+ FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
+
+ rfbi_enable_clocks(0);
+
+ return 0;
+}
+
+static int omap_rfbihw_remove(struct platform_device *pdev)
+{
+ iounmap(rfbi.base);
+ return 0;
+}
+
+static struct platform_driver omap_rfbihw_driver = {
+ .probe = omap_rfbihw_probe,
+ .remove = omap_rfbihw_remove,
+ .driver = {
+ .name = "omap_rfbi",
+ .owner = THIS_MODULE,
+ },
+};
+
+int rfbi_init_platform_driver(void)
+{
+ return platform_driver_register(&omap_rfbihw_driver);
+}
+
+void rfbi_deinit_platform_driver(void)
+{
+ return platform_driver_unregister(&omap_rfbihw_driver);
+}
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 12/17] OMAP2,3: DSS2: DISPC: create platform_driver, move init,exit to driver
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (10 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 11/17] OMAP2,3: DSS2: RFBI: create platform_driver, move init,exit to driver Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 13/17] OMAP2,3: DSS2: VENC: " Sumit Semwal
` (5 subsequent siblings)
17 siblings, 0 replies; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy, Sumit Semwal
From: Senthilvadivu Guruswamy <svadivu@ti.com>
Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
So a platform_driver for DISPC is created and init exit methods are moved from core.c
to its driver probe,remove. pdev member has to be maintained by its own drivers.
DISPC platform driver is registered from inside omap_dss_probe, in the order desired.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
---
drivers/video/omap2/dss/core.c | 8 ++--
drivers/video/omap2/dss/dispc.c | 105 ++++++++++++++++++++++++---------------
drivers/video/omap2/dss/dss.h | 4 +-
3 files changed, 70 insertions(+), 47 deletions(-)
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 2ad7351..ace869e 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -213,9 +213,9 @@ static int omap_dss_probe(struct platform_device *pdev)
goto err_dpi;
}
- r = dispc_init();
+ r = dispc_init_platform_driver();
if (r) {
- DSSERR("Failed to initialize dispc\n");
+ DSSERR("Failed to initialize dispc platform driver\n");
goto err_dispc;
}
@@ -281,7 +281,7 @@ err_dsi:
err_sdi:
venc_exit();
err_venc:
- dispc_exit();
+ dispc_deinit_platform_driver();
err_dispc:
dpi_exit();
err_dpi:
@@ -301,7 +301,7 @@ static int omap_dss_remove(struct platform_device *pdev)
dss_uninitialize_debugfs();
venc_exit();
- dispc_exit();
+ dispc_deinit_platform_driver();
dpi_exit();
rfbi_deinit_platform_driver();
if (cpu_is_omap34xx()) {
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index fa40fa5..e19c4cd 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -173,6 +173,7 @@ struct dispc_irq_stats {
};
static struct {
+ struct platform_device *pdev;
void __iomem *base;
u32 fifo_size[3];
@@ -3079,47 +3080,6 @@ static void _omap_dispc_initial_config(void)
dispc_read_plane_fifo_sizes();
}
-int dispc_init(void)
-{
- u32 rev;
-
- spin_lock_init(&dispc.irq_lock);
-
-#ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
- spin_lock_init(&dispc.irq_stats_lock);
- dispc.irq_stats.last_reset = jiffies;
-#endif
-
- INIT_WORK(&dispc.error_work, dispc_error_worker);
-
- dispc.base = ioremap(DISPC_BASE, DISPC_SZ_REGS);
- if (!dispc.base) {
- DSSERR("can't ioremap DISPC\n");
- return -ENOMEM;
- }
-
- enable_clocks(1);
-
- _omap_dispc_initial_config();
-
- _omap_dispc_initialize_irq();
-
- dispc_save_context();
-
- rev = dispc_read_reg(DISPC_REVISION);
- printk(KERN_INFO "OMAP DISPC rev %d.%d\n",
- FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
-
- enable_clocks(0);
-
- return 0;
-}
-
-void dispc_exit(void)
-{
- iounmap(dispc.base);
-}
-
int dispc_enable_plane(enum omap_plane plane, bool enable)
{
DSSDBG("dispc_enable_plane %d, %d\n", plane, enable);
@@ -3167,3 +3127,66 @@ int dispc_setup_plane(enum omap_plane plane,
return r;
}
+
+/* DISPC HW IP initialisation */
+static int omap_dispchw_probe(struct platform_device *pdev)
+{
+ u32 rev;
+ dispc.pdev = pdev;
+
+ spin_lock_init(&dispc.irq_lock);
+
+#ifdef CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS
+ spin_lock_init(&dispc.irq_stats_lock);
+ dispc.irq_stats.last_reset = jiffies;
+#endif
+
+ INIT_WORK(&dispc.error_work, dispc_error_worker);
+
+ dispc.base = ioremap(DISPC_BASE, DISPC_SZ_REGS);
+ if (!dispc.base) {
+ DSSERR("can't ioremap DISPC\n");
+ return -ENOMEM;
+ }
+
+ enable_clocks(1);
+
+ _omap_dispc_initial_config();
+
+ _omap_dispc_initialize_irq();
+
+ dispc_save_context();
+
+ rev = dispc_read_reg(DISPC_REVISION);
+ printk(KERN_INFO "OMAP DISPC rev %d.%d\n",
+ FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
+
+ enable_clocks(0);
+
+ return 0;
+}
+
+static int omap_dispchw_remove(struct platform_device *pdev)
+{
+ iounmap(dispc.base);
+ return 0;
+}
+
+static struct platform_driver omap_dispchw_driver = {
+ .probe = omap_dispchw_probe,
+ .remove = omap_dispchw_remove,
+ .driver = {
+ .name = "omap_dispc",
+ .owner = THIS_MODULE,
+ },
+};
+
+int dispc_init_platform_driver(void)
+{
+ return platform_driver_register(&omap_dispchw_driver);
+}
+
+void dispc_deinit_platform_driver(void)
+{
+ return platform_driver_unregister(&omap_dispchw_driver);
+}
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 665ad58..90048b9 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -319,8 +319,8 @@ static inline void dpi_exit(void)
#endif
/* DISPC */
-int dispc_init(void);
-void dispc_exit(void);
+int dispc_init_platform_driver(void);
+void dispc_deinit_platform_driver(void);
void dispc_dump_clocks(struct seq_file *s);
void dispc_dump_irqs(struct seq_file *s);
void dispc_dump_regs(struct seq_file *s);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 13/17] OMAP2,3: DSS2: VENC: create platform_driver, move init,exit to driver
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (11 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 12/17] OMAP2,3: DSS2: DISPC: " Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 14/17] OMAP2,3: DSS2: DSI: " Sumit Semwal
` (4 subsequent siblings)
17 siblings, 0 replies; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy, Sumit Semwal
From: Senthilvadivu Guruswamy <svadivu@ti.com>
Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
So a platform_driver for VENC is created and init exit methods are moved from core.c
to its driver probe,remove. pdev member has to be maintained by its own drivers.
Also, venc_vdda_dac reading is moved to venc.c.
VENC platform driver is registered from inside omap_dss_probe, in the order desired.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
---
arch/arm/mach-omap2/board-3430sdp.c | 2 +-
drivers/video/omap2/dss/core.c | 28 +-------
drivers/video/omap2/dss/dss.h | 9 +--
drivers/video/omap2/dss/venc.c | 116 +++++++++++++++++++++++------------
4 files changed, 85 insertions(+), 70 deletions(-)
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index e1a3318..83baba7 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -302,7 +302,7 @@ static struct omap_dss_board_info sdp3430_dss_data = {
};
static struct regulator_consumer_supply sdp3430_vdda_dac_supply =
- REGULATOR_SUPPLY("vdda_dac", "omap_display");
+ REGULATOR_SUPPLY("vdda_dac", "omap_venc");
static struct omap_board_config_kernel sdp3430_config[] __initdata = {
};
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index ace869e..5314593 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -43,7 +43,6 @@ static struct {
struct regulator *vdds_dsi_reg;
struct regulator *vdds_sdi_reg;
- struct regulator *vdda_dac_reg;
} core;
static char *def_disp_name;
@@ -85,20 +84,6 @@ struct regulator *dss_get_vdds_sdi(void)
return reg;
}
-struct regulator *dss_get_vdda_dac(void)
-{
- struct regulator *reg;
-
- if (core.vdda_dac_reg != NULL)
- return core.vdda_dac_reg;
-
- reg = regulator_get(&core.pdev->dev, "vdda_dac");
- if (!IS_ERR(reg))
- core.vdda_dac_reg = reg;
-
- return reg;
-}
-
#if defined(CONFIG_DEBUG_FS) && defined(CONFIG_OMAP2_DSS_DEBUG_SUPPORT)
static int dss_debug_show(struct seq_file *s, void *unused)
{
@@ -219,9 +204,9 @@ static int omap_dss_probe(struct platform_device *pdev)
goto err_dispc;
}
- r = venc_init(pdev);
+ r = venc_init_platform_driver();
if (r) {
- DSSERR("Failed to initialize venc\n");
+ DSSERR("Failed to initialize venc platform driver\n");
goto err_venc;
}
@@ -279,7 +264,7 @@ err_dsi:
if (cpu_is_omap34xx())
sdi_exit();
err_sdi:
- venc_exit();
+ venc_deinit_platform_driver();
err_venc:
dispc_deinit_platform_driver();
err_dispc:
@@ -300,7 +285,7 @@ static int omap_dss_remove(struct platform_device *pdev)
dss_uninitialize_debugfs();
- venc_exit();
+ venc_deinit_platform_driver();
dispc_deinit_platform_driver();
dpi_exit();
rfbi_deinit_platform_driver();
@@ -597,11 +582,6 @@ static void __exit omap_dss_exit(void)
core.vdds_sdi_reg = NULL;
}
- if (core.vdda_dac_reg != NULL) {
- regulator_put(core.vdda_dac_reg);
- core.vdda_dac_reg = NULL;
- }
-
platform_driver_unregister(&omap_dss_driver);
omap_dss_bus_unregister();
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index 90048b9..c1ab6c6 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -172,7 +172,6 @@ struct platform_device;
struct bus_type *dss_get_bus(void);
struct regulator *dss_get_vdds_dsi(void);
struct regulator *dss_get_vdds_sdi(void);
-struct regulator *dss_get_vdda_dac(void);
/* display */
int dss_suspend_all_devices(void);
@@ -405,16 +404,16 @@ int dispc_get_clock_div(struct dispc_clock_info *cinfo);
/* VENC */
#ifdef CONFIG_OMAP2_DSS_VENC
-int venc_init(struct platform_device *pdev);
-void venc_exit(void);
+int venc_init_platform_driver(void);
+void venc_deinit_platform_driver(void);
void venc_dump_regs(struct seq_file *s);
int venc_init_display(struct omap_dss_device *display);
#else
-static inline int venc_init(struct platform_device *pdev)
+static inline int venc_init_platform_driver(void)
{
return 0;
}
-static inline void venc_exit(void)
+static inline void venc_deinit_platform_driver(void)
{
}
#endif
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index eff3505..029fbc3 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -289,6 +289,7 @@ const struct omap_video_timings omap_dss_ntsc_timings = {
EXPORT_SYMBOL(omap_dss_ntsc_timings);
static struct {
+ struct platform_device *pdev;
void __iomem *base;
struct mutex venc_lock;
u32 wss_data;
@@ -306,6 +307,17 @@ static inline u32 venc_read_reg(int idx)
return l;
}
+static struct regulator *venc_get_vdda_dac(void)
+{
+ struct regulator *reg;
+
+ reg = regulator_get(&venc.pdev->dev, "vdda_dac");
+ if (!IS_ERR(reg))
+ venc.vdda_dac_reg = reg;
+
+ return reg;
+}
+
static void venc_write_config(const struct venc_config *config)
{
DSSDBG("write venc conf\n");
@@ -641,46 +653,6 @@ static struct omap_dss_driver venc_driver = {
};
/* driver end */
-
-
-int venc_init(struct platform_device *pdev)
-{
- u8 rev_id;
-
- mutex_init(&venc.venc_lock);
-
- venc.wss_data = 0;
-
- venc.base = ioremap(VENC_BASE, SZ_1K);
- if (!venc.base) {
- DSSERR("can't ioremap VENC\n");
- return -ENOMEM;
- }
-
- venc.vdda_dac_reg = dss_get_vdda_dac();
- if (IS_ERR(venc.vdda_dac_reg)) {
- iounmap(venc.base);
- DSSERR("can't get VDDA_DAC regulator\n");
- return PTR_ERR(venc.vdda_dac_reg);
- }
-
- venc_enable_clocks(1);
-
- rev_id = (u8)(venc_read_reg(VENC_REV_ID) & 0xff);
- printk(KERN_INFO "OMAP VENC rev %d\n", rev_id);
-
- venc_enable_clocks(0);
-
- return omap_dss_register_driver(&venc_driver);
-}
-
-void venc_exit(void)
-{
- omap_dss_unregister_driver(&venc_driver);
-
- iounmap(venc.base);
-}
-
int venc_init_display(struct omap_dss_device *dssdev)
{
DSSDBG("init_display\n");
@@ -740,3 +712,67 @@ void venc_dump_regs(struct seq_file *s)
#undef DUMPREG
}
+
+/* VENC HW IP initialisation */
+static int omap_venchw_probe(struct platform_device *pdev)
+{
+ u8 rev_id;
+ venc.pdev = pdev;
+
+ mutex_init(&venc.venc_lock);
+
+ venc.wss_data = 0;
+
+ venc.base = ioremap(VENC_BASE, SZ_1K);
+ if (!venc.base) {
+ DSSERR("can't ioremap VENC\n");
+ return -ENOMEM;
+ }
+
+ venc.vdda_dac_reg = venc_get_vdda_dac();
+ if (IS_ERR(venc.vdda_dac_reg)) {
+ iounmap(venc.base);
+ DSSERR("can't get VDDA_DAC regulator\n");
+ return PTR_ERR(venc.vdda_dac_reg);
+ }
+
+ venc_enable_clocks(1);
+
+ rev_id = (u8)(venc_read_reg(VENC_REV_ID) & 0xff);
+ printk(KERN_INFO "OMAP VENC rev %d\n", rev_id);
+
+ venc_enable_clocks(0);
+
+ return omap_dss_register_driver(&venc_driver);
+}
+
+static int omap_venchw_remove(struct platform_device *pdev)
+{
+ if (venc.vdda_dac_reg != NULL) {
+ regulator_put(venc.vdda_dac_reg);
+ venc.vdda_dac_reg = NULL;
+ }
+ omap_dss_unregister_driver(&venc_driver);
+
+ iounmap(venc.base);
+ return 0;
+}
+
+static struct platform_driver omap_venchw_driver = {
+ .probe = omap_venchw_probe,
+ .remove = omap_venchw_remove,
+ .driver = {
+ .name = "omap_venc",
+ .owner = THIS_MODULE,
+ },
+};
+
+int venc_init_platform_driver(void)
+{
+ return platform_driver_register(&omap_venchw_driver);
+}
+
+void venc_deinit_platform_driver(void)
+{
+ return platform_driver_unregister(&omap_venchw_driver);
+}
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 14/17] OMAP2,3: DSS2: DSI: create platform_driver, move init,exit to driver
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (12 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 13/17] OMAP2,3: DSS2: VENC: " Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 15/17] OMAP2,3: DSS2: replace printk with dev_dbg in init Sumit Semwal
` (3 subsequent siblings)
17 siblings, 0 replies; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy, Sumit Semwal
From: Senthilvadivu Guruswamy <svadivu@ti.com>
Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
So a platform_driver for DSI is created and init exit methods are moved from core.c
to its driver probe,remove. pdev member has to be maintained by its own drivers.
Also, vdds_dsi regulator handling is copied to dsi.c.
DSI platform driver is registered from inside omap_dss_probe, in the order desired.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
---
arch/arm/mach-omap2/board-3430sdp.c | 1 +
drivers/video/omap2/dss/core.c | 8 ++--
drivers/video/omap2/dss/dsi.c | 64 +++++++++++++++++++++++++++++++++--
drivers/video/omap2/dss/dss.h | 8 ++--
4 files changed, 70 insertions(+), 11 deletions(-)
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index 83baba7..88f5b01 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -527,6 +527,7 @@ static struct regulator_init_data sdp3430_vdac = {
/* VPLL2 for digital video outputs */
static struct regulator_consumer_supply sdp3430_vpll2_supplies[] = {
REGULATOR_SUPPLY("vdds_dsi", "omap_display"),
+ REGULATOR_SUPPLY("vdds_dsi", "omap_dsi1"),
};
static struct regulator_init_data sdp3430_vpll2 = {
diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
index 5314593..afc0f3b 100644
--- a/drivers/video/omap2/dss/core.c
+++ b/drivers/video/omap2/dss/core.c
@@ -222,9 +222,9 @@ static int omap_dss_probe(struct platform_device *pdev)
goto err_sdi;
}
- r = dsi_init(pdev);
+ r = dsi_init_platform_driver();
if (r) {
- DSSERR("Failed to initialize DSI\n");
+ DSSERR("Failed to initialize DSI platform driver\n");
goto err_dsi;
}
}
@@ -259,7 +259,7 @@ err_register:
dss_uninitialize_debugfs();
err_debugfs:
if (cpu_is_omap34xx())
- dsi_exit();
+ dsi_deinit_platform_driver();
err_dsi:
if (cpu_is_omap34xx())
sdi_exit();
@@ -290,7 +290,7 @@ static int omap_dss_remove(struct platform_device *pdev)
dpi_exit();
rfbi_deinit_platform_driver();
if (cpu_is_omap34xx()) {
- dsi_exit();
+ dsi_deinit_platform_driver();
sdi_exit();
}
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index aa4f7a5..411d0c6 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -222,6 +222,7 @@ struct dsi_irq_stats {
static struct
{
+ struct platform_device *pdev;
void __iomem *base;
struct dsi_clock_info current_cinfo;
@@ -292,6 +293,20 @@ static inline u32 dsi_read_reg(const struct dsi_reg idx)
return __raw_readl(dsi.base + idx.idx);
}
+static struct regulator *dsi_get_vdds_dsi(void)
+{
+ struct regulator *reg;
+
+ if (dsi.vdds_dsi_reg != NULL)
+ return dsi.vdds_dsi_reg;
+
+ reg = regulator_get(&dsi.pdev->dev, "vdds_dsi");
+ if (!IS_ERR(reg))
+ dsi.vdds_dsi_reg = reg;
+
+ return reg;
+}
+
void dsi_save_context(void)
{
@@ -3235,7 +3250,7 @@ void dsi_wait_dsi2_pll_active(void)
DSSERR("DSI2 PLL clock not active\n");
}
-int dsi_init(struct platform_device *pdev)
+static int dsi_init(struct platform_device *pdev)
{
u32 rev;
int r;
@@ -3272,7 +3287,7 @@ int dsi_init(struct platform_device *pdev)
goto err1;
}
- dsi.vdds_dsi_reg = dss_get_vdds_dsi();
+ dsi.vdds_dsi_reg = dsi_get_vdds_dsi();
if (IS_ERR(dsi.vdds_dsi_reg)) {
DSSERR("can't get VDDS_DSI regulator\n");
r = PTR_ERR(dsi.vdds_dsi_reg);
@@ -3295,8 +3310,13 @@ err1:
return r;
}
-void dsi_exit(void)
+static void dsi_exit(void)
{
+ if (dsi.vdds_dsi_reg != NULL) {
+ regulator_put(dsi.vdds_dsi_reg);
+ dsi.vdds_dsi_reg = NULL;
+ }
+
iounmap(dsi.base);
destroy_workqueue(dsi.workqueue);
@@ -3304,3 +3324,41 @@ void dsi_exit(void)
DSSDBG("omap_dsi_exit\n");
}
+/* DSI1 HW IP initialisation */
+static int omap_dsi1hw_probe(struct platform_device *pdev)
+{
+ int r;
+ dsi.pdev = pdev;
+ r = dsi_init(pdev);
+ if (r) {
+ DSSERR("Failed to initialize DSI\n");
+ goto err_dsi;
+ }
+err_dsi:
+ return r;
+}
+
+static int omap_dsi1hw_remove(struct platform_device *pdev)
+{
+ dsi_exit();
+ return 0;
+}
+
+static struct platform_driver omap_dsi1hw_driver = {
+ .probe = omap_dsi1hw_probe,
+ .remove = omap_dsi1hw_remove,
+ .driver = {
+ .name = "omap_dsi1",
+ .owner = THIS_MODULE,
+ },
+};
+
+int dsi_init_platform_driver(void)
+{
+ return platform_driver_register(&omap_dsi1hw_driver);
+}
+
+void dsi_deinit_platform_driver(void)
+{
+ return platform_driver_unregister(&omap_dsi1hw_driver);
+}
diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
index c1ab6c6..9c4ebf4 100644
--- a/drivers/video/omap2/dss/dss.h
+++ b/drivers/video/omap2/dss/dss.h
@@ -261,8 +261,8 @@ static inline void sdi_exit(void)
/* DSI */
#ifdef CONFIG_OMAP2_DSS_DSI
-int dsi_init(struct platform_device *pdev);
-void dsi_exit(void);
+int dsi_init_platform_driver(void);
+void dsi_deinit_platform_driver(void);
void dsi_dump_clocks(struct seq_file *s);
void dsi_dump_irqs(struct seq_file *s);
@@ -287,11 +287,11 @@ void dsi_get_overlay_fifo_thresholds(enum omap_plane plane,
void dsi_wait_dsi1_pll_active(void);
void dsi_wait_dsi2_pll_active(void);
#else
-static inline int dsi_init(struct platform_device *pdev)
+static inline int dsi_init_platform_driver(void)
{
return 0;
}
-static inline void dsi_exit(void)
+static inline void dsi_deinit_platform_driver(void)
{
}
static inline void dsi_wait_dsi1_pll_active(void)
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 15/17] OMAP2,3: DSS2: replace printk with dev_dbg in init
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (13 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 14/17] OMAP2,3: DSS2: DSI: " Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 16/17] OMAP2,3: DSS2: Use platform device to get baseaddr Sumit Semwal
` (2 subsequent siblings)
17 siblings, 0 replies; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap; +Cc: Sumit Semwal
This patch replaces printk's in the init/probe functions to dev_dbg
for boot time optimization.
Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
---
drivers/video/omap2/dss/dispc.c | 2 +-
drivers/video/omap2/dss/dsi.c | 2 +-
drivers/video/omap2/dss/rfbi.c | 2 +-
drivers/video/omap2/dss/venc.c | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index e19c4cd..97dfc84 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -3158,7 +3158,7 @@ static int omap_dispchw_probe(struct platform_device *pdev)
dispc_save_context();
rev = dispc_read_reg(DISPC_REVISION);
- printk(KERN_INFO "OMAP DISPC rev %d.%d\n",
+ dev_dbg(&pdev->dev, "OMAP DISPC rev %d.%d\n",
FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
enable_clocks(0);
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index 411d0c6..cf1a2ad 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -3297,7 +3297,7 @@ static int dsi_init(struct platform_device *pdev)
enable_clocks(1);
rev = dsi_read_reg(DSI_REVISION);
- printk(KERN_INFO "OMAP DSI rev %d.%d\n",
+ dev_dbg(&pdev->dev, "OMAP DSI rev %d.%d\n",
FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
enable_clocks(0);
diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
index 52bfb1c..24936f8 100644
--- a/drivers/video/omap2/dss/rfbi.c
+++ b/drivers/video/omap2/dss/rfbi.c
@@ -1044,7 +1044,7 @@ static int omap_rfbihw_probe(struct platform_device *pdev)
rfbi_write_reg(RFBI_SYSCONFIG, l);
rev = rfbi_read_reg(RFBI_REVISION);
- printk(KERN_INFO "OMAP RFBI rev %d.%d\n",
+ dev_dbg(&pdev->dev, "OMAP RFBI rev %d.%d\n",
FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0));
rfbi_enable_clocks(0);
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index 029fbc3..edccd59 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -739,7 +739,7 @@ static int omap_venchw_probe(struct platform_device *pdev)
venc_enable_clocks(1);
rev_id = (u8)(venc_read_reg(VENC_REV_ID) & 0xff);
- printk(KERN_INFO "OMAP VENC rev %d\n", rev_id);
+ dev_dbg(&pdev->dev, "OMAP VENC rev %d\n", rev_id);
venc_enable_clocks(0);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 16/17] OMAP2,3: DSS2: Use platform device to get baseaddr
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (14 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 15/17] OMAP2,3: DSS2: replace printk with dev_dbg in init Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 17/17] OMAP2,3: DSS2: Get DSS IRQ from platform device Sumit Semwal
2011-01-07 12:56 ` [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Tomi Valkeinen
17 siblings, 0 replies; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy
From: Senthilvadivu Guruswamy <svadivu@ti.com>
DSS, DISPC, DSI, RFBI, VENC baseaddr can be obtained from platform_get_resource().
This API in turn picks the right silicon baseaddr from the hwmod database.
So hardcoding of base addr could be removed.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
---
drivers/video/omap2/dss/dispc.c | 11 ++++++++---
drivers/video/omap2/dss/dsi.c | 12 +++++++++---
drivers/video/omap2/dss/dss.c | 11 ++++++++---
drivers/video/omap2/dss/rfbi.c | 10 +++++++---
drivers/video/omap2/dss/venc.c | 11 ++++++++---
5 files changed, 40 insertions(+), 15 deletions(-)
diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
index 97dfc84..9da59fe 100644
--- a/drivers/video/omap2/dss/dispc.c
+++ b/drivers/video/omap2/dss/dispc.c
@@ -42,8 +42,6 @@
#include "dss_features.h"
/* DISPC */
-#define DISPC_BASE 0x48050400
-
#define DISPC_SZ_REGS SZ_1K
struct dispc_reg { u16 idx; };
@@ -3132,6 +3130,8 @@ int dispc_setup_plane(enum omap_plane plane,
static int omap_dispchw_probe(struct platform_device *pdev)
{
u32 rev;
+ struct resource *dispc_mem;
+
dispc.pdev = pdev;
spin_lock_init(&dispc.irq_lock);
@@ -3143,7 +3143,12 @@ static int omap_dispchw_probe(struct platform_device *pdev)
INIT_WORK(&dispc.error_work, dispc_error_worker);
- dispc.base = ioremap(DISPC_BASE, DISPC_SZ_REGS);
+ dispc_mem = platform_get_resource(dispc.pdev, IORESOURCE_MEM, 0);
+ if (!dispc_mem) {
+ DSSERR("can't get IORESOURCE_MEM DISPC\n");
+ return -EINVAL;
+ }
+ dispc.base = ioremap(dispc_mem->start, resource_size(dispc_mem));
if (!dispc.base) {
DSSERR("can't ioremap DISPC\n");
return -ENOMEM;
diff --git a/drivers/video/omap2/dss/dsi.c b/drivers/video/omap2/dss/dsi.c
index cf1a2ad..74ee776 100644
--- a/drivers/video/omap2/dss/dsi.c
+++ b/drivers/video/omap2/dss/dsi.c
@@ -42,8 +42,6 @@
/*#define VERBOSE_IRQ*/
#define DSI_CATCH_MISSING_TE
-#define DSI_BASE 0x4804FC00
-
struct dsi_reg { u16 idx; };
#define DSI_REG(idx) ((const struct dsi_reg) { idx })
@@ -3254,6 +3252,7 @@ static int dsi_init(struct platform_device *pdev)
{
u32 rev;
int r;
+ struct resource *dsi_mem;
spin_lock_init(&dsi.errors_lock);
dsi.errors = 0;
@@ -3280,7 +3279,13 @@ static int dsi_init(struct platform_device *pdev)
dsi.te_timer.function = dsi_te_timeout;
dsi.te_timer.data = 0;
#endif
- dsi.base = ioremap(DSI_BASE, DSI_SZ_REGS);
+ dsi_mem = platform_get_resource(dsi.pdev, IORESOURCE_MEM, 0);
+ if (!dsi_mem) {
+ DSSERR("can't get IORESOURCE_MEM DSI\n");
+ r = -EINVAL;
+ goto err0;
+ }
+ dsi.base = ioremap(dsi_mem->start, resource_size(dsi_mem));
if (!dsi.base) {
DSSERR("can't ioremap DSI\n");
r = -ENOMEM;
@@ -3307,6 +3312,7 @@ err2:
iounmap(dsi.base);
err1:
destroy_workqueue(dsi.workqueue);
+err0:
return r;
}
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 02a2a3e..8ca21cd 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -34,8 +34,6 @@
#include <plat/clock.h>
#include "dss.h"
-#define DSS_BASE 0x48050000
-
#define DSS_SZ_REGS SZ_512
struct dss_reg {
@@ -567,8 +565,15 @@ static int dss_init(bool skip_init)
{
int r;
u32 rev;
+ struct resource *dss_mem;
- dss.base = ioremap(DSS_BASE, DSS_SZ_REGS);
+ dss_mem = platform_get_resource(dss.pdev, IORESOURCE_MEM, 0);
+ if (!dss_mem) {
+ DSSERR("can't get IORESOURCE_MEM DSS\n");
+ r = -EINVAL;
+ goto fail0;
+ }
+ dss.base = ioremap(dss_mem->start, resource_size(dss_mem));
if (!dss.base) {
DSSERR("can't ioremap DSS\n");
r = -ENOMEM;
diff --git a/drivers/video/omap2/dss/rfbi.c b/drivers/video/omap2/dss/rfbi.c
index 24936f8..54f2279 100644
--- a/drivers/video/omap2/dss/rfbi.c
+++ b/drivers/video/omap2/dss/rfbi.c
@@ -36,8 +36,6 @@
#include <plat/display.h>
#include "dss.h"
-#define RFBI_BASE 0x48050800
-
struct rfbi_reg { u16 idx; };
#define RFBI_REG(idx) ((const struct rfbi_reg) { idx })
@@ -1017,6 +1015,7 @@ static int omap_rfbihw_probe(struct platform_device *pdev)
{
u32 rev;
u32 l;
+ struct resource *rfbi_mem;
rfbi.pdev = pdev;
@@ -1026,7 +1025,12 @@ static int omap_rfbihw_probe(struct platform_device *pdev)
atomic_set(&rfbi.cmd_fifo_full, 0);
atomic_set(&rfbi.cmd_pending, 0);
- rfbi.base = ioremap(RFBI_BASE, SZ_256);
+ rfbi_mem = platform_get_resource(rfbi.pdev, IORESOURCE_MEM, 0);
+ if (!rfbi_mem) {
+ DSSERR("can't get IORESOURCE_MEM RFBI\n");
+ return -EINVAL;
+ }
+ rfbi.base = ioremap(rfbi_mem->start, resource_size(rfbi_mem));
if (!rfbi.base) {
DSSERR("can't ioremap RFBI\n");
return -ENOMEM;
diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c
index edccd59..5eb9d07 100644
--- a/drivers/video/omap2/dss/venc.c
+++ b/drivers/video/omap2/dss/venc.c
@@ -39,8 +39,6 @@
#include "dss.h"
-#define VENC_BASE 0x48050C00
-
/* Venc registers */
#define VENC_REV_ID 0x00
#define VENC_STATUS 0x04
@@ -717,13 +715,20 @@ void venc_dump_regs(struct seq_file *s)
static int omap_venchw_probe(struct platform_device *pdev)
{
u8 rev_id;
+ struct resource *venc_mem;
+
venc.pdev = pdev;
mutex_init(&venc.venc_lock);
venc.wss_data = 0;
- venc.base = ioremap(VENC_BASE, SZ_1K);
+ venc_mem = platform_get_resource(venc.pdev, IORESOURCE_MEM, 0);
+ if (!venc_mem) {
+ DSSERR("can't get IORESOURCE_MEM VENC\n");
+ return -EINVAL;
+ }
+ venc.base = ioremap(venc_mem->start, resource_size(venc_mem));
if (!venc.base) {
DSSERR("can't ioremap VENC\n");
return -ENOMEM;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [PATCH v5 17/17] OMAP2,3: DSS2: Get DSS IRQ from platform device
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (15 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 16/17] OMAP2,3: DSS2: Use platform device to get baseaddr Sumit Semwal
@ 2011-01-07 11:25 ` Sumit Semwal
2011-01-10 20:00 ` Paul Walmsley
2011-01-07 12:56 ` [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Tomi Valkeinen
17 siblings, 1 reply; 37+ messages in thread
From: Sumit Semwal @ 2011-01-07 11:25 UTC (permalink / raw)
To: tomi.valkeinen, paul, khilman, hvaibhav, linux-omap
Cc: Senthilvadivu Guruswamy
From: Senthilvadivu Guruswamy <svadivu@ti.com>
DSS IRQ number can be obtained from platform_get_irq(). This API in turn
picks the right IRQ number belonging to HW IP from the hwmod database.
So hardcoding of IRQ number could be removed.
Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
---
drivers/video/omap2/dss/dss.c | 13 ++++++++-----
1 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
index 8ca21cd..ebf6f76 100644
--- a/drivers/video/omap2/dss/dss.c
+++ b/drivers/video/omap2/dss/dss.c
@@ -563,7 +563,7 @@ void dss_set_dac_pwrdn_bgz(bool enable)
static int dss_init(bool skip_init)
{
- int r;
+ int r, dss_irq;
u32 rev;
struct resource *dss_mem;
@@ -609,15 +609,18 @@ static int dss_init(bool skip_init)
REG_FLD_MOD(DSS_CONTROL, 0, 2, 2); /* venc clock mode = normal */
#endif
- r = request_irq(INT_24XX_DSS_IRQ,
+ dss_irq = platform_get_irq(dss.pdev, 0);
+ if (dss_irq != -ENXIO) {
+ r = request_irq(dss_irq,
cpu_is_omap24xx()
? dss_irq_handler_omap2
: dss_irq_handler_omap3,
0, "OMAP DSS", NULL);
- if (r < 0) {
- DSSERR("omap2 dss: request_irq failed\n");
- goto fail1;
+ if (r < 0) {
+ DSSERR("omap2 dss: request_irq failed\n");
+ goto fail1;
+ }
}
if (cpu_is_omap34xx()) {
--
1.7.0.4
^ permalink raw reply related [flat|nested] 37+ messages in thread
* Re: [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
` (16 preceding siblings ...)
2011-01-07 11:25 ` [PATCH v5 17/17] OMAP2,3: DSS2: Get DSS IRQ from platform device Sumit Semwal
@ 2011-01-07 12:56 ` Tomi Valkeinen
2011-01-07 13:14 ` Tomi Valkeinen
17 siblings, 1 reply; 37+ messages in thread
From: Tomi Valkeinen @ 2011-01-07 12:56 UTC (permalink / raw)
To: Tony Lindgren; +Cc: paul, khilman, hvaibhav, linux-omap, ext Sumit Semwal
Hi Tony,
The patch set below is based on l-o tree, as it touches OMAP
hwmod/clock/board stuff. It doesn't even apply to my mainline based
tree.
I'm still in the process of reviewing the latest changes, but is it ok
for you to apply these to your tree after I've acked the DSS parts? Or
do you have a stable branch (going to Linus soon) that I can use as a
base?
Tomi
On Fri, 2011-01-07 at 16:55 +0530, ext Sumit Semwal wrote:
> v4 of the DSS hwmod patch series focusses on fixing the review comments. OMAP4
> hwmod support will be posted after the acceptance of this basic change in
> the dss2 design.
>
> This patch series decouples the "Clocks for DSS in hwmod adaptation" changes
> from this series. Another series would be posted which could be discussed
> w.r.t clocks in DSS across omap2,3.
>
> Removing the SYSCONFIG settings from DSS driver would also be part of these
> clock changes series and not covered in this series as it depends on some of
> the omap_hwmod framework changes w.r.t opt clocks handling.
>
> Summary of the hwmod DSS design:
> ================================
> DSS, DISPC, DSI, RFBI, VENC are made as platform drivers each
> corresponding to the hwmod class in the hwmod database.
>
> Each of these platform drivers' init / deinit are handled from core.c's
> omap_dss_probe() in the exact sequence as required.
>
> No Hardcoding of silicon data:
> hwmod database abstracts the SOC data like base addr, irq numbers and are
> implemented in this patch series.
>
> Continue to have custom bus for display panels:
> "omapdss" driver continues to be a platform driver that registers the custom
> bus. It also continues to register the display panels(omap_dss_device) on the
> board to the panel drivers (omap_dss_driver)
> For Eg: primary lcd device would be registered with lcd panel driver.
> lcd panel driver if it is on a parallel interface would use library functions
> exported from dpi.o. if it is on a dsi interface would use library functions
> exported from dsi platform driver(dsi.o).
>
> Clocks:
> Handling of clocks in DSS only is one of the design approaches, that does not
> change the existing implementation. If each of the DSS HW IPs had to handle
> their own clocks, then corresponding clock changes can be requested in the hwmod
> database as well which is not the current design/implementation. As stated,
> this would be handled in another series seperately.
> For Eg: VENC would need 54MCLK which is termed as dss_opt clocks as of now apart
> for the dss main clocks. Currently VENC driver needs to be aware of this and has to
> use clk_get/put, clk_enable/disable, since VENC hwmod is not aware of 54MCLK.
>
>
>
> Current dss driver:
> -------------------
> 1. Omapdss platform driver
> - initialises necessary Ips dss, dispc.
> - also initialises Ips like sdi, dsi, venc, rfbi
> - creates a custom bus and registers the display devices/drivers
> connected on the board to the custom bus.
>
> 2. Suspend/resume of omapdss
> - in turn sends suspend/resume calls for each of the display devices
> registered to it.
>
> Modified change:
> ---------------
> Platform driver for each DSS HW IP in addition to the software "omapdss"
> driver.
>
> Omapdss platform driver
> - initialises necessary h/w IPs' platform drivers [dss, dispc, dsi, venc, rfbi]
> and software libraries like dpi, sdi.
> - continues to have a custom bus and registers the display devices
> and drivers connected on the board to the custom bus.
> - continues to handle suspend/resume of the display devices registered
> to the custom bus.
>
> DSS platform driver
> - initialises DSS IP alone
> - Handles the clocks related to the DSS and other DSSHW IPs like RFBI,
> DSI, VENC, DISPC. Previously this was a part of "omapdss" driver in core.c
> - Continues to handle the DSS IRQs.
> - No suspend/resume hooks.
>
> DISPC platform driver
> - initialises DISPC IP alone
> - Gets the required clock from DSS platform driver.
> - No suspend/resume hooks.
> - Continues to provide DISPC library functions.
>
> DSI platform driver
> - initialises DSI IP alone
> - Gets the required clock from DSS platform driver.
> - No suspend/resume hooks.
> - Continues to provide DSI library functions.
>
> RFBI, VENC platform drivers
> - initialises DSI,VENC IPs
> - Gets the required clock from DSS platform driver.
> - No suspend/resume hooks.
> - Continues to provide RFBI and VENC library functions.
>
> Testing:
> ---------
> The patches are tested on 2420-n800, 2430sdp, 3630zoom, 3430sdp.
> Complete bootup with penguins on panel is done on 3430sdp.
> For the rest of the mentioned platforms, kernel is built with "OMAP2_DSS"
> and bootup is tested so that base address and clk_get calls are successful.
>
> DSS was built successfully as module, though not tested yet.
>
> Changes since v4:
> ----------------
> 1) Following review comments incorporated:
> * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41970.html
> Corrected the clocks to be enabled in omap_dss_probe.
> Changes since v3:
> ----------------
> 1.) Following review comments incorporated:
> * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41705.html
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41683.html
> Created a new display.c file for dss driver registration
> related code.
>
> * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41573.html
> Changed the oh_name/dev_name handling in hwmod usage.
>
> * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41753.html
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41718.html
> removed device_initcall_sync(); init / deinit of each DSS h/w IP
> platform drivers are done from omap_dss_probe() in sequence.
>
> * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41754.html
> clock patches were cleaned up as per review comments.
>
> * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41756.html
> printk() => dev_dbg change was separated out.
>
>
> Changes since v2:
> -------------------
> 1.) Following review comments incorporated:
> Split the device/driver name change and registration patches logically.
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41205.html
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41204.html
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41203.html
>
> Changes since v1:
> ------------------
> 1.) Dynamically register for OMAP2,3 specific DSS HW IPs in devices.c
> 2.) Following review comments incorporated:
> Updation of all the board files on l-o dss2 branch as per
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg36915.html
> Comments incorporated in devices.c and display.h as per
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg36919.html
> Comments incorporated in dispc.c, dss.c, dsi.c, venc.c, rfbi.c
> so that platform_device is just above platform_driver registrations as per
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg36963.html
> 3.) Squashed some of the patches to one patch.
>
> Changes since RFC:
> -------------------
> 1) All the platform driver registration except DSS, were within the file core.c.
> Registeration of these driver got seperated to its own file.
> 2) Usage of regulators by different drivers are implemented.
> For Eg: Regulator used by VENC is moved to venc driver. But vdda_dac would be
> needed by DPI and DSI as well.
> 4) OMAP2420 and OMAP2430 hwmod database are generated in this v1.
> 5) Module support for omapdss driver can continue as the DSS HW IP specific platform
> drivers are decoupled from omapdss driver.
> 6) Following review comments incorporated:
> Changed the hwmod device name from "dss" to "dss_dss"
> Changed name of core driver from "omapdss" to "omap_display" as it deals with panels.
> Fixed comments on return values from platform_get_resource/irq functions.
>
> Patch Base:
> ===========
> url = git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git
> branch "master"
> Commit id: fa3b4e23ec20cfc944db7cc2b30b0d82c20e4472
> Description: cbus: Fix retu_rtc_do_reset
> ----------------------------------------------------------------------------
>
> Senthilvadivu Guruswamy (15):
> OMAP2420: hwmod data: add DSS DISPC RFBI VENC
> OMAP2430: hwmod data: add DSS DISPC RFBI VENC
> OMAP3: hwmod data: add DSS DISPC RFBI DSI VENC
> OMAP2,3 DSS2 Change driver name to omap_display
> OMAP2,3 DSS2 Use Regulator init with driver name
> OMAP2,3: DSS2: board files: replace platform_device_register with
> omap_display_init()
> OMAP2,3: DSS2: Build omap_device for each DSS HWIP
> OMAP2,3: DSS2: DSS: create platform_driver, move init,exit to driver
> OMAP2,3: DSS2: Move clocks from core driver to dss driver
> OMAP2,3: DSS2: RFBI: create platform_driver, move init,exit to driver
> OMAP2,3: DSS2: DISPC: create platform_driver, move init,exit to
> driver
> OMAP2,3: DSS2: VENC: create platform_driver, move init,exit to driver
> OMAP2,3: DSS2: DSI: create platform_driver, move init,exit to driver
> OMAP2,3: DSS2: Use platform device to get baseaddr
> OMAP2,3: DSS2: Get DSS IRQ from platform device
>
> Sumit Semwal (2):
> OMAP2,3: DSS2: Create new file display.c for central dss driver
> registration.
> OMAP2,3: DSS2: replace printk with dev_dbg in init
>
> arch/arm/mach-omap2/Makefile | 2 +
> arch/arm/mach-omap2/board-3430sdp.c | 26 +--
> arch/arm/mach-omap2/board-am3517evm.c | 16 +-
> arch/arm/mach-omap2/board-cm-t35.c | 22 +-
> arch/arm/mach-omap2/board-devkit8000.c | 14 +-
> arch/arm/mach-omap2/board-igep0020.c | 16 +-
> arch/arm/mach-omap2/board-omap3beagle.c | 14 +-
> arch/arm/mach-omap2/board-omap3evm.c | 22 +-
> arch/arm/mach-omap2/board-omap3pandora.c | 16 +-
> arch/arm/mach-omap2/board-omap3stalker.c | 16 +-
> arch/arm/mach-omap2/board-rx51-peripherals.c | 4 +-
> arch/arm/mach-omap2/board-rx51-video.c | 15 +-
> arch/arm/mach-omap2/clock2420_data.c | 8 +-
> arch/arm/mach-omap2/clock2430_data.c | 8 +-
> arch/arm/mach-omap2/clock3xxx_data.c | 14 +-
> arch/arm/mach-omap2/display.c | 101 ++++++
> arch/arm/mach-omap2/omap_hwmod_2420_data.c | 283 ++++++++++++++++
> arch/arm/mach-omap2/omap_hwmod_2430_data.c | 282 ++++++++++++++++
> arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 339 +++++++++++++++++++
> arch/arm/plat-omap/include/plat/display.h | 10 +
> drivers/video/omap2/dss/core.c | 450 ++------------------------
> drivers/video/omap2/dss/dispc.c | 114 ++++---
> drivers/video/omap2/dss/dsi.c | 78 ++++-
> drivers/video/omap2/dss/dss.c | 443 +++++++++++++++++++++++++-
> drivers/video/omap2/dss/dss.h | 46 ++--
> drivers/video/omap2/dss/rfbi.c | 118 ++++---
> drivers/video/omap2/dss/venc.c | 125 +++++---
> 27 files changed, 1851 insertions(+), 751 deletions(-)
> create mode 100644 arch/arm/mach-omap2/display.c
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation
2011-01-07 12:56 ` [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Tomi Valkeinen
@ 2011-01-07 13:14 ` Tomi Valkeinen
0 siblings, 0 replies; 37+ messages in thread
From: Tomi Valkeinen @ 2011-01-07 13:14 UTC (permalink / raw)
To: Tony Lindgren; +Cc: paul, khilman, hvaibhav, linux-omap, ext Sumit Semwal
Hi,
Ah, I just noticed (thanks Nishanth) that you've sent a pull request,
and these patches apply fine on top of the omap-for-linus branch. I'll
use that as a base.
Tomi
On Fri, 2011-01-07 at 14:56 +0200, Tomi Valkeinen wrote:
> Hi Tony,
>
> The patch set below is based on l-o tree, as it touches OMAP
> hwmod/clock/board stuff. It doesn't even apply to my mainline based
> tree.
>
> I'm still in the process of reviewing the latest changes, but is it ok
> for you to apply these to your tree after I've acked the DSS parts? Or
> do you have a stable branch (going to Linus soon) that I can use as a
> base?
>
> Tomi
>
> On Fri, 2011-01-07 at 16:55 +0530, ext Sumit Semwal wrote:
> > v4 of the DSS hwmod patch series focusses on fixing the review comments. OMAP4
> > hwmod support will be posted after the acceptance of this basic change in
> > the dss2 design.
> >
> > This patch series decouples the "Clocks for DSS in hwmod adaptation" changes
> > from this series. Another series would be posted which could be discussed
> > w.r.t clocks in DSS across omap2,3.
> >
> > Removing the SYSCONFIG settings from DSS driver would also be part of these
> > clock changes series and not covered in this series as it depends on some of
> > the omap_hwmod framework changes w.r.t opt clocks handling.
> >
> > Summary of the hwmod DSS design:
> > ================================
> > DSS, DISPC, DSI, RFBI, VENC are made as platform drivers each
> > corresponding to the hwmod class in the hwmod database.
> >
> > Each of these platform drivers' init / deinit are handled from core.c's
> > omap_dss_probe() in the exact sequence as required.
> >
> > No Hardcoding of silicon data:
> > hwmod database abstracts the SOC data like base addr, irq numbers and are
> > implemented in this patch series.
> >
> > Continue to have custom bus for display panels:
> > "omapdss" driver continues to be a platform driver that registers the custom
> > bus. It also continues to register the display panels(omap_dss_device) on the
> > board to the panel drivers (omap_dss_driver)
> > For Eg: primary lcd device would be registered with lcd panel driver.
> > lcd panel driver if it is on a parallel interface would use library functions
> > exported from dpi.o. if it is on a dsi interface would use library functions
> > exported from dsi platform driver(dsi.o).
> >
> > Clocks:
> > Handling of clocks in DSS only is one of the design approaches, that does not
> > change the existing implementation. If each of the DSS HW IPs had to handle
> > their own clocks, then corresponding clock changes can be requested in the hwmod
> > database as well which is not the current design/implementation. As stated,
> > this would be handled in another series seperately.
> > For Eg: VENC would need 54MCLK which is termed as dss_opt clocks as of now apart
> > for the dss main clocks. Currently VENC driver needs to be aware of this and has to
> > use clk_get/put, clk_enable/disable, since VENC hwmod is not aware of 54MCLK.
> >
> >
> >
> > Current dss driver:
> > -------------------
> > 1. Omapdss platform driver
> > - initialises necessary Ips dss, dispc.
> > - also initialises Ips like sdi, dsi, venc, rfbi
> > - creates a custom bus and registers the display devices/drivers
> > connected on the board to the custom bus.
> >
> > 2. Suspend/resume of omapdss
> > - in turn sends suspend/resume calls for each of the display devices
> > registered to it.
> >
> > Modified change:
> > ---------------
> > Platform driver for each DSS HW IP in addition to the software "omapdss"
> > driver.
> >
> > Omapdss platform driver
> > - initialises necessary h/w IPs' platform drivers [dss, dispc, dsi, venc, rfbi]
> > and software libraries like dpi, sdi.
> > - continues to have a custom bus and registers the display devices
> > and drivers connected on the board to the custom bus.
> > - continues to handle suspend/resume of the display devices registered
> > to the custom bus.
> >
> > DSS platform driver
> > - initialises DSS IP alone
> > - Handles the clocks related to the DSS and other DSSHW IPs like RFBI,
> > DSI, VENC, DISPC. Previously this was a part of "omapdss" driver in core.c
> > - Continues to handle the DSS IRQs.
> > - No suspend/resume hooks.
> >
> > DISPC platform driver
> > - initialises DISPC IP alone
> > - Gets the required clock from DSS platform driver.
> > - No suspend/resume hooks.
> > - Continues to provide DISPC library functions.
> >
> > DSI platform driver
> > - initialises DSI IP alone
> > - Gets the required clock from DSS platform driver.
> > - No suspend/resume hooks.
> > - Continues to provide DSI library functions.
> >
> > RFBI, VENC platform drivers
> > - initialises DSI,VENC IPs
> > - Gets the required clock from DSS platform driver.
> > - No suspend/resume hooks.
> > - Continues to provide RFBI and VENC library functions.
> >
> > Testing:
> > ---------
> > The patches are tested on 2420-n800, 2430sdp, 3630zoom, 3430sdp.
> > Complete bootup with penguins on panel is done on 3430sdp.
> > For the rest of the mentioned platforms, kernel is built with "OMAP2_DSS"
> > and bootup is tested so that base address and clk_get calls are successful.
> >
> > DSS was built successfully as module, though not tested yet.
> >
> > Changes since v4:
> > ----------------
> > 1) Following review comments incorporated:
> > * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41970.html
> > Corrected the clocks to be enabled in omap_dss_probe.
> > Changes since v3:
> > ----------------
> > 1.) Following review comments incorporated:
> > * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41705.html
> > http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41683.html
> > Created a new display.c file for dss driver registration
> > related code.
> >
> > * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41573.html
> > Changed the oh_name/dev_name handling in hwmod usage.
> >
> > * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41753.html
> > http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41718.html
> > removed device_initcall_sync(); init / deinit of each DSS h/w IP
> > platform drivers are done from omap_dss_probe() in sequence.
> >
> > * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41754.html
> > clock patches were cleaned up as per review comments.
> >
> > * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41756.html
> > printk() => dev_dbg change was separated out.
> >
> >
> > Changes since v2:
> > -------------------
> > 1.) Following review comments incorporated:
> > Split the device/driver name change and registration patches logically.
> > http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41205.html
> > http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41204.html
> > http://www.mail-archive.com/linux-omap@vger.kernel.org/msg41203.html
> >
> > Changes since v1:
> > ------------------
> > 1.) Dynamically register for OMAP2,3 specific DSS HW IPs in devices.c
> > 2.) Following review comments incorporated:
> > Updation of all the board files on l-o dss2 branch as per
> > http://www.mail-archive.com/linux-omap@vger.kernel.org/msg36915.html
> > Comments incorporated in devices.c and display.h as per
> > http://www.mail-archive.com/linux-omap@vger.kernel.org/msg36919.html
> > Comments incorporated in dispc.c, dss.c, dsi.c, venc.c, rfbi.c
> > so that platform_device is just above platform_driver registrations as per
> > http://www.mail-archive.com/linux-omap@vger.kernel.org/msg36963.html
> > 3.) Squashed some of the patches to one patch.
> >
> > Changes since RFC:
> > -------------------
> > 1) All the platform driver registration except DSS, were within the file core.c.
> > Registeration of these driver got seperated to its own file.
> > 2) Usage of regulators by different drivers are implemented.
> > For Eg: Regulator used by VENC is moved to venc driver. But vdda_dac would be
> > needed by DPI and DSI as well.
> > 4) OMAP2420 and OMAP2430 hwmod database are generated in this v1.
> > 5) Module support for omapdss driver can continue as the DSS HW IP specific platform
> > drivers are decoupled from omapdss driver.
> > 6) Following review comments incorporated:
> > Changed the hwmod device name from "dss" to "dss_dss"
> > Changed name of core driver from "omapdss" to "omap_display" as it deals with panels.
> > Fixed comments on return values from platform_get_resource/irq functions.
> >
> > Patch Base:
> > ===========
> > url = git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git
> > branch "master"
> > Commit id: fa3b4e23ec20cfc944db7cc2b30b0d82c20e4472
> > Description: cbus: Fix retu_rtc_do_reset
> > ----------------------------------------------------------------------------
> >
> > Senthilvadivu Guruswamy (15):
> > OMAP2420: hwmod data: add DSS DISPC RFBI VENC
> > OMAP2430: hwmod data: add DSS DISPC RFBI VENC
> > OMAP3: hwmod data: add DSS DISPC RFBI DSI VENC
> > OMAP2,3 DSS2 Change driver name to omap_display
> > OMAP2,3 DSS2 Use Regulator init with driver name
> > OMAP2,3: DSS2: board files: replace platform_device_register with
> > omap_display_init()
> > OMAP2,3: DSS2: Build omap_device for each DSS HWIP
> > OMAP2,3: DSS2: DSS: create platform_driver, move init,exit to driver
> > OMAP2,3: DSS2: Move clocks from core driver to dss driver
> > OMAP2,3: DSS2: RFBI: create platform_driver, move init,exit to driver
> > OMAP2,3: DSS2: DISPC: create platform_driver, move init,exit to
> > driver
> > OMAP2,3: DSS2: VENC: create platform_driver, move init,exit to driver
> > OMAP2,3: DSS2: DSI: create platform_driver, move init,exit to driver
> > OMAP2,3: DSS2: Use platform device to get baseaddr
> > OMAP2,3: DSS2: Get DSS IRQ from platform device
> >
> > Sumit Semwal (2):
> > OMAP2,3: DSS2: Create new file display.c for central dss driver
> > registration.
> > OMAP2,3: DSS2: replace printk with dev_dbg in init
> >
> > arch/arm/mach-omap2/Makefile | 2 +
> > arch/arm/mach-omap2/board-3430sdp.c | 26 +--
> > arch/arm/mach-omap2/board-am3517evm.c | 16 +-
> > arch/arm/mach-omap2/board-cm-t35.c | 22 +-
> > arch/arm/mach-omap2/board-devkit8000.c | 14 +-
> > arch/arm/mach-omap2/board-igep0020.c | 16 +-
> > arch/arm/mach-omap2/board-omap3beagle.c | 14 +-
> > arch/arm/mach-omap2/board-omap3evm.c | 22 +-
> > arch/arm/mach-omap2/board-omap3pandora.c | 16 +-
> > arch/arm/mach-omap2/board-omap3stalker.c | 16 +-
> > arch/arm/mach-omap2/board-rx51-peripherals.c | 4 +-
> > arch/arm/mach-omap2/board-rx51-video.c | 15 +-
> > arch/arm/mach-omap2/clock2420_data.c | 8 +-
> > arch/arm/mach-omap2/clock2430_data.c | 8 +-
> > arch/arm/mach-omap2/clock3xxx_data.c | 14 +-
> > arch/arm/mach-omap2/display.c | 101 ++++++
> > arch/arm/mach-omap2/omap_hwmod_2420_data.c | 283 ++++++++++++++++
> > arch/arm/mach-omap2/omap_hwmod_2430_data.c | 282 ++++++++++++++++
> > arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 339 +++++++++++++++++++
> > arch/arm/plat-omap/include/plat/display.h | 10 +
> > drivers/video/omap2/dss/core.c | 450 ++------------------------
> > drivers/video/omap2/dss/dispc.c | 114 ++++---
> > drivers/video/omap2/dss/dsi.c | 78 ++++-
> > drivers/video/omap2/dss/dss.c | 443 +++++++++++++++++++++++++-
> > drivers/video/omap2/dss/dss.h | 46 ++--
> > drivers/video/omap2/dss/rfbi.c | 118 ++++---
> > drivers/video/omap2/dss/venc.c | 125 +++++---
> > 27 files changed, 1851 insertions(+), 751 deletions(-)
> > create mode 100644 arch/arm/mach-omap2/display.c
> >
>
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 06/17] OMAP2,3: DSS2: Create new file display.c for central dss driver registration.
2011-01-07 11:25 ` [PATCH v5 06/17] OMAP2,3: DSS2: Create new file display.c for central dss driver registration Sumit Semwal
@ 2011-01-07 14:03 ` Tomi Valkeinen
2011-01-09 6:59 ` Semwal, Sumit
2011-01-07 21:26 ` Kevin Hilman
1 sibling, 1 reply; 37+ messages in thread
From: Tomi Valkeinen @ 2011-01-07 14:03 UTC (permalink / raw)
To: ext Sumit Semwal
Cc: paul, khilman, hvaibhav, linux-omap, Senthilvadivu Guruswamy
Hi,
On Fri, 2011-01-07 at 16:55 +0530, ext Sumit Semwal wrote:
> A new file display.c is introduced for display driver init, which adds a function
> omap_display_init to do the DSS driver registration. This is the first step in moving
> away registration of DSS from board files into a common place.
>
> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
> ---
> arch/arm/mach-omap2/Makefile | 2 +
> arch/arm/mach-omap2/display.c | 57 +++++++++++++++++++++++++++++
> arch/arm/plat-omap/include/plat/display.h | 4 ++
> 3 files changed, 63 insertions(+), 0 deletions(-)
> create mode 100644 arch/arm/mach-omap2/display.c
>
> diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
> index 4ab82f6..57b89e6 100644
> --- a/arch/arm/mach-omap2/Makefile
> +++ b/arch/arm/mach-omap2/Makefile
> @@ -237,3 +237,5 @@ obj-y += $(smc91x-m) $(smc91x-y)
>
> smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o
> obj-y += $(smsc911x-m) $(smsc911x-y)
> +
> +obj-y += display.o
> diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
> new file mode 100644
> index 0000000..26d3feb
> --- /dev/null
> +++ b/arch/arm/mach-omap2/display.c
> @@ -0,0 +1,57 @@
> +/*
> + * OMAP2plus display device setup / initialization.
> + *
> + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
> + * Senthilvadivu Guruswamy
> + * Sumit Semwal
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> + * kind, whether express or implied; without even the implied warranty
> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +#include <linux/platform_device.h>
> +#include <linux/io.h>
> +#include <linux/clk.h>
> +#include <linux/err.h>
> +
> +#include <plat/display.h>
> +#include <plat/omap_hwmod.h>
> +#include <plat/omap_device.h>
> +
> +#ifdef CONFIG_OMAP2_DSS
This also needs to be built in when DSS is configured as module. The
define above is only valid when DSS is configured as built-in.
So you can either check for both CONFIG_OMAP2_DSS and
CONFIG_OMAP2_DSS_MODULE here, or, I think a bit more cleanly:
- Compile display.c only if CONFIG_OMAP2_DSS[_MODULE] is defined (see
the Makefile, look for example how i2c-omap is handled).
- Check for CONFIG_OMAP2_DSS[_MODULE] in the header file, and define an
empty static inline function for omap_display_init() if DSS is disabled.
Tomi
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 06/17] OMAP2,3: DSS2: Create new file display.c for central dss driver registration.
2011-01-07 11:25 ` [PATCH v5 06/17] OMAP2,3: DSS2: Create new file display.c for central dss driver registration Sumit Semwal
2011-01-07 14:03 ` Tomi Valkeinen
@ 2011-01-07 21:26 ` Kevin Hilman
2011-01-09 7:00 ` Semwal, Sumit
1 sibling, 1 reply; 37+ messages in thread
From: Kevin Hilman @ 2011-01-07 21:26 UTC (permalink / raw)
To: Sumit Semwal
Cc: tomi.valkeinen, paul, hvaibhav, linux-omap,
Senthilvadivu Guruswamy
Sumit Semwal <sumit.semwal@ti.com> writes:
> A new file display.c is introduced for display driver init, which adds a function
> omap_display_init to do the DSS driver registration. This is the first step in moving
> away registration of DSS from board files into a common place.
>
> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
> ---
> arch/arm/mach-omap2/Makefile | 2 +
> arch/arm/mach-omap2/display.c | 57 +++++++++++++++++++++++++++++
> arch/arm/plat-omap/include/plat/display.h | 4 ++
> 3 files changed, 63 insertions(+), 0 deletions(-)
> create mode 100644 arch/arm/mach-omap2/display.c
>
> diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
> index 4ab82f6..57b89e6 100644
> --- a/arch/arm/mach-omap2/Makefile
> +++ b/arch/arm/mach-omap2/Makefile
> @@ -237,3 +237,5 @@ obj-y += $(smc91x-m) $(smc91x-y)
>
> smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o
> obj-y += $(smsc911x-m) $(smsc911x-y)
> +
> +obj-y += display.o
> diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
> new file mode 100644
> index 0000000..26d3feb
> --- /dev/null
> +++ b/arch/arm/mach-omap2/display.c
> @@ -0,0 +1,57 @@
> +/*
> + * OMAP2plus display device setup / initialization.
> + *
> + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
> + * Senthilvadivu Guruswamy
> + * Sumit Semwal
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> + * kind, whether express or implied; without even the implied warranty
> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +#include <linux/platform_device.h>
> +#include <linux/io.h>
> +#include <linux/clk.h>
> +#include <linux/err.h>
> +
> +#include <plat/display.h>
> +#include <plat/omap_hwmod.h>
> +#include <plat/omap_device.h>
Minor nit: the hwmod and omap_device headers are not needed for this
patch. Please add them when needed (PATCH 8)
Kevin
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 08/17] OMAP2,3: DSS2: Build omap_device for each DSS HWIP
2011-01-07 11:25 ` [PATCH v5 08/17] OMAP2,3: DSS2: Build omap_device for each DSS HWIP Sumit Semwal
@ 2011-01-07 23:34 ` Kevin Hilman
2011-01-09 8:04 ` Semwal, Sumit
0 siblings, 1 reply; 37+ messages in thread
From: Kevin Hilman @ 2011-01-07 23:34 UTC (permalink / raw)
To: Sumit Semwal
Cc: tomi.valkeinen, paul, hvaibhav, linux-omap,
Senthilvadivu Guruswamy
Sumit Semwal <sumit.semwal@ti.com> writes:
> From: Senthilvadivu Guruswamy <svadivu@ti.com>
>
> Looks up the hwmod database for each of the given DSS HW IP and builds
> omap_device which inturn does the platform device register for each of DSS HW IP
>
> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
> ---
> arch/arm/mach-omap2/display.c | 44 +++++++++++++++++++++++++++++
> arch/arm/plat-omap/include/plat/display.h | 6 ++++
> 2 files changed, 50 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
> index 26d3feb..276b800 100644
> --- a/arch/arm/mach-omap2/display.c
> +++ b/arch/arm/mach-omap2/display.c
> @@ -36,10 +36,54 @@ static struct platform_device omap_display_device = {
> },
> };
>
> +static struct omap_device_pm_latency omap_dss_latency[] = {
> + [0] = {
> + .deactivate_func = omap_device_idle_hwmods,
> + .activate_func = omap_device_enable_hwmods,
Without any latency numbers or AUTO_ADJUST you're going to have noisy
output from omap_device.
> + },
> +};
> +
> int __init omap_display_init(struct omap_dss_board_info
> *board_data)
> {
> int r = 0;
> + struct omap_hwmod *oh;
> + struct omap_device *od;
> + int i;
> + struct omap_display_platform_data pdata;
> + char *oh_name[] = { "dss_dss", /* omap2,3 */
> + "dss_dispc", /* omap2,3 */
> + "dss_rfbi", /* omap2,3 */
> + "dss_venc", /* omap2,3 */
> + "dss_dsi1" }; /* omap3 */
Why all the extra whitespace before the strings?
> + char *dev_name[] = { "omap_dss", "omap_dispc", "omap_rfbi",
> + "omap_venc", "omap_dsi1" };
ditto
> + int oh_count;
> +
> + if (cpu_is_omap24xx()) {
> + oh_count = ARRAY_SIZE(oh_name) - 1;
> + /* last hwmod dev in oh_name is not available for omap2 */
> + } else {
> + oh_count = ARRAY_SIZE(oh_name);
> + }
braces not needed
> + pdata.board_data = board_data;
extra whitespace not necessary
> + pdata.board_data->get_last_off_on_transaction_id = NULL;
instead, you should probably zero all of pdata before using it since it
is on the stack
> + for (i = 0; i < oh_count; i++) {
> + oh = omap_hwmod_lookup(oh_name[i]);
> + if (!oh) {
> + pr_err("Could not look up %s\n", oh_name[i]);
> + return r;
> + }
> + od = omap_device_build(dev_name[i], -1, oh, &pdata,
> + sizeof(struct omap_display_platform_data),
> + omap_dss_latency,
> + ARRAY_SIZE(omap_dss_latency), 0);
> +
> + WARN((IS_ERR(od)), "Could not build omap_device for %s\n",
> + oh_name[i]);
yet code below will still try and register it?
> + }
> omap_display_device.dev.platform_data = board_data;
>
> r = platform_device_register(&omap_display_device);
> diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h
> index 871bbae..23afd6d 100644
> --- a/arch/arm/plat-omap/include/plat/display.h
> +++ b/arch/arm/plat-omap/include/plat/display.h
> @@ -26,6 +26,7 @@
> #include <linux/platform_device.h>
> #include <asm/atomic.h>
>
> +
stray whitespace change
> #define DISPC_IRQ_FRAMEDONE (1 << 0)
> #define DISPC_IRQ_VSYNC (1 << 1)
> #define DISPC_IRQ_EVSYNC_EVEN (1 << 2)
> @@ -224,6 +225,11 @@ struct omap_dss_board_info {
> /* Init with the board info */
> extern int omap_display_init(struct omap_dss_board_info *board_data);
>
> +struct omap_display_platform_data {
> + struct omap_dss_board_info *board_data;
> + /* TODO: Additional members to be added when PM is considered */
> +};
> +
> struct omap_video_timings {
> /* Unit: pixels */
> u16 x_res;
Kevin
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 09/17] OMAP2,3: DSS2: DSS: create platform_driver, move init,exit to driver
2011-01-07 11:25 ` [PATCH v5 09/17] OMAP2,3: DSS2: DSS: create platform_driver, move init,exit to driver Sumit Semwal
@ 2011-01-07 23:43 ` Kevin Hilman
2011-01-09 8:33 ` Semwal, Sumit
0 siblings, 1 reply; 37+ messages in thread
From: Kevin Hilman @ 2011-01-07 23:43 UTC (permalink / raw)
To: Sumit Semwal
Cc: tomi.valkeinen, paul, hvaibhav, linux-omap,
Senthilvadivu Guruswamy
Sumit Semwal <sumit.semwal@ti.com> writes:
> From: Senthilvadivu Guruswamy <svadivu@ti.com>
>
> Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
> So a platform_driver of DSS is created and init exit methods are moved from core.c
> to its driver probe,remove. pdev member has to be maintained by its own drivers.
>
> DSS platform driver is registered from inside omap_dss_probe, in the order desired.
>
> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
> ---
> drivers/video/omap2/dss/core.c | 21 +++++++--------
> drivers/video/omap2/dss/dss.c | 55 ++++++++++++++++++++++++++++++++++++++-
> drivers/video/omap2/dss/dss.h | 4 +-
> 3 files changed, 65 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
> index 48d20d8..faca859 100644
> --- a/drivers/video/omap2/dss/core.c
> +++ b/drivers/video/omap2/dss/core.c
> @@ -497,9 +497,9 @@ static inline void dss_uninitialize_debugfs(void)
> static int omap_dss_probe(struct platform_device *pdev)
> {
> struct omap_dss_board_info *pdata = pdev->dev.platform_data;
> - int skip_init = 0;
> int r;
> int i;
> + int skip_init = 0;
looks like unnessary move.
maybe you meant to remove this var since its usage was removed from this
function?
> core.pdev = pdev;
>
> @@ -517,15 +517,9 @@ static int omap_dss_probe(struct platform_device *pdev)
> core.ctx_id = dss_get_ctx_id();
> DSSDBG("initial ctx id %u\n", core.ctx_id);
>
> -#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
> - /* DISPC_CONTROL */
> - if (omap_readl(0x48050440) & 1) /* LCD enabled? */
> - skip_init = 1;
> -#endif
> -
> - r = dss_init(skip_init);
> + r = dss_init_platform_driver();
> if (r) {
> - DSSERR("Failed to initialize DSS\n");
> + DSSERR("Failed to initialize DSS platform driver\n");
> goto err_dss;
> }
>
> @@ -553,6 +547,11 @@ static int omap_dss_probe(struct platform_device *pdev)
> goto err_venc;
> }
>
> +#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
> + /* DISPC_CONTROL */
> + if (omap_readl(0x48050440) & 1) /* LCD enabled? */
> + skip_init = 1;
> +#endif
nope, you just moved it here.
But it's also duplicated in dsshw_probe below. Is that needed?
> if (cpu_is_omap34xx()) {
> r = sdi_init(skip_init);
> if (r) {
> @@ -610,7 +609,7 @@ err_dispc:
> err_dpi:
> rfbi_exit();
> err_rfbi:
> - dss_exit();
> + dss_deinit_platform_driver();
s/deinit/uninit/ or uninitial
> err_dss:
> dss_clk_disable_all_no_ctx();
> dss_put_clocks();
> @@ -636,7 +635,7 @@ static int omap_dss_remove(struct platform_device *pdev)
> sdi_exit();
> }
>
> - dss_exit();
> + dss_deinit_platform_driver();
>
> /* these should be removed at some point */
> c = core.dss_ick->usecount;
> diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
> index 77c3621..ebb294a 100644
> --- a/drivers/video/omap2/dss/dss.c
> +++ b/drivers/video/omap2/dss/dss.c
> @@ -59,6 +59,7 @@ struct dss_reg {
> dss_write_reg(idx, FLD_MOD(dss_read_reg(idx), val, start, end))
>
> static struct {
> + struct platform_device *pdev;
> void __iomem *base;
>
> struct clk *dpll4_m4_ck;
> @@ -549,7 +550,7 @@ void dss_set_dac_pwrdn_bgz(bool enable)
> REG_FLD_MOD(DSS_CONTROL, enable, 5, 5); /* DAC Power-Down Control */
> }
>
> -int dss_init(bool skip_init)
> +static int dss_init(bool skip_init)
> {
> int r;
> u32 rev;
> @@ -629,7 +630,7 @@ fail0:
> return r;
> }
>
> -void dss_exit(void)
> +static void dss_exit(void)
> {
> if (cpu_is_omap34xx())
> clk_put(dss.dpll4_m4_ck);
> @@ -639,3 +640,53 @@ void dss_exit(void)
> iounmap(dss.base);
> }
>
> +/* DSS HW IP initialisation */
> +static int omap_dsshw_probe(struct platform_device *pdev)
> +{
> + int r;
> + int skip_init = 0;
> +
> + dss.pdev = pdev;
> +
> +#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
> + /* DISPC_CONTROL */
> + if (omap_readl(0x48050440) & 1) /* LCD enabled? */
> + skip_init = 1;
> +#endif
> +
> + r = dss_init(skip_init);
> + if (r) {
> + DSSERR("Failed to initialize DSS\n");
> + goto err_dss;
> + }
> +
> +err_dss:
> +
> + return r;
> +}
> +
> +static int omap_dsshw_remove(struct platform_device *pdev)
> +{
> + dss_exit();
> +
> + return 0;
> +}
> +
> +static struct platform_driver omap_dsshw_driver = {
> + .probe = omap_dsshw_probe,
> + .remove = omap_dsshw_remove,
> + .driver = {
> + .name = "omap_dss",
> + .owner = THIS_MODULE,
> + },
> +};
> +
> +int dss_init_platform_driver(void)
> +{
> + return platform_driver_register(&omap_dsshw_driver);
> +}
> +
> +void dss_deinit_platform_driver(void)
> +{
> + return platform_driver_unregister(&omap_dsshw_driver);
> +}
Is there a reason for these extra functions?
Why can't the platform_driver APIs be called directly?
> diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
> index 5c7940d..50b4223 100644
> --- a/drivers/video/omap2/dss/dss.h
> +++ b/drivers/video/omap2/dss/dss.h
> @@ -214,8 +214,8 @@ void dss_overlay_setup_l4_manager(struct omap_overlay_manager *mgr);
> void dss_recheck_connections(struct omap_dss_device *dssdev, bool force);
>
> /* DSS */
> -int dss_init(bool skip_init);
> -void dss_exit(void);
> +int dss_init_platform_driver(void);
> +void dss_deinit_platform_driver(void);
>
> void dss_save_context(void);
> void dss_restore_context(void);
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 06/17] OMAP2,3: DSS2: Create new file display.c for central dss driver registration.
2011-01-07 14:03 ` Tomi Valkeinen
@ 2011-01-09 6:59 ` Semwal, Sumit
2011-01-09 7:01 ` Semwal, Sumit
0 siblings, 1 reply; 37+ messages in thread
From: Semwal, Sumit @ 2011-01-09 6:59 UTC (permalink / raw)
To: Tomi Valkeinen
Cc: paul, khilman, hvaibhav, linux-omap, Senthilvadivu Guruswamy
Tomi,
On Fri, Jan 7, 2011 at 7:33 PM, Tomi Valkeinen <tomi.valkeinen@nokia.com> wrote:
> Hi,
>
> On Fri, 2011-01-07 at 16:55 +0530, ext Sumit Semwal wrote:
>> A new file display.c is introduced for display driver init, which adds a function
>> omap_display_init to do the DSS driver registration. This is the first step in moving
>> away registration of DSS from board files into a common place.
>>
>> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
>> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
>> ---
>> arch/arm/mach-omap2/Makefile | 2 +
>> arch/arm/mach-omap2/display.c | 57 +++++++++++++++++++++++++++++
>> arch/arm/plat-omap/include/plat/display.h | 4 ++
>> 3 files changed, 63 insertions(+), 0 deletions(-)
>> create mode 100644 arch/arm/mach-omap2/display.c
>>
>> diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
>> index 4ab82f6..57b89e6 100644
>> --- a/arch/arm/mach-omap2/Makefile
>> +++ b/arch/arm/mach-omap2/Makefile
>> @@ -237,3 +237,5 @@ obj-y += $(smc91x-m) $(smc91x-y)
>>
>> smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o
>> obj-y += $(smsc911x-m) $(smsc911x-y)
>> +
>> +obj-y += display.o
>> diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
>> new file mode 100644
>> index 0000000..26d3feb
>> --- /dev/null
>> +++ b/arch/arm/mach-omap2/display.c
>> @@ -0,0 +1,57 @@
>> +/*
>> + * OMAP2plus display device setup / initialization.
>> + *
>> + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
>> + * Senthilvadivu Guruswamy
>> + * Sumit Semwal
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + *
>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>> + * kind, whether express or implied; without even the implied warranty
>> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> + * GNU General Public License for more details.
>> + */
>> +
>> +#include <linux/kernel.h>
>> +#include <linux/init.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/io.h>
>> +#include <linux/clk.h>
>> +#include <linux/err.h>
>> +
>> +#include <plat/display.h>
>> +#include <plat/omap_hwmod.h>
>> +#include <plat/omap_device.h>
>> +
>> +#ifdef CONFIG_OMAP2_DSS
>
> This also needs to be built in when DSS is configured as module. The
> define above is only valid when DSS is configured as built-in.
>
> So you can either check for both CONFIG_OMAP2_DSS and
> CONFIG_OMAP2_DSS_MODULE here, or, I think a bit more cleanly:
>
> - Compile display.c only if CONFIG_OMAP2_DSS[_MODULE] is defined (see
> the Makefile, look for example how i2c-omap is handled).
> - Check for CONFIG_OMAP2_DSS[_MODULE] in the header file, and define an
> empty static inline function for omap_display_init() if DSS is disabled.
Yes, thanks. I did it the cleaner way :) - coming up in the next patch series.
>
> Tomi
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 06/17] OMAP2,3: DSS2: Create new file display.c for central dss driver registration.
2011-01-07 21:26 ` Kevin Hilman
@ 2011-01-09 7:00 ` Semwal, Sumit
0 siblings, 0 replies; 37+ messages in thread
From: Semwal, Sumit @ 2011-01-09 7:00 UTC (permalink / raw)
To: Kevin Hilman
Cc: tomi.valkeinen, paul, hvaibhav, linux-omap,
Senthilvadivu Guruswamy
Hi Kevin,
On Sat, Jan 8, 2011 at 2:56 AM, Kevin Hilman <khilman@ti.com> wrote:
> Sumit Semwal <sumit.semwal@ti.com> writes:
>
>> A new file display.c is introduced for display driver init, which adds a function
>> omap_display_init to do the DSS driver registration. This is the first step in moving
>> away registration of DSS from board files into a common place.
>>
>> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
>> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
>> ---
>> arch/arm/mach-omap2/Makefile | 2 +
>> arch/arm/mach-omap2/display.c | 57 +++++++++++++++++++++++++++++
>> arch/arm/plat-omap/include/plat/display.h | 4 ++
>> 3 files changed, 63 insertions(+), 0 deletions(-)
>> create mode 100644 arch/arm/mach-omap2/display.c
>>
>> diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
>> index 4ab82f6..57b89e6 100644
>> --- a/arch/arm/mach-omap2/Makefile
>> +++ b/arch/arm/mach-omap2/Makefile
>> @@ -237,3 +237,5 @@ obj-y += $(smc91x-m) $(smc91x-y)
>>
>> smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o
>> obj-y += $(smsc911x-m) $(smsc911x-y)
>> +
>> +obj-y += display.o
>> diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
>> new file mode 100644
>> index 0000000..26d3feb
>> --- /dev/null
>> +++ b/arch/arm/mach-omap2/display.c
>> @@ -0,0 +1,57 @@
>> +/*
>> + * OMAP2plus display device setup / initialization.
>> + *
>> + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
>> + * Senthilvadivu Guruswamy
>> + * Sumit Semwal
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License version 2 as
>> + * published by the Free Software Foundation.
>> + *
>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>> + * kind, whether express or implied; without even the implied warranty
>> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> + * GNU General Public License for more details.
>> + */
>> +
>> +#include <linux/kernel.h>
>> +#include <linux/init.h>
>> +#include <linux/platform_device.h>
>> +#include <linux/io.h>
>> +#include <linux/clk.h>
>> +#include <linux/err.h>
>> +
>> +#include <plat/display.h>
>> +#include <plat/omap_hwmod.h>
>> +#include <plat/omap_device.h>
>
> Minor nit: the hwmod and omap_device headers are not needed for this
> patch. Please add them when needed (PATCH 8)
Thanks; yes, - coming up in the next patch version.
>
> Kevin
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 06/17] OMAP2,3: DSS2: Create new file display.c for central dss driver registration.
2011-01-09 6:59 ` Semwal, Sumit
@ 2011-01-09 7:01 ` Semwal, Sumit
0 siblings, 0 replies; 37+ messages in thread
From: Semwal, Sumit @ 2011-01-09 7:01 UTC (permalink / raw)
To: Tomi Valkeinen
Cc: paul, khilman, hvaibhav, linux-omap, Senthilvadivu Guruswamy
On Sun, Jan 9, 2011 at 12:29 PM, Semwal, Sumit <sumit.semwal@ti.com> wrote:
> Tomi,
>
> On Fri, Jan 7, 2011 at 7:33 PM, Tomi Valkeinen <tomi.valkeinen@nokia.com> wrote:
>> Hi,
>>
>> On Fri, 2011-01-07 at 16:55 +0530, ext Sumit Semwal wrote:
>>> A new file display.c is introduced for display driver init, which adds a function
>>> omap_display_init to do the DSS driver registration. This is the first step in moving
>>> away registration of DSS from board files into a common place.
>>>
>>> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
>>> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
>>> ---
>>> arch/arm/mach-omap2/Makefile | 2 +
>>> arch/arm/mach-omap2/display.c | 57 +++++++++++++++++++++++++++++
>>> arch/arm/plat-omap/include/plat/display.h | 4 ++
>>> 3 files changed, 63 insertions(+), 0 deletions(-)
>>> create mode 100644 arch/arm/mach-omap2/display.c
>>>
>>> diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
>>> index 4ab82f6..57b89e6 100644
>>> --- a/arch/arm/mach-omap2/Makefile
>>> +++ b/arch/arm/mach-omap2/Makefile
>>> @@ -237,3 +237,5 @@ obj-y += $(smc91x-m) $(smc91x-y)
>>>
>>> smsc911x-$(CONFIG_SMSC911X) := gpmc-smsc911x.o
>>> obj-y += $(smsc911x-m) $(smsc911x-y)
>>> +
>>> +obj-y += display.o
>>> diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
>>> new file mode 100644
>>> index 0000000..26d3feb
>>> --- /dev/null
>>> +++ b/arch/arm/mach-omap2/display.c
>>> @@ -0,0 +1,57 @@
>>> +/*
>>> + * OMAP2plus display device setup / initialization.
>>> + *
>>> + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
>>> + * Senthilvadivu Guruswamy
>>> + * Sumit Semwal
>>> + *
>>> + * This program is free software; you can redistribute it and/or modify
>>> + * it under the terms of the GNU General Public License version 2 as
>>> + * published by the Free Software Foundation.
>>> + *
>>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>>> + * kind, whether express or implied; without even the implied warranty
>>> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>>> + * GNU General Public License for more details.
>>> + */
>>> +
>>> +#include <linux/kernel.h>
>>> +#include <linux/init.h>
>>> +#include <linux/platform_device.h>
>>> +#include <linux/io.h>
>>> +#include <linux/clk.h>
>>> +#include <linux/err.h>
>>> +
>>> +#include <plat/display.h>
>>> +#include <plat/omap_hwmod.h>
>>> +#include <plat/omap_device.h>
>>> +
>>> +#ifdef CONFIG_OMAP2_DSS
>>
>> This also needs to be built in when DSS is configured as module. The
>> define above is only valid when DSS is configured as built-in.
>>
>> So you can either check for both CONFIG_OMAP2_DSS and
>> CONFIG_OMAP2_DSS_MODULE here, or, I think a bit more cleanly:
>>
>> - Compile display.c only if CONFIG_OMAP2_DSS[_MODULE] is defined (see
>> the Makefile, look for example how i2c-omap is handled).
>> - Check for CONFIG_OMAP2_DSS[_MODULE] in the header file, and define an
>> empty static inline function for omap_display_init() if DSS is disabled.
>
> Yes, thanks. I did it the cleaner way :) - coming up in the next patch series.
Oops - I meant next version.
>>
>> Tomi
>>
>>
>>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 08/17] OMAP2,3: DSS2: Build omap_device for each DSS HWIP
2011-01-07 23:34 ` Kevin Hilman
@ 2011-01-09 8:04 ` Semwal, Sumit
0 siblings, 0 replies; 37+ messages in thread
From: Semwal, Sumit @ 2011-01-09 8:04 UTC (permalink / raw)
To: Kevin Hilman
Cc: tomi.valkeinen, paul, hvaibhav, linux-omap,
Senthilvadivu Guruswamy
Hi Kevin,
On Sat, Jan 8, 2011 at 5:04 AM, Kevin Hilman <khilman@ti.com> wrote:
> Sumit Semwal <sumit.semwal@ti.com> writes:
>
>> From: Senthilvadivu Guruswamy <svadivu@ti.com>
>>
>> Looks up the hwmod database for each of the given DSS HW IP and builds
>> omap_device which inturn does the platform device register for each of DSS HW IP
>>
>> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
>> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
>> ---
>> arch/arm/mach-omap2/display.c | 44 +++++++++++++++++++++++++++++
>> arch/arm/plat-omap/include/plat/display.h | 6 ++++
>> 2 files changed, 50 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
>> index 26d3feb..276b800 100644
>> --- a/arch/arm/mach-omap2/display.c
>> +++ b/arch/arm/mach-omap2/display.c
>> @@ -36,10 +36,54 @@ static struct platform_device omap_display_device = {
>> },
>> };
>>
>> +static struct omap_device_pm_latency omap_dss_latency[] = {
>> + [0] = {
>> + .deactivate_func = omap_device_idle_hwmods,
>> + .activate_func = omap_device_enable_hwmods,
>
> Without any latency numbers or AUTO_ADJUST you're going to have noisy
> output from omap_device.
>
>> + },
>> +};
>> +
>> int __init omap_display_init(struct omap_dss_board_info
>> *board_data)
>> {
>> int r = 0;
>> + struct omap_hwmod *oh;
>> + struct omap_device *od;
>> + int i;
>> + struct omap_display_platform_data pdata;
>> + char *oh_name[] = { "dss_dss", /* omap2,3 */
>> + "dss_dispc", /* omap2,3 */
>> + "dss_rfbi", /* omap2,3 */
>> + "dss_venc", /* omap2,3 */
>> + "dss_dsi1" }; /* omap3 */
>
> Why all the extra whitespace before the strings?
>
>> + char *dev_name[] = { "omap_dss", "omap_dispc", "omap_rfbi",
>> + "omap_venc", "omap_dsi1" };
>
> ditto
>
>> + int oh_count;
>> +
>> + if (cpu_is_omap24xx()) {
>> + oh_count = ARRAY_SIZE(oh_name) - 1;
>> + /* last hwmod dev in oh_name is not available for omap2 */
>> + } else {
>> + oh_count = ARRAY_SIZE(oh_name);
>> + }
>
> braces not needed
>
>> + pdata.board_data = board_data;
>
> extra whitespace not necessary
>
>> + pdata.board_data->get_last_off_on_transaction_id = NULL;
>
> instead, you should probably zero all of pdata before using it since it
> is on the stack
>
>> + for (i = 0; i < oh_count; i++) {
>> + oh = omap_hwmod_lookup(oh_name[i]);
>> + if (!oh) {
>> + pr_err("Could not look up %s\n", oh_name[i]);
>> + return r;
>> + }
>> + od = omap_device_build(dev_name[i], -1, oh, &pdata,
>> + sizeof(struct omap_display_platform_data),
>> + omap_dss_latency,
>> + ARRAY_SIZE(omap_dss_latency), 0);
>> +
>> + WARN((IS_ERR(od)), "Could not build omap_device for %s\n",
>> + oh_name[i]);
>
> yet code below will still try and register it?
>
>> + }
>> omap_display_device.dev.platform_data = board_data;
>>
>> r = platform_device_register(&omap_display_device);
>> diff --git a/arch/arm/plat-omap/include/plat/display.h b/arch/arm/plat-omap/include/plat/display.h
>> index 871bbae..23afd6d 100644
>> --- a/arch/arm/plat-omap/include/plat/display.h
>> +++ b/arch/arm/plat-omap/include/plat/display.h
>> @@ -26,6 +26,7 @@
>> #include <linux/platform_device.h>
>> #include <asm/atomic.h>
>>
>> +
>
> stray whitespace change
>
>> #define DISPC_IRQ_FRAMEDONE (1 << 0)
>> #define DISPC_IRQ_VSYNC (1 << 1)
>> #define DISPC_IRQ_EVSYNC_EVEN (1 << 2)
>> @@ -224,6 +225,11 @@ struct omap_dss_board_info {
>> /* Init with the board info */
>> extern int omap_display_init(struct omap_dss_board_info *board_data);
>>
>> +struct omap_display_platform_data {
>> + struct omap_dss_board_info *board_data;
>> + /* TODO: Additional members to be added when PM is considered */
>> +};
>> +
>> struct omap_video_timings {
>> /* Unit: pixels */
>> u16 x_res;
>
Thanks for all your comments; will incorporate in the upcoming version.
Best regards,
~Sumit.
> Kevin
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 09/17] OMAP2,3: DSS2: DSS: create platform_driver, move init,exit to driver
2011-01-07 23:43 ` Kevin Hilman
@ 2011-01-09 8:33 ` Semwal, Sumit
0 siblings, 0 replies; 37+ messages in thread
From: Semwal, Sumit @ 2011-01-09 8:33 UTC (permalink / raw)
To: Kevin Hilman
Cc: tomi.valkeinen, paul, hvaibhav, linux-omap,
Senthilvadivu Guruswamy
Hi Kevin,
On Sat, Jan 8, 2011 at 5:13 AM, Kevin Hilman <khilman@ti.com> wrote:
> Sumit Semwal <sumit.semwal@ti.com> writes:
>
>> From: Senthilvadivu Guruswamy <svadivu@ti.com>
>>
>> Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
>> So a platform_driver of DSS is created and init exit methods are moved from core.c
>> to its driver probe,remove. pdev member has to be maintained by its own drivers.
>>
>> DSS platform driver is registered from inside omap_dss_probe, in the order desired.
>>
>> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
>> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
>> ---
>> drivers/video/omap2/dss/core.c | 21 +++++++--------
>> drivers/video/omap2/dss/dss.c | 55 ++++++++++++++++++++++++++++++++++++++-
>> drivers/video/omap2/dss/dss.h | 4 +-
>> 3 files changed, 65 insertions(+), 15 deletions(-)
>>
>> diff --git a/drivers/video/omap2/dss/core.c b/drivers/video/omap2/dss/core.c
>> index 48d20d8..faca859 100644
>> --- a/drivers/video/omap2/dss/core.c
>> +++ b/drivers/video/omap2/dss/core.c
>> @@ -497,9 +497,9 @@ static inline void dss_uninitialize_debugfs(void)
>> static int omap_dss_probe(struct platform_device *pdev)
>> {
>> struct omap_dss_board_info *pdata = pdev->dev.platform_data;
>> - int skip_init = 0;
>> int r;
>> int i;
>> + int skip_init = 0;
>
> looks like unnessary move.
>
> maybe you meant to remove this var since its usage was removed from this
> function?
>
>> core.pdev = pdev;
>>
>> @@ -517,15 +517,9 @@ static int omap_dss_probe(struct platform_device *pdev)
>> core.ctx_id = dss_get_ctx_id();
>> DSSDBG("initial ctx id %u\n", core.ctx_id);
>>
>> -#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
>> - /* DISPC_CONTROL */
>> - if (omap_readl(0x48050440) & 1) /* LCD enabled? */
>> - skip_init = 1;
>> -#endif
>> -
>> - r = dss_init(skip_init);
>> + r = dss_init_platform_driver();
>> if (r) {
>> - DSSERR("Failed to initialize DSS\n");
>> + DSSERR("Failed to initialize DSS platform driver\n");
>> goto err_dss;
>> }
>>
>> @@ -553,6 +547,11 @@ static int omap_dss_probe(struct platform_device *pdev)
>> goto err_venc;
>> }
>>
>> +#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
>> + /* DISPC_CONTROL */
>> + if (omap_readl(0x48050440) & 1) /* LCD enabled? */
>> + skip_init = 1;
>> +#endif
>
> nope, you just moved it here.
>
> But it's also duplicated in dsshw_probe below. Is that needed?
Yes; these two are needed as both dss_init() (which is replaced with
dss_init_platform_driver() in this patch) and also by sdi_init().
sdi_init() is a software init, so it will not be moved to a
platform_driver. That's why we need the #ifdef.. #endif in both
dss_probe() and dsshw_probe().
>
>> if (cpu_is_omap34xx()) {
>> r = sdi_init(skip_init);
>> if (r) {
>> @@ -610,7 +609,7 @@ err_dispc:
>> err_dpi:
>> rfbi_exit();
>> err_rfbi:
>> - dss_exit();
>> + dss_deinit_platform_driver();
>
> s/deinit/uninit/ or uninitial
Sure, will change.
>> err_dss:
>> dss_clk_disable_all_no_ctx();
>> dss_put_clocks();
>> @@ -636,7 +635,7 @@ static int omap_dss_remove(struct platform_device *pdev)
>> sdi_exit();
>> }
>>
>> - dss_exit();
>> + dss_deinit_platform_driver();
>>
>> /* these should be removed at some point */
>> c = core.dss_ick->usecount;
>> diff --git a/drivers/video/omap2/dss/dss.c b/drivers/video/omap2/dss/dss.c
>> index 77c3621..ebb294a 100644
>> --- a/drivers/video/omap2/dss/dss.c
>> +++ b/drivers/video/omap2/dss/dss.c
>> @@ -59,6 +59,7 @@ struct dss_reg {
>> dss_write_reg(idx, FLD_MOD(dss_read_reg(idx), val, start, end))
>>
>> static struct {
>> + struct platform_device *pdev;
>> void __iomem *base;
>>
>> struct clk *dpll4_m4_ck;
>> @@ -549,7 +550,7 @@ void dss_set_dac_pwrdn_bgz(bool enable)
>> REG_FLD_MOD(DSS_CONTROL, enable, 5, 5); /* DAC Power-Down Control */
>> }
>>
>> -int dss_init(bool skip_init)
>> +static int dss_init(bool skip_init)
>> {
>> int r;
>> u32 rev;
>> @@ -629,7 +630,7 @@ fail0:
>> return r;
>> }
>>
>> -void dss_exit(void)
>> +static void dss_exit(void)
>> {
>> if (cpu_is_omap34xx())
>> clk_put(dss.dpll4_m4_ck);
>> @@ -639,3 +640,53 @@ void dss_exit(void)
>> iounmap(dss.base);
>> }
>>
>> +/* DSS HW IP initialisation */
>> +static int omap_dsshw_probe(struct platform_device *pdev)
>> +{
>> + int r;
>> + int skip_init = 0;
>> +
>> + dss.pdev = pdev;
>> +
>> +#ifdef CONFIG_FB_OMAP_BOOTLOADER_INIT
>> + /* DISPC_CONTROL */
>> + if (omap_readl(0x48050440) & 1) /* LCD enabled? */
>> + skip_init = 1;
>> +#endif
>> +
>> + r = dss_init(skip_init);
>> + if (r) {
>> + DSSERR("Failed to initialize DSS\n");
>> + goto err_dss;
>> + }
>> +
>> +err_dss:
>> +
>> + return r;
>> +}
>> +
>> +static int omap_dsshw_remove(struct platform_device *pdev)
>> +{
>> + dss_exit();
>> +
>> + return 0;
>> +}
>> +
>> +static struct platform_driver omap_dsshw_driver = {
>> + .probe = omap_dsshw_probe,
>> + .remove = omap_dsshw_remove,
>> + .driver = {
>> + .name = "omap_dss",
>> + .owner = THIS_MODULE,
>> + },
>> +};
>> +
>> +int dss_init_platform_driver(void)
>> +{
>> + return platform_driver_register(&omap_dsshw_driver);
>> +}
>> +
>> +void dss_deinit_platform_driver(void)
>> +{
>> + return platform_driver_unregister(&omap_dsshw_driver);
>> +}
>
> Is there a reason for these extra functions?
>
> Why can't the platform_driver APIs be called directly?
Of all these platform devices (in this and later patches of this
series), the initialization needs to be in a sequence. That's achieved
by calling the init_platform_driver / uninit_platform_driver centrally
from core.c's omap_dss_probe() in the required sequence. Since
platform driver data for each platform device is static within each
platform driver's file, these functions are required.
Best regards,
~Sumit.
>
>> diff --git a/drivers/video/omap2/dss/dss.h b/drivers/video/omap2/dss/dss.h
>> index 5c7940d..50b4223 100644
>> --- a/drivers/video/omap2/dss/dss.h
>> +++ b/drivers/video/omap2/dss/dss.h
>> @@ -214,8 +214,8 @@ void dss_overlay_setup_l4_manager(struct omap_overlay_manager *mgr);
>> void dss_recheck_connections(struct omap_dss_device *dssdev, bool force);
>>
>> /* DSS */
>> -int dss_init(bool skip_init);
>> -void dss_exit(void);
>> +int dss_init_platform_driver(void);
>> +void dss_deinit_platform_driver(void);
>>
>> void dss_save_context(void);
>> void dss_restore_context(void);
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 17/17] OMAP2,3: DSS2: Get DSS IRQ from platform device
2011-01-07 11:25 ` [PATCH v5 17/17] OMAP2,3: DSS2: Get DSS IRQ from platform device Sumit Semwal
@ 2011-01-10 20:00 ` Paul Walmsley
0 siblings, 0 replies; 37+ messages in thread
From: Paul Walmsley @ 2011-01-10 20:00 UTC (permalink / raw)
To: Sumit Semwal
Cc: tomi.valkeinen, khilman, hvaibhav, linux-omap,
Senthilvadivu Guruswamy
On Fri, 7 Jan 2011, Sumit Semwal wrote:
> From: Senthilvadivu Guruswamy <svadivu@ti.com>
>
> DSS IRQ number can be obtained from platform_get_irq(). This API in turn
> picks the right IRQ number belonging to HW IP from the hwmod database.
> So hardcoding of IRQ number could be removed.
>
> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Reviewed-by: Paul Walmsley <paul@pwsan.com>
- Paul
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 03/17] OMAP3: hwmod data: add DSS DISPC RFBI DSI VENC
2011-01-07 11:25 ` [PATCH v5 03/17] OMAP3: hwmod data: add DSS DISPC RFBI DSI VENC Sumit Semwal
@ 2011-01-10 22:51 ` Paul Walmsley
0 siblings, 0 replies; 37+ messages in thread
From: Paul Walmsley @ 2011-01-10 22:51 UTC (permalink / raw)
To: Sumit Semwal, Senthilvadivu Guruswamy
Cc: tomi.valkeinen, khilman, hvaibhav, linux-omap
Hello Sumit, Senthilvadivu,
Here's a first pass of comments based on a preliminary review.
On Fri, 7 Jan 2011, Sumit Semwal wrote:
> From: Senthilvadivu Guruswamy <svadivu@ti.com>
>
> Hwmod needs database of all IPs in a system. This patch generates the hwmod
> database for Display Sub System applicable for OMAP3430-ES2 onwards and
> OMAP36xx. DSS is also considered as an IP as DISPC, RFBI and named as dss_dss.
> For all the IP modules in DSS, same clock is needed for enabling. Hwmod sees
> DSS IPs as independent IPs, so same clock has to be repeated for .main_clk in
> each IP.
>
> OMAP3430ES1 do not have IDLEST bit to poll on for dss IP. So this hwmod is
> not applicable for 3430ES1.
DSS still exists on the ES1 chips. So, this means that, after these
patches, DSS won't be usable on 3430ES1. Instead, please create separate
copies of the struct omap_hwmod_ocp_if and omap_hwmod records, labeled
with "omap3430es1", and label the others as "omap3430es2". It should be
possible to share most of the other data.
> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
> ---
> arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 339 ++++++++++++++++++++++++++++
> 1 files changed, 339 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 8d81813..5f5fbe8 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> @@ -44,6 +44,11 @@ static struct omap_hwmod omap3xxx_l3_main_hwmod;
> static struct omap_hwmod omap3xxx_l4_core_hwmod;
> static struct omap_hwmod omap3xxx_l4_per_hwmod;
> static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
> +static struct omap_hwmod omap3xxx_dss_dss_hwmod;
> +static struct omap_hwmod omap3xxx_dss_dispc_hwmod;
> +static struct omap_hwmod omap3xxx_dss_dsi1_hwmod;
> +static struct omap_hwmod omap3xxx_dss_rfbi_hwmod;
> +static struct omap_hwmod omap3xxx_dss_venc_hwmod;
> static struct omap_hwmod omap3xxx_i2c1_hwmod;
> static struct omap_hwmod omap3xxx_i2c2_hwmod;
> static struct omap_hwmod omap3xxx_i2c3_hwmod;
> @@ -84,6 +89,13 @@ static struct omap_hwmod_ocp_if *omap3xxx_l3_main_slaves[] = {
> &omap3xxx_mpu__l3_main,
> };
>
> +/* DSS -> l3 */
> +static struct omap_hwmod_ocp_if omap3xxx_dss__l3 = {
> + .master = &omap3xxx_dss_dss_hwmod,
> + .slave = &omap3xxx_l3_main_hwmod,
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> /* Master interfaces on the L3 interconnect */
> static struct omap_hwmod_ocp_if *omap3xxx_l3_main_masters[] = {
> &omap3xxx_l3_main__l4_core,
> @@ -664,6 +676,326 @@ static struct omap_hwmod_class i2c_class = {
> .sysc = &i2c_sysc,
> };
>
> +/*
> + * 'dss' class
> + * display sub-system
> + */
> +
> +static struct omap_hwmod_class_sysconfig omap3xxx_dss_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x0010,
> + .syss_offs = 0x0014,
> + .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
> + .sysc_fields = &omap_hwmod_sysc_type1,
> +};
> +
> +static struct omap_hwmod_class omap3xxx_dss_hwmod_class = {
> + .name = "dss",
> + .sysc = &omap3xxx_dss_sysc,
> +};
> +
> +/* dss */
> +static struct omap_hwmod_irq_info omap3xxx_dss_irqs[] = {
> + { .irq = 25 },
> +};
> +
> +static struct omap_hwmod_dma_info omap3xxx_dss_sdma_chs[] = {
> + { .name = "dispc", .dma_req = 5 },
> + { .name = "dsi1", .dma_req = 74 },
> +};
> +
> +/* dss */
> +/* dss master ports */
> +static struct omap_hwmod_ocp_if *omap3xxx_dss_masters[] = {
> + &omap3xxx_dss__l3,
> +};
> +
> +static struct omap_hwmod_addr_space omap3xxx_dss_addrs[] = {
> + {
> + .pa_start = 0x48050000,
> + .pa_end = 0x480503FF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss */
> +static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss = {
> + .master = &omap3xxx_l4_core_hwmod,
> + .slave = &omap3xxx_dss_dss_hwmod,
> + .clk = "dss_ick",
> + .addr = omap3xxx_dss_addrs,
> + .addr_cnt = ARRAY_SIZE(omap3xxx_dss_addrs),
This struct omap_hwmod_ocp_if record is missing firewall data.
Please add. See, for example, "omap3_l4_core__i2c1" in
mach-omap2/omap_hwmod_3xxx_data.c, for an example of how to add
this data. Much of the data that you need can be found in Table
5-113 "Region Allocation for L4-Core Interconnect" of the
OMAP34xx TRM Rev. ZH [SWPU222H].
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +/* dss slave ports */
> +static struct omap_hwmod_ocp_if *omap3xxx_dss_slaves[] = {
> + &omap3xxx_l4_core__dss,
> +};
> +
> +static struct omap_hwmod_opt_clk dss_opt_clks[] = {
> + { .role = "tv_clk", .clk = "dss_tv_fck" },
> + { .role = "dssclk", .clk = "dss_96m_fck" },
> + { .role = "sys_clk", .clk = "dss2_alwon_fck" },
> +};
> +
> +static struct omap_hwmod omap3xxx_dss_dss_hwmod = {
> + .name = "dss_dss",
> + .class = &omap3xxx_dss_hwmod_class,
> + .main_clk = "dss1_alwon_fck", /* instead of dss_fck */
> + .mpu_irqs = omap3xxx_dss_irqs,
> + .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_dss_irqs),
> + .sdma_reqs = omap3xxx_dss_sdma_chs,
> + .sdma_reqs_cnt = ARRAY_SIZE(omap3xxx_dss_sdma_chs),
> +
Please remove this extra blank line.
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP3430_EN_DSS1_SHIFT,
> + .module_offs = OMAP3430_DSS_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
> + },
> + },
> + .opt_clks = dss_opt_clks,
> + .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
> + .slaves = omap3xxx_dss_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_slaves),
> + .masters = omap3xxx_dss_masters,
> + .masters_cnt = ARRAY_SIZE(omap3xxx_dss_masters),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
> + CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
> +};
> +
> +/*
> + * 'dispc' class
> + * display controller
> + */
> +
> +static struct omap_hwmod_class_sysconfig omap3xxx_dispc_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x0010,
> + .syss_offs = 0x0014,
> + .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_CLOCKACTIVITY |
> + SYSC_HAS_MIDLEMODE | SYSC_HAS_ENAWAKEUP |
> + SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
> + .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
> + MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
> + .sysc_fields = &omap_hwmod_sysc_type1,
> +};
> +
> +static struct omap_hwmod_class omap3xxx_dispc_hwmod_class = {
> + .name = "dispc",
> + .sysc = &omap3xxx_dispc_sysc,
> +};
> +
> +static struct omap_hwmod_addr_space omap3xxx_dss_dispc_addrs[] = {
> + {
> + .pa_start = 0x48050400,
> + .pa_end = 0x480507FF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss_dispc */
> +static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dispc = {
> + .master = &omap3xxx_l4_core_hwmod,
> + .slave = &omap3xxx_dss_dispc_hwmod,
It appears, from reading Table 5-113 "Region Allocation for L4-Core
Interconnect" of the OMAP34xx TRM Rev. ZH [SWPU222H], that there is only
one L4 CORE port for the entire DSS. However, the struct
omap_hwmod_ocp_if data here claims that this submodule has its own L4 CORE
port. Shouldn't this struct omap_hwmod_ocp_if record have
omap3xxx_dss_dss_hwmod as its .master ? See also Figure 15-69 "Display
Subsystem Full Schematic".
> + .clk = "dss_ick",
> + .addr = omap3xxx_dss_dispc_addrs,
> + .addr_cnt = ARRAY_SIZE(omap3xxx_dss_dispc_addrs),
This struct omap_hwmod_ocp_if record is missing firewall data.
Please add. See, for example, "omap3_l4_core__i2c1" in
mach-omap2/omap_hwmod_3xxx_data.c, for an example of how to add
this data. Much of the data that you need can be found in Table
5-113 "Region Allocation for L4-Core Interconnect" of the
OMAP34xx TRM Rev. ZH [SWPU222H].
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +/* dss_dispc slave ports */
> +static struct omap_hwmod_ocp_if *omap3xxx_dss_dispc_slaves[] = {
> + &omap3xxx_l4_core__dss_dispc,
> +};
> +
> +static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
> + .name = "dss_dispc",
> + .class = &omap3xxx_dispc_hwmod_class,
> + .main_clk = "dss1_alwon_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP3430_EN_DSS1_SHIFT,
> + .module_offs = OMAP3430_DSS_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
> + },
> + },
> + .slaves = omap3xxx_dss_dispc_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_dispc_slaves),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
> + CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
> +};
> +
> +/*
> + * 'dsi' class
> + * display serial interface controller
> + */
> +
> +static struct omap_hwmod_class omap3xxx_dsi_hwmod_class = {
> + .name = "dsi",
> +};
> +
> +/* dss_dsi1 */
> +static struct omap_hwmod_addr_space omap3xxx_dss_dsi1_addrs[] = {
> + {
> + .pa_start = 0x4804FC00,
> + .pa_end = 0x4804FFFF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss_dsi1 */
> +static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_dsi1 = {
> + .master = &omap3xxx_l4_core_hwmod,
> + .slave = &omap3xxx_dss_dsi1_hwmod,
It appears, from reading Table 5-113 "Region Allocation for L4-Core
Interconnect" of the OMAP34xx TRM Rev. ZH [SWPU222H], that there is only
one L4 CORE port for the entire DSS. However, the struct
omap_hwmod_ocp_if data here claims that this submodule has its own L4 CORE
port. Shouldn't this struct omap_hwmod_ocp_if record have
omap3xxx_dss_dss_hwmod as its .master ? See also Figure 15-69 "Display
Subsystem Full Schematic".
> + .addr = omap3xxx_dss_dsi1_addrs,
> + .addr_cnt = ARRAY_SIZE(omap3xxx_dss_dsi1_addrs),
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +
> +/* dss_dsi1 slave ports */
> +static struct omap_hwmod_ocp_if *omap3xxx_dss_dsi1_slaves[] = {
> + &omap3xxx_l4_core__dss_dsi1,
> +};
> +
> +static struct omap_hwmod omap3xxx_dss_dsi1_hwmod = {
> + .name = "dss_dsi1",
> + .class = &omap3xxx_dsi_hwmod_class,
> + .main_clk = "dss1_alwon_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP3430_EN_DSS1_SHIFT,
> + .module_offs = OMAP3430_DSS_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
> + },
> + },
> + .slaves = omap3xxx_dss_dsi1_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_dsi1_slaves),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
> + CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
> +};
> +/*
> + * 'rfbi' class
> + * remote frame buffer interface
> + */
> +
> +static struct omap_hwmod_class_sysconfig omap3xxx_rfbi_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x0010,
> + .syss_offs = 0x0014,
> + .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
> + SYSC_HAS_AUTOIDLE),
> + .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
> + .sysc_fields = &omap_hwmod_sysc_type1,
> +};
> +
> +static struct omap_hwmod_class omap3xxx_rfbi_hwmod_class = {
> + .name = "rfbi",
> + .sysc = &omap3xxx_rfbi_sysc,
> +};
> +
> +static struct omap_hwmod_addr_space omap3xxx_dss_rfbi_addrs[] = {
> + {
> + .pa_start = 0x48050800,
> + .pa_end = 0x48050BFF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss_rfbi */
> +static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_rfbi = {
> + .master = &omap3xxx_l4_core_hwmod,
> + .slave = &omap3xxx_dss_rfbi_hwmod,
It appears, from reading Table 5-113 "Region Allocation for L4-Core
Interconnect" of the OMAP34xx TRM Rev. ZH [SWPU222H], that there is only
one L4 CORE port for the entire DSS. However, the struct
omap_hwmod_ocp_if data here claims that this submodule has its own L4 CORE
port. Shouldn't this struct omap_hwmod_ocp_if record have
omap3xxx_dss_dss_hwmod as its .master ? See also Figure 15-69 "Display
Subsystem Full Schematic".
> + .clk = "dss_ick",
> + .addr = omap3xxx_dss_rfbi_addrs,
> + .addr_cnt = ARRAY_SIZE(omap3xxx_dss_rfbi_addrs),
This struct omap_hwmod_ocp_if record is missing firewall data.
Please add. See, for example, "omap3_l4_core__i2c1" in
mach-omap2/omap_hwmod_3xxx_data.c, for an example of how to add
this data. Much of the data that you need can be found in Table
5-113 "Region Allocation for L4-Core Interconnect" of the
OMAP34xx TRM Rev. ZH [SWPU222H].
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +/* dss_rfbi slave ports */
> +static struct omap_hwmod_ocp_if *omap3xxx_dss_rfbi_slaves[] = {
> + &omap3xxx_l4_core__dss_rfbi,
> +};
> +
> +static struct omap_hwmod omap3xxx_dss_rfbi_hwmod = {
> + .name = "dss_rfbi",
> + .class = &omap3xxx_rfbi_hwmod_class,
> + .main_clk = "dss1_alwon_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP3430_EN_DSS1_SHIFT,
> + .module_offs = OMAP3430_DSS_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
> + },
> + },
> + .slaves = omap3xxx_dss_rfbi_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_rfbi_slaves),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
> + CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
> +};
> +
> +/*
> + * 'venc' class
> + * video encoder
> + */
> +
> +static struct omap_hwmod_class omap3xxx_venc_hwmod_class = {
> + .name = "venc",
> +};
> +
> +/* dss_venc */
> +static struct omap_hwmod_addr_space omap3xxx_dss_venc_addrs[] = {
> + {
> + .pa_start = 0x48050C00,
> + .pa_end = 0x48050FFF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss_venc */
> +static struct omap_hwmod_ocp_if omap3xxx_l4_core__dss_venc = {
> + .master = &omap3xxx_l4_core_hwmod,
> + .slave = &omap3xxx_dss_venc_hwmod,
It appears, from reading Table 5-113 "Region Allocation for L4-Core
Interconnect" of the OMAP34xx TRM Rev. ZH [SWPU222H], that there is only
one L4 CORE port for the entire DSS. However, the struct
omap_hwmod_ocp_if data here claims that this submodule has its own L4 CORE
port. Shouldn't this struct omap_hwmod_ocp_if record have
omap3xxx_dss_dss_hwmod as its .master ? See also Figure 15-69 "Display
Subsystem Full Schematic".
> + .clk = "dss_tv_fck",
> + .addr = omap3xxx_dss_venc_addrs,
> + .addr_cnt = ARRAY_SIZE(omap3xxx_dss_venc_addrs),
This struct omap_hwmod_ocp_if record is missing firewall data.
Please add. See, for example, "omap3_l4_core__i2c1" in
mach-omap2/omap_hwmod_3xxx_data.c, for an example of how to add
this data. Much of the data that you need can be found in Table
5-113 "Region Allocation for L4-Core Interconnect" of the
OMAP34xx TRM Rev. ZH [SWPU222H].
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +/* dss_venc slave ports */
> +static struct omap_hwmod_ocp_if *omap3xxx_dss_venc_slaves[] = {
> + &omap3xxx_l4_core__dss_venc,
> +};
> +
> +static struct omap_hwmod omap3xxx_dss_venc_hwmod = {
> + .name = "dss_venc",
> + .class = &omap3xxx_venc_hwmod_class,
> + .main_clk = "dss1_alwon_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP3430_EN_DSS1_SHIFT,
> + .module_offs = OMAP3430_DSS_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP3430ES2_ST_DSS_IDLE_SHIFT,
> + },
> + },
> + .slaves = omap3xxx_dss_venc_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap3xxx_dss_venc_slaves),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_GE_OMAP3430ES2 |
> + CHIP_IS_OMAP3630ES1 | CHIP_GE_OMAP3630ES1_1),
> +};
> +
> /* I2C1 */
>
> static struct omap_i2c_dev_attr i2c1_dev_attr = {
> @@ -1368,6 +1700,13 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
> &omap3xxx_uart2_hwmod,
> &omap3xxx_uart3_hwmod,
> &omap3xxx_uart4_hwmod,
> + /* dss class */
> + &omap3xxx_dss_dss_hwmod,
> + &omap3xxx_dss_dispc_hwmod,
> + &omap3xxx_dss_dsi1_hwmod,
> + &omap3xxx_dss_rfbi_hwmod,
> + &omap3xxx_dss_venc_hwmod,
> + /* i2c class */
> &omap3xxx_i2c1_hwmod,
> &omap3xxx_i2c2_hwmod,
> &omap3xxx_i2c3_hwmod,
> --
> 1.7.0.4
- Paul
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 01/17] OMAP2420: hwmod data: add DSS DISPC RFBI VENC
2011-01-07 11:25 ` [PATCH v5 01/17] OMAP2420: hwmod data: add DSS DISPC RFBI VENC Sumit Semwal
@ 2011-01-10 23:21 ` Paul Walmsley
0 siblings, 0 replies; 37+ messages in thread
From: Paul Walmsley @ 2011-01-10 23:21 UTC (permalink / raw)
To: Sumit Semwal, Senthilvadivu Guruswamy
Cc: tomi.valkeinen, khilman, hvaibhav, linux-omap, Benoit Cousson
Hello Sumit, Senthilvadivu,
here are some initial comments based on a preliminary review.
On Fri, 7 Jan 2011, Sumit Semwal wrote:
> From: Senthilvadivu Guruswamy <svadivu@ti.com>
>
> Hwmod needs database of all IPs in a system. This patch generates the hwmod
> database for OMAP2420 Display Sub System,. Since DSS is also considered as an
> IP as DISPC, RFBI, name it as dss_dss.
>
> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
> Acked-by: Benoit Cousson <b-cousson@ti.com>
> ---
> arch/arm/mach-omap2/omap_hwmod_2420_data.c | 283 ++++++++++++++++++++++++++++
> 1 files changed, 283 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
> index b85c630..14ae4a8 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
> @@ -38,6 +38,10 @@ static struct omap_hwmod omap2420_mpu_hwmod;
> static struct omap_hwmod omap2420_iva_hwmod;
> static struct omap_hwmod omap2420_l3_main_hwmod;
> static struct omap_hwmod omap2420_l4_core_hwmod;
> +static struct omap_hwmod omap2420_dss_dss_hwmod;
> +static struct omap_hwmod omap2420_dss_dispc_hwmod;
> +static struct omap_hwmod omap2420_dss_rfbi_hwmod;
> +static struct omap_hwmod omap2420_dss_venc_hwmod;
> static struct omap_hwmod omap2420_wd_timer2_hwmod;
> static struct omap_hwmod omap2420_gpio1_hwmod;
> static struct omap_hwmod omap2420_gpio2_hwmod;
> @@ -64,6 +68,13 @@ static struct omap_hwmod_ocp_if *omap2420_l3_main_slaves[] = {
> &omap2420_mpu__l3_main,
> };
>
> +/* DSS -> l3 */
> +static struct omap_hwmod_ocp_if omap2420_dss__l3 = {
> + .master = &omap2420_dss_dss_hwmod,
> + .slave = &omap2420_l3_main_hwmod,
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> /* Master interfaces on the L3 interconnect */
> static struct omap_hwmod_ocp_if *omap2420_l3_main_masters[] = {
> &omap2420_l3_main__l4_core,
> @@ -470,6 +481,272 @@ static struct omap_hwmod omap2420_uart3_hwmod = {
> .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
> };
>
> +/*
> + * 'dss' class
> + * display sub-system
> + */
> +
> +static struct omap_hwmod_class_sysconfig omap2420_dss_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x0010,
> + .syss_offs = 0x0014,
> + .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
> + .sysc_fields = &omap_hwmod_sysc_type1,
> +};
> +
> +static struct omap_hwmod_class omap2420_dss_hwmod_class = {
> + .name = "dss",
> + .sysc = &omap2420_dss_sysc,
> +};
> +
> +/* dss */
> +static struct omap_hwmod_irq_info omap2420_dss_irqs[] = {
> + { .irq = 25 },
> +};
> +
> +static struct omap_hwmod_dma_info omap2420_dss_sdma_chs[] = {
> + { .name = "dispc", .dma_req = 5 },
> +};
> +
> +/* dss */
> +/* dss master ports */
> +static struct omap_hwmod_ocp_if *omap2420_dss_masters[] = {
> + &omap2420_dss__l3,
> +};
> +
> +static struct omap_hwmod_addr_space omap2420_dss_addrs[] = {
> + {
> + .pa_start = 0x48050000,
> + .pa_end = 0x480503FF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss */
> +static struct omap_hwmod_ocp_if omap2420_l4_core__dss = {
> + .master = &omap2420_l4_core_hwmod,
> + .slave = &omap2420_dss_dss_hwmod,
> + .clk = "dss_ick",
> + .addr = omap2420_dss_addrs,
> + .addr_cnt = ARRAY_SIZE(omap2420_dss_addrs),
This struct omap_hwmod_ocp_if record is missing firewall data.
Please add. See, for example, "omap3_l4_core__i2c1" in
mach-omap2/omap_hwmod_3xxx_data.c, for an example of how to add
this data. Much of the data that you need can be found in Table
6-194 "L4 Interconnect Detailed Memory Mapping" of the OMAP242x TRM Rev. X
[SWPU064X].
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +/* dss slave ports */
> +static struct omap_hwmod_ocp_if *omap2420_dss_slaves[] = {
> + &omap2420_l4_core__dss,
> +};
> +
> +static struct omap_hwmod_opt_clk dss_opt_clks[] = {
> + { .role = "tv_clk", .clk = "dss_54m_fck" },
> + { .role = "sys_clk", .clk = "dss2_fck" },
> +};
> +
> +static struct omap_hwmod omap2420_dss_dss_hwmod = {
> + .name = "dss_dss",
> + .class = &omap2420_dss_hwmod_class,
> + .main_clk = "dss1_fck", /* instead of dss_fck */
> + .mpu_irqs = omap2420_dss_irqs,
> + .mpu_irqs_cnt = ARRAY_SIZE(omap2420_dss_irqs),
> + .sdma_reqs = omap2420_dss_sdma_chs,
> + .sdma_reqs_cnt = ARRAY_SIZE(omap2420_dss_sdma_chs),
> +
Please remove this extra blank line.
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_DSS1_SHIFT,
> + .module_offs = CORE_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
This should be .idlest_stdby_bit; see below.
> + },
> + },
> + .opt_clks = dss_opt_clks,
> + .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
> + .slaves = omap2420_dss_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2420_dss_slaves),
> + .masters = omap2420_dss_masters,
> + .masters_cnt = ARRAY_SIZE(omap2420_dss_masters),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
> + .flags = HWMOD_NO_IDLEST,
No hwmod should define .idlest_idle_bit and set HWMOD_NO_IDLEST; they are
mutually exclusive. In this case, looking at the definition of ST_DSS in
the TRM, it is defined as the module's standby status, so it is
appropriate to leave HWMOD_NO_IDLEST set here, but the assignment of
.idlest_idle_bit above is incorrect.
> +};
> +
> +/*
> + * 'dispc' class
> + * display controller
> + */
> +
> +static struct omap_hwmod_class_sysconfig omap2420_dispc_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x0010,
> + .syss_offs = 0x0014,
> + .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
> + SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
> + .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
> + MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
> + .sysc_fields = &omap_hwmod_sysc_type1,
> +};
> +
> +static struct omap_hwmod_class omap2420_dispc_hwmod_class = {
> + .name = "dispc",
> + .sysc = &omap2420_dispc_sysc,
> +};
> +
> +static struct omap_hwmod_addr_space omap2420_dss_dispc_addrs[] = {
> + {
> + .pa_start = 0x48050400,
> + .pa_end = 0x480507FF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss_dispc */
> +static struct omap_hwmod_ocp_if omap2420_l4_core__dss_dispc = {
> + .master = &omap2420_l4_core_hwmod,
> + .slave = &omap2420_dss_dispc_hwmod,
It appears, from reading Table 6-194 "L4 Interconnect Detailed
Memory Mapping" of the OMAP242x TRM Rev. X [SWPU064X], that there
is only one L4 CORE port for the entire DSS. However, the struct
omap_hwmod_ocp_if data here claims that this submodule has its
own L4 CORE port. Shouldn't this struct omap_hwmod_ocp_if record
have omap2420_dss_dss_hwmod as its .master ? See also Figure
17-2 "Display Subsystem Schematic".
> + .clk = "dss_ick",
> + .addr = omap2420_dss_dispc_addrs,
> + .addr_cnt = ARRAY_SIZE(omap2420_dss_dispc_addrs),
This struct omap_hwmod_ocp_if record is missing firewall data.
Please add. See, for example, "omap3_l4_core__i2c1" in
mach-omap2/omap_hwmod_3xxx_data.c, for an example of how to add
this data. Much of the data that you need can be found in Table
6-194 "L4 Interconnect Detailed Memory Mapping" of the OMAP242x TRM Rev. X
[SWPU064X].
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +/* dss_dispc slave ports */
> +static struct omap_hwmod_ocp_if *omap2420_dss_dispc_slaves[] = {
> + &omap2420_l4_core__dss_dispc,
> +};
> +
> +static struct omap_hwmod omap2420_dss_dispc_hwmod = {
> + .name = "dss_dispc",
> + .class = &omap2420_dispc_hwmod_class,
> + .main_clk = "dss1_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_DSS1_SHIFT,
> + .module_offs = CORE_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
This should be .idlest_stdby_bit; see below.
> + },
> + },
> + .slaves = omap2420_dss_dispc_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2420_dss_dispc_slaves),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
> + .flags = HWMOD_NO_IDLEST,
No hwmod should define .idlest_idle_bit and set HWMOD_NO_IDLEST; they are
mutually exclusive. In this case, looking at the definition of ST_DSS in
the TRM, it is defined as the module's standby status, so it is
appropriate to leave HWMOD_NO_IDLEST set here, but the assignment of
.idlest_idle_bit above is incorrect.
> +};
> +
> +/*
> + * 'rfbi' class
> + * remote frame buffer interface
> + */
> +
> +static struct omap_hwmod_class_sysconfig omap2420_rfbi_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x0010,
> + .syss_offs = 0x0014,
> + .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
> + SYSC_HAS_AUTOIDLE),
> + .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
> + .sysc_fields = &omap_hwmod_sysc_type1,
> +};
> +
> +static struct omap_hwmod_class omap2420_rfbi_hwmod_class = {
> + .name = "rfbi",
> + .sysc = &omap2420_rfbi_sysc,
> +};
> +
> +static struct omap_hwmod_addr_space omap2420_dss_rfbi_addrs[] = {
> + {
> + .pa_start = 0x48050800,
> + .pa_end = 0x48050BFF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss_rfbi */
> +static struct omap_hwmod_ocp_if omap2420_l4_core__dss_rfbi = {
> + .master = &omap2420_l4_core_hwmod,
> + .slave = &omap2420_dss_rfbi_hwmod,
It appears, from reading Table 6-194 "L4 Interconnect Detailed
Memory Mapping" of the OMAP242x TRM Rev. X [SWPU064X], that there
is only one L4 CORE port for the entire DSS. However, the struct
omap_hwmod_ocp_if data here claims that this submodule has its
own L4 CORE port. Shouldn't this struct omap_hwmod_ocp_if record
have omap2420_dss_dss_hwmod as its .master ? See also Figure
17-2 "Display Subsystem Schematic".
> + .clk = "dss_ick",
> + .addr = omap2420_dss_rfbi_addrs,
> + .addr_cnt = ARRAY_SIZE(omap2420_dss_rfbi_addrs),
This struct omap_hwmod_ocp_if record is missing firewall data.
Please add. See, for example, "omap3_l4_core__i2c1" in
mach-omap2/omap_hwmod_3xxx_data.c, for an example of how to add
this data. Much of the data that you need can be found in Table
6-194 "L4 Interconnect Detailed Memory Mapping" of the OMAP242x TRM Rev. X
[SWPU064X].
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +/* dss_rfbi slave ports */
> +static struct omap_hwmod_ocp_if *omap2420_dss_rfbi_slaves[] = {
> + &omap2420_l4_core__dss_rfbi,
> +};
> +
> +static struct omap_hwmod omap2420_dss_rfbi_hwmod = {
> + .name = "dss_rfbi",
> + .class = &omap2420_rfbi_hwmod_class,
> + .main_clk = "dss1_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_DSS1_SHIFT,
> + .module_offs = CORE_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
I don't think this module should have .idlest_idle_bit, .idlest_stdby_bit,
or .idlest_reg_id set. From my reading of the OMAP242x TRM Rev. X
[SWPU064X], particularly Figure 17-2 "Display Subsystem Schematic", it
appears that the L3 initiator interface is only connected to the DISPC
module and possibly the main DSS module.
> + },
> + },
> + .slaves = omap2420_dss_rfbi_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2420_dss_rfbi_slaves),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
> + .flags = HWMOD_NO_IDLEST,
> +};
> +
> +/*
> + * 'venc' class
> + * video encoder
> + */
> +
> +static struct omap_hwmod_class omap2420_venc_hwmod_class = {
> + .name = "venc",
> +};
> +
> +/* dss_venc */
> +static struct omap_hwmod_addr_space omap2420_dss_venc_addrs[] = {
> + {
> + .pa_start = 0x48050C00,
> + .pa_end = 0x48050FFF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss_venc */
> +static struct omap_hwmod_ocp_if omap2420_l4_core__dss_venc = {
> + .master = &omap2420_l4_core_hwmod,
> + .slave = &omap2420_dss_venc_hwmod,
It appears, from reading Table 6-194 "L4 Interconnect Detailed
Memory Mapping" of the OMAP242x TRM Rev. X [SWPU064X], that there
is only one L4 CORE port for the entire DSS. However, the struct
omap_hwmod_ocp_if data here claims that this submodule has its
own L4 CORE port. Shouldn't this struct omap_hwmod_ocp_if record
have omap2420_dss_dss_hwmod as its .master ? See also Figure
17-2 "Display Subsystem Schematic".
> + .clk = "dss_54m_fck",
> + .addr = omap2420_dss_venc_addrs,
> + .addr_cnt = ARRAY_SIZE(omap2420_dss_venc_addrs),
This struct omap_hwmod_ocp_if record is missing firewall data. Please add.
See, for example, "omap3_l4_core__i2c1" in
mach-omap2/omap_hwmod_3xxx_data.c, for an example of how to add this data.
Much of the data that you need can be found in Table 6-194 "L4
Interconnect Detailed Memory Mapping" of the OMAP242x TRM Rev. X
[SWPU064X].
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +/* dss_venc slave ports */
> +static struct omap_hwmod_ocp_if *omap2420_dss_venc_slaves[] = {
> + &omap2420_l4_core__dss_venc,
> +};
> +
> +static struct omap_hwmod omap2420_dss_venc_hwmod = {
> + .name = "dss_venc",
> + .class = &omap2420_venc_hwmod_class,
> + .main_clk = "dss1_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_DSS1_SHIFT,
> + .module_offs = CORE_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
I don't think this module should have .idlest_idle_bit, .idlest_stdby_bit,
or .idlest_reg_id set. From my reading of the OMAP242x TRM Rev. X
[SWPU064X], particularly Figure 17-2 "Display Subsystem Schematic", it
appears that the L3 initiator interface is only connected to the DISPC
module and possibly the main DSS module.
> + },
> + },
> + .slaves = omap2420_dss_venc_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2420_dss_venc_slaves),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
> + .flags = HWMOD_NO_IDLEST,
> +};
> +
> /* I2C common */
> static struct omap_hwmod_class_sysconfig i2c_sysc = {
> .rev_offs = 0x00,
> @@ -874,6 +1151,12 @@ static __initdata struct omap_hwmod *omap2420_hwmods[] = {
> &omap2420_uart1_hwmod,
> &omap2420_uart2_hwmod,
> &omap2420_uart3_hwmod,
> + /* dss class */
> + &omap2420_dss_dss_hwmod,
> + &omap2420_dss_dispc_hwmod,
> + &omap2420_dss_rfbi_hwmod,
> + &omap2420_dss_venc_hwmod,
> + /* i2c class */
> &omap2420_i2c1_hwmod,
> &omap2420_i2c2_hwmod,
>
> --
> 1.7.0.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
- Paul
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 02/17] OMAP2430: hwmod data: add DSS DISPC RFBI VENC
2011-01-07 11:25 ` [PATCH v5 02/17] OMAP2430: " Sumit Semwal
@ 2011-01-10 23:43 ` Paul Walmsley
0 siblings, 0 replies; 37+ messages in thread
From: Paul Walmsley @ 2011-01-10 23:43 UTC (permalink / raw)
To: Sumit Semwal, Senthilvadivu Guruswamy
Cc: tomi.valkeinen, khilman, hvaibhav, linux-omap, b-cousson
Hello Sumit, Senthilvadivu,
here are some initial comments based on a preliminary review.
On Fri, 7 Jan 2011, Sumit Semwal wrote:
> From: Senthilvadivu Guruswamy <svadivu@ti.com>
>
> Hwmod needs database of all IPs in a system. This patch generates the hwmod
> database for OMAP2430 Display Sub System. Since DSS is also considered as an
> IP as DISPC, RFBI, name it as dss_dss.
>
> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
> Acked-by: Benoit Cousson <b-cousson@ti.com>
> ---
> arch/arm/mach-omap2/omap_hwmod_2430_data.c | 282 ++++++++++++++++++++++++++++
> 1 files changed, 282 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
> index 8ecfbcd..b06eeea 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
> @@ -38,6 +38,10 @@ static struct omap_hwmod omap2430_mpu_hwmod;
> static struct omap_hwmod omap2430_iva_hwmod;
> static struct omap_hwmod omap2430_l3_main_hwmod;
> static struct omap_hwmod omap2430_l4_core_hwmod;
> +static struct omap_hwmod omap2430_dss_dss_hwmod;
> +static struct omap_hwmod omap2430_dss_dispc_hwmod;
> +static struct omap_hwmod omap2430_dss_rfbi_hwmod;
> +static struct omap_hwmod omap2430_dss_venc_hwmod;
What about the SDI module? According to the OMAP2430 TRM Rev. Z
[SWPU090Z] Figure 15-32 "Display Subsystem Integration", there is an SDI
module here also.
> static struct omap_hwmod omap2430_wd_timer2_hwmod;
> static struct omap_hwmod omap2430_gpio1_hwmod;
> static struct omap_hwmod omap2430_gpio2_hwmod;
> @@ -65,6 +69,13 @@ static struct omap_hwmod_ocp_if *omap2430_l3_main_slaves[] = {
> &omap2430_mpu__l3_main,
> };
>
> +/* DSS -> l3 */
> +static struct omap_hwmod_ocp_if omap2430_dss__l3 = {
> + .master = &omap2430_dss_dss_hwmod,
> + .slave = &omap2430_l3_main_hwmod,
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> /* Master interfaces on the L3 interconnect */
> static struct omap_hwmod_ocp_if *omap2430_l3_main_masters[] = {
> &omap2430_l3_main__l4_core,
> @@ -469,6 +480,271 @@ static struct omap_hwmod omap2430_uart3_hwmod = {
> .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
> };
>
> +/*
> + * 'dss' class
> + * display sub-system
> + */
> +
> +static struct omap_hwmod_class_sysconfig omap2430_dss_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x0010,
> + .syss_offs = 0x0014,
> + .sysc_flags = (SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
> + .sysc_fields = &omap_hwmod_sysc_type1,
> +};
> +
> +static struct omap_hwmod_class omap2430_dss_hwmod_class = {
> + .name = "dss",
> + .sysc = &omap2430_dss_sysc,
> +};
> +
> +/* dss */
> +static struct omap_hwmod_irq_info omap2430_dss_irqs[] = {
> + { .irq = 25 },
> +};
> +static struct omap_hwmod_dma_info omap2430_dss_sdma_chs[] = {
> + { .name = "dispc", .dma_req = 5 },
> +};
> +
> +/* dss */
> +/* dss master ports */
> +static struct omap_hwmod_ocp_if *omap2430_dss_masters[] = {
> + &omap2430_dss__l3,
> +};
> +
> +static struct omap_hwmod_addr_space omap2430_dss_addrs[] = {
> + {
> + .pa_start = 0x48050000,
> + .pa_end = 0x480503FF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss */
> +static struct omap_hwmod_ocp_if omap2430_l4_core__dss = {
> + .master = &omap2430_l4_core_hwmod,
> + .slave = &omap2430_dss_dss_hwmod,
> + .clk = "dss_ick",
> + .addr = omap2430_dss_addrs,
> + .addr_cnt = ARRAY_SIZE(omap2430_dss_addrs),
This struct omap_hwmod_ocp_if record is missing firewall data.
Please add. See, for example, "omap3_l4_core__i2c1" in
mach-omap2/omap_hwmod_3xxx_data.c, for an example of how to add
this data. Much of the data that you need can be found in Table
5-108 "L4 Core Memory Space Mapping" of the OMAP2430 TRM Rev. Z
[SWPU090Z].
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +/* dss slave ports */
> +static struct omap_hwmod_ocp_if *omap2430_dss_slaves[] = {
> + &omap2430_l4_core__dss,
> +};
> +
> +static struct omap_hwmod_opt_clk dss_opt_clks[] = {
> + { .role = "tv_clk", .clk = "dss_54m_fck" },
> + { .role = "sys_clk", .clk = "dss2_fck" },
> +};
> +
> +static struct omap_hwmod omap2430_dss_dss_hwmod = {
> + .name = "dss_dss",
> + .class = &omap2430_dss_hwmod_class,
> + .main_clk = "dss1_fck", /* instead of dss_fck */
> + .mpu_irqs = omap2430_dss_irqs,
> + .mpu_irqs_cnt = ARRAY_SIZE(omap2430_dss_irqs),
> + .sdma_reqs = omap2430_dss_sdma_chs,
> + .sdma_reqs_cnt = ARRAY_SIZE(omap2430_dss_sdma_chs),
> +
Please remove this extra blank line.
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_DSS1_SHIFT,
> + .module_offs = CORE_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
According to Table 4-219 "CM_IDLEST_DSS" of the OMAP2430 TRM Rev. Z
[SWPU090Z], the DSS has both a target idle and an initiator standby status
bit. Please update the fields here accordingly. You may also need to add
a patch to your series to update the mach-omap2/cm-regbits-24xx.h file.
> + },
> + },
> + .opt_clks = dss_opt_clks,
> + .opt_clks_cnt = ARRAY_SIZE(dss_opt_clks),
> + .slaves = omap2430_dss_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2430_dss_slaves),
> + .masters = omap2430_dss_masters,
> + .masters_cnt = ARRAY_SIZE(omap2430_dss_masters),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
> + .flags = HWMOD_NO_IDLEST,
2430 DSS has a target idle status bit, so this flag shouldn't be set.
> +};
> +
> +/*
> + * 'dispc' class
> + * display controller
> + */
> +
> +static struct omap_hwmod_class_sysconfig omap2430_dispc_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x0010,
> + .syss_offs = 0x0014,
> + .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_MIDLEMODE |
> + SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
> + .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
> + MSTANDBY_FORCE | MSTANDBY_NO | MSTANDBY_SMART),
> + .sysc_fields = &omap_hwmod_sysc_type1,
> +};
> +
> +static struct omap_hwmod_class omap2430_dispc_hwmod_class = {
> + .name = "dispc",
> + .sysc = &omap2430_dispc_sysc,
> +};
> +
> +static struct omap_hwmod_addr_space omap2430_dss_dispc_addrs[] = {
> + {
> + .pa_start = 0x48050400,
> + .pa_end = 0x480507FF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss_dispc */
> +static struct omap_hwmod_ocp_if omap2430_l4_core__dss_dispc = {
> + .master = &omap2430_l4_core_hwmod,
> + .slave = &omap2430_dss_dispc_hwmod,
It appears, from reading Table 5-108 "L4 Core Memory Space
Mapping" of the OMAP2430 TRM Rev. Z [SWPU090Z], that there is
only one L4 CORE port for the entire DSS. However, the struct
omap_hwmod_ocp_if data here claims that this submodule has its
own L4 CORE port. Shouldn't this struct omap_hwmod_ocp_if record
have omap2430_dss_dss_hwmod as its .master ? See also Figure
15-33 "Display Subsystem Full Schematic".
> + .clk = "dss_ick",
> + .addr = omap2430_dss_dispc_addrs,
> + .addr_cnt = ARRAY_SIZE(omap2430_dss_dispc_addrs),
This struct omap_hwmod_ocp_if record is missing firewall data.
Please add. See, for example, "omap3_l4_core__i2c1" in
mach-omap2/omap_hwmod_3xxx_data.c, for an example of how to add
this data. Much of the data that you need can be found in Table
5-108 "L4 Core Memory Space Mapping" of the OMAP2430 TRM Rev. Z
[SWPU090Z].
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +/* dss_dispc slave ports */
> +static struct omap_hwmod_ocp_if *omap2430_dss_dispc_slaves[] = {
> + &omap2430_l4_core__dss_dispc,
> +};
> +
> +static struct omap_hwmod omap2430_dss_dispc_hwmod = {
> + .name = "dss_dispc",
> + .class = &omap2430_dispc_hwmod_class,
> + .main_clk = "dss1_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_DSS1_SHIFT,
> + .module_offs = CORE_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
According to Table 4-219 "CM_IDLEST_DSS" of the OMAP2430 TRM Rev. Z
[SWPU090Z], the DSS has both a target idle and an initiator standby status
bit. Please update the fields here accordingly. You may also need to add
a patch to your series to update the mach-omap2/cm-regbits-24xx.h file.
> + },
> + },
> + .slaves = omap2430_dss_dispc_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2430_dss_dispc_slaves),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
> + .flags = HWMOD_NO_IDLEST,
2430 DSS has a target idle status bit, so this flag shouldn't be set.
> +};
> +
> +/*
> + * 'rfbi' class
> + * remote frame buffer interface
> + */
> +
> +static struct omap_hwmod_class_sysconfig omap2430_rfbi_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x0010,
> + .syss_offs = 0x0014,
> + .sysc_flags = (SYSC_HAS_SIDLEMODE | SYSC_HAS_SOFTRESET |
> + SYSC_HAS_AUTOIDLE),
> + .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
> + .sysc_fields = &omap_hwmod_sysc_type1,
> +};
> +
> +static struct omap_hwmod_class omap2430_rfbi_hwmod_class = {
> + .name = "rfbi",
> + .sysc = &omap2430_rfbi_sysc,
> +};
> +
> +static struct omap_hwmod_addr_space omap2430_dss_rfbi_addrs[] = {
> + {
> + .pa_start = 0x48050800,
> + .pa_end = 0x48050BFF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss_rfbi */
> +static struct omap_hwmod_ocp_if omap2430_l4_core__dss_rfbi = {
> + .master = &omap2430_l4_core_hwmod,
> + .slave = &omap2430_dss_rfbi_hwmod,
It appears, from reading Table 5-108 "L4 Core Memory Space
Mapping" of the OMAP2430 TRM Rev. Z [SWPU090Z], that there is
only one L4 CORE port for the entire DSS. However, the struct
omap_hwmod_ocp_if data here claims that this submodule has its
own L4 CORE port. Shouldn't this struct omap_hwmod_ocp_if record
have omap2430_dss_dss_hwmod as its .master ? See also Figure
15-33 "Display Subsystem Full Schematic".
> + .clk = "dss_ick",
> + .addr = omap2430_dss_rfbi_addrs,
> + .addr_cnt = ARRAY_SIZE(omap2430_dss_rfbi_addrs),
This struct omap_hwmod_ocp_if record is missing firewall data.
Please add. See, for example, "omap3_l4_core__i2c1" in
mach-omap2/omap_hwmod_3xxx_data.c, for an example of how to add
this data. Much of the data that you need can be found in Table
5-108 "L4 Core Memory Space Mapping" of the OMAP2430 TRM Rev. Z
[SWPU090Z].
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +/* dss_rfbi slave ports */
> +static struct omap_hwmod_ocp_if *omap2430_dss_rfbi_slaves[] = {
> + &omap2430_l4_core__dss_rfbi,
> +};
> +
> +static struct omap_hwmod omap2430_dss_rfbi_hwmod = {
> + .name = "dss_rfbi",
> + .class = &omap2430_rfbi_hwmod_class,
> + .main_clk = "dss1_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_DSS1_SHIFT,
> + .module_offs = CORE_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
See the above comments regarding these .prcm sections. Since this module
doesn't have anything to do with the L3 interface, it shouldn't have an
.idlest_stdby_bit, but the idlest_idle_bit should presumably be
OMAP2430_ST_DSS_IDLE_SHIFT.
> + },
> + },
> + .slaves = omap2430_dss_rfbi_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2430_dss_rfbi_slaves),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
> + .flags = HWMOD_NO_IDLEST,
2430 DSS has a target idle status bit, so this flag shouldn't be set.
> +};
> +
> +/*
> + * 'venc' class
> + * video encoder
> + */
> +
> +static struct omap_hwmod_class omap2430_venc_hwmod_class = {
> + .name = "venc",
> +};
> +
> +/* dss_venc */
> +static struct omap_hwmod_addr_space omap2430_dss_venc_addrs[] = {
> + {
> + .pa_start = 0x48050C00,
> + .pa_end = 0x48050FFF,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +/* l4_core -> dss_venc */
> +static struct omap_hwmod_ocp_if omap2430_l4_core__dss_venc = {
> + .master = &omap2430_l4_core_hwmod,
> + .slave = &omap2430_dss_venc_hwmod,
It appears, from reading Table 5-108 "L4 Core Memory Space
Mapping" of the OMAP2430 TRM Rev. Z [SWPU090Z], that there is
only one L4 CORE port for the entire DSS. However, the struct
omap_hwmod_ocp_if data here claims that this submodule has its
own L4 CORE port. Shouldn't this struct omap_hwmod_ocp_if record
have omap2430_dss_dss_hwmod as its .master ? See also Figure
15-33 "Display Subsystem Full Schematic".
> + .clk = "dss_54m_fck",
> + .addr = omap2430_dss_venc_addrs,
> + .addr_cnt = ARRAY_SIZE(omap2430_dss_venc_addrs),
This struct omap_hwmod_ocp_if record is missing firewall data.
Please add. See, for example, "omap3_l4_core__i2c1" in
mach-omap2/omap_hwmod_3xxx_data.c, for an example of how to add
this data. Much of the data that you need can be found in Table
5-108 "L4 Core Memory Space Mapping" of the OMAP2430 TRM Rev. Z
[SWPU090Z].
> + .user = OCP_USER_MPU,
Unless there's some reason why the SDMA can't access this module,
the .user field should be set to OCP_USER_MPU | OCP_USER_SDMA.
> +};
> +
> +/* dss_venc slave ports */
> +static struct omap_hwmod_ocp_if *omap2430_dss_venc_slaves[] = {
> + &omap2430_l4_core__dss_venc,
> +};
> +
> +static struct omap_hwmod omap2430_dss_venc_hwmod = {
> + .name = "dss_venc",
> + .class = &omap2430_venc_hwmod_class,
> + .main_clk = "dss1_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_DSS1_SHIFT,
> + .module_offs = CORE_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_DSS_SHIFT,
See the above comments regarding these .prcm sections. Since this module
doesn't have anything to do with the L3 interface, it shouldn't have an
.idlest_stdby_bit, but the idlest_idle_bit should presumably be
OMAP2430_ST_DSS_IDLE_SHIFT.
> + },
> + },
> + .slaves = omap2430_dss_venc_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2430_dss_venc_slaves),
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
> + .flags = HWMOD_NO_IDLEST,
2430 DSS has a target idle status bit, so this flag shouldn't be set.
> +};
> +
> /* I2C common */
> static struct omap_hwmod_class_sysconfig i2c_sysc = {
> .rev_offs = 0x00,
> @@ -929,6 +1205,12 @@ static __initdata struct omap_hwmod *omap2430_hwmods[] = {
> &omap2430_uart1_hwmod,
> &omap2430_uart2_hwmod,
> &omap2430_uart3_hwmod,
> + /* dss class */
> + &omap2430_dss_dss_hwmod,
> + &omap2430_dss_dispc_hwmod,
> + &omap2430_dss_rfbi_hwmod,
> + &omap2430_dss_venc_hwmod,
> + /* i2c class */
> &omap2430_i2c1_hwmod,
> &omap2430_i2c2_hwmod,
>
> --
> 1.7.0.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
- Paul
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 04/17] OMAP2,3 DSS2 Change driver name to omap_display
2011-01-07 11:25 ` [PATCH v5 04/17] OMAP2,3 DSS2 Change driver name to omap_display Sumit Semwal
@ 2011-01-10 23:55 ` Paul Walmsley
2011-01-11 5:17 ` Semwal, Sumit
0 siblings, 1 reply; 37+ messages in thread
From: Paul Walmsley @ 2011-01-10 23:55 UTC (permalink / raw)
To: Sumit Semwal
Cc: tomi.valkeinen, khilman, hvaibhav, linux-omap,
Senthilvadivu Guruswamy
On Fri, 7 Jan 2011, Sumit Semwal wrote:
> From: Senthilvadivu Guruswamy <svadivu@ti.com>
>
> Change the driver name from omapdss to omap_display as the driver takes care of
> the display devices ie number of panels, type of panels available in the
> platform. Change the device name in the board files and 2420,2430,3xxx clock
> files from omapdss to omap_display to match the driver name.
>
> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
Sumit, your Signed-off-by: is missing on this and some of the other
patches. Please add it in if you will be submitting these.
> ---
> arch/arm/mach-omap2/clock2420_data.c | 8 ++++----
> arch/arm/mach-omap2/clock2430_data.c | 8 ++++----
> arch/arm/mach-omap2/clock3xxx_data.c | 14 +++++++-------
The clkdev changes in the above three files are
Acked-by: Paul Walmsley <paul@pwsan.com>
- Paul
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 10/17] OMAP2,3: DSS2: Move clocks from core driver to dss driver
2011-01-07 11:25 ` [PATCH v5 10/17] OMAP2,3: DSS2: Move clocks from core driver to dss driver Sumit Semwal
@ 2011-01-10 23:59 ` Paul Walmsley
2011-01-11 5:16 ` Semwal, Sumit
0 siblings, 1 reply; 37+ messages in thread
From: Paul Walmsley @ 2011-01-10 23:59 UTC (permalink / raw)
To: Sumit Semwal
Cc: tomi.valkeinen, khilman, hvaibhav, linux-omap,
Senthilvadivu Guruswamy
On Fri, 7 Jan 2011, Sumit Semwal wrote:
> From: Senthilvadivu Guruswamy <svadivu@ti.com>
>
> All clock management is moved to dss platform driver. clk_get/put APIs use
> dss device instead of core platform device.
>
> Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
> So the device name is changed from omap_display to omap_dss in 2420, 2430,
> 3xxx clock database files. Now the core driver "omap_display" only takes care
> of panel registration with the custom bus.
> core driver also uses the clk_enable() / clk_disable() APIs exposed by DSS for
> clock management.
> DSS driver would do clock management of clocks needed by DISPC, RFBI, DSI, VENC
>
> TODO: The clock content would be adapted to omap_hwmod in a seperate series.
>
> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
> ---
> arch/arm/mach-omap2/clock2420_data.c | 8 +-
> arch/arm/mach-omap2/clock2430_data.c | 8 +-
> arch/arm/mach-omap2/clock3xxx_data.c | 14 +-
...
>
> diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c
> index a220820..7a56c67 100644
> --- a/arch/arm/mach-omap2/clock2420_data.c
> +++ b/arch/arm/mach-omap2/clock2420_data.c
> @@ -1786,10 +1786,10 @@ static struct omap_clk omap2420_clks[] = {
> CLK(NULL, "gfx_2d_fck", &gfx_2d_fck, CK_242X),
> CLK(NULL, "gfx_ick", &gfx_ick, CK_242X),
> /* DSS domain clocks */
> - CLK("omap_display", "ick", &dss_ick, CK_242X),
> - CLK("omap_display", "dss1_fck", &dss1_fck, CK_242X),
> - CLK("omap_display", "dss2_fck", &dss2_fck, CK_242X),
> - CLK("omap_display", "tv_fck", &dss_54m_fck, CK_242X),
> + CLK("omap_dss", "ick", &dss_ick, CK_242X),
> + CLK("omap_dss", "dss1_fck", &dss1_fck, CK_242X),
> + CLK("omap_dss", "dss2_fck", &dss2_fck, CK_242X),
> + CLK("omap_dss", "tv_fck", &dss_54m_fck, CK_242X),
> /* L3 domain clocks */
> CLK(NULL, "core_l3_ck", &core_l3_ck, CK_242X),
> CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_242X),
It would be nice if you could figure out some way to combine or
restructure these changes with the patch 4 changes, to avoid changing
these from "omapdss" to "omap_display" then to "omap_dss".
In any case,
Acked-by: Paul Walmsley <paul@pwsan.com>
- Paul
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 10/17] OMAP2,3: DSS2: Move clocks from core driver to dss driver
2011-01-10 23:59 ` Paul Walmsley
@ 2011-01-11 5:16 ` Semwal, Sumit
0 siblings, 0 replies; 37+ messages in thread
From: Semwal, Sumit @ 2011-01-11 5:16 UTC (permalink / raw)
To: Paul Walmsley
Cc: tomi.valkeinen, khilman, hvaibhav, linux-omap,
Senthilvadivu Guruswamy
Hi Paul,
On Tue, Jan 11, 2011 at 5:29 AM, Paul Walmsley <paul@pwsan.com> wrote:
> On Fri, 7 Jan 2011, Sumit Semwal wrote:
>
>> From: Senthilvadivu Guruswamy <svadivu@ti.com>
>>
>> All clock management is moved to dss platform driver. clk_get/put APIs use
>> dss device instead of core platform device.
>>
>> Hwmod adaptation design requires each of the DSS HW IP to be a platform driver.
>> So the device name is changed from omap_display to omap_dss in 2420, 2430,
>> 3xxx clock database files. Now the core driver "omap_display" only takes care
>> of panel registration with the custom bus.
>> core driver also uses the clk_enable() / clk_disable() APIs exposed by DSS for
>> clock management.
>> DSS driver would do clock management of clocks needed by DISPC, RFBI, DSI, VENC
>>
>> TODO: The clock content would be adapted to omap_hwmod in a seperate series.
>>
>> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
>> Signed-off-by: Sumit Semwal <sumit.semwal@ti.com>
>> ---
>> arch/arm/mach-omap2/clock2420_data.c | 8 +-
>> arch/arm/mach-omap2/clock2430_data.c | 8 +-
>> arch/arm/mach-omap2/clock3xxx_data.c | 14 +-
>
> ...
>
>>
>> diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c
>> index a220820..7a56c67 100644
>> --- a/arch/arm/mach-omap2/clock2420_data.c
>> +++ b/arch/arm/mach-omap2/clock2420_data.c
>> @@ -1786,10 +1786,10 @@ static struct omap_clk omap2420_clks[] = {
>> CLK(NULL, "gfx_2d_fck", &gfx_2d_fck, CK_242X),
>> CLK(NULL, "gfx_ick", &gfx_ick, CK_242X),
>> /* DSS domain clocks */
>> - CLK("omap_display", "ick", &dss_ick, CK_242X),
>> - CLK("omap_display", "dss1_fck", &dss1_fck, CK_242X),
>> - CLK("omap_display", "dss2_fck", &dss2_fck, CK_242X),
>> - CLK("omap_display", "tv_fck", &dss_54m_fck, CK_242X),
>> + CLK("omap_dss", "ick", &dss_ick, CK_242X),
>> + CLK("omap_dss", "dss1_fck", &dss1_fck, CK_242X),
>> + CLK("omap_dss", "dss2_fck", &dss2_fck, CK_242X),
>> + CLK("omap_dss", "tv_fck", &dss_54m_fck, CK_242X),
>> /* L3 domain clocks */
>> CLK(NULL, "core_l3_ck", &core_l3_ck, CK_242X),
>> CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_242X),
>
> It would be nice if you could figure out some way to combine or
> restructure these changes with the patch 4 changes, to avoid changing
> these from "omapdss" to "omap_display" then to "omap_dss".
I thought, and realized that this is done to make sure functionality's
not broken after each patch; here's the logic.
patch 4 is the first step in re-defining role of core.c - this DSS
file should not handle ALL clocks / regulators, but just some related
to displays, hence the move to device name 'omap_display'. At this
point, since all DSS clock handling is still in the same file, we
changed the controlling device name also to 'omap_display'.
patch 10 then is the second step, when all clock handling is moved to
dss.c, and as a result, device_name for all clocks gets changed to
'omap_dss'; for display regulator supplies [like DVI], still the
controlling device is 'omap_display'.
>
> In any case,
>
> Acked-by: Paul Walmsley <paul@pwsan.com>
Thanks for the Ack! :)
~Sumit.
>
>
>
> - Paul
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 37+ messages in thread
* Re: [PATCH v5 04/17] OMAP2,3 DSS2 Change driver name to omap_display
2011-01-10 23:55 ` Paul Walmsley
@ 2011-01-11 5:17 ` Semwal, Sumit
0 siblings, 0 replies; 37+ messages in thread
From: Semwal, Sumit @ 2011-01-11 5:17 UTC (permalink / raw)
To: Paul Walmsley
Cc: tomi.valkeinen, khilman, hvaibhav, linux-omap,
Senthilvadivu Guruswamy
Paul,
On Tue, Jan 11, 2011 at 5:25 AM, Paul Walmsley <paul@pwsan.com> wrote:
> On Fri, 7 Jan 2011, Sumit Semwal wrote:
>
>> From: Senthilvadivu Guruswamy <svadivu@ti.com>
>>
>> Change the driver name from omapdss to omap_display as the driver takes care of
>> the display devices ie number of panels, type of panels available in the
>> platform. Change the device name in the board files and 2420,2430,3xxx clock
>> files from omapdss to omap_display to match the driver name.
>>
>> Signed-off-by: Senthilvadivu Guruswamy <svadivu@ti.com>
>
> Sumit, your Signed-off-by: is missing on this and some of the other
> patches. Please add it in if you will be submitting these.
Yes, I will be submitting these, so will add my Signed-off-by: for all.
>
>> ---
>> arch/arm/mach-omap2/clock2420_data.c | 8 ++++----
>> arch/arm/mach-omap2/clock2430_data.c | 8 ++++----
>> arch/arm/mach-omap2/clock3xxx_data.c | 14 +++++++-------
>
> The clkdev changes in the above three files are
>
> Acked-by: Paul Walmsley <paul@pwsan.com>
Thanks!
~Sumit.
>
>
> - Paul
>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 37+ messages in thread
end of thread, other threads:[~2011-01-11 5:17 UTC | newest]
Thread overview: 37+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-07 11:25 [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 01/17] OMAP2420: hwmod data: add DSS DISPC RFBI VENC Sumit Semwal
2011-01-10 23:21 ` Paul Walmsley
2011-01-07 11:25 ` [PATCH v5 02/17] OMAP2430: " Sumit Semwal
2011-01-10 23:43 ` Paul Walmsley
2011-01-07 11:25 ` [PATCH v5 03/17] OMAP3: hwmod data: add DSS DISPC RFBI DSI VENC Sumit Semwal
2011-01-10 22:51 ` Paul Walmsley
2011-01-07 11:25 ` [PATCH v5 04/17] OMAP2,3 DSS2 Change driver name to omap_display Sumit Semwal
2011-01-10 23:55 ` Paul Walmsley
2011-01-11 5:17 ` Semwal, Sumit
2011-01-07 11:25 ` [PATCH v5 05/17] OMAP2,3 DSS2 Use Regulator init with driver name Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 06/17] OMAP2,3: DSS2: Create new file display.c for central dss driver registration Sumit Semwal
2011-01-07 14:03 ` Tomi Valkeinen
2011-01-09 6:59 ` Semwal, Sumit
2011-01-09 7:01 ` Semwal, Sumit
2011-01-07 21:26 ` Kevin Hilman
2011-01-09 7:00 ` Semwal, Sumit
2011-01-07 11:25 ` [PATCH v5 07/17] OMAP2,3: DSS2: board files: replace platform_device_register with omap_display_init() Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 08/17] OMAP2,3: DSS2: Build omap_device for each DSS HWIP Sumit Semwal
2011-01-07 23:34 ` Kevin Hilman
2011-01-09 8:04 ` Semwal, Sumit
2011-01-07 11:25 ` [PATCH v5 09/17] OMAP2,3: DSS2: DSS: create platform_driver, move init,exit to driver Sumit Semwal
2011-01-07 23:43 ` Kevin Hilman
2011-01-09 8:33 ` Semwal, Sumit
2011-01-07 11:25 ` [PATCH v5 10/17] OMAP2,3: DSS2: Move clocks from core driver to dss driver Sumit Semwal
2011-01-10 23:59 ` Paul Walmsley
2011-01-11 5:16 ` Semwal, Sumit
2011-01-07 11:25 ` [PATCH v5 11/17] OMAP2,3: DSS2: RFBI: create platform_driver, move init,exit to driver Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 12/17] OMAP2,3: DSS2: DISPC: " Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 13/17] OMAP2,3: DSS2: VENC: " Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 14/17] OMAP2,3: DSS2: DSI: " Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 15/17] OMAP2,3: DSS2: replace printk with dev_dbg in init Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 16/17] OMAP2,3: DSS2: Use platform device to get baseaddr Sumit Semwal
2011-01-07 11:25 ` [PATCH v5 17/17] OMAP2,3: DSS2: Get DSS IRQ from platform device Sumit Semwal
2011-01-10 20:00 ` Paul Walmsley
2011-01-07 12:56 ` [PATCH v5 00/17] OMAP2,3: hwmod DSS Adaptation Tomi Valkeinen
2011-01-07 13:14 ` Tomi Valkeinen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox