aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/omap2/dsscomp/base.c40
-rw-r--r--drivers/video/omap2/dsscomp/device.c45
-rw-r--r--drivers/video/omap2/dsscomp/dsscomp.h5
-rw-r--r--drivers/video/omap2/dsscomp/gralloc.c8
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;