Re: [PATCH] kernel 2.6.11.6 - I2C adaptor for ColdFire 5282 CPU

From: Jean Delvare (khali_at_linux-fr.org)
Date: 04/18/05

  • Next message: Andy Armstrong: "Re: [PATCH 2.6.11.7 1/2] USB HID: Patch for Cherry CyMotion Linux keyboard"
    Date:	Mon, 18 Apr 2005 23:10:51 +0200
    To: "Derek Cheung" <derek.cheung@sympatico.ca>
    
    

    Hi Derek,

    My comments on your code:

    > + Changes:
    > + v0.1 26 March 2005
    > + Initial Release - developed on uClinux with 2.6.9 kernel
    > + v0.2 11 April 2005
    > + Coding style changes
    > +

    Changelogs are not welcome in kernel code.

    > +#include <linux/config.h>
    > +#include <linux/init.h>
    > +#include <linux/module.h>
    > +#include <linux/kernel.h>
    > +#include <linux/errno.h>
    > +#include <linux/i2c.h>
    > +#include <linux/delay.h>
    > +#include <linux/string.h>
    > +#include <asm/coldfire.h>
    > +#include <asm/m528xsim.h>
    > +#include <asm/types.h>
    > +#include "i2c-mcf5282.h"

    I can't see that you need config.h, errno.h nor string.h.

    > + /* printk(KERN_DEBUG "%s I2DR is %.2x \n", __FUNCTION__, *rxData); */

    Please don't include dead code.

    > + timeout = 500;

    You use a timeout of 500 in various places. I wonder if you shouldn't
    have a define for it - in case it needs to be altered later.

    > + while (timeout-- && !(*MCF5282_I2C_I2SR & MCF5282_I2C_I2SR_IIF))
    > + udelay(1);
    > + if (timeout <= 0)
    > + printk(KERN_WARNING "%s - I2C IIF never set \n", __FUNCTION__);

    These constructs are error-prone. I personally prefer:
            while(--timeout && ...)
                    ...
            if (!timeout)
                    ...

    > + rc += mcf5282_write_data(data->word & 0x00FF);
    > + rc += mcf5282_write_data((data->word & 0x00FF) >> 8);

    Looks like a bug to me.

    > +static s32 mcf5282_i2c_access(struct i2c_adapter *adap, u16 addr,
    > + unsigned short flags, char read_write,
    > + u8 command, int size, union i2c_smbus_data *data)
    > (...)
    > + printk(KERN_WARNING "Not support I2C_SMBUS_PROC_CALL yet \n");

    Don't use printk when you can user dev_{dbg,warn,info,err}. Also, please
    no space before newline.

    > +static u32 mcf5282_func(struct i2c_adapter *adapter)
    > +{
    > + return I2C_FUNC_SMBUS_QUICK |
    > + I2C_FUNC_SMBUS_BYTE |
    > + I2C_FUNC_SMBUS_PROC_CALL |
    > + I2C_FUNC_SMBUS_BYTE_DATA |
    > + I2C_FUNC_SMBUS_WORD_DATA |
    > + I2C_FUNC_SMBUS_BLOCK_DATA;
    > +};

    Don't say you support I2C_FUNC_SMBUS_PROC_CALL and
    I2C_FUNC_SMBUS_BLOCK_DATA when you in fact don't. Not supporting some
    functions is no problem, just leave them out for now. You can always
    submit patches later.

    > --- linux-2.6.11.6/drivers/i2c/busses/i2c-mcf5282.h 1969-12-31 19:00:00.000000000 -0500
    > +++ linux_dev/drivers/i2c/busses/i2c-mcf5282.h 2005-04-12 20:45:00.000000000 -0400

    I see no reason to have a separate .h file for this.

    > --- linux-2.6.11.6/drivers/i2c/busses/Kconfig 2005-03-25 22:28:29.000000000 -0500
    > +++ linux_dev/drivers/i2c/busses/Kconfig 2005-04-12 20:45:24.000000000 -0400
    > @@ -39,6 +39,16 @@ config I2C_ALI15X3
    > This driver can also be built as a module. If so, the module
    > will be called i2c-ali15x3.
    >
    > +config I2C_MCF5282

    Please keep the entries in somewhat alphabetical order.

    > --- linux-2.6.11.6/drivers/i2c/busses/Makefile 2005-03-25 22:28:39.000000000 -0500
    > +++ linux_dev/drivers/i2c/busses/Makefile 2005-04-13 18:52:03.000000000 -0400
    > @@ -40,6 +40,7 @@ obj-$(CONFIG_I2C_VIAPRO) += i2c-viapro.o
    > obj-$(CONFIG_I2C_VOODOO3) += i2c-voodoo3.o
    > obj-$(CONFIG_SCx200_ACB) += scx200_acb.o
    > obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o
    > +obj-$(CONFIG_I2C_MCF5282) += i2c-mcf5282.o

    Ditto.

    > +#define MCF5282_I2C_I2CR_IEN (0x80) /* I2C enable */
    > +#define MCF5282_I2C_I2CR_IIEN (0x40) /* interrupt enable */
    > +#define MCF5282_I2C_I2CR_MSTA (0x20) /* master/slave mode */
    > +#define MCF5282_I2C_I2CR_MTX (0x10) /* transmit/receive mode */
    > +#define MCF5282_I2C_I2CR_TXAK (0x08) /* transmit acknowledge enable */
    > +#define MCF5282_I2C_I2CR_RSTA (0x04) /* repeat start */
    > +
    > +#define MCF5282_I2C_I2SR_ICF (0x80) /* data transfer bit */
    > +#define MCF5282_I2C_I2SR_IAAS (0x40) /* I2C addressed as a slave */
    > +#define MCF5282_I2C_I2SR_IBB (0x20) /* I2C bus busy */
    > +#define MCF5282_I2C_I2SR_IAL (0x10) /* aribitration lost */
    > +#define MCF5282_I2C_I2SR_SRW (0x04) /* slave read/write */
    > +#define MCF5282_I2C_I2SR_IIF (0x02) /* I2C interrupt */
    > +#define MCF5282_I2C_I2SR_RXAK (0x01) /* received acknowledge */

    Parentheses are not needed here.

    Thanks,

    -- 
    Jean Delvare
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at  http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at  http://www.tux.org/lkml/
    

  • Next message: Andy Armstrong: "Re: [PATCH 2.6.11.7 1/2] USB HID: Patch for Cherry CyMotion Linux keyboard"

    Relevant Pages

    • Re: Kernel GPL Violations and How to Research
      ... > arch specific kernel code or drivers as well as matching function names, ... Linux USB Mass Storage Driver ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: [2.6 patch] sound/oss/rme96xx.c: fix two check after use
      ... If there are checks, they should be there for a purpose, and any sane ... If they are dead code, ... could provide the correct fix. ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: Priority Inheritance Test (Real-Time Preemption)
      ... >> inheritance mechanism works. ... i've put the 'blocker device' kernel code into the current -RT ... remove the module compilations. ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: dynamic-hz
      ... > converting internal system ticks to userspace-visible ticks. ... > drivers to think about things in user-ticks confuses things a bit since ... > suddenly some kernel code is thinking in user-ticks and others in ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)
    • Re: NTP leap second question
      ... > the packet header and pretend they're actually 00. ... What I am asking is when is the flag sent to the kernel. ... the kernel code says that it will insert the second on the second roll ... send the line "unsubscribe linux-kernel" in ...
      (Linux-Kernel)