提交 89a30a83 编写于 作者: L Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb

* git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb:
  V4L/DVB (6916): ivtv: udelay has to be changed *after* the eeprom was read, not before
  V4L/DVB (6944a): Fix Regression VIDIOCGMBUF ioctl hangs on bttv driver
...@@ -3063,11 +3063,10 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file, ...@@ -3063,11 +3063,10 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file,
struct video_mbuf *mbuf = arg; struct video_mbuf *mbuf = arg;
unsigned int i; unsigned int i;
mutex_lock(&fh->cap.lock);
retval = videobuf_mmap_setup(&fh->cap,gbuffers,gbufsize, retval = videobuf_mmap_setup(&fh->cap,gbuffers,gbufsize,
V4L2_MEMORY_MMAP); V4L2_MEMORY_MMAP);
if (retval < 0) if (retval < 0)
goto fh_unlock_and_return; return retval;
gbuffers = retval; gbuffers = retval;
memset(mbuf,0,sizeof(*mbuf)); memset(mbuf,0,sizeof(*mbuf));
...@@ -3075,7 +3074,6 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file, ...@@ -3075,7 +3074,6 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file,
mbuf->size = gbuffers * gbufsize; mbuf->size = gbuffers * gbufsize;
for (i = 0; i < gbuffers; i++) for (i = 0; i < gbuffers; i++)
mbuf->offsets[i] = i * gbufsize; mbuf->offsets[i] = i * gbufsize;
mutex_unlock(&fh->cap.lock);
return 0; return 0;
} }
case VIDIOCMCAPTURE: case VIDIOCMCAPTURE:
......
...@@ -1076,6 +1076,10 @@ static int __devinit ivtv_probe(struct pci_dev *dev, ...@@ -1076,6 +1076,10 @@ static int __devinit ivtv_probe(struct pci_dev *dev,
ivtv_process_eeprom(itv); ivtv_process_eeprom(itv);
} }
/* The mspx4xx chips need a longer delay for some reason */
if (!(itv->hw_flags & IVTV_HW_MSP34XX))
itv->i2c_algo.udelay = 5;
if (itv->std == 0) { if (itv->std == 0) {
itv->std = V4L2_STD_NTSC_M; itv->std = V4L2_STD_NTSC_M;
} }
......
...@@ -541,7 +541,7 @@ static const struct i2c_algo_bit_data ivtv_i2c_algo_template = { ...@@ -541,7 +541,7 @@ static const struct i2c_algo_bit_data ivtv_i2c_algo_template = {
.setscl = ivtv_setscl_old, .setscl = ivtv_setscl_old,
.getsda = ivtv_getsda_old, .getsda = ivtv_getsda_old,
.getscl = ivtv_getscl_old, .getscl = ivtv_getscl_old,
.udelay = 5, .udelay = 10,
.timeout = 200, .timeout = 200,
}; };
...@@ -718,9 +718,6 @@ int init_ivtv_i2c(struct ivtv *itv) ...@@ -718,9 +718,6 @@ int init_ivtv_i2c(struct ivtv *itv)
sizeof(struct i2c_adapter)); sizeof(struct i2c_adapter));
memcpy(&itv->i2c_algo, &ivtv_i2c_algo_template, memcpy(&itv->i2c_algo, &ivtv_i2c_algo_template,
sizeof(struct i2c_algo_bit_data)); sizeof(struct i2c_algo_bit_data));
/* The mspx4xx chips need a longer delay for some reason */
if (itv->hw_flags & IVTV_HW_MSP34XX)
itv->i2c_algo.udelay = 10;
itv->i2c_algo.data = itv; itv->i2c_algo.data = itv;
itv->i2c_adap.algo_data = &itv->i2c_algo; itv->i2c_adap.algo_data = &itv->i2c_algo;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册