|
@@ -59,21 +59,21 @@ static DECLARE_BITMAP(media_devnode_nums, MEDIA_NUM_DEVICES);
|
|
|
/* Called when the last user of the media device exits. */
|
|
|
static void media_devnode_release(struct device *cd)
|
|
|
{
|
|
|
- struct media_devnode *mdev = to_media_devnode(cd);
|
|
|
+ struct media_devnode *devnode = to_media_devnode(cd);
|
|
|
|
|
|
mutex_lock(&media_devnode_lock);
|
|
|
|
|
|
/* Delete the cdev on this minor as well */
|
|
|
- cdev_del(&mdev->cdev);
|
|
|
+ cdev_del(&devnode->cdev);
|
|
|
|
|
|
/* Mark device node number as free */
|
|
|
- clear_bit(mdev->minor, media_devnode_nums);
|
|
|
+ clear_bit(devnode->minor, media_devnode_nums);
|
|
|
|
|
|
mutex_unlock(&media_devnode_lock);
|
|
|
|
|
|
/* Release media_devnode and perform other cleanups as needed. */
|
|
|
- if (mdev->release)
|
|
|
- mdev->release(mdev);
|
|
|
+ if (devnode->release)
|
|
|
+ devnode->release(devnode);
|
|
|
}
|
|
|
|
|
|
static struct bus_type media_bus_type = {
|
|
@@ -83,37 +83,37 @@ static struct bus_type media_bus_type = {
|
|
|
static ssize_t media_read(struct file *filp, char __user *buf,
|
|
|
size_t sz, loff_t *off)
|
|
|
{
|
|
|
- struct media_devnode *mdev = media_devnode_data(filp);
|
|
|
+ struct media_devnode *devnode = media_devnode_data(filp);
|
|
|
|
|
|
- if (!mdev->fops->read)
|
|
|
+ if (!devnode->fops->read)
|
|
|
return -EINVAL;
|
|
|
- if (!media_devnode_is_registered(mdev))
|
|
|
+ if (!media_devnode_is_registered(devnode))
|
|
|
return -EIO;
|
|
|
- return mdev->fops->read(filp, buf, sz, off);
|
|
|
+ return devnode->fops->read(filp, buf, sz, off);
|
|
|
}
|
|
|
|
|
|
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);
|
|
|
+ struct media_devnode *devnode = media_devnode_data(filp);
|
|
|
|
|
|
- if (!mdev->fops->write)
|
|
|
+ if (!devnode->fops->write)
|
|
|
return -EINVAL;
|
|
|
- if (!media_devnode_is_registered(mdev))
|
|
|
+ if (!media_devnode_is_registered(devnode))
|
|
|
return -EIO;
|
|
|
- return mdev->fops->write(filp, buf, sz, off);
|
|
|
+ return devnode->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);
|
|
|
+ struct media_devnode *devnode = media_devnode_data(filp);
|
|
|
|
|
|
- if (!media_devnode_is_registered(mdev))
|
|
|
+ if (!media_devnode_is_registered(devnode))
|
|
|
return POLLERR | POLLHUP;
|
|
|
- if (!mdev->fops->poll)
|
|
|
+ if (!devnode->fops->poll)
|
|
|
return DEFAULT_POLLMASK;
|
|
|
- return mdev->fops->poll(filp, poll);
|
|
|
+ return devnode->fops->poll(filp, poll);
|
|
|
}
|
|
|
|
|
|
static long
|
|
@@ -121,12 +121,12 @@ __media_ioctl(struct file *filp, unsigned int cmd, unsigned long arg,
|
|
|
long (*ioctl_func)(struct file *filp, unsigned int cmd,
|
|
|
unsigned long arg))
|
|
|
{
|
|
|
- struct media_devnode *mdev = media_devnode_data(filp);
|
|
|
+ struct media_devnode *devnode = media_devnode_data(filp);
|
|
|
|
|
|
if (!ioctl_func)
|
|
|
return -ENOTTY;
|
|
|
|
|
|
- if (!media_devnode_is_registered(mdev))
|
|
|
+ if (!media_devnode_is_registered(devnode))
|
|
|
return -EIO;
|
|
|
|
|
|
return ioctl_func(filp, cmd, arg);
|
|
@@ -134,9 +134,9 @@ __media_ioctl(struct file *filp, unsigned int cmd, unsigned long arg,
|
|
|
|
|
|
static long media_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
|
|
{
|
|
|
- struct media_devnode *mdev = media_devnode_data(filp);
|
|
|
+ struct media_devnode *devnode = media_devnode_data(filp);
|
|
|
|
|
|
- return __media_ioctl(filp, cmd, arg, mdev->fops->ioctl);
|
|
|
+ return __media_ioctl(filp, cmd, arg, devnode->fops->ioctl);
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_COMPAT
|
|
@@ -144,9 +144,9 @@ static long media_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
|
|
static long media_compat_ioctl(struct file *filp, unsigned int cmd,
|
|
|
unsigned long arg)
|
|
|
{
|
|
|
- struct media_devnode *mdev = media_devnode_data(filp);
|
|
|
+ struct media_devnode *devnode = media_devnode_data(filp);
|
|
|
|
|
|
- return __media_ioctl(filp, cmd, arg, mdev->fops->compat_ioctl);
|
|
|
+ return __media_ioctl(filp, cmd, arg, devnode->fops->compat_ioctl);
|
|
|
}
|
|
|
|
|
|
#endif /* CONFIG_COMPAT */
|
|
@@ -154,7 +154,7 @@ static long media_compat_ioctl(struct file *filp, unsigned int cmd,
|
|
|
/* Override for the open function */
|
|
|
static int media_open(struct inode *inode, struct file *filp)
|
|
|
{
|
|
|
- struct media_devnode *mdev;
|
|
|
+ struct media_devnode *devnode;
|
|
|
int ret;
|
|
|
|
|
|
/* Check if the media device is available. This needs to be done with
|
|
@@ -164,23 +164,23 @@ static int media_open(struct inode *inode, struct file *filp)
|
|
|
* a crash.
|
|
|
*/
|
|
|
mutex_lock(&media_devnode_lock);
|
|
|
- mdev = container_of(inode->i_cdev, struct media_devnode, cdev);
|
|
|
+ devnode = container_of(inode->i_cdev, struct media_devnode, cdev);
|
|
|
/* return ENXIO if the media device has been removed
|
|
|
already or if it is not registered anymore. */
|
|
|
- if (!media_devnode_is_registered(mdev)) {
|
|
|
+ if (!media_devnode_is_registered(devnode)) {
|
|
|
mutex_unlock(&media_devnode_lock);
|
|
|
return -ENXIO;
|
|
|
}
|
|
|
/* and increase the device refcount */
|
|
|
- get_device(&mdev->dev);
|
|
|
+ get_device(&devnode->dev);
|
|
|
mutex_unlock(&media_devnode_lock);
|
|
|
|
|
|
- filp->private_data = mdev;
|
|
|
+ filp->private_data = devnode;
|
|
|
|
|
|
- if (mdev->fops->open) {
|
|
|
- ret = mdev->fops->open(filp);
|
|
|
+ if (devnode->fops->open) {
|
|
|
+ ret = devnode->fops->open(filp);
|
|
|
if (ret) {
|
|
|
- put_device(&mdev->dev);
|
|
|
+ put_device(&devnode->dev);
|
|
|
filp->private_data = NULL;
|
|
|
return ret;
|
|
|
}
|
|
@@ -192,16 +192,16 @@ static int media_open(struct inode *inode, struct file *filp)
|
|
|
/* Override for the release function */
|
|
|
static int media_release(struct inode *inode, struct file *filp)
|
|
|
{
|
|
|
- struct media_devnode *mdev = media_devnode_data(filp);
|
|
|
+ struct media_devnode *devnode = media_devnode_data(filp);
|
|
|
|
|
|
- if (mdev->fops->release)
|
|
|
- mdev->fops->release(filp);
|
|
|
+ if (devnode->fops->release)
|
|
|
+ devnode->fops->release(filp);
|
|
|
|
|
|
filp->private_data = NULL;
|
|
|
|
|
|
/* decrease the refcount unconditionally since the release()
|
|
|
return value is ignored. */
|
|
|
- put_device(&mdev->dev);
|
|
|
+ put_device(&devnode->dev);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -219,7 +219,7 @@ static const struct file_operations media_devnode_fops = {
|
|
|
.llseek = no_llseek,
|
|
|
};
|
|
|
|
|
|
-int __must_check media_devnode_register(struct media_devnode *mdev,
|
|
|
+int __must_check media_devnode_register(struct media_devnode *devnode,
|
|
|
struct module *owner)
|
|
|
{
|
|
|
int minor;
|
|
@@ -237,55 +237,55 @@ int __must_check media_devnode_register(struct media_devnode *mdev,
|
|
|
set_bit(minor, media_devnode_nums);
|
|
|
mutex_unlock(&media_devnode_lock);
|
|
|
|
|
|
- mdev->minor = minor;
|
|
|
+ devnode->minor = minor;
|
|
|
|
|
|
/* Part 2: Initialize and register the character device */
|
|
|
- cdev_init(&mdev->cdev, &media_devnode_fops);
|
|
|
- mdev->cdev.owner = owner;
|
|
|
+ cdev_init(&devnode->cdev, &media_devnode_fops);
|
|
|
+ devnode->cdev.owner = owner;
|
|
|
|
|
|
- ret = cdev_add(&mdev->cdev, MKDEV(MAJOR(media_dev_t), mdev->minor), 1);
|
|
|
+ ret = cdev_add(&devnode->cdev, MKDEV(MAJOR(media_dev_t), devnode->minor), 1);
|
|
|
if (ret < 0) {
|
|
|
pr_err("%s: cdev_add failed\n", __func__);
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
|
/* Part 3: Register the media device */
|
|
|
- mdev->dev.bus = &media_bus_type;
|
|
|
- mdev->dev.devt = MKDEV(MAJOR(media_dev_t), mdev->minor);
|
|
|
- mdev->dev.release = media_devnode_release;
|
|
|
- if (mdev->parent)
|
|
|
- mdev->dev.parent = mdev->parent;
|
|
|
- dev_set_name(&mdev->dev, "media%d", mdev->minor);
|
|
|
- ret = device_register(&mdev->dev);
|
|
|
+ devnode->dev.bus = &media_bus_type;
|
|
|
+ devnode->dev.devt = MKDEV(MAJOR(media_dev_t), devnode->minor);
|
|
|
+ devnode->dev.release = media_devnode_release;
|
|
|
+ if (devnode->parent)
|
|
|
+ devnode->dev.parent = devnode->parent;
|
|
|
+ dev_set_name(&devnode->dev, "media%d", devnode->minor);
|
|
|
+ ret = device_register(&devnode->dev);
|
|
|
if (ret < 0) {
|
|
|
pr_err("%s: device_register failed\n", __func__);
|
|
|
goto error;
|
|
|
}
|
|
|
|
|
|
/* Part 4: Activate this minor. The char device can now be used. */
|
|
|
- set_bit(MEDIA_FLAG_REGISTERED, &mdev->flags);
|
|
|
+ set_bit(MEDIA_FLAG_REGISTERED, &devnode->flags);
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
error:
|
|
|
mutex_lock(&media_devnode_lock);
|
|
|
- cdev_del(&mdev->cdev);
|
|
|
- clear_bit(mdev->minor, media_devnode_nums);
|
|
|
+ cdev_del(&devnode->cdev);
|
|
|
+ clear_bit(devnode->minor, media_devnode_nums);
|
|
|
mutex_unlock(&media_devnode_lock);
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-void media_devnode_unregister(struct media_devnode *mdev)
|
|
|
+void media_devnode_unregister(struct media_devnode *devnode)
|
|
|
{
|
|
|
- /* Check if mdev was ever registered at all */
|
|
|
- if (!media_devnode_is_registered(mdev))
|
|
|
+ /* Check if devnode was ever registered at all */
|
|
|
+ if (!media_devnode_is_registered(devnode))
|
|
|
return;
|
|
|
|
|
|
mutex_lock(&media_devnode_lock);
|
|
|
- clear_bit(MEDIA_FLAG_REGISTERED, &mdev->flags);
|
|
|
+ clear_bit(MEDIA_FLAG_REGISTERED, &devnode->flags);
|
|
|
mutex_unlock(&media_devnode_lock);
|
|
|
- device_unregister(&mdev->dev);
|
|
|
+ device_unregister(&devnode->dev);
|
|
|
}
|
|
|
|
|
|
/*
|