Skip to contentSkip to conversation

tea575x: allow multiple opens

PATCH Superseded Ondrej Zary 3 participants 5 messages Jun 11, 2011 – Jun 12, 2011

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 tea575x: allow multiple opens

Change locking to allow tea575x-radio device to be opened multiple times.

include/sound/tea575x-tuner.h +1 -1
@@ -49,7 +49,7 @@ struct snd_tea575x {
 	bool tuned;			/* tuned to a station */
 	unsigned int val;		/* hw value */
 	unsigned long freq;		/* frequency */
-	unsigned long in_use;		/* set if the device is in use */
+	struct mutex mutex;
 	struct snd_tea575x_ops *ops;
 	void *private_data;
 	u8 card[32];
sound/i2c/other/tea575x-tuner.c +3 -19
@@ -282,26 +282,9 @@ static int vidioc_s_input(struct file *f
 	return 0;
 }
 
-static int snd_tea575x_exclusive_open(struct file *file)
-{
-	struct snd_tea575x *tea = video_drvdata(file);
-
-	return test_and_set_bit(0, &tea->in_use) ? -EBUSY : 0;
-}
-
-static int snd_tea575x_exclusive_release(struct file *file)
-{
-	struct snd_tea575x *tea = video_drvdata(file);
-
-	clear_bit(0, &tea->in_use);
-	return 0;
-}
-
 static const struct v4l2_file_operations tea575x_fops = {
 	.owner		= THIS_MODULE,
-	.open           = snd_tea575x_exclusive_open,
-	.release        = snd_tea575x_exclusive_release,
-	.ioctl		= video_ioctl2,
+	.unlocked_ioctl	= video_ioctl2,
 };
 
 static const struct v4l2_ioctl_ops tea575x_ioctl_ops = {
@@ -340,13 +323,14 @@ int snd_tea575x_init(struct snd_tea575x
 	if (snd_tea575x_read(tea) != 0x55AA)
 		return -ENODEV;
 
-	tea->in_use = 0;
 	tea->val = TEA575X_BIT_BAND_FM | TEA575X_BIT_SEARCH_10_40;
 	tea->freq = 90500 * 16;		/* 90.5Mhz default */
 	snd_tea575x_set_freq(tea);
 
 	tea->vd = tea575x_radio;
 	video_set_drvdata(&tea->vd, tea);
+	mutex_init(&tea->mutex);
+	tea->vd.lock = &tea->mutex;
 
 	v4l2_ctrl_handler_init(&tea->ctrl_handler, 1);
 	tea->vd.ctrl_handler = &tea->ctrl_handler;
Signature · 1 line
Ondrej Zary
#1 lore raw
Quoted 1 line · On Saturday, June 11, 2011 15:28:59 Ondrej Zary wrote:

Change locking to allow tea575x-radio device to be opened multiple times.

Very nice!

Regards,

Hans

Quoted 62 lines
include/sound/tea575x-tuner.h +1 -1
@@ -49,7 +49,7 @@ struct snd_tea575x {
 	bool tuned;			/* tuned to a station */
 	unsigned int val;		/* hw value */
 	unsigned long freq;		/* frequency */
-	unsigned long in_use;		/* set if the device is in use */
+	struct mutex mutex;
 	struct snd_tea575x_ops *ops;
 	void *private_data;
 	u8 card[32];
sound/i2c/other/tea575x-tuner.c +3 -19
@@ -282,26 +282,9 @@ static int vidioc_s_input(struct file *f
 	return 0;
 }
 
-static int snd_tea575x_exclusive_open(struct file *file)
-{
-	struct snd_tea575x *tea = video_drvdata(file);
-
-	return test_and_set_bit(0, &tea->in_use) ? -EBUSY : 0;
-}
-
-static int snd_tea575x_exclusive_release(struct file *file)
-{
-	struct snd_tea575x *tea = video_drvdata(file);
-
-	clear_bit(0, &tea->in_use);
-	return 0;
-}
-
 static const struct v4l2_file_operations tea575x_fops = {
 	.owner		= THIS_MODULE,
-	.open           = snd_tea575x_exclusive_open,
-	.release        = snd_tea575x_exclusive_release,
-	.ioctl		= video_ioctl2,
+	.unlocked_ioctl	= video_ioctl2,
 };
 
 static const struct v4l2_ioctl_ops tea575x_ioctl_ops = {
@@ -340,13 +323,14 @@ int snd_tea575x_init(struct snd_tea575x
 	if (snd_tea575x_read(tea) != 0x55AA)
 		return -ENODEV;
 
-	tea->in_use = 0;
 	tea->val = TEA575X_BIT_BAND_FM | TEA575X_BIT_SEARCH_10_40;
 	tea->freq = 90500 * 16;		/* 90.5Mhz default */
 	snd_tea575x_set_freq(tea);
 
 	tea->vd = tea575x_radio;
 	video_set_drvdata(&tea->vd, tea);
+	mutex_init(&tea->mutex);
+	tea->vd.lock = &tea->mutex;
 
 	v4l2_ctrl_handler_init(&tea->ctrl_handler, 1);
 	tea->vd.ctrl_handler = &tea->ctrl_handler;
#2 lore raw

At Sat, 11 Jun 2011 15:36:39 +0200,

Quoted 7 lines · Hans Verkuil
Quoted 1 line · On Saturday, June 11, 2011 15:28:59 Ondrej Zary wrote:

Change locking to allow tea575x-radio device to be opened multiple times.

Very nice!

Hans, would you apply this and another one via v4l tree or shall I apply them via sound tree?

Takashi

Quoted 72 lines

Regards,

Hans

Quoted 52 lines
include/sound/tea575x-tuner.h +1 -1
@@ -49,7 +49,7 @@ struct snd_tea575x {
 	bool tuned;			/* tuned to a station */
 	unsigned int val;		/* hw value */
 	unsigned long freq;		/* frequency */
-	unsigned long in_use;		/* set if the device is in use */
+	struct mutex mutex;
 	struct snd_tea575x_ops *ops;
 	void *private_data;
 	u8 card[32];
sound/i2c/other/tea575x-tuner.c +1 -19
@@ -282,26 +282,9 @@ static int vidioc_s_input(struct file *f
 	return 0;
 }
 
-static int snd_tea575x_exclusive_open(struct file *file)
-{
-	struct snd_tea575x *tea = video_drvdata(file);
-
-	return test_and_set_bit(0, &tea->in_use) ? -EBUSY : 0;
-}
-
-static int snd_tea575x_exclusive_release(struct file *file)
-{
-	struct snd_tea575x *tea = video_drvdata(file);
-
-	clear_bit(0, &tea->in_use);
-	return 0;
-}
-
 static const struct v4l2_file_operations tea575x_fops = {
 	.owner		= THIS_MODULE,
-	.open           = snd_tea575x_exclusive_open,
-	.release        = snd_tea575x_exclusive_release,
-	.ioctl		= video_ioctl2,
+	.unlocked_ioctl	= video_ioctl2,
 };
 
 static const struct v4l2_ioctl_ops tea575x_ioctl_ops = {
@@ -340,13 +323,14 @@ int snd_tea575x_init(struct snd_tea575x
 	if (snd_tea575x_read(tea) != 0x55AA)
 		return -ENODEV;
 
-	tea->in_use = 0;
 	tea->val = TEA575X_BIT_BAND_FM | TEA575X_BIT_SEARCH_10_40;

sound/i2c/other/tea575x-tuner.c int snd_tea575x_init(struct snd_tea575x · line 336

Quoted 10 lines
sound/i2c/other/tea575x-tuner.c +2 -0
 	tea->freq = 90500 * 16;		/* 90.5Mhz default */
 	snd_tea575x_set_freq(tea);
 
 	tea->vd = tea575x_radio;
 	video_set_drvdata(&tea->vd, tea);
+	mutex_init(&tea->mutex);
+	tea->vd.lock = &tea->mutex;
 
 	v4l2_ctrl_handler_init(&tea->ctrl_handler, 1);
 	tea->vd.ctrl_handler = &tea->ctrl_handler;

_______________________________________________
Alsa-devel mailing list
[email protected]
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

#3 lore raw
Quoted 4 lines · On Sunday, June 12, 2011 18:52:56 Takashi Iwai wrote:

At Sat, 11 Jun 2011 15:36:39 +0200,

Quoted 2 lines · Hans Verkuil

On Saturday, June 11, 2011 15:28:59 Ondrej Zary wrote:

Quoted 8 lines
Quoted 5 lines
Quoted 1 line

Change locking to allow tea575x-radio device to be opened multiple times.

Very nice!

Hans, would you apply this and another one via v4l tree or shall I apply them via sound tree?

This is all V4L related, so I think Mauro can apply this patch and the other patch for v3.1. No need to go through an intermediate tree of mine.

Regards,

Hans

Quoted 77 lines

Takashi

Quoted 72 lines

Regards,

Hans

Quoted 52 lines
include/sound/tea575x-tuner.h +1 -1
@@ -49,7 +49,7 @@ struct snd_tea575x {
 	bool tuned;			/* tuned to a station */
 	unsigned int val;		/* hw value */
 	unsigned long freq;		/* frequency */
-	unsigned long in_use;		/* set if the device is in use */
+	struct mutex mutex;
 	struct snd_tea575x_ops *ops;
 	void *private_data;
 	u8 card[32];
sound/i2c/other/tea575x-tuner.c +1 -19
@@ -282,26 +282,9 @@ static int vidioc_s_input(struct file *f
 	return 0;
 }
 
-static int snd_tea575x_exclusive_open(struct file *file)
-{
-	struct snd_tea575x *tea = video_drvdata(file);
-
-	return test_and_set_bit(0, &tea->in_use) ? -EBUSY : 0;
-}
-
-static int snd_tea575x_exclusive_release(struct file *file)
-{
-	struct snd_tea575x *tea = video_drvdata(file);
-
-	clear_bit(0, &tea->in_use);
-	return 0;
-}
-
 static const struct v4l2_file_operations tea575x_fops = {
 	.owner		= THIS_MODULE,
-	.open           = snd_tea575x_exclusive_open,
-	.release        = snd_tea575x_exclusive_release,
-	.ioctl		= video_ioctl2,
+	.unlocked_ioctl	= video_ioctl2,
 };
 
 static const struct v4l2_ioctl_ops tea575x_ioctl_ops = {
@@ -340,13 +323,14 @@ int snd_tea575x_init(struct snd_tea575x
 	if (snd_tea575x_read(tea) != 0x55AA)
 		return -ENODEV;
 
-	tea->in_use = 0;
 	tea->val = TEA575X_BIT_BAND_FM | TEA575X_BIT_SEARCH_10_40;

sound/i2c/other/tea575x-tuner.c int snd_tea575x_init(struct snd_tea575x · line 336

Quoted 10 lines
sound/i2c/other/tea575x-tuner.c +2 -0
 	tea->freq = 90500 * 16;		/* 90.5Mhz default */
 	snd_tea575x_set_freq(tea);
 
 	tea->vd = tea575x_radio;
 	video_set_drvdata(&tea->vd, tea);
+	mutex_init(&tea->mutex);
+	tea->vd.lock = &tea->mutex;
 
 	v4l2_ctrl_handler_init(&tea->ctrl_handler, 1);
 	tea->vd.ctrl_handler = &tea->ctrl_handler;

_______________________________________________
Alsa-devel mailing list
[email protected]
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

#4 lore raw

At Sun, 12 Jun 2011 19:48:47 +0200,

Quoted 10 lines · Hans Verkuil
Quoted 8 lines · On Sunday, June 12, 2011 18:52:56 Takashi Iwai wrote:

At Sat, 11 Jun 2011 15:36:39 +0200,

Quoted 6 lines · Hans Verkuil
Quoted 1 line · On Saturday, June 11, 2011 15:28:59 Ondrej Zary wrote:

Change locking to allow tea575x-radio device to be opened multiple times.

Very nice!

Quoted 7 lines
Quoted 4 lines
Quoted 1 line

Hans, would you apply this and another one via v4l tree or shall I apply them via sound tree?

This is all V4L related, so I think Mauro can apply this patch and the other patch for v3.1. No need to go through an intermediate tree of mine.

OK, good to know my work is shortened :)

thanks,

Takashi

Quoted 83 lines

Regards,

Hans

Quoted 77 lines

Takashi

Quoted 72 lines

Regards,

Hans

Quoted 52 lines
include/sound/tea575x-tuner.h +1 -1
@@ -49,7 +49,7 @@ struct snd_tea575x {
 	bool tuned;			/* tuned to a station */
 	unsigned int val;		/* hw value */
 	unsigned long freq;		/* frequency */
-	unsigned long in_use;		/* set if the device is in use */
+	struct mutex mutex;
 	struct snd_tea575x_ops *ops;
 	void *private_data;
 	u8 card[32];
sound/i2c/other/tea575x-tuner.c +1 -19
@@ -282,26 +282,9 @@ static int vidioc_s_input(struct file *f
 	return 0;
 }
 
-static int snd_tea575x_exclusive_open(struct file *file)
-{
-	struct snd_tea575x *tea = video_drvdata(file);
-
-	return test_and_set_bit(0, &tea->in_use) ? -EBUSY : 0;
-}
-
-static int snd_tea575x_exclusive_release(struct file *file)
-{
-	struct snd_tea575x *tea = video_drvdata(file);
-
-	clear_bit(0, &tea->in_use);
-	return 0;
-}
-
 static const struct v4l2_file_operations tea575x_fops = {
 	.owner		= THIS_MODULE,
-	.open           = snd_tea575x_exclusive_open,
-	.release        = snd_tea575x_exclusive_release,
-	.ioctl		= video_ioctl2,
+	.unlocked_ioctl	= video_ioctl2,
 };
 
 static const struct v4l2_ioctl_ops tea575x_ioctl_ops = {
@@ -340,13 +323,14 @@ int snd_tea575x_init(struct snd_tea575x
 	if (snd_tea575x_read(tea) != 0x55AA)
 		return -ENODEV;
 
-	tea->in_use = 0;
 	tea->val = TEA575X_BIT_BAND_FM | TEA575X_BIT_SEARCH_10_40;

sound/i2c/other/tea575x-tuner.c int snd_tea575x_init(struct snd_tea575x · line 336

Quoted 10 lines
sound/i2c/other/tea575x-tuner.c +2 -0
 	tea->freq = 90500 * 16;		/* 90.5Mhz default */
 	snd_tea575x_set_freq(tea);
 
 	tea->vd = tea575x_radio;
 	video_set_drvdata(&tea->vd, tea);
+	mutex_init(&tea->mutex);
+	tea->vd.lock = &tea->mutex;
 
 	v4l2_ctrl_handler_init(&tea->ctrl_handler, 1);
 	tea->vd.ctrl_handler = &tea->ctrl_handler;

_______________________________________________
Alsa-devel mailing list
[email protected]
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel