All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sergei Shtylyov <sshtylyov@ru.mvista.com>
To: Markus Gothe <markus.gothe@27m.se>
Cc: linux-mips@linux-mips.org
Subject: Re: [PATCH] EMMA2RH I2C driver
Date: Thu, 12 Apr 2007 18:49:19 +0400	[thread overview]
Message-ID: <461E46EF.4060004@ru.mvista.com> (raw)
In-Reply-To: <461DF11F.404@27m.se>

Markus Gothe wrote:

> As Ralf pointed out in march I've been polishing the IIC-driver for
> EMMA2RH.

> I've shaped up the I2C-driver to be a platform-device-driver and added
> accurately memory-mapping/unmapping and irq-request/free.

> There was a datastructure missing which was pretty straight forward to
> figure out how to rebuild (i.e. i2c_algo_emma_data).

   Below are a few comments...

> --- drivers/i2c/algos/i2c-algo-emma2rh.c.orig	2007-03-15 13:32:35.000000000 +0100
> +++ drivers/i2c/algos/i2c-algo-emma2rh.c	2007-04-12 10:08:58.000000000 +0200
[...]
> @@ -73,13 +71,15 @@
>  #define EMMA2RH_I2C_RETRIES 3
>  #define EMMA2RH_I2C_TIMEOUT 100
>  
> -/* --- setting states on the bus with the right timing: --------------- */
> +/* --- setting states on the bus with the right timing: ---------------        
> +*/
>  #define set_emma(adap, ctl, val) adap->setemma(adap->data, ctl, val)
>  #define get_emma(adap, ctl) adap->getemma(adap->data, ctl)
>  #define get_own(adap) adap->getown(adap->data)
>  #define get_clock(adap) adap->getclock(adap->data)
>  
> -/* --- other auxiliary functions -------------------------------------- */
> +/* --- other auxiliary functions --------------------------------------        
> +*/
>  
>  static void i2c_start(struct i2c_algo_emma_data *adap)
>  {
> @@ -168,7 +168,8 @@
>                 udelay(adap->udelay);
>         }
>         DEB2(if (i)
> -            printk(KERN_DEBUG "%s: needed %d retries for %d\n", __FUNCTION__, i, addr)) ;
> +            printk(KERN_DEBUG "%s: needed %d retries for %d\n", __FUNCTION__, 
> +i, addr)) ;

   Please don't "uglify" the code. If you intend to carry it to the new line indent properlu (by starting it under paren).

> --- drivers/i2c/algos/i2c-algo-emma2rh.h.orig	2007-03-15 13:32:50.000000000 +0100
> +++ drivers/i2c/algos/i2c-algo-emma2rh.h	2007-04-12 10:08:18.000000000 +0200
> @@ -17,7 +17,8 @@
>      You should have received a copy of the GNU General Public License
>      along with this program; if not, write to the Free Software
>      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/
> -/* -------------------------------------------------------------------- */
> +/* --------------------------------------------------------------------        
> +*/

   No need to make the comment more ugly too.
 
>  #ifndef I2C_EMMA2RH_H
>  #define I2C_EMMA2RH_H
> @@ -102,4 +103,19 @@
>  #define I2C_EMMA_SHR            0x40
>  #define I2C_EMMA_INT            0x50
>  #define I2C_EMMA_INTM           0x60
> +
> +struct i2c_algo_emma_data {
> +        void *data;             /* private data for lolevel routines    */
> +        void (*setemma) (void *data, int ctl, int val);
> +        int  (*getemma) (void *data, int ctl);
> +        int  (*getown) (void *data);
> +        int  (*getclock) (void *data);
> +        void (*waitforpin) (void *data);
> +
> +        /* local settings */
> +        int udelay;
> +        int timeout;
> +
> +};
> +
>  #endif                         /* I2C_EMMA2RH_H */
> --- drivers/i2c/busses/i2c-emma2rh.c.orig	2007-03-15 13:33:45.000000000 +0100
> +++ drivers/i2c/busses/i2c-emma2rh.c	2007-04-12 10:06:48.000000000 +0200
> @@ -14,7 +14,7 @@
>       Copyright (C) 1995-97 Simon G. Vogl
>                     1998-99 Hans Berglund
>  
> -    With some changes from KyУЖsti MУЄlkki <kmalkki@cc.hut.fi> and even
> +    With some changes from Kyіsti Mфlkki <kmalkki@cc.hut.fi> and even
>      Frodo Looijaard <frodol@dds.nl>

  I'm not sure what that change is.
 
