[PATCH v5 0/4] Add PSR function support for Analogix/Rockchip DP

From: Yakir Yang
Date: Sun Jul 24 2016 - 02:57:59 EST

The full name of PSR is Panel Self Refresh, panel device could refresh
itself with the hardware framebuffer in panel, this would make a lots
of sense to save the power consumption.

The v5 version have made the psr_set_state() to a delay work, which is
the biggest changes from v4.

The v3 version have splited an common PSR driver for Rockchip, which is
biggest changes from v2.

This thread is based on Mark's RK3399 VOP thread[0].

[0]: https://patchwork.kernel.org/patch/8886041/

Changes in v5:
- Add reviewed flag from Sean.
- Only keep 'psr_list_mutex' at register/unregister time.
- Remove unused global variables.
- Make list traversal safely at rockchip_drm_psr_unregister().
- Make psr_set_state() to a delay work, safe to call exported symbols at
interrupt context.
- Remove the repeated psr delay work in vop driver.
- Add reviewed flag from Sean.
- Add reviewed flag from Sean.

Changes in v4.1:
- Remove the completion_done() check in irq handler (Sean)
- Take use of existing edp_psr_vsc struct to swap HBx and DBx setting. (Sean)
- Remove PSR_VID_CRC_FLUSH setting analogix_dp_enable_psr_crc().
- Add comment about PBx magic numbers. (Sean)

Changes in v4:
- Avoid the weird behavior in rockchip_drm_wait_line_flag(). (Sean)
- Make line_flag_num_x to an array. (Sean)
- Remove the unused vop_cfg_done() in vop_line_flag_irq_enable(). (Stephane, reviewed in Google gerrit)
- Tuck the global "psr_list" & "psr_list_mutex" in struct rockchip_drm_private. (Sean)
- Move the access of "psr->state" under "psr->state_mutex"'s protect. (Sean)
- Let "psr->state = PSR_FLUSH" under "psr->state_mutex"'s protect. (Sean)
- Collect psr_enable() and psr_disable() into psr_set_state()
- s/5\ second/PSR_FLUSH_TIMEOUT/ (Sean)
- Flush the psr callback in vop_crtc_disable(). (StÃphane, reviewed in Google gerrit)
- Add the missing file head with license. (StÃphane, reviewed in Google gerrit)
- Downgrade the PSR version print message to debug level. (Sean)
- Return 'void' instead of 'int' in analogix_dp_enable_sink_psr(). (Sean)
- Delete the unused read dpcd operations in analogix_dp_enable_sink_psr(). (Sean)
- Delete the arbitrary usleep_range in analogix_dp_enable_psr_crc. (Sean).
- Clean up the hardcoded values in analogix_dp_send_psr_spd(). (Sean)
- Rename "active/inactive" to "enable/disable". (Sean, Dominik)
- Keep set the PSR_VID_CRC_FLUSH gate in analogix_dp_enable_psr_crc().
- Return 'void' instead of 'int' in analogix_dp_psr_set(). (Sean)
- Pull the 10ms delay time out into a #define. (Sean)
- Improved the code of analogix_dp_psr_work(). (Sean)
- Indented with spaces for new numbers in rockchip_dp_device struct. (StÃphane, reviewed at Google gerrit)

Changes in v3:
- Export the 'rockchip_drm_wait_line_flag' symbol, and document it.
- Add 'line_flag_num_0' for RK3288/RK3036
- Remove the notify for waiting line_flag event (Daniel)
- split the psr flow into an common abstracted PSR driver
- implement the 'fb->dirty' callback function (Daniel)
- avoid to use notify to acqiure for vact event (Daniel)
- remove psr_active() callback which introduce in v2
- split analogix_dp_enable_psr(), make it more clearly
- remove some nosie register setting comments
- split the common psr logic into a seperate driver, make this to a
simple sub-psr device driver.

Changes in v2:
- Introduce in v2, split VOP line flag changes out
- introduce in v2, splite the common Analogix DP changes out
- remove vblank notify out (Daniel)
- create a psr_active() callback in vop data struct.

Yakir Yang (4):
drm/rockchip: vop: export line flag function
drm/rockchip: add an common abstracted PSR driver
drm/bridge: analogix_dp: add the PSR function support
drm/rockchip: analogix_dp: implement PSR function

drivers/gpu/drm/bridge/analogix/analogix_dp_core.c | 81 +++++++
drivers/gpu/drm/bridge/analogix/analogix_dp_core.h | 5 +
drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c | 51 +++++
drivers/gpu/drm/bridge/analogix/analogix_dp_reg.h | 34 +++
drivers/gpu/drm/rockchip/Makefile | 2 +-
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 57 +++++
drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 3 +
drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 6 +
drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 12 +
drivers/gpu/drm/rockchip/rockchip_drm_psr.c | 249 +++++++++++++++++++++
drivers/gpu/drm/rockchip/rockchip_drm_psr.h | 26 +++
drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 126 +++++++++++
drivers/gpu/drm/rockchip/rockchip_drm_vop.h | 2 +
drivers/gpu/drm/rockchip/rockchip_vop_reg.c | 4 +
include/drm/bridge/analogix_dp.h | 3 +
15 files changed, 660 insertions(+), 1 deletion(-)
create mode 100644 drivers/gpu/drm/rockchip/rockchip_drm_psr.c
create mode 100644 drivers/gpu/drm/rockchip/rockchip_drm_psr.h