You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media fixes from Mauro Carvalho Chehab. Trivial conflict due to new USB HID ID's being added next to each other (Baanto vs Axentia). * 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (44 commits) [media] smia: Fix compile failures [media] Fix VIDIOC_DQEVENT docbook entry [media] s5p-fimc: Fix control creation function [media] s5p-mfc: Fix checkpatch error in s5p_mfc_shm.h file [media] s5p-mfc: Fix setting controls [media] v4l/s5p-mfc: added image size align in VIDIOC_TRY_FMT [media] v4l/s5p-mfc: corrected encoder v4l control definitions [media] v4l: mem2mem_testdev: Fix race conditions in driver [media] s5p-mfc: Bug fix of timestamp/timecode copy mechanism [media] cxd2820r: Fix an incorrect modulation type bitmask [media] em28xx: Show a warning if the board does not support remote controls [media] em28xx: Add remote control support for Terratec's Cinergy HTC Stick HD [media] USB: Staging: media: lirc: initialize spinlocks before usage [media] Revert "[media] media: mx2_camera: Fix mbus format handling" [media] bw-qcam: driver and pixfmt documentation fixes [media] cx88: fix firmware load on big-endian systems [media] cx18: support big-endian systems [media] ivtv: fix support for big-endian systems [media] tuner-core: return the frequency range of the correct tuner [media] v4l2-dev.c: fix g_parm regression in determine_valid_ioctls() ...
This commit is contained in:
@@ -986,13 +986,13 @@ http://www.thedirks.org/winnov/</ulink></para></entry>
|
||||
<row id="V4L2-PIX-FMT-Y4">
|
||||
<entry><constant>V4L2_PIX_FMT_Y4</constant></entry>
|
||||
<entry>'Y04 '</entry>
|
||||
<entry>Old 4-bit greyscale format. Only the least significant 4 bits of each byte are used,
|
||||
<entry>Old 4-bit greyscale format. Only the most significant 4 bits of each byte are used,
|
||||
the other bits are set to 0.</entry>
|
||||
</row>
|
||||
<row id="V4L2-PIX-FMT-Y6">
|
||||
<entry><constant>V4L2_PIX_FMT_Y6</constant></entry>
|
||||
<entry>'Y06 '</entry>
|
||||
<entry>Old 6-bit greyscale format. Only the least significant 6 bits of each byte are used,
|
||||
<entry>Old 6-bit greyscale format. Only the most significant 6 bits of each byte are used,
|
||||
the other bits are set to 0.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
|
||||
@@ -560,6 +560,7 @@ and discussions on the V4L mailing list.</revremark>
|
||||
&sub-g-tuner;
|
||||
&sub-log-status;
|
||||
&sub-overlay;
|
||||
&sub-prepare-buf;
|
||||
&sub-qbuf;
|
||||
&sub-querybuf;
|
||||
&sub-querycap;
|
||||
@@ -567,7 +568,6 @@ and discussions on the V4L mailing list.</revremark>
|
||||
&sub-query-dv-preset;
|
||||
&sub-query-dv-timings;
|
||||
&sub-querystd;
|
||||
&sub-prepare-buf;
|
||||
&sub-reqbufs;
|
||||
&sub-s-hw-freq-seek;
|
||||
&sub-streamon;
|
||||
|
||||
@@ -108,10 +108,9 @@ information.</para>
|
||||
/></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
<entry>struct v4l2_format</entry>
|
||||
<entry><structfield>format</structfield></entry>
|
||||
<entry>Filled in by the application, preserved by the driver.
|
||||
See <xref linkend="v4l2-format" />.</entry>
|
||||
<entry>Filled in by the application, preserved by the driver.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>__u32</entry>
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
<row>
|
||||
<entry></entry>
|
||||
<entry>&v4l2-event-frame-sync;</entry>
|
||||
<entry><structfield>frame</structfield></entry>
|
||||
<entry><structfield>frame_sync</structfield></entry>
|
||||
<entry>Event data for event V4L2_EVENT_FRAME_SYNC.</entry>
|
||||
</row>
|
||||
<row>
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#ifndef __MACH_MX2_CAM_H_
|
||||
#define __MACH_MX2_CAM_H_
|
||||
|
||||
#define MX2_CAMERA_SWAP16 (1 << 0)
|
||||
#define MX2_CAMERA_EXT_VSYNC (1 << 1)
|
||||
#define MX2_CAMERA_CCIR (1 << 2)
|
||||
#define MX2_CAMERA_CCIR_INTERLACE (1 << 3)
|
||||
@@ -30,6 +31,7 @@
|
||||
#define MX2_CAMERA_GATED_CLOCK (1 << 5)
|
||||
#define MX2_CAMERA_INV_DATA (1 << 6)
|
||||
#define MX2_CAMERA_PCLK_SAMPLE_RISING (1 << 7)
|
||||
#define MX2_CAMERA_PACK_DIR_MSB (1 << 8)
|
||||
|
||||
/**
|
||||
* struct mx2_camera_platform_data - optional platform data for mx2_camera
|
||||
|
||||
@@ -1880,6 +1880,7 @@ static const struct hid_device_id hid_ignore_list[] = {
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM)},
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM2)},
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_AVERMEDIA, USB_DEVICE_ID_AVER_FM_MR800) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_AXENTIA, USB_DEVICE_ID_AXENTIA_FM_RADIO) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI470X) },
|
||||
|
||||
@@ -160,6 +160,9 @@
|
||||
#define USB_VENDOR_ID_AVERMEDIA 0x07ca
|
||||
#define USB_DEVICE_ID_AVER_FM_MR800 0xb800
|
||||
|
||||
#define USB_VENDOR_ID_AXENTIA 0x12cf
|
||||
#define USB_DEVICE_ID_AXENTIA_FM_RADIO 0x7111
|
||||
|
||||
#define USB_VENDOR_ID_BAANTO 0x2453
|
||||
#define USB_DEVICE_ID_BAANTO_MT_190W2 0x0100
|
||||
|
||||
|
||||
@@ -198,7 +198,6 @@ static int fops_open(struct file *file)
|
||||
struct saa7146_dev *dev = video_drvdata(file);
|
||||
struct saa7146_fh *fh = NULL;
|
||||
int result = 0;
|
||||
enum v4l2_buf_type type;
|
||||
|
||||
DEB_EE("file:%p, dev:%s\n", file, video_device_node_name(vdev));
|
||||
|
||||
@@ -207,10 +206,6 @@ static int fops_open(struct file *file)
|
||||
|
||||
DEB_D("using: %p\n", dev);
|
||||
|
||||
type = vdev->vfl_type == VFL_TYPE_GRABBER
|
||||
? V4L2_BUF_TYPE_VIDEO_CAPTURE
|
||||
: V4L2_BUF_TYPE_VBI_CAPTURE;
|
||||
|
||||
/* check if an extension is registered */
|
||||
if( NULL == dev->ext ) {
|
||||
DEB_S("no extension registered for this device\n");
|
||||
|
||||
@@ -516,9 +516,9 @@ static int cx24110_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks)
|
||||
if(cx24110_readreg(state,0x10)&0x40) {
|
||||
/* the RS error counter has finished one counting window */
|
||||
cx24110_writereg(state,0x10,0x60); /* select the byer reg */
|
||||
cx24110_readreg(state, 0x12) |
|
||||
(void)(cx24110_readreg(state, 0x12) |
|
||||
(cx24110_readreg(state, 0x13) << 8) |
|
||||
(cx24110_readreg(state, 0x14) << 16);
|
||||
(cx24110_readreg(state, 0x14) << 16));
|
||||
cx24110_writereg(state,0x10,0x70); /* select the bler reg */
|
||||
state->lastbler=cx24110_readreg(state,0x12)|
|
||||
(cx24110_readreg(state,0x13)<<8)|
|
||||
|
||||
@@ -121,7 +121,7 @@ int cxd2820r_get_frontend_c(struct dvb_frontend *fe)
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
switch ((buf[0] >> 0) & 0x03) {
|
||||
switch ((buf[0] >> 0) & 0x07) {
|
||||
case 0:
|
||||
c->modulation = QAM_16;
|
||||
break;
|
||||
|
||||
@@ -126,7 +126,7 @@ static int lg216x_write_regs(struct lg216x_state *state,
|
||||
|
||||
lg_reg("writing %d registers...\n", len);
|
||||
|
||||
for (i = 0; i < len - 1; i++) {
|
||||
for (i = 0; i < len; i++) {
|
||||
ret = lg216x_write_reg(state, regs[i].reg, regs[i].val);
|
||||
if (lg_fail(ret))
|
||||
return ret;
|
||||
|
||||
@@ -544,6 +544,8 @@ static const struct usb_device_id smsusb_id_table[] __devinitconst = {
|
||||
.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
|
||||
{ USB_DEVICE(0x2040, 0xc0a0),
|
||||
.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
|
||||
{ USB_DEVICE(0x2040, 0xf5a0),
|
||||
.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
|
||||
@@ -157,7 +157,7 @@ static int __devinit maxiradio_probe(struct pci_dev *pdev, const struct pci_devi
|
||||
goto err_out_free_region;
|
||||
|
||||
dev->io = pci_resource_start(pdev, 0);
|
||||
if (snd_tea575x_init(&dev->tea)) {
|
||||
if (snd_tea575x_init(&dev->tea, THIS_MODULE)) {
|
||||
printk(KERN_ERR "radio-maxiradio: Unable to detect TEA575x tuner\n");
|
||||
goto err_out_free_region;
|
||||
}
|
||||
|
||||
@@ -238,7 +238,7 @@ static int __devinit fmr2_probe(struct fmr2 *fmr2, struct device *pdev, int io)
|
||||
snprintf(fmr2->tea.bus_info, sizeof(fmr2->tea.bus_info), "%s:%s",
|
||||
fmr2->is_fmd2 ? "PnP" : "ISA", dev_name(pdev));
|
||||
|
||||
if (snd_tea575x_init(&fmr2->tea)) {
|
||||
if (snd_tea575x_init(&fmr2->tea, THIS_MODULE)) {
|
||||
printk(KERN_ERR "radio-sf16fmr2: Unable to detect TEA575x tuner\n");
|
||||
release_region(fmr2->io, 2);
|
||||
return -ENODEV;
|
||||
|
||||
@@ -51,6 +51,8 @@ static struct usb_device_id si470x_usb_driver_id_table[] = {
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x1b80, 0xd700, USB_CLASS_HID, 0, 0) },
|
||||
/* Sanei Electric, Inc. FM USB Radio (sold as DealExtreme.com PCear) */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x10c5, 0x819a, USB_CLASS_HID, 0, 0) },
|
||||
/* Axentia ALERT FM USB Receiver */
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(0x12cf, 0x7111, USB_CLASS_HID, 0, 0) },
|
||||
/* Terminating entry */
|
||||
{ }
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1218,6 +1218,11 @@ audio_mux(struct bttv *btv, int input, int mute)
|
||||
For now this is sufficient. */
|
||||
switch (input) {
|
||||
case TVAUDIO_INPUT_RADIO:
|
||||
/* Some boards need the msp do to the radio demod */
|
||||
if (btv->radio_uses_msp_demodulator) {
|
||||
in = MSP_INPUT_DEFAULT;
|
||||
break;
|
||||
}
|
||||
in = MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1,
|
||||
MSP_DSP_IN_SCART, MSP_DSP_IN_SCART);
|
||||
break;
|
||||
|
||||
@@ -236,7 +236,6 @@ struct tvcard {
|
||||
/* i2c audio flags */
|
||||
unsigned int no_msp34xx:1;
|
||||
unsigned int no_tda7432:1;
|
||||
unsigned int needs_tvaudio:1;
|
||||
unsigned int msp34xx_alt:1;
|
||||
/* Note: currently no card definition needs to mark the presence
|
||||
of a RDS saa6588 chip. If this is ever needed, then add a new
|
||||
|
||||
@@ -440,6 +440,7 @@ struct bttv {
|
||||
/* radio data/state */
|
||||
int has_radio;
|
||||
int radio_user;
|
||||
int radio_uses_msp_demodulator;
|
||||
|
||||
/* miro/pinnacle + Aimslab VHX
|
||||
philips matchbox (tea5757 radio tuner) support */
|
||||
|
||||
@@ -607,8 +607,9 @@ static long qc_capture(struct qcam *q, char __user *buf, unsigned long len)
|
||||
}
|
||||
o = i * pixels_per_line + pixels_read + k;
|
||||
if (o < len) {
|
||||
u8 ch = invert - buffer[k];
|
||||
got++;
|
||||
put_user((invert - buffer[k]) << shift, buf + o);
|
||||
put_user(ch << shift, buf + o);
|
||||
}
|
||||
}
|
||||
pixels_read += bytes;
|
||||
@@ -648,8 +649,8 @@ static int qcam_querycap(struct file *file, void *priv,
|
||||
struct qcam *qcam = video_drvdata(file);
|
||||
|
||||
strlcpy(vcap->driver, qcam->v4l2_dev.name, sizeof(vcap->driver));
|
||||
strlcpy(vcap->card, "B&W Quickcam", sizeof(vcap->card));
|
||||
strlcpy(vcap->bus_info, "parport", sizeof(vcap->bus_info));
|
||||
strlcpy(vcap->card, "Connectix B&W Quickcam", sizeof(vcap->card));
|
||||
strlcpy(vcap->bus_info, qcam->pport->name, sizeof(vcap->bus_info));
|
||||
vcap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE;
|
||||
vcap->capabilities = vcap->device_caps | V4L2_CAP_DEVICE_CAPS;
|
||||
return 0;
|
||||
@@ -688,8 +689,8 @@ static int qcam_g_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format *f
|
||||
pix->height = qcam->height / qcam->transfer_scale;
|
||||
pix->pixelformat = (qcam->bpp == 4) ? V4L2_PIX_FMT_Y4 : V4L2_PIX_FMT_Y6;
|
||||
pix->field = V4L2_FIELD_NONE;
|
||||
pix->bytesperline = qcam->width;
|
||||
pix->sizeimage = qcam->width * qcam->height;
|
||||
pix->bytesperline = pix->width;
|
||||
pix->sizeimage = pix->width * pix->height;
|
||||
/* Just a guess */
|
||||
pix->colorspace = V4L2_COLORSPACE_SRGB;
|
||||
return 0;
|
||||
@@ -757,7 +758,7 @@ static int qcam_enum_fmt_vid_cap(struct file *file, void *fh, struct v4l2_fmtdes
|
||||
"4-Bit Monochrome", V4L2_PIX_FMT_Y4,
|
||||
{ 0, 0, 0, 0 }
|
||||
},
|
||||
{ 0, 0, 0,
|
||||
{ 1, 0, 0,
|
||||
"6-Bit Monochrome", V4L2_PIX_FMT_Y6,
|
||||
{ 0, 0, 0, 0 }
|
||||
},
|
||||
@@ -772,6 +773,25 @@ static int qcam_enum_fmt_vid_cap(struct file *file, void *fh, struct v4l2_fmtdes
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int qcam_enum_framesizes(struct file *file, void *fh,
|
||||
struct v4l2_frmsizeenum *fsize)
|
||||
{
|
||||
static const struct v4l2_frmsize_discrete sizes[] = {
|
||||
{ 80, 60 },
|
||||
{ 160, 120 },
|
||||
{ 320, 240 },
|
||||
};
|
||||
|
||||
if (fsize->index > 2)
|
||||
return -EINVAL;
|
||||
if (fsize->pixel_format != V4L2_PIX_FMT_Y4 &&
|
||||
fsize->pixel_format != V4L2_PIX_FMT_Y6)
|
||||
return -EINVAL;
|
||||
fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE;
|
||||
fsize->discrete = sizes[fsize->index];
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t qcam_read(struct file *file, char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
@@ -795,6 +815,11 @@ static ssize_t qcam_read(struct file *file, char __user *buf,
|
||||
return len;
|
||||
}
|
||||
|
||||
static unsigned int qcam_poll(struct file *filp, poll_table *wait)
|
||||
{
|
||||
return v4l2_ctrl_poll(filp, wait) | POLLIN | POLLRDNORM;
|
||||
}
|
||||
|
||||
static int qcam_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct qcam *qcam =
|
||||
@@ -828,7 +853,7 @@ static const struct v4l2_file_operations qcam_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = v4l2_fh_open,
|
||||
.release = v4l2_fh_release,
|
||||
.poll = v4l2_ctrl_poll,
|
||||
.poll = qcam_poll,
|
||||
.unlocked_ioctl = video_ioctl2,
|
||||
.read = qcam_read,
|
||||
};
|
||||
@@ -839,6 +864,7 @@ static const struct v4l2_ioctl_ops qcam_ioctl_ops = {
|
||||
.vidioc_s_input = qcam_s_input,
|
||||
.vidioc_enum_input = qcam_enum_input,
|
||||
.vidioc_enum_fmt_vid_cap = qcam_enum_fmt_vid_cap,
|
||||
.vidioc_enum_framesizes = qcam_enum_framesizes,
|
||||
.vidioc_g_fmt_vid_cap = qcam_g_fmt_vid_cap,
|
||||
.vidioc_s_fmt_vid_cap = qcam_s_fmt_vid_cap,
|
||||
.vidioc_try_fmt_vid_cap = qcam_try_fmt_vid_cap,
|
||||
@@ -864,9 +890,9 @@ static struct qcam *qcam_init(struct parport *port)
|
||||
return NULL;
|
||||
|
||||
v4l2_dev = &qcam->v4l2_dev;
|
||||
strlcpy(v4l2_dev->name, "bw-qcam", sizeof(v4l2_dev->name));
|
||||
snprintf(v4l2_dev->name, sizeof(v4l2_dev->name), "bw-qcam%d", num_cams);
|
||||
|
||||
if (v4l2_device_register(NULL, v4l2_dev) < 0) {
|
||||
if (v4l2_device_register(port->dev, v4l2_dev) < 0) {
|
||||
v4l2_err(v4l2_dev, "Could not register v4l2_device\n");
|
||||
kfree(qcam);
|
||||
return NULL;
|
||||
@@ -886,7 +912,7 @@ static struct qcam *qcam_init(struct parport *port)
|
||||
return NULL;
|
||||
}
|
||||
qcam->pport = port;
|
||||
qcam->pdev = parport_register_device(port, "bw-qcam", NULL, NULL,
|
||||
qcam->pdev = parport_register_device(port, v4l2_dev->name, NULL, NULL,
|
||||
NULL, 0, NULL);
|
||||
if (qcam->pdev == NULL) {
|
||||
v4l2_err(v4l2_dev, "couldn't register for %s.\n", port->name);
|
||||
@@ -975,6 +1001,7 @@ static int init_bwqcam(struct parport *port)
|
||||
return -ENODEV;
|
||||
}
|
||||
qc_calibrate(qcam);
|
||||
v4l2_ctrl_handler_setup(&qcam->hdl);
|
||||
|
||||
parport_release(qcam->pdev);
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user