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>
|
||||||
|
|
||||||
<row><entry></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 spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_VUI_SAR_IDC</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_video_h264_vui_sar_idc</entry>
|
<entry>enum v4l2_mpeg_video_h264_vui_sar_idc</entry>
|
||||||
</row>
|
</row>
|
||||||
@ -1561,7 +1561,7 @@ Applicable to the H264 encoder.</entry>
|
|||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></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 spanname="id"><constant>V4L2_CID_MPEG_VIDEO_H264_LEVEL</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_video_h264_level</entry>
|
<entry>enum v4l2_mpeg_video_h264_level</entry>
|
||||||
</row>
|
</row>
|
||||||
@ -1641,7 +1641,7 @@ Possible values are:</entry>
|
|||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></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 spanname="id"><constant>V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL</constant> </entry>
|
||||||
<entry>enum v4l2_mpeg_video_mpeg4_level</entry>
|
<entry>enum v4l2_mpeg_video_mpeg4_level</entry>
|
||||||
</row>
|
</row>
|
||||||
@ -1689,9 +1689,9 @@ Possible values are:</entry>
|
|||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></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 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>
|
||||||
<row><entry spanname="descr">The profile information for H264.
|
<row><entry spanname="descr">The profile information for H264.
|
||||||
Applicable to the H264 encoder.
|
Applicable to the H264 encoder.
|
||||||
@ -1774,9 +1774,9 @@ Possible values are:</entry>
|
|||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></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 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>
|
||||||
<row><entry spanname="descr">The profile information for MPEG4.
|
<row><entry spanname="descr">The profile information for MPEG4.
|
||||||
Applicable to the MPEG4 encoder.
|
Applicable to the MPEG4 encoder.
|
||||||
@ -1820,9 +1820,9 @@ Applicable to the encoder.
|
|||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></entry></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 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>
|
||||||
<row><entry spanname="descr">Determines how the encoder should handle division of frame into slices.
|
<row><entry spanname="descr">Determines how the encoder should handle division of frame into slices.
|
||||||
Applicable to the encoder.
|
Applicable to the encoder.
|
||||||
@ -1868,9 +1868,9 @@ Applicable to the encoder.</entry>
|
|||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></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 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>
|
||||||
<row><entry spanname="descr">Loop filter mode for H264 encoder.
|
<row><entry spanname="descr">Loop filter mode for H264 encoder.
|
||||||
Possible values are:</entry>
|
Possible values are:</entry>
|
||||||
@ -1913,9 +1913,9 @@ Applicable to the H264 encoder.</entry>
|
|||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></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 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>
|
||||||
<row><entry spanname="descr">Entropy coding mode for H264 - CABAC/CAVALC.
|
<row><entry spanname="descr">Entropy coding mode for H264 - CABAC/CAVALC.
|
||||||
Applicable to the H264 encoder.
|
Applicable to the H264 encoder.
|
||||||
@ -2140,9 +2140,9 @@ previous frames. Applicable to the H264 encoder.</entry>
|
|||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row><entry></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 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>
|
||||||
<row><entry spanname="descr">Determines whether the header is returned as the first buffer or is
|
<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.
|
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>
|
Applicable to the H264 encoder.</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry></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 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>
|
||||||
<row><entry spanname="descr">
|
<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
|
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>
|
</entry>
|
||||||
</row>
|
</row>
|
||||||
<row><entry></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 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>
|
||||||
<row><entry spanname="descr">Force a frame type for the next queued buffer. Applicable to encoders.
|
<row><entry spanname="descr">Force a frame type for the next queued buffer. Applicable to encoders.
|
||||||
Possible values are:</entry>
|
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,
|
static int vp7045_usb_probe(struct usb_interface *intf,
|
||||||
const struct usb_device_id *id)
|
const struct usb_device_id *id)
|
||||||
{
|
{
|
||||||
struct dvb_usb_device *d;
|
return dvb_usb_device_init(intf, &vp7045_properties,
|
||||||
int ret = dvb_usb_device_init(intf, &vp7045_properties,
|
THIS_MODULE, NULL, adapter_nr);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct usb_device_id vp7045_usb_table [] = {
|
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 = {
|
static struct dvb_usb_device_properties vp7045_properties = {
|
||||||
.usb_ctrl = CYPRESS_FX2,
|
.usb_ctrl = CYPRESS_FX2,
|
||||||
.firmware = "dvb-usb-vp7045-01.fw",
|
.firmware = "dvb-usb-vp7045-01.fw",
|
||||||
.size_of_priv = sizeof(u8 *),
|
.size_of_priv = 20,
|
||||||
|
|
||||||
.num_adapters = 1,
|
.num_adapters = 1,
|
||||||
.adapter = {
|
.adapter = {
|
||||||
@ -305,7 +287,7 @@ static struct dvb_usb_device_properties vp7045_properties = {
|
|||||||
static struct usb_driver vp7045_usb_driver = {
|
static struct usb_driver vp7045_usb_driver = {
|
||||||
.name = "dvb_usb_vp7045",
|
.name = "dvb_usb_vp7045",
|
||||||
.probe = vp7045_usb_probe,
|
.probe = vp7045_usb_probe,
|
||||||
.disconnect = vp7045_usb_disconnect,
|
.disconnect = dvb_usb_device_exit,
|
||||||
.id_table = vp7045_usb_table,
|
.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)
|
static void nvt_process_rx_ir_data(struct nvt_dev *nvt)
|
||||||
{
|
{
|
||||||
DEFINE_IR_RAW_EVENT(rawir);
|
DEFINE_IR_RAW_EVENT(rawir);
|
||||||
unsigned int count;
|
|
||||||
u32 carrier;
|
u32 carrier;
|
||||||
u8 sample;
|
u8 sample;
|
||||||
int i;
|
int i;
|
||||||
@ -631,65 +630,38 @@ static void nvt_process_rx_ir_data(struct nvt_dev *nvt)
|
|||||||
if (nvt->carrier_detect_enabled)
|
if (nvt->carrier_detect_enabled)
|
||||||
carrier = nvt_rx_carrier_detect(nvt);
|
carrier = nvt_rx_carrier_detect(nvt);
|
||||||
|
|
||||||
count = nvt->pkts;
|
nvt_dbg_verbose("Processing buffer of len %d", nvt->pkts);
|
||||||
nvt_dbg_verbose("Processing buffer of len %d", count);
|
|
||||||
|
|
||||||
init_ir_raw_event(&rawir);
|
init_ir_raw_event(&rawir);
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < nvt->pkts; i++) {
|
||||||
nvt->pkts--;
|
|
||||||
sample = nvt->buf[i];
|
sample = nvt->buf[i];
|
||||||
|
|
||||||
rawir.pulse = ((sample & BUF_PULSE_BIT) != 0);
|
rawir.pulse = ((sample & BUF_PULSE_BIT) != 0);
|
||||||
rawir.duration = US_TO_NS((sample & BUF_LEN_MASK)
|
rawir.duration = US_TO_NS((sample & BUF_LEN_MASK)
|
||||||
* SAMPLE_PERIOD);
|
* SAMPLE_PERIOD);
|
||||||
|
|
||||||
if ((sample & BUF_LEN_MASK) == BUF_LEN_MASK) {
|
nvt_dbg("Storing %s with duration %d",
|
||||||
if (nvt->rawir.pulse == rawir.pulse)
|
rawir.pulse ? "pulse" : "space", rawir.duration);
|
||||||
nvt->rawir.duration += rawir.duration;
|
|
||||||
else {
|
|
||||||
nvt->rawir.duration = rawir.duration;
|
|
||||||
nvt->rawir.pulse = rawir.pulse;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
rawir.duration += nvt->rawir.duration;
|
ir_raw_event_store_with_filter(nvt->rdev, &rawir);
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* BUF_PULSE_BIT indicates end of IR data, BUF_REPEAT_BYTE
|
* BUF_PULSE_BIT indicates end of IR data, BUF_REPEAT_BYTE
|
||||||
* indicates end of IR signal, but new data incoming. In both
|
* indicates end of IR signal, but new data incoming. In both
|
||||||
* cases, it means we're ready to call ir_raw_event_handle
|
* 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");
|
nvt_dbg("Calling ir_raw_event_handle (signal end)\n");
|
||||||
ir_raw_event_handle(nvt->rdev);
|
ir_raw_event_handle(nvt->rdev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nvt->pkts = 0;
|
||||||
|
|
||||||
nvt_dbg("Calling ir_raw_event_handle (buffer empty)\n");
|
nvt_dbg("Calling ir_raw_event_handle (buffer empty)\n");
|
||||||
ir_raw_event_handle(nvt->rdev);
|
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__);
|
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->nvt_lock);
|
||||||
spin_lock_init(&nvt->tx.lock);
|
spin_lock_init(&nvt->tx.lock);
|
||||||
init_ir_raw_event(&nvt->rawir);
|
|
||||||
|
|
||||||
ret = -EBUSY;
|
ret = -EBUSY;
|
||||||
/* now claim resources */
|
/* now claim resources */
|
||||||
|
@ -67,7 +67,6 @@ static int debug;
|
|||||||
struct nvt_dev {
|
struct nvt_dev {
|
||||||
struct pnp_dev *pdev;
|
struct pnp_dev *pdev;
|
||||||
struct rc_dev *rdev;
|
struct rc_dev *rdev;
|
||||||
struct ir_raw_event rawir;
|
|
||||||
|
|
||||||
spinlock_t nvt_lock;
|
spinlock_t nvt_lock;
|
||||||
|
|
||||||
|
@ -2858,7 +2858,6 @@ static void ov7xx0_configure(struct sd *sd)
|
|||||||
case 0x60:
|
case 0x60:
|
||||||
PDEBUG(D_PROBE, "Sensor is a OV7660");
|
PDEBUG(D_PROBE, "Sensor is a OV7660");
|
||||||
sd->sensor = SEN_OV7660;
|
sd->sensor = SEN_OV7660;
|
||||||
sd->invert_led = 0;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
PDEBUG(D_PROBE, "Unknown sensor: 0x76%x", low);
|
PDEBUG(D_PROBE, "Unknown sensor: 0x76%x", low);
|
||||||
@ -3337,7 +3336,6 @@ static int sd_config(struct gspca_dev *gspca_dev,
|
|||||||
case BRIDGE_OV519:
|
case BRIDGE_OV519:
|
||||||
cam->cam_mode = ov519_vga_mode;
|
cam->cam_mode = ov519_vga_mode;
|
||||||
cam->nmodes = ARRAY_SIZE(ov519_vga_mode);
|
cam->nmodes = ARRAY_SIZE(ov519_vga_mode);
|
||||||
sd->invert_led = !sd->invert_led;
|
|
||||||
break;
|
break;
|
||||||
case BRIDGE_OVFX2:
|
case BRIDGE_OVFX2:
|
||||||
cam->cam_mode = ov519_vga_mode;
|
cam->cam_mode = ov519_vga_mode;
|
||||||
@ -5005,24 +5003,24 @@ static const struct sd_desc sd_desc = {
|
|||||||
/* -- module initialisation -- */
|
/* -- module initialisation -- */
|
||||||
static const struct usb_device_id device_table[] = {
|
static const struct usb_device_id device_table[] = {
|
||||||
{USB_DEVICE(0x041e, 0x4003), .driver_info = BRIDGE_W9968CF },
|
{USB_DEVICE(0x041e, 0x4003), .driver_info = BRIDGE_W9968CF },
|
||||||
{USB_DEVICE(0x041e, 0x4052), .driver_info = BRIDGE_OV519 },
|
{USB_DEVICE(0x041e, 0x4052),
|
||||||
{USB_DEVICE(0x041e, 0x405f),
|
|
||||||
.driver_info = BRIDGE_OV519 | BRIDGE_INVERT_LED },
|
.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, 0x4060), .driver_info = BRIDGE_OV519 },
|
||||||
{USB_DEVICE(0x041e, 0x4061), .driver_info = BRIDGE_OV519 },
|
{USB_DEVICE(0x041e, 0x4061), .driver_info = BRIDGE_OV519 },
|
||||||
{USB_DEVICE(0x041e, 0x4064),
|
{USB_DEVICE(0x041e, 0x4064), .driver_info = BRIDGE_OV519 },
|
||||||
.driver_info = BRIDGE_OV519 | BRIDGE_INVERT_LED },
|
|
||||||
{USB_DEVICE(0x041e, 0x4067), .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 },
|
.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, 0x0154), .driver_info = BRIDGE_OV519 },
|
||||||
{USB_DEVICE(0x054c, 0x0155),
|
{USB_DEVICE(0x054c, 0x0155), .driver_info = BRIDGE_OV519 },
|
||||||
.driver_info = BRIDGE_OV519 | BRIDGE_INVERT_LED },
|
|
||||||
{USB_DEVICE(0x05a9, 0x0511), .driver_info = BRIDGE_OV511 },
|
{USB_DEVICE(0x05a9, 0x0511), .driver_info = BRIDGE_OV511 },
|
||||||
{USB_DEVICE(0x05a9, 0x0518), .driver_info = BRIDGE_OV518 },
|
{USB_DEVICE(0x05a9, 0x0518), .driver_info = BRIDGE_OV518 },
|
||||||
{USB_DEVICE(0x05a9, 0x0519), .driver_info = BRIDGE_OV519 },
|
{USB_DEVICE(0x05a9, 0x0519),
|
||||||
{USB_DEVICE(0x05a9, 0x0530), .driver_info = BRIDGE_OV519 },
|
.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, 0x2800), .driver_info = BRIDGE_OVFX2 },
|
||||||
{USB_DEVICE(0x05a9, 0x4519), .driver_info = BRIDGE_OV519 },
|
{USB_DEVICE(0x05a9, 0x4519), .driver_info = BRIDGE_OV519 },
|
||||||
{USB_DEVICE(0x05a9, 0x8519), .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);
|
reg_w1(gspca_dev, 0x01, 0x22);
|
||||||
msleep(100);
|
msleep(100);
|
||||||
reg01 = SCL_SEL_OD | S_PDN_INV;
|
reg01 = SCL_SEL_OD | S_PDN_INV;
|
||||||
reg17 &= MCK_SIZE_MASK;
|
reg17 &= ~MCK_SIZE_MASK;
|
||||||
reg17 |= 0x04; /* clock / 4 */
|
reg17 |= 0x04; /* clock / 4 */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2532,6 +2532,10 @@ static int sd_start(struct gspca_dev *gspca_dev)
|
|||||||
if (!mode) { /* if 640x480 */
|
if (!mode) { /* if 640x480 */
|
||||||
reg17 &= ~MCK_SIZE_MASK;
|
reg17 &= ~MCK_SIZE_MASK;
|
||||||
reg17 |= 0x04; /* clock / 4 */
|
reg17 |= 0x04; /* clock / 4 */
|
||||||
|
} else {
|
||||||
|
reg01 &= ~SYS_SEL_48M; /* clk 24Mz */
|
||||||
|
reg17 &= ~MCK_SIZE_MASK;
|
||||||
|
reg17 |= 0x02; /* clock / 2 */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SENSOR_OV7630:
|
case SENSOR_OV7630:
|
||||||
|
@ -338,7 +338,7 @@ int pwc_init_controls(struct pwc_device *pdev)
|
|||||||
if (pdev->restore_factory)
|
if (pdev->restore_factory)
|
||||||
pdev->restore_factory->flags = V4L2_CTRL_FLAG_UPDATE;
|
pdev->restore_factory->flags = V4L2_CTRL_FLAG_UPDATE;
|
||||||
|
|
||||||
if (!pdev->features & FEATURE_MOTOR_PANTILT)
|
if (!(pdev->features & FEATURE_MOTOR_PANTILT))
|
||||||
return hdl->error;
|
return hdl->error;
|
||||||
|
|
||||||
/* Motor pan / tilt / reset */
|
/* 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);
|
struct pci_bus *pbus = pci_find_bus(0, 0);
|
||||||
u8 cbyte;
|
u8 cbyte;
|
||||||
|
|
||||||
|
if (!pbus)
|
||||||
|
return false;
|
||||||
pci_bus_read_config_byte(pbus, VIACAM_SERIAL_DEVFN,
|
pci_bus_read_config_byte(pbus, VIACAM_SERIAL_DEVFN,
|
||||||
VIACAM_SERIAL_CREG, &cbyte);
|
VIACAM_SERIAL_CREG, &cbyte);
|
||||||
if ((cbyte & VIACAM_SERIAL_BIT) == 0)
|
if ((cbyte & VIACAM_SERIAL_BIT) == 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user