msm: mdss: refactor the rotation logic

Creating a rotation session manager to manage the rotation sessions.
At creation time, rotation object is not assigned to the underlying
hardware resources (i.e. pipe, mixer, controller, and write-back).
The hardware assignment happens only at the time of commit, and released
after the commit is done.

Change-Id: I33bf625a177362953c11eefc2a779a5af409964b
Signed-off-by: Xiaoming Zhou <zhoux@codeaurora.org>
This commit is contained in:
Xiaoming Zhou 2014-11-06 13:38:14 -05:00 committed by David Keitel
parent 62d4074af6
commit 21ce99e154
3 changed files with 568 additions and 337 deletions

View file

@ -53,6 +53,7 @@
#include "mdss_panel.h" #include "mdss_panel.h"
#include "mdss_debug.h" #include "mdss_debug.h"
#include "mdss_mdp_debug.h" #include "mdss_mdp_debug.h"
#include "mdss_mdp_rotator.h"
#define CREATE_TRACE_POINTS #define CREATE_TRACE_POINTS
#include "mdss_mdp_trace.h" #include "mdss_mdp_trace.h"
@ -1546,6 +1547,11 @@ static int mdss_mdp_probe(struct platform_device *pdev)
pr_err("unable to register bus scaling\n"); pr_err("unable to register bus scaling\n");
goto probe_done; goto probe_done;
} }
rc = mdss_mdp_rot_mgr_init();
if (rc) {
pr_err("unable to initialize rotation mgr\n");
goto probe_done;
}
rc = mdss_mdp_debug_init(mdata); rc = mdss_mdp_debug_init(mdata);
if (rc) { if (rc) {

File diff suppressed because it is too large Load diff

View file

@ -21,7 +21,6 @@
struct mdss_mdp_rotator_session { struct mdss_mdp_rotator_session {
u32 session_id; u32 session_id;
u32 ref_cnt;
u32 params_changed; u32 params_changed;
int pid; int pid;
@ -36,7 +35,6 @@ struct mdss_mdp_rotator_session {
u32 dnsc_factor_h; u32 dnsc_factor_h;
u32 bwc_mode; u32 bwc_mode;
struct mdss_mdp_pipe *pipe;
struct mutex lock; struct mutex lock;
u8 busy; u8 busy;
@ -48,7 +46,6 @@ struct mdss_mdp_rotator_session {
bool use_sync_pt; bool use_sync_pt;
struct list_head head; struct list_head head;
struct list_head list; struct list_head list;
struct mdss_mdp_rotator_session *next;
struct msm_sync_pt_data *rot_sync_pt_data; struct msm_sync_pt_data *rot_sync_pt_data;
struct work_struct commit_work; struct work_struct commit_work;
}; };
@ -92,4 +89,7 @@ struct msm_sync_pt_data *mdss_mdp_rotator_sync_pt_get(
int mdss_mdp_rotator_play(struct msm_fb_data_type *mfd, int mdss_mdp_rotator_play(struct msm_fb_data_type *mfd,
struct msmfb_overlay_data *req); struct msmfb_overlay_data *req);
int mdss_mdp_rotator_unset(int ndx); int mdss_mdp_rotator_unset(int ndx);
int mdss_mdp_rot_mgr_init(void);
#endif /* MDSS_MDP_ROTATOR_H */ #endif /* MDSS_MDP_ROTATOR_H */