From: Antti Palosaari <crope@iki.fi>
To: Benjamin Larsson <benjamin@southpole.se>
Cc: Linux Media Mailing List <linux-media@vger.kernel.org>
Subject: Re: [PATCH 1/2] mn88473: calculate the IF register values
Date: Tue, 13 Jan 2015 17:53:42 +0200 [thread overview]
Message-ID: <54B53F86.7070508@iki.fi> (raw)
In-Reply-To: <1421105006-22437-1-git-send-email-benjamin@southpole.se>
On 01/13/2015 01:23 AM, Benjamin Larsson wrote:
> Add xtal as a configuration parameter so it can be used
> in the IF register value calculation. If not set in the
> configuration then use a default value.
>
> Signed-off-by: Benjamin Larsson <benjamin@southpole.se>
Reviewed-by: Antti Palosaari <crope@iki.fi>
Antti
> ---
> drivers/media/dvb-frontends/mn88473.h | 6 ++++++
> drivers/staging/media/mn88473/mn88473.c | 26 +++++++++++---------------
> drivers/staging/media/mn88473/mn88473_priv.h | 1 +
> 3 files changed, 18 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/media/dvb-frontends/mn88473.h b/drivers/media/dvb-frontends/mn88473.h
> index a373ec9..c717ebed 100644
> --- a/drivers/media/dvb-frontends/mn88473.h
> +++ b/drivers/media/dvb-frontends/mn88473.h
> @@ -33,6 +33,12 @@ struct mn88473_config {
> * DVB frontend.
> */
> struct dvb_frontend **fe;
> +
> + /*
> + * Xtal frequency.
> + * Hz
> + */
> + u32 xtal;
> };
>
> #endif
> diff --git a/drivers/staging/media/mn88473/mn88473.c b/drivers/staging/media/mn88473/mn88473.c
> index 1659335..b65e519 100644
> --- a/drivers/staging/media/mn88473/mn88473.c
> +++ b/drivers/staging/media/mn88473/mn88473.c
> @@ -30,6 +30,7 @@ static int mn88473_set_frontend(struct dvb_frontend *fe)
> struct dtv_frontend_properties *c = &fe->dtv_property_cache;
> int ret, i;
> u32 if_frequency;
> + u64 tmp;
> u8 delivery_system_val, if_val[3], bw_val[7];
>
> dev_dbg(&client->dev,
> @@ -63,15 +64,12 @@ static int mn88473_set_frontend(struct dvb_frontend *fe)
> case SYS_DVBT2:
> if (c->bandwidth_hz <= 6000000) {
> /* IF 3570000 Hz, BW 6000000 Hz */
> - memcpy(if_val, "\x24\x8e\x8a", 3);
> memcpy(bw_val, "\xe9\x55\x55\x1c\x29\x1c\x29", 7);
> } else if (c->bandwidth_hz <= 7000000) {
> /* IF 4570000 Hz, BW 7000000 Hz */
> - memcpy(if_val, "\x2e\xcb\xfb", 3);
> memcpy(bw_val, "\xc8\x00\x00\x17\x0a\x17\x0a", 7);
> } else if (c->bandwidth_hz <= 8000000) {
> /* IF 4570000 Hz, BW 8000000 Hz */
> - memcpy(if_val, "\x2e\xcb\xfb", 3);
> memcpy(bw_val, "\xaf\x00\x00\x11\xec\x11\xec", 7);
> } else {
> ret = -EINVAL;
> @@ -80,7 +78,6 @@ static int mn88473_set_frontend(struct dvb_frontend *fe)
> break;
> case SYS_DVBC_ANNEX_A:
> /* IF 5070000 Hz, BW 8000000 Hz */
> - memcpy(if_val, "\x33\xea\xb3", 3);
> memcpy(bw_val, "\xaf\x00\x00\x11\xec\x11\xec", 7);
> break;
> default:
> @@ -105,17 +102,12 @@ static int mn88473_set_frontend(struct dvb_frontend *fe)
> if_frequency = 0;
> }
>
> - switch (if_frequency) {
> - case 3570000:
> - case 4570000:
> - case 5070000:
> - break;
> - default:
> - dev_err(&client->dev, "IF frequency %d not supported\n",
> - if_frequency);
> - ret = -EINVAL;
> - goto err;
> - }
> + /* Calculate IF registers ( (1<<24)*IF / Xtal ) */
> + tmp = div_u64(if_frequency * (u64)(1<<24) + (dev->xtal / 2),
> + dev->xtal);
> + if_val[0] = ((tmp >> 16) & 0xff);
> + if_val[1] = ((tmp >> 8) & 0xff);
> + if_val[2] = ((tmp >> 0) & 0xff);
>
> ret = regmap_write(dev->regmap[2], 0x05, 0x00);
> ret = regmap_write(dev->regmap[2], 0xfb, 0x13);
> @@ -352,6 +344,10 @@ static int mn88473_probe(struct i2c_client *client,
> }
>
> dev->i2c_wr_max = config->i2c_wr_max;
> + if (!config->xtal)
> + dev->xtal = 25000000;
> + else
> + dev->xtal = config->xtal;
> dev->client[0] = client;
> dev->regmap[0] = regmap_init_i2c(dev->client[0], ®map_config);
> if (IS_ERR(dev->regmap[0])) {
> diff --git a/drivers/staging/media/mn88473/mn88473_priv.h b/drivers/staging/media/mn88473/mn88473_priv.h
> index 78af112..ef6f013 100644
> --- a/drivers/staging/media/mn88473/mn88473_priv.h
> +++ b/drivers/staging/media/mn88473/mn88473_priv.h
> @@ -31,6 +31,7 @@ struct mn88473_dev {
> u16 i2c_wr_max;
> fe_delivery_system_t delivery_system;
> bool warm; /* FW running */
> + u32 xtal;
> };
>
> #endif
>
--
http://palosaari.fi/
prev parent reply other threads:[~2015-01-13 15:53 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-12 23:23 [PATCH 1/2] mn88473: calculate the IF register values Benjamin Larsson
2015-01-12 23:23 ` [PATCH 2/2] mn88473: simplify bandwidth registers setting code Benjamin Larsson
2015-01-13 15:54 ` Antti Palosaari
2015-01-13 15:53 ` Antti Palosaari [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=54B53F86.7070508@iki.fi \
--to=crope@iki.fi \
--cc=benjamin@southpole.se \
--cc=linux-media@vger.kernel.org \
/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.