diff options
Diffstat (limited to 'drivers/media/video/saa5246a.c')
-rw-r--r-- | drivers/media/video/saa5246a.c | 30 |
1 files changed, 8 insertions, 22 deletions
diff --git a/drivers/media/video/saa5246a.c b/drivers/media/video/saa5246a.c index e2c538ee88f2..5f5aa2063e0e 100644 --- a/drivers/media/video/saa5246a.c +++ b/drivers/media/video/saa5246a.c | |||
@@ -61,6 +61,7 @@ struct saa5246a_device | |||
61 | u8 pgbuf[NUM_DAUS][VTX_VIRTUALSIZE]; | 61 | u8 pgbuf[NUM_DAUS][VTX_VIRTUALSIZE]; |
62 | int is_searching[NUM_DAUS]; | 62 | int is_searching[NUM_DAUS]; |
63 | struct i2c_client *client; | 63 | struct i2c_client *client; |
64 | unsigned long in_use; | ||
64 | struct mutex lock; | 65 | struct mutex lock; |
65 | }; | 66 | }; |
66 | 67 | ||
@@ -736,22 +737,14 @@ static int saa5246a_open(struct inode *inode, struct file *file) | |||
736 | { | 737 | { |
737 | struct video_device *vd = video_devdata(file); | 738 | struct video_device *vd = video_devdata(file); |
738 | struct saa5246a_device *t = vd->priv; | 739 | struct saa5246a_device *t = vd->priv; |
739 | int err; | ||
740 | 740 | ||
741 | lock_kernel(); | 741 | if (t->client == NULL) |
742 | err = video_exclusive_open(inode,file); | 742 | return -ENODEV; |
743 | if (err < 0) { | ||
744 | unlock_kernel(); | ||
745 | return err; | ||
746 | } | ||
747 | 743 | ||
748 | if (t->client==NULL) { | 744 | if (test_and_set_bit(0, &t->in_use)) |
749 | err = -ENODEV; | 745 | return -EBUSY; |
750 | goto fail; | ||
751 | } | ||
752 | 746 | ||
753 | if (i2c_senddata(t, SAA5246A_REGISTER_R0, | 747 | if (i2c_senddata(t, SAA5246A_REGISTER_R0, |
754 | |||
755 | R0_SELECT_R11 | | 748 | R0_SELECT_R11 | |
756 | R0_PLL_TIME_CONSTANT_LONG | | 749 | R0_PLL_TIME_CONSTANT_LONG | |
757 | R0_ENABLE_nODD_EVEN_OUTPUT | | 750 | R0_ENABLE_nODD_EVEN_OUTPUT | |
@@ -777,17 +770,10 @@ static int saa5246a_open(struct inode *inode, struct file *file) | |||
777 | 770 | ||
778 | COMMAND_END)) | 771 | COMMAND_END)) |
779 | { | 772 | { |
780 | err = -EIO; | 773 | clear_bit(0, &t->in_use); |
781 | goto fail; | 774 | return -EIO; |
782 | } | 775 | } |
783 | unlock_kernel(); | ||
784 | |||
785 | return 0; | 776 | return 0; |
786 | |||
787 | fail: | ||
788 | video_exclusive_release(inode,file); | ||
789 | unlock_kernel(); | ||
790 | return err; | ||
791 | } | 777 | } |
792 | 778 | ||
793 | static int saa5246a_release(struct inode *inode, struct file *file) | 779 | static int saa5246a_release(struct inode *inode, struct file *file) |
@@ -806,7 +792,7 @@ static int saa5246a_release(struct inode *inode, struct file *file) | |||
806 | R1_VCS_TO_SCS, | 792 | R1_VCS_TO_SCS, |
807 | 793 | ||
808 | COMMAND_END); | 794 | COMMAND_END); |
809 | video_exclusive_release(inode,file); | 795 | clear_bit(0, &t->in_use); |
810 | return 0; | 796 | return 0; |
811 | } | 797 | } |
812 | 798 | ||