From: Troy Kisky <troy.kisky-Q5RJGjKts06CY9SHAMCTRUEOCMrvLtNR@public.gmane.org>
To: Chaithrika U S <chaithrika-l0cyMroinI0@public.gmane.org>
Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org
Subject: Re: [PATCH 1/3] i2c: davinci: Add helper functions
Date: Mon, 07 Dec 2009 11:24:16 -0700 [thread overview]
Message-ID: <4B1D4850.7010108@boundarydevices.com> (raw)
In-Reply-To: <1260178136-26416-2-git-send-email-chaithrika-l0cyMroinI0@public.gmane.org>
Chaithrika U S wrote:
> Add i2c reset control and clock divider calculation functions
> which will be useful for power management features.
>
> Signed-off-by: Chaithrika U S <chaithrika-l0cyMroinI0@public.gmane.org>
> ---
> drivers/i2c/busses/i2c-davinci.c | 56 +++++++++++++++++++++++++-------------
> 1 files changed, 37 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c
> index c89687a..5f3838c 100644
> --- a/drivers/i2c/busses/i2c-davinci.c
> +++ b/drivers/i2c/busses/i2c-davinci.c
> @@ -133,12 +133,21 @@ static inline u16 davinci_i2c_read_reg(struct davinci_i2c_dev *i2c_dev, int reg)
> return __raw_readw(i2c_dev->base + reg);
> }
>
> -/*
> - * This functions configures I2C and brings I2C out of reset.
> - * This function is called during I2C init function. This function
> - * also gets called if I2C encounters any errors.
> - */
> -static int i2c_davinci_init(struct davinci_i2c_dev *dev)
> +static inline void davinci_i2c_reset_ctrl(struct davinci_i2c_dev *i2c_dev,
> + int val)
> +{
> + u16 w;
> +
> + w = davinci_i2c_read_reg(i2c_dev, DAVINCI_I2C_MDR_REG);
> + if (!val) /* put I2C into reset */
> + MOD_REG_BIT(w, DAVINCI_I2C_MDR_IRS, 0);
> + else /* take I2C out of reset */
> + MOD_REG_BIT(w, DAVINCI_I2C_MDR_IRS, 1);
> +
I dislike the MOD_REG_BIT macro. Maybe if you wrote
MOD_REG_BIT(w, DAVINCI_I2C_MDR_IRS, val);
it would be slightly better, but I still wouldn't like it.
Please use w &= ~DAVINCI_I2C_MDR_IRS and
w |= DAVINCI_I2C_MDR_IRS directly.
I know the code you're replacing uses this obfuscating macro
but this is a good time to remove it.
> + davinci_i2c_write_reg(i2c_dev, DAVINCI_I2C_MDR_REG, w);
> +}
> +
> +static void i2c_davinci_calc_clk_dividers(struct davinci_i2c_dev *dev)
> {
> struct davinci_i2c_platform_data *pdata = dev->dev->platform_data;
> u16 psc;
> @@ -147,15 +156,6 @@ static int i2c_davinci_init(struct davinci_i2c_dev *dev)
> u32 clkh;
> u32 clkl;
> u32 input_clock = clk_get_rate(dev->clk);
> - u16 w;
> -
> - if (!pdata)
> - pdata = &davinci_i2c_platform_data_default;
> -
> - /* put I2C into reset */
> - w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
> - MOD_REG_BIT(w, DAVINCI_I2C_MDR_IRS, 0);
> - davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
>
> /* NOTE: I2C Clock divider programming info
> * As per I2C specs the following formulas provide prescaler
> @@ -187,12 +187,32 @@ static int i2c_davinci_init(struct davinci_i2c_dev *dev)
> davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKH_REG, clkh);
> davinci_i2c_write_reg(dev, DAVINCI_I2C_CLKL_REG, clkl);
>
> + dev_dbg(dev->dev, "input_clock = %d, CLK = %d\n", input_clock, clk);
> +}
> +
> +/*
> + * This functions configures I2C and brings I2C out of reset.
> + * This function is called during I2C init function. This function
> + * also gets called if I2C encounters any errors.
> + */
> +static int i2c_davinci_init(struct davinci_i2c_dev *dev)
> +{
> + struct davinci_i2c_platform_data *pdata = dev->dev->platform_data;
> +
> + if (!pdata)
> + pdata = &davinci_i2c_platform_data_default;
> +
> + /* put I2C into reset */
> + davinci_i2c_reset_ctrl(dev, 0);
> +
> + /* compute clock dividers */
> + i2c_davinci_calc_clk_dividers(dev);
> +
> /* Respond at reserved "SMBus Host" slave address" (and zero);
> * we seem to have no option to not respond...
> */
> davinci_i2c_write_reg(dev, DAVINCI_I2C_OAR_REG, 0x08);
>
> - dev_dbg(dev->dev, "input_clock = %d, CLK = %d\n", input_clock, clk);
> dev_dbg(dev->dev, "PSC = %d\n",
> davinci_i2c_read_reg(dev, DAVINCI_I2C_PSC_REG));
> dev_dbg(dev->dev, "CLKL = %d\n",
> @@ -203,9 +223,7 @@ static int i2c_davinci_init(struct davinci_i2c_dev *dev)
> pdata->bus_freq, pdata->bus_delay);
>
> /* Take the I2C module out of reset: */
> - w = davinci_i2c_read_reg(dev, DAVINCI_I2C_MDR_REG);
> - MOD_REG_BIT(w, DAVINCI_I2C_MDR_IRS, 1);
> - davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, w);
> + davinci_i2c_reset_ctrl(dev, 1);
>
> /* Enable interrupts */
> davinci_i2c_write_reg(dev, DAVINCI_I2C_IMR_REG, I2C_DAVINCI_INTR_ALL);
next prev parent reply other threads:[~2009-12-07 18:24 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-07 9:28 [PATCH 0/3] i2c: davinci: Add power management features Chaithrika U S
[not found] ` <1260178136-26416-1-git-send-email-chaithrika-l0cyMroinI0@public.gmane.org>
2009-12-07 9:28 ` [PATCH 1/3] i2c: davinci: Add helper functions Chaithrika U S
[not found] ` <1260178136-26416-2-git-send-email-chaithrika-l0cyMroinI0@public.gmane.org>
2009-12-07 9:28 ` [PATCH 2/3] i2c: davinci: Add suspend/resume support Chaithrika U S
[not found] ` <1260178136-26416-3-git-send-email-chaithrika-l0cyMroinI0@public.gmane.org>
2009-12-07 9:28 ` [PATCH 3/3] i2c: davinci: Add cpufreq support Chaithrika U S
[not found] ` <1260178136-26416-4-git-send-email-chaithrika-l0cyMroinI0@public.gmane.org>
2009-12-07 11:00 ` Sergei Shtylyov
[not found] ` <4B1CE03E.7040608-hkdhdckH98+B+jHODAdFcQ@public.gmane.org>
2009-12-08 4:38 ` Chaithrika U S
2009-12-07 18:24 ` Troy Kisky [this message]
[not found] ` <4B1D4850.7010108-Q5RJGjKts06CY9SHAMCTRUEOCMrvLtNR@public.gmane.org>
2009-12-08 4:46 ` [PATCH 1/3] i2c: davinci: Add helper functions Chaithrika U S
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=4B1D4850.7010108@boundarydevices.com \
--to=troy.kisky-q5rjgjkts06cy9shamctrueocmrvltnr@public.gmane.org \
--cc=chaithrika-l0cyMroinI0@public.gmane.org \
--cc=davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.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.