Commit Graph

65 Commits

Author SHA1 Message Date
Naseer Ahmed
251c030307 qcom: display: CEC bugfixes
* Correctly read and pass physical address
* Handle system control
* Use Google Vendor ID

Change-Id: I964fb4b590a0b952d7c8290aef6365d62a2418f0
2015-03-02 14:54:49 -05:00
Naseer Ahmed
7a7b66d1f0 display: Add HDMI CEC HAL
Implement the spec as per
hardware/libhardware/include/hardware/hdmi_cec.h

Change-Id: I02e1ba9deee1007b7e5922c363b9f5d6c6ad82a9
2015-03-02 14:54:49 -05:00
Linux Build Service Account
98fceffb45 Merge "hwc/overlay/hdmi: Fix / enable some error messages." 2015-02-01 14:29:39 -08:00
Saurabh Shah
15455aa610 hwc/overlay/hdmi: Fix / enable some error messages.
Fix cases where some errors are really warnings/info.
Print one-time events like HDMI connect disconnect as info logs.
Print the error string and type on MSMFB_OVERLAY_PREPARE failure.

An ENODEV from driver corresponds to a pipe not available and should
be treated as a warning. This could happen if a previous UNSET is
pending due to a missed vsync. ENODEV should be treated as fatal
only if it is seen continuously representing a book-keeping
blunder.

Change-Id: I730d4ac7db84c287f47805b9c74792c90cfadc6c
2015-01-29 15:22:18 -08:00
Saurabh Shah
b85284ba72 hwc: 8992/8994: Disable BWC when HDMI is connected
8994/8992 don't support BWC with video mode panels in system.
Disable BWC when HDMI is connected.

Change-Id: I43616cc90bb2a518bae360af996889a75cc8c633
2015-01-27 10:54:52 -08:00
Tatenda Chipeperekwa
d80b6173b3 hwc: Add support for HDMI as Primary display
We are adding support for HDMI as Primary to the display HAL.
The HAL must be able to support boot-up use cases and cable
connect/disconnect events as follows:

1. Boot up with HDMI cable connected

   For this scenario we read the best mode supported by the
   HDMI TV and set that as the current and default mode for
   subsequent boot up.

2. Boot up without HDMI cable connected

   We read a default resolution from the driver by reading vscreen
   and reporting this as the display resolution to SF.

3. Switch the display to active state when we receive first frame

   When HDMI is primary we should rely on the first valid
   draw call in order to activate the display

4. Update handling of uevents when HDMI is primary

   a) Do not send hot plug when the cable is connected/disconnected.
   b) Use the correct display ID in uevents when HDMI is primary

5. Handle display timeout when HDMI is Primary

   When HDMI is connected as primary we clean up resources
   and call commit to generate a black frame on the interface.
   However, we do not call blank since we need the timing
   generator and HDMI core to remain turned on.

6. Clear pipe resource when HDMI is disconnected

   When HDMI is primary, we need to make sure that SF/HWC does
   not have any open fd's when the cable is disconnected.

   We clear all pipe resources and call a display commit to ensure
   that all the fd's are closed. This will ensure that the HDMI
   core turns off and that we receive an event the next time the
   cable is connected.

Change-Id: Ice70add583a3859f99bfa2e384fbbb6df4df92e1
2014-10-16 16:21:14 -07:00
Ramkumar Radhakrishnan
5576dc115d hwc: Acquire and Release mDrawlock properly to prevent deadlock
HDMI Online and offline event, UEvent thread acquires mDrawLock and
mStateLock sequentially. At the same time surfaceflinger draw thread
acquires mStateLock and mDrawLock in the reverse sequence which
results in deadlock condition. So release the mDrawLock immediately
after modifying the hwc context variables in UEvent thread.

Change-Id: I6a240294a28d8e9a9aca6f98522c7265b3cad4fa
2014-10-08 19:20:25 -07:00
Tatenda Chipeperekwa
af2c004c44 hwc: Rename libexternal to serve HDMI as primary or external
This change will make is easier to build new functionality
applicable to both HDMI scenarios.

Change-Id: I417184568cb65a49c2ccb4199aff313ae2ee9b24
2014-09-29 15:39:58 -07:00
Tatenda Chipeperekwa
03d5df265c hwc: Clean up ExternalDisplay class
1. Remove hwc_context_t from libexternal since this is a construct
   that should only be used in libhwcomposer.
