diff options
Diffstat (limited to 'include/media/media-devnode.h')
| -rw-r--r-- | include/media/media-devnode.h | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/include/media/media-devnode.h b/include/media/media-devnode.h index fe42f08e72bd..37d494805944 100644 --- a/include/media/media-devnode.h +++ b/include/media/media-devnode.h | |||
| @@ -33,6 +33,8 @@ | |||
| 33 | #include <linux/device.h> | 33 | #include <linux/device.h> |
| 34 | #include <linux/cdev.h> | 34 | #include <linux/cdev.h> |
| 35 | 35 | ||
| 36 | struct media_device; | ||
| 37 | |||
| 36 | /* | 38 | /* |
| 37 | * Flag to mark the media_devnode struct as registered. Drivers must not touch | 39 | * Flag to mark the media_devnode struct as registered. Drivers must not touch |
| 38 | * this flag directly, it will be set and cleared by media_devnode_register and | 40 | * this flag directly, it will be set and cleared by media_devnode_register and |
| @@ -67,8 +69,9 @@ struct media_file_operations { | |||
| 67 | 69 | ||
| 68 | /** | 70 | /** |
| 69 | * struct media_devnode - Media device node | 71 | * struct media_devnode - Media device node |
| 72 | * @media_dev: pointer to struct &media_device | ||
| 70 | * @fops: pointer to struct &media_file_operations with media device ops | 73 | * @fops: pointer to struct &media_file_operations with media device ops |
| 71 | * @dev: struct device pointer for the media controller device | 74 | * @dev: pointer to struct &device containing the media controller device |
| 72 | * @cdev: struct cdev pointer character device | 75 | * @cdev: struct cdev pointer character device |
| 73 | * @parent: parent device | 76 | * @parent: parent device |
| 74 | * @minor: device node minor number | 77 | * @minor: device node minor number |
| @@ -81,6 +84,8 @@ struct media_file_operations { | |||
| 81 | * before registering the node. | 84 | * before registering the node. |
| 82 | */ | 85 | */ |
| 83 | struct media_devnode { | 86 | struct media_devnode { |
| 87 | struct media_device *media_dev; | ||
| 88 | |||
| 84 | /* device ops */ | 89 | /* device ops */ |
| 85 | const struct media_file_operations *fops; | 90 | const struct media_file_operations *fops; |
| 86 | 91 | ||
| @@ -94,7 +99,7 @@ struct media_devnode { | |||
| 94 | unsigned long flags; /* Use bitops to access flags */ | 99 | unsigned long flags; /* Use bitops to access flags */ |
| 95 | 100 | ||
| 96 | /* callbacks */ | 101 | /* callbacks */ |
| 97 | void (*release)(struct media_devnode *mdev); | 102 | void (*release)(struct media_devnode *devnode); |
| 98 | }; | 103 | }; |
| 99 | 104 | ||
| 100 | /* dev to media_devnode */ | 105 | /* dev to media_devnode */ |
| @@ -103,7 +108,8 @@ struct media_devnode { | |||
| 103 | /** | 108 | /** |
| 104 | * media_devnode_register - register a media device node | 109 | * media_devnode_register - register a media device node |
| 105 | * | 110 | * |
| 106 | * @mdev: media device node structure we want to register | 111 | * @mdev: struct media_device we want to register a device node |
| 112 | * @devnode: media device node structure we want to register | ||
| 107 | * @owner: should be filled with %THIS_MODULE | 113 | * @owner: should be filled with %THIS_MODULE |
| 108 | * | 114 | * |
| 109 | * The registration code assigns minor numbers and registers the new device node | 115 | * The registration code assigns minor numbers and registers the new device node |
| @@ -116,20 +122,33 @@ struct media_devnode { | |||
| 116 | * the media_devnode structure is *not* called, so the caller is responsible for | 122 | * the media_devnode structure is *not* called, so the caller is responsible for |
| 117 | * freeing any data. | 123 | * freeing any data. |
| 118 | */ | 124 | */ |
| 119 | int __must_check media_devnode_register(struct media_devnode *mdev, | 125 | int __must_check media_devnode_register(struct media_device *mdev, |
| 126 | struct media_devnode *devnode, | ||
| 120 | struct module *owner); | 127 | struct module *owner); |
| 121 | 128 | ||
| 122 | /** | 129 | /** |
| 130 | * media_devnode_unregister_prepare - clear the media device node register bit | ||
| 131 | * @devnode: the device node to prepare for unregister | ||
| 132 | * | ||
| 133 | * This clears the passed device register bit. Future open calls will be met | ||
| 134 | * with errors. Should be called before media_devnode_unregister() to avoid | ||
| 135 | * races with unregister and device file open calls. | ||
| 136 | * | ||
| 137 | * This function can safely be called if the device node has never been | ||
| 138 | * registered or has already been unregistered. | ||
| 139 | */ | ||
| 140 | void media_devnode_unregister_prepare(struct media_devnode *devnode); | ||
| 141 | |||
| 142 | /** | ||
| 123 | * media_devnode_unregister - unregister a media device node | 143 | * media_devnode_unregister - unregister a media device node |
| 124 | * @mdev: the device node to unregister | 144 | * @devnode: the device node to unregister |
| 125 | * | 145 | * |
| 126 | * This unregisters the passed device. Future open calls will be met with | 146 | * This unregisters the passed device. Future open calls will be met with |
| 127 | * errors. | 147 | * errors. |
| 128 | * | 148 | * |
| 129 | * This function can safely be called if the device node has never been | 149 | * Should be called after media_devnode_unregister_prepare() |
| 130 | * registered or has already been unregistered. | ||
| 131 | */ | 150 | */ |
| 132 | void media_devnode_unregister(struct media_devnode *mdev); | 151 | void media_devnode_unregister(struct media_devnode *devnode); |
| 133 | 152 | ||
| 134 | /** | 153 | /** |
| 135 | * media_devnode_data - returns a pointer to the &media_devnode | 154 | * media_devnode_data - returns a pointer to the &media_devnode |
| @@ -145,11 +164,16 @@ static inline struct media_devnode *media_devnode_data(struct file *filp) | |||
| 145 | * media_devnode_is_registered - returns true if &media_devnode is registered; | 164 | * media_devnode_is_registered - returns true if &media_devnode is registered; |
| 146 | * false otherwise. | 165 | * false otherwise. |
| 147 | * | 166 | * |
| 148 | * @mdev: pointer to struct &media_devnode. | 167 | * @devnode: pointer to struct &media_devnode. |
| 168 | * | ||
| 169 | * Note: If mdev is NULL, it also returns false. | ||
| 149 | */ | 170 | */ |
| 150 | static inline int media_devnode_is_registered(struct media_devnode *mdev) | 171 | static inline int media_devnode_is_registered(struct media_devnode *devnode) |
| 151 | { | 172 | { |
| 152 | return test_bit(MEDIA_FLAG_REGISTERED, &mdev->flags); | 173 | if (!devnode) |
| 174 | return false; | ||
| 175 | |||
| 176 | return test_bit(MEDIA_FLAG_REGISTERED, &devnode->flags); | ||
| 153 | } | 177 | } |
| 154 | 178 | ||
| 155 | #endif /* _MEDIA_DEVNODE_H */ | 179 | #endif /* _MEDIA_DEVNODE_H */ |
