Merge branch 'v4l_for_linus' of git://linuxtv.org/mchehab/for_linus
* 'v4l_for_linus' of git://linuxtv.org/mchehab/for_linus: [media] vp7045: fix buffer setup [media] nuvoton-cir: simplify raw IR sample handling [media] [Resend] viacam: Don't explode if pci_find_bus() returns NULL [media] v4l2: Fix documentation of the codec device controls [media] gspca - sonixj: Fix the darkness of sensor om6802 in 320x240 [media] gspca - sonixj: Fix wrong register mask for sensor om6802 [media] gspca - ov519: Fix LED inversion of some ov519 webcams [media] pwc: precedence bug in pwc_init_controls()
This commit is contained in:
commit
87adf1c66c
|
@ -1455,7 +1455,7 @@ Applicable to the H264 encoder.</entry>
|
|||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<row id="v4l2-mpeg-video-h264-vui-sar-idc">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC</constant> </entry>
|
||||
<entry>enum v4l2_mpeg_video_h264_vui_sar_idc</entry>
|
||||
</row>
|
||||
|
@ -1561,7 +1561,7 @@ Applicable to the H264 encoder.</entry>
|
|||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<row id="v4l2-mpeg-video-h264-level">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LEVEL</constant> </entry>
|
||||
<entry>enum v4l2_mpeg_video_h264_level</entry>
|
||||
</row>
|
||||
|
@ -1641,7 +1641,7 @@ Possible values are:</entry>
|
|||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<row id="v4l2-mpeg-video-mpeg4-level">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL</constant> </entry>
|
||||
<entry>enum v4l2_mpeg_video_mpeg4_level</entry>
|
||||
</row>
|
||||
|
@ -1689,9 +1689,9 @@ Possible values are:</entry>
|
|||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<row id="v4l2-mpeg-video-h264-profile">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_PROFILE</constant> </entry>
|
||||
<entry>enum v4l2_mpeg_h264_profile</entry>
|
||||
<entry>enum v4l2_mpeg_video_h264_profile</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">The profile information for H264.
|
||||
Applicable to the H264 encoder.
|
||||
|
@ -1774,9 +1774,9 @@ Possible values are:</entry>
|
|||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<row id="v4l2-mpeg-video-mpeg4-profile">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE</constant> </entry>
|
||||
<entry>enum v4l2_mpeg_mpeg4_profile</entry>
|
||||
<entry>enum v4l2_mpeg_video_mpeg4_profile</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">The profile information for MPEG4.
|
||||
Applicable to the MPEG4 encoder.
|
||||
|
@ -1820,9 +1820,9 @@ Applicable to the encoder.
|
|||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<row id="v4l2-mpeg-video-multi-slice-mode">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE</constant> </entry>
|
||||
<entry>enum v4l2_mpeg_multi_slice_mode</entry>
|
||||
<entry>enum v4l2_mpeg_video_multi_slice_mode</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Determines how the encoder should handle division of frame into slices.
|
||||
Applicable to the encoder.
|
||||
|
@ -1868,9 +1868,9 @@ Applicable to the encoder.</entry>
|
|||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<row id="v4l2-mpeg-video-h264-loop-filter-mode">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE</constant> </entry>
|
||||
<entry>enum v4l2_mpeg_h264_loop_filter_mode</entry>
|
||||
<entry>enum v4l2_mpeg_video_h264_loop_filter_mode</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Loop filter mode for H264 encoder.
|
||||
Possible values are:</entry>
|
||||
|
@ -1913,9 +1913,9 @@ Applicable to the H264 encoder.</entry>
|
|||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<row id="v4l2-mpeg-video-h264-entropy-mode">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE</constant> </entry>
|
||||
<entry>enum v4l2_mpeg_h264_symbol_mode</entry>
|
||||
<entry>enum v4l2_mpeg_video_h264_entropy_mode</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Entropy coding mode for H264 - CABAC/CAVALC.
|
||||
Applicable to the H264 encoder.
|
||||
|
@ -2140,9 +2140,9 @@ previous frames. Applicable to the H264 encoder.</entry>
|
|||
</row>
|
||||
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<row id="v4l2-mpeg-video-header-mode">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_VIDEO_HEADER_MODE</constant> </entry>
|
||||
<entry>enum v4l2_mpeg_header_mode</entry>
|
||||
<entry>enum v4l2_mpeg_video_header_mode</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Determines whether the header is returned as the first buffer or is
|
||||
it returned together with the first frame. Applicable to encoders.
|
||||
|
@ -2320,9 +2320,9 @@ Valid only when H.264 and macroblock level RC is enabled (<constant>V4L2_CID_MPE
|
|||
Applicable to the H264 encoder.</entry>
|
||||
</row>
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<row id="v4l2-mpeg-mfc51-video-frame-skip-mode">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_FRAME_SKIP_MODE</constant> </entry>
|
||||
<entry>enum v4l2_mpeg_mfc51_frame_skip_mode</entry>
|
||||
<entry>enum v4l2_mpeg_mfc51_video_frame_skip_mode</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">
|
||||
Indicates in what conditions the encoder should skip frames. If encoding a frame would cause the encoded stream to be larger then
|
||||
|
@ -2361,9 +2361,9 @@ the stream will meet tight bandwidth contraints. Applicable to encoders.
|
|||
</entry>
|
||||
</row>
|
||||
<row><entry></entry></row>
|
||||
<row>
|
||||
<row id="v4l2-mpeg-mfc51-video-force-frame-type">
|
||||
<entry spanname="id"><constant>V4L2_CID_MPEG_MFC51_VIDEO_FORCE_FRAME_TYPE</constant> </entry>
|
||||
<entry>enum v4l2_mpeg_mfc51_force_frame_type</entry>
|
||||
<entry>enum v4l2_mpeg_mfc51_video_force_frame_type</entry>
|
||||
</row>
|
||||
<row><entry spanname="descr">Force a frame type for the next queued buffer. Applicable to encoders.
|
||||
Possible values are:</entry>
|
||||
|
|
|
@ -224,26 +224,8 @@ static struct dvb_usb_device_properties vp7045_properties;
|
|||
static int vp7045_usb_probe(struct usb_interface *intf,
|
||||
const struct usb_device_id *id)
|
||||
{
|
||||
struct dvb_usb_device *d;
|
||||
int ret = dvb_usb_device_init(intf, &vp7045_properties,
|
||||
THIS_MODULE, &d, adapter_nr);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
d->priv = kmalloc(20, GFP_KERNEL);
|
||||
if (!d->priv) {
|
||||
dvb_usb_device_exit(intf);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void vp7045_usb_disconnect(struct usb_interface *intf)
|
||||
{
|
||||
struct dvb_usb_device *d = usb_get_intfdata(intf);
|
||||
kfree(d->priv);
|
||||
dvb_usb_device_exit(intf);
|
||||
return dvb_usb_device_init(intf, &vp7045_properties,
|
||||
THIS_MODULE, NULL, adapter_nr);
|
||||
}
|
||||
|
||||
static struct usb_device_id vp7045_usb_table [] = {
|
||||
|
@ -258,7 +240,7 @@ MODULE_DEVICE_TABLE(usb, vp7045_usb_table);
|
|||
static struct dvb_usb_device_properties vp7045_properties = {
|
||||
.usb_ctrl = CYPRESS_FX2,
|
||||
.firmware = "dvb-usb-vp7045-01.fw",
|
||||
.size_of_priv = sizeof(u8 *),
|
||||
.size_of_priv = 20,
|
||||
|
||||
.num_adapters = 1,
|
||||
.adapter = {
|
||||
|
@ -305,7 +287,7 @@ static struct dvb_usb_device_properties vp7045_properties = {
|
|||
static struct usb_driver vp7045_usb_driver = {
|
||||
.name = "dvb_usb_vp7045",
|
||||
.probe = vp7045_usb_probe,
|
||||
.disconnect = vp7045_usb_disconnect,
|
||||
.disconnect = dvb_usb_device_exit,
|
||||
.id_table = vp7045_usb_table,
|
||||
};
|
||||
|
||||
|
|
|
@ -618,7 +618,6 @@ static void nvt_dump_rx_buf(struct nvt_dev *nvt)
|
|||
static void nvt_process_rx_ir_data(struct nvt_dev *nvt)
|
||||
{
|
||||
DEFINE_IR_RAW_EVENT(rawir);
|
||||
unsigned int count;
|
||||
u32 carrier;
|
||||
u8 sample;
|
||||
int i;
|
||||
|
@ -631,65 +630,38 @@ static void nvt_process_rx_ir_data(struct nvt_dev *nvt)
|
|||
if (nvt->carrier_detect_enabled)
|
||||
carrier = nvt_rx_carrier_detect(nvt);
|
||||
|
||||
count = nvt->pkts;
|
||||
nvt_dbg_verbose("Processing buffer of len %d", count);
|
||||
nvt_dbg_verbose("Processing buffer of len %d", nvt->pkts);
|
||||
|
||||
init_ir_raw_event(&rawir);
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
nvt->pkts--;
|
||||
for (i = 0; i < nvt->pkts; i++) {
|
||||
sample = nvt->buf[i];
|
||||
|
||||
rawir.pulse = ((sample & BUF_PULSE_BIT) != 0);
|
||||
rawir.duration = US_TO_NS((sample & BUF_LEN_MASK)
|
||||
* SAMPLE_PERIOD);
|
||||
|
||||
if ((sample & BUF_LEN_MASK) == BUF_LEN_MASK) {
|
||||
if (nvt->rawir.pulse == rawir.pulse)
|
||||
nvt->rawir.duration += rawir.duration;
|
||||
else {
|
||||
nvt->rawir.duration = rawir.duration;
|
||||
nvt->rawir.pulse = rawir.pulse;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
nvt_dbg("Storing %s with duration %d",
|
||||
rawir.pulse ? "pulse" : "space", rawir.duration);
|
||||
|
||||
rawir.duration += nvt->rawir.duration;
|
||||
|
||||
init_ir_raw_event(&nvt->rawir);
|
||||
nvt->rawir.duration = 0;
|
||||
nvt->rawir.pulse = rawir.pulse;
|
||||
|
||||
if (sample == BUF_PULSE_BIT)
|
||||
rawir.pulse = false;
|
||||
|
||||
if (rawir.duration) {
|
||||
nvt_dbg("Storing %s with duration %d",
|
||||
rawir.pulse ? "pulse" : "space",
|
||||
rawir.duration);
|
||||
|
||||
ir_raw_event_store_with_filter(nvt->rdev, &rawir);
|
||||
}
|
||||
ir_raw_event_store_with_filter(nvt->rdev, &rawir);
|
||||
|
||||
/*
|
||||
* BUF_PULSE_BIT indicates end of IR data, BUF_REPEAT_BYTE
|
||||
* indicates end of IR signal, but new data incoming. In both
|
||||
* cases, it means we're ready to call ir_raw_event_handle
|
||||
*/
|
||||
if ((sample == BUF_PULSE_BIT) && nvt->pkts) {
|
||||
if ((sample == BUF_PULSE_BIT) && (i + 1 < nvt->pkts)) {
|
||||
nvt_dbg("Calling ir_raw_event_handle (signal end)\n");
|
||||
ir_raw_event_handle(nvt->rdev);
|
||||
}
|
||||
}
|
||||
|
||||
nvt->pkts = 0;
|
||||
|
||||
nvt_dbg("Calling ir_raw_event_handle (buffer empty)\n");
|
||||
ir_raw_event_handle(nvt->rdev);
|
||||
|
||||
if (nvt->pkts) {
|
||||
nvt_dbg("Odd, pkts should be 0 now... (its %u)", nvt->pkts);
|
||||
nvt->pkts = 0;
|
||||
}
|
||||
|
||||
nvt_dbg_verbose("%s done", __func__);
|
||||
}
|
||||
|
||||
|
@ -1048,7 +1020,6 @@ static int nvt_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id)
|
|||
|
||||
spin_lock_init(&nvt->nvt_lock);
|
||||
spin_lock_init(&nvt->tx.lock);
|
||||
init_ir_raw_event(&nvt->rawir);
|
||||
|
||||
ret = -EBUSY;
|
||||
/* now claim resources */
|
||||
|
|
|
@ -67,7 +67,6 @@ static int debug;
|
|||
struct nvt_dev {
|
||||
struct pnp_dev *pdev;
|
||||
struct rc_dev *rdev;
|
||||
struct ir_raw_event rawir;
|
||||
|
||||
spinlock_t nvt_lock;
|
||||
|
||||
|
|
|
@ -2858,7 +2858,6 @@ static void ov7xx0_configure(struct sd *sd)
|
|||
case 0x60:
|
||||
PDEBUG(D_PROBE, "Sensor is a OV7660");
|
||||
sd->sensor = SEN_OV7660;
|
||||
sd->invert_led = 0;
|
||||
break;
|
||||
default:
|
||||
PDEBUG(D_PROBE, "Unknown sensor: 0x76%x", low);
|
||||
|
@ -3337,7 +3336,6 @@ static int sd_config(struct gspca_dev *gspca_dev,
|
|||
case BRIDGE_OV519:
|
||||
cam->cam_mode = ov519_vga_mode;
|
||||
cam->nmodes = ARRAY_SIZE(ov519_vga_mode);
|
||||
sd->invert_led = !sd->invert_led;
|
||||
break;
|
||||
case BRIDGE_OVFX2:
|
||||
cam->cam_mode = ov519_vga_mode;
|
||||
|
@ -5005,24 +5003,24 @@ static const struct sd_desc sd_desc = {
|
|||
/* -- module initialisation -- */
|
||||
static const struct usb_device_id device_table[] = {
|
||||
{USB_DEVICE(0x041e, 0x4003), .driver_info = BRIDGE_W9968CF },
|
||||
{USB_DEVICE(0x041e, 0x4052), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x041e, 0x405f),
|
||||
{USB_DEVICE(0x041e, 0x4052),
|
||||
.driver_info = BRIDGE_OV519 | BRIDGE_INVERT_LED },
|
||||
{USB_DEVICE(0x041e, 0x405f), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x041e, 0x4060), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x041e, 0x4061), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x041e, 0x4064),
|
||||
.driver_info = BRIDGE_OV519 | BRIDGE_INVERT_LED },
|
||||
{USB_DEVICE(0x041e, 0x4064), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x041e, 0x4067), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x041e, 0x4068),
|
||||
{USB_DEVICE(0x041e, 0x4068), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x045e, 0x028c),
|
||||
.driver_info = BRIDGE_OV519 | BRIDGE_INVERT_LED },
|
||||
{USB_DEVICE(0x045e, 0x028c), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x054c, 0x0154), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x054c, 0x0155),
|
||||
.driver_info = BRIDGE_OV519 | BRIDGE_INVERT_LED },
|
||||
{USB_DEVICE(0x054c, 0x0155), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x05a9, 0x0511), .driver_info = BRIDGE_OV511 },
|
||||
{USB_DEVICE(0x05a9, 0x0518), .driver_info = BRIDGE_OV518 },
|
||||
{USB_DEVICE(0x05a9, 0x0519), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x05a9, 0x0530), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x05a9, 0x0519),
|
||||
.driver_info = BRIDGE_OV519 | BRIDGE_INVERT_LED },
|
||||
{USB_DEVICE(0x05a9, 0x0530),
|
||||
.driver_info = BRIDGE_OV519 | BRIDGE_INVERT_LED },
|
||||
{USB_DEVICE(0x05a9, 0x2800), .driver_info = BRIDGE_OVFX2 },
|
||||
{USB_DEVICE(0x05a9, 0x4519), .driver_info = BRIDGE_OV519 },
|
||||
{USB_DEVICE(0x05a9, 0x8519), .driver_info = BRIDGE_OV519 },
|
||||
|
|
|
@ -2386,7 +2386,7 @@ static int sd_start(struct gspca_dev *gspca_dev)
|
|||
reg_w1(gspca_dev, 0x01, 0x22);
|
||||
msleep(100);
|
||||
reg01 = SCL_SEL_OD | S_PDN_INV;
|
||||
reg17 &= MCK_SIZE_MASK;
|
||||
reg17 &= ~MCK_SIZE_MASK;
|
||||
reg17 |= 0x04; /* clock / 4 */
|
||||
break;
|
||||
}
|
||||
|
@ -2532,6 +2532,10 @@ static int sd_start(struct gspca_dev *gspca_dev)
|
|||
if (!mode) { /* if 640x480 */
|
||||
reg17 &= ~MCK_SIZE_MASK;
|
||||
reg17 |= 0x04; /* clock / 4 */
|
||||
} else {
|
||||
reg01 &= ~SYS_SEL_48M; /* clk 24Mz */
|
||||
reg17 &= ~MCK_SIZE_MASK;
|
||||
reg17 |= 0x02; /* clock / 2 */
|
||||
}
|
||||
break;
|
||||
case SENSOR_OV7630:
|
||||
|
|
|
@ -338,7 +338,7 @@ int pwc_init_controls(struct pwc_device *pdev)
|
|||
if (pdev->restore_factory)
|
||||
pdev->restore_factory->flags = V4L2_CTRL_FLAG_UPDATE;
|
||||
|
||||
if (!pdev->features & FEATURE_MOTOR_PANTILT)
|
||||
if (!(pdev->features & FEATURE_MOTOR_PANTILT))
|
||||
return hdl->error;
|
||||
|
||||
/* Motor pan / tilt / reset */
|
||||
|
|
|
@ -1332,6 +1332,8 @@ static __devinit bool viacam_serial_is_enabled(void)
|
|||
struct pci_bus *pbus = pci_find_bus(0, 0);
|
||||
u8 cbyte;
|
||||
|
||||
if (!pbus)
|
||||
return false;
|
||||
pci_bus_read_config_byte(pbus, VIACAM_SERIAL_DEVFN,
|
||||
VIACAM_SERIAL_CREG, &cbyte);
|
||||
if ((cbyte & VIACAM_SERIAL_BIT) == 0)
|
||||
|
|
Loading…
Reference in a new issue