summaryrefslogtreecommitdiff
path: root/drivers/video/omap2/dss
AgeCommit message (Collapse)Author
2012-11-06OMAPDSS: HDMI: Convert to devm_request_and_ioremapRicardo Neri
Using devm_request_and_ioremap provides better memory handling and improves readability. Signed-off-by: Ricardo Neri <ricardo.neri@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-06OMAPDSS: HDMI: Rename resource variable at probe.Ricardo Neri
Minor cleanup to give to the resource variable a more proper name. Signed-off-by: Ricardo Neri <ricardo.neri@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-06OMAPDSS: APPLY: Fix the usage of wait_for_completion_timeoutChuansheng Liu
The return value of wait_for_completion_timeout() is always >= 0 with unsigned int type. So the condition "ret < 0" or "ret >= 0" is pointless. Signed-off-by: liu chuansheng <chuansheng.liu@intel.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-06OMAPDSS: DISPC: Fix the usage of wait_for_completion_timeoutChuansheng Liu
The return value of wait_for_completion_timeout() is always >= 0 with unsigned int type. So the condition "ret < 0" or "ret >= 0" is pointless. Signed-off-by: liu chuansheng <chuansheng.liu@intel.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-05OMAPDSS: DISPC: fix DS variable nameTomi Valkeinen
check_horiz_timing_omap3() has a variable named 'DS'. i386 uses DS name for something else, causing a compilation error. As 'DS' is not a very good local variable name in the first place, let's change it to 'ds', fixing the issue. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-05OMAPDSS: DPI: always use DSI PLL if availableTomi Valkeinen
We currently get the decision whether to use PRCM or DSI PLL clock for DPI from the board file. This is not a good way to handle it, and it won't work with device tree. This patch changes DPI to always use DSI PLL if it's available. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-05OMAPDSS: DPI: verify if DSI PLL is operationalTomi Valkeinen
The SoCs that have DSI module should have a working DSI PLL. However, some rare boards have not connected the powers to the DSI PLL. This patch adds a function that tries to power up the DSI PLL, and reports if that doesn't succeed. DPI uses this function to fall back to PRCM clocks if DSI PLL doesn't work. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-05OMAPDSS: DPI: use dpi.dsidev to see whether to use dsi pllTomi Valkeinen
Instead of using dpi_use_dsi_pll() to check if dsi pll is to be used, we can just check if dpi.dsidev != NULL. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-05OMAPDSS: hide dss_select_dispc_clk_source()Tomi Valkeinen
dss.c currently exposes functions to configure the dispc source clock and lcd source clock. There are configured separately from the output drivers. However, there is no safe way for the output drivers to handle dispc clock, as it's shared between the outputs. Thus, if, say, the DSI driver sets up DSI PLL and configures both the dispc and lcd clock sources to that DSI PLL, the resulting dispc clock could be too low for, say, HDMI. Thus the output drivers should really only be concerned about the lcd clock, which is what the output drivers actually use. There's lot to do to clean up the dss clock handling, but this patch takes one step forward and removes the use of dss_select_dispc_clk_source() from the output drivers. After this patch, the output drivers only configure the lcd source clock. On omap4+ the dispc src clock is never changed from the default PRCM source. On omap3, where the dispc and lcd clocks are actually the same, setting the lcd clock source sets the dispc clock source. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-05OMAPDSS: setup default dss fckTomi Valkeinen
We don't currently set the dss fck when starting up. This is not a problem, as we setup the fck later when configuring the pixel clocks. Or this is how it was for omap2, for the rest of the omaps this may not be so. For DSI, HDMI and also for DPI when using DSI PLL, we don't need to change the dss fck, and thus it may be left unconfigured. Usually the dss fck is already setup fine by default, but we can't trust this. This patch sets the dss fck to maximum at probe time. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-05OMAPDSS: add dss_calc_clock_rates() backTomi Valkeinen
dss_calc_clock_rates() was removed earlier as it was not used, but it is needed for DSI PLL calculations, so this patch adds it back. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-05OMAPDSS: DSI: workaround for HSDiv problemTomi Valkeinen
It looks like on many OMAP versions powers for both HSClk and HSDiv to be enabled to have a functional HSDiv. This patch fixes the issue by forcing both powers on. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-05OMAPDSS: DSI: skip odd dividers when pck >= 100MHzTomi Valkeinen
The DSI PLL and HSDivider can be used to generate the pixel clock for LCD overlay manager, which then goes to DPI output. On the DPI output pin the voltage of the signal is shifted from the OMAP's internal minimal voltage to 1.8V range. The shifting is not instant, and the higher the clock frequency, the less time there is to shift the signal to nominal voltage. If the HSDivider's divider is greater than one and odd, the resulting pixel clock does not have 50% duty cycle. For example, with a divider of 3, the duty cycle is 33%. When combining high frequency (in the area of 140MHz+) and non-50% duty cycle, it has been observed the the shifter does not have enough time to shift the voltage enough, and this leads to bad signal which is rejected by monitors. As a workaround this patch makes the divider calculation skip all odd dividers when the required pixel clock is over 100MHz. The limit of 100MHz is a guesstimate. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-05OMAPDSS: fix DPI & DSI init orderTomi Valkeinen
DPI may use DSI PLL, so it depends on DSI. However, currently DPI driver is added first, which causes DPI initialization to fail when it tries to get the DSI PLL. This patch changes the init order to fix this. A better solution would be to separate DSI PLL and DSI drivers. They have dependencies, though, but we could still have DSI PLL as an independent entity that we could initialize before any of the output drivers. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-11-05Merge branch '3.8/misc-2'Tomi Valkeinen
Merge omapdss miscellaneous patches.
2012-10-29OMAPDSS: DISPC: remove dssdev depependency from error handlerTomi Valkeinen
The dispc error handler tries to "fix" issues by disabling and enabling panel. This is problematic, as we're trying to remove the dependency from omapdss to the omap_dss_devices. It's also racy, and doesn't really fix anything. This patch removes the use of omap_dss_device from the error handler, and just disables and enables the associated overlay manager. This should produce similar results as the previous solution, without using dssdev. However, the error handling is still horrible. But the problem boils down to one question, to which I don't have a clear answer: what to do when a HW error happens? Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-29OMAPDSS: DISPC: fix loop in error handlerTomi Valkeinen
The dispc's error handler has a loop inside another loop, and both use the same loop variable. This is clearly wrong, and this patch makes a new variable for the inner loop. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-29OMAPDSS: fix DSI2 PLL clk namesTomi Valkeinen
dss_generic_clk_source_names is missing the names for clocks from DSI2 PLL. Add them. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-29OMAPDSS: HDMI: make hdmi pclk check more permissiveTomi Valkeinen
The hdmi driver tries to find the given video timings from its static list of timings, to find the required ID for the mode. The check tries to find exact match for the pixel clock, among other checks. with omapfb driver there can be some amount of error in the give pixel clock, as the pixel clock is converted between Hz and ps, thus the hdmi's check fails to find the mode. This patch makes the check more allowing, by rounding the pixel clocks to nearest MHz. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Cc: Ricardo Neri <ricardo.neri@ti.com>
2012-10-29OMAPDSS: HDMI: add 1920x1200 video modeTomi Valkeinen
Add 1920x1200 video mode to hdmi driver's static modelist. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Cc: Ricardo Neri <ricardo.neri@ti.com>
2012-10-29OMAPDSS: HDMI: use core power on/off with edid & detectTomi Valkeinen
This patch makes use of the hdmi_power_[on|off]_core() functions added in the previous patch. The functions are used when reading EDID or detecting if a monitor is connected. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Cc: Ricardo Neri <ricardo.neri@ti.com>
2012-10-29OMAPDSS: HDMI: split power_on/off to two partsTomi Valkeinen
There's currently just one power-on function for HDMI, which enables the IP and the video output. When reading EDID or detecting if a monitor is connected, we don't need the video output. Enabling the video output for these operations is not a big problem in itself, but the quick enable/disable cycles caused by the operations seem to cause sync lost errors from time to time. Also, this makes it possible to read the EDID before the full video path has been set up. This patch splits the hdmi_power_on into two parts, hdmi_power_on_core and hdmi_power_on_full. The "full" version does what hdmi_power_on does currently, and hdmi_power_on_core only enables the core IP. Similar changes are made for power_off. Note that these don't allow the HDMI IP to be first enabled, and later enable the video output, but the HDMI IP will first need to be powered off before calling the full version. So this is rather limited implementation, but it fills the needs for reading EDID. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Cc: Ricardo Neri <ricardo.neri@ti.com>
2012-10-29OMAPDSS: DISPC: Add IRQ enable/status helpersTomi Valkeinen
DISPC irqs need to be handled from the compat layer and also in the future by the omapdrm. To make this possible, this patchs adds a set of helper functions, so that the irqs can be managed without direct register reads/writes. The following functions are added, and all the current direct reg reads/writes are changed to use these. u32 dispc_read_irqstatus(void); void dispc_clear_irqstatus(u32 mask); u32 dispc_read_irqenable(void); void dispc_write_irqenable(u32 mask); Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-29OMAPDSS: add dispc_ovl_enabled()Tomi Valkeinen
Add new dispc function, dispc_ovl_enabled(). This returns if the overlay enable bit is set in the registers. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-29OMAPDSS: DISPC: make _enable_mgr_out public as "dispc_mgr_enable"Tomi Valkeinen
We need a low level manager-enable function for omapdrm. We have that function as dispc internal func, _enable_mgr_out(). This patch exposes that function, and renames it to dispc_mgr_enable(). Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-29OMAPDSS: DISPC: rename dispc_mgr_enable/disable to _syncTomi Valkeinen
The current dispc_mgr_enable/disable function are blocking, and do a bit too much for omapdrm. We'll expose new enable & disable functions that will just set the bits in the registers in the following patches. This patch renames the current functions to *_sync, to make it clear that they are blocking, and also to free up the dispc_mgr_enable/disable names for these new functions. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-29OMAPDSS: DISPC: use dss_feat_get_num_ovls()Tomi Valkeinen
Use dss_feat_get_num_ovls() in dispc.c instead of omap_dss_get_num_overlays() to remove the dependency to overlay.c. Note that we still have uses of omap_dss_get_num_overlays() in dispc.c, but these will be moved out in the future patches. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-29OMAPDSS: remove initial display code from omapdssTomi Valkeinen
Currently omapdss driver sets up the initial connections between overlays, overlay manager and a panel, based on default display parameter coming from the board file or via module parameters. This is unnecessary, as it's the higher level component that should decide what display to use and how. This patch removes the code from omapdss, and implements similar code to omapfb. The def_disp module parameter and the default display platform_data parameter are kept in omapdss, but omapdss doesn't do anything with them. It will just return the default display name with dss_get_default_display_name() call, which omapfb uses. This is done to keep the backward compatibility. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-29OMAPDSS: export dss_get_def_display_name()Tomi Valkeinen
Export dss_get_def_display_name() with the name of omapdss_get_def_display_name() so that omapfb can use it after the next patch which moves default display handling to omapfb. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-26OMAPDSS: HDMI: fix missing unlock on error in hdmi_dump_regs()Wei Yongjun
Add the missing unlock on the error handling path in function hdmi_dump_regs(). Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn> Reviewed-by: Sumit Semwal <sumit.semwal@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-26omapdss: dss: Fix clocks on OMAP363xLaurent Pinchart
Commit 185bae1095188aa199c9be64d6030d8dbfc65e0a ("OMAPDSS: DSS: Cleanup cpu_is_xxxx checks") broke the DSS clocks configuration by erroneously using the clock parameters applicable to all other OMAP34xx SoCs for the OMAP363x. This went unnoticed probably because the cpu_is_omap34xx() class check wasn't seen as matching the OMAP363x subclass. Fix it by checking for the OMAP363x subclass before checking for the OMAP34xx class. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-25OMAPDSS: DSI: fix dsi_get_dsidev_from_id()Tomi Valkeinen
If dsi_get_dsidev_from_id() is called with a DSI module id that does not exist on the board, the function will crash as omap_dss_get_output() will return NULL. This happens on omap3 boards when dumping DSI clocks, as the dumping code will try to get the dsidev for DSI modules 0 and 1, but omap3 only has DSI module 0. Also clean up the id -> output mapping, so that if the function is called with invalid module ID it will return NULL. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Cc: Archit Taneja <archit@ti.com>
2012-10-24OMAPDSS: DISPC: fix dispc_mgr_lclk_rate for DIGIT outputTomi Valkeinen
dispc_mgr_lclk_rate() cannot currently be called with DIGIT channel parameter, even if dispc_ovl_lclk_rate() can. Fix this by making dispc_mgr_lclk_rate() handle DIGIT channel also. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-24OMAPDSS: remove dispc_irq_handler declarationTomi Valkeinen
dss.h contains dispc_irq_handler declaration, even if the function is dispc.c internal. Remove the declaration. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-24OMAPDSS: get the dss version from core pdevTomi Valkeinen
The output drivers get the omapdss hw version from the platform data for their respective output device. This doesn't work with DT, as there's no platform data for them. Add a new function, omapdss_get_version(), which returns the dss version from the core device, which will have platform data on DT also. The function is exported so that users of omapdss can also use it. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-24OMAPDSS: remove omap_dss_device's suspend/resumeTomi Valkeinen
The panel drivers contain enable, disable, suspend and resume calls. The suspend and resume are effectively identical to disable and enable. This patch removes panel suspend and enable code from omapdss and the panel drivers, and replaces their use with enable and disable. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-22OMAPDSS: HDMI: fix missing unlock on error in hdmi_dump_regs()Wei Yongjun
Add the missing unlock on the error handling path in function hdmi_dump_regs(). Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn> Reviewed-by: Sumit Semwal <sumit.semwal@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-18OMAPDSS: DISPC: cleanup lcd/digit enable/disableTomi Valkeinen
We currently have a single function to enable and disable the manager output for LCD and DIGIT. The functions are a bit complex, as handling both enable and disable require some extra steps to ensure that the output is enabled or disabled properly without errors before exiting the function. The code can be made simpler to understand by splitting the functions into separate enable and disable functions. We'll also clean up the comments and some parameter names at the same time. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-18OMAPDSS: DISPC: add dispc_mgr_get_sync_lost_irq()Tomi Valkeinen
Add function that returns the sync lost irq mask for the given channel. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-18OMAPDSS: DISPC: cleanup lcd and digit enableTomi Valkeinen
dispc.c's functions to enable LCD and DIGIT outputs can be cleaned up a bit by using common functions to set the enable bit and to check if the output is enabled. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-18OMAPDSS: DISPC: remove struct omap_overlay useTomi Valkeinen
dispc_ovl_setup() uses struct omap_overlay to get the caps for the overlay. We can change the code to get the caps directly from dss features, thus removing the dependency to struct omap_overlay. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-18OMAPDSS: remove declarations for non-existing funcsTomi Valkeinen
dss_mgr_set_device and dss_mgr_unset_device are declared in dss.h, but the functions do not exist. Remove the declarations. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-18OMAPDSS: combine LCD related config into one funcTomi Valkeinen
Dispc has a bunch of functions used to configure output related parameters: - dispc_mgr_set_io_pad_mode - dispc_mgr_enable_stallmode - dispc_mgr_enable_fifohandcheck - dispc_mgr_set_clock_div - dispc_mgr_set_tft_data_lines - dispc_lcd_enable_signal_polarity - dispc_mgr_set_lcd_type_tft These are all called together, and the configuration values are taken from struct dss_lcd_mgr_config. Instead of exposing those individual dispc functions, create a new one, dispc_mgr_set_lcd_config(), which is used to configure the above parameters from values in struct dss_lcd_mgr_config. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-18OMAPDSS: DISPC: constify function parametersTomi Valkeinen
Add consts to dispc function parameters which do not modify the passed structs. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-18OMAPDSS: fix registering the vsync isr in applyTomi Valkeinen
When we enable an output we don't check if we need to register the vsync isr. This causes us to miss vsync interrupts until somebody changes the configuration of an overlay or an overlay manager. Add the registration to dss_mgr_enable to fix the problem. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-18OMAPDSS: DSI: fix dsi_get_dsidev_from_id()Tomi Valkeinen
If dsi_get_dsidev_from_id() is called with a DSI module id that does not exist on the board, the function will crash as omap_dss_get_output() will return NULL. This happens on omap3 boards when dumping DSI clocks, as the dumping code will try to get the dsidev for DSI modules 0 and 1, but omap3 only has DSI module 0. Also clean up the id -> output mapping, so that if the function is called with invalid module ID it will return NULL. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Cc: Archit Taneja <archit@ti.com>
2012-10-18Merge branch '3.8/dss-version'Tomi Valkeinen
Merge omapdss code to remove cpu_is_* checks from the driver.
2012-10-17OMAPDSS: remove Kconfig dependenciesTomi Valkeinen
Now that omapdss no longer uses any platform specific functions, we can remove the "depends on ARCH_OMAP*" lines from Kconfig. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-17OMAPDSS: fix compilation warningsTomi Valkeinen
When compiling on x86 we get following warnings: warning: field width specifier ‘*’ expects argument of type ‘int’, but argument 5 has type ‘size_t’ [-Wformat] Fix these by casting the size_t to int. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2012-10-17OMAPDSS: add missing sizes.h includesTomi Valkeinen
When compiling on x86, we get compilation errors for dss.c and dispc.c: drivers/video/omap2/dss/dispc.c:126:11: error: ‘SZ_4K’ undeclared here (not in a function) include <linux/sizes.h> to fix compilation. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>