From: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
To: Thomas Hollstegge <thomas.hollstegge@gmail.com>
Cc: linux-media@vger.kernel.org, "Antti Palosaari" <crope@iki.fi>,
"Mauro Carvalho Chehab" <mchehab@kernel.org>,
"Sean Young" <sean@mess.org>,
"Hans Verkuil" <hans.verkuil@cisco.com>,
"Stefan Brüns" <stefan.bruens@rwth-aachen.de>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 1/2] si2168: Set TS clock mode and frequency
Date: Wed, 4 Jul 2018 13:15:32 -0300 [thread overview]
Message-ID: <20180704131532.628ee1c6@coco.lan> (raw)
In-Reply-To: <1526149500-9256-1-git-send-email-thomas.hollstegge@gmail.com>
Em Sat, 12 May 2018 20:24:58 +0200
Thomas Hollstegge <thomas.hollstegge@gmail.com> escreveu:
> Some devices require a higher TS clock frequency to demodulate some
> muxes. This adds two optional parameters to control the TS clock
> frequency mode as well as the frequency.
>
> Signed-off-by: Thomas Hollstegge <thomas.hollstegge@gmail.com>
> ---
> drivers/media/dvb-frontends/si2168.c | 20 +++++++++++++++++++-
> drivers/media/dvb-frontends/si2168.h | 8 ++++++++
> drivers/media/dvb-frontends/si2168_priv.h | 2 ++
> 3 files changed, 29 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/dvb-frontends/si2168.c b/drivers/media/dvb-frontends/si2168.c
> index 324493e..b05e677 100644
> --- a/drivers/media/dvb-frontends/si2168.c
> +++ b/drivers/media/dvb-frontends/si2168.c
> @@ -92,13 +92,15 @@ static int si2168_ts_bus_ctrl(struct dvb_frontend *fe, int acquire)
> dev_dbg(&client->dev, "%s acquire: %d\n", __func__, acquire);
>
> /* set TS_MODE property */
> - memcpy(cmd.args, "\x14\x00\x01\x10\x10\x00", 6);
> + memcpy(cmd.args, "\x14\x00\x01\x10\x00\x00", 6);
> if (acquire)
> cmd.args[4] |= dev->ts_mode;
> else
> cmd.args[4] |= SI2168_TS_TRISTATE;
> if (dev->ts_clock_gapped)
> cmd.args[4] |= 0x40;
> + cmd.args[4] |= (dev->ts_clock_mode & 0x03) << 4;
> +
Hmm... looking at this patch and on the next one, it seems that the
clock mode is either 1 (AUTO) or 2 (MANUAL), right?
If so, I would just do, instead:
if (dev->ts_clock_freq)
cmd.args[4] = SI2168_TS_CLOCK_MODE_AUTO_ADAPT << 4;
else
cmd.args[4] = SI2168_TS_CLOCK_MODE_MANUAL << 4;
And get rid of dev->ts_clock_mode parameter.
That seems more error-prune, as just specifying ts_clock_freq is
enough for the driver to do the right thing.
> cmd.wlen = 6;
> cmd.rlen = 4;
> ret = si2168_cmd_execute(client, &cmd);
> @@ -398,6 +400,18 @@ static int si2168_set_frontend(struct dvb_frontend *fe)
> if (ret)
> goto err;
>
> + /* set TS frequency */
> + if (dev->ts_clock_freq) {
> + memcpy(cmd.args, "\x14\x00\x0d\x10", 4);
> + cmd.args[4] = ((dev->ts_clock_freq / 10000) >> 0) & 0xff;
> + cmd.args[5] = ((dev->ts_clock_freq / 10000) >> 8) & 0xff;
> + cmd.wlen = 6;
> + cmd.rlen = 4;
> + ret = si2168_cmd_execute(client, &cmd);
> + if (ret)
> + goto err;
> + }
> +
> memcpy(cmd.args, "\x14\x00\x08\x10\xd7\x05", 6);
> cmd.args[5] |= dev->ts_clock_inv ? 0x00 : 0x10;
> cmd.wlen = 6;
> @@ -806,6 +820,10 @@ static int si2168_probe(struct i2c_client *client,
> dev->ts_mode = config->ts_mode;
> dev->ts_clock_inv = config->ts_clock_inv;
> dev->ts_clock_gapped = config->ts_clock_gapped;
> + dev->ts_clock_mode = config->ts_clock_mode;
> + if (dev->ts_clock_mode == 0)
> + dev->ts_clock_mode = SI2168_TS_CLOCK_MODE_AUTO_ADAPT;
> + dev->ts_clock_freq = config->ts_clock_freq;
> dev->spectral_inversion = config->spectral_inversion;
>
> dev_info(&client->dev, "Silicon Labs Si2168-%c%d%d successfully identified\n",
> diff --git a/drivers/media/dvb-frontends/si2168.h b/drivers/media/dvb-frontends/si2168.h
> index d519edd..3f52ee8 100644
> --- a/drivers/media/dvb-frontends/si2168.h
> +++ b/drivers/media/dvb-frontends/si2168.h
> @@ -47,6 +47,14 @@ struct si2168_config {
> /* TS clock gapped */
> bool ts_clock_gapped;
>
> + /* TS clock mode */
> +#define SI2168_TS_CLOCK_MODE_AUTO_ADAPT 0x01
> +#define SI2168_TS_CLOCK_MODE_MANUAL 0x02
> + u8 ts_clock_mode;
> +
> + /* TS clock frequency (for manual mode) */
> + u32 ts_clock_freq;
> +
> /* Inverted spectrum */
> bool spectral_inversion;
> };
> diff --git a/drivers/media/dvb-frontends/si2168_priv.h b/drivers/media/dvb-frontends/si2168_priv.h
> index 2d362e1..8173d6c 100644
> --- a/drivers/media/dvb-frontends/si2168_priv.h
> +++ b/drivers/media/dvb-frontends/si2168_priv.h
> @@ -48,6 +48,8 @@ struct si2168_dev {
> u8 ts_mode;
> bool ts_clock_inv;
> bool ts_clock_gapped;
> + u8 ts_clock_mode;
> + u32 ts_clock_freq;
> bool spectral_inversion;
> };
>
Thanks,
Mauro
prev parent reply other threads:[~2018-07-04 16:15 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-12 18:24 [PATCH v3 1/2] si2168: Set TS clock mode and frequency Thomas Hollstegge
2018-07-04 16:15 ` Mauro Carvalho Chehab [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180704131532.628ee1c6@coco.lan \
--to=mchehab+samsung@kernel.org \
--cc=crope@iki.fi \
--cc=hans.verkuil@cisco.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=sean@mess.org \
--cc=stefan.bruens@rwth-aachen.de \
--cc=thomas.hollstegge@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.