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: (27 commits) V4L/DVB (13314): saa7134: set ts_force_val for the Hauppauge WinTV HVR-1150 V4L/DVB (13313): saa7134: add support for FORCE_TS_VALID mode for mpeg ts input V4L/DVB (13311): uvcvideo: Fix compilation warning with 2.6.32 due to type mismatch with abs() V4L/DVB (13309): uvcvideo: Ignore the FIX_BANDWIDTH for compressed video V4L/DVB (13287): ce6230 - saa7164-cmd: Fix wrong sizeof V4L/DVB (13286): pxa-camera: Fix missing sched.h V4L/DVB (13264): gspca_mr97310a: Change vstart for CIF sensor type 1 cams V4L/DVB (13257): gspca - m5602-s5k4aa: Add vflip for Fujitsu Amilo Xi 2528 V4L/DVB (13256): gspca - m5602-s5k4aa: Add another MSI GX700 vflip quirk V4L/DVB (13255): gspca - m5602-s5k4aa: Add vflip quirk for the Bruneinit laptop V4L/DVB (13240): firedtv: fix regression: tuning fails due to bogus error return V4L/DVB (13237): firedtv: length field corrupt in ca2host if length>127 V4L/DVB (13230): s2255drv: Don't conditionalize video buffer completion on waiting processes V4L/DVB (13202): smsusb: add autodetection support for three additional Hauppauge USB IDs V4L/DVB (13190): em28xx: fix panic that can occur when starting audio streaming V4L/DVB (13170): bttv: Fix reversed polarity error when switching video standard V4L/DVB (13169): bttv: Fix potential out-of-order field processing V4L/DVB (13167): pt1: Fix a compile error on arm V4L/DVB (13132): fix use-after-free Oops, resulting from a driver-core API change V4L/DVB (13131): pxa_camera: fix camera pixel format configuration ...
This commit is contained in:
commit
a544de2ee0
@ -616,13 +616,13 @@ static int tda18271_rf_tracking_filters_init(struct dvb_frontend *fe, u32 freq)
|
||||
case RF2:
|
||||
map[i].rf_a1 = (prog_cal[RF2] - prog_tab[RF2] -
|
||||
prog_cal[RF1] + prog_tab[RF1]) /
|
||||
((rf_freq[RF2] - rf_freq[RF1]) / 1000);
|
||||
(s32)((rf_freq[RF2] - rf_freq[RF1]) / 1000);
|
||||
map[i].rf2 = rf_freq[RF2] / 1000;
|
||||
break;
|
||||
case RF3:
|
||||
map[i].rf_a2 = (prog_cal[RF3] - prog_tab[RF3] -
|
||||
prog_cal[RF2] + prog_tab[RF2]) /
|
||||
((rf_freq[RF3] - rf_freq[RF2]) / 1000);
|
||||
(s32)((rf_freq[RF3] - rf_freq[RF2]) / 1000);
|
||||
map[i].rf_b2 = prog_cal[RF2] - prog_tab[RF2];
|
||||
map[i].rf3 = rf_freq[RF3] / 1000;
|
||||
break;
|
||||
@ -1000,12 +1000,12 @@ static int tda18271_set_analog_params(struct dvb_frontend *fe,
|
||||
struct tda18271_std_map_item *map;
|
||||
char *mode;
|
||||
int ret;
|
||||
u32 freq = params->frequency * 62500;
|
||||
u32 freq = params->frequency * 125 *
|
||||
((params->mode == V4L2_TUNER_RADIO) ? 1 : 1000) / 2;
|
||||
|
||||
priv->mode = TDA18271_ANALOG;
|
||||
|
||||
if (params->mode == V4L2_TUNER_RADIO) {
|
||||
freq = freq / 1000;
|
||||
map = &std_map->fm_radio;
|
||||
mode = "fm";
|
||||
} else if (params->std & V4L2_STD_MN) {
|
||||
|
@ -75,7 +75,7 @@ config DVB_USB_DIB0700
|
||||
select DVB_DIB3000MC if !DVB_FE_CUSTOMISE
|
||||
select DVB_S5H1411 if !DVB_FE_CUSTOMISE
|
||||
select DVB_LGDT3305 if !DVB_FE_CUSTOMISE
|
||||
select DVB_TUNER_DIB0070
|
||||
select DVB_TUNER_DIB0070 if !DVB_FE_CUSTOMISE
|
||||
select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_MT2266 if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_XC2028 if !MEDIA_TUNER_CUSTOMISE
|
||||
|
@ -105,7 +105,7 @@ static int ce6230_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],
|
||||
int i = 0;
|
||||
struct req_t req;
|
||||
int ret = 0;
|
||||
memset(&req, 0, sizeof(&req));
|
||||
memset(&req, 0, sizeof(req));
|
||||
|
||||
if (num > 2)
|
||||
return -EINVAL;
|
||||
|
@ -1925,7 +1925,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
|
||||
{ NULL },
|
||||
},
|
||||
{ "Leadtek Winfast DTV Dongle (STK7700P based)",
|
||||
{ &dib0700_usb_id_table[8] },
|
||||
{ &dib0700_usb_id_table[8], &dib0700_usb_id_table[34] },
|
||||
{ NULL },
|
||||
},
|
||||
{ "AVerMedia AVerTV DVB-T Express",
|
||||
@ -2064,7 +2064,7 @@ struct dvb_usb_device_properties dib0700_devices[] = {
|
||||
},
|
||||
},
|
||||
|
||||
.num_device_descs = 12,
|
||||
.num_device_descs = 11,
|
||||
.devices = {
|
||||
{ "DiBcom STK7070P reference design",
|
||||
{ &dib0700_usb_id_table[15], NULL },
|
||||
@ -2098,11 +2098,6 @@ struct dvb_usb_device_properties dib0700_devices[] = {
|
||||
{ &dib0700_usb_id_table[30], NULL },
|
||||
{ NULL },
|
||||
},
|
||||
{ "Terratec Cinergy T USB XXS/ T3",
|
||||
{ &dib0700_usb_id_table[33],
|
||||
&dib0700_usb_id_table[52], NULL },
|
||||
{ NULL },
|
||||
},
|
||||
{ "Elgato EyeTV DTT",
|
||||
{ &dib0700_usb_id_table[49], NULL },
|
||||
{ NULL },
|
||||
@ -2343,8 +2338,10 @@ struct dvb_usb_device_properties dib0700_devices[] = {
|
||||
{ &dib0700_usb_id_table[59], NULL },
|
||||
{ NULL },
|
||||
},
|
||||
{ "Terratec Cinergy T USB XXS (HD)",
|
||||
{ &dib0700_usb_id_table[34], &dib0700_usb_id_table[60] },
|
||||
{ "Terratec Cinergy T USB XXS (HD)/ T3",
|
||||
{ &dib0700_usb_id_table[33],
|
||||
&dib0700_usb_id_table[52],
|
||||
&dib0700_usb_id_table[60], NULL},
|
||||
{ NULL },
|
||||
},
|
||||
},
|
||||
|
@ -1050,28 +1050,28 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length)
|
||||
c->operand[4] = 0; /* slot */
|
||||
c->operand[5] = SFE_VENDOR_TAG_CA_PMT; /* ca tag */
|
||||
c->operand[6] = 0; /* more/last */
|
||||
/* c->operand[7] = XXXprogram_info_length + 17; */ /* length */
|
||||
c->operand[8] = list_management;
|
||||
c->operand[9] = 0x01; /* pmt_cmd=OK_descramble */
|
||||
/* Use three bytes for length field in case length > 127 */
|
||||
c->operand[10] = list_management;
|
||||
c->operand[11] = 0x01; /* pmt_cmd=OK_descramble */
|
||||
|
||||
/* TS program map table */
|
||||
|
||||
c->operand[10] = 0x02; /* Table id=2 */
|
||||
c->operand[11] = 0x80; /* Section syntax + length */
|
||||
/* c->operand[12] = XXXprogram_info_length + 12; */
|
||||
c->operand[13] = msg[1]; /* Program number */
|
||||
c->operand[14] = msg[2];
|
||||
c->operand[15] = 0x01; /* Version number=0 + current/next=1 */
|
||||
c->operand[16] = 0x00; /* Section number=0 */
|
||||
c->operand[17] = 0x00; /* Last section number=0 */
|
||||
c->operand[18] = 0x1f; /* PCR_PID=1FFF */
|
||||
c->operand[19] = 0xff;
|
||||
c->operand[20] = (program_info_length >> 8); /* Program info length */
|
||||
c->operand[21] = (program_info_length & 0xff);
|
||||
c->operand[12] = 0x02; /* Table id=2 */
|
||||
c->operand[13] = 0x80; /* Section syntax + length */
|
||||
/* c->operand[14] = XXXprogram_info_length + 12; */
|
||||
c->operand[15] = msg[1]; /* Program number */
|
||||
c->operand[16] = msg[2];
|
||||
c->operand[17] = 0x01; /* Version number=0 + current/next=1 */
|
||||
c->operand[18] = 0x00; /* Section number=0 */
|
||||
c->operand[19] = 0x00; /* Last section number=0 */
|
||||
c->operand[20] = 0x1f; /* PCR_PID=1FFF */
|
||||
c->operand[21] = 0xff;
|
||||
c->operand[22] = (program_info_length >> 8); /* Program info length */
|
||||
c->operand[23] = (program_info_length & 0xff);
|
||||
|
||||
/* CA descriptors at programme level */
|
||||
read_pos = 6;
|
||||
write_pos = 22;
|
||||
write_pos = 24;
|
||||
if (program_info_length > 0) {
|
||||
pmt_cmd_id = msg[read_pos++];
|
||||
if (pmt_cmd_id != 1 && pmt_cmd_id != 4)
|
||||
@ -1113,8 +1113,10 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length)
|
||||
c->operand[write_pos++] = 0x00;
|
||||
c->operand[write_pos++] = 0x00;
|
||||
|
||||
c->operand[7] = write_pos - 8;
|
||||
c->operand[12] = write_pos - 13;
|
||||
c->operand[7] = 0x82;
|
||||
c->operand[8] = (write_pos - 10) >> 8;
|
||||
c->operand[9] = (write_pos - 10) & 0xff;
|
||||
c->operand[14] = write_pos - 15;
|
||||
|
||||
crc32_csum = crc32_be(0, &c->operand[10], c->operand[12] - 1);
|
||||
c->operand[write_pos - 4] = (crc32_csum >> 24) & 0xff;
|
||||
|
@ -141,18 +141,12 @@ static int fdtv_read_uncorrected_blocks(struct dvb_frontend *fe, u32 *ucblocks)
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
#define ACCEPTED 0x9
|
||||
|
||||
static int fdtv_set_frontend(struct dvb_frontend *fe,
|
||||
struct dvb_frontend_parameters *params)
|
||||
{
|
||||
struct firedtv *fdtv = fe->sec_priv;
|
||||
|
||||
/* FIXME: avc_tuner_dsd never returns ACCEPTED. Check status? */
|
||||
if (avc_tuner_dsd(fdtv, params) != ACCEPTED)
|
||||
return -EINVAL;
|
||||
else
|
||||
return 0; /* not sure of this... */
|
||||
return avc_tuner_dsd(fdtv, params);
|
||||
}
|
||||
|
||||
static int fdtv_get_frontend(struct dvb_frontend *fe,
|
||||
|
@ -51,6 +51,7 @@ struct dib0070_config {
|
||||
#if defined(CONFIG_DVB_TUNER_DIB0070) || (defined(CONFIG_DVB_TUNER_DIB0070_MODULE) && defined(MODULE))
|
||||
extern struct dvb_frontend *dib0070_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct dib0070_config *cfg);
|
||||
extern u16 dib0070_wbd_offset(struct dvb_frontend *);
|
||||
extern void dib0070_ctrl_agc_filter(struct dvb_frontend *, u8 open);
|
||||
#else
|
||||
static inline struct dvb_frontend *dib0070_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct dib0070_config *cfg)
|
||||
{
|
||||
@ -63,7 +64,11 @@ static inline u16 dib0070_wbd_offset(struct dvb_frontend *fe)
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline void dib0070_ctrl_agc_filter(struct dvb_frontend *fe, u8 open)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
}
|
||||
#endif
|
||||
extern void dib0070_ctrl_agc_filter(struct dvb_frontend *, u8 open);
|
||||
|
||||
#endif
|
||||
|
@ -1375,6 +1375,11 @@ struct dvb_frontend * dib7000p_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr,
|
||||
if (dib7000p_identify(st) != 0)
|
||||
goto error;
|
||||
|
||||
/* FIXME: make sure the dev.parent field is initialized, or else
|
||||
request_firmware() will hit an OOPS (this should be moved somewhere
|
||||
more common) */
|
||||
st->i2c_master.gated_tuner_i2c_adap.dev.parent = i2c_adap->dev.parent;
|
||||
|
||||
dibx000_init_i2c_master(&st->i2c_master, DIB7000P, st->i2c_adap, st->i2c_addr);
|
||||
|
||||
dib7000p_demod_reset(st);
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include <linux/pci.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/freezer.h>
|
||||
#include <linux/vmalloc.h>
|
||||
|
||||
#include "dvbdev.h"
|
||||
#include "dvb_demux.h"
|
||||
|
@ -529,6 +529,12 @@ struct usb_device_id smsusb_id_table[] = {
|
||||
.driver_info = SMS1XXX_BOARD_SIANO_NICE },
|
||||
{ USB_DEVICE(0x187f, 0x0301),
|
||||
.driver_info = SMS1XXX_BOARD_SIANO_VENICE },
|
||||
{ USB_DEVICE(0x2040, 0xb900),
|
||||
.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
|
||||
{ USB_DEVICE(0x2040, 0xb910),
|
||||
.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
|
||||
{ USB_DEVICE(0x2040, 0xc000),
|
||||
.driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM },
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
||||
|
@ -1299,7 +1299,7 @@ set_tvnorm(struct bttv *btv, unsigned int norm)
|
||||
|
||||
tvnorm = &bttv_tvnorms[norm];
|
||||
|
||||
if (!memcmp(&bttv_tvnorms[btv->tvnorm].cropcap, &tvnorm->cropcap,
|
||||
if (memcmp(&bttv_tvnorms[btv->tvnorm].cropcap, &tvnorm->cropcap,
|
||||
sizeof (tvnorm->cropcap))) {
|
||||
bttv_crop_reset(&btv->crop[0], norm);
|
||||
btv->crop[1] = btv->crop[0]; /* current = default */
|
||||
@ -3800,11 +3800,34 @@ bttv_irq_next_video(struct bttv *btv, struct bttv_buffer_set *set)
|
||||
if (!V4L2_FIELD_HAS_BOTH(item->vb.field) &&
|
||||
(item->vb.queue.next != &btv->capture)) {
|
||||
item = list_entry(item->vb.queue.next, struct bttv_buffer, vb.queue);
|
||||
/* Mike Isely <isely@pobox.com> - Only check
|
||||
* and set up the bottom field in the logic
|
||||
* below. Don't ever do the top field. This
|
||||
* of course means that if we set up the
|
||||
* bottom field in the above code that we'll
|
||||
* actually skip a field. But that's OK.
|
||||
* Having processed only a single buffer this
|
||||
* time, then the next time around the first
|
||||
* available buffer should be for a top field.
|
||||
* That will then cause us here to set up a
|
||||
* top then a bottom field in the normal way.
|
||||
* The alternative to this understanding is
|
||||
* that we set up the second available buffer
|
||||
* as a top field, but that's out of order
|
||||
* since this driver always processes the top
|
||||
* field first - the effect will be the two
|
||||
* buffers being returned in the wrong order,
|
||||
* with the second buffer also being delayed
|
||||
* by one field time (owing to the fifo nature
|
||||
* of videobuf). Worse still, we'll be stuck
|
||||
* doing fields out of order now every time
|
||||
* until something else causes a field to be
|
||||
* dropped. By effectively forcing a field to
|
||||
* drop this way then we always get back into
|
||||
* sync within a single frame time. (Out of
|
||||
* order fields can screw up deinterlacing
|
||||
* algorithms.) */
|
||||
if (!V4L2_FIELD_HAS_BOTH(item->vb.field)) {
|
||||
if (NULL == set->top &&
|
||||
V4L2_FIELD_TOP == item->vb.field) {
|
||||
set->top = item;
|
||||
}
|
||||
if (NULL == set->bottom &&
|
||||
V4L2_FIELD_BOTTOM == item->vb.field) {
|
||||
set->bottom = item;
|
||||
|
@ -383,6 +383,11 @@ static int snd_em28xx_hw_capture_free(struct snd_pcm_substream *substream)
|
||||
|
||||
static int snd_em28xx_prepare(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct em28xx *dev = snd_pcm_substream_chip(substream);
|
||||
|
||||
dev->adev.hwptr_done_capture = 0;
|
||||
dev->adev.capture_transfer_done = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -35,11 +35,24 @@ static
|
||||
const
|
||||
struct dmi_system_id s5k4aa_vflip_dmi_table[] = {
|
||||
{
|
||||
.ident = "BRUNEINIT",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "BRUNENIT"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "BRUNENIT"),
|
||||
DMI_MATCH(DMI_BOARD_VERSION, "00030D0000000001")
|
||||
}
|
||||
}, {
|
||||
.ident = "Fujitsu-Siemens Amilo Xa 2528",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xa 2528")
|
||||
}
|
||||
}, {
|
||||
.ident = "Fujitsu-Siemens Amilo Xi 2528",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xi 2528")
|
||||
}
|
||||
}, {
|
||||
.ident = "Fujitsu-Siemens Amilo Xi 2550",
|
||||
.matches = {
|
||||
@ -52,6 +65,13 @@ static
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pa 2548")
|
||||
}
|
||||
}, {
|
||||
.ident = "MSI GX700",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "GX700"),
|
||||
DMI_MATCH(DMI_BIOS_DATE, "12/02/2008")
|
||||
}
|
||||
}, {
|
||||
.ident = "MSI GX700",
|
||||
.matches = {
|
||||
|
@ -483,7 +483,7 @@ static int start_cif_cam(struct gspca_dev *gspca_dev)
|
||||
data[3] = 0x2c; /* reg 2, H size/8 */
|
||||
data[4] = 0x48; /* reg 3, V size/4 */
|
||||
data[6] = 0x06; /* reg 5, H start */
|
||||
data[8] = 0x06 + sd->sensor_type; /* reg 7, V start */
|
||||
data[8] = 0x06 - sd->sensor_type; /* reg 7, V start */
|
||||
break;
|
||||
}
|
||||
err_code = mr_write(gspca_dev, 11);
|
||||
|
@ -2919,7 +2919,7 @@ static void ov518_pkt_scan(struct gspca_dev *gspca_dev,
|
||||
/* A false positive here is likely, until OVT gives me
|
||||
* the definitive SOF/EOF format */
|
||||
if ((!(data[0] | data[1] | data[2] | data[3] | data[5])) && data[6]) {
|
||||
gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0);
|
||||
frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0);
|
||||
gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, 0);
|
||||
sd->packet_nr = 0;
|
||||
}
|
||||
|
@ -394,7 +394,8 @@ static void stv06xx_pkt_scan(struct gspca_dev *gspca_dev,
|
||||
PDEBUG(D_PACK, "End of frame detected");
|
||||
|
||||
/* Complete the last frame (if any) */
|
||||
gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0);
|
||||
frame = gspca_frame_add(gspca_dev, LAST_PACKET,
|
||||
frame, data, 0);
|
||||
|
||||
if (chunk_len)
|
||||
PDEBUG(D_ERR, "Chunk length is "
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/sched.h>
|
||||
|
||||
#include <media/v4l2-common.h>
|
||||
#include <media/v4l2-dev.h>
|
||||
@ -1432,7 +1433,9 @@ static int pxa_camera_set_fmt(struct soc_camera_device *icd,
|
||||
icd->sense = &sense;
|
||||
|
||||
cam_f.fmt.pix.pixelformat = cam_fmt->fourcc;
|
||||
ret = v4l2_subdev_call(sd, video, s_fmt, f);
|
||||
ret = v4l2_subdev_call(sd, video, s_fmt, &cam_f);
|
||||
cam_f.fmt.pix.pixelformat = pix->pixelformat;
|
||||
*pix = cam_f.fmt.pix;
|
||||
|
||||
icd->sense = NULL;
|
||||
|
||||
|
@ -598,11 +598,6 @@ static int s2255_got_frame(struct s2255_dev *dev, int chn, int jpgsize)
|
||||
buf = list_entry(dma_q->active.next,
|
||||
struct s2255_buffer, vb.queue);
|
||||
|
||||
if (!waitqueue_active(&buf->vb.done)) {
|
||||
/* no one active */
|
||||
rc = -1;
|
||||
goto unlock;
|
||||
}
|
||||
list_del(&buf->vb.queue);
|
||||
do_gettimeofday(&buf->vb.ts);
|
||||
dprintk(100, "[%p/%d] wakeup\n", buf, buf->vb.i);
|
||||
|
@ -3428,6 +3428,7 @@ struct saa7134_board saa7134_boards[] = {
|
||||
.tuner_config = 3,
|
||||
.mpeg = SAA7134_MPEG_DVB,
|
||||
.ts_type = SAA7134_MPEG_TS_SERIAL,
|
||||
.ts_force_val = 1,
|
||||
.gpiomask = 0x0800100, /* GPIO 21 is an INPUT */
|
||||
.inputs = {{
|
||||
.name = name_tv,
|
||||
|
@ -262,11 +262,13 @@ int saa7134_ts_start(struct saa7134_dev *dev)
|
||||
switch (saa7134_boards[dev->board].ts_type) {
|
||||
case SAA7134_MPEG_TS_PARALLEL:
|
||||
saa_writeb(SAA7134_TS_SERIAL0, 0x40);
|
||||
saa_writeb(SAA7134_TS_PARALLEL, 0xec);
|
||||
saa_writeb(SAA7134_TS_PARALLEL, 0xec |
|
||||
(saa7134_boards[dev->board].ts_force_val << 4));
|
||||
break;
|
||||
case SAA7134_MPEG_TS_SERIAL:
|
||||
saa_writeb(SAA7134_TS_SERIAL0, 0xd8);
|
||||
saa_writeb(SAA7134_TS_PARALLEL, 0x6c);
|
||||
saa_writeb(SAA7134_TS_PARALLEL, 0x6c |
|
||||
(saa7134_boards[dev->board].ts_force_val << 4));
|
||||
saa_writeb(SAA7134_TS_PARALLEL_SERIAL, 0xbc);
|
||||
saa_writeb(SAA7134_TS_SERIAL1, 0x02);
|
||||
break;
|
||||
|
@ -360,6 +360,7 @@ struct saa7134_board {
|
||||
enum saa7134_mpeg_type mpeg;
|
||||
enum saa7134_mpeg_ts_type ts_type;
|
||||
unsigned int vid_port_opts;
|
||||
unsigned int ts_force_val:1;
|
||||
};
|
||||
|
||||
#define card_has_radio(dev) (NULL != saa7134_boards[dev->board].radio.name)
|
||||
|
@ -347,7 +347,7 @@ int saa7164_cmd_send(struct saa7164_dev *dev, u8 id, tmComResCmd_t command,
|
||||
|
||||
/* Prepare some basic command/response structures */
|
||||
memset(&command_t, 0, sizeof(command_t));
|
||||
memset(&response_t, 0, sizeof(&response_t));
|
||||
memset(&response_t, 0, sizeof(response_t));
|
||||
pcommand_t = &command_t;
|
||||
presponse_t = &response_t;
|
||||
command_t.id = id;
|
||||
|
@ -1173,8 +1173,8 @@ static int get_scales(struct soc_camera_device *icd,
|
||||
width_in = scale_up(cam->ceu_rect.width, *scale_h);
|
||||
height_in = scale_up(cam->ceu_rect.height, *scale_v);
|
||||
|
||||
*scale_h = calc_generic_scale(cam->ceu_rect.width, icd->user_width);
|
||||
*scale_v = calc_generic_scale(cam->ceu_rect.height, icd->user_height);
|
||||
*scale_h = calc_generic_scale(width_in, icd->user_width);
|
||||
*scale_v = calc_generic_scale(height_in, icd->user_height);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1160,13 +1160,15 @@ void soc_camera_host_unregister(struct soc_camera_host *ici)
|
||||
if (icd->iface == ici->nr) {
|
||||
/* The bus->remove will be called */
|
||||
device_unregister(&icd->dev);
|
||||
/* Not before device_unregister(), .remove
|
||||
* needs parent to call ici->ops->remove() */
|
||||
icd->dev.parent = NULL;
|
||||
|
||||
/* If the host module is loaded again, device_register()
|
||||
* would complain "already initialised" */
|
||||
memset(&icd->dev.kobj, 0, sizeof(icd->dev.kobj));
|
||||
/*
|
||||
* Not before device_unregister(), .remove
|
||||
* needs parent to call ici->ops->remove().
|
||||
* If the host module is loaded again, device_register()
|
||||
* would complain "already initialised," since 2.6.32
|
||||
* this is also needed to prevent use-after-free of the
|
||||
* device private data.
|
||||
*/
|
||||
memset(&icd->dev, 0, sizeof(icd->dev));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -348,7 +348,7 @@ static void uvc_ctrl_set_zoom(struct uvc_control_mapping *mapping,
|
||||
__s32 value, __u8 *data)
|
||||
{
|
||||
data[0] = value == 0 ? 0 : (value > 0) ? 1 : 0xff;
|
||||
data[2] = min(abs(value), 0xff);
|
||||
data[2] = min((int)abs(value), 0xff);
|
||||
}
|
||||
|
||||
static struct uvc_control_mapping uvc_ctrl_mappings[] = {
|
||||
|
@ -90,7 +90,8 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming *stream,
|
||||
ctrl->dwMaxVideoFrameSize =
|
||||
frame->dwMaxVideoFrameBufferSize;
|
||||
|
||||
if (stream->dev->quirks & UVC_QUIRK_FIX_BANDWIDTH &&
|
||||
if (!(format->flags & UVC_FMT_FLAG_COMPRESSED) &&
|
||||
stream->dev->quirks & UVC_QUIRK_FIX_BANDWIDTH &&
|
||||
stream->intf->num_altsetting > 1) {
|
||||
u32 interval;
|
||||
u32 bandwidth;
|
||||
|
Loading…
Reference in New Issue
Block a user