summaryrefslogtreecommitdiff
path: root/drivers/video/omap2/dss
AgeCommit message (Collapse)Author
2011-09-01OMAP: DSS2: DISPC: Fix minimum PCD valuetilt-3.0-nodspvideo1-11-09-01Tomi Valkeinen
The current driver had a hardcoded minimum value of 2 for pixel clock divisor (PCD). This doesn't seem to be right. OMAP4 TRM says that PCD can be 1 when not downscaling, and inverted pixel clock (IPC) is off. OMAP3 TRM says the same, but also in the register descriptions that PCD value 1 is invalid. OMAP2 TRM says PCD 2 is the minimum. OMAP2 is still untested, but for both OMAP3 and OMAP4 PCD of 1 seems to work fine. This patch adds a new DSS feature, FEAT_PARAM_DSS_PCD, which is used to find the minimum and maximum PCD. The minimum is set to 2 for OMAP2, and 1 for OMAP3/4. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-09-01OMAP: DSS2: HDMI: change regn definitionTomi Valkeinen
regn divider is currently programmed to the registers without change, but when calculating clock frequencies it is used as regn+1. To make this similar to how DSI handles the dividers this patch changes the regn value to be used as such for calculations, but the value programmed to registers is regn-1. This simplifies the clock frequency calculations, makes it similar to DSI, and also allows us to use regn value 0 as undefined. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-09-01OMAP: DSS2: HDMI: use default dividersTomi Valkeinen
Use default regn and regm2 dividers in the hdmi driver if the board file does not define them. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-09-01OMAP: DSS: HDMI: tame hdmi driverRob Clark
Main change is to avoid automatically picking timings. Now the driver defaults to a safe 640x480, and leaves it to the upper layer (drm driver) to pick the desired resolution based on what the user selects and the drm infrastucture's parsing of the EDID.
2011-08-25debug dssAndy Green
Signed-off-by: Andy Green <andy.green@linaro.org>
2011-08-25omap dss use correct codec nameAndy Green
Signed-off-by: Andy Green <andy.green@linaro.org>
2011-08-25omap dss unable to bring up hdmi nonfatalAndy Green
If the HDMI connector isn't in, the generic enable_panel callback fails and the omap framebuffer code fails probe wholesale. This swallows the error if the display was unable to be enabled; the box can still work as headless then. Signed-off-by: Andy Green <andy.green@linaro.org>
2011-08-25OMAP DSS: allow discovery of default displayAndy Doan
Enable code outside of DSS core to find out the default display that was passed to the kernel Signed-off-by: Andy Doan <andy.doan@linaro.org> Signed-off-by: Andy Green <andy.green@linaro.org>
2011-08-25Subject: [PATCH] omap4: dss: hdmi: find best matching resolutionZach Pfeffer
Based off: "OMAP4:DSS:HDMI: Patch to add seperate edid.c" Commited by: Ricardo Perez Olivares <x0081762@ti.com> Written by: Mythri P K <mythripk@ti.com> EDID parsing for DVI Monitor from: Rob Clark <rob@ti.com> Some of the ENUM's and structure derived from hdmi.h from: Yong Zhi <y-zhi@ti.com> Signed-off-by: Zach Pfeffer <zach.pfeffer@linaro.org>
2011-08-25Subject: [PATCH 17/21] Subject: [PATCH 15/19] OMAP2: HDMI: Assume EDID read ↵Jassi Brar
success as detection Some class of hdmi displays never make the bit(2) of HDMI_CORE_SYS_SYS_STAT set. EDID is read before calls to is_detected callback, so if reading EDID succeeded that implies we do have HDMI connected. In that case skip reading/waiting on the second bit. Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
2011-08-25Subject: [PATCH 16/21] Subject: [PATCH 13/19] OMAP4: DSS2: HDMI: adding a ↵Ricardo Salveti de Araujo
workaround for LG monitors Some monitors report a disconnect just after a connect, so if force is enabled, give some time and check at least one more time. This is a needed workaround to make the driver work with LG monitors. Signed-off-by: Ricardo Salveti de Araujo <ricardo.salveti@canonical.com>
2011-08-25Subject: [PATCH 13/21] Subject: [PATCH 14/19] OMAP2: DSS: HDMI: removing ↵Ricardo Salveti de Araujo
error msg from check_timing The check_timing call is used to validate the timing before actually appling it, so it's expected to treat unsupported timings. It makes no sense to print an error message for the user saying that the timing could not be applied (it's not even being applied by this function). Signed-off-by: Ricardo Salveti de Araujo <ricardo.salveti@canonical.com>
2011-08-25Subject: [PATCH 12/21] Subject: [PATCH 12/19] hdmi add notificationAndy Green
Signed-off-by: Andy Green <andy.green@linaro.org>
2011-08-25Subject: [PATCH 11/21] Subject: [PATCH 11/19] OMAP4: DSS: add generic ↵Sebastien Jan
notifier mechanism A callback can be registered by the dssdev client in order to be notified of resolution changes, for example an external monitor that is hot-plugged. Multiple clients can now register for notification from one dssdev, and the notification mechanism can be extended in the future to add other events. This is a port of Rob Clark's <rob@ti.com> original patch. Signed-off-by: Sebastien Jan <s-jan@ti.com>
2011-08-25Subject: [PATCH 10/21] Subject: [PATCH 10/19] OMAP: DSS2: handle null ↵Andy Doan
pointer for no attached panel A null pointer error occurs when a board file configures a panel (LCD in my case) but doesn't have one attached
2011-08-25Subject: [PATCH 08/21] Subject: [PATCH 08/19] OMAP: DSS2: adding force ↵Jassi Brar
argument to is_detected() Force is available from (*detect) at drm_connector_funcs, and can be used by the driver to avoid expensive, destructive operations during automated probing. Signed-off-by: Ricardo Salveti de Araujo <ricardo.salveti@canonical.com> Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
2011-08-25Subject: [PATCH 06/21] Subject: [PATCH 06/19] OMAP: DSS2: HDMI: Adding ↵Ricardo Salveti de Araujo
is_detected callback support This is a port from Rob Clark <rob@ti.com> patch. Signed-off-by: Ricardo Salveti de Araujo <ricardo.salveti@canonical.com>
2011-08-25Subject: [PATCH 05/21] Subject: [PATCH 04/19] OMAP: DSS2: Add is_detected() ↵Jassi Brar
driver API The API should return whether the device is detected, and if applicable whether the cable is plugged in. For non-hot-plug devices, it simply means "is the display/panel present". For hot-plug devices it means "is the cable plugged in". Signed-off-by: Rob Clark <rob@ti.com> Signed-off-by: Ricardo Salveti de Araujo <ricardo.salveti@canonical.com> Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
2011-08-25Subject: [PATCH 03/21] Subject: [PATCH 03/19] OMAP: DSS2: Add default ↵Jassi Brar
get/check timings functions Signed-off-by: Rob Clark <rob@ti.com> Signed-off-by: Ricardo Salveti de Araujo <ricardo.salveti@canonical.com> Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
2011-08-25Subject: [PATCH 02/21] Subject: [PATCH 01/19] OMAP4: DSS: add generic ↵Jassi Brar
notifier mechanism A callback can be registered by the dssdev client in order to be notified of resolution changes, for example an external monitor that is hot-plugged. Multiple clients can now register for notification from one dssdev, and the notification mechanism can be extended in the future to add other events. This is a port of Rob Clark's <rob@ti.com> original patch. Signed-off-by: Sebastien Jan <s-jan@ti.com> Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
2011-08-25config omap2plus dss enable sdi dss omap4Andy Green
Signed-off-by: Andy Green <andy.green@linaro.org>
2011-05-23OMAP: DSS2: Add support for NV12 formatAmber Jain
Add the support for NV12 color format. Configure base address for UV component of NV12 color format. Change the way chroma scaling is handled for YUV formats on OMAP4 by enabling chroma-resampling for video pipeline and hence using FIR2 register set for scaling UV. Changes to _dispc_set_scaling(), because of the reason above, are: - call _dispc_set_scaling_common() to handle scaling for all color formats except for OMAP4 where it only handles scaling for RGB or Y-component - call _dispc_set_scaling_uv() for special handling required for UV component on OMAP4. - dispc_set_scaling_uv() also resets chroma-resampling bit for RGB color modes. Contains chroma scaling (_dispc_set_scaling_uv) design and implemented by Lajos Molnar <molnar@ti.com> Signed-off-by: Amber Jain <amber@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-23OMAP: DSS2: Add new registers for NV12 supportAmber Jain
Add new registers specific to UV color component that are introduced in OMAP4. Add simple helper functions to configure the newly added registers. These new registers are mainly: - UV base address registers used specifically for NV12 color-format - FIR registers used for UV-color-component scaling on OMAP4 - Accumulator registers used for UV-color-component scaling Add these new registers to save/restore and DUMPREG functions. Also add two new features for OMAP4: - FEAT_HANDLE_UV_SEPARATE - this is used on OMAP4 as UV color-component requires separate handling. - FEAT_ATTR2 - this is used on OMAP4 to configure new ATTRIBUTES2 register. Signed-off-by: Amber Jain <amber@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-23OMAP: DSS2: Use for loop where ever possible in SR(), RR()Amber Jain
Use for loop instead of individual entries for OVL_FIR_COEF_H, OVL_FIR_COEF_HV, OVL_FIR_COEF_V and OVL_CONV_COEF in SR() and RR(). Signed-off-by: Amber Jain <amber@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-23OMAP: DSS2: Ensure non-zero FIR values are configuredAmber Jain
FIR values can never be zero as per TRM, and the current code writes zero when scaling is not used. It was not causing any problem as scaling was disabled when zero was written. Its still safer to not write zero to it in any case. Now we configure correct FIR values even when scaling is not used (i.e. set FIR to 1024 when scaling is not used), but the scaling enable bits are still kept off if the scaling is not needed. Signed-off-by: Amber Jain <amber@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-23OMAP: DSS2: Add new color formats for OMAP4Amber Jain
Add new color formats supported by OMAP4: NV12, RGBA16, RGBX16, ARGB16_1555, XRGB16_1555. NV12 color format is defined here, its support in DSS will be added separately. Signed-off-by: Amber Jain <amber@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-19OMAP4: DSS2: HDMI: Implement ASoC Codec driver for HDMI audioRicardo Neri
Implement an ASoC Codec Driver to handle audio configuration. The implementation offers an interface for audio configuration and control to be exposed to ALSA while hidding the HDMI details. The ASoC driver supports the Basic Audio configuration as described in CEA-861-D: 2-channel linear PCM with 32, 44.1 and 48kHz sample rates and 16 bits/sample. It additionally supports 24 bit/sample in 32-bit words. Signed-off-by: Ricardo Neri <ricardo.neri@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-19OMAP4: DSS2: HDMI: Add functionality for audio configurationRicardo Neri
Add functionality for relevant audio configuration. Functions to configure the audio FIFO and DMA as well as functions for the audio core and Audio Info frame are included. This functionality is to be used by the ASoC HDMI audio codec. Signed-off-by: Ricardo Neri <ricardo.neri@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-19OMAP4: DSS2: HDMI: Add enums and structures for audioRicardo Neri
Add enurations and structures for audio configuration. This includes enumerations for the Audio InfoFrame, I2S, audio FIFO and audio core. Signed-off-by: Ricardo Neri <ricardo.neri@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-19OMAP4: DSS2: HDMI: Add DSS feature for CTS calculationRicardo Neri
CTS and N parameters are used to regenerate the audio clock from the TMDS clock at the HDMI sink. In OMAP4430 ES1.0 version the calculation of the CTS parameter is done by the HDMI IP (hardware mode) while in others it must be done by the HDMI driver (software mode). A DSS feature is used to indicate the HDMI driver which mode is used. Signed-off-by: Ricardo Neri <ricardo.neri@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-19OMAP4: DSS2: Create a DSS features structure for OMAP4430 ES1.0Ricardo Neri
Create a separate DSS features structure for OMAP4430 ES1.0. This structure is used to expose features only present in such silicon version. Specifically, this is required to handle how the HDMI IP calculates the CTS parameter for audio clock regeneration packets. OMAP4430 ES1.0 is the only one that supports computation of the CTS parameter by the HDMI IP (hardware mode). The rest of the revisions require the HDMI driver to perform the computation. Signed-off-by: Ricardo Neri <ricardo.neri@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-16OMAP: DSS2: DSI: Get line buffer size from DSI_GNQ registerArchit Taneja
The line buffer sizes vary across DSI modules, create a function dsi_get_line_buf_size() using DSI_GNQ register to get the size of line buffer used for the DISPC video port data. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-16OMAP: DSS2: DSI: Get number of DSI data lanes using DSI_GNQ registerArchit Taneja
On OMAP3, the DSI module has 2 data lanes. On OMAP4, DSI1 has 4 data lanes and DSI2 has 2 data lanes. Introduce function dsi_get_num_data_lanes() which returns the number of data lanes on the dsi interface, introduce function dsi_get_num_data_lanes_dssdev() which returns the number of data lanes used by the omap_dss_device connected to the lanes. Use the DSI_GNQ register on OMAP4 to get the number of data lanes, modify dsi.c to use the number of lanes and the extra data lanes on DSI1. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-16OMAP: DSS2: DSI: Use system workqueue for delayed work instead of a private ↵Archit Taneja
workqueue In the previous DSI driver design, a private workqueue was needed to prevent a deadlock as explained in the commit : 0f16aa0ae6b84d7ae72fbe8999e6a94cb78edd4e . In the current design, the workqueue is only used for queueing delayed work in the case where we don't get a FRAMEDONE interrupt for 250 milliseconds. It is safe to remove the private workqueue amd use the system workqueue instead to schedule the delayed work with the new design where the deadlock can't occur. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-16OMAP: DSS2: DSI: Remove DISPC pixel clock related info in dsi_dump_clocks()Archit Taneja
dsi_dump_clocks() prints lck and pck rates for the DISPC channel which it is connected to. Remove this since it is already printed by dispc_dump_clocks() in debugfs. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-12OMAP: DSS2: RFBI: cleanupTomi Valkeinen
The RFBI driver is quite messy. Remove dead and unneeded code and add statics to functions. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-12OMAP: DSS2: RFBI: add omap_rfbi_configureTomi Valkeinen
Add omap_rfbi_configure() which the panel driver can use to reconfigure the data element size and the number of data lines in the RFBI bus. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-12OMAP: DSS2: RFBI: clock enable/disable changesTomi Valkeinen
RFBI enables and disables clocks inside almost every function to get a finegrained control to the clocks. However, the current understanding is that this is not necessary power-management-wise. Change the clocking scheme so that RFBI clocks are enabled when the omapdss_rfbi_display_enable is called, and disabled when omapdss_rfbi_display_disable is called. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-12OMAP: DSS2: RFBI: add rfbi_bus_lockTomi Valkeinen
Add similar bus lock to RFBI as is in DSI. The panel driver can use the bus lock to mark that the RFBI bus is currently in use. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-12OMAP: DSS2: Add missing dummy functionsTomi Valkeinen
dpi.c does not compile if DSI is not compiled in. Add the missing dummy functions so that dpi.c compiles. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-12OMAP4: DSS2: DSI: Changes for DSI2 on OMAP4Archit Taneja
Introduce DSI2 PLL clock sources needed by LCD2 channel and DSI2 Protocol engine and DISPC Functional clock. Do the following: - Modify dss_get_dsi_clk_source() and dss_select_dsi_clk_source() to take the dsi module number as an argument. - Create debugfs files for dsi2, split the corresponding debugfs functions. - Allow DPI to use these new clock sources. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-12OMAP: DSS2: DSI: Pass pointer to struct to packet_sent_handler isrsArchit Taneja
dsi_packet_sent_handler_vp() and dsi_packet_sent_handler_l4() currently receive the completion parameter as their argument. This is not sufficient information to differentiate between DSI1 and DSI2 platform devices. Pass the struct "dsi_packet_sent_handler_data" to the packet_sent_handler isrs, these contain the platform_device pointer of the DSI device and the pointer to the completion struct. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-12OMAP: DSS2: DSI: Use platform_device pointer to get dsi dataArchit Taneja
The dsi related data structure currently creates one global instance of itself which is accessed by dsi functions. Remove this global structure instance and declare the struct as dsi_data. Modify dsi_init() to allocate a "dsi_data" structure for each platform device instance. Link this data with the device's platform_device pointer. Create the function dsi_get_dsidrv_data() which takes the pdev and return a pointer to the device's dsi_data. Make dsi_get_dsidev_id() return only 0 for now, this will be removed once the name of the DSI platform device is changed to the device instance form, like "omapdss_dsi.0" and "omapdss_dsi.1" etc. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-12OMAP: DSS2: Pass platform_device as an argument in dsi functionsArchit Taneja
The DSI interface is represented as a platform device, using the DSI platform driver(dsi.c). The current DSI driver design is capable of running only one instance of a DSI device. On OMAP4, there are 2 very similar DSI modules which can be represented as instances of "omapdss_dsi" platform device. Add member "module" in "dssdev.phy.dsi" that tells us which DSI module's lanes the panel is connected to. Modify dsi.c functions to take the device's platform_device struct pointer, provide functions dsi_get_dsidev_from_dssdev() and dsi_get_dsidev_from_id() take the panel's omap_dss_device and module number respectively, and return the platform_device pointer. Currently, the dsi struct is declared globally and is accessed when dsi data is needed. The new pdev argument will be used later to provide the platform device's dsi related data. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-12OMAP: DSS2: Remove omap_dss_device argument from dsi_pll_init()Archit Taneja
The function dsi_pll_init() has omap_dss_device argument which is not used. Remove this argument. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-12OMAP: DSS2: DSI: Add extra omap_dss_device argument in functions exported by dsiArchit Taneja
Add pointer to omap_dss_device struct as an argument in the functions which are exported to dsi panel drivers. This argument will tell the DSI driver which DSI interface's data it has to choose. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-11OMAP: DSS2: Remove DSS_IRQSTATUSTomi Valkeinen
DSS_IRQSTATUS register is available only on OMAP3, and reading it in dss_dump_registers() on OMAP4 seems to cause a crash. The register is not used for anything, and displaying its value is of no use, so let's just remove it altogether. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-11OMAP: DSS2: Remove usage of struct dispc_regArchit Taneja
struct dispc_reg was originally used while migrating from old omapfb to catch cases where the arguments to dispc_read_reg/dispc_write_reg were in wrong order, since old omapfb had the arguments in reverse order. Remove this struct and use u16 instead Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-11OMAP: DSS2: Clean up DISPC overlay manager register definitionsArchit Taneja
Represent manager/channel specific DISPC registers as inline functions returning the required dispc_reg struct. This is done since the current method is not scalable as the number of overlay managers increase in number. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
2011-05-11OMAP: DSS2: Clean up DISPC overlay register definitionsArchit Taneja
Move all DISPC register definitions to a new header dispc.h. There are separate register offset definitions for GFX, VID1 and VID2 pipeline share register definitions by using an argument. The introduction of VID3 pipeline on OMAP4 will not let us use the above method since VID3 pipe register offsets don't map with VID1 and VID2 offsets. Represent overlay registers as DISPC_OVL_XXXX(plane), where the plane argument tells the overlay. Register offsets are calculated as: DISPC_OVL_XXXX(plane) = DISPC_OVL_BASE(plane) + DISPC_XXXX_OFFSET(plane) Idea suggested by Tomi Valkeinen. Signed-off-by: Archit Taneja <archit@ti.com> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>