[media] si2165: enable Si2161 support
authorMatthias Schwarzott <zzam@gentoo.org>
Sun, 31 Aug 2014 11:35:07 +0000 (08:35 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 23 Sep 2014 19:13:33 +0000 (16:13 -0300)
Additionally print chip name with revision symbolically.
This is a preparation for supporting new Hauppauge WinTV-HVR-900-H based
on cx231xx.

Signed-off-by: Matthias Schwarzott <zzam@gentoo.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/dvb-frontends/si2165.c

index 7de0612be9fa89708f00cb991d828710a88a7e6c..98ddb49ad52b1a27a268ef6fabab3d3de97496e7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Driver for Silicon Labs SI2165 DVB-C/-T Demodulator
+    Driver for Silicon Labs Si2161 DVB-T and Si2165 DVB-C/-T Demodulator
 
     Copyright (C) 2013-2014 Matthias Schwarzott <zzam@gentoo.org>
 
@@ -916,7 +916,7 @@ static void si2165_release(struct dvb_frontend *fe)
 
 static struct dvb_frontend_ops si2165_ops = {
        .info = {
-               .name = "Silicon Labs Si2165",
+               .name = "Silicon Labs ",
                .caps = FE_CAN_FEC_1_2 |
                        FE_CAN_FEC_2_3 |
                        FE_CAN_FEC_3_4 |
@@ -956,6 +956,8 @@ struct dvb_frontend *si2165_attach(const struct si2165_config *config,
        int n;
        int io_ret;
        u8 val;
+       char rev_char;
+       const char *chip_name;
 
        if (config == NULL || i2c == NULL)
                goto error;
@@ -1005,22 +1007,35 @@ struct dvb_frontend *si2165_attach(const struct si2165_config *config,
        if (io_ret < 0)
                goto error;
 
-       dev_info(&state->i2c->dev, "%s: hardware revision 0x%02x, chip type 0x%02x\n",
-                KBUILD_MODNAME, state->chip_revcode, state->chip_type);
+       if (state->chip_revcode < 26)
+               rev_char = 'A' + state->chip_revcode;
+       else
+               rev_char = '?';
 
-       /* It is a guess that register 0x0118 (chip type?) can be used to
-        * differ between si2161, si2163 and si2165
-        * Only si2165 has been tested.
-        */
-       if (state->chip_type == 0x07) {
+       switch (state->chip_type) {
+       case 0x06:
+               chip_name = "Si2161";
+               state->has_dvbt = true;
+               break;
+       case 0x07:
+               chip_name = "Si2165";
                state->has_dvbt = true;
                state->has_dvbc = true;
-       } else {
-               dev_err(&state->i2c->dev, "%s: Unsupported chip.\n",
-                       KBUILD_MODNAME);
+               break;
+       default:
+               dev_err(&state->i2c->dev, "%s: Unsupported Silicon Labs chip (type %d, rev %d)\n",
+                       KBUILD_MODNAME, state->chip_type, state->chip_revcode);
                goto error;
        }
 
+       dev_info(&state->i2c->dev,
+               "%s: Detected Silicon Labs %s-%c (type %d, rev %d)\n",
+               KBUILD_MODNAME, chip_name, rev_char, state->chip_type,
+               state->chip_revcode);
+
+       strlcat(state->frontend.ops.info.name, chip_name,
+                       sizeof(state->frontend.ops.info.name));
+
        n = 0;
        if (state->has_dvbt) {
                state->frontend.ops.delsys[n++] = SYS_DVBT;