> @@ -167,81 +167,108 @@
>         dd->alg.getclock = i2c_emma_getclock;
>         dd->alg.waitforpin = i2c_emma_waitforpin;
>         dd->alg.udelay = 80;
> -       dd->alg.mdelay = 80;
>         dd->alg.timeout = 200;
>  
> -       strcpy(dd->adap.name, dev->bus_id);
> +       strcpy(dd->adap.name, pdev->name);
>         dd->adap.id = 0x00;
>         dd->adap.algo = NULL;
>         dd->adap.algo_data = &dd->alg;
>         dd->adap.client_register = i2c_emma_reg;
>         dd->adap.client_unregister = i2c_emma_unreg;
>  
> -       spin_lock_init(&dd->lock);
> -
> -       atomic_set(&dd->pending,0);
> -       init_waitqueue_head(&dd->wait);
> -
> -       dev_set_drvdata(dev, dd);
> -
> -       r = platform_get_resource(pdev, 0, 0);
> -       /* get resource of type '0' with #0 */
>  
> +       r = platform_get_resource(pdev, IORESOURCE_MEM, 0);/* get resource of type '0' with #0 */
> +       

   Put at least one space between ; and comment, and no trailing whitespace, please.

>         if (!r) {
>                 printk("Cannot get resource\n");
>                 err = -ENODEV;
>                 goto out_free;
> -       }
> -       dd->base = r->start;
> -
> +	}
> +	
> +	if (!request_mem_region(r->start, r->end - r->start + 1, pdev->name)) {
> +		printk("Memory region busy\n");
> +		err = -EBUSY;
> +		goto out_mem_region;

   You've already failed to request region, why then free it?

> +	}
> +	
> +	dd->base = ioremap_nocache(r->start, r->end - r->start);
> +	if (!dd->base) {
> +		printk("Unable to map registers\n");
> +		err = -EIO;
> +		goto out_ioremap;

   You've already failed to ioremap() it, why call iounmap()?

> +	}
> +	
>         dd->irq = platform_get_irq(pdev,0);
>         dd->clock = FAST397;
>         dd->own = 0x40 + pdev->id * 4;
>  
> -       err = request_irq(dd->irq, i2c_emma_handler, 0, dev->bus_id, dd);
> +       err = request_irq(dd->irq, i2c_emma_handler, 0, pdev->name, dd);
>         if (err < 0)
>                 goto out_free;

   And you've forgetten to call iounmap() and release_mem_region() in this case...

> +       
> +       spin_lock_init(&dd->lock);
>  
> +       atomic_set(&dd->pending,0);
> +       init_waitqueue_head(&dd->wait);
> +
> +       platform_set_drvdata(pdev, dd);
> +       
>         if ((err = i2c_emma_add_bus(&dd->adap)) < 0)
>                 goto out_irq;
>  
>         return 0;
> +
>  out_irq:
> -       free_irq(dd->irq, dev->bus_id);
> +	free_irq(dd->irq, dd);
> +out_ioremap:
> +	iounmap(dd->base);
> +out_mem_region:
> +	release_mem_region(r->start, r->end - r->start + 1);
>  out_free:
> -       kfree(dd);
> +	kfree(dd);
>  out:
> -       return err;
> +	return err;
>  }

   The cleanup code needs fixing, as you can see...


WBR, Sergei

  reply	other threads:[~2007-04-12 14:49 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-12  8:43 [PATCH] EMMA2RH I2C driver Markus Gothe
2007-04-12 14:49 ` Sergei Shtylyov [this message]
     [not found] <20070308145948.GA4235@linux-mips.org>
2007-03-13 17:59 ` dmitry pervushin
2007-03-14 17:52   ` Ralf Baechle

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=461E46EF.4060004@ru.mvista.com \
    --to=sshtylyov@ru.mvista.com \
    --cc=linux-mips@linux-mips.org \
    --cc=markus.gothe@27m.se \
    /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.