1. 29 Jun, 2012 28 commits
    • Archit Taneja's avatar
      OMAPDSS: Add struct to hold LCD overlay manager configuration · c56fb3ef
      Archit Taneja authored
      Create a struct dss_lcd_mgr_config which holds LCD overlay manager related
      parameters. These are currently partially contained in the omap_dss_device
      connected to the manager, and the rest are in the interface driver.
      
      The parameters are directly written to the DISPC registers in the interface
      drivers. These should eventually be applied at the correct time using the
      shadow register programming model. This struct would help in grouping these
      parameters so that they can be applied together.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      c56fb3ef
    • Archit Taneja's avatar
      OMAPDSS: DISPC: Change return type of dispc_mgr_set_clock_div() · f0d08f89
      Archit Taneja authored
      dipsc_mgr_set_clock div has an int return type to report errors or success.
      The function doesn't really check for errors and always returns 0. Change
      the return type to void.
      
      Checking for the correct DISPC clock divider ranges will be done when a DSS2
      user does a manager apply. This support will be added later.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      f0d08f89
    • Chandrabhanu Mahapatra's avatar
      ARM: OMAP2PLUS: DSS: Disable LCD3 output when resetting DSS · 465698ee
      Chandrabhanu Mahapatra authored
      The dispc_disable_outputs() function currently disables all LCD managers except
      LCD3. This patch adds disabling functionality for LCD3 manager thereby
      maintaining consistency of Display Subsystem for in case Display Controller is
      reset when LCD3 manager is in use.
      Signed-off-by: default avatarChandrabhanu Mahapatra <cmahapatra@ti.com>
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      465698ee
    • Tomi Valkeinen's avatar
      Merge Misc DSS clean ups from Archit · e5310ed7
      Tomi Valkeinen authored
      This series does the following things:
      
      - Remove passive matrix LCD support: There are no panel drivers with
        passive matrix LCD drivers in DSS2. There are no passive matrix panels
        even available to test with DSS. Since no one is using passive matrix
        panels, stop trying to support it. It cleans up the DSS driver.
      
      - Add some new fields to omap_video_timings: There were some standard
        panel timing fields missing from omap_video_timings. Namely
        Hsync/Vsync/DE levels and interlace. Add these to omap_video_timings
        to align it more with xorg modeline. Add some other OMAP DSS specific
        fields to omap_video_timings.
      
      - Remove some hacks done because omap_video_timings didn't have the
        above fields.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      e5310ed7
    • Archit Taneja's avatar
      OMAPDSS: DSI: Fix HSYNC, VSYNC and DE polarities between DISPC and DSI · bd5a7b11
      Archit Taneja authored
      For DSI operation in videomode, DISPC logic levels for the signals HSYNC, VSYNC
      and DE need to be specified to DSI via the fields VP_HSYNC_POL, VP_VSYNC_POL and
      VP_DE_POL in DSI_CTRL registers.
      
      This information is completely internal to DSS as logic levels for the above
      signals hold no meaning on the DSI bus. Hence a DSI panel driver should be
      totally oblivious of these fields.
      
      Fix the logic levels/polarities in the DISPC and DSI registers to a default
      value. This is done by overriding these fields in omap_video_timings struct
      filled by the panel driver for DISPC, and use the equivalent default values
      when programming DSI_CTRL registers. Also, remove the redundant polarity related
      fields in omap_dss_dsi_videomode_data.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      bd5a7b11
    • Archit Taneja's avatar
      OMAPDSS: HDMI: Remove custom hdmi_video_timings struct · cc937e5e
      Archit Taneja authored
      The hdmi CEA and VESA timings were represented by the struct hdmi_video_timings,
      omap_video_timings couldn't be used as it didn't contain the fields hsync/vsync
      polarities and interlaced/progressive information.
      
      Remove hdmi_video_timings, and use omap_video_timings instead.
      
      Cc: Mythri P K <mythripk@ti.com>
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      cc937e5e
    • Archit Taneja's avatar
      OMAPFB: Map interlace field in omap_video_timings with fb vmode flags · 23bae3ad
      Archit Taneja authored
      Use the interlace field in omap_video_timings to configure/retrieve
      corresponding fb mode flags in fb_var_screeninfo and fb_videomode.
      
      The interlace field maps with the fb mode flags FB_VMODE_INTERLACED and
      FB_VMODE_NONINTERLACED.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      23bae3ad
    • Archit Taneja's avatar
      OMAPDSS: DISPC/APPLY: Use interlace info in manager timings for dispc_ovl_setup() · 8050cbe4
      Archit Taneja authored
      Currently the interlace parameter passed to dispc_ovl_setup() is configured by
      checking the display type, and set to true if the display type is VENC.
      
      This isn't correct as other panels can take interlaced content too. The
      omap_video_timings struct in manager's private data contains the info whether
      the panel is in interlaced mode or not.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      8050cbe4
    • Archit Taneja's avatar
      OMAPDSS: Add interlace parameter to omap_video_timings · 23c8f88e
      Archit Taneja authored
      Add a parameter called interlace which tells whether the timings are in
      interlaced or progressive mode. This aligns the omap_video_timings struct with
      the Xorg modeline configuration.
      
      It also removes the hack needed to write to divide the manager height by 2 if
      the connected interface is VENC.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      23c8f88e
    • Archit Taneja's avatar
      OMAPDSS: Remove omap_panel_config enum from omap_dss_device · 07fb51c6
      Archit Taneja authored
      omap_panel_config contains fields which are finally written to DISPC_POL_FREQo
      registers. These are now held by omap_video_timings and are set when the manager
      timings are applied.
      
      Remove the omap_panel_config enum, and remove all it's references from panel or
      interface drivers.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      07fb51c6
    • Archit Taneja's avatar
      OMAPFB: Map the newly added omap_video_timings fields with fb sync flags · 783babf3
      Archit Taneja authored
      Use the newly added fields in omap_video_timings(hsync, vsync and data_enable
      logic levels and data, hsync and vsync latching related info) to
      configure/retrieve corresponding sync flags in fb_var_screeninfo and
      fb_videomode.
      
      Out of the new fields, hsync_level and vsync_level can be mapped to the fb sync
      flags FB_SYNC_HOR_HIGH_ACT and FB_SYNC_VERT_HIGH_ACT.
      
      When converting fb mode to omap_video_timings, the fields which don't have an
      equivalent parameter in fb are kept as the original values if the panel driver
      has a get_timings op, else they are set to default values.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      783babf3
    • Archit Taneja's avatar
      OMAPDSS: DISPC: Remove dispc_mgr_set_pol_freq() · 0e065c79
      Archit Taneja authored
      dispc_mgr_set_pol_freq() configures the fields in the register DISPC_POL_FREQo.
      All these fields have been moved to omap_video_timings struct, and are now
      programmed in dispc_mgr_set_lcd_timings(). These will be configured when timings
      are applied via dss_mgr_set_timings().
      
      Remove dispc_mgr_set_pol_freq() and it's calls from the interface drivers.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      0e065c79
    • Archit Taneja's avatar
      OMAPDSS: DISPC: Configure newly added omap_video_timing fields · 655e2941
      Archit Taneja authored
      Hsync, Vsync, Data enable enable logic levels and latching info of Data lanes,
      Hsync and Vsync signals(with respect to pixel clock) are newly added parameters
      in omap_video_timings.
      
      Program these in dispc_mgr_set_lcd_timings. These will be configured when the
      manager's timings are set via dss_mgr_set_timings().
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      655e2941
    • Archit Taneja's avatar
      OMAPDSS: DISPLAY: Ignore newly added omap_video_timings fields for display timings sysfs file · a14909ea
      Archit Taneja authored
      The display sysfs file for viewing/storing display timings is something which
      will be deprecated. The new omap_video_timings fields (hsync_level, vsync_level
      and others) are not configurable or viewable via this sysfs file.
      
      This prevents the need to make the input more configurable to take the new
      fields and at the same time work without these fields for backward
      compatibility.
      
      In display_timings_store, the omap_video_timings struct used to set the timings
      is initialized to the existing panel timings so that the new fields are taken in
      correctly. The other fields are taken from the user as before.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      a14909ea
    • Archit Taneja's avatar
      OMAPDSS: Add some new fields to omap_video_timings · a8d5e41c
      Archit Taneja authored
      Some panel timing related fields are contained in omap_panel_config in the form
      of flags. The fields are:
      
      - Hsync logic level
      - Vsync logic level
      - Data driven on rising/falling edge of pixel clock
      - Output enable/Data enable logic level
      - HSYNC/VSYNC driven on rising/falling edge of pixel clock
      
      Out of these parameters, Hsync and Vsync logic levels are a part of the timings
      in the Xorg modeline configuration. So it makes sense to move the to
      omap_video_timings. The rest aren't a part of modeline, but it still makes
      sense to move these since they are related to panel timings.
      
      These fields stored in omap_panel_config in dssdev are configured for LCD
      panels, and the corresponding LCD managers in the DISPC_POL_FREQo registers.
      
      Add the above fields in omap_video_timings. Represent their state via new enums.
      
      Add these parameters to the omap_video_timings instances in the panel drivers.
      Keep the corresponding IVS, IHS, IPC, IEO, RF and ONOFF flags in
      omap_panel_config for now. The struct will be removed later.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      a8d5e41c
    • Archit Taneja's avatar
      OMAPDSS: Remove passive matrix LCD support (part 4) · a9105cb5
      Archit Taneja authored
      Remove configuration of Ac-bias pins
      
      Ac-bias pins need to be configured only for passive matrix displays. Remove
      acbi and acb fields in omap_dss_device and their configuration in panel
      drivers. Don't program these fields in DISP_POL_FREQo register any more.
      
      The panel driver for sharp-ls037v7dw01, and the panel config for
      Innolux AT070TN8 in generic dpi panel driver set acb to a non zero value. This
      is most likely carried over from the old omapfb driver which supported passive
      matrix displays.
      
      Cc: Thomas Weber <weber@corscience.de>
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      a9105cb5
    • Archit Taneja's avatar
      OMAPDSS: Remove passive matrix LCD support (part 3) · d21f43bc
      Archit Taneja authored
      Remove omap_lcd_display_type enum
      
      The enum omap_lcd_display_type is used to configure the lcd display type in
      DISPC. Remove this enum and always set display type to TFT by creating function
      dss_mgr_set_lcd_type_tft().
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      d21f43bc
    • Archit Taneja's avatar
      OMAPDSS: Remove passive matrix LCD support (part 2) · 5ae9eaa6
      Archit Taneja authored
      Remove OMAP_DSS_LCD_TFT as a omap_panel_config flag.
      
      We don't support passive matrix displays any more. Remove this flag from all the
      panel drivers.
      
      Force the display_type to OMAP_DSS_LCD_DISPLAY_TFT in the interface drivers.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      5ae9eaa6
    • Archit Taneja's avatar
      OMAPDSS: Remove passive matrix LCD support (part 1) · 6d523e7b
      Archit Taneja authored
      Remove clock constraints related to passive matrix displays.
      
      There is a constraint (pcd_min should be 3) for passive matrix displays. Remove
      this constraint in clock divider calculations as we won't support passive
      matrix displays any more.
      
      This cleans up the functions which calculate the clock dividers with DSI's PLL
      or DSS_FCLK as the clock source.
      Signed-off-by: default avatarArchit Taneja <archit@ti.com>
      6d523e7b
    • Jassi Brar's avatar
      OMAPDSS: HDMI: Replace spinlock with mutex in hdmi_check_hpd_state · 3a5383a2
      Jassi Brar authored
      State change of HDMI PHY could potentially take many millisecs, we can do
      better by protecting things in hdmi_set_phy_pwr() with a mutex rather than
      a spin_lock_irqsave.
      Signed-off-by: default avatarJassi Brar <jaswinder.singh@linaro.org>
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      3a5383a2
    • Jassi Brar's avatar
      OMAPDSS: HDMI: Discard phy_tx_enabled member · ece2f153
      Jassi Brar authored
      It is simpler to read the current status from a register as compared
      to maintaining a state variable to hold the information.
      Signed-off-by: default avatarJassi Brar <jaswinder.singh@linaro.org>
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      ece2f153
    • Chandrabhanu Mahapatra's avatar
      OMAPDSS: Add dump and debug support for LCD3 · 6f1891fc
      Chandrabhanu Mahapatra authored
      DISPC functions have been modified to provide clock and register dumps and debug
      support for the LCD3 manager.
      Signed-off-by: default avatarChandrabhanu Mahapatra <cmahapatra@ti.com>
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      6f1891fc
    • Chandrabhanu Mahapatra's avatar
      OMAPDSS: Add LCD3 overlay manager and Clock and IRQ support · e86d456a
      Chandrabhanu Mahapatra authored
      The support for LCD3 manager has been added into the manager module. LCD3 panel
      has registers as DISPC_CONTROL3 and DISPC_CONFIG3 just like those in LCD and
      LCD2 panels. These registers control the Display Controller (DISPC) module for
      LCD3 output. The three LCDs support Display Serial Interface (DSI), Remote Frame
      Buffer Interface (RFBI) and Parallel CMOS Output Interface (DPI). These LCDs can
      be connected through parallel output interface using DISPC and RFBI or DPI. For
      serial interface DSS uses DSI.
      
      The LCD3 panel, just like LCD and LCD2 panels, has a clock switch in DSS_CTRL
      register which has been enabled. The clock switch chooses between DSS_CLK and
      DPLL_DSI1_C_CLK1 as source for LCD3_CLK. New IRQs as DISPC_IRQ_VSYNC3,
      DISPC_IRQ_FRAMEDONE3, DISPC_IRQ_ACBIAS_COUNT_STAT3 and DISPC_IRQ_SYNC_LOST3 have
      been added specific to the new manager.
      Signed-off-by: default avatarChandrabhanu Mahapatra <cmahapatra@ti.com>
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      e86d456a
    • Chandrabhanu Mahapatra's avatar
      OMAPDSS: Add support for LCD3 channel · ff6331e2
      Chandrabhanu Mahapatra authored
      OMAP5 Display Subsystem (DSS) architecture comes with a additional LCD3 channel
      with its own dedicated overlay manager. The current patch adds LCD3 channel and
      basic register support for LCD3 channel. It adds register addresses for various
      Display Controller (DISPC) registers like DISPC_DEFAULT_COLOR, DISPC_TIMING_H,
      DISPC_DIVISORo, etc.
      Signed-off-by: default avatarChandrabhanu Mahapatra <cmahapatra@ti.com>
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      ff6331e2
    • Chandrabhanu Mahapatra's avatar
      OMAPDSS: Cleanup implementation of LCD channels · efa70b3b
      Chandrabhanu Mahapatra authored
      The current implementation of LCD channels and managers consists of a number of
      if-else construct which has been replaced by a simpler interface. A constant
      structure mgr_desc has been created in Display Controller (DISPC) module. The
      mgr_desc contains for each channel its name, irqs and  is initialized one time
      with all registers and their corresponding fields to be written to enable
      various features of Display Subsystem. This structure is later used by various
      functions of DISPC which simplifies the further implementation of LCD channels
      and its corresponding managers.
      Signed-off-by: default avatarChandrabhanu Mahapatra <cmahapatra@ti.com>
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      efa70b3b
    • Tomi Valkeinen's avatar
      OMAPDSS: fix warnings if CONFIG_PM_RUNTIME=n · 5be3aebd
      Tomi Valkeinen authored
      If runtime PM is not enabled in the kernel config, pm_runtime_get_sync()
      will always return 1 and pm_runtime_put_sync() will always return
      -ENOSYS. pm_runtime_get_sync() returning 1 presents no problem to the
      driver, but -ENOSYS from pm_runtime_put_sync() causes the driver to
      print a warning.
      
      One option would be to ignore errors returned by pm_runtime_put_sync()
      totally, as they only say that the call was unable to put the hardware
      into suspend mode.
      
      However, I chose to ignore the returned -ENOSYS explicitly, and print a
      warning for other errors, as I think we should get notified if the HW
      failed to go to suspend properly.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      Cc: Jassi Brar <jaswinder.singh@linaro.org>
      Cc: Grazvydas Ignotas <notasas@gmail.com>
      5be3aebd
    • Tomi Valkeinen's avatar
      OMAPDSS: Use PM notifiers for system suspend · 2b8501d7
      Tomi Valkeinen authored
      The current way how omapdss handles system suspend and resume is that
      omapdss device (a platform device, which is not part of the device
      hierarchy of the DSS HW devices, like DISPC and DSI, or panels.) uses
      the suspend and resume callbacks from platform_driver to handle system
      suspend. It does this by disabling all enabled panels on suspend, and
      resuming the previously disabled panels on resume.
      
      This presents a few problems.
      
      One is that as omapdss device is not related to the panel devices or the
      DSS HW devices, there's no ordering in the suspend process. This means
      that suspend could be first ran for DSS HW devices and panels, and only
      then for omapdss device. Currently this is not a problem, as DSS HW
      devices and panels do not handle suspend.
      
      Another, more pressing problem, is that when suspending or resuming, the
      runtime PM functions return -EACCES as runtime PM is disabled during
      system suspend. This causes the driver to print warnings, and operations
      to fail as they think that they failed to bring up the HW.
      
      This patch changes the omapdss suspend handling to use PM notifiers,
      which are called before suspend and after resume. This way we have a
      normally functioning system when we are suspending and resuming the
      panels.
      
      This patch, I believe, creates a problem that somebody could enable or
      disable a panel between PM_SUSPEND_PREPARE and the system suspend, and
      similarly the other way around in resume. I choose to ignore the problem
      for now, as it sounds rather unlikely, and if it happens, it's not
      fatal.
      
      In the long run the system suspend handling of omapdss and panels should
      be thought out properly. The current approach feels rather hacky.
      Perhaps the panel drivers should handle system suspend, or the users of
      omapdss (omapfb, omapdrm) should handle system suspend.
      
      Note that after this patch we could probably revert
      0eaf9f52 (OMAPDSS: use sync versions of
      pm_runtime_put). But as I said, this patch may be temporary, so let's
      leave the sync version still in place.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      Reported-by: default avatarJassi Brar <jaswinder.singh@linaro.org>
      Tested-by: default avatarJassi Brar <jaswinder.singh@linaro.org>
      2b8501d7
    • Rajendra Nayak's avatar
      OMAPDSS: add clk_prepare_enable and clk_disable_unprepare · f11766d1
      Rajendra Nayak authored
      In preparation of OMAP moving to Common Clk Framework(CCF) change
      clk_enable() and clk_disable() calls to clk_prepare_enable() and
      clk_disable_unprepare() in omapdss. This can be safely done, as omapdss
      never enables or disables clocks in atomic context.
      Signed-off-by: default avatarRajendra Nayak <rnayak@ti.com>
      Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
      Cc: <linux-fbdev@vger.kernel.org>
      Cc: Paul Walmsley <paul@pwsan.com>
      Cc: Mike Turquette <mturquette@linaro.org>
      [tomi.valkeinen@ti.com: updated patch description]
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      f11766d1
  2. 28 Jun, 2012 2 commits
  3. 13 Jun, 2012 1 commit
  4. 09 Jun, 2012 1 commit
  5. 08 Jun, 2012 8 commits