summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 4a5bc43)
raw | patch | inline | side by side (parent: 4a5bc43)
author | Sergiy Kibrik <sergiy.kibrik@globallogic.com> | |
Wed, 3 Apr 2013 20:06:18 +0000 (15:06 -0500) | ||
committer | Praneeth Bajjuri <praneeth@ti.com> | |
Fri, 12 Jul 2013 22:41:44 +0000 (17:41 -0500) |
Add support to queue separate sets of compositions independently
for separate managers.
Change-Id: I1a8e639062b5082222dfbc4be146fbfea1fd82f9
Signed-off-by: Arthur Philpott <arthur.philpott@ti.com>
for separate managers.
Change-Id: I1a8e639062b5082222dfbc4be146fbfea1fd82f9
Signed-off-by: Arthur Philpott <arthur.philpott@ti.com>
drivers/video/omap2/dsscomp/gralloc.c | patch | blob | history |
index 9ba11ceaaabc8185de7afc6dfeeeda34671a482d..cb5772a17b65a827f5196e23a6b2a41633b95095 100755 (executable)
#endif
static bool blanked;
-#define NUM_TILER1D_SLOTS 2
+#define NUM_TILER1D_SLOTS 4
static struct tiler1d_slot {
struct list_head q;
#ifdef CONFIG_DEBUG_FS
u32 ms = ktime_to_ms(ktime_get());
#endif
- u32 channels[ARRAY_SIZE(d->mgrs)], ch;
+ u32 channels[MAX_MANAGERS], ch;
int skip;
struct dsscomp_gralloc_t *gsync;
struct dss2_rect_t win = { .w = 0 };
/* create dsscomp objects for set managers (including active ones) */
for (ch = 0; ch < MAX_MANAGERS; ch++) {
- if (!(mgr_set_mask & (1 << ch)) && !ovl_use_mask[ch])
+ if (!(mgr_set_mask & (1 << ch)))
continue;
mgr = cdev->mgrs[ch];
continue;
}
- /* set basic manager information for blanked managers */
- if (!(mgr_set_mask & (1 << ch))) {
- struct dss2_mgr_info mi = {
- .alpha_blending = true,
- .ix = comp[ch]->frm.mgr.ix,
- };
- dsscomp_set_mgr(comp[ch], &mi);
- }
-
comp[ch]->must_apply = true;
r = dsscomp_setup(comp[ch], d->mode, win);
if (r)
/* NOTE: none of the dsscomp sets should fail as composition is new */
for (i = 0; i < d->num_ovls; i++) {
struct dss2_ovl_info *oi = d->ovls + i;
- u32 mgr_ix = oi->cfg.mgr_ix;
u32 size;
-
- /* verify manager index */
- if (mgr_ix >= d->num_mgrs) {
- dev_err(DEV(cdev), "invalid manager for ovl%d\n",
- oi->cfg.ix);
- continue;
- }
- ch = channels[mgr_ix];
+ int j;
+ ch = oi->cfg.mgr_ix;
/* skip overlays on compositions we could not create */
if (!comp[ch])
continue;
- /* swap red & blue if requested */
- if (d->mgrs[mgr_ix].swap_rb)
- swap_rb_in_ovl_info(d->ovls + i);
+ for (j = 0; j < d->num_mgrs; j++)
+ if (d->mgrs[j].ix == ch) {
+ /* swap red & blue if requested */
+ if (d->mgrs[j].swap_rb)
+ swap_rb_in_ovl_info(d->ovls + i);
+ break;
+ }
+
+ if (j == d->num_mgrs) {
+ dev_err(DEV(cdev), "invalid manager %d for ovl%d\n",
+ ch, oi->cfg.ix);
+ continue;
+ }
/* copy prior overlay to avoid mapping layers twice to 1D */
if (oi->addressing == OMAP_DSS_BUFADDR_OVL_IX) {
struct dsscomp_setup_dispc_data d = {
.num_mgrs = 0,
};
- int err;
+
+ int err, mgr_ix;
pr_info("DSSCOMP: %s\n", __func__);
+ /*dsscomp_gralloc_queue() expects all blanking mgrs set up in comp */
+ for (mgr_ix = 0 ; mgr_ix < cdev->num_mgrs ; mgr_ix++) {
+ struct omap_dss_device *dssdev = cdev->mgrs[mgr_ix]->device;
+ if (dssdev && dssdev->state == OMAP_DSS_DISPLAY_ACTIVE) {
+ d.num_mgrs++;
+ d.mgrs[mgr_ix].ix = mgr_ix;
+ }
+ }
+
/* use gralloc queue as we need to blank all screens */
blank_complete = false;
dsscomp_gralloc_queue(&d, NULL, false, dsscomp_early_suspend_cb, NULL);