diff options
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/omap2/dsscomp/base.c | 40 | ||||
-rw-r--r-- | drivers/video/omap2/dsscomp/device.c | 45 | ||||
-rw-r--r-- | drivers/video/omap2/dsscomp/dsscomp.h | 5 | ||||
-rw-r--r-- | drivers/video/omap2/dsscomp/gralloc.c | 8 |
4 files changed, 61 insertions, 37 deletions
diff --git a/drivers/video/omap2/dsscomp/base.c b/drivers/video/omap2/dsscomp/base.c index 7c3b0b1..b54fc50 100644 --- a/drivers/video/omap2/dsscomp/base.c +++ b/drivers/video/omap2/dsscomp/base.c @@ -448,24 +448,44 @@ void dump_ovl_info(struct dsscomp_dev *cdev, struct dss2_ovl_info *oi) (void *) oi->ba, (void *) oi->uv, c->stride); } +static void print_mgr_info(struct dsscomp_dev *cdev, + struct dss2_mgr_info *mi) +{ + printk("(dis%d(%s) alpha=%d col=%08x ilace=%d) ", + mi->ix, + (mi->ix < cdev->num_displays && cdev->displays[mi->ix]) ? + cdev->displays[mi->ix]->name : "NONE", + mi->alpha_blending, mi->default_color, + mi->interlaced); +} + void dump_comp_info(struct dsscomp_dev *cdev, struct dsscomp_setup_mgr_data *d, const char *phase) { - struct dss2_mgr_info *mi = &d->mgr; + if (!(debug & DEBUG_COMPOSITIONS)) + return; + + dev_info(DEV(cdev), "[%p] %s: %c%c%c ", + *phase == 'q' ? (void *) d->sync_id : d, phase, + (d->mode & DSSCOMP_SETUP_MODE_APPLY) ? 'A' : '-', + (d->mode & DSSCOMP_SETUP_MODE_DISPLAY) ? 'D' : '-', + (d->mode & DSSCOMP_SETUP_MODE_CAPTURE) ? 'C' : '-'); + print_mgr_info(cdev, &d->mgr); + printk("n=%d\n", d->num_ovls); +} +void dump_total_comp_info(struct dsscomp_dev *cdev, + struct dsscomp_setup_dispc_data *d, + const char *phase) +{ if (!(debug & DEBUG_COMPOSITIONS)) return; - dev_info(DEV(cdev), "[%p] %s: %c%c%c" - "(dis%d(%s) alpha=%d col=%08x ilace=%d n=%d)\n", + dev_info(DEV(cdev), "[%p] %s: %c%c%c ", *phase == 'q' ? (void *) d->sync_id : d, phase, (d->mode & DSSCOMP_SETUP_MODE_APPLY) ? 'A' : '-', (d->mode & DSSCOMP_SETUP_MODE_DISPLAY) ? 'D' : '-', - (d->mode & DSSCOMP_SETUP_MODE_CAPTURE) ? 'C' : '-', - mi->ix, - (mi->ix < cdev->num_displays && cdev->displays[mi->ix]) ? - cdev->displays[mi->ix]->name : "NONE", - mi->alpha_blending, mi->default_color, - mi->interlaced, - d->num_ovls); + (d->mode & DSSCOMP_SETUP_MODE_CAPTURE) ? 'C' : '-'); + print_mgr_info(cdev, &d->mgr); + printk("n=%d\n", d->num_ovls); } diff --git a/drivers/video/omap2/dsscomp/device.c b/drivers/video/omap2/dsscomp/device.c index 9bc14fc..eb57c4a 100644 --- a/drivers/video/omap2/dsscomp/device.c +++ b/drivers/video/omap2/dsscomp/device.c @@ -381,45 +381,46 @@ static long comp_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) struct dsscomp_dev *cdev = container_of(dev, struct dsscomp_dev, dev); void __user *ptr = (void __user *)arg; - struct { - struct dsscomp_setup_mgr_data set; - struct dss2_ovl_info ovl[MAX_OVERLAYS]; - } p; + union { + struct { + struct dsscomp_setup_mgr_data set; + struct dss2_ovl_info ovl[MAX_OVERLAYS]; + } m; + struct dsscomp_setup_dispc_data dispc; + struct dsscomp_display_info dis; + struct dsscomp_check_ovl_data chk; + } u; dsscomp_gralloc_init(cdev); switch (cmd) { case DSSCOMP_SETUP_MGR: { - r = copy_from_user(&p.set, ptr, sizeof(p.set)) ? : - p.set.num_ovls >= ARRAY_SIZE(p.ovl) ? -EINVAL : - copy_from_user(&p.ovl, (void __user *)arg + sizeof(p.set), - sizeof(*p.ovl) * p.set.num_ovls) ? : - setup_mgr(cdev, &p.set); + r = copy_from_user(&u.m.set, ptr, sizeof(u.m.set)) ? : + u.m.set.num_ovls >= ARRAY_SIZE(u.m.ovl) ? -EINVAL : + copy_from_user(&u.m.ovl, + (void __user *)arg + sizeof(u.m.set), + sizeof(*u.m.ovl) * u.m.set.num_ovls) ? : + setup_mgr(cdev, &u.m.set); break; } - case DSSCOMP_SETUP_MGR_G: + case DSSCOMP_SETUP_DISPC: { - r = copy_from_user(&p.set, ptr, sizeof(p.set)) ? : - p.set.num_ovls >= ARRAY_SIZE(p.ovl) ? -EINVAL : - copy_from_user(&p.ovl, (void __user *)arg + sizeof(p.set), - sizeof(*p.ovl) * p.set.num_ovls) ? : - dsscomp_gralloc_queue_ioctl(&p.set); + r = copy_from_user(&u.dispc, ptr, sizeof(u.dispc)) ? : + dsscomp_gralloc_queue_ioctl(&u.dispc); break; } case DSSCOMP_QUERY_DISPLAY: { - struct dsscomp_display_info dis; - r = copy_from_user(&dis, ptr, sizeof(dis)) ? : - query_display(cdev, &dis) ? : - copy_to_user(ptr, &dis, sizeof(dis)); + r = copy_from_user(&u.dis, ptr, sizeof(u.dis)) ? : + query_display(cdev, &u.dis) ? : + copy_to_user(ptr, &u.dis, sizeof(u.dis)); break; } case DSSCOMP_CHECK_OVL: { - struct dsscomp_check_ovl_data chk; - r = copy_from_user(&chk, ptr, sizeof(chk)) ? : - check_ovl(cdev, &chk); + r = copy_from_user(&u.chk, ptr, sizeof(u.chk)) ? : + check_ovl(cdev, &u.chk); break; } default: diff --git a/drivers/video/omap2/dsscomp/dsscomp.h b/drivers/video/omap2/dsscomp/dsscomp.h index 8634f04..6deeda0 100644 --- a/drivers/video/omap2/dsscomp/dsscomp.h +++ b/drivers/video/omap2/dsscomp/dsscomp.h @@ -109,7 +109,7 @@ int dsscomp_queue_init(struct dsscomp_dev *cdev); void dsscomp_queue_exit(void); void dsscomp_gralloc_init(struct dsscomp_dev *cdev); void dsscomp_gralloc_exit(void); -int dsscomp_gralloc_queue_ioctl(struct dsscomp_setup_mgr_data *d); +int dsscomp_gralloc_queue_ioctl(struct dsscomp_setup_dispc_data *d); int dsscomp_wait(struct dsscomp_sync_obj *sync, enum dsscomp_wait_phase phase, int timeout); @@ -126,5 +126,8 @@ void swap_rb_in_mgr_info(struct dss2_mgr_info *mi); void dump_ovl_info(struct dsscomp_dev *cdev, struct dss2_ovl_info *oi); void dump_comp_info(struct dsscomp_dev *cdev, struct dsscomp_setup_mgr_data *d, const char *phase); +void dump_total_comp_info(struct dsscomp_dev *cdev, + struct dsscomp_setup_dispc_data *d, + const char *phase); #endif diff --git a/drivers/video/omap2/dsscomp/gralloc.c b/drivers/video/omap2/dsscomp/gralloc.c index 914c6bd..fe3e2a2 100644 --- a/drivers/video/omap2/dsscomp/gralloc.c +++ b/drivers/video/omap2/dsscomp/gralloc.c @@ -86,7 +86,7 @@ static void dsscomp_gralloc_cb(void *data, int status) /* This is just test code for now that does the setup + apply. It still uses userspace virtual addresses, but maps non TILER buffers into 1D */ -int dsscomp_gralloc_queue_ioctl(struct dsscomp_setup_mgr_data *d) +int dsscomp_gralloc_queue_ioctl(struct dsscomp_setup_dispc_data *d) { struct tiler_pa_info *pas[MAX_OVERLAYS]; s32 ret; @@ -119,7 +119,7 @@ int dsscomp_gralloc_queue_ioctl(struct dsscomp_setup_mgr_data *d) return ret; } -int dsscomp_gralloc_queue(struct dsscomp_setup_mgr_data *d, +int dsscomp_gralloc_queue(struct dsscomp_setup_dispc_data *d, struct tiler_pa_info **pas, void (*cb_fn)(void *, int), void *cb_arg) { @@ -135,7 +135,7 @@ int dsscomp_gralloc_queue(struct dsscomp_setup_mgr_data *d, /* reserve tiler areas if not already done so */ dsscomp_gralloc_init(cdev); - dump_comp_info(cdev, d, "queue"); + dump_total_comp_info(cdev, d, "queue"); for (i = 0; i < d->num_ovls; i++) dump_ovl_info(cdev, d->ovls + i); @@ -283,7 +283,7 @@ static void dsscomp_early_suspend_cb(void *data, int status) static void dsscomp_early_suspend(struct early_suspend *h) { - struct dsscomp_setup_mgr_data d = { + struct dsscomp_setup_dispc_data d = { .mgr.alpha_blending = 1, }; int err; |