Moikka Matthias!
Idea of patch is correct, but I think implementation not. You set FE to si2157_config on variable define, but on that point FE is NULL. FE pointer is populated by demodulator driver, si2168. Right?

And you could split that to 3 patches too, one for prepare em28xx, one for cxusb and last is patch itself.

regards
Antti


On 07/15/2014 10:58 AM, Matthias Schwarzott wrote:
This is needed for PCTV 522e support.
Modify all users of si2157_config to correctly initialize all not
mentioned values to 0.

Signed-off-by: Matthias Schwarzott <z...@gentoo.org>
---
  drivers/media/tuners/si2157.c         | 3 +++
  drivers/media/tuners/si2157.h         | 5 +++++
  drivers/media/tuners/si2157_priv.h    | 1 +
  drivers/media/usb/dvb-usb/cxusb.c     | 3 +--
  drivers/media/usb/em28xx/em28xx-dvb.c | 5 +++--
  5 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
index 329004f..4dbd3f1 100644
--- a/drivers/media/tuners/si2157.c
+++ b/drivers/media/tuners/si2157.c
@@ -253,6 +253,8 @@ static int si2157_set_params(struct dvb_frontend *fe)

        memcpy(cmd.args, "\x14\x00\x03\x07\x00\x00", 6);
        cmd.args[4] = delivery_system | bandwidth;
+       if (s->inversion)
+               cmd.args[5] = 0x01;
        cmd.wlen = 6;
        cmd.rlen = 1;
        ret = si2157_cmd_execute(s, &cmd);
@@ -307,6 +309,7 @@ static int si2157_probe(struct i2c_client *client,

        s->client = client;
        s->fe = cfg->fe;
+       s->inversion = cfg->inversion;
        mutex_init(&s->i2c_mutex);

        /* check if the tuner is there */
diff --git a/drivers/media/tuners/si2157.h b/drivers/media/tuners/si2157.h
index 4465c46..6da4d5d 100644
--- a/drivers/media/tuners/si2157.h
+++ b/drivers/media/tuners/si2157.h
@@ -29,6 +29,11 @@ struct si2157_config {
         * frontend
         */
        struct dvb_frontend *fe;
+
+       /*
+        * Spectral Inversion
+        */
+       bool inversion;
  };

  #endif
diff --git a/drivers/media/tuners/si2157_priv.h 
b/drivers/media/tuners/si2157_priv.h
index db79f3c..3ddab5e 100644
--- a/drivers/media/tuners/si2157_priv.h
+++ b/drivers/media/tuners/si2157_priv.h
@@ -26,6 +26,7 @@ struct si2157 {
        struct i2c_client *client;
        struct dvb_frontend *fe;
        bool active;
+       bool inversion;
  };

  /* firmare command struct */
diff --git a/drivers/media/usb/dvb-usb/cxusb.c 
b/drivers/media/usb/dvb-usb/cxusb.c
index ad20c39..c94a704 100644
--- a/drivers/media/usb/dvb-usb/cxusb.c
+++ b/drivers/media/usb/dvb-usb/cxusb.c
@@ -1337,7 +1337,7 @@ static int cxusb_tt_ct2_4400_attach(struct 
dvb_usb_adapter *adap)
        struct i2c_client *client_tuner;
        struct i2c_board_info info;
        struct si2168_config si2168_config;
-       struct si2157_config si2157_config;
+       struct si2157_config si2157_config = { .fe = adap->fe_adap[0].fe };

        /* reset the tuner */
        if (cxusb_tt_ct2_4400_gpio_tuner(d, 0) < 0) {
@@ -1371,7 +1371,6 @@ static int cxusb_tt_ct2_4400_attach(struct 
dvb_usb_adapter *adap)
        st->i2c_client_demod = client_demod;

        /* attach tuner */
-       si2157_config.fe = adap->fe_adap[0].fe;
        memset(&info, 0, sizeof(struct i2c_board_info));
        strlcpy(info.type, "si2157", I2C_NAME_SIZE);
        info.addr = 0x60;
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c 
b/drivers/media/usb/em28xx/em28xx-dvb.c
index a121ed9..d472dc9 100644
--- a/drivers/media/usb/em28xx/em28xx-dvb.c
+++ b/drivers/media/usb/em28xx/em28xx-dvb.c
@@ -1520,7 +1520,9 @@ static int em28xx_dvb_init(struct em28xx *dev)
                        struct i2c_client *client;
                        struct i2c_board_info info;
                        struct si2168_config si2168_config;
-                       struct si2157_config si2157_config;
+                       struct si2157_config si2157_config = {
+                               .fe = dvb->fe[0]
+                       };

                        /* attach demod */
                        si2168_config.i2c_adapter = &adapter;
@@ -1545,7 +1547,6 @@ static int em28xx_dvb_init(struct em28xx *dev)
                        dvb->i2c_client_demod = client;

                        /* attach tuner */
-                       si2157_config.fe = dvb->fe[0];
                        memset(&info, 0, sizeof(struct i2c_board_info));
                        strlcpy(info.type, "si2157", I2C_NAME_SIZE);
                        info.addr = 0x60;


--
http://palosaari.fi/
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to