Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=80b522085a2c870ba0c0bdf2415cc925d7c86ca5
Commit:     80b522085a2c870ba0c0bdf2415cc925d7c86ca5
Parent:     f8b6030ccca06bf0d45d9b0908caac9b624a9beb
Author:     Mauro Carvalho Chehab <[EMAIL PROTECTED]>
AuthorDate: Mon Nov 5 09:07:13 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Fri Jan 25 19:02:01 2008 -0200

    V4L/DVB (6561): Fix xc2028 get register functions and calls
    
    The status registers require a dword for setting register. Fix it on all
    occurrences, and at xc3028_get_reg. Also, improves the hardware/firmware
    detection printk.
    
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/video/tuner-xc2028.c |   25 ++++++++++++++++---------
 1 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/drivers/media/video/tuner-xc2028.c 
b/drivers/media/video/tuner-xc2028.c
index b4c88ed..ecfc390 100644
--- a/drivers/media/video/tuner-xc2028.c
+++ b/drivers/media/video/tuner-xc2028.c
@@ -91,16 +91,17 @@ struct xc2028_data {
        msleep(10);                                                     \
 } while (0)
 
-static int xc2028_get_reg(struct xc2028_data *priv, u16 reg)
+static unsigned int xc2028_get_reg(struct xc2028_data *priv, u16 reg)
 {
        int rc;
        unsigned char buf[2];
 
        tuner_info("%s called\n", __FUNCTION__);
 
-       buf[0] = reg;
+       buf[0] = reg>>8;
+       buf[1] = (unsigned char) reg;
 
-       i2c_send(rc, priv, buf, 1);
+       i2c_send(rc, priv, buf, 2);
        if (rc < 0)
                return rc;
 
@@ -372,7 +373,7 @@ static int check_firmware(struct dvb_frontend *fe, enum 
tuner_mode new_mode,
                          v4l2_std_id std, fe_bandwidth_t bandwidth)
 {
        struct xc2028_data      *priv = fe->tuner_priv;
-       int                     rc, version;
+       int                     rc, version, hwmodel;
        v4l2_std_id             std0 = 0;
        unsigned int            type0 = 0, type = 0;
        int                     change_digital_bandwidth;
@@ -484,9 +485,13 @@ static int check_firmware(struct dvb_frontend *fe, enum 
tuner_mode new_mode,
        if (rc < 0)
                return rc;
 
-       version = xc2028_get_reg(priv, 0x4);
-       tuner_info("Firmware version is %d.%d\n",
-                  (version >> 4) & 0x0f, (version) & 0x0f);
+       version = xc2028_get_reg(priv, 0x0004);
+       hwmodel = xc2028_get_reg(priv, 0x0008);
+
+       tuner_info("Device is Xceive %d version %d.%d, "
+                  "firmware version %d.%d\n",
+                  hwmodel, (version & 0xf000) >> 12, (version & 0xf00) >> 8,
+                  (version & 0xf0) >> 4, version & 0xf);
 
        priv->firm_type = std;
 
@@ -504,13 +509,15 @@ static int xc2028_signal(struct dvb_frontend *fe, u16 
*strength)
 
        *strength = 0;
 
-       frq_lock = xc2028_get_reg(priv, 0x2);
+       /* Sync Lock Indicator */
+       frq_lock = xc2028_get_reg(priv, 0x0002);
        if (frq_lock <= 0)
                goto ret;
 
        /* Frequency is locked. Return signal quality */
 
-       signal = xc2028_get_reg(priv, 0x40);
+       /* Get SNR of the video signal */
+       signal = xc2028_get_reg(priv, 0x0040);
 
        if (signal <= 0)
                signal = frq_lock;
-
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