lkml.org 
[lkml]   [2014]   [Jul]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.15 03/37] media: af9035: override tuner id when bad value set into eeprom
    Date
    3.15-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Antti Palosaari <crope@iki.fi>

    commit 1cbbf90d0406913ad4b44194b07f4f41bde84e54 upstream.

    Tuner ID set into EEPROM is wrong in some cases, which causes driver
    to select wrong tuner profile. That leads device non-working. Fix
    issue by overriding known bad tuner IDs with suitable default value.

    Thanks to MX-NET Telekomunikace s.r.o. for providing non-working
    DTV stick, that I could fix the bug!

    Signed-off-by: Antti Palosaari <crope@iki.fi>
    Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/media/usb/dvb-usb-v2/af9035.c | 40 ++++++++++++++++++++++++++++------
    1 file changed, 33 insertions(+), 7 deletions(-)

    --- a/drivers/media/usb/dvb-usb-v2/af9035.c
    +++ b/drivers/media/usb/dvb-usb-v2/af9035.c
    @@ -704,15 +704,41 @@ static int af9035_read_config(struct dvb
    if (ret < 0)
    goto err;

    - if (tmp == 0x00)
    - dev_dbg(&d->udev->dev,
    - "%s: [%d]tuner not set, using default\n",
    - __func__, i);
    - else
    + dev_dbg(&d->udev->dev, "%s: [%d]tuner=%02x\n",
    + __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;
    + }

    - dev_dbg(&d->udev->dev, "%s: [%d]tuner=%02x\n",
    - __func__, i, state->af9033_config[i].tuner);
    + 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:



    \
     
     \ /
      Last update: 2014-07-30 05:21    [W:4.504 / U:0.096 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site