2. Clean up redundant code by creating utility functions to
   a. open a sysfs node in a given mode
   b. improving EDID mode storage/manipulation
   c. creating/destroying composition objects
3. Add utility functions to
   a. get the connected state of the external display
   b. determine which interface the external display is connected to
      (primary or external)
   c. activate the hdmi interface by setting the resolution via an
      ioctl
   d. update/reset external display information when a device
      connected/disconnected

Change-Id: Iba34c9e43b39ccb9c9436deb726587bd1b26b779
2014-09-25 10:20:11 -07:00
Baldev Sahu
ca483abc1b hwc: Reset isConfiguring flag on external disconnect
If external/virtual is connected and disconnected before any composition
cycle has triggered, isConfiguring flag may remain true. This will cause
fallback to gpu even for primary.

Change-Id: I57279d43d4bacffe3bebe0549f6c3735b36ead30
2014-09-12 13:48:24 +05:30
Manoj Kumar AVM
9591a5e8cd hqd: virtual display code clean up
Remove V4L2 based virtual display functions as it is
no longer used.

Change-Id: Ibd7685791de6baa1bbf12ffe343443fcd7725269
2014-09-02 19:50:23 -07:00
Manoj Kumar AVM
fb472b0553 hqd: Do not process WFD teardown as part of HDMI connection
WFD teardown was required when HDMI is connected on V4L2
architecture. This is because WFD connection is using HDMI
piggyback connection. Since SurfaceFlinger can honour only
one active external display, we have to teardown WFD
connection to process HDMI connection.

This is no longer applicable on VDS architecture. WFD connection
is established using Virtual Display adapter.
WFD Stack listen to HDMI broadcast event and initiate wfd teardown.

Change-Id: Iaca249f4f45193f02d32ac0ab56d68ce85e8c9a3
2014-08-27 13:45:14 -07:00
Tatenda Chipeperekwa
95799fa01b hwc: Fix debug message in uevent for external online
Fix debug message in uevent for external online.

Change-Id: I74c948659a69bc9451c666e31bb5669f45a6eaa7
2014-07-22 18:53:41 -07:00
Raj kamal
59fea567e1 Display and wfd synchronization during teardown
* Provide a binder interface call for wfd module
to inform display about the start/stop/pause/resume
of wfd session.

* This is needed for wfd-hdmi synchronization in
case of v4l2 wfd solution. If hdmi is plugged
in during v4l2 wfd session, display-hal waits in
uevent thread for wfd teardown notification from
wfd module, before going ahead with configuring
external display.

* For VDS WFD solution, display-hal waits in uevent
thread for wfd-teardown to be signalled from
the composition thread.

Change-Id: I9514cb5bc7ff81de0b5dd4cdf66d8286a64ba094
2014-04-15 14:15:59 +05:30
Praveena Pachipulusu
d9443c7e81 hwc: Use proper typecasts
- Remove compiler warnings
- Use proper typecasts

Change-Id: I7391f32ae31283239f5cebb93b02f3ce3a5c99f3
2014-03-28 09:17:43 +05:30
Tatenda Chipeperekwa
8f1b9d719e hwc: Extend pause/resume functionality to VDS displays
Add support to handle pause/resume for virtual displays connected
either using VDS approach.

Change-Id: Iabd01c5597f2399ccc7f83712bda1a2c1103788d
2014-03-24 12:36:56 -07:00
Manoj Kumar AVM
1e8b3fe1bf hqd: Enable triple display support on 8084
8084 supports triple displays concurrently. Primary, HDMI and WFD
can be active at a given instant.

WFD use V4L2 approach. This feature works if WFD is initiated via
settings app and not with wfd-client apk as wfd-client
use HDMI hotplug approach.

Change-Id: I9160ed83b1babe939305b0f238c8e0a8a7c51d07
2014-01-24 10:56:44 -08:00
Linux Build Service Account
a2fe5abe40 Merge "hwc: Instantiate the copybit object when needed" 2014-01-09 02:05:17 -08:00
Arun Kumar K.R
9fc8997eb1 hwc: Instantiate the copybit object when needed
- Initialize copybit object only when its used for composition, as it
  was causing on unnecessary dup of the releaseFence in hwc_sync
