Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=aaf7884db395332ae8474f3ea5bcdd39c0a941ea
Commit:     aaf7884db395332ae8474f3ea5bcdd39c0a941ea
Parent:     56dcbfa0d5a46f137df5047ae8f3aab30f59954e
Author:     Mike Isely <[EMAIL PROTECTED]>
AuthorDate: Mon Nov 26 02:04:11 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Fri Jan 25 19:03:03 2008 -0200

    V4L/DVB (6697): pvrusb2: Existence of Hauppauge ROM is a device-specific 
attribute
    
    Arrange so that the pvrusb2 driver can optionally work without a
    Hauppauge ROM being present - which is fairly important for devices
    that happen to not come from Hauppauge.  The expected existence of a
    Hauppauge ROM is now a device attribute.  The tuner type is now also a
    device attribute, which is consulted if there is no ROM.
    
    Signed-off-by: Mike Isely <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/video/pvrusb2/pvrusb2-devattr.c |    2 ++
 drivers/media/video/pvrusb2/pvrusb2-devattr.h |    7 +++++++
 drivers/media/video/pvrusb2/pvrusb2-hdw.c     |   25 ++++++++++++++++---------
 3 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/drivers/media/video/pvrusb2/pvrusb2-devattr.c 
b/drivers/media/video/pvrusb2/pvrusb2-devattr.c
index aebcb84..54a401e 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-devattr.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-devattr.c
@@ -72,6 +72,7 @@ const struct pvr2_device_desc pvr2_device_descriptions[] = {
                .client_modules.cnt = ARRAY_SIZE(pvr2_client_29xxx),
                .fx2_firmware.lst = pvr2_fw1_names_29xxx,
                .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_29xxx),
+               .flag_has_hauppauge_rom = !0,
        },
        [PVR2_HDW_TYPE_24XXX] = {
                .description = "WinTV PVR USB2 Model Category 24xxxx",
@@ -82,6 +83,7 @@ const struct pvr2_device_desc pvr2_device_descriptions[] = {
                .fx2_firmware.cnt = ARRAY_SIZE(pvr2_fw1_names_24xxx),
                .flag_has_cx25840 = !0,
                .flag_has_wm8775 = !0,
+               .flag_has_hauppauge_rom = !0,
        },
 };
 
diff --git a/drivers/media/video/pvrusb2/pvrusb2-devattr.h 
b/drivers/media/video/pvrusb2/pvrusb2-devattr.h
index 6576aef..f63c3dd 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-devattr.h
+++ b/drivers/media/video/pvrusb2/pvrusb2-devattr.h
@@ -55,9 +55,16 @@ struct pvr2_device_desc {
           was initialized from internal ROM. */
        struct pvr2_string_table fx2_firmware;
 
+       /* V4L tuner type ID to use with this device (only used if the
+          driver could not discover the type any other way). */
+       int default_tuner_type;
+
        /* If set, we don't bother trying to load cx23416 firmware. */
        char flag_skip_cx23416_firmware;
 
+       /* Device has a hauppauge eeprom which we can interrogate. */
+       char flag_has_hauppauge_rom;
+
        /* Device does not require a powerup command to be issued. */
        char flag_no_powerup;
 
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c 
b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index 6a7b9af..b7b2d90 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -1428,6 +1428,7 @@ static int get_default_tuner_type(struct pvr2_hdw *hdw)
        }
        if (tp < 0) return -EINVAL;
        hdw->tuner_type = tp;
+       hdw->tuner_updated = !0;
        return 0;
 }
 
@@ -1669,15 +1670,22 @@ static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
        // thread-safe against the normal pvr2_send_request() mechanism.
        // (We should make it thread safe).
 
-       ret = pvr2_hdw_get_eeprom_addr(hdw);
-       if (!pvr2_hdw_dev_ok(hdw)) return;
-       if (ret < 0) {
-               pvr2_trace(PVR2_TRACE_ERROR_LEGS,
-                          "Unable to determine location of eeprom, skipping");
-       } else {
-               hdw->eeprom_addr = ret;
-               pvr2_eeprom_analyze(hdw);
+       if (hdw->hdw_desc->flag_has_hauppauge_rom) {
+               ret = pvr2_hdw_get_eeprom_addr(hdw);
                if (!pvr2_hdw_dev_ok(hdw)) return;
+               if (ret < 0) {
+                       pvr2_trace(PVR2_TRACE_ERROR_LEGS,
+                                  "Unable to determine location of eeprom,"
+                                  " skipping");
+               } else {
+                       hdw->eeprom_addr = ret;
+                       pvr2_eeprom_analyze(hdw);
+                       if (!pvr2_hdw_dev_ok(hdw)) return;
+               }
+       } else {
+               hdw->tuner_type = hdw->hdw_desc->default_tuner_type;
+               hdw->tuner_updated = !0;
+               hdw->std_mask_eeprom = V4L2_STD_ALL;
        }
 
        pvr2_hdw_setup_std(hdw);
@@ -1686,7 +1694,6 @@ static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
                pvr2_trace(PVR2_TRACE_INIT,
                           "pvr2_hdw_setup: Tuner type overridden to %d",
                           hdw->tuner_type);
-               hdw->tuner_updated = !0;
        }
 
        pvr2_i2c_core_check_stale(hdw);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to