summaryrefslogtreecommitdiffstats
path: root/drivers/video/pxa3xx-gcu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/pxa3xx-gcu.c')
-rw-r--r--drivers/video/pxa3xx-gcu.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/drivers/video/pxa3xx-gcu.c b/drivers/video/pxa3xx-gcu.c
index 6c984ea..97563c5 100644
--- a/drivers/video/pxa3xx-gcu.c
+++ b/drivers/video/pxa3xx-gcu.c
@@ -101,7 +101,6 @@ struct pxa3xx_gcu_priv {
dma_addr_t shared_phys;
struct resource *resource_mem;
struct miscdevice misc_dev;
- struct file_operations misc_fops;
wait_queue_head_t wait_idle;
wait_queue_head_t wait_free;
spinlock_t spinlock;
@@ -369,15 +368,20 @@ pxa3xx_gcu_wait_free(struct pxa3xx_gcu_priv *priv)
/* Misc device layer */
+static inline struct pxa3xx_gcu_priv *file_dev(struct file *file)
+{
+ struct miscdevice *dev = file->private_data;
+ return container_of(dev, struct pxa3xx_gcu_priv, misc_dev);
+}
+
static ssize_t
-pxa3xx_gcu_misc_write(struct file *filp, const char *buff,
+pxa3xx_gcu_misc_write(struct file *file, const char *buff,
size_t count, loff_t *offp)
{
int ret;
unsigned long flags;
struct pxa3xx_gcu_batch *buffer;
- struct pxa3xx_gcu_priv *priv =
- container_of(filp->f_op, struct pxa3xx_gcu_priv, misc_fops);
+ struct pxa3xx_gcu_priv *priv = file_dev(file);
int words = count / 4;
@@ -450,11 +454,10 @@ pxa3xx_gcu_misc_write(struct file *filp, const char *buff,
static long
-pxa3xx_gcu_misc_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+pxa3xx_gcu_misc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
unsigned long flags;
- struct pxa3xx_gcu_priv *priv =
- container_of(filp->f_op, struct pxa3xx_gcu_priv, misc_fops);
+ struct pxa3xx_gcu_priv *priv = file_dev(file);
switch (cmd) {
case PXA3XX_GCU_IOCTL_RESET:
@@ -471,11 +474,10 @@ pxa3xx_gcu_misc_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
}
static int
-pxa3xx_gcu_misc_mmap(struct file *filp, struct vm_area_struct *vma)
+pxa3xx_gcu_misc_mmap(struct file *file, struct vm_area_struct *vma)
{
unsigned int size = vma->vm_end - vma->vm_start;
- struct pxa3xx_gcu_priv *priv =
- container_of(filp->f_op, struct pxa3xx_gcu_priv, misc_fops);
+ struct pxa3xx_gcu_priv *priv = file_dev(file);
switch (vma->vm_pgoff) {
case 0:
@@ -574,6 +576,13 @@ free_buffers(struct platform_device *dev,
priv->free = NULL;
}
+static const struct file_operations misc_fops = {
+ .owner = THIS_MODULE,
+ .write = pxa3xx_gcu_misc_write,
+ .unlocked_ioctl = pxa3xx_gcu_misc_ioctl,
+ .mmap = pxa3xx_gcu_misc_mmap
+};
+
static int pxa3xx_gcu_probe(struct platform_device *dev)
{
int i, ret, irq;
@@ -601,14 +610,9 @@ static int pxa3xx_gcu_probe(struct platform_device *dev)
* container_of(). This isn't really necessary as we have a fixed minor
* number anyway, but this is to avoid statics. */
- priv->misc_fops.owner = THIS_MODULE;
- priv->misc_fops.write = pxa3xx_gcu_misc_write;
- priv->misc_fops.unlocked_ioctl = pxa3xx_gcu_misc_ioctl;
- priv->misc_fops.mmap = pxa3xx_gcu_misc_mmap;
-
priv->misc_dev.minor = MISCDEV_MINOR,
priv->misc_dev.name = DRV_NAME,
- priv->misc_dev.fops = &priv->misc_fops,
+ priv->misc_dev.fops = &misc_fops,
/* register misc device */
ret = misc_register(&priv->misc_dev);
OpenPOWER on IntegriCloud