linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
  • * [PATCH 4/6] i2c: rcar: use devm_clk_get to ensure clock is properly ref-counted
           [not found] <1390752337-22386-1-git-send-email-ben.dooks@codethink.co.uk>
           [not found] ` <1390752337-22386-1-git-send-email-ben.dooks-4yDnlxn2s6sWdaTGBSpHTA@public.gmane.org>
    @ 2014-01-26 16:05 ` Ben Dooks
      2014-01-26 16:05 ` [PATCH 6/6] i2c: rcar: fix NACK error code Ben Dooks
      2 siblings, 0 replies; 13+ messages in thread
    From: Ben Dooks @ 2014-01-26 16:05 UTC (permalink / raw)
      To: linux-kernel; +Cc: Ben Dooks, Simon Horman, Wolfram Sang, linux-i2c, linux-sh
    
    The current i2c-rcar driver does clk_get() without a corresponding
    clk_put(). Add the clk to the driver private data and then get it
    with the devm functions so that it is released when the driver is
    unbound.
    
    Note, we do not call clk_prepare_enable() at this point due to the
    very possible magic that is being done by the pm_runtime system
    underneath the driver.
    
    Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
    
    ---
    Changes since v1:
    	- use PTR_ERR() if devm_clk_get() fails
    
    Cc: Simon Horman <horms+renesas@verge.net.au>
    Cc: Wolfram Sang <wsa@the-dreams.de>
    Cc: linux-i2c@vger.kernel.org
    Cc: linux-sh@vger.kernel.org
    ---
     drivers/i2c/busses/i2c-rcar.c | 17 +++++++++--------
     1 file changed, 9 insertions(+), 8 deletions(-)
    
    diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
    index 0d25104..dc8c224 100644
    --- a/drivers/i2c/busses/i2c-rcar.c
    +++ b/drivers/i2c/busses/i2c-rcar.c
    @@ -111,6 +111,7 @@ struct rcar_i2c_priv {
     	void __iomem *io;
     	struct i2c_adapter adap;
     	struct i2c_msg	*msg;
    +	struct clk *clk;
     
     	spinlock_t lock;
     	wait_queue_head_t wait;
    @@ -227,18 +228,12 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv,
     				    u32 bus_speed,
     				    struct device *dev)
     {
    -	struct clk *clkp = clk_get(dev, NULL);
     	u32 scgd, cdf;
     	u32 round, ick;
     	u32 scl;
     	u32 cdf_width;
     	unsigned long rate;
     
    -	if (IS_ERR(clkp)) {
    -		dev_err(dev, "couldn't get clock\n");
    -		return PTR_ERR(clkp);
    -	}
    -
     	switch (priv->devtype) {
     	case I2C_RCAR_GEN1:
     		cdf_width = 2;
    @@ -266,7 +261,7 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv,
     	 * clkp : peripheral_clk
     	 * F[]  : integer up-valuation
     	 */
    -	rate = clk_get_rate(clkp);
    +	rate = clk_get_rate(priv->clk);
     	cdf = rate / 20000000;
     	if (cdf >= 1 << cdf_width) {
     		dev_err(dev, "Input clock %lu too high\n", rate);
    @@ -308,7 +303,7 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv,
     
     scgd_find:
     	dev_dbg(dev, "clk %d/%d(%lu), round %u, CDF:0x%x, SCGD: 0x%x\n",
    -		scl, bus_speed, clk_get_rate(clkp), round, cdf, scgd);
    +		scl, bus_speed, clk_get_rate(priv->clk), round, cdf, scgd);
     
     	/*
     	 * keep icccr value
    @@ -664,6 +659,12 @@ static int rcar_i2c_probe(struct platform_device *pdev)
     		return -ENOMEM;
     	}
     
    +	priv->clk = devm_clk_get(dev, NULL);
    +	if (IS_ERR(priv->clk)) {
    +		dev_err(dev, "cannot get clock\n");
    +		return PTR_ERR(priv->clk);
    +	}
    +
     	bus_speed = 100000; /* default 100 kHz */
     	ret = of_property_read_u32(dev->of_node, "clock-frequency", &bus_speed);
     	if (ret < 0 && pdata && pdata->bus_speed)
    -- 
    1.8.5.2
    
    
    ^ permalink raw reply related	[flat|nested] 13+ messages in thread
  • * [PATCH 6/6] i2c: rcar: fix NACK error code
           [not found] <1390752337-22386-1-git-send-email-ben.dooks@codethink.co.uk>
           [not found] ` <1390752337-22386-1-git-send-email-ben.dooks-4yDnlxn2s6sWdaTGBSpHTA@public.gmane.org>
      2014-01-26 16:05 ` [PATCH 4/6] i2c: rcar: use devm_clk_get to ensure clock is properly ref-counted Ben Dooks
    @ 2014-01-26 16:05 ` Ben Dooks
      2 siblings, 0 replies; 13+ messages in thread
    From: Ben Dooks @ 2014-01-26 16:05 UTC (permalink / raw)
      To: linux-kernel
      Cc: Ben Dooks, Wolfram Sang, Simon Horman, Magnus Damm, linux-i2c,
    	linux-sh
    
    The response to a bus NACK is to return -ENXIO instead of the
    -EREMOTEIO being currently returned by the driver.
    
    Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
    ---
    Cc: Wolfram Sang <wsa@the-dreams.de>
    Cc: Simon Horman <horms+renesas@verge.net.au>
    Cc: Magnus Damm <damm@opensource.se>
    Cc: linux-i2c@vger.kernel.org
    Cc: linux-sh@vger.kernel.org
    ---
     drivers/i2c/busses/i2c-rcar.c | 4 ++--
     1 file changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/drivers/i2c/busses/i2c-rcar.c b/drivers/i2c/busses/i2c-rcar.c
    index dc8c224..fa16adf 100644
    --- a/drivers/i2c/busses/i2c-rcar.c
    +++ b/drivers/i2c/busses/i2c-rcar.c
    @@ -599,7 +599,7 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
     		 * error handling
     		 */
     		if (rcar_i2c_flags_has(priv, ID_NACK)) {
    -			ret = -EREMOTEIO;
    +			ret = -ENXIO;
     			break;
     		}
     
    @@ -618,7 +618,7 @@ static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
     
     	pm_runtime_put(dev);
     
    -	if (ret < 0 && ret != -EREMOTEIO)
    +	if (ret < 0 && ret != -ENXIO)
     		dev_err(dev, "error %d : %x\n", ret, priv->flags);
     
     	return ret;
    -- 
    1.8.5.2
    
    
    ^ permalink raw reply related	[flat|nested] 13+ messages in thread

  • end of thread, other threads:[~2014-05-09 22:55 UTC | newest]
    
    Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <1390752337-22386-1-git-send-email-ben.dooks@codethink.co.uk>
         [not found] ` <1390752337-22386-1-git-send-email-ben.dooks-4yDnlxn2s6sWdaTGBSpHTA@public.gmane.org>
    2014-01-26 16:05   ` [PATCH 3/6] i2c: rcar: do not print error if device nacks transfer Ben Dooks
         [not found]     ` <1390752337-22386-4-git-send-email-ben.dooks-4yDnlxn2s6sWdaTGBSpHTA@public.gmane.org>
    2014-01-26 21:50       ` Wolfram Sang
    2014-02-16  9:46     ` Wolfram Sang
    2014-02-16 10:25       ` Geert Uytterhoeven
    2014-02-16 11:46         ` Wolfram Sang
    2014-02-17  8:04       ` Ben Dooks
    2014-05-08 22:03     ` Sergei Shtylyov
         [not found]       ` <536BFF39.40607-M4DtvfQ/ZS1MRgGoP+s0PdBPR1lH4CV8@public.gmane.org>
    2014-05-09  5:04         ` Wolfram Sang
    2014-05-09  9:32       ` Ben Dooks
         [not found]         ` <536CA0B1.4040300-4yDnlxn2s6sWdaTGBSpHTA@public.gmane.org>
    2014-05-09 22:55           ` Sergei Shtylyov
    2014-01-26 16:05   ` [PATCH 5/6] i2c: update i2c_algorithm documentation Ben Dooks
    2014-01-26 16:05 ` [PATCH 4/6] i2c: rcar: use devm_clk_get to ensure clock is properly ref-counted Ben Dooks
    2014-01-26 16:05 ` [PATCH 6/6] i2c: rcar: fix NACK error code Ben Dooks
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox;
    as well as URLs for NNTP newsgroup(s).