static long media_device_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct media_devnode *devnode = media_devnode_data(filp); struct media_device *dev = to_media_device(devnode); long ret; switch (cmd) { case MEDIA_IOC_DEVICE_INFO: case MEDIA_IOC_ENUM_ENTITIES: case MEDIA_IOC_SETUP_LINK: return media_device_ioctl(filp, cmd, arg); case MEDIA_IOC_ENUM_LINKS32: mutex_lock(&dev->graph_mutex); ret = media_device_enum_links32(dev, (struct media_links_enum32 __user *)arg); mutex_unlock(&dev->graph_mutex); break; default: ret = -ENOIOCTLCMD; } return ret; }
static ssize_t media_write(struct file *filp, const char __user *buf, size_t sz, loff_t *off) { struct media_devnode *mdev = media_devnode_data(filp); if (!mdev->fops->write) return -EINVAL; if (!media_devnode_is_registered(mdev)) return -EIO; return mdev->fops->write(filp, buf, sz, off); }
static unsigned int media_poll(struct file *filp, struct poll_table_struct *poll) { struct media_devnode *mdev = media_devnode_data(filp); if (!media_devnode_is_registered(mdev)) return POLLERR | POLLHUP; if (!mdev->fops->poll) return DEFAULT_POLLMASK; return mdev->fops->poll(filp, poll); }
static long media_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct media_devnode *mdev = media_devnode_data(filp); if (!mdev->fops->ioctl) return -ENOTTY; if (!media_devnode_is_registered(mdev)) return -EIO; return mdev->fops->ioctl(filp, cmd, arg); }
/* Override for the release function */ static int media_release(struct inode *inode, struct file *filp) { struct media_devnode *mdev = media_devnode_data(filp); int ret = 0; if (mdev->fops->release) mdev->fops->release(filp); /* decrease the refcount unconditionally since the release() return value is ignored. */ put_device(&mdev->dev); filp->private_data = NULL; return ret; }
/* LGE_CHANGE_E, [email protected], 2012-10-31, Wise screen / Because of the display engine */ static long media_device_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct media_devnode *devnode = media_devnode_data(filp); struct media_device *dev = to_media_device(devnode); long ret; /* LGE_CHANGE_S, [email protected], 2012-10-31, Wise screen / Because of the display engine */ void __user *argp = (void __user *)arg; /* LGE_CHANGE_E, [email protected], 2012-10-31, Wise screen / Because of the display engine */ switch (cmd) { case MEDIA_IOC_DEVICE_INFO: ret = media_device_get_info(dev, (struct media_device_info __user *)arg); break; case MEDIA_IOC_ENUM_ENTITIES: ret = media_device_enum_entities(dev, (struct media_entity_desc __user *)arg); break; case MEDIA_IOC_ENUM_LINKS: mutex_lock(&dev->graph_mutex); ret = media_device_enum_links(dev, (struct media_links_enum __user *)arg); mutex_unlock(&dev->graph_mutex); break; case MEDIA_IOC_SETUP_LINK: mutex_lock(&dev->graph_mutex); ret = media_device_setup_link(dev, (struct media_link_desc __user *)arg); mutex_unlock(&dev->graph_mutex); break; /* LGE_CHANGE_S, [email protected], 2012-10-31, Wise screen / Because of the display engine */ case MEDIA_IOC_SUB_CAM_ID: if (copy_from_user(&sub_cam_id_for_keep_screen_on, argp, sizeof(sub_cam_id_for_keep_screen_on))) { ret = -EFAULT; } else { ret = 0; } break; /* LGE_CHANGE_E, [email protected], 2012-10-31, Wise screen / Because of the display engine */ default: ret = -ENOIOCTLCMD; } return ret; }
static long media_device_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) { struct media_devnode *devnode = media_devnode_data(filp); struct media_device *dev = to_media_device(devnode); long ret; switch (cmd) { case MEDIA_IOC_DEVICE_INFO: ret = media_device_get_info(dev, (struct media_device_info __user *)arg); break; case MEDIA_IOC_ENUM_ENTITIES: ret = media_device_enum_entities(dev, (struct media_entity_desc __user *)arg); break; case MEDIA_IOC_ENUM_LINKS: mutex_lock(&dev->graph_mutex); ret = media_device_enum_links(dev, (struct media_links_enum __user *)arg); mutex_unlock(&dev->graph_mutex); break; case MEDIA_IOC_SETUP_LINK: mutex_lock(&dev->graph_mutex); ret = media_device_setup_link(dev, (struct media_link_desc __user *)arg); mutex_unlock(&dev->graph_mutex); break; default: ret = -ENOIOCTLCMD; } return ret; }