Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (34 commits) V4L/DVB (10173): Missing v4l2_prio_close in radio_release V4L/DVB (10172): add DVB_DEVICE_TYPE= to uevent V4L/DVB (10171): Use usb_set_intfdata V4L/DVB (10170): tuner-simple: prevent possible OOPS caused by divide by zero error V4L/DVB (10168): sms1xxx: fix inverted gpio for lna control on tiger r2 V4L/DVB (10167): sms1xxx: add support for inverted gpio V4L/DVB (10166): dvb frontend: stop using non-C99 compliant comments V4L/DVB (10165): Add FE_CAN_2G_MODULATION flag to frontends that support DVB-S2 V4L/DVB (10164): Add missing S2 caps flag to S2API V4L/DVB (10163): em28xx: allocate adev together with struct em28xx dev V4L/DVB (10162): tuner-simple: Fix tuner type set message V4L/DVB (10161): saa7134: fix autodetection for AVer TV GO 007 FM Plus V4L/DVB (10160): em28xx: update chip id for em2710 V4L/DVB (10157): Add USB ID for the Sil4701 radio from DealExtreme V4L/DVB (10156): saa7134: Add support for Avermedia AVer TV GO 007 FM Plus V4L/DVB (10155): Add TEA5764 radio driver V4L/DVB (10154): saa7134: fix a merge conflict on Behold H6 board V4L/DVB (10153): Add the Beholder H6 card to DVB-T part of sources. V4L/DVB (10152): Change configuration of the Beholder H6 card V4L/DVB (10151): Fix I2C bridge error in zl10353 ...
This commit is contained in:
commit
f60a0a7984
|
@ -152,3 +152,4 @@
|
|||
151 -> ADS Tech Instant HDTV [1421:0380]
|
||||
152 -> Asus Tiger Rev:1.00 [1043:4857]
|
||||
153 -> Kworld Plus TV Analog Lite PCI [17de:7128]
|
||||
154 -> Avermedia AVerTV GO 007 FM Plus [1461:f31d]
|
||||
|
|
|
@ -41,6 +41,7 @@ chips are known to work:
|
|||
- 10c4:818a: Silicon Labs USB FM Radio Reference Design
|
||||
- 06e1:a155: ADS/Tech FM Radio Receiver (formerly Instant FM Music) (RDX-155-EF)
|
||||
- 1b80:d700: KWorld USB FM Radio SnapMusic Mobile 700 (FM700)
|
||||
- 10c5:819a: DealExtreme USB Radio
|
||||
|
||||
|
||||
Software
|
||||
|
|
|
@ -184,7 +184,7 @@ may be NULL if the subdev driver does not support anything from that category.
|
|||
It looks like this:
|
||||
|
||||
struct v4l2_subdev_core_ops {
|
||||
int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_chip_ident *chip);
|
||||
int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip);
|
||||
int (*log_status)(struct v4l2_subdev *sd);
|
||||
int (*init)(struct v4l2_subdev *sd, u32 val);
|
||||
...
|
||||
|
@ -390,16 +390,18 @@ allocated memory.
|
|||
|
||||
You should also set these fields:
|
||||
|
||||
- parent: set to the parent device (same device as was used to register
|
||||
v4l2_device).
|
||||
- v4l2_dev: set to the v4l2_device parent device.
|
||||
- name: set to something descriptive and unique.
|
||||
- fops: set to the file_operations struct.
|
||||
- fops: set to the v4l2_file_operations struct.
|
||||
- ioctl_ops: if you use the v4l2_ioctl_ops to simplify ioctl maintenance
|
||||
(highly recommended to use this and it might become compulsory in the
|
||||
future!), then set this to your v4l2_ioctl_ops struct.
|
||||
|
||||
If you use v4l2_ioctl_ops, then you should set .unlocked_ioctl to
|
||||
__video_ioctl2 or .ioctl to video_ioctl2 in your file_operations struct.
|
||||
If you use v4l2_ioctl_ops, then you should set either .unlocked_ioctl or
|
||||
.ioctl to video_ioctl2 in your v4l2_file_operations struct.
|
||||
|
||||
The v4l2_file_operations struct is a subset of file_operations. The main
|
||||
difference is that the inode argument is omitted since it is never used.
|
||||
|
||||
|
||||
video_device registration
|
||||
|
@ -410,7 +412,7 @@ for you.
|
|||
|
||||
err = video_register_device(vdev, VFL_TYPE_GRABBER, -1);
|
||||
if (err) {
|
||||
video_device_release(vdev); // or kfree(my_vdev);
|
||||
video_device_release(vdev); /* or kfree(my_vdev); */
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -516,5 +518,4 @@ void *video_drvdata(struct file *file);
|
|||
|
||||
You can go from a video_device struct to the v4l2_device struct using:
|
||||
|
||||
struct v4l2_device *v4l2_dev = dev_get_drvdata(vdev->parent);
|
||||
|
||||
struct v4l2_device *v4l2_dev = vdev->v4l2_dev;
|
||||
|
|
|
@ -192,9 +192,9 @@ void saa7146_buffer_timeout(unsigned long data)
|
|||
/********************************************************************************/
|
||||
/* file operations */
|
||||
|
||||
static int fops_open(struct inode *inode, struct file *file)
|
||||
static int fops_open(struct file *file)
|
||||
{
|
||||
unsigned int minor = iminor(inode);
|
||||
unsigned int minor = video_devdata(file)->minor;
|
||||
struct saa7146_dev *h = NULL, *dev = NULL;
|
||||
struct list_head *list;
|
||||
struct saa7146_fh *fh = NULL;
|
||||
|
@ -202,7 +202,7 @@ static int fops_open(struct inode *inode, struct file *file)
|
|||
|
||||
enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
|
||||
DEB_EE(("inode:%p, file:%p, minor:%d\n",inode,file,minor));
|
||||
DEB_EE(("file:%p, minor:%d\n", file, minor));
|
||||
|
||||
if (mutex_lock_interruptible(&saa7146_devices_lock))
|
||||
return -ERESTARTSYS;
|
||||
|
@ -255,7 +255,7 @@ static int fops_open(struct inode *inode, struct file *file)
|
|||
if (dev->ext_vv_data->capabilities & V4L2_CAP_VBI_CAPTURE)
|
||||
result = saa7146_vbi_uops.open(dev,file);
|
||||
if (dev->ext_vv_data->vbi_fops.open)
|
||||
dev->ext_vv_data->vbi_fops.open(inode, file);
|
||||
dev->ext_vv_data->vbi_fops.open(file);
|
||||
} else {
|
||||
DEB_S(("initializing video...\n"));
|
||||
result = saa7146_video_uops.open(dev,file);
|
||||
|
@ -280,12 +280,12 @@ out:
|
|||
return result;
|
||||
}
|
||||
|
||||
static int fops_release(struct inode *inode, struct file *file)
|
||||
static int fops_release(struct file *file)
|
||||
{
|
||||
struct saa7146_fh *fh = file->private_data;
|
||||
struct saa7146_dev *dev = fh->dev;
|
||||
|
||||
DEB_EE(("inode:%p, file:%p\n",inode,file));
|
||||
DEB_EE(("file:%p\n", file));
|
||||
|
||||
if (mutex_lock_interruptible(&saa7146_devices_lock))
|
||||
return -ERESTARTSYS;
|
||||
|
@ -294,7 +294,7 @@ static int fops_release(struct inode *inode, struct file *file)
|
|||
if (dev->ext_vv_data->capabilities & V4L2_CAP_VBI_CAPTURE)
|
||||
saa7146_vbi_uops.release(dev,file);
|
||||
if (dev->ext_vv_data->vbi_fops.release)
|
||||
dev->ext_vv_data->vbi_fops.release(inode, file);
|
||||
dev->ext_vv_data->vbi_fops.release(file);
|
||||
} else {
|
||||
saa7146_video_uops.release(dev,file);
|
||||
}
|
||||
|
@ -308,10 +308,10 @@ static int fops_release(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int fops_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
|
||||
static long fops_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
/*
|
||||
DEB_EE(("inode:%p, file:%p, cmd:%d, arg:%li\n",inode, file, cmd, arg));
|
||||
DEB_EE(("file:%p, cmd:%d, arg:%li\n", file, cmd, arg));
|
||||
*/
|
||||
return video_usercopy(file, cmd, arg, saa7146_video_do_ioctl);
|
||||
}
|
||||
|
@ -416,7 +416,7 @@ static ssize_t fops_write(struct file *file, const char __user *data, size_t cou
|
|||
}
|
||||
}
|
||||
|
||||
static const struct file_operations video_fops =
|
||||
static const struct v4l2_file_operations video_fops =
|
||||
{
|
||||
.owner = THIS_MODULE,
|
||||
.open = fops_open,
|
||||
|
@ -426,7 +426,6 @@ static const struct file_operations video_fops =
|
|||
.poll = fops_poll,
|
||||
.mmap = fops_mmap,
|
||||
.ioctl = fops_ioctl,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static void vv_callback(struct saa7146_dev *dev, unsigned long status)
|
||||
|
|
|
@ -834,13 +834,14 @@ static int video_end(struct saa7146_fh *fh, struct file *file)
|
|||
* copying is done already, arg is a kernel pointer.
|
||||
*/
|
||||
|
||||
int saa7146_video_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
long saa7146_video_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct saa7146_fh *fh = file->private_data;
|
||||
struct saa7146_dev *dev = fh->dev;
|
||||
struct saa7146_vv *vv = dev->vv_data;
|
||||
|
||||
int err = 0, result = 0, ee = 0;
|
||||
long err = 0;
|
||||
int result = 0, ee = 0;
|
||||
|
||||
struct saa7146_use_ops *ops;
|
||||
struct videobuf_queue *q;
|
||||
|
|
|
@ -820,6 +820,15 @@ static u32 simple_dvb_configure(struct dvb_frontend *fe, u8 *buf,
|
|||
int ret;
|
||||
unsigned frequency = params->frequency / 62500;
|
||||
|
||||
if (!tun->stepsize) {
|
||||
/* tuner-core was loaded before the digital tuner was
|
||||
* configured and somehow picked the wrong tuner type */
|
||||
tuner_err("attempt to treat tuner %d (%s) as digital tuner "
|
||||
"without stepsize defined.\n",
|
||||
priv->type, priv->tun->name);
|
||||
return 0; /* failure */
|
||||
}
|
||||
|
||||
t_params = simple_tuner_params(fe, TUNER_PARAM_TYPE_DIGITAL);
|
||||
ret = simple_config_lookup(fe, t_params, &frequency, &config, &cb);
|
||||
if (ret < 0)
|
||||
|
@ -1059,7 +1068,12 @@ struct dvb_frontend *simple_tuner_attach(struct dvb_frontend *fe,
|
|||
memcpy(&fe->ops.tuner_ops, &simple_tuner_ops,
|
||||
sizeof(struct dvb_tuner_ops));
|
||||
|
||||
tuner_info("type set to %d (%s)\n", type, priv->tun->name);
|
||||
if (type != priv->type)
|
||||
tuner_warn("couldn't set type to %d. Using %d (%s) instead\n",
|
||||
type, priv->type, priv->tun->name);
|
||||
else
|
||||
tuner_info("type set to %d (%s)\n",
|
||||
priv->type, priv->tun->name);
|
||||
|
||||
if ((debug) || ((atv_input[priv->nr] > 0) ||
|
||||
(dtv_input[priv->nr] > 0))) {
|
||||
|
|
|
@ -436,8 +436,9 @@ static int dvb_uevent(struct device *dev, struct kobj_uevent_env *env)
|
|||
{
|
||||
struct dvb_device *dvbdev = dev_get_drvdata(dev);
|
||||
|
||||
add_uevent_var(env, "DVB_DEVICE_NUM=%d", dvbdev->id);
|
||||
add_uevent_var(env, "DVB_ADAPTER_NUM=%d", dvbdev->adapter->num);
|
||||
add_uevent_var(env, "DVB_DEVICE_TYPE=%s", dnames[dvbdev->type]);
|
||||
add_uevent_var(env, "DVB_DEVICE_NUM=%d", dvbdev->id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -187,7 +187,7 @@ int gp8psk_bcm4500_reload(struct dvb_usb_device *d)
|
|||
/* load BCM4500 firmware */
|
||||
if (gp_product_id == USB_PID_GENPIX_8PSK_REV_1_WARM)
|
||||
if (gp8psk_load_bcm4500fw(d))
|
||||
return EINVAL;
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1463,6 +1463,7 @@ static struct dvb_frontend_ops cx24116_ops = {
|
|||
FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
|
||||
FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 |
|
||||
FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
|
||||
FE_CAN_2G_MODULATION |
|
||||
FE_CAN_QPSK | FE_CAN_RECOVER
|
||||
},
|
||||
|
||||
|
|
|
@ -37,7 +37,8 @@ struct cx24116_config {
|
|||
u8 mpg_clk_pos_pol:0x02;
|
||||
};
|
||||
|
||||
#if defined(CONFIG_DVB_CX24116) || defined(CONFIG_DVB_CX24116_MODULE)
|
||||
#if defined(CONFIG_DVB_CX24116) || \
|
||||
(defined(CONFIG_DVB_CX24116_MODULE) && defined(MODULE))
|
||||
extern struct dvb_frontend *cx24116_attach(
|
||||
const struct cx24116_config *config,
|
||||
struct i2c_adapter *i2c);
|
||||
|
|
|
@ -1618,6 +1618,7 @@ static struct dvb_frontend_ops stb0899_ops = {
|
|||
|
||||
.caps = FE_CAN_INVERSION_AUTO |
|
||||
FE_CAN_FEC_AUTO |
|
||||
FE_CAN_2G_MODULATION |
|
||||
FE_CAN_QPSK
|
||||
},
|
||||
|
||||
|
|
|
@ -587,8 +587,15 @@ static int zl10353_init(struct dvb_frontend *fe)
|
|||
|
||||
static int zl10353_i2c_gate_ctrl(struct dvb_frontend* fe, int enable)
|
||||
{
|
||||
struct zl10353_state *state = fe->demodulator_priv;
|
||||
u8 val = 0x0a;
|
||||
|
||||
if (state->config.no_tuner) {
|
||||
/* No tuner attached to the internal I2C bus */
|
||||
/* If set enable I2C bridge, the main I2C bus stopped hardly */
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (enable)
|
||||
val |= 0x10;
|
||||
|
||||
|
|
|
@ -120,7 +120,7 @@ static struct sms_board sms_boards[] = {
|
|||
.name = "Hauppauge WinTV MiniCard",
|
||||
.type = SMS_NOVA_B0,
|
||||
.fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-hcw-55xxx-dvbt-02.fw",
|
||||
.lna_ctrl = 1,
|
||||
.lna_ctrl = -1,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -131,9 +131,10 @@ struct sms_board *sms_get_board(int id)
|
|||
return &sms_boards[id];
|
||||
}
|
||||
|
||||
static int sms_set_gpio(struct smscore_device_t *coredev, u32 pin, int enable)
|
||||
static int sms_set_gpio(struct smscore_device_t *coredev, int pin, int enable)
|
||||
{
|
||||
int ret;
|
||||
int lvl, ret;
|
||||
u32 gpio;
|
||||
struct smscore_gpio_config gpioconfig = {
|
||||
.direction = SMS_GPIO_DIRECTION_OUTPUT,
|
||||
.pullupdown = SMS_GPIO_PULLUPDOWN_NONE,
|
||||
|
@ -145,12 +146,20 @@ static int sms_set_gpio(struct smscore_device_t *coredev, u32 pin, int enable)
|
|||
if (pin == 0)
|
||||
return -EINVAL;
|
||||
|
||||
ret = smscore_configure_gpio(coredev, pin, &gpioconfig);
|
||||
if (pin < 0) {
|
||||
/* inverted gpio */
|
||||
gpio = pin * -1;
|
||||
lvl = enable ? 0 : 1;
|
||||
} else {
|
||||
gpio = pin;
|
||||
lvl = enable ? 1 : 0;
|
||||
}
|
||||
|
||||
ret = smscore_configure_gpio(coredev, gpio, &gpioconfig);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return smscore_set_gpio(coredev, pin, enable);
|
||||
return smscore_set_gpio(coredev, gpio, lvl);
|
||||
}
|
||||
|
||||
int sms_board_setup(struct smscore_device_t *coredev)
|
||||
|
|
|
@ -316,7 +316,7 @@ static int av7110_dvb_c_switch(struct saa7146_fh *fh)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int av7110_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
|
||||
static long av7110_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct saa7146_dev *dev = fh->dev;
|
||||
struct av7110 *av7110 = (struct av7110*) dev->ext_priv;
|
||||
|
@ -567,7 +567,7 @@ static int av7110_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int av7110_vbi_reset(struct inode *inode, struct file *file)
|
||||
static int av7110_vbi_reset(struct file *file)
|
||||
{
|
||||
struct saa7146_fh *fh = file->private_data;
|
||||
struct saa7146_dev *dev = fh->dev;
|
||||
|
|
|
@ -1493,7 +1493,7 @@ static struct saa7146_extension_ioctls ioctls[] = {
|
|||
{0, 0}
|
||||
};
|
||||
|
||||
static int av_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
|
||||
static long av_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct saa7146_dev *dev = fh->dev;
|
||||
struct budget_av *budget_av = (struct budget_av *) dev->ext_priv;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
config DVB_TTUSB_BUDGET
|
||||
tristate "Technotrend/Hauppauge Nova-USB devices"
|
||||
depends on DVB_CORE && USB && I2C
|
||||
depends on DVB_CORE && USB && I2C && PCI
|
||||
select DVB_CX22700 if !DVB_FE_CUSTOMISE
|
||||
select DVB_TDA1004X if !DVB_FE_CUSTOMISE
|
||||
select DVB_VES1820 if !DVB_FE_CUSTOMISE
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
config DVB_TTUSB_DEC
|
||||
tristate "Technotrend/Hauppauge USB DEC devices"
|
||||
depends on DVB_CORE && USB && INPUT
|
||||
depends on DVB_CORE && USB && INPUT && PCI
|
||||
select CRC32
|
||||
help
|
||||
Support for external USB adapters designed by Technotrend and
|
||||
|
|
|
@ -387,4 +387,23 @@ config USB_MR800
|
|||
To compile this driver as a module, choose M here: the
|
||||
module will be called radio-mr800.
|
||||
|
||||
config RADIO_TEA5764
|
||||
tristate "TEA5764 I2C FM radio support"
|
||||
depends on I2C && VIDEO_V4L2
|
||||
---help---
|
||||
Say Y here if you want to use the TEA5764 FM chip found in
|
||||
EZX phones. This FM chip is present in EZX phones from Motorola,
|
||||
connected to internal pxa I2C bus.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called radio-tea5764.
|
||||
|
||||
config RADIO_TEA5764_XTAL
|
||||
bool "TEA5764 crystal reference"
|
||||
depends on RADIO_TEA5764=y
|
||||
default y
|
||||
help
|
||||
Say Y here if TEA5764 have a 32768 Hz crystal in circuit, say N
|
||||
here if TEA5764 reference frequency is connected in FREQIN.
|
||||
|
||||
endif # RADIO_ADAPTERS
|
||||
|
|
|
@ -19,5 +19,6 @@ obj-$(CONFIG_RADIO_MAESTRO) += radio-maestro.o
|
|||
obj-$(CONFIG_USB_DSBR) += dsbr100.o
|
||||
obj-$(CONFIG_USB_SI470X) += radio-si470x.o
|
||||
obj-$(CONFIG_USB_MR800) += radio-mr800.o
|
||||
obj-$(CONFIG_RADIO_TEA5764) += radio-tea5764.o
|
||||
|
||||
EXTRA_CFLAGS += -Isound
|
||||
|
|
|
@ -154,8 +154,8 @@ devices, that would be 76 and 91. */
|
|||
static int usb_dsbr100_probe(struct usb_interface *intf,
|
||||
const struct usb_device_id *id);
|
||||
static void usb_dsbr100_disconnect(struct usb_interface *intf);
|
||||
static int usb_dsbr100_open(struct inode *inode, struct file *file);
|
||||
static int usb_dsbr100_close(struct inode *inode, struct file *file);
|
||||
static int usb_dsbr100_open(struct file *file);
|
||||
static int usb_dsbr100_close(struct file *file);
|
||||
static int usb_dsbr100_suspend(struct usb_interface *intf,
|
||||
pm_message_t message);
|
||||
static int usb_dsbr100_resume(struct usb_interface *intf);
|
||||
|
@ -566,7 +566,7 @@ static int vidioc_s_audio(struct file *file, void *priv,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int usb_dsbr100_open(struct inode *inode, struct file *file)
|
||||
static int usb_dsbr100_open(struct file *file)
|
||||
{
|
||||
struct dsbr100_device *radio = video_drvdata(file);
|
||||
int retval;
|
||||
|
@ -593,7 +593,7 @@ static int usb_dsbr100_open(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int usb_dsbr100_close(struct inode *inode, struct file *file)
|
||||
static int usb_dsbr100_close(struct file *file)
|
||||
{
|
||||
struct dsbr100_device *radio = video_drvdata(file);
|
||||
int retval;
|
||||
|
@ -653,15 +653,11 @@ static void usb_dsbr100_video_device_release(struct video_device *videodev)
|
|||
}
|
||||
|
||||
/* File system interface */
|
||||
static const struct file_operations usb_dsbr100_fops = {
|
||||
static const struct v4l2_file_operations usb_dsbr100_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = usb_dsbr100_open,
|
||||
.release = usb_dsbr100_close,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops usb_dsbr100_ioctl_ops = {
|
||||
|
|
|
@ -374,26 +374,22 @@ static int vidioc_s_audio(struct file *file, void *priv,
|
|||
|
||||
static struct rt_device rtrack_unit;
|
||||
|
||||
static int rtrack_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int rtrack_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &rtrack_unit.in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int rtrack_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int rtrack_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &rtrack_unit.in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations rtrack_fops = {
|
||||
static const struct v4l2_file_operations rtrack_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = rtrack_exclusive_open,
|
||||
.release = rtrack_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops rtrack_ioctl_ops = {
|
||||
|
|
|
@ -338,26 +338,22 @@ static int vidioc_s_ctrl (struct file *file, void *priv,
|
|||
|
||||
static struct az_device aztech_unit;
|
||||
|
||||
static int aztech_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int aztech_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &aztech_unit.in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int aztech_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int aztech_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &aztech_unit.in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations aztech_fops = {
|
||||
static const struct v4l2_file_operations aztech_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = aztech_exclusive_open,
|
||||
.release = aztech_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops aztech_ioctl_ops = {
|
||||
|
|
|
@ -529,7 +529,7 @@ static int vidioc_s_audio(struct file *file, void *priv,
|
|||
}
|
||||
|
||||
static int
|
||||
cadet_open(struct inode *inode, struct file *file)
|
||||
cadet_open(struct file *file)
|
||||
{
|
||||
users++;
|
||||
if (1 == users) init_waitqueue_head(&read_queue);
|
||||
|
@ -537,7 +537,7 @@ cadet_open(struct inode *inode, struct file *file)
|
|||
}
|
||||
|
||||
static int
|
||||
cadet_release(struct inode *inode, struct file *file)
|
||||
cadet_release(struct file *file)
|
||||
{
|
||||
users--;
|
||||
if (0 == users){
|
||||
|
@ -557,17 +557,13 @@ cadet_poll(struct file *file, struct poll_table_struct *wait)
|
|||
}
|
||||
|
||||
|
||||
static const struct file_operations cadet_fops = {
|
||||
static const struct v4l2_file_operations cadet_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = cadet_open,
|
||||
.release = cadet_release,
|
||||
.read = cadet_read,
|
||||
.ioctl = video_ioctl2,
|
||||
.poll = cadet_poll,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops cadet_ioctl_ops = {
|
||||
|
|
|
@ -358,26 +358,22 @@ MODULE_DEVICE_TABLE( pci, gemtek_pci_id );
|
|||
|
||||
static int mx = 1;
|
||||
|
||||
static int gemtek_pci_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int gemtek_pci_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int gemtek_pci_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int gemtek_pci_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations gemtek_pci_fops = {
|
||||
static const struct v4l2_file_operations gemtek_pci_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = gemtek_pci_exclusive_open,
|
||||
.release = gemtek_pci_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops gemtek_pci_ioctl_ops = {
|
||||
|
|
|
@ -394,26 +394,22 @@ static struct v4l2_queryctrl radio_qctrl[] = {
|
|||
}
|
||||
};
|
||||
|
||||
static int gemtek_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int gemtek_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int gemtek_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int gemtek_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations gemtek_fops = {
|
||||
static const struct v4l2_file_operations gemtek_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = gemtek_exclusive_open,
|
||||
.release = gemtek_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek
|
||||
};
|
||||
|
||||
static int vidioc_querycap(struct file *file, void *priv,
|
||||
|
|
|
@ -79,12 +79,12 @@ static unsigned long in_use;
|
|||
|
||||
static int maestro_probe(struct pci_dev *pdev, const struct pci_device_id *ent);
|
||||
|
||||
static int maestro_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int maestro_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int maestro_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int maestro_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &in_use);
|
||||
return 0;
|
||||
|
@ -110,15 +110,11 @@ static struct pci_driver maestro_r_driver = {
|
|||
.remove = __devexit_p(maestro_remove),
|
||||
};
|
||||
|
||||
static const struct file_operations maestro_fops = {
|
||||
static const struct v4l2_file_operations maestro_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = maestro_exclusive_open,
|
||||
.release = maestro_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
struct radio_device {
|
||||
|
|
|
@ -100,26 +100,22 @@ static unsigned long in_use;
|
|||
#define BITS2FREQ(x) ((x) * FREQ_STEP - FREQ_IF)
|
||||
|
||||
|
||||
static int maxiradio_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int maxiradio_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int maxiradio_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int maxiradio_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations maxiradio_fops = {
|
||||
static const struct v4l2_file_operations maxiradio_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = maxiradio_exclusive_open,
|
||||
.release = maxiradio_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static struct radio_device
|
||||
|
|
|
@ -127,8 +127,8 @@ static struct v4l2_queryctrl radio_qctrl[] = {
|
|||
static int usb_amradio_probe(struct usb_interface *intf,
|
||||
const struct usb_device_id *id);
|
||||
static void usb_amradio_disconnect(struct usb_interface *intf);
|
||||
static int usb_amradio_open(struct inode *inode, struct file *file);
|
||||
static int usb_amradio_close(struct inode *inode, struct file *file);
|
||||
static int usb_amradio_open(struct file *file);
|
||||
static int usb_amradio_close(struct file *file);
|
||||
static int usb_amradio_suspend(struct usb_interface *intf,
|
||||
pm_message_t message);
|
||||
static int usb_amradio_resume(struct usb_interface *intf);
|
||||
|
@ -500,7 +500,7 @@ static int vidioc_s_input(struct file *filp, void *priv, unsigned int i)
|
|||
}
|
||||
|
||||
/* open device - amradio_start() and amradio_setfreq() */
|
||||
static int usb_amradio_open(struct inode *inode, struct file *file)
|
||||
static int usb_amradio_open(struct file *file)
|
||||
{
|
||||
struct amradio_device *radio = video_get_drvdata(video_devdata(file));
|
||||
|
||||
|
@ -525,7 +525,7 @@ static int usb_amradio_open(struct inode *inode, struct file *file)
|
|||
}
|
||||
|
||||
/*close device */
|
||||
static int usb_amradio_close(struct inode *inode, struct file *file)
|
||||
static int usb_amradio_close(struct file *file)
|
||||
{
|
||||
struct amradio_device *radio = video_get_drvdata(video_devdata(file));
|
||||
int retval;
|
||||
|
@ -572,15 +572,11 @@ static int usb_amradio_resume(struct usb_interface *intf)
|
|||
}
|
||||
|
||||
/* File system interface */
|
||||
static const struct file_operations usb_amradio_fops = {
|
||||
static const struct v4l2_file_operations usb_amradio_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = usb_amradio_open,
|
||||
.release = usb_amradio_close,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops usb_amradio_ioctl_ops = {
|
||||
|
|
|
@ -280,26 +280,22 @@ static int vidioc_s_audio(struct file *file, void *priv,
|
|||
|
||||
static struct rt_device rtrack2_unit;
|
||||
|
||||
static int rtrack2_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int rtrack2_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &rtrack2_unit.in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int rtrack2_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int rtrack2_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &rtrack2_unit.in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations rtrack2_fops = {
|
||||
static const struct v4l2_file_operations rtrack2_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = rtrack2_exclusive_open,
|
||||
.release = rtrack2_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops rtrack2_ioctl_ops = {
|
||||
|
|
|
@ -280,26 +280,22 @@ static int vidioc_s_audio(struct file *file, void *priv,
|
|||
|
||||
static struct fmi_device fmi_unit;
|
||||
|
||||
static int fmi_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int fmi_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &fmi_unit.in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int fmi_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int fmi_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &fmi_unit.in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations fmi_fops = {
|
||||
static const struct v4l2_file_operations fmi_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = fmi_exclusive_open,
|
||||
.release = fmi_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops fmi_ioctl_ops = {
|
||||
|
|
|
@ -396,26 +396,22 @@ static int vidioc_s_audio(struct file *file, void *priv,
|
|||
|
||||
static struct fmr2_device fmr2_unit;
|
||||
|
||||
static int fmr2_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int fmr2_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &fmr2_unit.in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int fmr2_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int fmr2_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &fmr2_unit.in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations fmr2_fops = {
|
||||
static const struct v4l2_file_operations fmr2_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = fmr2_exclusive_open,
|
||||
.release = fmr2_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops fmr2_ioctl_ops = {
|
||||
|
|
|
@ -96,6 +96,8 @@
|
|||
* 2008-10-20 Alexey Klimov <klimov.linux@gmail.com>
|
||||
* - add support for KWorld USB FM Radio FM700
|
||||
* - blacklisted KWorld radio in hid-core.c and hid-ids.h
|
||||
* 2008-12-03 Mark Lord <mlord@pobox.com>
|
||||
* - add support for DealExtreme USB Radio
|
||||
*
|
||||
* ToDo:
|
||||
* - add firmware download/update support
|
||||
|
@ -138,6 +140,8 @@ static struct usb_device_id si470x_usb_driver_id_table[] = {
|
|||
{ USB_DEVICE_AND_INTERFACE_INFO(0x06e1, 0xa155, USB_CLASS_HID, 0, 0) },
|
||||
/* KWorld USB FM Radio SnapMusic Mobile 700 (FM700) */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x1b80, 0xd700, USB_CLASS_HID, 0, 0) },
|
||||
/* DealExtreme USB Radio */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x10c5, 0x819a, USB_CLASS_HID, 0, 0) },
|
||||
/* Terminating entry */
|
||||
{ }
|
||||
};
|
||||
|
@ -1075,7 +1079,7 @@ static unsigned int si470x_fops_poll(struct file *file,
|
|||
/*
|
||||
* si470x_fops_open - file open
|
||||
*/
|
||||
static int si470x_fops_open(struct inode *inode, struct file *file)
|
||||
static int si470x_fops_open(struct file *file)
|
||||
{
|
||||
struct si470x_device *radio = video_drvdata(file);
|
||||
int retval;
|
||||
|
@ -1105,7 +1109,7 @@ done:
|
|||
/*
|
||||
* si470x_fops_release - file release
|
||||
*/
|
||||
static int si470x_fops_release(struct inode *inode, struct file *file)
|
||||
static int si470x_fops_release(struct file *file)
|
||||
{
|
||||
struct si470x_device *radio = video_drvdata(file);
|
||||
int retval = 0;
|
||||
|
@ -1147,15 +1151,11 @@ done:
|
|||
/*
|
||||
* si470x_fops - file operations interface
|
||||
*/
|
||||
static const struct file_operations si470x_fops = {
|
||||
static const struct v4l2_file_operations si470x_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.llseek = no_llseek,
|
||||
.read = si470x_fops_read,
|
||||
.poll = si470x_fops_poll,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.open = si470x_fops_open,
|
||||
.release = si470x_fops_release,
|
||||
};
|
||||
|
|
|
@ -0,0 +1,634 @@
|
|||
/*
|
||||
* driver/media/radio/radio-tea5764.c
|
||||
*
|
||||
* Driver for TEA5764 radio chip for linux 2.6.
|
||||
* This driver is for TEA5764 chip from NXP, used in EZX phones from Motorola.
|
||||
* The I2C protocol is used for communicate with chip.
|
||||
*
|
||||
* Based in radio-tea5761.c Copyright (C) 2005 Nokia Corporation
|
||||
*
|
||||
* Copyright (c) 2008 Fabio Belavenuto <belavenuto@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* History:
|
||||
* 2008-12-06 Fabio Belavenuto <belavenuto@gmail.com>
|
||||
* initial code
|
||||
*
|
||||
* TODO:
|
||||
* add platform_data support for IRQs platform dependencies
|
||||
* add RDS support
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h> /* Initdata */
|
||||
#include <linux/videodev2.h> /* kernel radio structs */
|
||||
#include <linux/i2c.h> /* I2C */
|
||||
#include <media/v4l2-common.h>
|
||||
#include <media/v4l2-ioctl.h>
|
||||
#include <linux/version.h> /* for KERNEL_VERSION MACRO */
|
||||
|
||||
#define DRIVER_VERSION "v0.01"
|
||||
#define RADIO_VERSION KERNEL_VERSION(0, 0, 1)
|
||||
|
||||
#define DRIVER_AUTHOR "Fabio Belavenuto <belavenuto@gmail.com>"
|
||||
#define DRIVER_DESC "A driver for the TEA5764 radio chip for EZX Phones."
|
||||
|
||||
#define PINFO(format, ...)\
|
||||
printk(KERN_INFO KBUILD_MODNAME ": "\
|
||||
DRIVER_VERSION ": " format "\n", ## __VA_ARGS__)
|
||||
#define PWARN(format, ...)\
|
||||
printk(KERN_WARNING KBUILD_MODNAME ": "\
|
||||
DRIVER_VERSION ": " format "\n", ## __VA_ARGS__)
|
||||
# define PDEBUG(format, ...)\
|
||||
printk(KERN_DEBUG KBUILD_MODNAME ": "\
|
||||
DRIVER_VERSION ": " format "\n", ## __VA_ARGS__)
|
||||
|
||||
/* Frequency limits in MHz -- these are European values. For Japanese
|
||||
devices, that would be 76000 and 91000. */
|
||||
#define FREQ_MIN 87500
|
||||
#define FREQ_MAX 108000
|
||||
#define FREQ_MUL 16
|
||||
|
||||
/* TEA5764 registers */
|
||||
#define TEA5764_MANID 0x002b
|
||||
#define TEA5764_CHIPID 0x5764
|
||||
|
||||
#define TEA5764_INTREG_BLMSK 0x0001
|
||||
#define TEA5764_INTREG_FRRMSK 0x0002
|
||||
#define TEA5764_INTREG_LEVMSK 0x0008
|
||||
#define TEA5764_INTREG_IFMSK 0x0010
|
||||
#define TEA5764_INTREG_BLMFLAG 0x0100
|
||||
#define TEA5764_INTREG_FRRFLAG 0x0200
|
||||
#define TEA5764_INTREG_LEVFLAG 0x0800
|
||||
#define TEA5764_INTREG_IFFLAG 0x1000
|
||||
|
||||
#define TEA5764_FRQSET_SUD 0x8000
|
||||
#define TEA5764_FRQSET_SM 0x4000
|
||||
|
||||
#define TEA5764_TNCTRL_PUPD1 0x8000
|
||||
#define TEA5764_TNCTRL_PUPD0 0x4000
|
||||
#define TEA5764_TNCTRL_BLIM 0x2000
|
||||
#define TEA5764_TNCTRL_SWPM 0x1000
|
||||
#define TEA5764_TNCTRL_IFCTC 0x0800
|
||||
#define TEA5764_TNCTRL_AFM 0x0400
|
||||
#define TEA5764_TNCTRL_SMUTE 0x0200
|
||||
#define TEA5764_TNCTRL_SNC 0x0100
|
||||
#define TEA5764_TNCTRL_MU 0x0080
|
||||
#define TEA5764_TNCTRL_SSL1 0x0040
|
||||
#define TEA5764_TNCTRL_SSL0 0x0020
|
||||
#define TEA5764_TNCTRL_HLSI 0x0010
|
||||
#define TEA5764_TNCTRL_MST 0x0008
|
||||
#define TEA5764_TNCTRL_SWP 0x0004
|
||||
#define TEA5764_TNCTRL_DTC 0x0002
|
||||
#define TEA5764_TNCTRL_AHLSI 0x0001
|
||||
|
||||
#define TEA5764_TUNCHK_LEVEL(x) (((x) & 0x00F0) >> 4)
|
||||
#define TEA5764_TUNCHK_IFCNT(x) (((x) & 0xFE00) >> 9)
|
||||
#define TEA5764_TUNCHK_TUNTO 0x0100
|
||||
#define TEA5764_TUNCHK_LD 0x0008
|
||||
#define TEA5764_TUNCHK_STEREO 0x0004
|
||||
|
||||
#define TEA5764_TESTREG_TRIGFR 0x0800
|
||||
|
||||
struct tea5764_regs {
|
||||
u16 intreg; /* INTFLAG & INTMSK */
|
||||
u16 frqset; /* FRQSETMSB & FRQSETLSB */
|
||||
u16 tnctrl; /* TNCTRL1 & TNCTRL2 */
|
||||
u16 frqchk; /* FRQCHKMSB & FRQCHKLSB */
|
||||
u16 tunchk; /* IFCHK & LEVCHK */
|
||||
u16 testreg; /* TESTBITS & TESTMODE */
|
||||
u16 rdsstat; /* RDSSTAT1 & RDSSTAT2 */
|
||||
u16 rdslb; /* RDSLBMSB & RDSLBLSB */
|
||||
u16 rdspb; /* RDSPBMSB & RDSPBLSB */
|
||||
u16 rdsbc; /* RDSBBC & RDSGBC */
|
||||
u16 rdsctrl; /* RDSCTRL1 & RDSCTRL2 */
|
||||
u16 rdsbbl; /* PAUSEDET & RDSBBL */
|
||||
u16 manid; /* MANID1 & MANID2 */
|
||||
u16 chipid; /* CHIPID1 & CHIPID2 */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct tea5764_write_regs {
|
||||
u8 intreg; /* INTMSK */
|
||||
u16 frqset; /* FRQSETMSB & FRQSETLSB */
|
||||
u16 tnctrl; /* TNCTRL1 & TNCTRL2 */
|
||||
u16 testreg; /* TESTBITS & TESTMODE */
|
||||
u16 rdsctrl; /* RDSCTRL1 & RDSCTRL2 */
|
||||
u16 rdsbbl; /* PAUSEDET & RDSBBL */
|
||||
} __attribute__ ((packed));
|
||||
|
||||
#ifndef RADIO_TEA5764_XTAL
|
||||
#define RADIO_TEA5764_XTAL 1
|
||||
#endif
|
||||
|
||||
static int radio_nr = -1;
|
||||
static int use_xtal = RADIO_TEA5764_XTAL;
|
||||
|
||||
struct tea5764_device {
|
||||
struct i2c_client *i2c_client;
|
||||
struct video_device *videodev;
|
||||
struct tea5764_regs regs;
|
||||
struct mutex mutex;
|
||||
int users;
|
||||
};
|
||||
|
||||
/* I2C code related */
|
||||
int tea5764_i2c_read(struct tea5764_device *radio)
|
||||
{
|
||||
int i;
|
||||
u16 *p = (u16 *) &radio->regs;
|
||||
|
||||
struct i2c_msg msgs[1] = {
|
||||
{ radio->i2c_client->addr, I2C_M_RD, sizeof(radio->regs),
|
||||
(void *)&radio->regs },
|
||||
};
|
||||
if (i2c_transfer(radio->i2c_client->adapter, msgs, 1) != 1)
|
||||
return -EIO;
|
||||
for (i = 0; i < sizeof(struct tea5764_regs) / sizeof(u16); i++)
|
||||
p[i] = __be16_to_cpu(p[i]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tea5764_i2c_write(struct tea5764_device *radio)
|
||||
{
|
||||
struct tea5764_write_regs wr;
|
||||
struct tea5764_regs *r = &radio->regs;
|
||||
struct i2c_msg msgs[1] = {
|
||||
{ radio->i2c_client->addr, 0, sizeof(wr), (void *) &wr },
|
||||
};
|
||||
wr.intreg = r->intreg & 0xff;
|
||||
wr.frqset = __cpu_to_be16(r->frqset);
|
||||
wr.tnctrl = __cpu_to_be16(r->tnctrl);
|
||||
wr.testreg = __cpu_to_be16(r->testreg);
|
||||
wr.rdsctrl = __cpu_to_be16(r->rdsctrl);
|
||||
wr.rdsbbl = __cpu_to_be16(r->rdsbbl);
|
||||
if (i2c_transfer(radio->i2c_client->adapter, msgs, 1) != 1)
|
||||
return -EIO;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* V4L2 code related */
|
||||
static struct v4l2_queryctrl radio_qctrl[] = {
|
||||
{
|
||||
.id = V4L2_CID_AUDIO_MUTE,
|
||||
.name = "Mute",
|
||||
.minimum = 0,
|
||||
.maximum = 1,
|
||||
.default_value = 1,
|
||||
.type = V4L2_CTRL_TYPE_BOOLEAN,
|
||||
}
|
||||
};
|
||||
|
||||
static void tea5764_power_up(struct tea5764_device *radio)
|
||||
{
|
||||
struct tea5764_regs *r = &radio->regs;
|
||||
|
||||
if (!(r->tnctrl & TEA5764_TNCTRL_PUPD0)) {
|
||||
r->tnctrl &= ~(TEA5764_TNCTRL_AFM | TEA5764_TNCTRL_MU |
|
||||
TEA5764_TNCTRL_HLSI);
|
||||
if (!use_xtal)
|
||||
r->testreg |= TEA5764_TESTREG_TRIGFR;
|
||||
else
|
||||
r->testreg &= ~TEA5764_TESTREG_TRIGFR;
|
||||
|
||||
r->tnctrl |= TEA5764_TNCTRL_PUPD0;
|
||||
tea5764_i2c_write(radio);
|
||||
}
|
||||
}
|
||||
|
||||
static void tea5764_power_down(struct tea5764_device *radio)
|
||||
{
|
||||
struct tea5764_regs *r = &radio->regs;
|
||||
|
||||
if (r->tnctrl & TEA5764_TNCTRL_PUPD0) {
|
||||
r->tnctrl &= ~TEA5764_TNCTRL_PUPD0;
|
||||
tea5764_i2c_write(radio);
|
||||
}
|
||||
}
|
||||
|
||||
static void tea5764_set_freq(struct tea5764_device *radio, int freq)
|
||||
{
|
||||
struct tea5764_regs *r = &radio->regs;
|
||||
|
||||
/* formula: (freq [+ or -] 225000) / 8192 */
|
||||
if (r->tnctrl & TEA5764_TNCTRL_HLSI)
|
||||
r->frqset = (freq + 225000) / 8192;
|
||||
else
|
||||
r->frqset = (freq - 225000) / 8192;
|
||||
}
|
||||
|
||||
static int tea5764_get_freq(struct tea5764_device *radio)
|
||||
{
|
||||
struct tea5764_regs *r = &radio->regs;
|
||||
|
||||
if (r->tnctrl & TEA5764_TNCTRL_HLSI)
|
||||
return (r->frqchk * 8192) - 225000;
|
||||
else
|
||||
return (r->frqchk * 8192) + 225000;
|
||||
}
|
||||
|
||||
/* tune an frequency, freq is defined by v4l's TUNER_LOW, i.e. 1/16th kHz */
|
||||
static void tea5764_tune(struct tea5764_device *radio, int freq)
|
||||
{
|
||||
tea5764_set_freq(radio, freq);
|
||||
if (tea5764_i2c_write(radio))
|
||||
PWARN("Could not set frequency!");
|
||||
}
|
||||
|
||||
static void tea5764_set_audout_mode(struct tea5764_device *radio, int audmode)
|
||||
{
|
||||
struct tea5764_regs *r = &radio->regs;
|
||||
int tnctrl = r->tnctrl;
|
||||
|
||||
if (audmode == V4L2_TUNER_MODE_MONO)
|
||||
r->tnctrl |= TEA5764_TNCTRL_MST;
|
||||
else
|
||||
r->tnctrl &= ~TEA5764_TNCTRL_MST;
|
||||
if (tnctrl != r->tnctrl)
|
||||
tea5764_i2c_write(radio);
|
||||
}
|
||||
|
||||
static int tea5764_get_audout_mode(struct tea5764_device *radio)
|
||||
{
|
||||
struct tea5764_regs *r = &radio->regs;
|
||||
|
||||
if (r->tnctrl & TEA5764_TNCTRL_MST)
|
||||
return V4L2_TUNER_MODE_MONO;
|
||||
else
|
||||
return V4L2_TUNER_MODE_STEREO;
|
||||
}
|
||||
|
||||
static void tea5764_mute(struct tea5764_device *radio, int on)
|
||||
{
|
||||
struct tea5764_regs *r = &radio->regs;
|
||||
int tnctrl = r->tnctrl;
|
||||
|
||||
if (on)
|
||||
r->tnctrl |= TEA5764_TNCTRL_MU;
|
||||
else
|
||||
r->tnctrl &= ~TEA5764_TNCTRL_MU;
|
||||
if (tnctrl != r->tnctrl)
|
||||
tea5764_i2c_write(radio);
|
||||
}
|
||||
|
||||
static int tea5764_is_muted(struct tea5764_device *radio)
|
||||
{
|
||||
return radio->regs.tnctrl & TEA5764_TNCTRL_MU;
|
||||
}
|
||||
|
||||
/* V4L2 vidioc */
|
||||
static int vidioc_querycap(struct file *file, void *priv,
|
||||
struct v4l2_capability *v)
|
||||
{
|
||||
struct tea5764_device *radio = video_drvdata(file);
|
||||
struct video_device *dev = radio->videodev;
|
||||
|
||||
strlcpy(v->driver, dev->dev.driver->name, sizeof(v->driver));
|
||||
strlcpy(v->card, dev->name, sizeof(v->card));
|
||||
snprintf(v->bus_info, sizeof(v->bus_info), "I2C:%s", dev->dev.bus_id);
|
||||
v->version = RADIO_VERSION;
|
||||
v->capabilities = V4L2_CAP_TUNER | V4L2_CAP_RADIO;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vidioc_g_tuner(struct file *file, void *priv,
|
||||
struct v4l2_tuner *v)
|
||||
{
|
||||
struct tea5764_device *radio = video_drvdata(file);
|
||||
struct tea5764_regs *r = &radio->regs;
|
||||
|
||||
if (v->index > 0)
|
||||
return -EINVAL;
|
||||
|
||||
memset(v, 0, sizeof(v));
|
||||
strcpy(v->name, "FM");
|
||||
v->type = V4L2_TUNER_RADIO;
|
||||
tea5764_i2c_read(radio);
|
||||
v->rangelow = FREQ_MIN * FREQ_MUL;
|
||||
v->rangehigh = FREQ_MAX * FREQ_MUL;
|
||||
v->capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO;
|
||||
if (r->tunchk & TEA5764_TUNCHK_STEREO)
|
||||
v->rxsubchans = V4L2_TUNER_SUB_STEREO;
|
||||
v->audmode = tea5764_get_audout_mode(radio);
|
||||
v->signal = TEA5764_TUNCHK_LEVEL(r->tunchk) * 0xffff / 0xf;
|
||||
v->afc = TEA5764_TUNCHK_IFCNT(r->tunchk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vidioc_s_tuner(struct file *file, void *priv,
|
||||
struct v4l2_tuner *v)
|
||||
{
|
||||
struct tea5764_device *radio = video_drvdata(file);
|
||||
|
||||
if (v->index > 0)
|
||||
return -EINVAL;
|
||||
|
||||
tea5764_set_audout_mode(radio, v->audmode);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vidioc_s_frequency(struct file *file, void *priv,
|
||||
struct v4l2_frequency *f)
|
||||
{
|
||||
struct tea5764_device *radio = video_drvdata(file);
|
||||
|
||||
if (f->tuner != 0)
|
||||
return -EINVAL;
|
||||
if (f->frequency == 0) {
|
||||
/* We special case this as a power down control. */
|
||||
tea5764_power_down(radio);
|
||||
}
|
||||
if (f->frequency < (FREQ_MIN * FREQ_MUL))
|
||||
return -EINVAL;
|
||||
if (f->frequency > (FREQ_MAX * FREQ_MUL))
|
||||
return -EINVAL;
|
||||
tea5764_power_up(radio);
|
||||
tea5764_tune(radio, (f->frequency * 125) / 2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vidioc_g_frequency(struct file *file, void *priv,
|
||||
struct v4l2_frequency *f)
|
||||
{
|
||||
struct tea5764_device *radio = video_drvdata(file);
|
||||
struct tea5764_regs *r = &radio->regs;
|
||||
|
||||
tea5764_i2c_read(radio);
|
||||
memset(f, 0, sizeof(f));
|
||||
f->type = V4L2_TUNER_RADIO;
|
||||
if (r->tnctrl & TEA5764_TNCTRL_PUPD0)
|
||||
f->frequency = (tea5764_get_freq(radio) * 2) / 125;
|
||||
else
|
||||
f->frequency = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vidioc_queryctrl(struct file *file, void *priv,
|
||||
struct v4l2_queryctrl *qc)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(radio_qctrl); i++) {
|
||||
if (qc->id && qc->id == radio_qctrl[i].id) {
|
||||
memcpy(qc, &(radio_qctrl[i]), sizeof(*qc));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int vidioc_g_ctrl(struct file *file, void *priv,
|
||||
struct v4l2_control *ctrl)
|
||||
{
|
||||
struct tea5764_device *radio = video_drvdata(file);
|
||||
|
||||
switch (ctrl->id) {
|
||||
case V4L2_CID_AUDIO_MUTE:
|
||||
tea5764_i2c_read(radio);
|
||||
ctrl->value = tea5764_is_muted(radio) ? 1 : 0;
|
||||
return 0;
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int vidioc_s_ctrl(struct file *file, void *priv,
|
||||
struct v4l2_control *ctrl)
|
||||
{
|
||||
struct tea5764_device *radio = video_drvdata(file);
|
||||
|
||||
switch (ctrl->id) {
|
||||
case V4L2_CID_AUDIO_MUTE:
|
||||
tea5764_mute(radio, ctrl->value);
|
||||
return 0;
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int vidioc_g_input(struct file *filp, void *priv, unsigned int *i)
|
||||
{
|
||||
*i = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vidioc_s_input(struct file *filp, void *priv, unsigned int i)
|
||||
{
|
||||
if (i != 0)
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vidioc_g_audio(struct file *file, void *priv,
|
||||
struct v4l2_audio *a)
|
||||
{
|
||||
if (a->index > 1)
|
||||
return -EINVAL;
|
||||
|
||||
strcpy(a->name, "Radio");
|
||||
a->capability = V4L2_AUDCAP_STEREO;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vidioc_s_audio(struct file *file, void *priv,
|
||||
struct v4l2_audio *a)
|
||||
{
|
||||
if (a->index != 0)
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tea5764_open(struct file *file)
|
||||
{
|
||||
/* Currently we support only one device */
|
||||
int minor = video_devdata(file)->minor;
|
||||
struct tea5764_device *radio = video_drvdata(file);
|
||||
|
||||
if (radio->videodev->minor != minor)
|
||||
return -ENODEV;
|
||||
|
||||
mutex_lock(&radio->mutex);
|
||||
/* Only exclusive access */
|
||||
if (radio->users) {
|
||||
mutex_unlock(&radio->mutex);
|
||||
return -EBUSY;
|
||||
}
|
||||
radio->users++;
|
||||
mutex_unlock(&radio->mutex);
|
||||
file->private_data = radio;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tea5764_close(struct file *file)
|
||||
{
|
||||
struct tea5764_device *radio = video_drvdata(file);
|
||||
|
||||
if (!radio)
|
||||
return -ENODEV;
|
||||
mutex_lock(&radio->mutex);
|
||||
radio->users--;
|
||||
mutex_unlock(&radio->mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* File system interface */
|
||||
static const struct v4l2_file_operations tea5764_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = tea5764_open,
|
||||
.release = tea5764_close,
|
||||
.ioctl = video_ioctl2,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops tea5764_ioctl_ops = {
|
||||
.vidioc_querycap = vidioc_querycap,
|
||||
.vidioc_g_tuner = vidioc_g_tuner,
|
||||
.vidioc_s_tuner = vidioc_s_tuner,
|
||||
.vidioc_g_audio = vidioc_g_audio,
|
||||
.vidioc_s_audio = vidioc_s_audio,
|
||||
.vidioc_g_input = vidioc_g_input,
|
||||
.vidioc_s_input = vidioc_s_input,
|
||||
.vidioc_g_frequency = vidioc_g_frequency,
|
||||
.vidioc_s_frequency = vidioc_s_frequency,
|
||||
.vidioc_queryctrl = vidioc_queryctrl,
|
||||
.vidioc_g_ctrl = vidioc_g_ctrl,
|
||||
.vidioc_s_ctrl = vidioc_s_ctrl,
|
||||
};
|
||||
|
||||
/* V4L2 interface */
|
||||
static struct video_device tea5764_radio_template = {
|
||||
.name = "TEA5764 FM-Radio",
|
||||
.fops = &tea5764_fops,
|
||||
.ioctl_ops = &tea5764_ioctl_ops,
|
||||
.release = video_device_release,
|
||||
};
|
||||
|
||||
/* I2C probe: check if the device exists and register with v4l if it is */
|
||||
static int __devinit tea5764_i2c_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
struct tea5764_device *radio;
|
||||
struct tea5764_regs *r;
|
||||
int ret;
|
||||
|
||||
PDEBUG("probe");
|
||||
radio = kmalloc(sizeof(struct tea5764_device), GFP_KERNEL);
|
||||
if (!radio)
|
||||
return -ENOMEM;
|
||||
|
||||
mutex_init(&radio->mutex);
|
||||
radio->i2c_client = client;
|
||||
ret = tea5764_i2c_read(radio);
|
||||
if (ret)
|
||||
goto errfr;
|
||||
r = &radio->regs;
|
||||
PDEBUG("chipid = %04X, manid = %04X", r->chipid, r->manid);
|
||||
if (r->chipid != TEA5764_CHIPID ||
|
||||
(r->manid & 0x0fff) != TEA5764_MANID) {
|
||||
PWARN("This chip is not a TEA5764!");
|
||||
ret = -EINVAL;
|
||||
goto errfr;
|
||||
}
|
||||
|
||||
radio->videodev = video_device_alloc();
|
||||
if (!(radio->videodev)) {
|
||||
ret = -ENOMEM;
|
||||
goto errfr;
|
||||
}
|
||||
memcpy(radio->videodev, &tea5764_radio_template,
|
||||
sizeof(tea5764_radio_template));
|
||||
|
||||
i2c_set_clientdata(client, radio);
|
||||
video_set_drvdata(radio->videodev, radio);
|
||||
|
||||
ret = video_register_device(radio->videodev, VFL_TYPE_RADIO, radio_nr);
|
||||
if (ret < 0) {
|
||||
PWARN("Could not register video device!");
|
||||
goto errrel;
|
||||
}
|
||||
|
||||
/* initialize and power off the chip */
|
||||
tea5764_i2c_read(radio);
|
||||
tea5764_set_audout_mode(radio, V4L2_TUNER_MODE_STEREO);
|
||||
tea5764_mute(radio, 1);
|
||||
tea5764_power_down(radio);
|
||||
|
||||
PINFO("registered.");
|
||||
return 0;
|
||||
errrel:
|
||||
video_device_release(radio->videodev);
|
||||
errfr:
|
||||
kfree(radio);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __devexit tea5764_i2c_remove(struct i2c_client *client)
|
||||
{
|
||||
struct tea5764_device *radio = i2c_get_clientdata(client);
|
||||
|
||||
PDEBUG("remove");
|
||||
if (radio) {
|
||||
tea5764_power_down(radio);
|
||||
video_unregister_device(radio->videodev);
|
||||
kfree(radio);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* I2C subsystem interface */
|
||||
static const struct i2c_device_id tea5764_id[] = {
|
||||
{ "radio-tea5764", 0 },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, tea5764_id);
|
||||
|
||||
static struct i2c_driver tea5764_i2c_driver = {
|
||||
.driver = {
|
||||
.name = "radio-tea5764",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = tea5764_i2c_probe,
|
||||
.remove = __devexit_p(tea5764_i2c_remove),
|
||||
.id_table = tea5764_id,
|
||||
};
|
||||
|
||||
/* init the driver */
|
||||
static int __init tea5764_init(void)
|
||||
{
|
||||
int ret = i2c_add_driver(&tea5764_i2c_driver);
|
||||
|
||||
printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ": "
|
||||
DRIVER_DESC "\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* cleanup the driver */
|
||||
static void __exit tea5764_exit(void)
|
||||
{
|
||||
i2c_del_driver(&tea5764_i2c_driver);
|
||||
}
|
||||
|
||||
MODULE_AUTHOR(DRIVER_AUTHOR);
|
||||
MODULE_DESCRIPTION(DRIVER_DESC);
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
module_param(use_xtal, int, 1);
|
||||
MODULE_PARM_DESC(use_xtal, "Chip have a xtal connected in board");
|
||||
module_param(radio_nr, int, 0);
|
||||
MODULE_PARM_DESC(radio_nr, "video4linux device number to use");
|
||||
|
||||
module_init(tea5764_init);
|
||||
module_exit(tea5764_exit);
|
|
@ -352,26 +352,22 @@ static int vidioc_s_audio(struct file *file, void *priv,
|
|||
|
||||
static struct tt_device terratec_unit;
|
||||
|
||||
static int terratec_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int terratec_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &terratec_unit.in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int terratec_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int terratec_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &terratec_unit.in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations terratec_fops = {
|
||||
static const struct v4l2_file_operations terratec_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = terratec_exclusive_open,
|
||||
.release = terratec_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops terratec_ioctl_ops = {
|
||||
|
|
|
@ -337,26 +337,22 @@ static int vidioc_s_audio(struct file *file, void *priv,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int trust_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int trust_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int trust_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int trust_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations trust_fops = {
|
||||
static const struct v4l2_file_operations trust_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = trust_exclusive_open,
|
||||
.release = trust_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops trust_ioctl_ops = {
|
||||
|
|
|
@ -330,26 +330,22 @@ static struct typhoon_device typhoon_unit =
|
|||
.mutefreq = CONFIG_RADIO_TYPHOON_MUTEFREQ,
|
||||
};
|
||||
|
||||
static int typhoon_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int typhoon_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &typhoon_unit.in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int typhoon_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int typhoon_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &typhoon_unit.in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations typhoon_fops = {
|
||||
static const struct v4l2_file_operations typhoon_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = typhoon_exclusive_open,
|
||||
.release = typhoon_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops typhoon_ioctl_ops = {
|
||||
|
|
|
@ -401,27 +401,23 @@ static int vidioc_s_audio(struct file *file, void *priv,
|
|||
|
||||
static struct zol_device zoltrix_unit;
|
||||
|
||||
static int zoltrix_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int zoltrix_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &zoltrix_unit.in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int zoltrix_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int zoltrix_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &zoltrix_unit.in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations zoltrix_fops =
|
||||
static const struct v4l2_file_operations zoltrix_fops =
|
||||
{
|
||||
.owner = THIS_MODULE,
|
||||
.open = zoltrix_exclusive_open,
|
||||
.release = zoltrix_exclusive_release,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops zoltrix_ioctl_ops = {
|
||||
|
|
|
@ -12,7 +12,10 @@ omap2cam-objs := omap24xxcam.o omap24xxcam-dma.o
|
|||
|
||||
videodev-objs := v4l2-dev.o v4l2-ioctl.o v4l2-device.o v4l2-subdev.o
|
||||
|
||||
obj-$(CONFIG_VIDEO_DEV) += videodev.o v4l2-compat-ioctl32.o v4l2-int-device.o
|
||||
obj-$(CONFIG_VIDEO_DEV) += videodev.o v4l2-int-device.o
|
||||
ifeq ($(CONFIG_COMPAT),y)
|
||||
obj-$(CONFIG_VIDEO_DEV) += v4l2-compat-ioctl32.o
|
||||
endif
|
||||
|
||||
obj-$(CONFIG_VIDEO_V4L2_COMMON) += v4l2-common.o
|
||||
|
||||
|
|
|
@ -396,7 +396,7 @@ out_up:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int ar_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
static long ar_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct video_device *dev = video_devdata(file);
|
||||
struct ar_device *ar = video_get_drvdata(dev);
|
||||
|
@ -539,7 +539,7 @@ static int ar_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int ar_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
|
||||
static long ar_ioctl(struct file *file, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
return video_usercopy(file, cmd, arg, ar_do_ioctl);
|
||||
|
@ -744,27 +744,23 @@ void ar_release(struct video_device *vfd)
|
|||
****************************************************************************/
|
||||
static struct ar_device ardev;
|
||||
|
||||
static int ar_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int ar_exclusive_open(struct file *file)
|
||||
{
|
||||
return test_and_set_bit(0, &ardev.in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int ar_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int ar_exclusive_release(struct file *file)
|
||||
{
|
||||
clear_bit(0, &ardev.in_use);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations ar_fops = {
|
||||
static const struct v4l2_file_operations ar_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = ar_exclusive_open,
|
||||
.release = ar_exclusive_release,
|
||||
.read = ar_read,
|
||||
.ioctl = ar_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static struct video_device ar_template = {
|
||||
|
|
|
@ -2039,7 +2039,7 @@ static int bttv_log_status(struct file *file, void *f)
|
|||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int bttv_g_register(struct file *file, void *f,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct bttv_fh *fh = f;
|
||||
struct bttv *btv = fh->btv;
|
||||
|
@ -2047,18 +2047,19 @@ static int bttv_g_register(struct file *file, void *f,
|
|||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
if (!v4l2_chip_match_host(reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_host(®->match))
|
||||
return -EINVAL;
|
||||
|
||||
/* bt848 has a 12-bit register space */
|
||||
reg->reg &= 0xfff;
|
||||
reg->val = btread(reg->reg);
|
||||
reg->size = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bttv_s_register(struct file *file, void *f,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct bttv_fh *fh = f;
|
||||
struct bttv *btv = fh->btv;
|
||||
|
@ -2066,7 +2067,7 @@ static int bttv_s_register(struct file *file, void *f,
|
|||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
if (!v4l2_chip_match_host(reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_host(®->match))
|
||||
return -EINVAL;
|
||||
|
||||
/* bt848 has a 12-bit register space */
|
||||
|
@ -3208,9 +3209,9 @@ err:
|
|||
return POLLERR;
|
||||
}
|
||||
|
||||
static int bttv_open(struct inode *inode, struct file *file)
|
||||
static int bttv_open(struct file *file)
|
||||
{
|
||||
int minor = iminor(inode);
|
||||
int minor = video_devdata(file)->minor;
|
||||
struct bttv *btv = NULL;
|
||||
struct bttv_fh *fh;
|
||||
enum v4l2_buf_type type = 0;
|
||||
|
@ -3291,7 +3292,7 @@ static int bttv_open(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int bttv_release(struct inode *inode, struct file *file)
|
||||
static int bttv_release(struct file *file)
|
||||
{
|
||||
struct bttv_fh *fh = file->private_data;
|
||||
struct bttv *btv = fh->btv;
|
||||
|
@ -3346,14 +3347,12 @@ bttv_mmap(struct file *file, struct vm_area_struct *vma)
|
|||
return videobuf_mmap_mapper(bttv_queue(fh),vma);
|
||||
}
|
||||
|
||||
static const struct file_operations bttv_fops =
|
||||
static const struct v4l2_file_operations bttv_fops =
|
||||
{
|
||||
.owner = THIS_MODULE,
|
||||
.open = bttv_open,
|
||||
.release = bttv_release,
|
||||
.ioctl = video_ioctl2,
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
.llseek = no_llseek,
|
||||
.read = bttv_read,
|
||||
.mmap = bttv_mmap,
|
||||
.poll = bttv_poll,
|
||||
|
@ -3422,9 +3421,9 @@ static struct video_device bttv_video_template = {
|
|||
/* ----------------------------------------------------------------------- */
|
||||
/* radio interface */
|
||||
|
||||
static int radio_open(struct inode *inode, struct file *file)
|
||||
static int radio_open(struct file *file)
|
||||
{
|
||||
int minor = iminor(inode);
|
||||
int minor = video_devdata(file)->minor;
|
||||
struct bttv *btv = NULL;
|
||||
struct bttv_fh *fh;
|
||||
unsigned int i;
|
||||
|
@ -3467,12 +3466,13 @@ static int radio_open(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int radio_release(struct inode *inode, struct file *file)
|
||||
static int radio_release(struct file *file)
|
||||
{
|
||||
struct bttv_fh *fh = file->private_data;
|
||||
struct bttv *btv = fh->btv;
|
||||
struct rds_command cmd;
|
||||
|
||||
v4l2_prio_close(&btv->prio,&fh->prio);
|
||||
file->private_data = NULL;
|
||||
kfree(fh);
|
||||
|
||||
|
@ -3633,15 +3633,13 @@ static unsigned int radio_poll(struct file *file, poll_table *wait)
|
|||
return cmd.result;
|
||||
}
|
||||
|
||||
static const struct file_operations radio_fops =
|
||||
static const struct v4l2_file_operations radio_fops =
|
||||
{
|
||||
.owner = THIS_MODULE,
|
||||
.open = radio_open,
|
||||
.read = radio_read,
|
||||
.release = radio_release,
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
.ioctl = video_ioctl2,
|
||||
.llseek = no_llseek,
|
||||
.poll = radio_poll,
|
||||
};
|
||||
|
||||
|
|
|
@ -706,7 +706,7 @@ static long qc_capture(struct qcam_device * q, char __user *buf, unsigned long l
|
|||
* Video4linux interfacing
|
||||
*/
|
||||
|
||||
static int qcam_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
static long qcam_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct video_device *dev = video_devdata(file);
|
||||
struct qcam_device *qcam=(struct qcam_device *)dev;
|
||||
|
@ -863,7 +863,7 @@ static int qcam_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int qcam_ioctl(struct inode *inode, struct file *file,
|
||||
static long qcam_ioctl(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
return video_usercopy(file, cmd, arg, qcam_do_ioctl);
|
||||
|
@ -893,7 +893,7 @@ static ssize_t qcam_read(struct file *file, char __user *buf,
|
|||
return len;
|
||||
}
|
||||
|
||||
static int qcam_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int qcam_exclusive_open(struct file *file)
|
||||
{
|
||||
struct video_device *dev = video_devdata(file);
|
||||
struct qcam_device *qcam = (struct qcam_device *)dev;
|
||||
|
@ -901,7 +901,7 @@ static int qcam_exclusive_open(struct inode *inode, struct file *file)
|
|||
return test_and_set_bit(0, &qcam->in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int qcam_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int qcam_exclusive_release(struct file *file)
|
||||
{
|
||||
struct video_device *dev = video_devdata(file);
|
||||
struct qcam_device *qcam = (struct qcam_device *)dev;
|
||||
|
@ -910,16 +910,12 @@ static int qcam_exclusive_release(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations qcam_fops = {
|
||||
static const struct v4l2_file_operations qcam_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = qcam_exclusive_open,
|
||||
.release = qcam_exclusive_release,
|
||||
.ioctl = qcam_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.read = qcam_read,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
static struct video_device qcam_template=
|
||||
{
|
||||
|
|
|
@ -500,7 +500,7 @@ static long qc_capture(struct qcam_device *q, char __user *buf, unsigned long le
|
|||
* Video4linux interfacing
|
||||
*/
|
||||
|
||||
static int qcam_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
static long qcam_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct video_device *dev = video_devdata(file);
|
||||
struct qcam_device *qcam=(struct qcam_device *)dev;
|
||||
|
@ -665,7 +665,7 @@ static int qcam_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int qcam_ioctl(struct inode *inode, struct file *file,
|
||||
static long qcam_ioctl(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
return video_usercopy(file, cmd, arg, qcam_do_ioctl);
|
||||
|
@ -687,7 +687,7 @@ static ssize_t qcam_read(struct file *file, char __user *buf,
|
|||
return len;
|
||||
}
|
||||
|
||||
static int qcam_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int qcam_exclusive_open(struct file *file)
|
||||
{
|
||||
struct video_device *dev = video_devdata(file);
|
||||
struct qcam_device *qcam = (struct qcam_device *)dev;
|
||||
|
@ -695,7 +695,7 @@ static int qcam_exclusive_open(struct inode *inode, struct file *file)
|
|||
return test_and_set_bit(0, &qcam->in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int qcam_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int qcam_exclusive_release(struct file *file)
|
||||
{
|
||||
struct video_device *dev = video_devdata(file);
|
||||
struct qcam_device *qcam = (struct qcam_device *)dev;
|
||||
|
@ -705,16 +705,12 @@ static int qcam_exclusive_release(struct inode *inode, struct file *file)
|
|||
}
|
||||
|
||||
/* video device template */
|
||||
static const struct file_operations qcam_fops = {
|
||||
static const struct v4l2_file_operations qcam_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = qcam_exclusive_open,
|
||||
.release = qcam_exclusive_release,
|
||||
.ioctl = qcam_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.read = qcam_read,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static struct video_device qcam_template=
|
||||
|
|
|
@ -859,7 +859,7 @@ static int __cafe_cam_reset(struct cafe_camera *cam)
|
|||
*/
|
||||
static int cafe_cam_init(struct cafe_camera *cam)
|
||||
{
|
||||
struct v4l2_chip_ident chip = { V4L2_CHIP_MATCH_I2C_ADDR, 0, 0, 0 };
|
||||
struct v4l2_dbg_chip_ident chip;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&cam->s_mutex);
|
||||
|
@ -869,8 +869,9 @@ static int cafe_cam_init(struct cafe_camera *cam)
|
|||
ret = __cafe_cam_reset(cam);
|
||||
if (ret)
|
||||
goto out;
|
||||
chip.match_chip = cam->sensor->addr;
|
||||
ret = __cafe_cam_cmd(cam, VIDIOC_G_CHIP_IDENT, &chip);
|
||||
chip.match.type = V4L2_CHIP_MATCH_I2C_ADDR;
|
||||
chip.match.addr = cam->sensor->addr;
|
||||
ret = __cafe_cam_cmd(cam, VIDIOC_DBG_G_CHIP_IDENT, &chip);
|
||||
if (ret)
|
||||
goto out;
|
||||
cam->sensor_type = chip.ident;
|
||||
|
@ -1472,11 +1473,11 @@ static int cafe_v4l_mmap(struct file *filp, struct vm_area_struct *vma)
|
|||
|
||||
|
||||
|
||||
static int cafe_v4l_open(struct inode *inode, struct file *filp)
|
||||
static int cafe_v4l_open(struct file *filp)
|
||||
{
|
||||
struct cafe_camera *cam;
|
||||
|
||||
cam = cafe_find_dev(iminor(inode));
|
||||
cam = cafe_find_dev(video_devdata(filp)->minor);
|
||||
if (cam == NULL)
|
||||
return -ENODEV;
|
||||
filp->private_data = cam;
|
||||
|
@ -1494,7 +1495,7 @@ static int cafe_v4l_open(struct inode *inode, struct file *filp)
|
|||
}
|
||||
|
||||
|
||||
static int cafe_v4l_release(struct inode *inode, struct file *filp)
|
||||
static int cafe_v4l_release(struct file *filp)
|
||||
{
|
||||
struct cafe_camera *cam = filp->private_data;
|
||||
|
||||
|
@ -1759,7 +1760,7 @@ static void cafe_v4l_dev_release(struct video_device *vd)
|
|||
* clone it for specific real devices.
|
||||
*/
|
||||
|
||||
static const struct file_operations cafe_v4l_fops = {
|
||||
static const struct v4l2_file_operations cafe_v4l_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = cafe_v4l_open,
|
||||
.release = cafe_v4l_release,
|
||||
|
@ -1767,7 +1768,6 @@ static const struct file_operations cafe_v4l_fops = {
|
|||
.poll = cafe_v4l_poll,
|
||||
.mmap = cafe_v4l_mmap,
|
||||
.ioctl = video_ioctl2,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops cafe_v4l_ioctl_ops = {
|
||||
|
|
|
@ -3148,7 +3148,7 @@ static void put_cam(struct cpia_camera_ops* ops)
|
|||
}
|
||||
|
||||
/* ------------------------- V4L interface --------------------- */
|
||||
static int cpia_open(struct inode *inode, struct file *file)
|
||||
static int cpia_open(struct file *file)
|
||||
{
|
||||
struct video_device *dev = video_devdata(file);
|
||||
struct cam_data *cam = video_get_drvdata(dev);
|
||||
|
@ -3225,7 +3225,7 @@ static int cpia_open(struct inode *inode, struct file *file)
|
|||
return err;
|
||||
}
|
||||
|
||||
static int cpia_close(struct inode *inode, struct file *file)
|
||||
static int cpia_close(struct file *file)
|
||||
{
|
||||
struct video_device *dev = file->private_data;
|
||||
struct cam_data *cam = video_get_drvdata(dev);
|
||||
|
@ -3333,7 +3333,7 @@ static ssize_t cpia_read(struct file *file, char __user *buf,
|
|||
return cam->decompressed_frame.count;
|
||||
}
|
||||
|
||||
static int cpia_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
static long cpia_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct video_device *dev = file->private_data;
|
||||
struct cam_data *cam = video_get_drvdata(dev);
|
||||
|
@ -3720,7 +3720,7 @@ static int cpia_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
|||
return retval;
|
||||
}
|
||||
|
||||
static int cpia_ioctl(struct inode *inode, struct file *file,
|
||||
static long cpia_ioctl(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
return video_usercopy(file, cmd, arg, cpia_do_ioctl);
|
||||
|
@ -3780,17 +3780,13 @@ static int cpia_mmap(struct file *file, struct vm_area_struct *vma)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations cpia_fops = {
|
||||
static const struct v4l2_file_operations cpia_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = cpia_open,
|
||||
.release = cpia_close,
|
||||
.read = cpia_read,
|
||||
.mmap = cpia_mmap,
|
||||
.ioctl = cpia_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static struct video_device cpia_template = {
|
||||
|
|
|
@ -239,7 +239,7 @@ static struct v4l2_queryctrl controls[] = {
|
|||
* cpia2_open
|
||||
*
|
||||
*****************************************************************************/
|
||||
static int cpia2_open(struct inode *inode, struct file *file)
|
||||
static int cpia2_open(struct file *file)
|
||||
{
|
||||
struct camera_data *cam = video_drvdata(file);
|
||||
int retval = 0;
|
||||
|
@ -302,7 +302,7 @@ err_return:
|
|||
* cpia2_close
|
||||
*
|
||||
*****************************************************************************/
|
||||
static int cpia2_close(struct inode *inode, struct file *file)
|
||||
static int cpia2_close(struct file *file)
|
||||
{
|
||||
struct video_device *dev = video_devdata(file);
|
||||
struct camera_data *cam = video_get_drvdata(dev);
|
||||
|
@ -1572,10 +1572,10 @@ static int ioctl_dqbuf(void *arg,struct camera_data *cam, struct file *file)
|
|||
* cpia2_ioctl
|
||||
*
|
||||
*****************************************************************************/
|
||||
static int cpia2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
static long cpia2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct camera_data *cam = video_drvdata(file);
|
||||
int retval = 0;
|
||||
long retval = 0;
|
||||
|
||||
if (!cam)
|
||||
return -ENOTTY;
|
||||
|
@ -1841,7 +1841,7 @@ static int cpia2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
|||
return retval;
|
||||
}
|
||||
|
||||
static int cpia2_ioctl(struct inode *inode, struct file *file,
|
||||
static long cpia2_ioctl(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
return video_usercopy(file, cmd, arg, cpia2_do_ioctl);
|
||||
|
@ -1912,17 +1912,13 @@ static void reset_camera_struct_v4l(struct camera_data *cam)
|
|||
/***
|
||||
* The v4l video device structure initialized for this device
|
||||
***/
|
||||
static const struct file_operations fops_template = {
|
||||
static const struct v4l2_file_operations fops_template = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = cpia2_open,
|
||||
.release = cpia2_close,
|
||||
.read = cpia2_v4l_read,
|
||||
.poll = cpia2_v4l_poll,
|
||||
.ioctl = cpia2_ioctl,
|
||||
.llseek = no_llseek,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.mmap = cpia2_mmap,
|
||||
};
|
||||
|
||||
|
|
|
@ -95,25 +95,24 @@ static int cs5345_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int cs5345_g_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
||||
static int cs5345_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
if (!v4l2_chip_match_i2c_client(client,
|
||||
reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_i2c_client(client, ®->match))
|
||||
return -EINVAL;
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
reg->size = 1;
|
||||
reg->val = cs5345_read(sd, reg->reg & 0x1f);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cs5345_s_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
||||
static int cs5345_s_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
if (!v4l2_chip_match_i2c_client(client,
|
||||
reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_i2c_client(client, ®->match))
|
||||
return -EINVAL;
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
@ -122,7 +121,7 @@ static int cs5345_s_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
|||
}
|
||||
#endif
|
||||
|
||||
static int cs5345_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_chip_ident *chip)
|
||||
static int cs5345_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@ static int cs53l32a_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cs53l32a_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_chip_ident *chip)
|
||||
static int cs53l32a_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
|
|
|
@ -552,7 +552,7 @@ void cx18_stop_capture(struct cx18_open_id *id, int gop_end)
|
|||
}
|
||||
}
|
||||
|
||||
int cx18_v4l2_close(struct inode *inode, struct file *filp)
|
||||
int cx18_v4l2_close(struct file *filp)
|
||||
{
|
||||
struct cx18_open_id *id = filp->private_data;
|
||||
struct cx18 *cx = id->cx;
|
||||
|
@ -650,12 +650,12 @@ static int cx18_serialized_open(struct cx18_stream *s, struct file *filp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int cx18_v4l2_open(struct inode *inode, struct file *filp)
|
||||
int cx18_v4l2_open(struct file *filp)
|
||||
{
|
||||
int res, x, y = 0;
|
||||
struct cx18 *cx = NULL;
|
||||
struct cx18_stream *s = NULL;
|
||||
int minor = iminor(inode);
|
||||
int minor = video_devdata(filp)->minor;
|
||||
|
||||
/* Find which card this open was on */
|
||||
spin_lock(&cx18_cards_lock);
|
||||
|
|
|
@ -22,12 +22,12 @@
|
|||
*/
|
||||
|
||||
/* Testing/Debugging */
|
||||
int cx18_v4l2_open(struct inode *inode, struct file *filp);
|
||||
int cx18_v4l2_open(struct file *filp);
|
||||
ssize_t cx18_v4l2_read(struct file *filp, char __user *buf, size_t count,
|
||||
loff_t *pos);
|
||||
ssize_t cx18_v4l2_write(struct file *filp, const char __user *buf, size_t count,
|
||||
loff_t *pos);
|
||||
int cx18_v4l2_close(struct inode *inode, struct file *filp);
|
||||
int cx18_v4l2_close(struct file *filp);
|
||||
unsigned int cx18_v4l2_enc_poll(struct file *filp, poll_table *wait);
|
||||
int cx18_start_capture(struct cx18_open_id *id);
|
||||
void cx18_stop_capture(struct cx18_open_id *id, int gop_end);
|
||||
|
|
|
@ -242,7 +242,7 @@ int cx18_call_i2c_client(struct cx18 *cx, int addr, unsigned cmd, void *arg)
|
|||
return retval;
|
||||
}
|
||||
}
|
||||
if (cmd != VIDIOC_G_CHIP_IDENT)
|
||||
if (cmd != VIDIOC_DBG_G_CHIP_IDENT)
|
||||
CX18_ERR("i2c addr 0x%02x not found for cmd 0x%x!\n",
|
||||
addr, cmd);
|
||||
return -ENODEV;
|
||||
|
@ -268,17 +268,6 @@ static int cx18_i2c_id_addr(struct cx18 *cx, u32 id)
|
|||
return retval;
|
||||
}
|
||||
|
||||
/* Find the i2c device name matching the DRIVERID */
|
||||
static const char *cx18_i2c_id_name(u32 id)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(hw_driverids); i++)
|
||||
if (hw_driverids[i] == id)
|
||||
return hw_devicenames[i];
|
||||
return "unknown device";
|
||||
}
|
||||
|
||||
/* Find the i2c device name matching the CX18_HW_ flag */
|
||||
static const char *cx18_i2c_hw_name(u32 hw)
|
||||
{
|
||||
|
@ -326,21 +315,6 @@ int cx18_i2c_hw(struct cx18 *cx, u32 hw, unsigned int cmd, void *arg)
|
|||
return cx18_call_i2c_client(cx, addr, cmd, arg);
|
||||
}
|
||||
|
||||
/* Calls i2c device based on I2C driver ID. */
|
||||
int cx18_i2c_id(struct cx18 *cx, u32 id, unsigned int cmd, void *arg)
|
||||
{
|
||||
int addr;
|
||||
|
||||
addr = cx18_i2c_id_addr(cx, id);
|
||||
if (addr < 0) {
|
||||
if (cmd != VIDIOC_G_CHIP_IDENT)
|
||||
CX18_ERR("i2c ID 0x%08x (%s) not found for cmd 0x%x!\n",
|
||||
id, cx18_i2c_id_name(id), cmd);
|
||||
return addr;
|
||||
}
|
||||
return cx18_call_i2c_client(cx, addr, cmd, arg);
|
||||
}
|
||||
|
||||
/* broadcast cmd for all I2C clients and for the gpio subsystem */
|
||||
void cx18_call_i2c_clients(struct cx18 *cx, unsigned int cmd, void *arg)
|
||||
{
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
int cx18_i2c_hw_addr(struct cx18 *cx, u32 hw);
|
||||
int cx18_i2c_hw(struct cx18 *cx, u32 hw, unsigned int cmd, void *arg);
|
||||
int cx18_i2c_id(struct cx18 *cx, u32 id, unsigned int cmd, void *arg);
|
||||
int cx18_call_i2c_client(struct cx18 *cx, int addr, unsigned cmd, void *arg);
|
||||
void cx18_call_i2c_clients(struct cx18 *cx, unsigned int cmd, void *arg);
|
||||
int cx18_i2c_register(struct cx18 *cx, unsigned idx);
|
||||
|
|
|
@ -254,30 +254,24 @@ static int cx18_s_fmt_sliced_vbi_cap(struct file *file, void *fh,
|
|||
}
|
||||
|
||||
static int cx18_g_chip_ident(struct file *file, void *fh,
|
||||
struct v4l2_chip_ident *chip)
|
||||
struct v4l2_dbg_chip_ident *chip)
|
||||
{
|
||||
struct cx18 *cx = ((struct cx18_open_id *)fh)->cx;
|
||||
|
||||
chip->ident = V4L2_IDENT_NONE;
|
||||
chip->revision = 0;
|
||||
if (chip->match_type == V4L2_CHIP_MATCH_HOST) {
|
||||
if (v4l2_chip_match_host(chip->match_type, chip->match_chip))
|
||||
chip->ident = V4L2_IDENT_CX23418;
|
||||
if (v4l2_chip_match_host(&chip->match)) {
|
||||
chip->ident = V4L2_IDENT_CX23418;
|
||||
return 0;
|
||||
}
|
||||
if (chip->match_type == V4L2_CHIP_MATCH_I2C_DRIVER)
|
||||
return cx18_i2c_id(cx, chip->match_chip, VIDIOC_G_CHIP_IDENT,
|
||||
chip);
|
||||
if (chip->match_type == V4L2_CHIP_MATCH_I2C_ADDR)
|
||||
return cx18_call_i2c_client(cx, chip->match_chip,
|
||||
VIDIOC_G_CHIP_IDENT, chip);
|
||||
return -EINVAL;
|
||||
cx18_call_i2c_clients(cx, VIDIOC_DBG_G_CHIP_IDENT, chip);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int cx18_cxc(struct cx18 *cx, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct v4l2_register *regs = arg;
|
||||
struct v4l2_dbg_register *regs = arg;
|
||||
unsigned long flags;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
|
@ -286,6 +280,7 @@ static int cx18_cxc(struct cx18 *cx, unsigned int cmd, void *arg)
|
|||
return -EINVAL;
|
||||
|
||||
spin_lock_irqsave(&cx18_cards_lock, flags);
|
||||
regs->size = 4;
|
||||
if (cmd == VIDIOC_DBG_G_REGISTER)
|
||||
regs->val = cx18_read_enc(cx, regs->reg);
|
||||
else
|
||||
|
@ -295,31 +290,25 @@ static int cx18_cxc(struct cx18 *cx, unsigned int cmd, void *arg)
|
|||
}
|
||||
|
||||
static int cx18_g_register(struct file *file, void *fh,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct cx18 *cx = ((struct cx18_open_id *)fh)->cx;
|
||||
|
||||
if (v4l2_chip_match_host(reg->match_type, reg->match_chip))
|
||||
if (v4l2_chip_match_host(®->match))
|
||||
return cx18_cxc(cx, VIDIOC_DBG_G_REGISTER, reg);
|
||||
if (reg->match_type == V4L2_CHIP_MATCH_I2C_DRIVER)
|
||||
return cx18_i2c_id(cx, reg->match_chip, VIDIOC_DBG_G_REGISTER,
|
||||
reg);
|
||||
return cx18_call_i2c_client(cx, reg->match_chip, VIDIOC_DBG_G_REGISTER,
|
||||
reg);
|
||||
cx18_call_i2c_clients(cx, VIDIOC_DBG_G_REGISTER, reg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cx18_s_register(struct file *file, void *fh,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct cx18 *cx = ((struct cx18_open_id *)fh)->cx;
|
||||
|
||||
if (v4l2_chip_match_host(reg->match_type, reg->match_chip))
|
||||
if (v4l2_chip_match_host(®->match))
|
||||
return cx18_cxc(cx, VIDIOC_DBG_S_REGISTER, reg);
|
||||
if (reg->match_type == V4L2_CHIP_MATCH_I2C_DRIVER)
|
||||
return cx18_i2c_id(cx, reg->match_chip, VIDIOC_DBG_S_REGISTER,
|
||||
reg);
|
||||
return cx18_call_i2c_client(cx, reg->match_chip, VIDIOC_DBG_S_REGISTER,
|
||||
reg);
|
||||
cx18_call_i2c_clients(cx, VIDIOC_DBG_S_REGISTER, reg);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -755,7 +744,7 @@ static int cx18_log_status(struct file *file, void *fh)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx18_default(struct file *file, void *fh, int cmd, void *arg)
|
||||
static long cx18_default(struct file *file, void *fh, int cmd, void *arg)
|
||||
{
|
||||
struct cx18 *cx = ((struct cx18_open_id *)fh)->cx;
|
||||
|
||||
|
@ -783,19 +772,19 @@ static int cx18_default(struct file *file, void *fh, int cmd, void *arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int cx18_v4l2_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
|
||||
long cx18_v4l2_ioctl(struct file *filp, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
struct video_device *vfd = video_devdata(filp);
|
||||
struct cx18_open_id *id = (struct cx18_open_id *)filp->private_data;
|
||||
struct cx18 *cx = id->cx;
|
||||
int res;
|
||||
long res;
|
||||
|
||||
mutex_lock(&cx->serialize_lock);
|
||||
|
||||
if (cx18_debug & CX18_DBGFLG_IOCTL)
|
||||
vfd->debug = V4L2_DEBUG_IOCTL | V4L2_DEBUG_IOCTL_ARG;
|
||||
res = video_ioctl2(inode, filp, cmd, arg);
|
||||
res = video_ioctl2(filp, cmd, arg);
|
||||
vfd->debug = 0;
|
||||
mutex_unlock(&cx->serialize_lock);
|
||||
return res;
|
||||
|
|
|
@ -29,5 +29,5 @@ void cx18_set_funcs(struct video_device *vdev);
|
|||
int cx18_s_std(struct file *file, void *fh, v4l2_std_id *std);
|
||||
int cx18_s_frequency(struct file *file, void *fh, struct v4l2_frequency *vf);
|
||||
int cx18_s_input(struct file *file, void *fh, unsigned int inp);
|
||||
int cx18_v4l2_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
|
||||
long cx18_v4l2_ioctl(struct file *filp, unsigned int cmd,
|
||||
unsigned long arg);
|
||||
|
|
|
@ -37,13 +37,12 @@
|
|||
|
||||
#define CX18_DSP0_INTERRUPT_MASK 0xd0004C
|
||||
|
||||
static struct file_operations cx18_v4l2_enc_fops = {
|
||||
static struct v4l2_file_operations cx18_v4l2_enc_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.read = cx18_v4l2_read,
|
||||
.open = cx18_v4l2_open,
|
||||
/* FIXME change to video_ioctl2 if serialization lock can be removed */
|
||||
.ioctl = cx18_v4l2_ioctl,
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
.release = cx18_v4l2_close,
|
||||
.poll = cx18_v4l2_enc_poll,
|
||||
};
|
||||
|
@ -61,49 +60,41 @@ static struct {
|
|||
int num_offset;
|
||||
int dma;
|
||||
enum v4l2_buf_type buf_type;
|
||||
struct file_operations *fops;
|
||||
} cx18_stream_info[] = {
|
||||
{ /* CX18_ENC_STREAM_TYPE_MPG */
|
||||
"encoder MPEG",
|
||||
VFL_TYPE_GRABBER, 0,
|
||||
PCI_DMA_FROMDEVICE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
|
||||
&cx18_v4l2_enc_fops
|
||||
},
|
||||
{ /* CX18_ENC_STREAM_TYPE_TS */
|
||||
"TS",
|
||||
VFL_TYPE_GRABBER, -1,
|
||||
PCI_DMA_FROMDEVICE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
|
||||
&cx18_v4l2_enc_fops
|
||||
},
|
||||
{ /* CX18_ENC_STREAM_TYPE_YUV */
|
||||
"encoder YUV",
|
||||
VFL_TYPE_GRABBER, CX18_V4L2_ENC_YUV_OFFSET,
|
||||
PCI_DMA_FROMDEVICE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
|
||||
&cx18_v4l2_enc_fops
|
||||
},
|
||||
{ /* CX18_ENC_STREAM_TYPE_VBI */
|
||||
"encoder VBI",
|
||||
VFL_TYPE_VBI, 0,
|
||||
PCI_DMA_FROMDEVICE, V4L2_BUF_TYPE_VBI_CAPTURE,
|
||||
&cx18_v4l2_enc_fops
|
||||
},
|
||||
{ /* CX18_ENC_STREAM_TYPE_PCM */
|
||||
"encoder PCM audio",
|
||||
VFL_TYPE_GRABBER, CX18_V4L2_ENC_PCM_OFFSET,
|
||||
PCI_DMA_FROMDEVICE, V4L2_BUF_TYPE_PRIVATE,
|
||||
&cx18_v4l2_enc_fops
|
||||
},
|
||||
{ /* CX18_ENC_STREAM_TYPE_IDX */
|
||||
"encoder IDX",
|
||||
VFL_TYPE_GRABBER, -1,
|
||||
PCI_DMA_FROMDEVICE, V4L2_BUF_TYPE_VIDEO_CAPTURE,
|
||||
&cx18_v4l2_enc_fops
|
||||
},
|
||||
{ /* CX18_ENC_STREAM_TYPE_RAD */
|
||||
"encoder radio",
|
||||
VFL_TYPE_RADIO, 0,
|
||||
PCI_DMA_NONE, V4L2_BUF_TYPE_PRIVATE,
|
||||
&cx18_v4l2_enc_fops
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -184,7 +175,7 @@ static int cx18_prep_dev(struct cx18 *cx, int type)
|
|||
|
||||
s->v4l2dev->num = num;
|
||||
s->v4l2dev->parent = &cx->dev->dev;
|
||||
s->v4l2dev->fops = cx18_stream_info[type].fops;
|
||||
s->v4l2dev->fops = &cx18_v4l2_enc_fops;
|
||||
s->v4l2dev->release = video_device_release;
|
||||
s->v4l2dev->tvnorms = V4L2_STD_ALL;
|
||||
cx18_set_funcs(s->v4l2dev);
|
||||
|
|
|
@ -1027,12 +1027,13 @@ static int cx23885_initialize_codec(struct cx23885_dev *dev)
|
|||
printk(KERN_ERR "%s() f/w load failed\n", __func__);
|
||||
return retval;
|
||||
}
|
||||
dev->cx23417_mailbox = cx23885_find_mailbox(dev);
|
||||
if (dev->cx23417_mailbox < 0) {
|
||||
retval = cx23885_find_mailbox(dev);
|
||||
if (retval < 0) {
|
||||
printk(KERN_ERR "%s() mailbox < 0, error\n",
|
||||
__func__);
|
||||
return -1;
|
||||
}
|
||||
dev->cx23417_mailbox = retval;
|
||||
retval = cx23885_api_cmd(dev, CX2341X_ENC_PING_FW, 0, 0);
|
||||
if (retval < 0) {
|
||||
printk(KERN_ERR
|
||||
|
@ -1573,9 +1574,9 @@ static int vidioc_queryctrl(struct file *file, void *priv,
|
|||
return cx23885_queryctrl(dev, c);
|
||||
}
|
||||
|
||||
static int mpeg_open(struct inode *inode, struct file *file)
|
||||
static int mpeg_open(struct file *file)
|
||||
{
|
||||
int minor = iminor(inode);
|
||||
int minor = video_devdata(file)->minor;
|
||||
struct cx23885_dev *h, *dev = NULL;
|
||||
struct list_head *list;
|
||||
struct cx23885_fh *fh;
|
||||
|
@ -1617,7 +1618,7 @@ static int mpeg_open(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mpeg_release(struct inode *inode, struct file *file)
|
||||
static int mpeg_release(struct file *file)
|
||||
{
|
||||
struct cx23885_fh *fh = file->private_data;
|
||||
struct cx23885_dev *dev = fh->dev;
|
||||
|
@ -1694,15 +1695,13 @@ static int mpeg_mmap(struct file *file, struct vm_area_struct *vma)
|
|||
return videobuf_mmap_mapper(&fh->mpegq, vma);
|
||||
}
|
||||
|
||||
static struct file_operations mpeg_fops = {
|
||||
static struct v4l2_file_operations mpeg_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = mpeg_open,
|
||||
.release = mpeg_release,
|
||||
.read = mpeg_read,
|
||||
.poll = mpeg_poll,
|
||||
.mmap = mpeg_mmap,
|
||||
.ioctl = video_ioctl2,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops mpeg_ioctl_ops = {
|
||||
|
|
|
@ -718,9 +718,9 @@ static int get_resource(struct cx23885_fh *fh)
|
|||
}
|
||||
}
|
||||
|
||||
static int video_open(struct inode *inode, struct file *file)
|
||||
static int video_open(struct file *file)
|
||||
{
|
||||
int minor = iminor(inode);
|
||||
int minor = video_devdata(file)->minor;
|
||||
struct cx23885_dev *h, *dev = NULL;
|
||||
struct cx23885_fh *fh;
|
||||
struct list_head *list;
|
||||
|
@ -834,7 +834,7 @@ static unsigned int video_poll(struct file *file,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int video_release(struct inode *inode, struct file *file)
|
||||
static int video_release(struct file *file)
|
||||
{
|
||||
struct cx23885_fh *fh = file->private_data;
|
||||
struct cx23885_dev *dev = fh->dev;
|
||||
|
@ -1326,11 +1326,11 @@ static int vidioc_s_frequency(struct file *file, void *priv,
|
|||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int vidioc_g_register(struct file *file, void *fh,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct cx23885_dev *dev = ((struct cx23885_fh *)fh)->dev;
|
||||
|
||||
if (!v4l2_chip_match_host(reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_host(®->match))
|
||||
return -EINVAL;
|
||||
|
||||
cx23885_call_i2c_clients(&dev->i2c_bus[2], VIDIOC_DBG_G_REGISTER, reg);
|
||||
|
@ -1339,11 +1339,11 @@ static int vidioc_g_register(struct file *file, void *fh,
|
|||
}
|
||||
|
||||
static int vidioc_s_register(struct file *file, void *fh,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct cx23885_dev *dev = ((struct cx23885_fh *)fh)->dev;
|
||||
|
||||
if (!v4l2_chip_match_host(reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_host(®->match))
|
||||
return -EINVAL;
|
||||
|
||||
cx23885_call_i2c_clients(&dev->i2c_bus[2], VIDIOC_DBG_S_REGISTER, reg);
|
||||
|
@ -1422,7 +1422,7 @@ int cx23885_video_irq(struct cx23885_dev *dev, u32 status)
|
|||
/* ----------------------------------------------------------- */
|
||||
/* exported stuff */
|
||||
|
||||
static const struct file_operations video_fops = {
|
||||
static const struct v4l2_file_operations video_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = video_open,
|
||||
.release = video_release,
|
||||
|
@ -1430,8 +1430,6 @@ static const struct file_operations video_fops = {
|
|||
.poll = video_poll,
|
||||
.mmap = video_mmap,
|
||||
.ioctl = video_ioctl2,
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops video_ioctl_ops = {
|
||||
|
@ -1479,13 +1477,11 @@ static struct video_device cx23885_video_template = {
|
|||
.current_norm = V4L2_STD_NTSC_M,
|
||||
};
|
||||
|
||||
static const struct file_operations radio_fops = {
|
||||
static const struct v4l2_file_operations radio_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = video_open,
|
||||
.release = video_release,
|
||||
.ioctl = video_ioctl2,
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1120,25 +1120,24 @@ static int cx25840_init(struct v4l2_subdev *sd, u32 val)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int cx25840_g_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
||||
static int cx25840_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
if (!v4l2_chip_match_i2c_client(client,
|
||||
reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_i2c_client(client, ®->match))
|
||||
return -EINVAL;
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
reg->size = 1;
|
||||
reg->val = cx25840_read(client, reg->reg & 0x0fff);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cx25840_s_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
||||
static int cx25840_s_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
if (!v4l2_chip_match_i2c_client(client,
|
||||
reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_i2c_client(client, ®->match))
|
||||
return -EINVAL;
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
@ -1362,7 +1361,7 @@ static int cx25840_reset(struct v4l2_subdev *sd, u32 val)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cx25840_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_chip_ident *chip)
|
||||
static int cx25840_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip)
|
||||
{
|
||||
struct cx25840_state *state = to_state(sd);
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
|
|
@ -1049,16 +1049,16 @@ static int vidioc_s_std (struct file *file, void *priv, v4l2_std_id *id)
|
|||
|
||||
/* FIXME: cx88_ioctl_hook not implemented */
|
||||
|
||||
static int mpeg_open(struct inode *inode, struct file *file)
|
||||
static int mpeg_open(struct file *file)
|
||||
{
|
||||
int minor = iminor(inode);
|
||||
int minor = video_devdata(file)->minor;
|
||||
struct cx8802_dev *dev = NULL;
|
||||
struct cx8802_fh *fh;
|
||||
struct cx8802_driver *drv = NULL;
|
||||
int err;
|
||||
|
||||
lock_kernel();
|
||||
dev = cx8802_get_device(inode);
|
||||
dev = cx8802_get_device(minor);
|
||||
|
||||
dprintk( 1, "%s\n", __func__);
|
||||
|
||||
|
@ -1114,7 +1114,7 @@ static int mpeg_open(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mpeg_release(struct inode *inode, struct file *file)
|
||||
static int mpeg_release(struct file *file)
|
||||
{
|
||||
struct cx8802_fh *fh = file->private_data;
|
||||
struct cx8802_dev *dev = fh->dev;
|
||||
|
@ -1132,7 +1132,7 @@ static int mpeg_release(struct inode *inode, struct file *file)
|
|||
kfree(fh);
|
||||
|
||||
/* Make sure we release the hardware */
|
||||
dev = cx8802_get_device(inode);
|
||||
dev = cx8802_get_device(video_devdata(file)->minor);
|
||||
if (dev == NULL)
|
||||
return -ENODEV;
|
||||
|
||||
|
@ -1178,7 +1178,7 @@ mpeg_mmap(struct file *file, struct vm_area_struct * vma)
|
|||
return videobuf_mmap_mapper(&fh->mpegq, vma);
|
||||
}
|
||||
|
||||
static const struct file_operations mpeg_fops =
|
||||
static const struct v4l2_file_operations mpeg_fops =
|
||||
{
|
||||
.owner = THIS_MODULE,
|
||||
.open = mpeg_open,
|
||||
|
@ -1187,7 +1187,6 @@ static const struct file_operations mpeg_fops =
|
|||
.poll = mpeg_poll,
|
||||
.mmap = mpeg_mmap,
|
||||
.ioctl = video_ioctl2,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops mpeg_ioctl_ops = {
|
||||
|
|
|
@ -578,9 +578,8 @@ static int cx8802_resume_common(struct pci_dev *pci_dev)
|
|||
|
||||
#if defined(CONFIG_VIDEO_CX88_BLACKBIRD) || \
|
||||
defined(CONFIG_VIDEO_CX88_BLACKBIRD_MODULE)
|
||||
struct cx8802_dev * cx8802_get_device(struct inode *inode)
|
||||
struct cx8802_dev *cx8802_get_device(int minor)
|
||||
{
|
||||
int minor = iminor(inode);
|
||||
struct cx8802_dev *dev;
|
||||
|
||||
list_for_each_entry(dev, &cx8802_devlist, devlist)
|
||||
|
|
|
@ -757,9 +757,9 @@ static int get_ressource(struct cx8800_fh *fh)
|
|||
}
|
||||
}
|
||||
|
||||
static int video_open(struct inode *inode, struct file *file)
|
||||
static int video_open(struct file *file)
|
||||
{
|
||||
int minor = iminor(inode);
|
||||
int minor = video_devdata(file)->minor;
|
||||
struct cx8800_dev *h,*dev = NULL;
|
||||
struct cx88_core *core;
|
||||
struct cx8800_fh *fh;
|
||||
|
@ -904,7 +904,7 @@ video_poll(struct file *file, struct poll_table_struct *wait)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int video_release(struct inode *inode, struct file *file)
|
||||
static int video_release(struct file *file)
|
||||
{
|
||||
struct cx8800_fh *fh = file->private_data;
|
||||
struct cx8800_dev *dev = fh->dev;
|
||||
|
@ -1447,25 +1447,26 @@ static int vidioc_s_frequency (struct file *file, void *priv,
|
|||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int vidioc_g_register (struct file *file, void *fh,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct cx88_core *core = ((struct cx8800_fh*)fh)->dev->core;
|
||||
|
||||
if (!v4l2_chip_match_host(reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_host(®->match))
|
||||
return -EINVAL;
|
||||
/* cx2388x has a 24-bit register space */
|
||||
reg->val = cx_read(reg->reg&0xffffff);
|
||||
reg->val = cx_read(reg->reg & 0xffffff);
|
||||
reg->size = 4;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vidioc_s_register (struct file *file, void *fh,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct cx88_core *core = ((struct cx8800_fh*)fh)->dev->core;
|
||||
|
||||
if (!v4l2_chip_match_host(reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_host(®->match))
|
||||
return -EINVAL;
|
||||
cx_write(reg->reg&0xffffff, reg->val);
|
||||
cx_write(reg->reg & 0xffffff, reg->val);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
@ -1693,7 +1694,7 @@ static irqreturn_t cx8800_irq(int irq, void *dev_id)
|
|||
/* ----------------------------------------------------------- */
|
||||
/* exported stuff */
|
||||
|
||||
static const struct file_operations video_fops =
|
||||
static const struct v4l2_file_operations video_fops =
|
||||
{
|
||||
.owner = THIS_MODULE,
|
||||
.open = video_open,
|
||||
|
@ -1702,8 +1703,6 @@ static const struct file_operations video_fops =
|
|||
.poll = video_poll,
|
||||
.mmap = video_mmap,
|
||||
.ioctl = video_ioctl2,
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops video_ioctl_ops = {
|
||||
|
@ -1752,14 +1751,12 @@ static struct video_device cx8800_video_template = {
|
|||
.current_norm = V4L2_STD_NTSC_M,
|
||||
};
|
||||
|
||||
static const struct file_operations radio_fops =
|
||||
static const struct v4l2_file_operations radio_fops =
|
||||
{
|
||||
.owner = THIS_MODULE,
|
||||
.open = video_open,
|
||||
.release = video_release,
|
||||
.ioctl = video_ioctl2,
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops radio_ioctl_ops = {
|
||||
|
|
|
@ -643,7 +643,7 @@ int cx88_audio_thread(void *data);
|
|||
|
||||
int cx8802_register_driver(struct cx8802_driver *drv);
|
||||
int cx8802_unregister_driver(struct cx8802_driver *drv);
|
||||
struct cx8802_dev * cx8802_get_device(struct inode *inode);
|
||||
struct cx8802_dev *cx8802_get_device(int minor);
|
||||
struct cx8802_driver * cx8802_get_driver(struct cx8802_dev *dev, enum cx88_board_type btype);
|
||||
|
||||
/* ----------------------------------------------------------- */
|
||||
|
|
|
@ -62,9 +62,9 @@ static int em28xx_isoc_audio_deinit(struct em28xx *dev)
|
|||
|
||||
dprintk("Stopping isoc\n");
|
||||
for (i = 0; i < EM28XX_AUDIO_BUFS; i++) {
|
||||
usb_unlink_urb(dev->adev->urb[i]);
|
||||
usb_free_urb(dev->adev->urb[i]);
|
||||
dev->adev->urb[i] = NULL;
|
||||
usb_unlink_urb(dev->adev.urb[i]);
|
||||
usb_free_urb(dev->adev.urb[i]);
|
||||
dev->adev.urb[i] = NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -81,8 +81,8 @@ static void em28xx_audio_isocirq(struct urb *urb)
|
|||
unsigned int stride;
|
||||
struct snd_pcm_substream *substream;
|
||||
struct snd_pcm_runtime *runtime;
|
||||
if (dev->adev->capture_pcm_substream) {
|
||||
substream = dev->adev->capture_pcm_substream;
|
||||
if (dev->adev.capture_pcm_substream) {
|
||||
substream = dev->adev.capture_pcm_substream;
|
||||
runtime = substream->runtime;
|
||||
stride = runtime->frame_bits >> 3;
|
||||
|
||||
|
@ -95,7 +95,7 @@ static void em28xx_audio_isocirq(struct urb *urb)
|
|||
if (!length)
|
||||
continue;
|
||||
|
||||
oldptr = dev->adev->hwptr_done_capture;
|
||||
oldptr = dev->adev.hwptr_done_capture;
|
||||
if (oldptr + length >= runtime->buffer_size) {
|
||||
unsigned int cnt =
|
||||
runtime->buffer_size - oldptr;
|
||||
|
@ -110,16 +110,16 @@ static void em28xx_audio_isocirq(struct urb *urb)
|
|||
|
||||
snd_pcm_stream_lock(substream);
|
||||
|
||||
dev->adev->hwptr_done_capture += length;
|
||||
if (dev->adev->hwptr_done_capture >=
|
||||
dev->adev.hwptr_done_capture += length;
|
||||
if (dev->adev.hwptr_done_capture >=
|
||||
runtime->buffer_size)
|
||||
dev->adev->hwptr_done_capture -=
|
||||
dev->adev.hwptr_done_capture -=
|
||||
runtime->buffer_size;
|
||||
|
||||
dev->adev->capture_transfer_done += length;
|
||||
if (dev->adev->capture_transfer_done >=
|
||||
dev->adev.capture_transfer_done += length;
|
||||
if (dev->adev.capture_transfer_done >=
|
||||
runtime->period_size) {
|
||||
dev->adev->capture_transfer_done -=
|
||||
dev->adev.capture_transfer_done -=
|
||||
runtime->period_size;
|
||||
period_elapsed = 1;
|
||||
}
|
||||
|
@ -131,7 +131,7 @@ static void em28xx_audio_isocirq(struct urb *urb)
|
|||
}
|
||||
urb->status = 0;
|
||||
|
||||
if (dev->adev->shutdown)
|
||||
if (dev->adev.shutdown)
|
||||
return;
|
||||
|
||||
status = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
|
@ -154,17 +154,17 @@ static int em28xx_init_audio_isoc(struct em28xx *dev)
|
|||
struct urb *urb;
|
||||
int j, k;
|
||||
|
||||
dev->adev->transfer_buffer[i] = kmalloc(sb_size, GFP_ATOMIC);
|
||||
if (!dev->adev->transfer_buffer[i])
|
||||
dev->adev.transfer_buffer[i] = kmalloc(sb_size, GFP_ATOMIC);
|
||||
if (!dev->adev.transfer_buffer[i])
|
||||
return -ENOMEM;
|
||||
|
||||
memset(dev->adev->transfer_buffer[i], 0x80, sb_size);
|
||||
memset(dev->adev.transfer_buffer[i], 0x80, sb_size);
|
||||
urb = usb_alloc_urb(EM28XX_NUM_AUDIO_PACKETS, GFP_ATOMIC);
|
||||
if (!urb) {
|
||||
em28xx_errdev("usb_alloc_urb failed!\n");
|
||||
for (j = 0; j < i; j++) {
|
||||
usb_free_urb(dev->adev->urb[j]);
|
||||
kfree(dev->adev->transfer_buffer[j]);
|
||||
usb_free_urb(dev->adev.urb[j]);
|
||||
kfree(dev->adev.transfer_buffer[j]);
|
||||
}
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
@ -173,7 +173,7 @@ static int em28xx_init_audio_isoc(struct em28xx *dev)
|
|||
urb->context = dev;
|
||||
urb->pipe = usb_rcvisocpipe(dev->udev, 0x83);
|
||||
urb->transfer_flags = URB_ISO_ASAP;
|
||||
urb->transfer_buffer = dev->adev->transfer_buffer[i];
|
||||
urb->transfer_buffer = dev->adev.transfer_buffer[i];
|
||||
urb->interval = 1;
|
||||
urb->complete = em28xx_audio_isocirq;
|
||||
urb->number_of_packets = EM28XX_NUM_AUDIO_PACKETS;
|
||||
|
@ -185,11 +185,11 @@ static int em28xx_init_audio_isoc(struct em28xx *dev)
|
|||
urb->iso_frame_desc[j].length =
|
||||
EM28XX_AUDIO_MAX_PACKET_SIZE;
|
||||
}
|
||||
dev->adev->urb[i] = urb;
|
||||
dev->adev.urb[i] = urb;
|
||||
}
|
||||
|
||||
for (i = 0; i < EM28XX_AUDIO_BUFS; i++) {
|
||||
errCode = usb_submit_urb(dev->adev->urb[i], GFP_ATOMIC);
|
||||
errCode = usb_submit_urb(dev->adev.urb[i], GFP_ATOMIC);
|
||||
if (errCode) {
|
||||
em28xx_isoc_audio_deinit(dev);
|
||||
|
||||
|
@ -202,16 +202,16 @@ static int em28xx_init_audio_isoc(struct em28xx *dev)
|
|||
|
||||
static int em28xx_cmd(struct em28xx *dev, int cmd, int arg)
|
||||
{
|
||||
dprintk("%s transfer\n", (dev->adev->capture_stream == STREAM_ON)?
|
||||
dprintk("%s transfer\n", (dev->adev.capture_stream == STREAM_ON) ?
|
||||
"stop" : "start");
|
||||
|
||||
switch (cmd) {
|
||||
case EM28XX_CAPTURE_STREAM_EN:
|
||||
if (dev->adev->capture_stream == STREAM_OFF && arg == 1) {
|
||||
dev->adev->capture_stream = STREAM_ON;
|
||||
if (dev->adev.capture_stream == STREAM_OFF && arg == 1) {
|
||||
dev->adev.capture_stream = STREAM_ON;
|
||||
em28xx_init_audio_isoc(dev);
|
||||
} else if (dev->adev->capture_stream == STREAM_ON && arg == 0) {
|
||||
dev->adev->capture_stream = STREAM_OFF;
|
||||
} else if (dev->adev.capture_stream == STREAM_ON && arg == 0) {
|
||||
dev->adev.capture_stream = STREAM_OFF;
|
||||
em28xx_isoc_audio_deinit(dev);
|
||||
} else {
|
||||
printk(KERN_ERR "An underrun very likely occurred. "
|
||||
|
@ -289,17 +289,17 @@ static int snd_em28xx_capture_open(struct snd_pcm_substream *substream)
|
|||
goto err;
|
||||
|
||||
runtime->hw = snd_em28xx_hw_capture;
|
||||
if (dev->alt == 0 && dev->adev->users == 0) {
|
||||
if (dev->alt == 0 && dev->adev.users == 0) {
|
||||
int errCode;
|
||||
dev->alt = 7;
|
||||
errCode = usb_set_interface(dev->udev, 0, 7);
|
||||
dprintk("changing alternate number to 7\n");
|
||||
}
|
||||
|
||||
dev->adev->users++;
|
||||
dev->adev.users++;
|
||||
|
||||
snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
|
||||
dev->adev->capture_pcm_substream = substream;
|
||||
dev->adev.capture_pcm_substream = substream;
|
||||
runtime->private_data = dev;
|
||||
|
||||
return 0;
|
||||
|
@ -311,7 +311,7 @@ err:
|
|||
static int snd_em28xx_pcm_close(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct em28xx *dev = snd_pcm_substream_chip(substream);
|
||||
dev->adev->users--;
|
||||
dev->adev.users--;
|
||||
|
||||
dprintk("closing device\n");
|
||||
|
||||
|
@ -320,10 +320,10 @@ static int snd_em28xx_pcm_close(struct snd_pcm_substream *substream)
|
|||
em28xx_audio_analog_set(dev);
|
||||
mutex_unlock(&dev->lock);
|
||||
|
||||
if (dev->adev->users == 0 && dev->adev->shutdown == 1) {
|
||||
dprintk("audio users: %d\n", dev->adev->users);
|
||||
if (dev->adev.users == 0 && dev->adev.shutdown == 1) {
|
||||
dprintk("audio users: %d\n", dev->adev.users);
|
||||
dprintk("disabling audio stream!\n");
|
||||
dev->adev->shutdown = 0;
|
||||
dev->adev.shutdown = 0;
|
||||
dprintk("released lock\n");
|
||||
em28xx_cmd(dev, EM28XX_CAPTURE_STREAM_EN, 0);
|
||||
}
|
||||
|
@ -356,7 +356,7 @@ static int snd_em28xx_hw_capture_free(struct snd_pcm_substream *substream)
|
|||
|
||||
dprintk("Stop capture, if needed\n");
|
||||
|
||||
if (dev->adev->capture_stream == STREAM_ON)
|
||||
if (dev->adev.capture_stream == STREAM_ON)
|
||||
em28xx_cmd(dev, EM28XX_CAPTURE_STREAM_EN, 0);
|
||||
|
||||
return 0;
|
||||
|
@ -379,7 +379,7 @@ static int snd_em28xx_capture_trigger(struct snd_pcm_substream *substream,
|
|||
em28xx_cmd(dev, EM28XX_CAPTURE_STREAM_EN, 1);
|
||||
return 0;
|
||||
case SNDRV_PCM_TRIGGER_STOP:
|
||||
dev->adev->shutdown = 1;
|
||||
dev->adev.shutdown = 1;
|
||||
return 0;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
@ -393,7 +393,7 @@ static snd_pcm_uframes_t snd_em28xx_capture_pointer(struct snd_pcm_substream
|
|||
|
||||
snd_pcm_uframes_t hwptr_done;
|
||||
dev = snd_pcm_substream_chip(substream);
|
||||
hwptr_done = dev->adev->hwptr_done_capture;
|
||||
hwptr_done = dev->adev.hwptr_done_capture;
|
||||
|
||||
return hwptr_done;
|
||||
}
|
||||
|
@ -420,7 +420,7 @@ static struct snd_pcm_ops snd_em28xx_pcm_capture = {
|
|||
|
||||
static int em28xx_audio_init(struct em28xx *dev)
|
||||
{
|
||||
struct em28xx_audio *adev;
|
||||
struct em28xx_audio *adev = &dev->adev;
|
||||
struct snd_pcm *pcm;
|
||||
struct snd_card *card;
|
||||
static int devnr;
|
||||
|
@ -438,16 +438,9 @@ static int em28xx_audio_init(struct em28xx *dev)
|
|||
printk(KERN_INFO "em28xx-audio.c: Copyright (C) 2006 Markus "
|
||||
"Rechberger\n");
|
||||
|
||||
adev = kzalloc(sizeof(*adev), GFP_KERNEL);
|
||||
if (!adev) {
|
||||
printk(KERN_ERR "em28xx-audio.c: out of memory\n");
|
||||
return -1;
|
||||
}
|
||||
card = snd_card_new(index[devnr], "Em28xx Audio", THIS_MODULE, 0);
|
||||
if (card == NULL) {
|
||||
kfree(adev);
|
||||
if (card == NULL)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
spin_lock_init(&adev->slock);
|
||||
err = snd_pcm_new(card, "Em28xx Audio", 0, 0, 1, &pcm);
|
||||
|
@ -471,7 +464,6 @@ static int em28xx_audio_init(struct em28xx *dev)
|
|||
}
|
||||
adev->sndcard = card;
|
||||
adev->udev = dev->udev;
|
||||
dev->adev = adev;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -488,10 +480,9 @@ static int em28xx_audio_fini(struct em28xx *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (dev->adev) {
|
||||
snd_card_free(dev->adev->sndcard);
|
||||
kfree(dev->adev);
|
||||
dev->adev = NULL;
|
||||
if (dev->adev.sndcard) {
|
||||
snd_card_free(dev->adev.sndcard);
|
||||
dev->adev.sndcard = NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1000,12 +1000,11 @@ void em28xx_wake_i2c(struct em28xx *dev)
|
|||
static LIST_HEAD(em28xx_devlist);
|
||||
static DEFINE_MUTEX(em28xx_devlist_mutex);
|
||||
|
||||
struct em28xx *em28xx_get_device(struct inode *inode,
|
||||
struct em28xx *em28xx_get_device(int minor,
|
||||
enum v4l2_buf_type *fh_type,
|
||||
int *has_radio)
|
||||
{
|
||||
struct em28xx *h, *dev = NULL;
|
||||
int minor = iminor(inode);
|
||||
|
||||
*fh_type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
*has_radio = 0;
|
||||
|
|
|
@ -160,7 +160,7 @@
|
|||
|
||||
/* FIXME: Need to be populated with the other chip ID's */
|
||||
enum em28xx_chip_id {
|
||||
CHIP_ID_EM2820 = 18,
|
||||
CHIP_ID_EM2820 = 18, /* Also used by em2710 */
|
||||
CHIP_ID_EM2840 = 20,
|
||||
CHIP_ID_EM2750 = 33,
|
||||
CHIP_ID_EM2860 = 34,
|
||||
|
|
|
@ -1154,7 +1154,7 @@ static int em28xx_reg_len(int reg)
|
|||
}
|
||||
|
||||
static int vidioc_g_chip_ident(struct file *file, void *priv,
|
||||
struct v4l2_chip_ident *chip)
|
||||
struct v4l2_dbg_chip_ident *chip)
|
||||
{
|
||||
struct em28xx_fh *fh = priv;
|
||||
struct em28xx *dev = fh->dev;
|
||||
|
@ -1162,20 +1162,20 @@ static int vidioc_g_chip_ident(struct file *file, void *priv,
|
|||
chip->ident = V4L2_IDENT_NONE;
|
||||
chip->revision = 0;
|
||||
|
||||
em28xx_i2c_call_clients(dev, VIDIOC_G_CHIP_IDENT, chip);
|
||||
em28xx_i2c_call_clients(dev, VIDIOC_DBG_G_CHIP_IDENT, chip);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int vidioc_g_register(struct file *file, void *priv,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct em28xx_fh *fh = priv;
|
||||
struct em28xx *dev = fh->dev;
|
||||
int ret;
|
||||
|
||||
switch (reg->match_type) {
|
||||
switch (reg->match.type) {
|
||||
case V4L2_CHIP_MATCH_AC97:
|
||||
mutex_lock(&dev->lock);
|
||||
ret = em28xx_read_ac97(dev, reg->reg);
|
||||
|
@ -1184,6 +1184,7 @@ static int vidioc_g_register(struct file *file, void *priv,
|
|||
return ret;
|
||||
|
||||
reg->val = ret;
|
||||
reg->size = 1;
|
||||
return 0;
|
||||
case V4L2_CHIP_MATCH_I2C_DRIVER:
|
||||
em28xx_i2c_call_clients(dev, VIDIOC_DBG_G_REGISTER, reg);
|
||||
|
@ -1192,12 +1193,13 @@ static int vidioc_g_register(struct file *file, void *priv,
|
|||
/* Not supported yet */
|
||||
return -EINVAL;
|
||||
default:
|
||||
if (!v4l2_chip_match_host(reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_host(®->match))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Match host */
|
||||
if (em28xx_reg_len(reg->reg) == 1) {
|
||||
reg->size = em28xx_reg_len(reg->reg);
|
||||
if (reg->size == 1) {
|
||||
mutex_lock(&dev->lock);
|
||||
ret = em28xx_read_reg(dev, reg->reg);
|
||||
mutex_unlock(&dev->lock);
|
||||
|
@ -1207,7 +1209,7 @@ static int vidioc_g_register(struct file *file, void *priv,
|
|||
|
||||
reg->val = ret;
|
||||
} else {
|
||||
__le64 val = 0;
|
||||
__le16 val = 0;
|
||||
mutex_lock(&dev->lock);
|
||||
ret = em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS,
|
||||
reg->reg, (char *)&val, 2);
|
||||
|
@ -1215,21 +1217,21 @@ static int vidioc_g_register(struct file *file, void *priv,
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
reg->val = le64_to_cpu(val);
|
||||
reg->val = le16_to_cpu(val);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vidioc_s_register(struct file *file, void *priv,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct em28xx_fh *fh = priv;
|
||||
struct em28xx *dev = fh->dev;
|
||||
__le64 buf;
|
||||
__le16 buf;
|
||||
int rc;
|
||||
|
||||
switch (reg->match_type) {
|
||||
switch (reg->match.type) {
|
||||
case V4L2_CHIP_MATCH_AC97:
|
||||
mutex_lock(&dev->lock);
|
||||
rc = em28xx_write_ac97(dev, reg->reg, reg->val);
|
||||
|
@ -1243,12 +1245,12 @@ static int vidioc_s_register(struct file *file, void *priv,
|
|||
/* Not supported yet */
|
||||
return -EINVAL;
|
||||
default:
|
||||
if (!v4l2_chip_match_host(reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_host(®->match))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Match host */
|
||||
buf = cpu_to_le64(reg->val);
|
||||
buf = cpu_to_le16(reg->val);
|
||||
|
||||
mutex_lock(&dev->lock);
|
||||
rc = em28xx_write_regs(dev, reg->reg, (char *)&buf,
|
||||
|
@ -1582,15 +1584,15 @@ static int radio_queryctrl(struct file *file, void *priv,
|
|||
* em28xx_v4l2_open()
|
||||
* inits the device and starts isoc transfer
|
||||
*/
|
||||
static int em28xx_v4l2_open(struct inode *inode, struct file *filp)
|
||||
static int em28xx_v4l2_open(struct file *filp)
|
||||
{
|
||||
int minor = iminor(inode);
|
||||
int minor = video_devdata(filp)->minor;
|
||||
int errCode = 0, radio;
|
||||
struct em28xx *dev;
|
||||
enum v4l2_buf_type fh_type;
|
||||
struct em28xx_fh *fh;
|
||||
|
||||
dev = em28xx_get_device(inode, &fh_type, &radio);
|
||||
dev = em28xx_get_device(minor, &fh_type, &radio);
|
||||
|
||||
if (NULL == dev)
|
||||
return -ENODEV;
|
||||
|
@ -1686,7 +1688,7 @@ void em28xx_release_analog_resources(struct em28xx *dev)
|
|||
* stops streaming and deallocates all resources allocated by the v4l2
|
||||
* calls and ioctls
|
||||
*/
|
||||
static int em28xx_v4l2_close(struct inode *inode, struct file *filp)
|
||||
static int em28xx_v4l2_close(struct file *filp)
|
||||
{
|
||||
struct em28xx_fh *fh = filp->private_data;
|
||||
struct em28xx *dev = fh->dev;
|
||||
|
@ -1826,7 +1828,7 @@ static int em28xx_v4l2_mmap(struct file *filp, struct vm_area_struct *vma)
|
|||
return rc;
|
||||
}
|
||||
|
||||
static const struct file_operations em28xx_v4l_fops = {
|
||||
static const struct v4l2_file_operations em28xx_v4l_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = em28xx_v4l2_open,
|
||||
.release = em28xx_v4l2_close,
|
||||
|
@ -1834,8 +1836,6 @@ static const struct file_operations em28xx_v4l_fops = {
|
|||
.poll = em28xx_v4l2_poll,
|
||||
.mmap = em28xx_v4l2_mmap,
|
||||
.ioctl = video_ioctl2,
|
||||
.llseek = no_llseek,
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops video_ioctl_ops = {
|
||||
|
@ -1890,13 +1890,11 @@ static const struct video_device em28xx_video_template = {
|
|||
.current_norm = V4L2_STD_PAL,
|
||||
};
|
||||
|
||||
static const struct file_operations radio_fops = {
|
||||
static const struct v4l2_file_operations radio_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = em28xx_v4l2_open,
|
||||
.release = em28xx_v4l2_close,
|
||||
.ioctl = video_ioctl2,
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops radio_ioctl_ops = {
|
||||
|
|
|
@ -473,7 +473,7 @@ struct em28xx {
|
|||
unsigned long i2c_hash; /* i2c devicelist hash -
|
||||
for boards with generic ID */
|
||||
|
||||
struct em28xx_audio *adev;
|
||||
struct em28xx_audio adev;
|
||||
|
||||
/* states */
|
||||
enum em28xx_dev_state state;
|
||||
|
@ -583,7 +583,7 @@ int em28xx_gpio_set(struct em28xx *dev, struct em28xx_reg_seq *gpio);
|
|||
void em28xx_wake_i2c(struct em28xx *dev);
|
||||
void em28xx_remove_from_devlist(struct em28xx *dev);
|
||||
void em28xx_add_into_devlist(struct em28xx *dev);
|
||||
struct em28xx *em28xx_get_device(struct inode *inode,
|
||||
struct em28xx *em28xx_get_device(int minor,
|
||||
enum v4l2_buf_type *fh_type,
|
||||
int *has_radio);
|
||||
int em28xx_register_extension(struct em28xx_ops *dev);
|
||||
|
|
|
@ -1206,7 +1206,7 @@ static void et61x251_release_resources(struct kref *kref)
|
|||
}
|
||||
|
||||
|
||||
static int et61x251_open(struct inode* inode, struct file* filp)
|
||||
static int et61x251_open(struct file *filp)
|
||||
{
|
||||
struct et61x251_device* cam;
|
||||
int err = 0;
|
||||
|
@ -1291,7 +1291,7 @@ out:
|
|||
}
|
||||
|
||||
|
||||
static int et61x251_release(struct inode* inode, struct file* filp)
|
||||
static int et61x251_release(struct file *filp)
|
||||
{
|
||||
struct et61x251_device* cam;
|
||||
|
||||
|
@ -2392,8 +2392,8 @@ et61x251_vidioc_s_parm(struct et61x251_device* cam, void __user * arg)
|
|||
}
|
||||
|
||||
|
||||
static int et61x251_ioctl_v4l2(struct inode* inode, struct file* filp,
|
||||
unsigned int cmd, void __user * arg)
|
||||
static long et61x251_ioctl_v4l2(struct file *filp,
|
||||
unsigned int cmd, void __user *arg)
|
||||
{
|
||||
struct et61x251_device *cam = video_drvdata(filp);
|
||||
|
||||
|
@ -2487,11 +2487,11 @@ static int et61x251_ioctl_v4l2(struct inode* inode, struct file* filp,
|
|||
}
|
||||
|
||||
|
||||
static int et61x251_ioctl(struct inode* inode, struct file* filp,
|
||||
static long et61x251_ioctl(struct file *filp,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct et61x251_device *cam = video_drvdata(filp);
|
||||
int err = 0;
|
||||
long err = 0;
|
||||
|
||||
if (mutex_lock_interruptible(&cam->fileop_mutex))
|
||||
return -ERESTARTSYS;
|
||||
|
@ -2511,7 +2511,7 @@ static int et61x251_ioctl(struct inode* inode, struct file* filp,
|
|||
|
||||
V4LDBG(3, "et61x251", cmd);
|
||||
|
||||
err = et61x251_ioctl_v4l2(inode, filp, cmd, (void __user *)arg);
|
||||
err = et61x251_ioctl_v4l2(filp, cmd, (void __user *)arg);
|
||||
|
||||
mutex_unlock(&cam->fileop_mutex);
|
||||
|
||||
|
@ -2519,18 +2519,14 @@ static int et61x251_ioctl(struct inode* inode, struct file* filp,
|
|||
}
|
||||
|
||||
|
||||
static const struct file_operations et61x251_fops = {
|
||||
static const struct v4l2_file_operations et61x251_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = et61x251_open,
|
||||
.release = et61x251_release,
|
||||
.ioctl = et61x251_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.read = et61x251_read,
|
||||
.poll = et61x251_poll,
|
||||
.mmap = et61x251_mmap,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
|
|
|
@ -875,7 +875,7 @@ static void gspca_release(struct video_device *vfd)
|
|||
kfree(gspca_dev);
|
||||
}
|
||||
|
||||
static int dev_open(struct inode *inode, struct file *file)
|
||||
static int dev_open(struct file *file)
|
||||
{
|
||||
struct gspca_dev *gspca_dev;
|
||||
int ret;
|
||||
|
@ -922,7 +922,7 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int dev_close(struct inode *inode, struct file *file)
|
||||
static int dev_close(struct file *file)
|
||||
{
|
||||
struct gspca_dev *gspca_dev = file->private_data;
|
||||
|
||||
|
@ -1802,17 +1802,13 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static struct file_operations dev_fops = {
|
||||
static struct v4l2_file_operations dev_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = dev_open,
|
||||
.release = dev_close,
|
||||
.read = dev_read,
|
||||
.mmap = dev_mmap,
|
||||
.unlocked_ioctl = __video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
.unlocked_ioctl = video_ioctl2,
|
||||
.poll = dev_poll,
|
||||
};
|
||||
|
||||
|
|
|
@ -306,7 +306,7 @@ static int hexium_detach(struct saa7146_dev *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int hexium_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
|
||||
static long hexium_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct saa7146_dev *dev = fh->dev;
|
||||
struct hexium *hexium = (struct hexium *) dev->ext_priv;
|
||||
|
|
|
@ -370,7 +370,7 @@ static int hexium_detach(struct saa7146_dev *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int hexium_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
|
||||
static long hexium_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct saa7146_dev *dev = fh->dev;
|
||||
struct hexium *hexium = (struct hexium *) dev->ext_priv;
|
||||
|
|
|
@ -902,18 +902,19 @@ static void ivtv_load_and_init_modules(struct ivtv *itv)
|
|||
}
|
||||
|
||||
if (hw & IVTV_HW_SAA711X) {
|
||||
struct v4l2_chip_ident v = { V4L2_CHIP_MATCH_I2C_DRIVER, I2C_DRIVERID_SAA711X };
|
||||
struct v4l2_dbg_chip_ident v;
|
||||
|
||||
/* determine the exact saa711x model */
|
||||
itv->hw_flags &= ~IVTV_HW_SAA711X;
|
||||
|
||||
v.match.type = V4L2_CHIP_MATCH_I2C_DRIVER;
|
||||
strlcpy(v.match.name, "saa7115", sizeof(v.match.name));
|
||||
ivtv_call_hw(itv, IVTV_HW_SAA711X, core, g_chip_ident, &v);
|
||||
if (v.ident == V4L2_IDENT_SAA7114) {
|
||||
itv->hw_flags |= IVTV_HW_SAA7114;
|
||||
/* VBI is not yet supported by the saa7114 driver. */
|
||||
itv->v4l2_cap &= ~(V4L2_CAP_SLICED_VBI_CAPTURE|V4L2_CAP_VBI_CAPTURE);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
itv->hw_flags |= IVTV_HW_SAA7115;
|
||||
}
|
||||
itv->vbi.raw_decoder_line_size = 1443;
|
||||
|
|
|
@ -831,7 +831,7 @@ static void ivtv_stop_decoding(struct ivtv_open_id *id, int flags, u64 pts)
|
|||
ivtv_release_stream(s);
|
||||
}
|
||||
|
||||
int ivtv_v4l2_close(struct inode *inode, struct file *filp)
|
||||
int ivtv_v4l2_close(struct file *filp)
|
||||
{
|
||||
struct ivtv_open_id *id = filp->private_data;
|
||||
struct ivtv *itv = id->itv;
|
||||
|
@ -978,7 +978,7 @@ static int ivtv_serialized_open(struct ivtv_stream *s, struct file *filp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int ivtv_v4l2_open(struct inode *inode, struct file *filp)
|
||||
int ivtv_v4l2_open(struct file *filp)
|
||||
{
|
||||
int res;
|
||||
struct ivtv *itv = NULL;
|
||||
|
|
|
@ -22,12 +22,12 @@
|
|||
#define IVTV_FILEOPS_H
|
||||
|
||||
/* Testing/Debugging */
|
||||
int ivtv_v4l2_open(struct inode *inode, struct file *filp);
|
||||
int ivtv_v4l2_open(struct file *filp);
|
||||
ssize_t ivtv_v4l2_read(struct file *filp, char __user *buf, size_t count,
|
||||
loff_t * pos);
|
||||
ssize_t ivtv_v4l2_write(struct file *filp, const char __user *buf, size_t count,
|
||||
loff_t * pos);
|
||||
int ivtv_v4l2_close(struct inode *inode, struct file *filp);
|
||||
int ivtv_v4l2_close(struct file *filp);
|
||||
unsigned int ivtv_v4l2_enc_poll(struct file *filp, poll_table * wait);
|
||||
unsigned int ivtv_v4l2_dec_poll(struct file *filp, poll_table * wait);
|
||||
int ivtv_start_capture(struct ivtv_open_id *id);
|
||||
|
|
|
@ -674,19 +674,19 @@ static int ivtv_s_fmt_vid_out_overlay(struct file *file, void *fh, struct v4l2_f
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int ivtv_g_chip_ident(struct file *file, void *fh, struct v4l2_chip_ident *chip)
|
||||
static int ivtv_g_chip_ident(struct file *file, void *fh, struct v4l2_dbg_chip_ident *chip)
|
||||
{
|
||||
struct ivtv *itv = ((struct ivtv_open_id *)fh)->itv;
|
||||
|
||||
chip->ident = V4L2_IDENT_NONE;
|
||||
chip->revision = 0;
|
||||
if (chip->match_type == V4L2_CHIP_MATCH_HOST) {
|
||||
if (v4l2_chip_match_host(chip->match_type, chip->match_chip))
|
||||
if (chip->match.type == V4L2_CHIP_MATCH_HOST) {
|
||||
if (v4l2_chip_match_host(&chip->match))
|
||||
chip->ident = itv->has_cx23415 ? V4L2_IDENT_CX23415 : V4L2_IDENT_CX23416;
|
||||
return 0;
|
||||
}
|
||||
if (chip->match_type != V4L2_CHIP_MATCH_I2C_DRIVER &&
|
||||
chip->match_type != V4L2_CHIP_MATCH_I2C_ADDR)
|
||||
if (chip->match.type != V4L2_CHIP_MATCH_I2C_DRIVER &&
|
||||
chip->match.type != V4L2_CHIP_MATCH_I2C_ADDR)
|
||||
return -EINVAL;
|
||||
/* TODO: is this correct? */
|
||||
return ivtv_call_all_err(itv, core, g_chip_ident, chip);
|
||||
|
@ -695,7 +695,7 @@ static int ivtv_g_chip_ident(struct file *file, void *fh, struct v4l2_chip_ident
|
|||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int ivtv_itvc(struct ivtv *itv, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct v4l2_register *regs = arg;
|
||||
struct v4l2_dbg_register *regs = arg;
|
||||
volatile u8 __iomem *reg_start;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
|
@ -710,6 +710,7 @@ static int ivtv_itvc(struct ivtv *itv, unsigned int cmd, void *arg)
|
|||
else
|
||||
return -EINVAL;
|
||||
|
||||
regs->size = 4;
|
||||
if (cmd == VIDIOC_DBG_G_REGISTER)
|
||||
regs->val = readl(regs->reg + reg_start);
|
||||
else
|
||||
|
@ -717,11 +718,11 @@ static int ivtv_itvc(struct ivtv *itv, unsigned int cmd, void *arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int ivtv_g_register(struct file *file, void *fh, struct v4l2_register *reg)
|
||||
static int ivtv_g_register(struct file *file, void *fh, struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct ivtv *itv = ((struct ivtv_open_id *)fh)->itv;
|
||||
|
||||
if (v4l2_chip_match_host(reg->match_type, reg->match_chip))
|
||||
if (v4l2_chip_match_host(®->match))
|
||||
return ivtv_itvc(itv, VIDIOC_DBG_G_REGISTER, reg);
|
||||
/* TODO: subdev errors should not be ignored, this should become a
|
||||
subdev helper function. */
|
||||
|
@ -729,11 +730,11 @@ static int ivtv_g_register(struct file *file, void *fh, struct v4l2_register *re
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int ivtv_s_register(struct file *file, void *fh, struct v4l2_register *reg)
|
||||
static int ivtv_s_register(struct file *file, void *fh, struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct ivtv *itv = ((struct ivtv_open_id *)fh)->itv;
|
||||
|
||||
if (v4l2_chip_match_host(reg->match_type, reg->match_chip))
|
||||
if (v4l2_chip_match_host(®->match))
|
||||
return ivtv_itvc(itv, VIDIOC_DBG_S_REGISTER, reg);
|
||||
/* TODO: subdev errors should not be ignored, this should become a
|
||||
subdev helper function. */
|
||||
|
@ -1725,7 +1726,7 @@ static int ivtv_decoder_ioctls(struct file *filp, unsigned int cmd, void *arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int ivtv_default(struct file *file, void *fh, int cmd, void *arg)
|
||||
static long ivtv_default(struct file *file, void *fh, int cmd, void *arg)
|
||||
{
|
||||
struct ivtv *itv = ((struct ivtv_open_id *)fh)->itv;
|
||||
|
||||
|
@ -1827,7 +1828,7 @@ static long ivtv_serialized_ioctl(struct ivtv *itv, struct file *filp,
|
|||
|
||||
if (ivtv_debug & IVTV_DBGFLG_IOCTL)
|
||||
vfd->debug = V4L2_DEBUG_IOCTL | V4L2_DEBUG_IOCTL_ARG;
|
||||
ret = __video_ioctl2(filp, cmd, arg);
|
||||
ret = video_ioctl2(filp, cmd, arg);
|
||||
vfd->debug = 0;
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -43,24 +43,22 @@
|
|||
#include "ivtv-cards.h"
|
||||
#include "ivtv-streams.h"
|
||||
|
||||
static const struct file_operations ivtv_v4l2_enc_fops = {
|
||||
static const struct v4l2_file_operations ivtv_v4l2_enc_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.read = ivtv_v4l2_read,
|
||||
.write = ivtv_v4l2_write,
|
||||
.open = ivtv_v4l2_open,
|
||||
.unlocked_ioctl = ivtv_v4l2_ioctl,
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
.release = ivtv_v4l2_close,
|
||||
.poll = ivtv_v4l2_enc_poll,
|
||||
};
|
||||
|
||||
static const struct file_operations ivtv_v4l2_dec_fops = {
|
||||
static const struct v4l2_file_operations ivtv_v4l2_dec_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.read = ivtv_v4l2_read,
|
||||
.write = ivtv_v4l2_write,
|
||||
.open = ivtv_v4l2_open,
|
||||
.unlocked_ioctl = ivtv_v4l2_ioctl,
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
.release = ivtv_v4l2_close,
|
||||
.poll = ivtv_v4l2_dec_poll,
|
||||
};
|
||||
|
@ -78,7 +76,7 @@ static struct {
|
|||
int num_offset;
|
||||
int dma, pio;
|
||||
enum v4l2_buf_type buf_type;
|
||||
const struct file_operations *fops;
|
||||
const struct v4l2_file_operations *fops;
|
||||
} ivtv_stream_info[] = {
|
||||
{ /* IVTV_ENC_STREAM_TYPE_MPG */
|
||||
"encoder MPG",
|
||||
|
|
|
@ -80,29 +80,28 @@ static int m52790_s_routing(struct v4l2_subdev *sd, const struct v4l2_routing *r
|
|||
}
|
||||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int m52790_g_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
||||
static int m52790_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct m52790_state *state = to_state(sd);
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
if (!v4l2_chip_match_i2c_client(client,
|
||||
reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_i2c_client(client, ®->match))
|
||||
return -EINVAL;
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
if (reg->reg != 0)
|
||||
return -EINVAL;
|
||||
reg->size = 1;
|
||||
reg->val = state->input | state->output;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int m52790_s_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
||||
static int m52790_s_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct m52790_state *state = to_state(sd);
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
if (!v4l2_chip_match_i2c_client(client,
|
||||
reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_i2c_client(client, ®->match))
|
||||
return -EINVAL;
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
@ -115,7 +114,7 @@ static int m52790_s_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
|||
}
|
||||
#endif
|
||||
|
||||
static int m52790_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_chip_ident *chip)
|
||||
static int m52790_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
|
|
|
@ -841,7 +841,7 @@ again:
|
|||
/* video4linux integration */
|
||||
/****************************************************************************/
|
||||
|
||||
static int meye_open(struct inode *inode, struct file *file)
|
||||
static int meye_open(struct file *file)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -863,7 +863,7 @@ static int meye_open(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int meye_release(struct inode *inode, struct file *file)
|
||||
static int meye_release(struct file *file)
|
||||
{
|
||||
mchip_hic_stop();
|
||||
mchip_dma_free();
|
||||
|
@ -1577,7 +1577,7 @@ static int vidioc_streamoff(struct file *file, void *fh, enum v4l2_buf_type i)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int vidioc_default(struct file *file, void *fh, int cmd, void *arg)
|
||||
static long vidioc_default(struct file *file, void *fh, int cmd, void *arg)
|
||||
{
|
||||
switch (cmd) {
|
||||
case MEYEIOC_G_PARAMS:
|
||||
|
@ -1684,17 +1684,13 @@ static int meye_mmap(struct file *file, struct vm_area_struct *vma)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations meye_fops = {
|
||||
static const struct v4l2_file_operations meye_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = meye_open,
|
||||
.release = meye_release,
|
||||
.mmap = meye_mmap,
|
||||
.ioctl = video_ioctl2,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.poll = meye_poll,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops meye_ioctl_ops = {
|
||||
|
|
|
@ -483,7 +483,7 @@ static int msp_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_VIDEO_ALLOW_V4L1
|
||||
static int msp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
||||
static long msp_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct msp_state *state = to_state(sd);
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
@ -733,7 +733,7 @@ static int msp_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int msp_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_chip_ident *chip)
|
||||
static int msp_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip)
|
||||
{
|
||||
struct msp_state *state = to_state(sd);
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
|
|
@ -343,14 +343,14 @@ static int mt9m001_try_fmt(struct soc_camera_device *icd,
|
|||
}
|
||||
|
||||
static int mt9m001_get_chip_id(struct soc_camera_device *icd,
|
||||
struct v4l2_chip_ident *id)
|
||||
struct v4l2_dbg_chip_ident *id)
|
||||
{
|
||||
struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
|
||||
|
||||
if (id->match_type != V4L2_CHIP_MATCH_I2C_ADDR)
|
||||
if (id->match.type != V4L2_CHIP_MATCH_I2C_ADDR)
|
||||
return -EINVAL;
|
||||
|
||||
if (id->match_chip != mt9m001->client->addr)
|
||||
if (id->match.addr != mt9m001->client->addr)
|
||||
return -ENODEV;
|
||||
|
||||
id->ident = mt9m001->model;
|
||||
|
@ -361,16 +361,17 @@ static int mt9m001_get_chip_id(struct soc_camera_device *icd,
|
|||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int mt9m001_get_register(struct soc_camera_device *icd,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
|
||||
|
||||
if (reg->match_type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0xff)
|
||||
if (reg->match.type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0xff)
|
||||
return -EINVAL;
|
||||
|
||||
if (reg->match_chip != mt9m001->client->addr)
|
||||
if (reg->match.addr != mt9m001->client->addr)
|
||||
return -ENODEV;
|
||||
|
||||
reg->size = 2;
|
||||
reg->val = reg_read(icd, reg->reg);
|
||||
|
||||
if (reg->val > 0xffff)
|
||||
|
@ -380,14 +381,14 @@ static int mt9m001_get_register(struct soc_camera_device *icd,
|
|||
}
|
||||
|
||||
static int mt9m001_set_register(struct soc_camera_device *icd,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct mt9m001 *mt9m001 = container_of(icd, struct mt9m001, icd);
|
||||
|
||||
if (reg->match_type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0xff)
|
||||
if (reg->match.type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0xff)
|
||||
return -EINVAL;
|
||||
|
||||
if (reg->match_chip != mt9m001->client->addr)
|
||||
if (reg->match.addr != mt9m001->client->addr)
|
||||
return -ENODEV;
|
||||
|
||||
if (reg_write(icd, reg->reg, reg->val) < 0)
|
||||
|
|
|
@ -514,14 +514,14 @@ static int mt9m111_try_fmt(struct soc_camera_device *icd,
|
|||
}
|
||||
|
||||
static int mt9m111_get_chip_id(struct soc_camera_device *icd,
|
||||
struct v4l2_chip_ident *id)
|
||||
struct v4l2_dbg_chip_ident *id)
|
||||
{
|
||||
struct mt9m111 *mt9m111 = container_of(icd, struct mt9m111, icd);
|
||||
|
||||
if (id->match_type != V4L2_CHIP_MATCH_I2C_ADDR)
|
||||
if (id->match.type != V4L2_CHIP_MATCH_I2C_ADDR)
|
||||
return -EINVAL;
|
||||
|
||||
if (id->match_chip != mt9m111->client->addr)
|
||||
if (id->match.addr != mt9m111->client->addr)
|
||||
return -ENODEV;
|
||||
|
||||
id->ident = mt9m111->model;
|
||||
|
@ -532,18 +532,19 @@ static int mt9m111_get_chip_id(struct soc_camera_device *icd,
|
|||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int mt9m111_get_register(struct soc_camera_device *icd,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
int val;
|
||||
|
||||
struct mt9m111 *mt9m111 = container_of(icd, struct mt9m111, icd);
|
||||
|
||||
if (reg->match_type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0x2ff)
|
||||
if (reg->match.type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0x2ff)
|
||||
return -EINVAL;
|
||||
if (reg->match_chip != mt9m111->client->addr)
|
||||
if (reg->match.addr != mt9m111->client->addr)
|
||||
return -ENODEV;
|
||||
|
||||
val = mt9m111_reg_read(icd, reg->reg);
|
||||
reg->size = 2;
|
||||
reg->val = (u64)val;
|
||||
|
||||
if (reg->val > 0xffff)
|
||||
|
@ -553,14 +554,14 @@ static int mt9m111_get_register(struct soc_camera_device *icd,
|
|||
}
|
||||
|
||||
static int mt9m111_set_register(struct soc_camera_device *icd,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct mt9m111 *mt9m111 = container_of(icd, struct mt9m111, icd);
|
||||
|
||||
if (reg->match_type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0x2ff)
|
||||
if (reg->match.type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0x2ff)
|
||||
return -EINVAL;
|
||||
|
||||
if (reg->match_chip != mt9m111->client->addr)
|
||||
if (reg->match.addr != mt9m111->client->addr)
|
||||
return -ENODEV;
|
||||
|
||||
if (mt9m111_reg_write(icd, reg->reg, reg->val) < 0)
|
||||
|
|
|
@ -326,14 +326,14 @@ static int mt9t031_try_fmt(struct soc_camera_device *icd,
|
|||
}
|
||||
|
||||
static int mt9t031_get_chip_id(struct soc_camera_device *icd,
|
||||
struct v4l2_chip_ident *id)
|
||||
struct v4l2_dbg_chip_ident *id)
|
||||
{
|
||||
struct mt9t031 *mt9t031 = container_of(icd, struct mt9t031, icd);
|
||||
|
||||
if (id->match_type != V4L2_CHIP_MATCH_I2C_ADDR)
|
||||
if (id->match.type != V4L2_CHIP_MATCH_I2C_ADDR)
|
||||
return -EINVAL;
|
||||
|
||||
if (id->match_chip != mt9t031->client->addr)
|
||||
if (id->match.addr != mt9t031->client->addr)
|
||||
return -ENODEV;
|
||||
|
||||
id->ident = mt9t031->model;
|
||||
|
@ -344,14 +344,14 @@ static int mt9t031_get_chip_id(struct soc_camera_device *icd,
|
|||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int mt9t031_get_register(struct soc_camera_device *icd,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct mt9t031 *mt9t031 = container_of(icd, struct mt9t031, icd);
|
||||
|
||||
if (reg->match_type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0xff)
|
||||
if (reg->match.type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0xff)
|
||||
return -EINVAL;
|
||||
|
||||
if (reg->match_chip != mt9t031->client->addr)
|
||||
if (reg->match.addr != mt9t031->client->addr)
|
||||
return -ENODEV;
|
||||
|
||||
reg->val = reg_read(icd, reg->reg);
|
||||
|
@ -363,14 +363,14 @@ static int mt9t031_get_register(struct soc_camera_device *icd,
|
|||
}
|
||||
|
||||
static int mt9t031_set_register(struct soc_camera_device *icd,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct mt9t031 *mt9t031 = container_of(icd, struct mt9t031, icd);
|
||||
|
||||
if (reg->match_type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0xff)
|
||||
if (reg->match.type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0xff)
|
||||
return -EINVAL;
|
||||
|
||||
if (reg->match_chip != mt9t031->client->addr)
|
||||
if (reg->match.addr != mt9t031->client->addr)
|
||||
return -ENODEV;
|
||||
|
||||
if (reg_write(icd, reg->reg, reg->val) < 0)
|
||||
|
|
|
@ -422,14 +422,14 @@ static int mt9v022_try_fmt(struct soc_camera_device *icd,
|
|||
}
|
||||
|
||||
static int mt9v022_get_chip_id(struct soc_camera_device *icd,
|
||||
struct v4l2_chip_ident *id)
|
||||
struct v4l2_dbg_chip_ident *id)
|
||||
{
|
||||
struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
|
||||
|
||||
if (id->match_type != V4L2_CHIP_MATCH_I2C_ADDR)
|
||||
if (id->match.type != V4L2_CHIP_MATCH_I2C_ADDR)
|
||||
return -EINVAL;
|
||||
|
||||
if (id->match_chip != mt9v022->client->addr)
|
||||
if (id->match.addr != mt9v022->client->addr)
|
||||
return -ENODEV;
|
||||
|
||||
id->ident = mt9v022->model;
|
||||
|
@ -440,16 +440,17 @@ static int mt9v022_get_chip_id(struct soc_camera_device *icd,
|
|||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int mt9v022_get_register(struct soc_camera_device *icd,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
|
||||
|
||||
if (reg->match_type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0xff)
|
||||
if (reg->match.type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0xff)
|
||||
return -EINVAL;
|
||||
|
||||
if (reg->match_chip != mt9v022->client->addr)
|
||||
if (reg->match.addr != mt9v022->client->addr)
|
||||
return -ENODEV;
|
||||
|
||||
reg->size = 2;
|
||||
reg->val = reg_read(icd, reg->reg);
|
||||
|
||||
if (reg->val > 0xffff)
|
||||
|
@ -459,14 +460,14 @@ static int mt9v022_get_register(struct soc_camera_device *icd,
|
|||
}
|
||||
|
||||
static int mt9v022_set_register(struct soc_camera_device *icd,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct mt9v022 *mt9v022 = container_of(icd, struct mt9v022, icd);
|
||||
|
||||
if (reg->match_type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0xff)
|
||||
if (reg->match.type != V4L2_CHIP_MATCH_I2C_ADDR || reg->reg > 0xff)
|
||||
return -EINVAL;
|
||||
|
||||
if (reg->match_chip != mt9v022->client->addr)
|
||||
if (reg->match.addr != mt9v022->client->addr)
|
||||
return -ENODEV;
|
||||
|
||||
if (reg_write(icd, reg->reg, reg->val) < 0)
|
||||
|
|
|
@ -489,7 +489,7 @@ static int mxb_detach(struct saa7146_dev *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mxb_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
|
||||
static long mxb_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct saa7146_dev *dev = fh->dev;
|
||||
struct mxb *mxb = (struct mxb *)dev->ext_priv;
|
||||
|
|
|
@ -1454,9 +1454,9 @@ static int omap24xxcam_mmap(struct file *file, struct vm_area_struct *vma)
|
|||
return rval;
|
||||
}
|
||||
|
||||
static int omap24xxcam_open(struct inode *inode, struct file *file)
|
||||
static int omap24xxcam_open(struct file *file)
|
||||
{
|
||||
int minor = iminor(inode);
|
||||
int minor = video_devdata(file)->minor;
|
||||
struct omap24xxcam_device *cam = omap24xxcam.priv;
|
||||
struct omap24xxcam_fh *fh;
|
||||
struct v4l2_format format;
|
||||
|
@ -1511,7 +1511,7 @@ out_try_module_get:
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
static int omap24xxcam_release(struct inode *inode, struct file *file)
|
||||
static int omap24xxcam_release(struct file *file)
|
||||
{
|
||||
struct omap24xxcam_fh *fh = file->private_data;
|
||||
struct omap24xxcam_device *cam = fh->cam;
|
||||
|
@ -1559,8 +1559,7 @@ static int omap24xxcam_release(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct file_operations omap24xxcam_fops = {
|
||||
.llseek = no_llseek,
|
||||
static struct v4l2_file_operations omap24xxcam_fops = {
|
||||
.ioctl = video_ioctl2,
|
||||
.poll = omap24xxcam_poll,
|
||||
.mmap = omap24xxcam_mmap,
|
||||
|
|
|
@ -3915,7 +3915,7 @@ ov51x_dealloc(struct usb_ov511 *ov)
|
|||
***************************************************************************/
|
||||
|
||||
static int
|
||||
ov51x_v4l1_open(struct inode *inode, struct file *file)
|
||||
ov51x_v4l1_open(struct file *file)
|
||||
{
|
||||
struct video_device *vdev = video_devdata(file);
|
||||
struct usb_ov511 *ov = video_get_drvdata(vdev);
|
||||
|
@ -3972,7 +3972,7 @@ out:
|
|||
}
|
||||
|
||||
static int
|
||||
ov51x_v4l1_close(struct inode *inode, struct file *file)
|
||||
ov51x_v4l1_close(struct file *file)
|
||||
{
|
||||
struct video_device *vdev = file->private_data;
|
||||
struct usb_ov511 *ov = video_get_drvdata(vdev);
|
||||
|
@ -4010,7 +4010,7 @@ ov51x_v4l1_close(struct inode *inode, struct file *file)
|
|||
}
|
||||
|
||||
/* Do not call this function directly! */
|
||||
static int
|
||||
static long
|
||||
ov51x_v4l1_ioctl_internal(struct file *file, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct video_device *vdev = file->private_data;
|
||||
|
@ -4449,8 +4449,8 @@ redo:
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
ov51x_v4l1_ioctl(struct inode *inode, struct file *file,
|
||||
static long
|
||||
ov51x_v4l1_ioctl(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct video_device *vdev = file->private_data;
|
||||
|
@ -4661,17 +4661,13 @@ ov51x_v4l1_mmap(struct file *file, struct vm_area_struct *vma)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations ov511_fops = {
|
||||
static const struct v4l2_file_operations ov511_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = ov51x_v4l1_open,
|
||||
.release = ov51x_v4l1_close,
|
||||
.read = ov51x_v4l1_read,
|
||||
.mmap = ov51x_v4l1_mmap,
|
||||
.ioctl = ov51x_v4l1_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static struct video_device vdev_template = {
|
||||
|
|
|
@ -1310,7 +1310,7 @@ static int ov7670_command(struct i2c_client *client, unsigned int cmd,
|
|||
void *arg)
|
||||
{
|
||||
switch (cmd) {
|
||||
case VIDIOC_G_CHIP_IDENT:
|
||||
case VIDIOC_DBG_G_CHIP_IDENT:
|
||||
return v4l2_chip_ident_i2c_client(client, arg, V4L2_IDENT_OV7670, 0);
|
||||
|
||||
case VIDIOC_INT_RESET:
|
||||
|
|
|
@ -724,7 +724,7 @@ static unsigned long ov772x_query_bus_param(struct soc_camera_device *icd)
|
|||
}
|
||||
|
||||
static int ov772x_get_chip_id(struct soc_camera_device *icd,
|
||||
struct v4l2_chip_ident *id)
|
||||
struct v4l2_dbg_chip_ident *id)
|
||||
{
|
||||
struct ov772x_priv *priv = container_of(icd, struct ov772x_priv, icd);
|
||||
|
||||
|
@ -736,11 +736,12 @@ static int ov772x_get_chip_id(struct soc_camera_device *icd,
|
|||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int ov772x_get_register(struct soc_camera_device *icd,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct ov772x_priv *priv = container_of(icd, struct ov772x_priv, icd);
|
||||
int ret;
|
||||
|
||||
reg->size = 1;
|
||||
if (reg->reg > 0xff)
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -754,7 +755,7 @@ static int ov772x_get_register(struct soc_camera_device *icd,
|
|||
}
|
||||
|
||||
static int ov772x_set_register(struct soc_camera_device *icd,
|
||||
struct v4l2_register *reg)
|
||||
struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct ov772x_priv *priv = container_of(icd, struct ov772x_priv, icd);
|
||||
|
||||
|
|
|
@ -680,7 +680,7 @@ static int pms_capture(struct pms_device *dev, char __user *buf, int rgb555, int
|
|||
* Video4linux interfacing
|
||||
*/
|
||||
|
||||
static int pms_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
static long pms_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct video_device *dev = video_devdata(file);
|
||||
struct pms_device *pd=(struct pms_device *)dev;
|
||||
|
@ -862,7 +862,7 @@ static int pms_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int pms_ioctl(struct inode *inode, struct file *file,
|
||||
static long pms_ioctl(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
return video_usercopy(file, cmd, arg, pms_do_ioctl);
|
||||
|
@ -881,7 +881,7 @@ static ssize_t pms_read(struct file *file, char __user *buf,
|
|||
return len;
|
||||
}
|
||||
|
||||
static int pms_exclusive_open(struct inode *inode, struct file *file)
|
||||
static int pms_exclusive_open(struct file *file)
|
||||
{
|
||||
struct video_device *v = video_devdata(file);
|
||||
struct pms_device *pd = (struct pms_device *)v;
|
||||
|
@ -889,7 +889,7 @@ static int pms_exclusive_open(struct inode *inode, struct file *file)
|
|||
return test_and_set_bit(0, &pd->in_use) ? -EBUSY : 0;
|
||||
}
|
||||
|
||||
static int pms_exclusive_release(struct inode *inode, struct file *file)
|
||||
static int pms_exclusive_release(struct file *file)
|
||||
{
|
||||
struct video_device *v = video_devdata(file);
|
||||
struct pms_device *pd = (struct pms_device *)v;
|
||||
|
@ -898,16 +898,12 @@ static int pms_exclusive_release(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations pms_fops = {
|
||||
static const struct v4l2_file_operations pms_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = pms_exclusive_open,
|
||||
.release = pms_exclusive_release,
|
||||
.ioctl = pms_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.read = pms_read,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static struct video_device pms_template=
|
||||
|
|
|
@ -4732,26 +4732,25 @@ static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
|
|||
|
||||
|
||||
int pvr2_hdw_register_access(struct pvr2_hdw *hdw,
|
||||
u32 match_type, u32 match_chip, u64 reg_id,
|
||||
int setFl,u64 *val_ptr)
|
||||
struct v4l2_dbg_match *match, u64 reg_id,
|
||||
int setFl, u64 *val_ptr)
|
||||
{
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
struct pvr2_i2c_client *cp;
|
||||
struct v4l2_register req;
|
||||
struct v4l2_dbg_register req;
|
||||
int stat = 0;
|
||||
int okFl = 0;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN)) return -EPERM;
|
||||
|
||||
req.match_type = match_type;
|
||||
req.match_chip = match_chip;
|
||||
req.match = *match;
|
||||
req.reg = reg_id;
|
||||
if (setFl) req.val = *val_ptr;
|
||||
mutex_lock(&hdw->i2c_list_lock); do {
|
||||
list_for_each_entry(cp, &hdw->i2c_clients, list) {
|
||||
if (!v4l2_chip_match_i2c_client(
|
||||
cp->client,
|
||||
req.match_type, req.match_chip)) {
|
||||
&req.match)) {
|
||||
continue;
|
||||
}
|
||||
stat = pvr2_i2c_client_cmd(
|
||||
|
|
|
@ -242,8 +242,8 @@ void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *,
|
|||
setFl - true to set the register, false to read it
|
||||
val_ptr - storage location for source / result. */
|
||||
int pvr2_hdw_register_access(struct pvr2_hdw *,
|
||||
u32 match_type, u32 match_chip,u64 reg_id,
|
||||
int setFl,u64 *val_ptr);
|
||||
struct v4l2_dbg_match *match, u64 reg_id,
|
||||
int setFl, u64 *val_ptr);
|
||||
|
||||
/* The following entry points are all lower level things you normally don't
|
||||
want to worry about. */
|
||||
|
|
|
@ -168,13 +168,13 @@ static const char *get_v4l_name(int v4l_type)
|
|||
* This is part of Video 4 Linux API. The procedure handles ioctl() calls.
|
||||
*
|
||||
*/
|
||||
static int pvr2_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
static long pvr2_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct pvr2_v4l2_fh *fh = file->private_data;
|
||||
struct pvr2_v4l2 *vp = fh->vhead;
|
||||
struct pvr2_v4l2_dev *dev_info = fh->dev_info;
|
||||
struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
|
||||
int ret = -EINVAL;
|
||||
long ret = -EINVAL;
|
||||
|
||||
if (pvrusb2_debug & PVR2_TRACE_V4LIOCTL) {
|
||||
v4l_print_ioctl(pvr2_hdw_get_driver_name(hdw),cmd);
|
||||
|
@ -851,11 +851,11 @@ static int pvr2_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
|||
case VIDIOC_DBG_G_REGISTER:
|
||||
{
|
||||
u64 val;
|
||||
struct v4l2_register *req = (struct v4l2_register *)arg;
|
||||
struct v4l2_dbg_register *req = (struct v4l2_dbg_register *)arg;
|
||||
if (cmd == VIDIOC_DBG_S_REGISTER) val = req->val;
|
||||
ret = pvr2_hdw_register_access(
|
||||
hdw,req->match_type,req->match_chip,req->reg,
|
||||
cmd == VIDIOC_DBG_S_REGISTER,&val);
|
||||
hdw, &req->match, req->reg,
|
||||
cmd == VIDIOC_DBG_S_REGISTER, &val);
|
||||
if (cmd == VIDIOC_DBG_G_REGISTER) req->val = val;
|
||||
break;
|
||||
}
|
||||
|
@ -871,20 +871,20 @@ static int pvr2_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
|||
if (ret < 0) {
|
||||
if (pvrusb2_debug & PVR2_TRACE_V4LIOCTL) {
|
||||
pvr2_trace(PVR2_TRACE_V4LIOCTL,
|
||||
"pvr2_v4l2_do_ioctl failure, ret=%d",ret);
|
||||
"pvr2_v4l2_do_ioctl failure, ret=%ld", ret);
|
||||
} else {
|
||||
if (pvrusb2_debug & PVR2_TRACE_V4LIOCTL) {
|
||||
pvr2_trace(PVR2_TRACE_V4LIOCTL,
|
||||
"pvr2_v4l2_do_ioctl failure, ret=%d"
|
||||
" command was:",ret);
|
||||
"pvr2_v4l2_do_ioctl failure, ret=%ld"
|
||||
" command was:", ret);
|
||||
v4l_print_ioctl(pvr2_hdw_get_driver_name(hdw),
|
||||
cmd);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
pvr2_trace(PVR2_TRACE_V4LIOCTL,
|
||||
"pvr2_v4l2_do_ioctl complete, ret=%d (0x%x)",
|
||||
ret,ret);
|
||||
"pvr2_v4l2_do_ioctl complete, ret=%ld (0x%lx)",
|
||||
ret, ret);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -948,7 +948,7 @@ static void pvr2_v4l2_internal_check(struct pvr2_channel *chp)
|
|||
}
|
||||
|
||||
|
||||
static int pvr2_v4l2_ioctl(struct inode *inode, struct file *file,
|
||||
static long pvr2_v4l2_ioctl(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
|
||||
|
@ -960,7 +960,7 @@ static int pvr2_v4l2_ioctl(struct inode *inode, struct file *file,
|
|||
}
|
||||
|
||||
|
||||
static int pvr2_v4l2_release(struct inode *inode, struct file *file)
|
||||
static int pvr2_v4l2_release(struct file *file)
|
||||
{
|
||||
struct pvr2_v4l2_fh *fhp = file->private_data;
|
||||
struct pvr2_v4l2 *vp = fhp->vhead;
|
||||
|
@ -1008,7 +1008,7 @@ static int pvr2_v4l2_release(struct inode *inode, struct file *file)
|
|||
}
|
||||
|
||||
|
||||
static int pvr2_v4l2_open(struct inode *inode, struct file *file)
|
||||
static int pvr2_v4l2_open(struct file *file)
|
||||
{
|
||||
struct pvr2_v4l2_dev *dip; /* Our own context pointer */
|
||||
struct pvr2_v4l2_fh *fhp;
|
||||
|
@ -1235,13 +1235,12 @@ static unsigned int pvr2_v4l2_poll(struct file *file, poll_table *wait)
|
|||
}
|
||||
|
||||
|
||||
static const struct file_operations vdev_fops = {
|
||||
static const struct v4l2_file_operations vdev_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = pvr2_v4l2_open,
|
||||
.release = pvr2_v4l2_release,
|
||||
.read = pvr2_v4l2_read,
|
||||
.ioctl = pvr2_v4l2_ioctl,
|
||||
.llseek = no_llseek,
|
||||
.poll = pvr2_v4l2_poll,
|
||||
};
|
||||
|
||||
|
|
|
@ -1266,9 +1266,9 @@ int pwc_get_cmos_sensor(struct pwc_device *pdev, int *sensor)
|
|||
/* copy local variable to arg */
|
||||
#define ARG_OUT(ARG_name) /* nothing */
|
||||
|
||||
int pwc_ioctl(struct pwc_device *pdev, unsigned int cmd, void *arg)
|
||||
long pwc_ioctl(struct pwc_device *pdev, unsigned int cmd, void *arg)
|
||||
{
|
||||
int ret = 0;
|
||||
long ret = 0;
|
||||
|
||||
switch(cmd) {
|
||||
case VIDIOCPWCRUSER:
|
||||
|
|
|
@ -142,16 +142,16 @@ static struct {
|
|||
|
||||
/***/
|
||||
|
||||
static int pwc_video_open(struct inode *inode, struct file *file);
|
||||
static int pwc_video_close(struct inode *inode, struct file *file);
|
||||
static int pwc_video_open(struct file *file);
|
||||
static int pwc_video_close(struct file *file);
|
||||
static ssize_t pwc_video_read(struct file *file, char __user *buf,
|
||||
size_t count, loff_t *ppos);
|
||||
static unsigned int pwc_video_poll(struct file *file, poll_table *wait);
|
||||
static int pwc_video_ioctl(struct inode *inode, struct file *file,
|
||||
static long pwc_video_ioctl(struct file *file,
|
||||
unsigned int ioctlnr, unsigned long arg);
|
||||
static int pwc_video_mmap(struct file *file, struct vm_area_struct *vma);
|
||||
|
||||
static const struct file_operations pwc_fops = {
|
||||
static const struct v4l2_file_operations pwc_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = pwc_video_open,
|
||||
.release = pwc_video_close,
|
||||
|
@ -159,10 +159,6 @@ static const struct file_operations pwc_fops = {
|
|||
.poll = pwc_video_poll,
|
||||
.mmap = pwc_video_mmap,
|
||||
.ioctl = pwc_video_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
static struct video_device pwc_template = {
|
||||
.name = "Philips Webcam", /* Filled in later */
|
||||
|
@ -1104,7 +1100,7 @@ static const char *pwc_sensor_type_to_string(unsigned int sensor_type)
|
|||
/***************************************************************************/
|
||||
/* Video4Linux functions */
|
||||
|
||||
static int pwc_video_open(struct inode *inode, struct file *file)
|
||||
static int pwc_video_open(struct file *file)
|
||||
{
|
||||
int i, ret;
|
||||
struct video_device *vdev = video_devdata(file);
|
||||
|
@ -1224,7 +1220,7 @@ static void pwc_cleanup(struct pwc_device *pdev)
|
|||
}
|
||||
|
||||
/* Note that all cleanup is done in the reverse order as in _open */
|
||||
static int pwc_video_close(struct inode *inode, struct file *file)
|
||||
static int pwc_video_close(struct file *file)
|
||||
{
|
||||
struct video_device *vdev = file->private_data;
|
||||
struct pwc_device *pdev;
|
||||
|
@ -1399,12 +1395,12 @@ static unsigned int pwc_video_poll(struct file *file, poll_table *wait)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int pwc_video_ioctl(struct inode *inode, struct file *file,
|
||||
static long pwc_video_ioctl(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct video_device *vdev = file->private_data;
|
||||
struct pwc_device *pdev;
|
||||
int r = -ENODEV;
|
||||
long r = -ENODEV;
|
||||
|
||||
if (!vdev)
|
||||
goto out;
|
||||
|
|
|
@ -337,7 +337,7 @@ static int pwc_vidioc_set_fmt(struct pwc_device *pdev, struct v4l2_format *f)
|
|||
|
||||
}
|
||||
|
||||
int pwc_video_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
long pwc_video_do_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct video_device *vdev = video_devdata(file);
|
||||
struct pwc_device *pdev;
|
||||
|
|
|
@ -337,10 +337,10 @@ extern int pwc_get_dynamic_noise(struct pwc_device *pdev, int *noise);
|
|||
extern int pwc_camera_power(struct pwc_device *pdev, int power);
|
||||
|
||||
/* Private ioctl()s; see pwc-ioctl.h */
|
||||
extern int pwc_ioctl(struct pwc_device *pdev, unsigned int cmd, void *arg);
|
||||
extern long pwc_ioctl(struct pwc_device *pdev, unsigned int cmd, void *arg);
|
||||
|
||||
/** Functions in pwc-v4l.c */
|
||||
extern int pwc_video_do_ioctl(struct file *file, unsigned int cmd, void *arg);
|
||||
extern long pwc_video_do_ioctl(struct file *file, unsigned int cmd, void *arg);
|
||||
|
||||
/** pwc-uncompress.c */
|
||||
/* Expand frame to image, possibly including decompression. Uses read_frame and fill_image */
|
||||
|
|
|
@ -1502,9 +1502,9 @@ static int vidioc_s_jpegcomp(struct file *file, void *priv,
|
|||
dprintk(2, "setting jpeg quality %d\n", jc->quality);
|
||||
return 0;
|
||||
}
|
||||
static int s2255_open(struct inode *inode, struct file *file)
|
||||
static int s2255_open(struct file *file)
|
||||
{
|
||||
int minor = iminor(inode);
|
||||
int minor = video_devdata(file)->minor;
|
||||
struct s2255_dev *h, *dev = NULL;
|
||||
struct s2255_fh *fh;
|
||||
struct list_head *list;
|
||||
|
@ -1711,11 +1711,11 @@ static void s2255_destroy(struct kref *kref)
|
|||
mutex_unlock(&dev->open_lock);
|
||||
}
|
||||
|
||||
static int s2255_close(struct inode *inode, struct file *file)
|
||||
static int s2255_close(struct file *file)
|
||||
{
|
||||
struct s2255_fh *fh = file->private_data;
|
||||
struct s2255_dev *dev = fh->dev;
|
||||
int minor = iminor(inode);
|
||||
int minor = video_devdata(file)->minor;
|
||||
if (!dev)
|
||||
return -ENODEV;
|
||||
|
||||
|
@ -1759,15 +1759,13 @@ static int s2255_mmap_v4l(struct file *file, struct vm_area_struct *vma)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static const struct file_operations s2255_fops_v4l = {
|
||||
static const struct v4l2_file_operations s2255_fops_v4l = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = s2255_open,
|
||||
.release = s2255_close,
|
||||
.poll = s2255_poll,
|
||||
.ioctl = video_ioctl2, /* V4L2 ioctl handler */
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
.mmap = s2255_mmap_v4l,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops s2255_ioctl_ops = {
|
||||
|
|
|
@ -804,7 +804,7 @@ static inline int saa5246a_stop_dau(struct saa5246a_device *t,
|
|||
*
|
||||
* Returns 0 if successful
|
||||
*/
|
||||
static int do_saa5246a_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
static long do_saa5246a_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
{
|
||||
struct saa5246a_device *t = video_drvdata(file);
|
||||
|
||||
|
@ -944,11 +944,11 @@ static inline unsigned int vtx_fix_command(unsigned int cmd)
|
|||
/*
|
||||
* Handle the locking
|
||||
*/
|
||||
static int saa5246a_ioctl(struct inode *inode, struct file *file,
|
||||
static long saa5246a_ioctl(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct saa5246a_device *t = video_drvdata(file);
|
||||
int err;
|
||||
long err;
|
||||
|
||||
cmd = vtx_fix_command(cmd);
|
||||
mutex_lock(&t->lock);
|
||||
|
@ -957,7 +957,7 @@ static int saa5246a_ioctl(struct inode *inode, struct file *file,
|
|||
return err;
|
||||
}
|
||||
|
||||
static int saa5246a_open(struct inode *inode, struct file *file)
|
||||
static int saa5246a_open(struct file *file)
|
||||
{
|
||||
struct saa5246a_device *t = video_drvdata(file);
|
||||
|
||||
|
@ -999,7 +999,7 @@ static int saa5246a_open(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int saa5246a_release(struct inode *inode, struct file *file)
|
||||
static int saa5246a_release(struct file *file)
|
||||
{
|
||||
struct saa5246a_device *t = video_drvdata(file);
|
||||
|
||||
|
@ -1018,12 +1018,11 @@ static int saa5246a_release(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations saa_fops = {
|
||||
static const struct v4l2_file_operations saa_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = saa5246a_open,
|
||||
.release = saa5246a_release,
|
||||
.ioctl = saa5246a_ioctl,
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static struct video_device saa_template =
|
||||
|
|
|
@ -190,7 +190,7 @@ static int i2c_getdata(struct saa5249_device *t, int count, u8 *buf)
|
|||
* Standard character-device-driver functions
|
||||
*/
|
||||
|
||||
static int do_saa5249_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
static long do_saa5249_ioctl(struct file *file, unsigned int cmd, void *arg)
|
||||
{
|
||||
static int virtual_mode = false;
|
||||
struct saa5249_device *t = video_drvdata(file);
|
||||
|
@ -479,11 +479,11 @@ static inline unsigned int vtx_fix_command(unsigned int cmd)
|
|||
* Handle the locking
|
||||
*/
|
||||
|
||||
static int saa5249_ioctl(struct inode *inode, struct file *file,
|
||||
static long saa5249_ioctl(struct file *file,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct saa5249_device *t = video_drvdata(file);
|
||||
int err;
|
||||
long err;
|
||||
|
||||
cmd = vtx_fix_command(cmd);
|
||||
mutex_lock(&t->lock);
|
||||
|
@ -492,7 +492,7 @@ static int saa5249_ioctl(struct inode *inode, struct file *file,
|
|||
return err;
|
||||
}
|
||||
|
||||
static int saa5249_open(struct inode *inode, struct file *file)
|
||||
static int saa5249_open(struct file *file)
|
||||
{
|
||||
struct saa5249_device *t = video_drvdata(file);
|
||||
int pgbuf;
|
||||
|
@ -529,7 +529,7 @@ static int saa5249_open(struct inode *inode, struct file *file)
|
|||
|
||||
|
||||
|
||||
static int saa5249_release(struct inode *inode, struct file *file)
|
||||
static int saa5249_release(struct file *file)
|
||||
{
|
||||
struct saa5249_device *t = video_drvdata(file);
|
||||
|
||||
|
@ -539,15 +539,11 @@ static int saa5249_release(struct inode *inode, struct file *file)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations saa_fops = {
|
||||
static const struct v4l2_file_operations saa_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = saa5249_open,
|
||||
.release = saa5249_release,
|
||||
.ioctl = saa5249_ioctl,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_ioctl = v4l_compat_ioctl32,
|
||||
#endif
|
||||
.llseek = no_llseek,
|
||||
};
|
||||
|
||||
static struct video_device saa_template =
|
||||
|
|
|
@ -1371,25 +1371,24 @@ static int saa711x_g_vbi_data(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_dat
|
|||
}
|
||||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int saa711x_g_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
||||
static int saa711x_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
if (!v4l2_chip_match_i2c_client(client,
|
||||
reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_i2c_client(client, ®->match))
|
||||
return -EINVAL;
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
reg->val = saa711x_read(sd, reg->reg & 0xff);
|
||||
reg->size = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int saa711x_s_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
||||
static int saa711x_s_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
if (!v4l2_chip_match_i2c_client(client,
|
||||
reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_i2c_client(client, ®->match))
|
||||
return -EINVAL;
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
@ -1398,7 +1397,7 @@ static int saa711x_s_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
|||
}
|
||||
#endif
|
||||
|
||||
static int saa711x_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_chip_ident *chip)
|
||||
static int saa711x_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip)
|
||||
{
|
||||
struct saa711x_state *state = to_state(sd);
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
|
|
@ -623,25 +623,24 @@ static int saa7127_s_vbi_data(struct v4l2_subdev *sd, const struct v4l2_sliced_v
|
|||
}
|
||||
|
||||
#ifdef CONFIG_VIDEO_ADV_DEBUG
|
||||
static int saa7127_g_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
||||
static int saa7127_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
if (!v4l2_chip_match_i2c_client(client,
|
||||
reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_i2c_client(client, ®->match))
|
||||
return -EINVAL;
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
reg->val = saa7127_read(sd, reg->reg & 0xff);
|
||||
reg->size = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int saa7127_s_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
||||
static int saa7127_s_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
||||
if (!v4l2_chip_match_i2c_client(client,
|
||||
reg->match_type, reg->match_chip))
|
||||
if (!v4l2_chip_match_i2c_client(client, ®->match))
|
||||
return -EINVAL;
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
@ -650,7 +649,7 @@ static int saa7127_s_register(struct v4l2_subdev *sd, struct v4l2_register *reg)
|
|||
}
|
||||
#endif
|
||||
|
||||
static int saa7127_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_chip_ident *chip)
|
||||
static int saa7127_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip)
|
||||
{
|
||||
struct saa7127_state *state = to_state(sd);
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue