aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/bttv-driver.c60
-rw-r--r--drivers/media/video/bttvp.h5
2 files changed, 33 insertions, 32 deletions
diff --git a/drivers/media/video/bttv-driver.c b/drivers/media/video/bttv-driver.c
index 1c6cfe954548..aa4c4c521880 100644
--- a/drivers/media/video/bttv-driver.c
+++ b/drivers/media/video/bttv-driver.c
@@ -684,16 +684,16 @@ int check_alloc_btres(struct bttv *btv, struct bttv_fh *fh, int bit)
684 return 1; 684 return 1;
685 685
686 /* is it free? */ 686 /* is it free? */
687 down(&btv->reslock); 687 mutex_lock(&btv->reslock);
688 if (btv->resources & bit) { 688 if (btv->resources & bit) {
689 /* no, someone else uses it */ 689 /* no, someone else uses it */
690 up(&btv->reslock); 690 mutex_unlock(&btv->reslock);
691 return 0; 691 return 0;
692 } 692 }
693 /* it's free, grab it */ 693 /* it's free, grab it */
694 fh->resources |= bit; 694 fh->resources |= bit;
695 btv->resources |= bit; 695 btv->resources |= bit;
696 up(&btv->reslock); 696 mutex_unlock(&btv->reslock);
697 return 1; 697 return 1;
698} 698}
699 699
@@ -716,10 +716,10 @@ void free_btres(struct bttv *btv, struct bttv_fh *fh, int bits)
716 /* trying to free ressources not allocated by us ... */ 716 /* trying to free ressources not allocated by us ... */
717 printk("bttv: BUG! (btres)\n"); 717 printk("bttv: BUG! (btres)\n");
718 } 718 }
719 down(&btv->reslock); 719 mutex_lock(&btv->reslock);
720 fh->resources &= ~bits; 720 fh->resources &= ~bits;
721 btv->resources &= ~bits; 721 btv->resources &= ~bits;
722 up(&btv->reslock); 722 mutex_unlock(&btv->reslock);
723} 723}
724 724
725/* ----------------------------------------------------------------------- */ 725/* ----------------------------------------------------------------------- */
@@ -1536,12 +1536,12 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1536 case VIDIOCSFREQ: 1536 case VIDIOCSFREQ:
1537 { 1537 {
1538 unsigned long *freq = arg; 1538 unsigned long *freq = arg;
1539 down(&btv->lock); 1539 mutex_lock(&btv->lock);
1540 btv->freq=*freq; 1540 btv->freq=*freq;
1541 bttv_call_i2c_clients(btv,VIDIOCSFREQ,freq); 1541 bttv_call_i2c_clients(btv,VIDIOCSFREQ,freq);
1542 if (btv->has_matchbox && btv->radio_user) 1542 if (btv->has_matchbox && btv->radio_user)
1543 tea5757_set_freq(btv,*freq); 1543 tea5757_set_freq(btv,*freq);
1544 up(&btv->lock); 1544 mutex_unlock(&btv->lock);
1545 return 0; 1545 return 0;
1546 } 1546 }
1547 1547
@@ -1571,10 +1571,10 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1571 if (v->mode >= BTTV_TVNORMS) 1571 if (v->mode >= BTTV_TVNORMS)
1572 return -EINVAL; 1572 return -EINVAL;
1573 1573
1574 down(&btv->lock); 1574 mutex_lock(&btv->lock);
1575 set_tvnorm(btv,v->mode); 1575 set_tvnorm(btv,v->mode);
1576 bttv_call_i2c_clients(btv,cmd,v); 1576 bttv_call_i2c_clients(btv,cmd,v);
1577 up(&btv->lock); 1577 mutex_unlock(&btv->lock);
1578 return 0; 1578 return 0;
1579 } 1579 }
1580 1580
@@ -1611,17 +1611,17 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1611 if (v->norm >= BTTV_TVNORMS) 1611 if (v->norm >= BTTV_TVNORMS)
1612 return -EINVAL; 1612 return -EINVAL;
1613 1613
1614 down(&btv->lock); 1614 mutex_lock(&btv->lock);
1615 if (channel == btv->input && 1615 if (channel == btv->input &&
1616 v->norm == btv->tvnorm) { 1616 v->norm == btv->tvnorm) {
1617 /* nothing to do */ 1617 /* nothing to do */
1618 up(&btv->lock); 1618 mutex_unlock(&btv->lock);
1619 return 0; 1619 return 0;
1620 } 1620 }
1621 1621
1622 btv->tvnorm = v->norm; 1622 btv->tvnorm = v->norm;
1623 set_input(btv,v->channel); 1623 set_input(btv,v->channel);
1624 up(&btv->lock); 1624 mutex_unlock(&btv->lock);
1625 return 0; 1625 return 0;
1626 } 1626 }
1627 1627
@@ -1634,14 +1634,14 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1634 v->flags |= VIDEO_AUDIO_MUTABLE; 1634 v->flags |= VIDEO_AUDIO_MUTABLE;
1635 v->mode = VIDEO_SOUND_MONO; 1635 v->mode = VIDEO_SOUND_MONO;
1636 1636
1637 down(&btv->lock); 1637 mutex_lock(&btv->lock);
1638 bttv_call_i2c_clients(btv,cmd,v); 1638 bttv_call_i2c_clients(btv,cmd,v);
1639 1639
1640 /* card specific hooks */ 1640 /* card specific hooks */
1641 if (btv->audio_hook) 1641 if (btv->audio_hook)
1642 btv->audio_hook(btv,v,0); 1642 btv->audio_hook(btv,v,0);
1643 1643
1644 up(&btv->lock); 1644 mutex_unlock(&btv->lock);
1645 return 0; 1645 return 0;
1646 } 1646 }
1647 case VIDIOCSAUDIO: 1647 case VIDIOCSAUDIO:
@@ -1652,7 +1652,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1652 if (audio >= bttv_tvcards[btv->c.type].audio_inputs) 1652 if (audio >= bttv_tvcards[btv->c.type].audio_inputs)
1653 return -EINVAL; 1653 return -EINVAL;
1654 1654
1655 down(&btv->lock); 1655 mutex_lock(&btv->lock);
1656 audio_mux(btv, (v->flags&VIDEO_AUDIO_MUTE) ? AUDIO_MUTE : AUDIO_UNMUTE); 1656 audio_mux(btv, (v->flags&VIDEO_AUDIO_MUTE) ? AUDIO_MUTE : AUDIO_UNMUTE);
1657 bttv_call_i2c_clients(btv,cmd,v); 1657 bttv_call_i2c_clients(btv,cmd,v);
1658 1658
@@ -1660,7 +1660,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1660 if (btv->audio_hook) 1660 if (btv->audio_hook)
1661 btv->audio_hook(btv,v,1); 1661 btv->audio_hook(btv,v,1);
1662 1662
1663 up(&btv->lock); 1663 mutex_unlock(&btv->lock);
1664 return 0; 1664 return 0;
1665 } 1665 }
1666 1666
@@ -1694,10 +1694,10 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1694 if (i == BTTV_TVNORMS) 1694 if (i == BTTV_TVNORMS)
1695 return -EINVAL; 1695 return -EINVAL;
1696 1696
1697 down(&btv->lock); 1697 mutex_lock(&btv->lock);
1698 set_tvnorm(btv,i); 1698 set_tvnorm(btv,i);
1699 i2c_vidiocschan(btv); 1699 i2c_vidiocschan(btv);
1700 up(&btv->lock); 1700 mutex_unlock(&btv->lock);
1701 return 0; 1701 return 0;
1702 } 1702 }
1703 case VIDIOC_QUERYSTD: 1703 case VIDIOC_QUERYSTD:
@@ -1755,9 +1755,9 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1755 1755
1756 if (*i > bttv_tvcards[btv->c.type].video_inputs) 1756 if (*i > bttv_tvcards[btv->c.type].video_inputs)
1757 return -EINVAL; 1757 return -EINVAL;
1758 down(&btv->lock); 1758 mutex_lock(&btv->lock);
1759 set_input(btv,*i); 1759 set_input(btv,*i);
1760 up(&btv->lock); 1760 mutex_unlock(&btv->lock);
1761 return 0; 1761 return 0;
1762 } 1762 }
1763 1763
@@ -1769,7 +1769,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1769 return -EINVAL; 1769 return -EINVAL;
1770 if (0 != t->index) 1770 if (0 != t->index)
1771 return -EINVAL; 1771 return -EINVAL;
1772 down(&btv->lock); 1772 mutex_lock(&btv->lock);
1773 memset(t,0,sizeof(*t)); 1773 memset(t,0,sizeof(*t));
1774 strcpy(t->name, "Television"); 1774 strcpy(t->name, "Television");
1775 t->type = V4L2_TUNER_ANALOG_TV; 1775 t->type = V4L2_TUNER_ANALOG_TV;
@@ -1804,7 +1804,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1804 } 1804 }
1805 } 1805 }
1806 /* FIXME: fill capability+audmode */ 1806 /* FIXME: fill capability+audmode */
1807 up(&btv->lock); 1807 mutex_unlock(&btv->lock);
1808 return 0; 1808 return 0;
1809 } 1809 }
1810 case VIDIOC_S_TUNER: 1810 case VIDIOC_S_TUNER:
@@ -1815,7 +1815,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1815 return -EINVAL; 1815 return -EINVAL;
1816 if (0 != t->index) 1816 if (0 != t->index)
1817 return -EINVAL; 1817 return -EINVAL;
1818 down(&btv->lock); 1818 mutex_lock(&btv->lock);
1819 { 1819 {
1820 struct video_audio va; 1820 struct video_audio va;
1821 memset(&va, 0, sizeof(struct video_audio)); 1821 memset(&va, 0, sizeof(struct video_audio));
@@ -1832,7 +1832,7 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1832 if (btv->audio_hook) 1832 if (btv->audio_hook)
1833 btv->audio_hook(btv,&va,1); 1833 btv->audio_hook(btv,&va,1);
1834 } 1834 }
1835 up(&btv->lock); 1835 mutex_unlock(&btv->lock);
1836 return 0; 1836 return 0;
1837 } 1837 }
1838 1838
@@ -1853,12 +1853,12 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
1853 return -EINVAL; 1853 return -EINVAL;
1854 if (unlikely (f->type != V4L2_TUNER_ANALOG_TV)) 1854 if (unlikely (f->type != V4L2_TUNER_ANALOG_TV))
1855 return -EINVAL; 1855 return -EINVAL;
1856 down(&btv->lock); 1856 mutex_lock(&btv->lock);
1857 btv->freq = f->frequency; 1857 btv->freq = f->frequency;
1858 bttv_call_i2c_clients(btv,VIDIOCSFREQ,&btv->freq); 1858 bttv_call_i2c_clients(btv,VIDIOCSFREQ,&btv->freq);
1859 if (btv->has_matchbox && btv->radio_user) 1859 if (btv->has_matchbox && btv->radio_user)
1860 tea5757_set_freq(btv,btv->freq); 1860 tea5757_set_freq(btv,btv->freq);
1861 up(&btv->lock); 1861 mutex_unlock(&btv->lock);
1862 return 0; 1862 return 0;
1863 } 1863 }
1864 case VIDIOC_LOG_STATUS: 1864 case VIDIOC_LOG_STATUS:
@@ -3156,7 +3156,7 @@ static int radio_open(struct inode *inode, struct file *file)
3156 return -ENODEV; 3156 return -ENODEV;
3157 3157
3158 dprintk("bttv%d: open called (radio)\n",btv->c.nr); 3158 dprintk("bttv%d: open called (radio)\n",btv->c.nr);
3159 down(&btv->lock); 3159 mutex_lock(&btv->lock);
3160 3160
3161 btv->radio_user++; 3161 btv->radio_user++;
3162 3162
@@ -3165,7 +3165,7 @@ static int radio_open(struct inode *inode, struct file *file)
3165 bttv_call_i2c_clients(btv,AUDC_SET_RADIO,&btv->tuner_type); 3165 bttv_call_i2c_clients(btv,AUDC_SET_RADIO,&btv->tuner_type);
3166 audio_mux(btv,AUDIO_RADIO); 3166 audio_mux(btv,AUDIO_RADIO);
3167 3167
3168 up(&btv->lock); 3168 mutex_unlock(&btv->lock);
3169 return 0; 3169 return 0;
3170} 3170}
3171 3171
@@ -3920,8 +3920,8 @@ static int __devinit bttv_probe(struct pci_dev *dev,
3920 sprintf(btv->c.name,"bttv%d",btv->c.nr); 3920 sprintf(btv->c.name,"bttv%d",btv->c.nr);
3921 3921
3922 /* initialize structs / fill in defaults */ 3922 /* initialize structs / fill in defaults */
3923 init_MUTEX(&btv->lock); 3923 mutex_init(&btv->lock);
3924 init_MUTEX(&btv->reslock); 3924 mutex_init(&btv->reslock);
3925 spin_lock_init(&btv->s_lock); 3925 spin_lock_init(&btv->s_lock);
3926 spin_lock_init(&btv->gpio_lock); 3926 spin_lock_init(&btv->gpio_lock);
3927 init_waitqueue_head(&btv->gpioq); 3927 init_waitqueue_head(&btv->gpioq);
diff --git a/drivers/media/video/bttvp.h b/drivers/media/video/bttvp.h
index dd00c20ab95e..9cb72f176f7d 100644
--- a/drivers/media/video/bttvp.h
+++ b/drivers/media/video/bttvp.h
@@ -35,6 +35,7 @@
35#include <linux/videodev.h> 35#include <linux/videodev.h>
36#include <linux/pci.h> 36#include <linux/pci.h>
37#include <linux/input.h> 37#include <linux/input.h>
38#include <linux/mutex.h>
38#include <asm/scatterlist.h> 39#include <asm/scatterlist.h>
39#include <asm/io.h> 40#include <asm/io.h>
40 41
@@ -309,9 +310,9 @@ struct bttv {
309 310
310 /* locking */ 311 /* locking */
311 spinlock_t s_lock; 312 spinlock_t s_lock;
312 struct semaphore lock; 313 struct mutex lock;
313 int resources; 314 int resources;
314 struct semaphore reslock; 315 struct mutex reslock;
315#ifdef VIDIOC_G_PRIORITY 316#ifdef VIDIOC_G_PRIORITY
316 struct v4l2_prio_state prio; 317 struct v4l2_prio_state prio;
317#endif 318#endif