- Its used only in case of MDP copybit
- Remove unused copybit object for external display

Change-Id: I876b7b8c5754e469613761789193bda321134c9f
2014-01-07 18:42:33 -08:00
Arun Kumar K.R
c62935ae37 display: Add binder interface to pause/resume WFD
- Client can call this when it want to pause/resume wfd
- Calling this will make sure after pause, black screen
  is shown on the sink
- Currently used by the SecureDisplay module

Change-Id: If618edf76a82abe49fb676d3845ca1f1d5a8bf25
2014-01-07 09:57:51 -08:00
radhakrishna
5d24c25a58 hwc: Invalidate on receiving PANEL_ALIVE=0 status
Invalidate on receiving PANEL_ALIVE=0 status, otherwise
during static wallpaper, panel will be reset only after
next screen update.

Change-Id: I6f5264367c8bd889b9103ed74641ac4a60538b57
CRs-Fixed: 591454
2013-12-19 18:03:56 +05:30
Saurabh Shah
220a30c282 hwc: Do not use fb handle in hwc_prepare
Do not use fb handle in prepare. Use displayFrame for dimensions,
align them and hardcode format

Change-Id: I5c494a74a807d3a52a1c88257494b58c583700f5
2013-12-06 16:04:17 -08:00
Arpita Banerjee
d8965989ec hwc: Change error messages to informative messages in HWC
Few error messages in HWComposer change to as informative
messages.

Change-Id: Iecd2d6c129713363d338ca7aeefbcbc422df893d
2013-11-15 18:49:08 -08:00
Veera Sankaran
0dadfb3798 hwc: Listen fb0 event for panel status
Listen fb0 status change event for panel status. fb0 will receive
"PANEL_ALIVE=0" when panel is not responding to status call.
Call blank and unblank to reset the panel in next hwc_prepare
call.

Change-Id: I941a501a82d9f3b725660ad09631c1d8602b7325
2013-10-31 13:30:57 -07:00
Linux Build Service Account
0550811566 Merge "hwcomposer: Clear mVirtualonExtActive on EXTERNAL_OFFLINE" 2013-10-28 11:35:34 -07:00
Sravan Kumar D.V.N
04ce9ad5ea hwc: Fix unchecked return value
Check the return value of uevent_init function
and return on error.

Change-Id: I9dfca0ed84cbe5f1abf5716c5deed7808aa046ea
2013-10-23 15:57:57 +05:30
Manoj Kumar AVM
7afbcf9871 hwcomposer: Clear mVirtualonExtActive on EXTERNAL_OFFLINE
If WFD Client APK is connected and teared down and then hdmi is
connecetd Unblank Virtual display is happening instead of ext display
this results in Display not coming up on External using HDMI.

Change-Id: Id61e9e753f81e90787e2a958f75a4f84b4469f71
2013-10-18 09:09:04 -07:00
Linux Build Service Account
0003a16858 Merge "hwc: Set display as active only after unblanking it" 2013-09-15 22:36:36 -07:00
Linux Build Service Account
44c4f7610a Merge "hal: adding support for DRC on WiFi display" 2013-09-13 01:46:02 -07:00
Tatenda Chipeperekwa
3368d08ed5 hal: adding support for DRC on WiFi display
When Dynamic Resolution Change (DRC) is triggered in the WiFi display
    stack, it results in a PAUSE and a RESUME event. During DRC, the
    dimensions of the framebuffer are changed. To support DRC we need to:
    1. Check if a RESUME event is the result of a valid DRC event
    2. Reconfigure the display's attributes to reflect resolution change
    3. Enable MDP downscaling when necessary (Valid DRC cases)

Change-Id: Idc3cbc94de99a4a7299e2f6b26c3e35937c1d6c8
2013-09-11 11:46:00 -07:00
Raj Kamal
2464cce7cd hwc: Set display as active only after unblanking it
* For HDMI and non-Hybrid WFD solution, on receiving
online event, display hal sends hotplug connect to SF.
* In case of such displays, set them as active only
after receiving an unblank call.
* For Hybrid WFD solution, since display hal will not
be receiving unblank call from SF, set it as active
as part of processing online event itself.

