cdev: allow to open a struct cdev
cdev_open() opens a cdev by name. This introduces cdev_do_open which allows to open a cdev when the cdev is already found by other means. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
bec70b3aaa
commit
2672c906a4
|
@ -70,6 +70,14 @@ int cdev_find_free_index(const char *basename)
|
||||||
return -EBUSY; /* all indexes are used */
|
return -EBUSY; /* all indexes are used */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cdev_do_open(struct cdev *cdev, unsigned long flags)
|
||||||
|
{
|
||||||
|
if (cdev->ops->open)
|
||||||
|
return cdev->ops->open(cdev, flags);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
struct cdev *cdev_open(const char *name, unsigned long flags)
|
struct cdev *cdev_open(const char *name, unsigned long flags)
|
||||||
{
|
{
|
||||||
struct cdev *cdev = cdev_by_name(name);
|
struct cdev *cdev = cdev_by_name(name);
|
||||||
|
@ -78,11 +86,9 @@ struct cdev *cdev_open(const char *name, unsigned long flags)
|
||||||
if (!cdev)
|
if (!cdev)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (cdev->ops->open) {
|
ret = cdev_do_open(cdev, flags);
|
||||||
ret = cdev->ops->open(cdev, flags);
|
if (ret)
|
||||||
if (ret)
|
return NULL;
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return cdev;
|
return cdev;
|
||||||
}
|
}
|
||||||
|
|
|
@ -460,6 +460,7 @@ int devfs_remove(struct cdev *);
|
||||||
int cdev_find_free_index(const char *);
|
int cdev_find_free_index(const char *);
|
||||||
struct cdev *cdev_by_name(const char *filename);
|
struct cdev *cdev_by_name(const char *filename);
|
||||||
struct cdev *cdev_open(const char *name, unsigned long flags);
|
struct cdev *cdev_open(const char *name, unsigned long flags);
|
||||||
|
int cdev_do_open(struct cdev *, unsigned long flags);
|
||||||
void cdev_close(struct cdev *cdev);
|
void cdev_close(struct cdev *cdev);
|
||||||
int cdev_flush(struct cdev *cdev);
|
int cdev_flush(struct cdev *cdev);
|
||||||
ssize_t cdev_read(struct cdev *cdev, void *buf, size_t count, loff_t offset, ulong flags);
|
ssize_t cdev_read(struct cdev *cdev, void *buf, size_t count, loff_t offset, ulong flags);
|
||||||
|
|
Loading…
Reference in New Issue