mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 22:14:03 +02:00
media: drivers/media/dvb-core: Split dvb_frontend_open()
Move the actual opening to its own function. Not intended code change. This is a preparation for the next patch. Signed-off-by: Ricardo Ribalda <ribalda@chromium.org> Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
parent
5b8af852cd
commit
e8123c85a6
|
|
@ -2760,77 +2760,25 @@ static __poll_t dvb_frontend_poll(struct file *file, struct poll_table_struct *w
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int dvb_frontend_open(struct inode *inode, struct file *file)
|
||||
static int __dvb_frontend_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct dvb_device *dvbdev = file->private_data;
|
||||
struct dvb_frontend *fe = dvbdev->priv;
|
||||
struct dvb_frontend_private *fepriv = fe->frontend_priv;
|
||||
struct dvb_adapter *adapter = fe->dvb;
|
||||
int ret;
|
||||
|
||||
dev_dbg(fe->dvb->device, "%s:\n", __func__);
|
||||
if (fe->exit == DVB_FE_DEVICE_REMOVED)
|
||||
return -ENODEV;
|
||||
|
||||
if (adapter->mfe_shared == 2) {
|
||||
mutex_lock(&adapter->mfe_lock);
|
||||
if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
|
||||
if (adapter->mfe_dvbdev &&
|
||||
!adapter->mfe_dvbdev->writers) {
|
||||
mutex_unlock(&adapter->mfe_lock);
|
||||
return -EBUSY;
|
||||
}
|
||||
adapter->mfe_dvbdev = dvbdev;
|
||||
}
|
||||
} else if (adapter->mfe_shared) {
|
||||
mutex_lock(&adapter->mfe_lock);
|
||||
|
||||
if (!adapter->mfe_dvbdev)
|
||||
adapter->mfe_dvbdev = dvbdev;
|
||||
|
||||
else if (adapter->mfe_dvbdev != dvbdev) {
|
||||
struct dvb_device
|
||||
*mfedev = adapter->mfe_dvbdev;
|
||||
struct dvb_frontend
|
||||
*mfe = mfedev->priv;
|
||||
struct dvb_frontend_private
|
||||
*mfepriv = mfe->frontend_priv;
|
||||
int mferetry = (dvb_mfe_wait_time << 1);
|
||||
|
||||
mutex_unlock(&adapter->mfe_lock);
|
||||
while (mferetry-- && (mfedev->users != -1 ||
|
||||
mfepriv->thread)) {
|
||||
if (msleep_interruptible(500)) {
|
||||
if (signal_pending(current))
|
||||
return -EINTR;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_lock(&adapter->mfe_lock);
|
||||
if (adapter->mfe_dvbdev != dvbdev) {
|
||||
mfedev = adapter->mfe_dvbdev;
|
||||
mfe = mfedev->priv;
|
||||
mfepriv = mfe->frontend_priv;
|
||||
if (mfedev->users != -1 ||
|
||||
mfepriv->thread) {
|
||||
mutex_unlock(&adapter->mfe_lock);
|
||||
return -EBUSY;
|
||||
}
|
||||
adapter->mfe_dvbdev = dvbdev;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (dvbdev->users == -1 && fe->ops.ts_bus_ctrl) {
|
||||
if ((ret = fe->ops.ts_bus_ctrl(fe, 1)) < 0)
|
||||
goto err0;
|
||||
return ret;
|
||||
|
||||
/* If we took control of the bus, we need to force
|
||||
reinitialization. This is because many ts_bus_ctrl()
|
||||
functions strobe the RESET pin on the demod, and if the
|
||||
frontend thread already exists then the dvb_init() routine
|
||||
won't get called (which is what usually does initial
|
||||
register configuration). */
|
||||
/*
|
||||
* If we took control of the bus, we need to force
|
||||
* reinitialization. This is because many ts_bus_ctrl()
|
||||
* functions strobe the RESET pin on the demod, and if the
|
||||
* frontend thread already exists then the dvb_init() routine
|
||||
* won't get called (which is what usually does initial
|
||||
* register configuration).
|
||||
*/
|
||||
fepriv->reinitialise = 1;
|
||||
}
|
||||
|
||||
|
|
@ -2871,8 +2819,6 @@ static int dvb_frontend_open(struct inode *inode, struct file *file)
|
|||
|
||||
dvb_frontend_get(fe);
|
||||
|
||||
if (adapter->mfe_shared)
|
||||
mutex_unlock(&adapter->mfe_lock);
|
||||
return ret;
|
||||
|
||||
err3:
|
||||
|
|
@ -2891,9 +2837,75 @@ static int dvb_frontend_open(struct inode *inode, struct file *file)
|
|||
err1:
|
||||
if (dvbdev->users == -1 && fe->ops.ts_bus_ctrl)
|
||||
fe->ops.ts_bus_ctrl(fe, 0);
|
||||
err0:
|
||||
if (adapter->mfe_shared)
|
||||
mutex_unlock(&adapter->mfe_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int dvb_frontend_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct dvb_device *dvbdev = file->private_data;
|
||||
struct dvb_frontend *fe = dvbdev->priv;
|
||||
struct dvb_adapter *adapter = fe->dvb;
|
||||
int ret;
|
||||
|
||||
dev_dbg(fe->dvb->device, "%s:\n", __func__);
|
||||
if (fe->exit == DVB_FE_DEVICE_REMOVED)
|
||||
return -ENODEV;
|
||||
|
||||
if (!adapter->mfe_shared)
|
||||
return __dvb_frontend_open(inode, file);
|
||||
|
||||
if (adapter->mfe_shared == 2) {
|
||||
mutex_lock(&adapter->mfe_lock);
|
||||
if ((file->f_flags & O_ACCMODE) != O_RDONLY) {
|
||||
if (adapter->mfe_dvbdev &&
|
||||
!adapter->mfe_dvbdev->writers) {
|
||||
mutex_unlock(&adapter->mfe_lock);
|
||||
return -EBUSY;
|
||||
}
|
||||
adapter->mfe_dvbdev = dvbdev;
|
||||
}
|
||||
} else {
|
||||
mutex_lock(&adapter->mfe_lock);
|
||||
|
||||
if (!adapter->mfe_dvbdev) {
|
||||
adapter->mfe_dvbdev = dvbdev;
|
||||
} else if (adapter->mfe_dvbdev != dvbdev) {
|
||||
struct dvb_device
|
||||
*mfedev = adapter->mfe_dvbdev;
|
||||
struct dvb_frontend
|
||||
*mfe = mfedev->priv;
|
||||
struct dvb_frontend_private
|
||||
*mfepriv = mfe->frontend_priv;
|
||||
int mferetry = (dvb_mfe_wait_time << 1);
|
||||
|
||||
mutex_unlock(&adapter->mfe_lock);
|
||||
while (mferetry-- && (mfedev->users != -1 ||
|
||||
mfepriv->thread)) {
|
||||
if (msleep_interruptible(500)) {
|
||||
if (signal_pending(current))
|
||||
return -EINTR;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_lock(&adapter->mfe_lock);
|
||||
if (adapter->mfe_dvbdev != dvbdev) {
|
||||
mfedev = adapter->mfe_dvbdev;
|
||||
mfe = mfedev->priv;
|
||||
mfepriv = mfe->frontend_priv;
|
||||
if (mfedev->users != -1 ||
|
||||
mfepriv->thread) {
|
||||
mutex_unlock(&adapter->mfe_lock);
|
||||
return -EBUSY;
|
||||
}
|
||||
adapter->mfe_dvbdev = dvbdev;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ret = __dvb_frontend_open(inode, file);
|
||||
mutex_unlock(&adapter->mfe_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user