Message ID | 1373447718-19382-2-git-send-email-user@jinso.co.jp |
---|---|
State | Superseded |
Headers | show |
Hi Wolfram, Dung-san # I added Wolfram's email address > From: Nguyen Viet Dung <nv-dung@jinso.co.jp> > > This patch modify calculate for clock in I2C driver. > > Signed-off-by: Nguyen Viet Dung <nv-dung@jinso.co.jp> > --- You forgot to add Wolfram's email address on this patch :) Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> > drivers/i2c/busses/i2c-rcar.c | 17 +++++++++++++++-- > include/linux/i2c/i2c-rcar.h | 4 ++++ > 2 files changed, 19 insertions(+), 2 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c > index 4ba4a95..85987c1 100644 > --- a/drivers/i2c/busses/i2c-rcar.c > +++ b/drivers/i2c/busses/i2c-rcar.c > @@ -221,15 +221,28 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv, > struct device *dev) > { > struct clk *clkp = clk_get(NULL, "peripheral_clk"); > + struct i2c_rcar_platform_data *pdata = dev->platform_data; > u32 scgd, cdf; > u32 round, ick; > u32 scl; > + u32 cdf_width; > + u32 flags = pdata ? pdata->flags : 0; > > if (!clkp) { > dev_err(dev, "there is no peripheral_clk\n"); > return -EIO; > } > > + switch (flags & I2C_RCAR_FLAGS_ICCCR_MASK) { > + default: > + case I2C_RCAR_FLAGS_ICCCR_IS_2BIT: > + cdf_width = 2; > + break; > + case I2C_RCAR_FLAGS_ICCCR_IS_3BIT: > + cdf_width = 3; > + break; > + } > + > /* > * calculate SCL clock > * see > @@ -245,7 +258,7 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv, > * clkp : peripheral_clk > * F[] : integer up-valuation > */ > - for (cdf = 0; cdf < 4; cdf++) { > + for (cdf = 0; cdf < (1 << cdf_width); cdf++) { > ick = clk_get_rate(clkp) / (1 + cdf); > if (ick < 20000000) > goto ick_find; > @@ -287,7 +300,7 @@ scgd_find: > /* > * keep icccr value > */ > - priv->icccr = (scgd << 2 | cdf); > + priv->icccr = (scgd << (cdf_width) | cdf); > > return 0; > } > diff --git a/include/linux/i2c/i2c-rcar.h b/include/linux/i2c/i2c-rcar.h > index 496f5c2..572a6e5 100644 > --- a/include/linux/i2c/i2c-rcar.h > +++ b/include/linux/i2c/i2c-rcar.h > @@ -5,6 +5,10 @@ > > struct i2c_rcar_platform_data { > u32 bus_speed; > + u32 flags; > +#define I2C_RCAR_FLAGS_ICCCR_MASK (0xF << 0) > +#define I2C_RCAR_FLAGS_ICCCR_IS_2BIT (0 << 0) /* default */ > +#define I2C_RCAR_FLAGS_ICCCR_IS_3BIT (1 << 0) > }; > > #endif /* __I2C_R_CAR_H__ */ > -- > 1.7.9.5 > -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Wolfram, Morimoto-san On 07/11/2013 06:03 PM, Kuninori Morimoto wrote: > Hi Wolfram, Dung-san > > # I added Wolfram's email address > >> From: Nguyen Viet Dung <nv-dung@jinso.co.jp> >> >> This patch modify calculate for clock in I2C driver. >> >> Signed-off-by: Nguyen Viet Dung <nv-dung@jinso.co.jp> >> --- > You forgot to add Wolfram's email address on this patch :) > > Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> I am sorry, I have forgot to add Wolfram's email address on the patch. Wolfram,please consider this patch. It have tested on Lager board (R8A7790 soc) and it seen like goood. Thanks you, -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Wolfram, Morimoto-san On 07/11/2013 06:03 PM, Kuninori Morimoto wrote: > Hi Wolfram, Dung-san > > # I added Wolfram's email address > >> From: Nguyen Viet Dung <nv-dung@jinso.co.jp> >> >> This patch modify calculate for clock in I2C driver. >> >> Signed-off-by: Nguyen Viet Dung <nv-dung@jinso.co.jp> >> --- > You forgot to add Wolfram's email address on this patch > > Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> I am sorry, I have forgot to add Wolfram's email address on the patch. Wolfram,please consider this patch. It have tested on Lager board (R8A7790 soc) and it seen like goood. Thanks you, -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Wolfram, I'm sorry ,I had mistake for your'address. Please consider this patch. It have tested on Lager board (R8A7790 soc) and it seen like goood. Thanks you, -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c index 4ba4a95..85987c1 100644 --- a/drivers/i2c/busses/i2c-rcar.c +++ b/drivers/i2c/busses/i2c-rcar.c @@ -221,15 +221,28 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv, struct device *dev) { struct clk *clkp = clk_get(NULL, "peripheral_clk"); + struct i2c_rcar_platform_data *pdata = dev->platform_data; u32 scgd, cdf; u32 round, ick; u32 scl; + u32 cdf_width; + u32 flags = pdata ? pdata->flags : 0; if (!clkp) { dev_err(dev, "there is no peripheral_clk\n"); return -EIO; } + switch (flags & I2C_RCAR_FLAGS_ICCCR_MASK) { + default: + case I2C_RCAR_FLAGS_ICCCR_IS_2BIT: + cdf_width = 2; + break; + case I2C_RCAR_FLAGS_ICCCR_IS_3BIT: + cdf_width = 3; + break; + } + /* * calculate SCL clock * see @@ -245,7 +258,7 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv, * clkp : peripheral_clk * F[] : integer up-valuation */ - for (cdf = 0; cdf < 4; cdf++) { + for (cdf = 0; cdf < (1 << cdf_width); cdf++) { ick = clk_get_rate(clkp) / (1 + cdf); if (ick < 20000000) goto ick_find; @@ -287,7 +300,7 @@ scgd_find: /* * keep icccr value */ - priv->icccr = (scgd << 2 | cdf); + priv->icccr = (scgd << (cdf_width) | cdf); return 0; } diff --git a/include/linux/i2c/i2c-rcar.h b/include/linux/i2c/i2c-rcar.h index 496f5c2..572a6e5 100644 --- a/include/linux/i2c/i2c-rcar.h +++ b/include/linux/i2c/i2c-rcar.h @@ -5,6 +5,10 @@ struct i2c_rcar_platform_data { u32 bus_speed; + u32 flags; +#define I2C_RCAR_FLAGS_ICCCR_MASK (0xF << 0) +#define I2C_RCAR_FLAGS_ICCCR_IS_2BIT (0 << 0) /* default */ +#define I2C_RCAR_FLAGS_ICCCR_IS_3BIT (1 << 0) }; #endif /* __I2C_R_CAR_H__ */