diff options
23 files changed, 151 insertions, 71 deletions
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 870d190fe617..0a46833c1b76 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
| @@ -493,3 +493,52 @@ Why: These two features use non-standard interfaces. There are the | |||
| 493 | Who: Corentin Chary <corentin.chary@gmail.com> | 493 | Who: Corentin Chary <corentin.chary@gmail.com> |
| 494 | 494 | ||
| 495 | ---------------------------- | 495 | ---------------------------- |
| 496 | |||
| 497 | What: usbvideo quickcam_messenger driver | ||
| 498 | When: 2.6.35 | ||
| 499 | Files: drivers/media/video/usbvideo/quickcam_messenger.[ch] | ||
| 500 | Why: obsolete v4l1 driver replaced by gspca_stv06xx | ||
| 501 | Who: Hans de Goede <hdegoede@redhat.com> | ||
| 502 | |||
| 503 | ---------------------------- | ||
| 504 | |||
| 505 | What: ov511 v4l1 driver | ||
| 506 | When: 2.6.35 | ||
| 507 | Files: drivers/media/video/ov511.[ch] | ||
| 508 | Why: obsolete v4l1 driver replaced by gspca_ov519 | ||
| 509 | Who: Hans de Goede <hdegoede@redhat.com> | ||
| 510 | |||
| 511 | ---------------------------- | ||
| 512 | |||
| 513 | What: w9968cf v4l1 driver | ||
| 514 | When: 2.6.35 | ||
| 515 | Files: drivers/media/video/w9968cf*.[ch] | ||
| 516 | Why: obsolete v4l1 driver replaced by gspca_ov519 | ||
| 517 | Who: Hans de Goede <hdegoede@redhat.com> | ||
| 518 | |||
| 519 | ---------------------------- | ||
| 520 | |||
| 521 | What: ovcamchip sensor framework | ||
| 522 | When: 2.6.35 | ||
| 523 | Files: drivers/media/video/ovcamchip/* | ||
| 524 | Why: Only used by obsoleted v4l1 drivers | ||
| 525 | Who: Hans de Goede <hdegoede@redhat.com> | ||
| 526 | |||
| 527 | ---------------------------- | ||
| 528 | |||
| 529 | What: stv680 v4l1 driver | ||
| 530 | When: 2.6.35 | ||
| 531 | Files: drivers/media/video/stv680.[ch] | ||
| 532 | Why: obsolete v4l1 driver replaced by gspca_stv0680 | ||
| 533 | Who: Hans de Goede <hdegoede@redhat.com> | ||
| 534 | |||
| 535 | ---------------------------- | ||
| 536 | |||
| 537 | What: zc0301 v4l driver | ||
| 538 | When: 2.6.35 | ||
| 539 | Files: drivers/media/video/zc0301/* | ||
| 540 | Why: Duplicate functionality with the gspca_zc3xx driver, zc0301 only | ||
| 541 | supports 2 USB-ID's (because it only supports a limited set of | ||
| 542 | sensors) wich are also supported by the gspca_zc3xx driver | ||
| 543 | (which supports 53 USB-ID's in total) | ||
| 544 | Who: Hans de Goede <hdegoede@redhat.com> | ||
diff --git a/MAINTAINERS b/MAINTAINERS index 3f591629e953..1858646b52e3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -1637,9 +1637,8 @@ S: Maintained | |||
| 1637 | F: sound/pci/cs5535audio/ | 1637 | F: sound/pci/cs5535audio/ |
| 1638 | 1638 | ||
| 1639 | CX18 VIDEO4LINUX DRIVER | 1639 | CX18 VIDEO4LINUX DRIVER |
| 1640 | M: Hans Verkuil <hverkuil@xs4all.nl> | ||
| 1641 | M: Andy Walls <awalls@radix.net> | 1640 | M: Andy Walls <awalls@radix.net> |
| 1642 | L: ivtv-devel@ivtvdriver.org | 1641 | L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers) |
| 1643 | L: linux-media@vger.kernel.org | 1642 | L: linux-media@vger.kernel.org |
| 1644 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git | 1643 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git |
| 1645 | W: http://linuxtv.org | 1644 | W: http://linuxtv.org |
| @@ -3011,8 +3010,8 @@ S: Maintained | |||
| 3011 | F: drivers/isdn/hardware/eicon/ | 3010 | F: drivers/isdn/hardware/eicon/ |
| 3012 | 3011 | ||
| 3013 | IVTV VIDEO4LINUX DRIVER | 3012 | IVTV VIDEO4LINUX DRIVER |
| 3014 | M: Hans Verkuil <hverkuil@xs4all.nl> | 3013 | M: Andy Walls <awalls@radix.net> |
| 3015 | L: ivtv-devel@ivtvdriver.org | 3014 | L: ivtv-devel@ivtvdriver.org (moderated for non-subscribers) |
| 3016 | L: linux-media@vger.kernel.org | 3015 | L: linux-media@vger.kernel.org |
| 3017 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git | 3016 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git |
| 3018 | W: http://www.ivtvdriver.org | 3017 | W: http://www.ivtvdriver.org |
diff --git a/drivers/media/IR/ir-keytable.c b/drivers/media/IR/ir-keytable.c index bff7a5356037..b521ed9d6e2e 100644 --- a/drivers/media/IR/ir-keytable.c +++ b/drivers/media/IR/ir-keytable.c | |||
| @@ -13,7 +13,7 @@ | |||
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | 15 | ||
| 16 | #include <linux/usb/input.h> | 16 | #include <linux/input.h> |
| 17 | #include <media/ir-common.h> | 17 | #include <media/ir-common.h> |
| 18 | 18 | ||
| 19 | #define IR_TAB_MIN_SIZE 32 | 19 | #define IR_TAB_MIN_SIZE 32 |
diff --git a/drivers/media/common/tuners/tda8290.c b/drivers/media/common/tuners/tda8290.c index c190b0dedee4..2833137fa819 100644 --- a/drivers/media/common/tuners/tda8290.c +++ b/drivers/media/common/tuners/tda8290.c | |||
| @@ -144,7 +144,8 @@ static void set_audio(struct dvb_frontend *fe, | |||
| 144 | } | 144 | } |
| 145 | 145 | ||
| 146 | if (params->mode == V4L2_TUNER_RADIO) { | 146 | if (params->mode == V4L2_TUNER_RADIO) { |
| 147 | priv->tda8290_easy_mode = 0x01; /* Start with MN values */ | 147 | /* Set TDA8295 to FM radio; Start TDA8290 with MN values */ |
| 148 | priv->tda8290_easy_mode = (priv->ver & TDA8295) ? 0x80 : 0x01; | ||
| 148 | tuner_dbg("setting to radio FM\n"); | 149 | tuner_dbg("setting to radio FM\n"); |
| 149 | } else { | 150 | } else { |
| 150 | tuner_dbg("setting tda829x to system %s\n", mode); | 151 | tuner_dbg("setting tda829x to system %s\n", mode); |
| @@ -672,16 +673,19 @@ static int tda8290_probe(struct tuner_i2c_props *i2c_props) | |||
| 672 | static int tda8295_probe(struct tuner_i2c_props *i2c_props) | 673 | static int tda8295_probe(struct tuner_i2c_props *i2c_props) |
| 673 | { | 674 | { |
| 674 | #define TDA8295_ID 0x8a | 675 | #define TDA8295_ID 0x8a |
| 676 | #define TDA8295C2_ID 0x8b | ||
| 675 | unsigned char tda8295_id[] = { 0x2f, 0x00 }; | 677 | unsigned char tda8295_id[] = { 0x2f, 0x00 }; |
| 676 | 678 | ||
| 677 | /* detect tda8295 */ | 679 | /* detect tda8295 */ |
| 678 | tuner_i2c_xfer_send(i2c_props, &tda8295_id[0], 1); | 680 | tuner_i2c_xfer_send(i2c_props, &tda8295_id[0], 1); |
| 679 | tuner_i2c_xfer_recv(i2c_props, &tda8295_id[1], 1); | 681 | tuner_i2c_xfer_recv(i2c_props, &tda8295_id[1], 1); |
| 680 | 682 | ||
| 681 | if (tda8295_id[1] == TDA8295_ID) { | 683 | if ((tda8295_id[1] & 0xfe) == TDA8295_ID) { |
| 682 | if (debug) | 684 | if (debug) |
| 683 | printk(KERN_DEBUG "%s: tda8295 detected @ %d-%04x\n", | 685 | printk(KERN_DEBUG "%s: %s detected @ %d-%04x\n", |
| 684 | __func__, i2c_adapter_id(i2c_props->adap), | 686 | __func__, (tda8295_id[1] == TDA8295_ID) ? |
| 687 | "tda8295c1" : "tda8295c2", | ||
| 688 | i2c_adapter_id(i2c_props->adap), | ||
| 685 | i2c_props->addr); | 689 | i2c_props->addr); |
| 686 | return 0; | 690 | return 0; |
| 687 | } | 691 | } |
diff --git a/drivers/media/dvb/frontends/dib8000.h b/drivers/media/dvb/frontends/dib8000.h index d99619ae983c..b1ee20799639 100644 --- a/drivers/media/dvb/frontends/dib8000.h +++ b/drivers/media/dvb/frontends/dib8000.h | |||
| @@ -100,7 +100,7 @@ static inline int dib8000_set_tune_state(struct dvb_frontend *fe, enum frontend_ | |||
| 100 | static inline enum frontend_tune_state dib8000_get_tune_state(struct dvb_frontend *fe) | 100 | static inline enum frontend_tune_state dib8000_get_tune_state(struct dvb_frontend *fe) |
| 101 | { | 101 | { |
| 102 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); | 102 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); |
| 103 | return CT_SHUTDOWN, | 103 | return CT_SHUTDOWN; |
| 104 | } | 104 | } |
| 105 | static inline void dib8000_pwm_agc_reset(struct dvb_frontend *fe) | 105 | static inline void dib8000_pwm_agc_reset(struct dvb_frontend *fe) |
| 106 | { | 106 | { |
diff --git a/drivers/media/dvb/frontends/lgdt3305.h b/drivers/media/dvb/frontends/lgdt3305.h index 4fa6e52d1fe8..9cb11c9cae53 100644 --- a/drivers/media/dvb/frontends/lgdt3305.h +++ b/drivers/media/dvb/frontends/lgdt3305.h | |||
| @@ -54,13 +54,13 @@ struct lgdt3305_config { | |||
| 54 | u16 usref_qam256; /* default: 0x2a80 */ | 54 | u16 usref_qam256; /* default: 0x2a80 */ |
| 55 | 55 | ||
| 56 | /* disable i2c repeater - 0:repeater enabled 1:repeater disabled */ | 56 | /* disable i2c repeater - 0:repeater enabled 1:repeater disabled */ |
| 57 | int deny_i2c_rptr:1; | 57 | unsigned int deny_i2c_rptr:1; |
| 58 | 58 | ||
| 59 | /* spectral inversion - 0:disabled 1:enabled */ | 59 | /* spectral inversion - 0:disabled 1:enabled */ |
| 60 | int spectral_inversion:1; | 60 | unsigned int spectral_inversion:1; |
| 61 | 61 | ||
| 62 | /* use RF AGC loop - 0:disabled 1:enabled */ | 62 | /* use RF AGC loop - 0:disabled 1:enabled */ |
| 63 | int rf_agc_loop:1; | 63 | unsigned int rf_agc_loop:1; |
| 64 | 64 | ||
| 65 | enum lgdt3305_mpeg_mode mpeg_mode; | 65 | enum lgdt3305_mpeg_mode mpeg_mode; |
| 66 | enum lgdt3305_tp_clock_edge tpclk_edge; | 66 | enum lgdt3305_tp_clock_edge tpclk_edge; |
diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c index e930a67d526b..bd6214d4ab3b 100644 --- a/drivers/media/video/gspca/gspca.c +++ b/drivers/media/video/gspca/gspca.c | |||
| @@ -1815,6 +1815,8 @@ static int vidioc_qbuf(struct file *file, void *priv, | |||
| 1815 | /* put the buffer in the 'queued' queue */ | 1815 | /* put the buffer in the 'queued' queue */ |
| 1816 | i = gspca_dev->fr_q; | 1816 | i = gspca_dev->fr_q; |
| 1817 | gspca_dev->fr_queue[i] = index; | 1817 | gspca_dev->fr_queue[i] = index; |
| 1818 | if (gspca_dev->fr_i == i) | ||
| 1819 | gspca_dev->cur_frame = frame; | ||
| 1818 | gspca_dev->fr_q = (i + 1) % gspca_dev->nframes; | 1820 | gspca_dev->fr_q = (i + 1) % gspca_dev->nframes; |
| 1819 | PDEBUG(D_FRAM, "qbuf q:%d i:%d o:%d", | 1821 | PDEBUG(D_FRAM, "qbuf q:%d i:%d o:%d", |
| 1820 | gspca_dev->fr_q, | 1822 | gspca_dev->fr_q, |
diff --git a/drivers/media/video/gspca/m5602/m5602_s5k4aa.c b/drivers/media/video/gspca/m5602/m5602_s5k4aa.c index aa2f3c7e2cb5..1b536f7d30cf 100644 --- a/drivers/media/video/gspca/m5602/m5602_s5k4aa.c +++ b/drivers/media/video/gspca/m5602/m5602_s5k4aa.c | |||
| @@ -48,6 +48,12 @@ static | |||
| 48 | DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xa 2528") | 48 | DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xa 2528") |
| 49 | } | 49 | } |
| 50 | }, { | 50 | }, { |
| 51 | .ident = "Fujitsu-Siemens Amilo Xi 2428", | ||
| 52 | .matches = { | ||
| 53 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), | ||
| 54 | DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xi 2428") | ||
| 55 | } | ||
| 56 | }, { | ||
| 51 | .ident = "Fujitsu-Siemens Amilo Xi 2528", | 57 | .ident = "Fujitsu-Siemens Amilo Xi 2528", |
| 52 | .matches = { | 58 | .matches = { |
| 53 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), | 59 | DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), |
diff --git a/drivers/media/video/gspca/ov534.c b/drivers/media/video/gspca/ov534.c index 4dbb882c83dc..0a6b8f07a69d 100644 --- a/drivers/media/video/gspca/ov534.c +++ b/drivers/media/video/gspca/ov534.c | |||
| @@ -1533,7 +1533,7 @@ static void setexposure_96(struct gspca_dev *gspca_dev) | |||
| 1533 | static void setsharpness_96(struct gspca_dev *gspca_dev) | 1533 | static void setsharpness_96(struct gspca_dev *gspca_dev) |
| 1534 | { | 1534 | { |
| 1535 | struct sd *sd = (struct sd *) gspca_dev; | 1535 | struct sd *sd = (struct sd *) gspca_dev; |
| 1536 | u8 val; | 1536 | s8 val; |
| 1537 | 1537 | ||
| 1538 | val = sd->sharpness; | 1538 | val = sd->sharpness; |
| 1539 | if (val < 0) { /* auto */ | 1539 | if (val < 0) { /* auto */ |
diff --git a/drivers/media/video/gspca/sn9c20x.c b/drivers/media/video/gspca/sn9c20x.c index 4cff8035614f..0ca1c06652b1 100644 --- a/drivers/media/video/gspca/sn9c20x.c +++ b/drivers/media/video/gspca/sn9c20x.c | |||
| @@ -2319,7 +2319,7 @@ static void do_autogain(struct gspca_dev *gspca_dev, u16 avg_lum) | |||
| 2319 | } | 2319 | } |
| 2320 | } | 2320 | } |
| 2321 | if (avg_lum > MAX_AVG_LUM) { | 2321 | if (avg_lum > MAX_AVG_LUM) { |
| 2322 | if (sd->gain - 1 >= 0) { | 2322 | if (sd->gain >= 1) { |
| 2323 | sd->gain--; | 2323 | sd->gain--; |
| 2324 | set_gain(gspca_dev); | 2324 | set_gain(gspca_dev); |
| 2325 | } | 2325 | } |
diff --git a/drivers/media/video/gspca/stv06xx/stv06xx_vv6410.h b/drivers/media/video/gspca/stv06xx/stv06xx_vv6410.h index 487d40555343..96c61926d372 100644 --- a/drivers/media/video/gspca/stv06xx/stv06xx_vv6410.h +++ b/drivers/media/video/gspca/stv06xx/stv06xx_vv6410.h | |||
| @@ -228,6 +228,7 @@ static const struct stv_init stv_bridge_init[] = { | |||
| 228 | /* This reg is written twice. Some kind of reset? */ | 228 | /* This reg is written twice. Some kind of reset? */ |
| 229 | {NULL, 0x1620, 0x80}, | 229 | {NULL, 0x1620, 0x80}, |
| 230 | {NULL, 0x1620, 0x00}, | 230 | {NULL, 0x1620, 0x00}, |
| 231 | {NULL, 0x1443, 0x00}, | ||
| 231 | {NULL, 0x1423, 0x04}, | 232 | {NULL, 0x1423, 0x04}, |
| 232 | {x1500, 0x1500, ARRAY_SIZE(x1500)}, | 233 | {x1500, 0x1500, ARRAY_SIZE(x1500)}, |
| 233 | {x1536, 0x1536, ARRAY_SIZE(x1536)}, | 234 | {x1536, 0x1536, ARRAY_SIZE(x1536)}, |
diff --git a/drivers/media/video/gspca/sunplus.c b/drivers/media/video/gspca/sunplus.c index 716df6b15fc5..306b7d75b4aa 100644 --- a/drivers/media/video/gspca/sunplus.c +++ b/drivers/media/video/gspca/sunplus.c | |||
| @@ -709,7 +709,7 @@ static void spca504B_SetSizeType(struct gspca_dev *gspca_dev) | |||
| 709 | spca504B_PollingDataReady(gspca_dev); | 709 | spca504B_PollingDataReady(gspca_dev); |
| 710 | 710 | ||
| 711 | /* Init the cam width height with some values get on init ? */ | 711 | /* Init the cam width height with some values get on init ? */ |
| 712 | reg_w_riv(gspca_dev, 0x31, 0, 0x04); | 712 | reg_w_riv(gspca_dev, 0x31, 0x0004, 0x00); |
| 713 | spca504B_WaitCmdStatus(gspca_dev); | 713 | spca504B_WaitCmdStatus(gspca_dev); |
| 714 | spca504B_PollingDataReady(gspca_dev); | 714 | spca504B_PollingDataReady(gspca_dev); |
| 715 | break; | 715 | break; |
| @@ -807,14 +807,14 @@ static void init_ctl_reg(struct gspca_dev *gspca_dev) | |||
| 807 | default: | 807 | default: |
| 808 | /* case BRIDGE_SPCA533: */ | 808 | /* case BRIDGE_SPCA533: */ |
| 809 | /* case BRIDGE_SPCA504B: */ | 809 | /* case BRIDGE_SPCA504B: */ |
| 810 | reg_w_riv(gspca_dev, 0, 0x00, 0x21ad); /* hue */ | 810 | reg_w_riv(gspca_dev, 0, 0x21ad, 0x00); /* hue */ |
| 811 | reg_w_riv(gspca_dev, 0, 0x01, 0x21ac); /* sat/hue */ | 811 | reg_w_riv(gspca_dev, 0, 0x21ac, 0x01); /* sat/hue */ |
| 812 | reg_w_riv(gspca_dev, 0, 0x00, 0x21a3); /* gamma */ | 812 | reg_w_riv(gspca_dev, 0, 0x21a3, 0x00); /* gamma */ |
| 813 | break; | 813 | break; |
| 814 | case BRIDGE_SPCA536: | 814 | case BRIDGE_SPCA536: |
| 815 | reg_w_riv(gspca_dev, 0, 0x40, 0x20f5); | 815 | reg_w_riv(gspca_dev, 0, 0x20f5, 0x40); |
| 816 | reg_w_riv(gspca_dev, 0, 0x01, 0x20f4); | 816 | reg_w_riv(gspca_dev, 0, 0x20f4, 0x01); |
| 817 | reg_w_riv(gspca_dev, 0, 0x00, 0x2089); | 817 | reg_w_riv(gspca_dev, 0, 0x2089, 0x00); |
| 818 | break; | 818 | break; |
| 819 | } | 819 | } |
| 820 | if (pollreg) | 820 | if (pollreg) |
| @@ -887,11 +887,11 @@ static int sd_init(struct gspca_dev *gspca_dev) | |||
| 887 | switch (sd->bridge) { | 887 | switch (sd->bridge) { |
| 888 | case BRIDGE_SPCA504B: | 888 | case BRIDGE_SPCA504B: |
| 889 | reg_w_riv(gspca_dev, 0x1d, 0x00, 0); | 889 | reg_w_riv(gspca_dev, 0x1d, 0x00, 0); |
| 890 | reg_w_riv(gspca_dev, 0, 0x01, 0x2306); | 890 | reg_w_riv(gspca_dev, 0x00, 0x2306, 0x01); |
| 891 | reg_w_riv(gspca_dev, 0, 0x00, 0x0d04); | 891 | reg_w_riv(gspca_dev, 0x00, 0x0d04, 0x00); |
| 892 | reg_w_riv(gspca_dev, 0, 0x00, 0x2000); | 892 | reg_w_riv(gspca_dev, 0x00, 0x2000, 0x00); |
| 893 | reg_w_riv(gspca_dev, 0, 0x13, 0x2301); | 893 | reg_w_riv(gspca_dev, 0x00, 0x2301, 0x13); |
| 894 | reg_w_riv(gspca_dev, 0, 0x00, 0x2306); | 894 | reg_w_riv(gspca_dev, 0x00, 0x2306, 0x00); |
| 895 | /* fall thru */ | 895 | /* fall thru */ |
| 896 | case BRIDGE_SPCA533: | 896 | case BRIDGE_SPCA533: |
| 897 | spca504B_PollingDataReady(gspca_dev); | 897 | spca504B_PollingDataReady(gspca_dev); |
| @@ -1000,7 +1000,7 @@ static int sd_start(struct gspca_dev *gspca_dev) | |||
| 1000 | spca504B_WaitCmdStatus(gspca_dev); | 1000 | spca504B_WaitCmdStatus(gspca_dev); |
| 1001 | break; | 1001 | break; |
| 1002 | default: | 1002 | default: |
| 1003 | reg_w_riv(gspca_dev, 0x31, 0, 0x04); | 1003 | reg_w_riv(gspca_dev, 0x31, 0x0004, 0x00); |
| 1004 | spca504B_WaitCmdStatus(gspca_dev); | 1004 | spca504B_WaitCmdStatus(gspca_dev); |
| 1005 | spca504B_PollingDataReady(gspca_dev); | 1005 | spca504B_PollingDataReady(gspca_dev); |
| 1006 | break; | 1006 | break; |
diff --git a/drivers/media/video/gspca/vc032x.c b/drivers/media/video/gspca/vc032x.c index c090efcd8045..71921c878424 100644 --- a/drivers/media/video/gspca/vc032x.c +++ b/drivers/media/video/gspca/vc032x.c | |||
| @@ -3009,6 +3009,10 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, | |||
| 3009 | int l; | 3009 | int l; |
| 3010 | 3010 | ||
| 3011 | frame = gspca_get_i_frame(gspca_dev); | 3011 | frame = gspca_get_i_frame(gspca_dev); |
| 3012 | if (frame == NULL) { | ||
| 3013 | gspca_dev->last_packet_type = DISCARD_PACKET; | ||
| 3014 | return; | ||
| 3015 | } | ||
| 3012 | l = frame->data_end - frame->data; | 3016 | l = frame->data_end - frame->data; |
| 3013 | if (len > frame->v4l2_buf.length - l) | 3017 | if (len > frame->v4l2_buf.length - l) |
| 3014 | len = frame->v4l2_buf.length - l; | 3018 | len = frame->v4l2_buf.length - l; |
diff --git a/drivers/media/video/mx1_camera.c b/drivers/media/video/mx1_camera.c index 2ba14fb5b031..c167cc3de492 100644 --- a/drivers/media/video/mx1_camera.c +++ b/drivers/media/video/mx1_camera.c | |||
| @@ -718,7 +718,7 @@ static int __init mx1_camera_probe(struct platform_device *pdev) | |||
| 718 | 718 | ||
| 719 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 719 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 720 | irq = platform_get_irq(pdev, 0); | 720 | irq = platform_get_irq(pdev, 0); |
| 721 | if (!res || !irq) { | 721 | if (!res || (int)irq <= 0) { |
| 722 | err = -ENODEV; | 722 | err = -ENODEV; |
| 723 | goto exit; | 723 | goto exit; |
| 724 | } | 724 | } |
diff --git a/drivers/media/video/rj54n1cb0c.c b/drivers/media/video/rj54n1cb0c.c index 7e42989ce0e4..805226e0d9c1 100644 --- a/drivers/media/video/rj54n1cb0c.c +++ b/drivers/media/video/rj54n1cb0c.c | |||
| @@ -563,7 +563,7 @@ static int rj54n1_s_crop(struct v4l2_subdev *sd, struct v4l2_crop *a) | |||
| 563 | struct i2c_client *client = sd->priv; | 563 | struct i2c_client *client = sd->priv; |
| 564 | struct rj54n1 *rj54n1 = to_rj54n1(client); | 564 | struct rj54n1 *rj54n1 = to_rj54n1(client); |
| 565 | struct v4l2_rect *rect = &a->c; | 565 | struct v4l2_rect *rect = &a->c; |
| 566 | unsigned int dummy, output_w, output_h, | 566 | unsigned int dummy = 0, output_w, output_h, |
| 567 | input_w = rect->width, input_h = rect->height; | 567 | input_w = rect->width, input_h = rect->height; |
| 568 | int ret; | 568 | int ret; |
| 569 | 569 | ||
diff --git a/drivers/media/video/saa7134/saa7134-core.c b/drivers/media/video/saa7134/saa7134-core.c index 9f85e917f9f3..a7ad7810fddc 100644 --- a/drivers/media/video/saa7134/saa7134-core.c +++ b/drivers/media/video/saa7134/saa7134-core.c | |||
| @@ -420,19 +420,6 @@ int saa7134_set_dmabits(struct saa7134_dev *dev) | |||
| 420 | ctrl |= SAA7134_MAIN_CTRL_TE5; | 420 | ctrl |= SAA7134_MAIN_CTRL_TE5; |
| 421 | irq |= SAA7134_IRQ1_INTE_RA2_1 | | 421 | irq |= SAA7134_IRQ1_INTE_RA2_1 | |
| 422 | SAA7134_IRQ1_INTE_RA2_0; | 422 | SAA7134_IRQ1_INTE_RA2_0; |
| 423 | |||
| 424 | /* dma: setup channel 5 (= TS) */ | ||
| 425 | |||
| 426 | saa_writeb(SAA7134_TS_DMA0, (dev->ts.nr_packets - 1) & 0xff); | ||
| 427 | saa_writeb(SAA7134_TS_DMA1, | ||
| 428 | ((dev->ts.nr_packets - 1) >> 8) & 0xff); | ||
| 429 | /* TSNOPIT=0, TSCOLAP=0 */ | ||
| 430 | saa_writeb(SAA7134_TS_DMA2, | ||
| 431 | (((dev->ts.nr_packets - 1) >> 16) & 0x3f) | 0x00); | ||
| 432 | saa_writel(SAA7134_RS_PITCH(5), TS_PACKET_SIZE); | ||
| 433 | saa_writel(SAA7134_RS_CONTROL(5), SAA7134_RS_CONTROL_BURST_16 | | ||
| 434 | SAA7134_RS_CONTROL_ME | | ||
| 435 | (dev->ts.pt_ts.dma >> 12)); | ||
| 436 | } | 423 | } |
| 437 | 424 | ||
| 438 | /* set task conditions + field handling */ | 425 | /* set task conditions + field handling */ |
diff --git a/drivers/media/video/saa7134/saa7134-ts.c b/drivers/media/video/saa7134/saa7134-ts.c index 03488ba4c99c..b9817d74943f 100644 --- a/drivers/media/video/saa7134/saa7134-ts.c +++ b/drivers/media/video/saa7134/saa7134-ts.c | |||
| @@ -250,6 +250,19 @@ int saa7134_ts_start(struct saa7134_dev *dev) | |||
| 250 | 250 | ||
| 251 | BUG_ON(dev->ts_started); | 251 | BUG_ON(dev->ts_started); |
| 252 | 252 | ||
| 253 | /* dma: setup channel 5 (= TS) */ | ||
| 254 | saa_writeb(SAA7134_TS_DMA0, (dev->ts.nr_packets - 1) & 0xff); | ||
| 255 | saa_writeb(SAA7134_TS_DMA1, | ||
| 256 | ((dev->ts.nr_packets - 1) >> 8) & 0xff); | ||
| 257 | /* TSNOPIT=0, TSCOLAP=0 */ | ||
| 258 | saa_writeb(SAA7134_TS_DMA2, | ||
| 259 | (((dev->ts.nr_packets - 1) >> 16) & 0x3f) | 0x00); | ||
| 260 | saa_writel(SAA7134_RS_PITCH(5), TS_PACKET_SIZE); | ||
| 261 | saa_writel(SAA7134_RS_CONTROL(5), SAA7134_RS_CONTROL_BURST_16 | | ||
| 262 | SAA7134_RS_CONTROL_ME | | ||
| 263 | (dev->ts.pt_ts.dma >> 12)); | ||
| 264 | |||
| 265 | /* reset hardware TS buffers */ | ||
| 253 | saa_writeb(SAA7134_TS_SERIAL1, 0x00); | 266 | saa_writeb(SAA7134_TS_SERIAL1, 0x00); |
| 254 | saa_writeb(SAA7134_TS_SERIAL1, 0x03); | 267 | saa_writeb(SAA7134_TS_SERIAL1, 0x03); |
| 255 | saa_writeb(SAA7134_TS_SERIAL1, 0x00); | 268 | saa_writeb(SAA7134_TS_SERIAL1, 0x00); |
diff --git a/drivers/media/video/sh_mobile_ceu_camera.c b/drivers/media/video/sh_mobile_ceu_camera.c index d69363f0d8c9..f09c7140d6b2 100644 --- a/drivers/media/video/sh_mobile_ceu_camera.c +++ b/drivers/media/video/sh_mobile_ceu_camera.c | |||
| @@ -1827,7 +1827,7 @@ static int __devinit sh_mobile_ceu_probe(struct platform_device *pdev) | |||
| 1827 | 1827 | ||
| 1828 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 1828 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
| 1829 | irq = platform_get_irq(pdev, 0); | 1829 | irq = platform_get_irq(pdev, 0); |
| 1830 | if (!res || !irq) { | 1830 | if (!res || (int)irq <= 0) { |
| 1831 | dev_err(&pdev->dev, "Not enough CEU platform resources.\n"); | 1831 | dev_err(&pdev->dev, "Not enough CEU platform resources.\n"); |
| 1832 | err = -ENODEV; | 1832 | err = -ENODEV; |
| 1833 | goto exit; | 1833 | goto exit; |
diff --git a/drivers/media/video/uvc/uvc_ctrl.c b/drivers/media/video/uvc/uvc_ctrl.c index 0469d7a876a8..ec8ef8c5560a 100644 --- a/drivers/media/video/uvc/uvc_ctrl.c +++ b/drivers/media/video/uvc/uvc_ctrl.c | |||
| @@ -1393,7 +1393,7 @@ uvc_ctrl_prune_entity(struct uvc_device *dev, struct uvc_entity *entity) | |||
| 1393 | size = entity->processing.bControlSize; | 1393 | size = entity->processing.bControlSize; |
| 1394 | 1394 | ||
| 1395 | for (i = 0; i < ARRAY_SIZE(blacklist); ++i) { | 1395 | for (i = 0; i < ARRAY_SIZE(blacklist); ++i) { |
| 1396 | if (!usb_match_id(dev->intf, &blacklist[i].id)) | 1396 | if (!usb_match_one_id(dev->intf, &blacklist[i].id)) |
| 1397 | continue; | 1397 | continue; |
| 1398 | 1398 | ||
| 1399 | if (blacklist[i].index >= 8 * size || | 1399 | if (blacklist[i].index >= 8 * size || |
diff --git a/drivers/media/video/uvc/uvc_queue.c b/drivers/media/video/uvc/uvc_queue.c index f854698c4061..ea11839cba4a 100644 --- a/drivers/media/video/uvc/uvc_queue.c +++ b/drivers/media/video/uvc/uvc_queue.c | |||
| @@ -59,9 +59,9 @@ | |||
| 59 | * returns immediately. | 59 | * returns immediately. |
| 60 | * | 60 | * |
| 61 | * When the buffer is full, the completion handler removes it from the irq | 61 | * When the buffer is full, the completion handler removes it from the irq |
| 62 | * queue, marks it as ready (UVC_BUF_STATE_DONE) and wakes its wait queue. | 62 | * queue, marks it as done (UVC_BUF_STATE_DONE) and wakes its wait queue. |
| 63 | * At that point, any process waiting on the buffer will be woken up. If a | 63 | * At that point, any process waiting on the buffer will be woken up. If a |
| 64 | * process tries to dequeue a buffer after it has been marked ready, the | 64 | * process tries to dequeue a buffer after it has been marked done, the |
| 65 | * dequeing will succeed immediately. | 65 | * dequeing will succeed immediately. |
| 66 | * | 66 | * |
| 67 | * 2. Buffers are queued, user is waiting on a buffer and the device gets | 67 | * 2. Buffers are queued, user is waiting on a buffer and the device gets |
| @@ -201,6 +201,7 @@ static void __uvc_query_buffer(struct uvc_buffer *buf, | |||
| 201 | break; | 201 | break; |
| 202 | case UVC_BUF_STATE_QUEUED: | 202 | case UVC_BUF_STATE_QUEUED: |
| 203 | case UVC_BUF_STATE_ACTIVE: | 203 | case UVC_BUF_STATE_ACTIVE: |
| 204 | case UVC_BUF_STATE_READY: | ||
| 204 | v4l2_buf->flags |= V4L2_BUF_FLAG_QUEUED; | 205 | v4l2_buf->flags |= V4L2_BUF_FLAG_QUEUED; |
| 205 | break; | 206 | break; |
| 206 | case UVC_BUF_STATE_IDLE: | 207 | case UVC_BUF_STATE_IDLE: |
| @@ -295,13 +296,15 @@ static int uvc_queue_waiton(struct uvc_buffer *buf, int nonblocking) | |||
| 295 | { | 296 | { |
| 296 | if (nonblocking) { | 297 | if (nonblocking) { |
| 297 | return (buf->state != UVC_BUF_STATE_QUEUED && | 298 | return (buf->state != UVC_BUF_STATE_QUEUED && |
| 298 | buf->state != UVC_BUF_STATE_ACTIVE) | 299 | buf->state != UVC_BUF_STATE_ACTIVE && |
| 300 | buf->state != UVC_BUF_STATE_READY) | ||
| 299 | ? 0 : -EAGAIN; | 301 | ? 0 : -EAGAIN; |
| 300 | } | 302 | } |
| 301 | 303 | ||
| 302 | return wait_event_interruptible(buf->wait, | 304 | return wait_event_interruptible(buf->wait, |
| 303 | buf->state != UVC_BUF_STATE_QUEUED && | 305 | buf->state != UVC_BUF_STATE_QUEUED && |
| 304 | buf->state != UVC_BUF_STATE_ACTIVE); | 306 | buf->state != UVC_BUF_STATE_ACTIVE && |
| 307 | buf->state != UVC_BUF_STATE_READY); | ||
| 305 | } | 308 | } |
| 306 | 309 | ||
| 307 | /* | 310 | /* |
| @@ -348,6 +351,7 @@ int uvc_dequeue_buffer(struct uvc_video_queue *queue, | |||
| 348 | case UVC_BUF_STATE_IDLE: | 351 | case UVC_BUF_STATE_IDLE: |
| 349 | case UVC_BUF_STATE_QUEUED: | 352 | case UVC_BUF_STATE_QUEUED: |
| 350 | case UVC_BUF_STATE_ACTIVE: | 353 | case UVC_BUF_STATE_ACTIVE: |
| 354 | case UVC_BUF_STATE_READY: | ||
| 351 | default: | 355 | default: |
| 352 | uvc_trace(UVC_TRACE_CAPTURE, "[E] Invalid buffer state %u " | 356 | uvc_trace(UVC_TRACE_CAPTURE, "[E] Invalid buffer state %u " |
| 353 | "(driver bug?).\n", buf->state); | 357 | "(driver bug?).\n", buf->state); |
| @@ -489,6 +493,7 @@ struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue, | |||
| 489 | 493 | ||
| 490 | spin_lock_irqsave(&queue->irqlock, flags); | 494 | spin_lock_irqsave(&queue->irqlock, flags); |
| 491 | list_del(&buf->queue); | 495 | list_del(&buf->queue); |
| 496 | buf->state = UVC_BUF_STATE_DONE; | ||
| 492 | if (!list_empty(&queue->irqqueue)) | 497 | if (!list_empty(&queue->irqqueue)) |
| 493 | nextbuf = list_first_entry(&queue->irqqueue, struct uvc_buffer, | 498 | nextbuf = list_first_entry(&queue->irqqueue, struct uvc_buffer, |
| 494 | queue); | 499 | queue); |
diff --git a/drivers/media/video/uvc/uvc_video.c b/drivers/media/video/uvc/uvc_video.c index 9a9802830d41..7dcf534a0cf3 100644 --- a/drivers/media/video/uvc/uvc_video.c +++ b/drivers/media/video/uvc/uvc_video.c | |||
| @@ -441,7 +441,7 @@ static int uvc_video_decode_start(struct uvc_streaming *stream, | |||
| 441 | if (fid != stream->last_fid && buf->buf.bytesused != 0) { | 441 | if (fid != stream->last_fid && buf->buf.bytesused != 0) { |
| 442 | uvc_trace(UVC_TRACE_FRAME, "Frame complete (FID bit " | 442 | uvc_trace(UVC_TRACE_FRAME, "Frame complete (FID bit " |
| 443 | "toggled).\n"); | 443 | "toggled).\n"); |
| 444 | buf->state = UVC_BUF_STATE_DONE; | 444 | buf->state = UVC_BUF_STATE_READY; |
| 445 | return -EAGAIN; | 445 | return -EAGAIN; |
| 446 | } | 446 | } |
| 447 | 447 | ||
| @@ -470,7 +470,7 @@ static void uvc_video_decode_data(struct uvc_streaming *stream, | |||
| 470 | /* Complete the current frame if the buffer size was exceeded. */ | 470 | /* Complete the current frame if the buffer size was exceeded. */ |
| 471 | if (len > maxlen) { | 471 | if (len > maxlen) { |
| 472 | uvc_trace(UVC_TRACE_FRAME, "Frame complete (overflow).\n"); | 472 | uvc_trace(UVC_TRACE_FRAME, "Frame complete (overflow).\n"); |
| 473 | buf->state = UVC_BUF_STATE_DONE; | 473 | buf->state = UVC_BUF_STATE_READY; |
| 474 | } | 474 | } |
| 475 | } | 475 | } |
| 476 | 476 | ||
| @@ -482,7 +482,7 @@ static void uvc_video_decode_end(struct uvc_streaming *stream, | |||
| 482 | uvc_trace(UVC_TRACE_FRAME, "Frame complete (EOF found).\n"); | 482 | uvc_trace(UVC_TRACE_FRAME, "Frame complete (EOF found).\n"); |
| 483 | if (data[0] == len) | 483 | if (data[0] == len) |
| 484 | uvc_trace(UVC_TRACE_FRAME, "EOF in empty payload.\n"); | 484 | uvc_trace(UVC_TRACE_FRAME, "EOF in empty payload.\n"); |
| 485 | buf->state = UVC_BUF_STATE_DONE; | 485 | buf->state = UVC_BUF_STATE_READY; |
| 486 | if (stream->dev->quirks & UVC_QUIRK_STREAM_NO_FID) | 486 | if (stream->dev->quirks & UVC_QUIRK_STREAM_NO_FID) |
| 487 | stream->last_fid ^= UVC_STREAM_FID; | 487 | stream->last_fid ^= UVC_STREAM_FID; |
| 488 | } | 488 | } |
| @@ -568,8 +568,7 @@ static void uvc_video_decode_isoc(struct urb *urb, struct uvc_streaming *stream, | |||
| 568 | uvc_video_decode_end(stream, buf, mem, | 568 | uvc_video_decode_end(stream, buf, mem, |
| 569 | urb->iso_frame_desc[i].actual_length); | 569 | urb->iso_frame_desc[i].actual_length); |
| 570 | 570 | ||
| 571 | if (buf->state == UVC_BUF_STATE_DONE || | 571 | if (buf->state == UVC_BUF_STATE_READY) |
| 572 | buf->state == UVC_BUF_STATE_ERROR) | ||
| 573 | buf = uvc_queue_next_buffer(&stream->queue, buf); | 572 | buf = uvc_queue_next_buffer(&stream->queue, buf); |
| 574 | } | 573 | } |
| 575 | } | 574 | } |
| @@ -627,8 +626,7 @@ static void uvc_video_decode_bulk(struct urb *urb, struct uvc_streaming *stream, | |||
| 627 | if (!stream->bulk.skip_payload && buf != NULL) { | 626 | if (!stream->bulk.skip_payload && buf != NULL) { |
| 628 | uvc_video_decode_end(stream, buf, stream->bulk.header, | 627 | uvc_video_decode_end(stream, buf, stream->bulk.header, |
| 629 | stream->bulk.payload_size); | 628 | stream->bulk.payload_size); |
| 630 | if (buf->state == UVC_BUF_STATE_DONE || | 629 | if (buf->state == UVC_BUF_STATE_READY) |
| 631 | buf->state == UVC_BUF_STATE_ERROR) | ||
| 632 | buf = uvc_queue_next_buffer(&stream->queue, | 630 | buf = uvc_queue_next_buffer(&stream->queue, |
| 633 | buf); | 631 | buf); |
| 634 | } | 632 | } |
| @@ -669,7 +667,7 @@ static void uvc_video_encode_bulk(struct urb *urb, struct uvc_streaming *stream, | |||
| 669 | stream->bulk.payload_size == stream->bulk.max_payload_size) { | 667 | stream->bulk.payload_size == stream->bulk.max_payload_size) { |
| 670 | if (buf->buf.bytesused == stream->queue.buf_used) { | 668 | if (buf->buf.bytesused == stream->queue.buf_used) { |
| 671 | stream->queue.buf_used = 0; | 669 | stream->queue.buf_used = 0; |
| 672 | buf->state = UVC_BUF_STATE_DONE; | 670 | buf->state = UVC_BUF_STATE_READY; |
| 673 | uvc_queue_next_buffer(&stream->queue, buf); | 671 | uvc_queue_next_buffer(&stream->queue, buf); |
| 674 | stream->last_fid ^= UVC_STREAM_FID; | 672 | stream->last_fid ^= UVC_STREAM_FID; |
| 675 | } | 673 | } |
| @@ -924,10 +922,8 @@ static int uvc_init_video_bulk(struct uvc_streaming *stream, | |||
| 924 | static int uvc_init_video(struct uvc_streaming *stream, gfp_t gfp_flags) | 922 | static int uvc_init_video(struct uvc_streaming *stream, gfp_t gfp_flags) |
| 925 | { | 923 | { |
| 926 | struct usb_interface *intf = stream->intf; | 924 | struct usb_interface *intf = stream->intf; |
| 927 | struct usb_host_interface *alts; | 925 | struct usb_host_endpoint *ep; |
| 928 | struct usb_host_endpoint *ep = NULL; | 926 | unsigned int i; |
| 929 | int intfnum = stream->intfnum; | ||
| 930 | unsigned int bandwidth, psize, i; | ||
| 931 | int ret; | 927 | int ret; |
| 932 | 928 | ||
| 933 | stream->last_fid = -1; | 929 | stream->last_fid = -1; |
| @@ -936,6 +932,12 @@ static int uvc_init_video(struct uvc_streaming *stream, gfp_t gfp_flags) | |||
| 936 | stream->bulk.payload_size = 0; | 932 | stream->bulk.payload_size = 0; |
| 937 | 933 | ||
| 938 | if (intf->num_altsetting > 1) { | 934 | if (intf->num_altsetting > 1) { |
| 935 | struct usb_host_endpoint *best_ep = NULL; | ||
| 936 | unsigned int best_psize = 3 * 1024; | ||
| 937 | unsigned int bandwidth; | ||
| 938 | unsigned int uninitialized_var(altsetting); | ||
| 939 | int intfnum = stream->intfnum; | ||
| 940 | |||
| 939 | /* Isochronous endpoint, select the alternate setting. */ | 941 | /* Isochronous endpoint, select the alternate setting. */ |
| 940 | bandwidth = stream->ctrl.dwMaxPayloadTransferSize; | 942 | bandwidth = stream->ctrl.dwMaxPayloadTransferSize; |
| 941 | 943 | ||
| @@ -949,6 +951,9 @@ static int uvc_init_video(struct uvc_streaming *stream, gfp_t gfp_flags) | |||
| 949 | } | 951 | } |
| 950 | 952 | ||
| 951 | for (i = 0; i < intf->num_altsetting; ++i) { | 953 | for (i = 0; i < intf->num_altsetting; ++i) { |
| 954 | struct usb_host_interface *alts; | ||
| 955 | unsigned int psize; | ||
| 956 | |||
| 952 | alts = &intf->altsetting[i]; | 957 | alts = &intf->altsetting[i]; |
| 953 | ep = uvc_find_endpoint(alts, | 958 | ep = uvc_find_endpoint(alts, |
| 954 | stream->header.bEndpointAddress); | 959 | stream->header.bEndpointAddress); |
| @@ -958,21 +963,27 @@ static int uvc_init_video(struct uvc_streaming *stream, gfp_t gfp_flags) | |||
| 958 | /* Check if the bandwidth is high enough. */ | 963 | /* Check if the bandwidth is high enough. */ |
| 959 | psize = le16_to_cpu(ep->desc.wMaxPacketSize); | 964 | psize = le16_to_cpu(ep->desc.wMaxPacketSize); |
| 960 | psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3)); | 965 | psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3)); |
| 961 | if (psize >= bandwidth) | 966 | if (psize >= bandwidth && psize <= best_psize) { |
| 962 | break; | 967 | altsetting = i; |
| 968 | best_psize = psize; | ||
| 969 | best_ep = ep; | ||
| 970 | } | ||
| 963 | } | 971 | } |
| 964 | 972 | ||
| 965 | if (i >= intf->num_altsetting) { | 973 | if (best_ep == NULL) { |
| 966 | uvc_trace(UVC_TRACE_VIDEO, "No fast enough alt setting " | 974 | uvc_trace(UVC_TRACE_VIDEO, "No fast enough alt setting " |
| 967 | "for requested bandwidth.\n"); | 975 | "for requested bandwidth.\n"); |
| 968 | return -EIO; | 976 | return -EIO; |
| 969 | } | 977 | } |
| 970 | 978 | ||
| 971 | ret = usb_set_interface(stream->dev->udev, intfnum, i); | 979 | uvc_trace(UVC_TRACE_VIDEO, "Selecting alternate setting %u " |
| 980 | "(%u B/frame bandwidth).\n", altsetting, best_psize); | ||
| 981 | |||
| 982 | ret = usb_set_interface(stream->dev->udev, intfnum, altsetting); | ||
| 972 | if (ret < 0) | 983 | if (ret < 0) |
| 973 | return ret; | 984 | return ret; |
| 974 | 985 | ||
| 975 | ret = uvc_init_video_isoc(stream, ep, gfp_flags); | 986 | ret = uvc_init_video_isoc(stream, best_ep, gfp_flags); |
| 976 | } else { | 987 | } else { |
| 977 | /* Bulk endpoint, proceed to URB initialization. */ | 988 | /* Bulk endpoint, proceed to URB initialization. */ |
| 978 | ep = uvc_find_endpoint(&intf->altsetting[0], | 989 | ep = uvc_find_endpoint(&intf->altsetting[0], |
diff --git a/drivers/media/video/uvc/uvcvideo.h b/drivers/media/video/uvc/uvcvideo.h index 7ec9a04ced50..2337585001ea 100644 --- a/drivers/media/video/uvc/uvcvideo.h +++ b/drivers/media/video/uvc/uvcvideo.h | |||
| @@ -365,8 +365,9 @@ enum uvc_buffer_state { | |||
| 365 | UVC_BUF_STATE_IDLE = 0, | 365 | UVC_BUF_STATE_IDLE = 0, |
| 366 | UVC_BUF_STATE_QUEUED = 1, | 366 | UVC_BUF_STATE_QUEUED = 1, |
| 367 | UVC_BUF_STATE_ACTIVE = 2, | 367 | UVC_BUF_STATE_ACTIVE = 2, |
| 368 | UVC_BUF_STATE_DONE = 3, | 368 | UVC_BUF_STATE_READY = 3, |
| 369 | UVC_BUF_STATE_ERROR = 4, | 369 | UVC_BUF_STATE_DONE = 4, |
| 370 | UVC_BUF_STATE_ERROR = 5, | ||
| 370 | }; | 371 | }; |
| 371 | 372 | ||
| 372 | struct uvc_buffer { | 373 | struct uvc_buffer { |
diff --git a/drivers/staging/cx25821/cx25821-medusa-video.c b/drivers/staging/cx25821/cx25821-medusa-video.c index e4df8134f059..1eb079b3d429 100644 --- a/drivers/staging/cx25821/cx25821-medusa-video.c +++ b/drivers/staging/cx25821/cx25821-medusa-video.c | |||
| @@ -860,10 +860,8 @@ int medusa_video_init(struct cx25821_dev *dev) | |||
| 860 | 860 | ||
| 861 | ret_val = medusa_set_videostandard(dev); | 861 | ret_val = medusa_set_videostandard(dev); |
| 862 | 862 | ||
| 863 | if (ret_val < 0) { | 863 | if (ret_val < 0) |
| 864 | mutex_unlock(&dev->lock); | ||
| 865 | return -EINVAL; | 864 | return -EINVAL; |
| 866 | } | ||
| 867 | 865 | ||
| 868 | return 1; | 866 | return 1; |
| 869 | } | 867 | } |
