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: "A series of driver fixes: - fix DVB-S tuning with tda1071 - fix tuner probe on af9035 when the device has a bad eeprom - some fixes for the new si2168/2157 drivers - one Kconfig build fix (for omap4iss) - fixes at vpif error path - don't lock saa7134 ioctl at driver's base core level, as it now uses V4L2 and VB2 locking schema - fix audio at hdpvr driver - fix the aspect ratio at the digital timings table - one new USB ID (at gspca_pac7302): Genius i-Look 317 webcam" * 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: [media] gspca_pac7302: Add new usb-id for Genius i-Look 317 [media] tda10071: fix returned symbol rate calculation [media] tda10071: fix spec inversion reporting [media] tda10071: add missing DVB-S2/PSK-8 FEC AUTO [media] tda10071: force modulation to QPSK on DVB-S [media] hdpvr: fix two audio bugs [media] davinci: vpif: missing unlocks on error [media] af9035: override tuner id when bad value set into eeprom [media] saa7134: use unlocked_ioctl instead of ioctl [media] media: v4l2-core: v4l2-dv-timings.c: Cleaning up code wrong value used in aspect ratio [media] si2168: firmware download fix [media] si2157: add one missing parenthesis [media] si2168: add one missing parenthesis [media] staging: tighten omap4iss dependencies
This commit is contained in:
commit
67dd8f35c2
13 changed files with 56 additions and 36 deletions
|
@ -60,7 +60,7 @@ static int si2168_cmd_execute(struct si2168 *s, struct si2168_cmd *cmd)
|
|||
jiffies_to_msecs(jiffies) -
|
||||
(jiffies_to_msecs(timeout) - TIMEOUT));
|
||||
|
||||
if (!(cmd->args[0] >> 7) & 0x01) {
|
||||
if (!((cmd->args[0] >> 7) & 0x01)) {
|
||||
ret = -ETIMEDOUT;
|
||||
goto err_mutex_unlock;
|
||||
}
|
||||
|
@ -485,20 +485,6 @@ static int si2168_init(struct dvb_frontend *fe)
|
|||
if (ret)
|
||||
goto err;
|
||||
|
||||
cmd.args[0] = 0x05;
|
||||
cmd.args[1] = 0x00;
|
||||
cmd.args[2] = 0xaa;
|
||||
cmd.args[3] = 0x4d;
|
||||
cmd.args[4] = 0x56;
|
||||
cmd.args[5] = 0x40;
|
||||
cmd.args[6] = 0x00;
|
||||
cmd.args[7] = 0x00;
|
||||
cmd.wlen = 8;
|
||||
cmd.rlen = 1;
|
||||
ret = si2168_cmd_execute(s, &cmd);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
/* cold state - try to download firmware */
|
||||
dev_info(&s->client->dev, "%s: found a '%s' in cold state\n",
|
||||
KBUILD_MODNAME, si2168_ops.info.name);
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#include <linux/firmware.h>
|
||||
#include <linux/i2c-mux.h>
|
||||
|
||||
#define SI2168_FIRMWARE "dvb-demod-si2168-01.fw"
|
||||
#define SI2168_FIRMWARE "dvb-demod-si2168-02.fw"
|
||||
|
||||
/* state struct */
|
||||
struct si2168 {
|
||||
|
|
|
@ -668,6 +668,7 @@ static int tda10071_set_frontend(struct dvb_frontend *fe)
|
|||
struct dtv_frontend_properties *c = &fe->dtv_property_cache;
|
||||
int ret, i;
|
||||
u8 mode, rolloff, pilot, inversion, div;
|
||||
fe_modulation_t modulation;
|
||||
|
||||
dev_dbg(&priv->i2c->dev,
|
||||
"%s: delivery_system=%d modulation=%d frequency=%d symbol_rate=%d inversion=%d pilot=%d rolloff=%d\n",
|
||||
|
@ -702,10 +703,13 @@ static int tda10071_set_frontend(struct dvb_frontend *fe)
|
|||
|
||||
switch (c->delivery_system) {
|
||||
case SYS_DVBS:
|
||||
modulation = QPSK;
|
||||
rolloff = 0;
|
||||
pilot = 2;
|
||||
break;
|
||||
case SYS_DVBS2:
|
||||
modulation = c->modulation;
|
||||
|
||||
switch (c->rolloff) {
|
||||
case ROLLOFF_20:
|
||||
rolloff = 2;
|
||||
|
@ -750,7 +754,7 @@ static int tda10071_set_frontend(struct dvb_frontend *fe)
|
|||
|
||||
for (i = 0, mode = 0xff; i < ARRAY_SIZE(TDA10071_MODCOD); i++) {
|
||||
if (c->delivery_system == TDA10071_MODCOD[i].delivery_system &&
|
||||
c->modulation == TDA10071_MODCOD[i].modulation &&
|
||||
modulation == TDA10071_MODCOD[i].modulation &&
|
||||
c->fec_inner == TDA10071_MODCOD[i].fec) {
|
||||
mode = TDA10071_MODCOD[i].val;
|
||||
dev_dbg(&priv->i2c->dev, "%s: mode found=%02x\n",
|
||||
|
@ -834,10 +838,10 @@ static int tda10071_get_frontend(struct dvb_frontend *fe)
|
|||
|
||||
switch ((buf[1] >> 0) & 0x01) {
|
||||
case 0:
|
||||
c->inversion = INVERSION_OFF;
|
||||
c->inversion = INVERSION_ON;
|
||||
break;
|
||||
case 1:
|
||||
c->inversion = INVERSION_ON;
|
||||
c->inversion = INVERSION_OFF;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -856,7 +860,7 @@ static int tda10071_get_frontend(struct dvb_frontend *fe)
|
|||
if (ret)
|
||||
goto error;
|
||||
|
||||
c->symbol_rate = (buf[0] << 16) | (buf[1] << 8) | (buf[2] << 0);
|
||||
c->symbol_rate = ((buf[0] << 16) | (buf[1] << 8) | (buf[2] << 0)) * 1000;
|
||||
|
||||
return ret;
|
||||
error:
|
||||
|
|
|
@ -55,6 +55,7 @@ static struct tda10071_modcod {
|
|||
{ SYS_DVBS2, QPSK, FEC_8_9, 0x0a },
|
||||
{ SYS_DVBS2, QPSK, FEC_9_10, 0x0b },
|
||||
/* 8PSK */
|
||||
{ SYS_DVBS2, PSK_8, FEC_AUTO, 0x00 },
|
||||
{ SYS_DVBS2, PSK_8, FEC_3_5, 0x0c },
|
||||
{ SYS_DVBS2, PSK_8, FEC_2_3, 0x0d },
|
||||
{ SYS_DVBS2, PSK_8, FEC_3_4, 0x0e },
|
||||
|
|
|
@ -179,7 +179,7 @@ static const struct v4l2_file_operations ts_fops =
|
|||
.read = vb2_fop_read,
|
||||
.poll = vb2_fop_poll,
|
||||
.mmap = vb2_fop_mmap,
|
||||
.ioctl = video_ioctl2,
|
||||
.unlocked_ioctl = video_ioctl2,
|
||||
};
|
||||
|
||||
static const struct v4l2_ioctl_ops ts_ioctl_ops = {
|
||||
|
|
|
@ -269,6 +269,7 @@ static int vpif_start_streaming(struct vb2_queue *vq, unsigned int count)
|
|||
list_del(&buf->list);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_QUEUED);
|
||||
}
|
||||
spin_unlock_irqrestore(&common->irqlock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -233,6 +233,7 @@ static int vpif_start_streaming(struct vb2_queue *vq, unsigned int count)
|
|||
list_del(&buf->list);
|
||||
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_QUEUED);
|
||||
}
|
||||
spin_unlock_irqrestore(&common->irqlock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ static int si2157_cmd_execute(struct si2157 *s, struct si2157_cmd *cmd)
|
|||
jiffies_to_msecs(jiffies) -
|
||||
(jiffies_to_msecs(timeout) - TIMEOUT));
|
||||
|
||||
if (!(buf[0] >> 7) & 0x01) {
|
||||
if (!((buf[0] >> 7) & 0x01)) {
|
||||
ret = -ETIMEDOUT;
|
||||
goto err_mutex_unlock;
|
||||
} else {
|
||||
|
|
|
@ -704,15 +704,41 @@ static int af9035_read_config(struct dvb_usb_device *d)
|
|||
if (ret < 0)
|
||||
goto err;
|
||||
|
||||
if (tmp == 0x00)
|
||||
dev_dbg(&d->udev->dev,
|
||||
"%s: [%d]tuner not set, using default\n",
|
||||
__func__, i);
|
||||
else
|
||||
state->af9033_config[i].tuner = tmp;
|
||||
|
||||
dev_dbg(&d->udev->dev, "%s: [%d]tuner=%02x\n",
|
||||
__func__, i, state->af9033_config[i].tuner);
|
||||
__func__, i, tmp);
|
||||
|
||||
/* tuner sanity check */
|
||||
if (state->chip_type == 0x9135) {
|
||||
if (state->chip_version == 0x02) {
|
||||
/* IT9135 BX (v2) */
|
||||
switch (tmp) {
|
||||
case AF9033_TUNER_IT9135_60:
|
||||
case AF9033_TUNER_IT9135_61:
|
||||
case AF9033_TUNER_IT9135_62:
|
||||
state->af9033_config[i].tuner = tmp;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
/* IT9135 AX (v1) */
|
||||
switch (tmp) {
|
||||
case AF9033_TUNER_IT9135_38:
|
||||
case AF9033_TUNER_IT9135_51:
|
||||
case AF9033_TUNER_IT9135_52:
|
||||
state->af9033_config[i].tuner = tmp;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* AF9035 */
|
||||
state->af9033_config[i].tuner = tmp;
|
||||
}
|
||||
|
||||
if (state->af9033_config[i].tuner != tmp) {
|
||||
dev_info(&d->udev->dev,
|
||||
"%s: [%d] overriding tuner from %02x to %02x\n",
|
||||
KBUILD_MODNAME, i, tmp,
|
||||
state->af9033_config[i].tuner);
|
||||
}
|
||||
|
||||
switch (state->af9033_config[i].tuner) {
|
||||
case AF9033_TUNER_TUA9001:
|
||||
|
|
|
@ -928,6 +928,7 @@ static const struct usb_device_id device_table[] = {
|
|||
{USB_DEVICE(0x093a, 0x2620)},
|
||||
{USB_DEVICE(0x093a, 0x2621)},
|
||||
{USB_DEVICE(0x093a, 0x2622), .driver_info = FL_VFLIP},
|
||||
{USB_DEVICE(0x093a, 0x2623), .driver_info = FL_VFLIP},
|
||||
{USB_DEVICE(0x093a, 0x2624), .driver_info = FL_VFLIP},
|
||||
{USB_DEVICE(0x093a, 0x2625)},
|
||||
{USB_DEVICE(0x093a, 0x2626)},
|
||||
|
|
|
@ -82,7 +82,7 @@ static void hdpvr_read_bulk_callback(struct urb *urb)
|
|||
}
|
||||
|
||||
/*=========================================================================*/
|
||||
/* bufffer bits */
|
||||
/* buffer bits */
|
||||
|
||||
/* function expects dev->io_mutex to be hold by caller */
|
||||
int hdpvr_cancel_queue(struct hdpvr_device *dev)
|
||||
|
@ -926,7 +926,7 @@ static int hdpvr_s_ctrl(struct v4l2_ctrl *ctrl)
|
|||
case V4L2_CID_MPEG_AUDIO_ENCODING:
|
||||
if (dev->flags & HDPVR_FLAG_AC3_CAP) {
|
||||
opt->audio_codec = ctrl->val;
|
||||
return hdpvr_set_audio(dev, opt->audio_input,
|
||||
return hdpvr_set_audio(dev, opt->audio_input + 1,
|
||||
opt->audio_codec);
|
||||
}
|
||||
return 0;
|
||||
|
@ -1198,7 +1198,7 @@ int hdpvr_register_videodev(struct hdpvr_device *dev, struct device *parent,
|
|||
v4l2_ctrl_new_std_menu(hdl, &hdpvr_ctrl_ops,
|
||||
V4L2_CID_MPEG_AUDIO_ENCODING,
|
||||
ac3 ? V4L2_MPEG_AUDIO_ENCODING_AC3 : V4L2_MPEG_AUDIO_ENCODING_AAC,
|
||||
0x7, V4L2_MPEG_AUDIO_ENCODING_AAC);
|
||||
0x7, ac3 ? dev->options.audio_codec : V4L2_MPEG_AUDIO_ENCODING_AAC);
|
||||
v4l2_ctrl_new_std_menu(hdl, &hdpvr_ctrl_ops,
|
||||
V4L2_CID_MPEG_VIDEO_ENCODING,
|
||||
V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC, 0x3,
|
||||
|
|
|
@ -610,10 +610,10 @@ struct v4l2_fract v4l2_calc_aspect_ratio(u8 hor_landscape, u8 vert_portrait)
|
|||
aspect.denominator = 9;
|
||||
} else if (ratio == 34) {
|
||||
aspect.numerator = 4;
|
||||
aspect.numerator = 3;
|
||||
aspect.denominator = 3;
|
||||
} else if (ratio == 68) {
|
||||
aspect.numerator = 15;
|
||||
aspect.numerator = 9;
|
||||
aspect.denominator = 9;
|
||||
} else {
|
||||
aspect.numerator = hor_landscape + 99;
|
||||
aspect.denominator = 100;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
config VIDEO_OMAP4
|
||||
bool "OMAP 4 Camera support"
|
||||
depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && I2C && ARCH_OMAP4
|
||||
depends on VIDEO_V4L2=y && VIDEO_V4L2_SUBDEV_API && I2C=y && ARCH_OMAP4
|
||||
select VIDEOBUF2_DMA_CONTIG
|
||||
---help---
|
||||
Driver for an OMAP 4 ISS controller.
|
||||
|
|
Loading…
Reference in a new issue