[1/2] si2157: Add support for spectrum inversion
Commit Message
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 <zzam@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(-)
Comments
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 <zzam@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;
>
On 15.07.2014 13:08, Antti Palosaari wrote:
> 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?
Right, I looked into si2168_probe, it sets this pointer.
>
> And you could split that to 3 patches too, one for prepare em28xx, one
> for cxusb and last is patch itself.
Yes, I split it accordingly.
Here is the new series based on the silabs branch.
Btw. When will these patches be merged to the master branch?
Regards
Matthias
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
@@ -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 */
@@ -29,6 +29,11 @@ struct si2157_config {
* frontend
*/
struct dvb_frontend *fe;
+
+ /*
+ * Spectral Inversion
+ */
+ bool inversion;
};
#endif
@@ -26,6 +26,7 @@ struct si2157 {
struct i2c_client *client;
struct dvb_frontend *fe;
bool active;
+ bool inversion;
};
/* firmare command struct */
@@ -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;
@@ -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;