Change-Id: I319f1576cba954da2024680568c37fedb1eb5d43
2013-09-11 00:12:43 +05:30
Saurabh Shah
88e4d277ad hwc: Add API to find if a display is split
A display could be split if its dimensions exceed 2048 or in case
of primary if we make it so via device tree property.

Add an API to find if a display is split. Use this API instead of
going through a set of conditions in various use cases.
Rename the HighRes, LowRes objects to a more appropriate Split and
NonSplit respectively

Change-Id: Id847c2bf36ea9250e1cdbc0259fdec64bd124537
2013-09-05 09:40:14 -07:00
Amara Venkata Mastan Manoj Kumar
5cbac94cb2 hwc: Fix Pause/Resume issues
1. During PAUSE event, trigger an invalidate frame
     which will unset the pipes (in draw call) and invoke
     display commit as part of hwc_event thread.
     This is required to avoid iommu page faults arising when
     WFD encoder is in the middle of configuring buffers
     and providing to Writeback as part of RESUME event and
     Display HAL tries to invoke display commit as part of PAUSE.

  2. Allow usage of rotator for Primary when WFD is in Pause
     state.

The above changes are required to support secure/non-secure
video playback on HDCP WFD session and Pause/Resume.

Change-Id: I7391ae4cc7cd8b968873996a1a00fee5fbe6039c
2013-08-26 18:35:11 -07:00
Saurabh Shah
b39f8151ab hwc: Fix locking.
Remove the unnecessary blank lock, mdp comp lock, secure lock.
Rename the ext lock to a more appropriate draw lock.

The mdp comp lock is at an incorrect place and causes unwanted
objects to show up in dumpsys, since configDone hasnt cleaned
them up yet.

dump(), blank(), draw() should all acquire a common lock.
draw() includes prepare() and set().

Change-Id: I595547dd5a393a8af6cd8c9297d50793b715e658
2013-08-22 13:15:57 -07:00
Jeykumar Sankaran
27dee264f7 display: External display refactor
- cleans up external library
- add separate library for virtual display
- process virtual updates in its separate path
  in hwc.
- Acquire blank mutex lock for one complete drawing
  cycle

Change-Id: Ib984c578464a131ecdb27ee48960f58d68b7a5a7
2013-08-14 13:19:37 -07:00
Saurabh Shah
188e433606 hwc: Fix locking in external connect and composition.
The external configuring flag should be set after holding locks.
Before opening FB for HDMI/WFD, composition should give up any
open external FB resources.

Locks should be held by composition for the entire duration.

Change-Id: I703f69f156c665bf422613567c00aae340f3ee12
2013-08-05 15:08:49 -07:00
Saurabh Shah
567788bfa7 hwc: wfd: Fix locking on pause resume events
Fix locking on wfd pause, resume events. Some variables are updated
without proper locks being held.

Fix external related lock in hwc to include complete prepare and draw
Mdp comp for primary, otherwise, ends up reading some flags without
locks.

Change-Id: I0f2f0953a7ab322128d044ca3458e359da4e575e
2013-07-11 10:19:52 -07:00
Saurabh Shah
67a38c3565 hwc: Add support for uneven split primary displays
Add support for unevenly split primary displays.
The driver provides info about the split via msm_fb_split sysfs node

For external we assume even split. If driver doesn't specify any split
for primary, we default to even split.

Change-Id: I4d541f41de2d7a5d2b62653fa33cab079a6d5d30
2013-07-01 14:55:06 -07:00
Amara Venkata Mastan Manoj Kumar
601a8b2674 hwc: Set external display indicator on RESUME event
Treat RESUME event as ONLINE event. On Resume event, set
   external display indicator. This will ensure that GPU
   will be used for Primary composition there by freeing
   remaining pipes ensuring that External will be assured
   of pipe allocation.

Change-Id: I53471f4f828811ed8645cf8b08beaab7b46d181d
2013-06-17 16:58:56 -07:00
Raj kamal
e3e68ae41f Fix crash issue arising out of multiple hdmi connect/disconnects
Acquire mExtLock before proceeding further in
hwc_prepare_external to prevent crashes arising out
of updating ctx variables from two different
threads(composition and uevent threads)

