mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-01 10:45:49 +00:00
media: cec: move cec_get/put_device to header
Move cec_get/put_device to the media/cec.h header. This allows CEC drivers to use this. Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
c7a2925873
commit
6bb8ef90c4
@ -580,7 +580,7 @@ static int cec_open(struct inode *inode, struct file *filp)
|
||||
fh->mode_initiator = CEC_MODE_INITIATOR;
|
||||
fh->adap = adap;
|
||||
|
||||
err = cec_get_device(devnode);
|
||||
err = cec_get_device(adap);
|
||||
if (err) {
|
||||
kfree(fh);
|
||||
return err;
|
||||
@ -686,7 +686,7 @@ static int cec_release(struct inode *inode, struct file *filp)
|
||||
mutex_unlock(&fh->lock);
|
||||
kfree(fh);
|
||||
|
||||
cec_put_device(devnode);
|
||||
cec_put_device(adap);
|
||||
filp->private_data = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
@ -51,35 +51,6 @@ static struct dentry *top_cec_dir;
|
||||
/* dev to cec_devnode */
|
||||
#define to_cec_devnode(cd) container_of(cd, struct cec_devnode, dev)
|
||||
|
||||
int cec_get_device(struct cec_devnode *devnode)
|
||||
{
|
||||
/*
|
||||
* Check if the cec device is available. This needs to be done with
|
||||
* the devnode->lock held to prevent an open/unregister race:
|
||||
* without the lock, the device could be unregistered and freed between
|
||||
* the devnode->registered check and get_device() calls, leading to
|
||||
* a crash.
|
||||
*/
|
||||
mutex_lock(&devnode->lock);
|
||||
/*
|
||||
* return ENODEV if the cec device has been removed
|
||||
* already or if it is not registered anymore.
|
||||
*/
|
||||
if (!devnode->registered) {
|
||||
mutex_unlock(&devnode->lock);
|
||||
return -ENODEV;
|
||||
}
|
||||
/* and increase the device refcount */
|
||||
get_device(&devnode->dev);
|
||||
mutex_unlock(&devnode->lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void cec_put_device(struct cec_devnode *devnode)
|
||||
{
|
||||
put_device(&devnode->dev);
|
||||
}
|
||||
|
||||
/* Called when the last user of the cec device exits. */
|
||||
static void cec_devnode_release(struct device *cd)
|
||||
{
|
||||
|
@ -37,8 +37,6 @@ static inline bool msg_is_raw(const struct cec_msg *msg)
|
||||
|
||||
/* cec-core.c */
|
||||
extern int cec_debug;
|
||||
int cec_get_device(struct cec_devnode *devnode);
|
||||
void cec_put_device(struct cec_devnode *devnode);
|
||||
|
||||
/* cec-adap.c */
|
||||
int cec_monitor_all_cnt_inc(struct cec_adapter *adap);
|
||||
|
@ -298,6 +298,37 @@ struct cec_adapter {
|
||||
char input_phys[40];
|
||||
};
|
||||
|
||||
static inline int cec_get_device(struct cec_adapter *adap)
|
||||
{
|
||||
struct cec_devnode *devnode = &adap->devnode;
|
||||
|
||||
/*
|
||||
* Check if the cec device is available. This needs to be done with
|
||||
* the devnode->lock held to prevent an open/unregister race:
|
||||
* without the lock, the device could be unregistered and freed between
|
||||
* the devnode->registered check and get_device() calls, leading to
|
||||
* a crash.
|
||||
*/
|
||||
mutex_lock(&devnode->lock);
|
||||
/*
|
||||
* return ENODEV if the cec device has been removed
|
||||
* already or if it is not registered anymore.
|
||||
*/
|
||||
if (!devnode->registered) {
|
||||
mutex_unlock(&devnode->lock);
|
||||
return -ENODEV;
|
||||
}
|
||||
/* and increase the device refcount */
|
||||
get_device(&devnode->dev);
|
||||
mutex_unlock(&devnode->lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void cec_put_device(struct cec_adapter *adap)
|
||||
{
|
||||
put_device(&adap->devnode.dev);
|
||||
}
|
||||
|
||||
static inline void *cec_get_drvdata(const struct cec_adapter *adap)
|
||||
{
|
||||
return adap->priv;
|
||||
|
Loading…
Reference in New Issue
Block a user