Commit 67dd8f35 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 6890ad4b 242841d3
...@@ -60,7 +60,7 @@ static int si2168_cmd_execute(struct si2168 *s, struct si2168_cmd *cmd) ...@@ -60,7 +60,7 @@ static int si2168_cmd_execute(struct si2168 *s, struct si2168_cmd *cmd)
jiffies_to_msecs(jiffies) - jiffies_to_msecs(jiffies) -
(jiffies_to_msecs(timeout) - TIMEOUT)); (jiffies_to_msecs(timeout) - TIMEOUT));
if (!(cmd->args[0] >> 7) & 0x01) { if (!((cmd->args[0] >> 7) & 0x01)) {
ret = -ETIMEDOUT; ret = -ETIMEDOUT;
goto err_mutex_unlock; goto err_mutex_unlock;
} }
...@@ -485,20 +485,6 @@ static int si2168_init(struct dvb_frontend *fe) ...@@ -485,20 +485,6 @@ static int si2168_init(struct dvb_frontend *fe)
if (ret) if (ret)
goto err; 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 */ /* cold state - try to download firmware */
dev_info(&s->client->dev, "%s: found a '%s' in cold state\n", dev_info(&s->client->dev, "%s: found a '%s' in cold state\n",
KBUILD_MODNAME, si2168_ops.info.name); KBUILD_MODNAME, si2168_ops.info.name);
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
#include <linux/firmware.h> #include <linux/firmware.h>
#include <linux/i2c-mux.h> #include <linux/i2c-mux.h>
#define SI2168_FIRMWARE "dvb-demod-si2168-01.fw" #define SI2168_FIRMWARE "dvb-demod-si2168-02.fw"
/* state struct */ /* state struct */
struct si2168 { struct si2168 {
......
...@@ -668,6 +668,7 @@ static int tda10071_set_frontend(struct dvb_frontend *fe) ...@@ -668,6 +668,7 @@ static int tda10071_set_frontend(struct dvb_frontend *fe)
struct dtv_frontend_properties *c = &fe->dtv_property_cache; struct dtv_frontend_properties *c = &fe->dtv_property_cache;
int ret, i; int ret, i;
u8 mode, rolloff, pilot, inversion, div; u8 mode, rolloff, pilot, inversion, div;
fe_modulation_t modulation;
dev_dbg(&priv->i2c->dev, dev_dbg(&priv->i2c->dev,
"%s: delivery_system=%d modulation=%d frequency=%d symbol_rate=%d inversion=%d pilot=%d rolloff=%d\n", "%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) ...@@ -702,10 +703,13 @@ static int tda10071_set_frontend(struct dvb_frontend *fe)
switch (c->delivery_system) { switch (c->delivery_system) {
case SYS_DVBS: case SYS_DVBS:
modulation = QPSK;
rolloff = 0; rolloff = 0;
pilot = 2; pilot = 2;
break; break;
case SYS_DVBS2: case SYS_DVBS2:
modulation = c->modulation;
switch (c->rolloff) { switch (c->rolloff) {
case ROLLOFF_20: case ROLLOFF_20:
rolloff = 2; rolloff = 2;
...@@ -750,7 +754,7 @@ static int tda10071_set_frontend(struct dvb_frontend *fe) ...@@ -750,7 +754,7 @@ static int tda10071_set_frontend(struct dvb_frontend *fe)
for (i = 0, mode = 0xff; i < ARRAY_SIZE(TDA10071_MODCOD); i++) { for (i = 0, mode = 0xff; i < ARRAY_SIZE(TDA10071_MODCOD); i++) {
if (c->delivery_system == TDA10071_MODCOD[i].delivery_system && 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) { c->fec_inner == TDA10071_MODCOD[i].fec) {
mode = TDA10071_MODCOD[i].val; mode = TDA10071_MODCOD[i].val;
dev_dbg(&priv->i2c->dev, "%s: mode found=%02x\n", dev_dbg(&priv->i2c->dev, "%s: mode found=%02x\n",
...@@ -834,10 +838,10 @@ static int tda10071_get_frontend(struct dvb_frontend *fe) ...@@ -834,10 +838,10 @@ static int tda10071_get_frontend(struct dvb_frontend *fe)
switch ((buf[1] >> 0) & 0x01) { switch ((buf[1] >> 0) & 0x01) {
case 0: case 0:
c->inversion = INVERSION_OFF; c->inversion = INVERSION_ON;
break; break;
case 1: case 1:
c->inversion = INVERSION_ON; c->inversion = INVERSION_OFF;
break; break;
} }
...@@ -856,7 +860,7 @@ static int tda10071_get_frontend(struct dvb_frontend *fe) ...@@ -856,7 +860,7 @@ static int tda10071_get_frontend(struct dvb_frontend *fe)
if (ret) if (ret)
goto error; 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; return ret;
error: error:
......
...@@ -55,6 +55,7 @@ static struct tda10071_modcod { ...@@ -55,6 +55,7 @@ static struct tda10071_modcod {
{ SYS_DVBS2, QPSK, FEC_8_9, 0x0a }, { SYS_DVBS2, QPSK, FEC_8_9, 0x0a },
{ SYS_DVBS2, QPSK, FEC_9_10, 0x0b }, { SYS_DVBS2, QPSK, FEC_9_10, 0x0b },
/* 8PSK */ /* 8PSK */
{ SYS_DVBS2, PSK_8, FEC_AUTO, 0x00 },
{ SYS_DVBS2, PSK_8, FEC_3_5, 0x0c }, { SYS_DVBS2, PSK_8, FEC_3_5, 0x0c },
{ SYS_DVBS2, PSK_8, FEC_2_3, 0x0d }, { SYS_DVBS2, PSK_8, FEC_2_3, 0x0d },
{ SYS_DVBS2, PSK_8, FEC_3_4, 0x0e }, { SYS_DVBS2, PSK_8, FEC_3_4, 0x0e },
......
...@@ -179,7 +179,7 @@ static const struct v4l2_file_operations ts_fops = ...@@ -179,7 +179,7 @@ static const struct v4l2_file_operations ts_fops =
.read = vb2_fop_read, .read = vb2_fop_read,
.poll = vb2_fop_poll, .poll = vb2_fop_poll,
.mmap = vb2_fop_mmap, .mmap = vb2_fop_mmap,
.ioctl = video_ioctl2, .unlocked_ioctl = video_ioctl2,
}; };
static const struct v4l2_ioctl_ops ts_ioctl_ops = { 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) ...@@ -269,6 +269,7 @@ static int vpif_start_streaming(struct vb2_queue *vq, unsigned int count)
list_del(&buf->list); list_del(&buf->list);
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_QUEUED); vb2_buffer_done(&buf->vb, VB2_BUF_STATE_QUEUED);
} }
spin_unlock_irqrestore(&common->irqlock, flags);
return ret; return ret;
} }
......
...@@ -233,6 +233,7 @@ static int vpif_start_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -233,6 +233,7 @@ static int vpif_start_streaming(struct vb2_queue *vq, unsigned int count)
list_del(&buf->list); list_del(&buf->list);
vb2_buffer_done(&buf->vb, VB2_BUF_STATE_QUEUED); vb2_buffer_done(&buf->vb, VB2_BUF_STATE_QUEUED);
} }
spin_unlock_irqrestore(&common->irqlock, flags);
return ret; return ret;
} }
......
...@@ -57,7 +57,7 @@ static int si2157_cmd_execute(struct si2157 *s, struct si2157_cmd *cmd) ...@@ -57,7 +57,7 @@ static int si2157_cmd_execute(struct si2157 *s, struct si2157_cmd *cmd)
jiffies_to_msecs(jiffies) - jiffies_to_msecs(jiffies) -
(jiffies_to_msecs(timeout) - TIMEOUT)); (jiffies_to_msecs(timeout) - TIMEOUT));
if (!(buf[0] >> 7) & 0x01) { if (!((buf[0] >> 7) & 0x01)) {
ret = -ETIMEDOUT; ret = -ETIMEDOUT;
goto err_mutex_unlock; goto err_mutex_unlock;
} else { } else {
......
...@@ -704,15 +704,41 @@ static int af9035_read_config(struct dvb_usb_device *d) ...@@ -704,15 +704,41 @@ static int af9035_read_config(struct dvb_usb_device *d)
if (ret < 0) if (ret < 0)
goto err; goto err;
if (tmp == 0x00) dev_dbg(&d->udev->dev, "%s: [%d]tuner=%02x\n",
dev_dbg(&d->udev->dev, __func__, i, tmp);
"%s: [%d]tuner not set, using default\n",
__func__, i); /* tuner sanity check */
else 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; state->af9033_config[i].tuner = tmp;
}
dev_dbg(&d->udev->dev, "%s: [%d]tuner=%02x\n", if (state->af9033_config[i].tuner != tmp) {
__func__, i, state->af9033_config[i].tuner); 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) { switch (state->af9033_config[i].tuner) {
case AF9033_TUNER_TUA9001: case AF9033_TUNER_TUA9001:
......
...@@ -928,6 +928,7 @@ static const struct usb_device_id device_table[] = { ...@@ -928,6 +928,7 @@ static const struct usb_device_id device_table[] = {
{USB_DEVICE(0x093a, 0x2620)}, {USB_DEVICE(0x093a, 0x2620)},
{USB_DEVICE(0x093a, 0x2621)}, {USB_DEVICE(0x093a, 0x2621)},
{USB_DEVICE(0x093a, 0x2622), .driver_info = FL_VFLIP}, {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, 0x2624), .driver_info = FL_VFLIP},
{USB_DEVICE(0x093a, 0x2625)}, {USB_DEVICE(0x093a, 0x2625)},
{USB_DEVICE(0x093a, 0x2626)}, {USB_DEVICE(0x093a, 0x2626)},
......
...@@ -82,7 +82,7 @@ static void hdpvr_read_bulk_callback(struct urb *urb) ...@@ -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 */ /* function expects dev->io_mutex to be hold by caller */
int hdpvr_cancel_queue(struct hdpvr_device *dev) int hdpvr_cancel_queue(struct hdpvr_device *dev)
...@@ -926,7 +926,7 @@ static int hdpvr_s_ctrl(struct v4l2_ctrl *ctrl) ...@@ -926,7 +926,7 @@ static int hdpvr_s_ctrl(struct v4l2_ctrl *ctrl)
case V4L2_CID_MPEG_AUDIO_ENCODING: case V4L2_CID_MPEG_AUDIO_ENCODING:
if (dev->flags & HDPVR_FLAG_AC3_CAP) { if (dev->flags & HDPVR_FLAG_AC3_CAP) {
opt->audio_codec = ctrl->val; 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); opt->audio_codec);
} }
return 0; return 0;
...@@ -1198,7 +1198,7 @@ int hdpvr_register_videodev(struct hdpvr_device *dev, struct device *parent, ...@@ -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_ctrl_new_std_menu(hdl, &hdpvr_ctrl_ops,
V4L2_CID_MPEG_AUDIO_ENCODING, V4L2_CID_MPEG_AUDIO_ENCODING,
ac3 ? V4L2_MPEG_AUDIO_ENCODING_AC3 : V4L2_MPEG_AUDIO_ENCODING_AAC, 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_ctrl_new_std_menu(hdl, &hdpvr_ctrl_ops,
V4L2_CID_MPEG_VIDEO_ENCODING, V4L2_CID_MPEG_VIDEO_ENCODING,
V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC, 0x3, 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) ...@@ -610,10 +610,10 @@ struct v4l2_fract v4l2_calc_aspect_ratio(u8 hor_landscape, u8 vert_portrait)
aspect.denominator = 9; aspect.denominator = 9;
} else if (ratio == 34) { } else if (ratio == 34) {
aspect.numerator = 4; aspect.numerator = 4;
aspect.numerator = 3; aspect.denominator = 3;
} else if (ratio == 68) { } else if (ratio == 68) {
aspect.numerator = 15; aspect.numerator = 15;
aspect.numerator = 9; aspect.denominator = 9;
} else { } else {
aspect.numerator = hor_landscape + 99; aspect.numerator = hor_landscape + 99;
aspect.denominator = 100; aspect.denominator = 100;
......
config VIDEO_OMAP4 config VIDEO_OMAP4
bool "OMAP 4 Camera support" 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 select VIDEOBUF2_DMA_CONTIG
---help--- ---help---
Driver for an OMAP 4 ISS controller. Driver for an OMAP 4 ISS controller.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment