1. 02 Dec, 2011 40 commits
    • Tomi Valkeinen's avatar
      OMAPDSS: DISPC: add dispc_mgr_get_framedone_irq · 7d1365c9
      Tomi Valkeinen authored
      Add dispc_mgr_get_framedone_irq() which returns the irq number for
      FRAMEDONE for the given channel.
      
      Note that the function returns always 0 for DIGIT channel, even if OMAP4
      does have FRAMEDONE_TV interrupt. The reason for this is that this
      function is currently used only to track manual updates, and thus
      FRAMEDONE_TV is not needed.
      
      If there's need in the future to also get the FRAMEDONE_TV this needs
      revisiting. However, as FRAMEDONE_TV doesn't exist on OMAP2/3, the use
      of this function for that purpose needs some extra code to handle the
      OMAP2/3 case.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      7d1365c9
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: rewrite register writing · 75c94965
      Tomi Valkeinen authored
      The functions writing to the DISPC registers in apply.c are more complex
      than needed. This patch cleans things up.
      
      Two helper functions are added: need_isr(), which returns if an isr for
      VSYNC is needed, and need_go(), which tells if there has been a write to
      the shadow registers and we need to set the GO bit.
      
      The functions that call the actual dispc write functions will set the
      dirty and shadow_dirty flags themselves, instead of that being done on
      the caller side. The writing functions also check if the dirty flag is
      even set, and return immediately if not.
      
      This allows us to clean up dss_write_regs().
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      75c94965
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: rewrite overlay enable/disable · aaa874a9
      Tomi Valkeinen authored
      Overlays are currently enabled and disabled with a boolean in the struct
      omap_overlay_info. The overlay info is set with ovl->set_overlay_info(),
      and made into use with mgr->apply().
      
      This doesn't work properly, as the enable/disable status may affect also
      other overlays, for example when using fifo-merge. Thus the enabling and
      disabling of the overlay needs to be done outside the normal overlay
      configuration.
      
      This patch achieves that by doing the following things:
      
      1) Add function pointers to struct omap_overlay: enable(), disable() and
      is_enabled(). These are used to do the obvious. The functions may block.
      
      2) Move the "enabled" field from struct omap_overlay to ovl_priv_data.
      
      3) Add a new route for settings to be applied to the HW, called
      "extra_info". The status of the normal info and extra_info are tracked
      separately.
      
      The point here is to allow the normal info to be changed and
      applied in non-blocking matter, whereas the extra_info can only be
      changed when holding the mutex. This makes it possible to, for example,
      set the overlay enable flag, apply it, and wait until the HW has taken
      the flag into use.
      
      This is not possible if the enable flag would be in the normal info, as
      a new value for the flag could be set at any time from the users of
      omapdss.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      aaa874a9
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: add busy field to mgr_priv_data · 43a972d9
      Tomi Valkeinen authored
      Add a new field to mgr_priv data, "busy", which is used to track the
      status of GO bit with the manager. As manual update displays never use
      the GO bit, the field is always false for managers used for manual
      update displays.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      43a972d9
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: move mgr->enabled to mgr_priv_data · bf213523
      Tomi Valkeinen authored
      struct omap_overlay_manager contains "enabled"-field, used to track if
      the manager is enabled or not. This field should be internal to apply.c.
      
      This patch moves the field to mgr_priv_data, and applies the necessary
      locking when accessing the field.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      bf213523
    • Tomi Valkeinen's avatar
      OMAPDSS: DSI: call mgr_enable/disable for cmd mode displays · 9a147a65
      Tomi Valkeinen authored
      The current code uses dsi_video_mode_enable/disable functions to
      enable/disable DISPC output for video mode displays. For command mode
      displays we have no notion in the DISPC side of whether the panel is
      enabled, except when a dss_mgr_start_update() call is made.
      
      However, to properly maintain the DISPC state in apply.c, we need to
      know if a manager used for a manual update display is currently in use.
      
      This patch achieves that by changing dsi_video_mode_enable/disable to
      dsi_enable/disable_video_output, which is called by both video and
      command mode displays. For video mode displays it starts the actual
      pixel stream, as it did before. For command mode displays it doesn't do
      anything else than mark that the manager is currently in use.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      9a147a65
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: add missing uses of spinlock · e0a2aa5b
      Tomi Valkeinen authored
      The functions in apply.c, called mostly via function pointers in overlay
      and overlay_manager structs, will be divided into two groups. The other
      group will not sleep and can be called from interrupts, and the other
      group may sleep.
      
      The idea is that the non-sleeping functions may only change certain
      settings in overlays and managers, and those settings may only affect
      the particular overlay/manager. For example, set the base address of the
      overlay.
      
      The blocking functions, however, will handle more complex configuration
      changes. For example, when an overlay is enabled and fifo-merge feature
      is used, we need to do the enable in multiple steps, waiting in between,
      and the change affects multiple overlays and managers.
      
      apply.c already contains a spinlock, which has been used to protect
      (badly) the dss_data. This patch adds locks/unlocks of the spinlock to
      the missing places, and the lock should now properly protect dss_data.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      e0a2aa5b
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: add mutex · 5558db3f
      Tomi Valkeinen authored
      The functions in apply.c, called mostly via function pointers in overlay
      and overlay_manager structs, will be divided into two groups. The first
      group will not sleep and can be called from interrupts, and the second
      group may sleep.
      
      The idea is that the non-sleeping functions may only change certain
      settings in overlays and managers, and those settings may only affect
      the particular overlay/manager. For example, set the base address of the
      overlay.
      
      The blocking functions, however, will handle more complex configuration
      changes. For example, when an overlay is enabled and fifo-merge feature
      is used, we need to do the enable in multiple steps, waiting in between,
      and the change affects multiple overlays and managers.
      
      This patch adds the mutex which is used in the blocking functions to
      have exclusive access to overlays and overlay managers.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      5558db3f
    • Tomi Valkeinen's avatar
      OMAPDSS: remove ovl/mgr check-code temporarily · 5738b633
      Tomi Valkeinen authored
      DSS currently tries to check that the given overlay and overlay manager
      settings are acceptable, but the code does not work quite properly.
      Things may change between the check and the actual use of the settings.
      
      Furthermore, the following patches will rewrite how settings are
      configured and managed, and trying to keep the (broken) settings
      checking working during the rewrite would be very difficult.
      
      This patch removes the checking code, and a working version of checking
      will be added back after the settings rewrite has been done.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      5738b633
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: move mgr funcs to apply.c · eb70d739
      Tomi Valkeinen authored
      apply.c will handle the management of dispc in the future patches. This
      patch moves overlay manager related functions to apply.c so that they
      will have access to the private data and functions of apply.c.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      eb70d739
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: move ovl funcs to apply.c · f77b3070
      Tomi Valkeinen authored
      apply.c will handle the management of dispc in the future patches. This
      patch moves overlay related functions to apply.c so that they will have
      access to the private data and functions of apply.c.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      f77b3070
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: rename dss_cache to dss_data · d09c7aa8
      Tomi Valkeinen authored
      dss_cache struct contains private data used to manage dispc. "cache" is
      not a good word for it, so rename it to dss_data.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      d09c7aa8
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: move spinlock outside the struct · 063fd701
      Tomi Valkeinen authored
      dss_cache struct contains a spinlock used to protect the struct. A more
      logical place for the spinlock is outside the struct that it is
      protecting. So move it there.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      063fd701
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: rename manager_cache_data · af3d64b2
      Tomi Valkeinen authored
      manager_cache_data is not a suitable name for the struct. It is more of
      a private data for the manager.
      
      Rename the struct to mgr_priv_data, and add a function,
      get_mgr_priv(mgr), to get a pointer to the data.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      af3d64b2
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: rename overlay_cache_data · c10c6f04
      Tomi Valkeinen authored
      overlay_cache_data is not a suitable name for the struct. It is more of
      a private data for the overlay.
      
      Rename the struct to ovl_priv_data, and add a function,
      get_ovl_priv(ovl), to get a pointer to the data.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      c10c6f04
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: configure_* funcs take ovl/manager as args · f6a5e087
      Tomi Valkeinen authored
      Make configure_overlay() and configure_manager() take overlay/manager
      pointer as an argument, instead of the ovl/mgr id. This will be useful
      with the future patches.
      
      Also rename the functions to be a bit more informative:
      dss_ovl_write_regs, dss_mgr_write_regs, dss_write_regs.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      f6a5e087
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: use dispc_mgr_get_vsync_irq() · bc1a9518
      Tomi Valkeinen authored
      Use dispc_mgr_get_vsync_irq() to get the interrupt numbers for vsync,
      instead of hardcoding the values depending on the display type.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      bc1a9518
    • Tomi Valkeinen's avatar
      OMAPDSS: DISPC: Add dispc_mgr_get_vsync_irq() · 3dcec4d6
      Tomi Valkeinen authored
      Add dispc_mgr_get_vsync_irq() which returns the irq number for vsync on
      the given channel.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      3dcec4d6
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: separate vsync isr register/unregister · dbce0160
      Tomi Valkeinen authored
      Create separate functions for the vsync isr register/unregister code for
      cleaner code.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      dbce0160
    • Tomi Valkeinen's avatar
      OMAPDSS: store overlays in a list for each manager · 07e327c9
      Tomi Valkeinen authored
      Current way of handling overlay-manager links is a bit strange: each
      manager has a static array, containing pointers to all the overlays
      (even those used by other managers). The overlays contain a pointer to
      the manager being used.
      
      This patch makes the system a bit saner: each manager has a linked list
      of overlays, and only the overlays linked to that manager are in the
      list.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      07e327c9
    • Tomi Valkeinen's avatar
      OMAPDSS: store managers in an array · 5617ad09
      Tomi Valkeinen authored
      Overlay managers are stored in a linked list. There's no need for this
      list, as an array would do just as fine.
      
      This patch changes the code to use an array for overlay managers.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      5617ad09
    • Tomi Valkeinen's avatar
      OMAPDSS: store overlays in an array · 58452341
      Tomi Valkeinen authored
      Overlays are stored in a linked list. There's no need for this list, as
      an array would do just as fine.
      
      This patch changes the code to use an array for overlays.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      58452341
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: cleanup dss_mgr_start_update · 6e53ca9d
      Tomi Valkeinen authored
      dss_mgr_start_update() has a loop, of which sole purpose is to find the
      manager used for this update. The whole loop is extra, as we already
      know the manager.
      
      Remove the loop.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      6e53ca9d
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: skip isr register and config for disabled displays · 04f6643a
      Tomi Valkeinen authored
      There's no need to register the vsync ISR and configure the hardware if
      the overlay manager is disabled, so this patch adds a check for disabled
      managers to the omap_dss_mgr_apply() function.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      04f6643a
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: skip isr register and config for manual update displays · 18135ead
      Tomi Valkeinen authored
      The mechanism to cache manager and overlay settings and configure them
      into the HW registers in VSYNC is meant only for auto-update displays,
      as it doesn't make sense (and doesn't work) for manual-update displays.
      
      This patchs adds a check so that we skip the above for manual update
      displays.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      18135ead
    • Tomi Valkeinen's avatar
      OMAPDSS: APPLY: track whether a manager is enabled · be729178
      Tomi Valkeinen authored
      Add "enabled" field to struct omap_overlay_manager, which tells if the
      output is enabled or not. This will be used in apply.c in the following
      patches.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      be729178
    • Tomi Valkeinen's avatar
      OMAPDSS: hide manager's enable/disable() · 7797c6da
      Tomi Valkeinen authored
      omap_overlay_manager struct contains enable() and disable() functions.
      However, these are only meant to be used from inside omapdss, and thus
      it's bad to expose the functions.
      
      This patch adds dss_mgr_enable() and dss_mgr_disable() functions to
      apply.c, which handle enabling and disabling the output.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      7797c6da
    • Tomi Valkeinen's avatar
      OMAPDSS: create apply.c · 58f25548
      Tomi Valkeinen authored
      Create a new file, apply.c, and move code about handling the
      apply-mechanism and configuration of the managers and overlays from
      manager.c to apply.c.
      
      Not all related code is moved in this patch, but only the core
      apply/configure functions. The later patches move rest of the code from
      overlay.c and manager.c, adding necessary locking at the same time.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      58f25548
    • Tomi Valkeinen's avatar
      OMAPDSS: apply affects only one overlay manager · d2bbb9bb
      Tomi Valkeinen authored
      omap_dss_mgr_apply currently applies settings to all overlays and
      overlay managers. The reason for this was to support cases where
      configuration changes affecting multiple managers are made. However, the
      current code doesn't support changing such configurations, so the
      functionality is not needed.
      
      Change the apply to affect only the manager given as an argument, and
      the overlays attached to that manager.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      d2bbb9bb
    • Tomi Valkeinen's avatar
      OMAPDSS: split omap_dss_mgr_apply() to smaller funcs · 20928501
      Tomi Valkeinen authored
      Split omap_dss_mgr_apply() into smaller functions for clarity.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      20928501
    • Tomi Valkeinen's avatar
      OMAPDSS: add ovl/mgr_manual_update() helpers · 32eaa584
      Tomi Valkeinen authored
      Add helper functions ovl_manual_update() and mgr_manual_update() which
      return whether the overlay or manager is used with a manual update
      display.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      32eaa584
    • Tomi Valkeinen's avatar
      OMAPDSS: remove unneeded dss_ovl_wait_for_go() · 550a8f64
      Tomi Valkeinen authored
      There's an unnecessary wrapper function, dss_ovl_wait_for_go(), which
      does nothing else than call dss_mgr_wait_for_go_ovl(). The
      dss_ovl_wait_for_go() function can be removed.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      550a8f64
    • Tomi Valkeinen's avatar
      OMAPDSS: DISPC: remove unused functions · c3f96fee
      Tomi Valkeinen authored
      Remove unused functions:
      
      dispc_mgr_get_default_color
      dispc_mgr_get_trans_key
      dispc_mgr_trans_key_enabled
      dispc_mgr_alpha_fixed_zorder_enabled
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      c3f96fee
    • Tomi Valkeinen's avatar
      OMAPDSS: setup manager with dispc_mgr_setup() · c64dca40
      Tomi Valkeinen authored
      Change manager configuration to be similar to overlay configuration by
      creating dispc_mgr_setup() which takes omap_overlay_manager_info as
      parameter.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      c64dca40
    • Tomi Valkeinen's avatar
      OMAPDSS: separate overlay channel from ovl_setup · 2cc5d1af
      Tomi Valkeinen authored
      Overlay channel is configured with ovl_setup, with all the other overlay
      attriutes. This patch separates overlay channel setup so that we can
      later configure the channel only when needed.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      2cc5d1af
    • Tomi Valkeinen's avatar
      OMAPDSS: separate FIFO threshold setup from ovl_setup · f38545da
      Tomi Valkeinen authored
      Overlay FIFO thresholds are configured with ovl_setup, with all the
      other overlay attributes. This patch separates FIFO threshold setup so
      that we can later configure FIFO thresholds only when needed.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      f38545da
    • Tomi Valkeinen's avatar
      OMAPDSS: handle ilace/replication when configuring overlay · 3ba2a1c0
      Tomi Valkeinen authored
      Move the configuration of interlace and replication from
      omap_dss_mgr_apply() to configure_overlay(). This removes the need to
      store the values into the cache data.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      3ba2a1c0
    • Tomi Valkeinen's avatar
      OMAPDSS: DISPC: handle 0 out_width/out_height in ovl_setup() · cf073668
      Tomi Valkeinen authored
      Overlay out_width/height are set to 0 when scaling is not used by the
      users of omapdss. Currently ovl_setup() expects the caller of
      ovl_setup() to convert those zero values to width or height.
      
      This patch makes ovl_setup() accept zero values for out_width/height,
      making calling ovl_setup() a bit simpler as the overlay_info can be
      just passed to this function without modifications.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      cf073668
    • Tomi Valkeinen's avatar
      OMAPDSS: pass ovl manager to dss_start_update · 1cb00178
      Tomi Valkeinen authored
      dss_start_update() takes currently the dss device as a parameter. Change
      the parameter to ovl manager, as that is what the dss_start_update()
      actually needs. Change the name of the function to
      dss_mgr_start_update() to reflect the change.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      1cb00178
    • Tomi Valkeinen's avatar
      OMAPDSS: remove partial update from panel-taal · 6331709b
      Tomi Valkeinen authored
      Partial update for manual update displays has never worked quite well:
      * The HW has limitations on the update area, and the x and width need to
        be even.
      * Showing a part of a scaled overlay causes artifacts.
      * Makes the management of dispc very complex
      
      Considering the above points and the fact that partial update is not
      used anywhere, this and the following patches remove the partial update
      support. This will greatly simplify the following re-write of the apply
      mechanism to get proper locking and additional features like fifo-merge.
      
      This patch removes the partial update from the panel-taal.c.
      Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
      6331709b