Change-Id: I0f18c41b117f18aeb25572b53ef6eba3638bb826
2013-05-02 10:14:23 -07:00
Jeykumar Sankaran
85977e3abe hwc: Implement mixed mode composition.
With this change we are moving  MDP composition from all-or-nothing
implementation to mixed mode implementation where layers can
partially be composited through MDP and while rest of the layers are
composed / cached in framebuffer.

        - Mixed mode design is based on layer caching
        - Mixed mode path is configured only when non-bypassing
          layers are cached.
        - Never allow mixed mode when FB needs to be  udpated.
        - If we cannot bypass all MDP comp marked layers, bail
          out completely.

Change-Id: Ie08f39db07e032b537f042d0d2bfe772ebfed049
2013-04-08 11:36:03 -04:00
Linux Build Service Account
bedc2c8cfb Merge "hwc: Handle WFD Pause/Resume usecase" 2013-03-28 11:57:15 -07:00
Amara Venkata Mastan Manoj Kumar
460350eb30 hwc: Handle WFD Pause/Resume usecase
During Pause event, set external pending state, there by
allowing frames to fall back to FB, closing all MDP pipes.
Resume event should be considered as a connect event.

Change-Id: I536ab9df7145bbb9081edd01168d3dcbc332f07e
CRs-Fixed: 452380
2013-03-27 12:04:22 -07:00
Amara Venkata Mastan Manoj Kumar
b156a2f7f2 hwc: Processing of HDMI connection request when WFD is active
when HDMI is connected during active WFD session, teardown
  WFD and process HDMI connection request.

CRs-Fixed: 442226
Change-Id: I4b22ff9f1ab3175bab47babdaf040cb2289ebe4d
2013-03-26 13:41:46 -07:00
Saurabh Shah
acf102021a hwc/overlay: Video on 4k2k external, 4k2k rotation.
-Add support for Video via overlay on 4k2k external panel.
-Add support for rotating videos on 4k2k panels. We use
pre-rotation in hwc to rotate a video into a single buffer,
irrespective of panel size. Then this buffer is fed to MDP.
Rotator objects are managed by the new RotMgr.
-Cleaup mdpcomp and overlay.

Change-Id: Ifb08534747e8e18b6c58dd8a3e1a9947409100f1
2013-03-13 10:24:31 -07:00
Amara Venkata Mastan Manoj Kumar
11a380df08 hwc: Allow HWC to support Virtual Display
This change allows virtual display to be composed
  by HWC for supporting Google WFD App + QCOM WFD stack.

Change-Id: If8892230256e72fa34e3fb5ae715c3ad8cbd5b64
2013-02-22 17:55:39 -08:00
Arun Kumar K.R
361da4fde0 hwc: Add support for copybit(C2D) composition
- Add CopybitEngine to hwc_context
- draw the layer on the HWC_FRAMEBUFFER_TARGET using
  copybit(c2d) if it qualifies for C2D composition.
- use fence returned from the copybit during c2d
  composition

Change-Id: I052da015cd031f7abd6411d83d7944c335caeff7
2013-01-10 12:29:10 -08:00
Amara Venkata Mastan Manoj Kumar
75526f5941 hwc: Delay HDMI/WFD connection request by one frame
This change introduces hdmi pending state, where we allow
  frames to fall back to FB, closing all MDP pipes.

  Pipes could be used by primary (mixer 0) in which case moving
  them to external (mixer 1) involves unsetting them and setting
  them in the same round which is not recommended by the driver.
  It will fall back to GPU till HDMI is configured on a connect
  event.

  CRs-Fixed: 430057

Change-Id: I4b6677883c499f6d15656c3578190be1115ee6b4
2013-01-02 23:22:36 -08:00
Linux Build Service Account
28b1743a9d Merge "hwc: Handle ext display device conn/disconn requests" 2012-12-21 21:25:59 -08:00
Saurabh Shah
cf053c6eda hwc: Support 4kx2k FB for Primary and External.
Add support for 4kx2k FB for primary and external panels.
Change class design to create appropriate version of FBUpdate on boot up based
on the panel resolution.

Change-Id: I216d815d9b81c610aa39e351f7b55736dfa48b43
2012-12-20 15:15:41 -08:00