[U-Boot] [PATCH 5/5] i2c: omap24xx: Convert fully to DM_I2C

Christophe Ricard christophe.ricard at gmail.com
Mon Jan 18 22:22:32 CET 2016


Hi Heiko,

I was expecting such kind of feedback on this one :).
I had myself to hack around between the MLO and the u-boot.img to get it
working.

For omap, i think twlxxxx drivers are kind of the main item to convert.

Would you accept to take the first 4 patches until the board are fully
ready for the 5th one ?

Best Regards
Christophe

2016-01-18 7:04 GMT+01:00 Heiko Schocher <hs at denx.de>:

> Hello Christophe,
>
> Am 17.01.2016 um 12:09 schrieb Christophe Ricard:
>
>> For several reasons:
>> - code clarity
>> - DM trends in u-boot
>> ...
>>
>> It is better to make omap24xx_i2c driver 100% DM_I2C based.
>>
>> Signed-off-by: Christophe Ricard <christophe-h.ricard at st.com>
>> ---
>>
>>   drivers/i2c/omap24xx_i2c.c | 447
>> +++++++++++++++++----------------------------
>>   drivers/i2c/omap24xx_i2c.h | 154 ----------------
>>   2 files changed, 163 insertions(+), 438 deletions(-)
>>   delete mode 100644 drivers/i2c/omap24xx_i2c.h
>>
>
> Full Ack .. but does this patch does not breeak boards, which use this
> driver, and are not converted to DM ? I think, we could remove the
> old style only, if all boards are converted ...
>
> bye,
> Heiko
>
>>
>> diff --git a/drivers/i2c/omap24xx_i2c.c b/drivers/i2c/omap24xx_i2c.c
>> index 774edaf..baccb89 100644
>> --- a/drivers/i2c/omap24xx_i2c.c
>> +++ b/drivers/i2c/omap24xx_i2c.c
>> @@ -49,31 +49,164 @@
>>   #include <asm/io.h>
>>   #include <asm/errno.h>
>>
>> -#include "omap24xx_i2c.h"
>> -
>>
>
> ?
>
> Why do you remove the header file, and move all definitions into the
> c file?
>
>
>   DECLARE_GLOBAL_DATA_PTR;
>>
>> +/* I2C masks */
>> +
>> +/* I2C Interrupt Enable Register (I2C_IE): */
>> +#define I2C_IE_GC_IE   (1 << 5)
>> +#define I2C_IE_XRDY_IE (1 << 4) /* Transmit data ready interrupt enable
>> */
>> +#define I2C_IE_RRDY_IE (1 << 3) /* Receive data ready interrupt enable */
>> +#define I2C_IE_ARDY_IE (1 << 2) /* Register access ready interrupt
>> enable */
>> +#define I2C_IE_NACK_IE (1 << 1) /* No acknowledgment interrupt enable */
>> +#define I2C_IE_AL_IE   (1 << 0) /* Arbitration lost interrupt enable */
>> +
>> +/* I2C Status Register (I2C_STAT): */
>> +
>> +#define I2C_STAT_SBD   (1 << 15) /* Single byte data */
>> +#define I2C_STAT_BB    (1 << 12) /* Bus busy */
>> +#define I2C_STAT_ROVR  (1 << 11) /* Receive overrun */
>> +#define I2C_STAT_XUDF  (1 << 10) /* Transmit underflow */
>> +#define I2C_STAT_AAS   (1 << 9)  /* Address as slave */
>> +#define I2C_STAT_GC    (1 << 5)
>> +#define I2C_STAT_XRDY  (1 << 4)  /* Transmit data ready */
>> +#define I2C_STAT_RRDY  (1 << 3)  /* Receive data ready */
>> +#define I2C_STAT_ARDY  (1 << 2)  /* Register access ready */
>> +#define I2C_STAT_NACK  (1 << 1)  /* No acknowledgment interrupt enable */
>> +#define I2C_STAT_AL    (1 << 0)  /* Arbitration lost interrupt enable */
>> +
>> +/* I2C Interrupt Code Register (I2C_INTCODE): */
>> +
>> +#define I2C_INTCODE_MASK       7
>> +#define I2C_INTCODE_NONE       0
>> +#define I2C_INTCODE_AL         1       /* Arbitration lost */
>> +#define I2C_INTCODE_NAK                2       /* No
>> acknowledgement/general call */
>> +#define I2C_INTCODE_ARDY       3       /* Register access ready */
>> +#define I2C_INTCODE_RRDY       4       /* Rcv data ready */
>> +#define I2C_INTCODE_XRDY       5       /* Xmit data ready */
>> +
>> +/* I2C Buffer Configuration Register (I2C_BUF): */
>> +
>> +#define I2C_BUF_RDMA_EN                (1 << 15) /* Receive DMA channel
>> enable */
>> +#define I2C_BUF_XDMA_EN                (1 << 7)  /* Transmit DMA channel
>> enable */
>> +
>> +/* I2C Configuration Register (I2C_CON): */
>> +
>> +#define I2C_CON_EN     (1 << 15)  /* I2C module enable */
>> +#define I2C_CON_BE     (1 << 14)  /* Big endian mode */
>> +#define I2C_CON_STB    (1 << 11)  /* Start byte mode (master mode only)
>> */
>> +#define I2C_CON_MST    (1 << 10)  /* Master/slave mode */
>> +#define I2C_CON_TRX    (1 << 9)   /* Transmitter/receiver mode */
>> +                                  /* (master mode only) */
>> +#define I2C_CON_XA     (1 << 8)   /* Expand address */
>> +#define I2C_CON_STP    (1 << 1)   /* Stop condition (master mode only) */
>> +#define I2C_CON_STT    (1 << 0)   /* Start condition (master mode only)
>> */
>> +
>> +/* I2C System Test Register (I2C_SYSTEST): */
>> +
>> +#define I2C_SYSTEST_ST_EN      (1 << 15) /* System test enable */
>> +#define I2C_SYSTEST_FREE       (1 << 14) /* Free running mode, on
>> brkpoint) */
>> +#define I2C_SYSTEST_TMODE_MASK (3 << 12) /* Test mode select */
>> +#define I2C_SYSTEST_TMODE_SHIFT        (12)      /* Test mode select */
>> +#define I2C_SYSTEST_SCL_I      (1 << 3)  /* SCL line sense input value */
>> +#define I2C_SYSTEST_SCL_O      (1 << 2)  /* SCL line drive output value
>> */
>> +#define I2C_SYSTEST_SDA_I      (1 << 1)  /* SDA line sense input value */
>> +#define I2C_SYSTEST_SDA_O      (1 << 0)  /* SDA line drive output value
>> */
>> +
>> +/* I2C System Status Register (I2C_SYSS): */
>> +
>> +#define I2C_SYSS_RDONE          (1 << 0)  /* Internel reset monitoring */
>> +
>> +#define I2C_SCLL_SCLL          0
>> +#define I2C_SCLL_SCLL_M                0xFF
>> +#define I2C_SCLL_HSSCLL                8
>> +#define I2C_SCLH_HSSCLL_M      0xFF
>> +#define I2C_SCLH_SCLH          0
>> +#define I2C_SCLH_SCLH_M                0xFF
>> +#define I2C_SCLH_HSSCLH                8
>> +#define I2C_SCLH_HSSCLH_M      0xFF
>> +
>> +#define OMAP_I2C_STANDARD      100000
>> +#define OMAP_I2C_FAST_MODE     400000
>> +#define OMAP_I2C_HIGH_SPEED    3400000
>> +
>> +#define SYSTEM_CLOCK_12                12000000
>> +#define SYSTEM_CLOCK_13                13000000
>> +#define SYSTEM_CLOCK_192       19200000
>> +#define SYSTEM_CLOCK_96                96000000
>> +
>> +/* Use the reference value of 96MHz if not explicitly set by the board */
>> +#ifndef I2C_IP_CLK
>> +#define I2C_IP_CLK             SYSTEM_CLOCK_96
>> +#endif
>> +
>> +/*
>> + * The reference minimum clock for high speed is 19.2MHz.
>> + * The linux 2.6.30 kernel uses this value.
>> + * The reference minimum clock for fast mode is 9.6MHz
>> + * The reference minimum clock for standard mode is 4MHz
>> + * In TRM, the value of 12MHz is used.
>> + */
>> +#ifndef I2C_INTERNAL_SAMPLING_CLK
>> +#define I2C_INTERNAL_SAMPLING_CLK      19200000
>> +#endif
>> +
>> +/*
>> + * The equation for the low and high time is
>> + * tlow = scll + scll_trim = (sampling clock * tlow_duty) / speed
>> + * thigh = sclh + sclh_trim = (sampling clock * (1 - tlow_duty)) / speed
>> + *
>> + * If the duty cycle is 50%
>> + *
>> + * tlow = scll + scll_trim = sampling clock / (2 * speed)
>> + * thigh = sclh + sclh_trim = sampling clock / (2 * speed)
>> + *
>> + * In TRM
>> + * scll_trim = 7
>> + * sclh_trim = 5
>> + *
>> + * The linux 2.6.30 kernel uses
>> + * scll_trim = 6
>> + * sclh_trim = 6
>> + *
>> + * These are the trim values for standard and fast speed
>> + */
>> +#ifndef I2C_FASTSPEED_SCLL_TRIM
>> +#define I2C_FASTSPEED_SCLL_TRIM                6
>> +#endif
>> +#ifndef I2C_FASTSPEED_SCLH_TRIM
>> +#define I2C_FASTSPEED_SCLH_TRIM                6
>> +#endif
>> +
>> +/* These are the trim values for high speed */
>> +#ifndef I2C_HIGHSPEED_PHASE_ONE_SCLL_TRIM
>> +#define I2C_HIGHSPEED_PHASE_ONE_SCLL_TRIM      I2C_FASTSPEED_SCLL_TRIM
>> +#endif
>> +#ifndef I2C_HIGHSPEED_PHASE_ONE_SCLH_TRIM
>> +#define I2C_HIGHSPEED_PHASE_ONE_SCLH_TRIM      I2C_FASTSPEED_SCLH_TRIM
>> +#endif
>> +#ifndef I2C_HIGHSPEED_PHASE_TWO_SCLL_TRIM
>> +#define I2C_HIGHSPEED_PHASE_TWO_SCLL_TRIM      I2C_FASTSPEED_SCLL_TRIM
>> +#endif
>> +#ifndef I2C_HIGHSPEED_PHASE_TWO_SCLH_TRIM
>> +#define I2C_HIGHSPEED_PHASE_TWO_SCLH_TRIM      I2C_FASTSPEED_SCLH_TRIM
>> +#endif
>> +
>> +#define I2C_PSC_MAX            0x0f
>> +#define I2C_PSC_MIN            0x00
>> +
>>   #define I2C_TIMEOUT   1000
>>
>> -#ifdef CONFIG_DM_I2C
>>   struct omap24_i2c_bus {
>>         int bus_num;
>>         int waitdelay;
>>         unsigned clock_frequency;
>>         struct i2c *i2c_base;
>>   };
>> -#endif
>>
>> -#ifdef CONFIG_SYS_I2C
>> -static int wait_for_bb(struct i2c_adapter *adap);
>> -static struct i2c *omap24_get_base(struct i2c_adapter *adap);
>> -static u16 wait_for_event(struct i2c_adapter *adap);
>> -static void flush_fifo(struct i2c_adapter *adap);
>> -#else
>>   static int wait_for_bb(struct udevice *dev);
>>   static u16 wait_for_event(struct udevice *dev);
>>   static void flush_fifo(struct udevice *dev);
>> -#endif
>>
>>   static int omap24_i2c_findpsc(u32 *pscl, u32 *psch, uint speed)
>>   {
>> @@ -109,26 +242,14 @@ static int omap24_i2c_findpsc(u32 *pscl, u32 *psch,
>> uint speed)
>>         return -1;
>>   }
>>
>> -#ifdef CONFIG_SYS_I2C
>> -static uint omap24_i2c_setspeed(struct i2c_adapter *adap, uint speed)
>> -#else
>>   static int omap24_i2c_setspeed(struct udevice *adap, unsigned int speed)
>> -#endif
>>   {
>> -       struct i2c *i2c_base;
>> +       struct omap24_i2c_bus *i2c_bus = dev_get_priv(adap);
>> +       struct i2c *i2c_base = i2c_bus->i2c_base;
>>         int psc, fsscll = 0, fssclh = 0;
>>         int hsscll = 0, hssclh = 0;
>>         u32 scll = 0, sclh = 0;
>>
>> -#ifdef CONFIG_SYS_I2C
>> -       i2c_base = omap24_get_base(adap);
>> -#else
>> -       struct omap24_i2c_bus *i2c_bus;
>> -
>> -       i2c_bus = dev_get_priv(adap);
>> -       i2c_base = i2c_bus->i2c_base;
>> -#endif
>> -
>>         if (speed > 400000) {
>>                 unsigned long scl;
>>
>> @@ -166,13 +287,8 @@ static int omap24_i2c_setspeed(struct udevice *adap,
>> unsigned int speed)
>>                 scll = (unsigned int)hsscll << 8 | (unsigned int)fsscll;
>>                 sclh = (unsigned int)hssclh << 8 | (unsigned int)fssclh;
>>
>> -#ifdef CONFIG_SYS_I2C
>> -               adap->speed     = speed;
>> -               adap->waitdelay = (10000000 / speed) * 8; /* wait for 20
>> clkperiods */
>> -#else
>>                 i2c_bus->clock_frequency = speed;
>>                 i2c_bus->waitdelay = (10000000 / speed) * 8; /* wait for
>> 20 clkperiods */
>> -#endif
>>         } else {
>>                 /* Standard and fast speed */
>>                 psc = omap24_i2c_findpsc(&scll, &sclh, speed);
>> @@ -181,13 +297,8 @@ static int omap24_i2c_setspeed(struct udevice *adap,
>> unsigned int speed)
>>                         return -1;
>>                 }
>>
>> -#ifdef CONFIG_SYS_I2C
>> -               adap->speed     = speed;
>> -               adap->waitdelay = (10000000 / speed) * 2; /* wait for 20
>> clkperiods */
>> -#else
>>                 i2c_bus->clock_frequency = speed;
>>                 i2c_bus->waitdelay = (10000000 / speed) * 2; /* wait for
>> 20 clkperiods */
>> -#endif
>>         }
>>
>>         writew(0, &i2c_base->con);
>> @@ -200,26 +311,14 @@ static int omap24_i2c_setspeed(struct udevice
>> *adap, unsigned int speed)
>>         return 0;
>>   }
>>
>> -#ifdef CONFIG_SYS_I2C
>> -static void omap24_i2c_deblock(struct i2c_adapter *adap)
>> -#else
>>   static int omap24_i2c_deblock(struct udevice *adap)
>> -#endif
>>   {
>> -       struct i2c *i2c_base;
>> +       struct omap24_i2c_bus *i2c_bus = dev_get_priv(adap);
>> +       struct i2c *i2c_base = i2c_bus->i2c_base;
>>         int i;
>>         u16 systest;
>>         u16 orgsystest;
>>
>> -#ifdef CONFIG_SYS_I2C
>> -       i2c_base = omap24_get_base(adap);
>> -#else
>> -       struct omap24_i2c_bus *i2c_bus;
>> -
>> -       i2c_bus = dev_get_priv(adap);
>> -       i2c_base = i2c_bus->i2c_base;
>> -#endif
>> -
>>         /* set test mode ST_EN = 1 */
>>         orgsystest = readw(&i2c_base->systest);
>>         systest = orgsystest;
>> @@ -258,30 +357,16 @@ static int omap24_i2c_deblock(struct udevice *adap)
>>         /* restore original mode */
>>         writew(orgsystest, &i2c_base->systest);
>>
>> -#ifdef CONFIG_DM_I2C
>>         return 0;
>> -#endif
>>   }
>>
>> -#ifdef CONFIG_SYS_I2C
>> -static void omap24_i2c_init(struct i2c_adapter *adap, int speed, int
>> slaveadd)
>> -#else
>>   static void omap24_i2c_init(struct udevice *adap, int speed, int
>> slaveadd)
>> -#endif
>>   {
>> -       struct i2c *i2c_base;
>> +       struct omap24_i2c_bus *i2c_bus = dev_get_priv(adap);
>> +       struct i2c *i2c_base = i2c_bus->i2c_base;
>>         int timeout = I2C_TIMEOUT;
>>         int deblock = 1;
>>
>> -#ifdef CONFIG_SYS_I2C
>> -       i2c_base = omap24_get_base(adap);
>> -#else
>> -       struct omap24_i2c_bus *i2c_bus;
>> -
>> -       i2c_bus = dev_get_priv(adap);
>> -       i2c_base = i2c_bus->i2c_base;
>> -#endif
>> -
>>   retry:
>>         if (readw(&i2c_base->con) & I2C_CON_EN) {
>>                 writew(0, &i2c_base->con);
>> @@ -329,24 +414,12 @@ retry:
>>                 }
>>   }
>>
>> -#ifdef CONFIG_SYS_I2C
>> -static void flush_fifo(struct i2c_adapter *adap)
>> -#else
>>   static void flush_fifo(struct udevice *adap)
>> -#endif
>>   {
>> -       struct i2c *i2c_base;
>> +       struct omap24_i2c_bus *i2c_bus = dev_get_priv(adap);
>> +       struct i2c *i2c_base = i2c_bus->i2c_base;
>>         u16 stat;
>>
>> -#ifdef CONFIG_SYS_I2C
>> -       i2c_base = omap24_get_base(adap);
>> -#else
>> -       struct omap24_i2c_bus *i2c_bus;
>> -
>> -       i2c_bus = dev_get_priv(adap);
>> -       i2c_base = i2c_bus->i2c_base;
>> -#endif
>> -
>>         /*
>>          * note: if you try and read data when its not there or ready
>>          * you get a bus error
>> @@ -366,25 +439,13 @@ static void flush_fifo(struct udevice *adap)
>>    * i2c_probe: Use write access. Allows to identify addresses that are
>>    *            write-only (like the config register of dual-port EEPROMs)
>>    */
>> -#ifdef CONFIG_SYS_I2C
>> -static int omap24_i2c_probe(struct i2c_adapter *adap, uchar chip)
>> -#else
>>   static int omap24_i2c_probe(struct udevice *adap, uint chip, uint
>> chip_flags)
>> -#endif
>>   {
>> -       struct i2c *i2c_base;
>> +       struct omap24_i2c_bus *i2c_bus = dev_get_priv(adap);
>> +       struct i2c *i2c_base = i2c_bus->i2c_base;
>>         u16 status;
>>         int res = 1; /* default = fail */
>>
>> -#ifdef CONFIG_SYS_I2C
>> -       i2c_base = omap24_get_base(adap);
>> -#else
>> -       struct omap24_i2c_bus *i2c_bus;
>> -
>> -       i2c_bus = dev_get_priv(adap);
>> -       i2c_base = i2c_bus->i2c_base;
>> -#endif
>> -
>>         if (chip == readw(&i2c_base->oa))
>>                 return res;
>>
>> @@ -407,26 +468,16 @@ static int omap24_i2c_probe(struct udevice *adap,
>> uint chip, uint chip_flags)
>>                  * silent exit is desired upon unconfigured bus, remove
>> the
>>                  * following 'if' section:
>>                  */
>> -               if (status == I2C_STAT_XRDY) {
>> -#ifdef CONFIG_SYS_I2C
>> -                       printf("i2c_probe: pads on bus %d probably not
>> configured (status=0x%x)\n",
>> -                              adap->hwadapnr, status);
>> -#else
>> +               if (status == I2C_STAT_XRDY)
>>                         printf("i2c_probe: pads on bus %d probably not
>> configured (status=0x%x)\n",
>>                                i2c_bus->bus_num, status);
>> -#endif
>> -               }
>>                 goto pr_exit;
>>         }
>>
>>         /* Check for ACK (!NAK) */
>>         if (!(status & I2C_STAT_NACK)) {
>>                 res = 0;                                /* Device found */
>> -#ifdef CONFIG_SYS_I2C
>> -               udelay(adap->waitdelay);/* Required by AM335X in SPL */
>> -#else
>>                 udelay(i2c_bus->waitdelay);
>> -#endif
>>                 /* Abort transfer (force idle state) */
>>                 writew(I2C_CON_MST | I2C_CON_TRX, &i2c_base->con); /*
>> Reset */
>>                 udelay(1000);
>> @@ -452,26 +503,14 @@ pr_exit:
>>    *           or that do not need a register address at all (such as
>> some clock
>>    *           distributors).
>>    */
>> -#ifdef CONFIG_SYS_I2C
>> -static int omap24_i2c_read(struct i2c_adapter *adap, uchar chip, uint
>> addr,
>> -                          int alen, uchar *buffer, int len)
>> -#else
>>   static int omap24_i2c_read(struct udevice *adap, uchar chip, uint addr,
>>                            int alen, uchar *buffer, int len)
>> -#endif
>>   {
>> -       struct i2c *i2c_base;
>> +       struct omap24_i2c_bus *i2c_bus = dev_get_priv(adap);
>> +       struct i2c *i2c_base = i2c_bus->i2c_base;
>>         int i2c_error = 0;
>>         u16 status;
>>
>> -#ifdef CONFIG_SYS_I2C
>> -       i2c_base = omap24_get_base(adap);
>> -#else
>> -       struct omap24_i2c_bus *i2c_bus;
>> -
>> -       i2c_bus = dev_get_priv(adap);
>> -       i2c_base = i2c_bus->i2c_base;
>> -#endif
>>         if (alen < 0) {
>>                 puts("I2C read: addr len < 0\n");
>>                 return 1;
>> @@ -521,13 +560,8 @@ static int omap24_i2c_read(struct udevice *adap,
>> uchar chip, uint addr,
>>                         /* Try to identify bus that is not padconf'd for
>> I2C */
>>                         if (status == I2C_STAT_XRDY) {
>>                                 i2c_error = 2;
>> -#ifdef CONFIG_SYS_I2C
>> -                               printf("i2c_read (addr phase): pads on
>> bus %d probably not configured (status=0x%x)\n",
>> -                                      adap->hwadapnr, status);
>> -#else
>>                                 printf("i2c_read (addr phase): pads on
>> bus %d probably not configured (status=0x%x)\n",
>>                                        i2c_bus->bus_num, status);
>> -#endif
>>                                 goto rd_exit;
>>                         }
>>                         if (status == 0 || (status & I2C_STAT_NACK)) {
>> @@ -570,13 +604,8 @@ static int omap24_i2c_read(struct udevice *adap,
>> uchar chip, uint addr,
>>                  */
>>                 if (status == I2C_STAT_XRDY) {
>>                         i2c_error = 2;
>> -#ifdef CONFIG_SYS_I2C
>> -                       printf("i2c_read (data phase): pads on bus %d
>> probably not configured (status=0x%x)\n",
>> -                              adap->hwadapnr, status);
>> -#else
>>                         printf("i2c_read (data phase): pads on bus %d
>> probably not configured (status=0x%x)\n",
>>                                i2c_bus->bus_num, status);
>> -#endif
>>                         goto rd_exit;
>>                 }
>>                 if (status == 0 || (status & I2C_STAT_NACK)) {
>> @@ -600,29 +629,16 @@ rd_exit:
>>   }
>>
>>   /* i2c_write: Address (reg offset) may be 0, 1 or 2 bytes long. */
>> -#ifdef CONFIG_SYS_I2C
>> -static int omap24_i2c_write(struct i2c_adapter *adap, uchar chip, uint
>> addr,
>> -                           int alen, uchar *buffer, int len)
>> -#else
>>   static int omap24_i2c_write(struct udevice *adap, uchar chip, uint addr,
>>                             int alen, uchar *buffer, int len)
>> -#endif
>>   {
>> -       struct i2c *i2c_base;
>> +       struct omap24_i2c_bus *i2c_bus = dev_get_priv(adap);
>> +       struct i2c *i2c_base = i2c_bus->i2c_base;
>>         int i;
>>         u16 status;
>>         int i2c_error = 0;
>>         int timeout = I2C_TIMEOUT;
>>
>> -#ifdef CONFIG_SYS_I2C
>> -       i2c_base = omap24_get_base(adap);
>> -#else
>> -       struct omap24_i2c_bus *i2c_bus;
>> -
>> -       i2c_bus = dev_get_priv(adap);
>> -       i2c_base = i2c_bus->i2c_base;
>> -#endif
>> -
>>         if (alen < 0) {
>>                 puts("I2C write: addr len < 0\n");
>>                 return 1;
>> @@ -667,13 +683,8 @@ static int omap24_i2c_write(struct udevice *adap,
>> uchar chip, uint addr,
>>                 /* Try to identify bus that is not padconf'd for I2C */
>>                 if (status == I2C_STAT_XRDY) {
>>                         i2c_error = 2;
>> -#ifdef CONFIG_SYS_I2C
>> -                       printf("i2c_write: pads on bus %d probably not
>> configured (status=0x%x)\n",
>> -                              adap->hwadapnr, status);
>> -#else
>>                         printf("i2c_write: pads on bus %d probably not
>> configured (status=0x%x)\n",
>>                                i2c_bus->bus_num, status);
>> -#endif
>>                         goto wr_exit;
>>                 }
>>                 if (status == 0 || (status & I2C_STAT_NACK)) {
>> @@ -732,25 +743,13 @@ wr_exit:
>>    * Wait for the bus to be free by checking the Bus Busy (BB)
>>    * bit to become clear
>>    */
>> -#ifdef CONFIG_SYS_I2C
>> -static int wait_for_bb(struct i2c_adapter *adap)
>> -#else
>>   static int wait_for_bb(struct udevice *adap)
>> -#endif
>>   {
>> -       struct i2c *i2c_base;
>> +       struct omap24_i2c_bus *i2c_bus = dev_get_priv(adap);
>> +       struct i2c *i2c_base = i2c_bus->i2c_base;
>>         int timeout = I2C_TIMEOUT;
>>         u16 stat;
>>
>> -#ifdef CONFIG_SYS_I2C
>> -       i2c_base = omap24_get_base(adap);
>> -#else
>> -       struct omap24_i2c_bus *i2c_bus;
>> -
>> -       i2c_bus = dev_get_priv(adap);
>> -       i2c_base = i2c_bus->i2c_base;
>> -#endif
>> -
>>         writew(0xFFFF, &i2c_base->stat);        /* clear current
>> interrupts...*/
>>   #if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX)
>>         while ((stat = readw(&i2c_base->stat) & I2C_STAT_BB) &&
>> timeout--) {
>> @@ -760,11 +759,7 @@ static int wait_for_bb(struct udevice *adap)
>>                 I2C_STAT_BB) && timeout--) {
>>   #endif
>>                 writew(stat, &i2c_base->stat);
>> -#ifdef CONFIG_SYS_I2C
>> -               udelay(adap->waitdelay);
>> -#else
>>                 udelay(i2c_bus->waitdelay);
>> -#endif
>>         }
>>
>>         if (timeout <= 0) {
>> @@ -780,31 +775,15 @@ static int wait_for_bb(struct udevice *adap)
>>    * Wait for the I2C controller to complete current action
>>    * and update status
>>    */
>> -#ifdef CONFIG_SYS_I2C
>> -static u16 wait_for_event(struct i2c_adapter *adap)
>> -#else
>>   static u16 wait_for_event(struct udevice *adap)
>> -#endif
>>   {
>> -       struct i2c *i2c_base;
>> +       struct omap24_i2c_bus *i2c_bus = dev_get_priv(adap);
>> +       struct i2c *i2c_base = i2c_bus->i2c_base;
>>         u16 status;
>>         int timeout = I2C_TIMEOUT;
>>
>> -#ifdef CONFIG_SYS_I2C
>> -       i2c_base = omap24_get_base(adap);
>> -#else
>> -       struct omap24_i2c_bus *i2c_bus;
>> -
>> -       i2c_bus = dev_get_priv(adap);
>> -       i2c_base = i2c_bus->i2c_base;
>> -#endif
>> -
>>         do {
>> -#ifdef CONFIG_SYS_I2C
>> -               udelay(adap->waitdelay);
>> -#else
>>                 udelay(i2c_bus->waitdelay);
>> -#endif
>>   #if defined(CONFIG_OMAP243X) || defined(CONFIG_OMAP34XX)
>>                 status = readw(&i2c_base->stat);
>>   #else
>> @@ -823,13 +802,8 @@ static u16 wait_for_event(struct udevice *adap)
>>                  * If status is still 0 here, probably the bus pads have
>>                  * not been configured for I2C, and/or pull-ups are
>> missing.
>>                  */
>> -#ifdef CONFIG_SYS_I2C
>> -               printf("Check if pads/pull-ups of bus %d are properly
>> configured\n",
>> -                      adap->hwadapnr);
>> -#else
>>                 printf("Check if pads/pull-ups of bus %d are properly
>> configured\n",
>>                        i2c_bus->bus_num);
>> -#endif
>>                 writew(0xFFFF, &i2c_base->stat);
>>                 status = 0;
>>         }
>> @@ -837,100 +811,6 @@ static u16 wait_for_event(struct udevice *adap)
>>         return status;
>>   }
>>
>> -#ifdef CONFIG_SYS_I2C
>> -static struct i2c *omap24_get_base(struct i2c_adapter *adap)
>> -{
>> -       switch (adap->hwadapnr) {
>> -       case 0:
>> -               return (struct i2c *)I2C_BASE1;
>> -               break;
>> -       case 1:
>> -               return (struct i2c *)I2C_BASE2;
>> -               break;
>> -#if (I2C_BUS_MAX > 2)
>> -       case 2:
>> -               return (struct i2c *)I2C_BASE3;
>> -               break;
>> -#if (I2C_BUS_MAX > 3)
>> -       case 3:
>> -               return (struct i2c *)I2C_BASE4;
>> -               break;
>> -#if (I2C_BUS_MAX > 4)
>> -       case 4:
>> -               return (struct i2c *)I2C_BASE5;
>> -               break;
>> -#endif
>> -#endif
>> -#endif
>> -       default:
>> -               printf("wrong hwadapnr: %d\n", adap->hwadapnr);
>> -               break;
>> -       }
>> -       return NULL;
>> -}
>> -
>> -#if !defined(CONFIG_SYS_OMAP24_I2C_SPEED1)
>> -#define CONFIG_SYS_OMAP24_I2C_SPEED1 CONFIG_SYS_OMAP24_I2C_SPEED
>> -#endif
>> -#if !defined(CONFIG_SYS_OMAP24_I2C_SLAVE1)
>> -#define CONFIG_SYS_OMAP24_I2C_SLAVE1 CONFIG_SYS_OMAP24_I2C_SLAVE
>> -#endif
>> -
>> -U_BOOT_I2C_ADAP_COMPLETE(omap24_0, omap24_i2c_init, omap24_i2c_probe,
>> -                        omap24_i2c_read, omap24_i2c_write,
>> omap24_i2c_setspeed,
>> -                        CONFIG_SYS_OMAP24_I2C_SPEED,
>> -                        CONFIG_SYS_OMAP24_I2C_SLAVE,
>> -                        0)
>> -U_BOOT_I2C_ADAP_COMPLETE(omap24_1, omap24_i2c_init, omap24_i2c_probe,
>> -                        omap24_i2c_read, omap24_i2c_write,
>> omap24_i2c_setspeed,
>> -                        CONFIG_SYS_OMAP24_I2C_SPEED1,
>> -                        CONFIG_SYS_OMAP24_I2C_SLAVE1,
>> -                        1)
>> -#if (I2C_BUS_MAX > 2)
>> -#if !defined(CONFIG_SYS_OMAP24_I2C_SPEED2)
>> -#define CONFIG_SYS_OMAP24_I2C_SPEED2 CONFIG_SYS_OMAP24_I2C_SPEED
>> -#endif
>> -#if !defined(CONFIG_SYS_OMAP24_I2C_SLAVE2)
>> -#define CONFIG_SYS_OMAP24_I2C_SLAVE2 CONFIG_SYS_OMAP24_I2C_SLAVE
>> -#endif
>> -
>> -U_BOOT_I2C_ADAP_COMPLETE(omap24_2, omap24_i2c_init, omap24_i2c_probe,
>> -                        omap24_i2c_read, omap24_i2c_write, NULL,
>> -                        CONFIG_SYS_OMAP24_I2C_SPEED2,
>> -                        CONFIG_SYS_OMAP24_I2C_SLAVE2,
>> -                        2)
>> -#if (I2C_BUS_MAX > 3)
>> -#if !defined(CONFIG_SYS_OMAP24_I2C_SPEED3)
>> -#define CONFIG_SYS_OMAP24_I2C_SPEED3 CONFIG_SYS_OMAP24_I2C_SPEED
>> -#endif
>> -#if !defined(CONFIG_SYS_OMAP24_I2C_SLAVE3)
>> -#define CONFIG_SYS_OMAP24_I2C_SLAVE3 CONFIG_SYS_OMAP24_I2C_SLAVE
>> -#endif
>> -
>> -U_BOOT_I2C_ADAP_COMPLETE(omap24_3, omap24_i2c_init, omap24_i2c_probe,
>> -                        omap24_i2c_read, omap24_i2c_write, NULL,
>> -                        CONFIG_SYS_OMAP24_I2C_SPEED3,
>> -                        CONFIG_SYS_OMAP24_I2C_SLAVE3,
>> -                        3)
>> -#if (I2C_BUS_MAX > 4)
>> -#if !defined(CONFIG_SYS_OMAP24_I2C_SPEED4)
>> -#define CONFIG_SYS_OMAP24_I2C_SPEED4 CONFIG_SYS_OMAP24_I2C_SPEED
>> -#endif
>> -#if !defined(CONFIG_SYS_OMAP24_I2C_SLAVE4)
>> -#define CONFIG_SYS_OMAP24_I2C_SLAVE4 CONFIG_SYS_OMAP24_I2C_SLAVE
>> -#endif
>> -
>> -U_BOOT_I2C_ADAP_COMPLETE(omap24_4, omap24_i2c_init, omap24_i2c_probe,
>> -                        omap24_i2c_read, omap24_i2c_write, NULL,
>> -                        CONFIG_SYS_OMAP24_I2C_SPEED4,
>> -                        CONFIG_SYS_OMAP24_I2C_SLAVE4,
>> -                        4)
>> -#endif
>> -#endif
>> -#endif
>> -#endif
>> -
>> -#ifdef CONFIG_DM_I2C
>>   static int omap24_i2c_xfer(struct udevice *adap, struct i2c_msg *msg,
>>                            int nmsgs)
>>   {
>> @@ -996,4 +876,3 @@ U_BOOT_DRIVER(omap_i2c) = {
>>         .priv_auto_alloc_size = sizeof(struct omap24_i2c_bus),
>>         .ops    = &omap24_i2c_ops,
>>   };
>> -#endif
>> diff --git a/drivers/i2c/omap24xx_i2c.h b/drivers/i2c/omap24xx_i2c.h
>> deleted file mode 100644
>> index 3dae295..0000000
>> --- a/drivers/i2c/omap24xx_i2c.h
>> +++ /dev/null
>> @@ -1,154 +0,0 @@
>> -/*
>> - * (C) Copyright 2004-2010
>> - * Texas Instruments, <www.ti.com>
>> - *
>> - * SPDX-License-Identifier:    GPL-2.0+
>> - */
>> -#ifndef _OMAP2PLUS_I2C_H_
>> -#define _OMAP2PLUS_I2C_H_
>> -
>> -/* I2C masks */
>> -
>> -/* I2C Interrupt Enable Register (I2C_IE): */
>> -#define I2C_IE_GC_IE   (1 << 5)
>> -#define I2C_IE_XRDY_IE (1 << 4) /* Transmit data ready interrupt enable
>> */
>> -#define I2C_IE_RRDY_IE (1 << 3) /* Receive data ready interrupt enable */
>> -#define I2C_IE_ARDY_IE (1 << 2) /* Register access ready interrupt
>> enable */
>> -#define I2C_IE_NACK_IE (1 << 1) /* No acknowledgment interrupt enable */
>> -#define I2C_IE_AL_IE   (1 << 0) /* Arbitration lost interrupt enable */
>> -
>> -/* I2C Status Register (I2C_STAT): */
>> -
>> -#define I2C_STAT_SBD   (1 << 15) /* Single byte data */
>> -#define I2C_STAT_BB    (1 << 12) /* Bus busy */
>> -#define I2C_STAT_ROVR  (1 << 11) /* Receive overrun */
>> -#define I2C_STAT_XUDF  (1 << 10) /* Transmit underflow */
>> -#define I2C_STAT_AAS   (1 << 9)  /* Address as slave */
>> -#define I2C_STAT_GC    (1 << 5)
>> -#define I2C_STAT_XRDY  (1 << 4)  /* Transmit data ready */
>> -#define I2C_STAT_RRDY  (1 << 3)  /* Receive data ready */
>> -#define I2C_STAT_ARDY  (1 << 2)  /* Register access ready */
>> -#define I2C_STAT_NACK  (1 << 1)  /* No acknowledgment interrupt enable */
>> -#define I2C_STAT_AL    (1 << 0)  /* Arbitration lost interrupt enable */
>> -
>> -/* I2C Interrupt Code Register (I2C_INTCODE): */
>> -
>> -#define I2C_INTCODE_MASK       7
>> -#define I2C_INTCODE_NONE       0
>> -#define I2C_INTCODE_AL         1       /* Arbitration lost */
>> -#define I2C_INTCODE_NAK                2       /* No
>> acknowledgement/general call */
>> -#define I2C_INTCODE_ARDY       3       /* Register access ready */
>> -#define I2C_INTCODE_RRDY       4       /* Rcv data ready */
>> -#define I2C_INTCODE_XRDY       5       /* Xmit data ready */
>> -
>> -/* I2C Buffer Configuration Register (I2C_BUF): */
>> -
>> -#define I2C_BUF_RDMA_EN                (1 << 15) /* Receive DMA channel
>> enable */
>> -#define I2C_BUF_XDMA_EN                (1 << 7)  /* Transmit DMA channel
>> enable */
>> -
>> -/* I2C Configuration Register (I2C_CON): */
>> -
>> -#define I2C_CON_EN     (1 << 15)  /* I2C module enable */
>> -#define I2C_CON_BE     (1 << 14)  /* Big endian mode */
>> -#define I2C_CON_STB    (1 << 11)  /* Start byte mode (master mode only)
>> */
>> -#define I2C_CON_MST    (1 << 10)  /* Master/slave mode */
>> -#define I2C_CON_TRX    (1 << 9)   /* Transmitter/receiver mode */
>> -                                  /* (master mode only) */
>> -#define I2C_CON_XA     (1 << 8)   /* Expand address */
>> -#define I2C_CON_STP    (1 << 1)   /* Stop condition (master mode only) */
>> -#define I2C_CON_STT    (1 << 0)   /* Start condition (master mode only)
>> */
>> -
>> -/* I2C System Test Register (I2C_SYSTEST): */
>> -
>> -#define I2C_SYSTEST_ST_EN      (1 << 15) /* System test enable */
>> -#define I2C_SYSTEST_FREE       (1 << 14) /* Free running mode, on
>> brkpoint) */
>> -#define I2C_SYSTEST_TMODE_MASK (3 << 12) /* Test mode select */
>> -#define I2C_SYSTEST_TMODE_SHIFT        (12)      /* Test mode select */
>> -#define I2C_SYSTEST_SCL_I      (1 << 3)  /* SCL line sense input value */
>> -#define I2C_SYSTEST_SCL_O      (1 << 2)  /* SCL line drive output value
>> */
>> -#define I2C_SYSTEST_SDA_I      (1 << 1)  /* SDA line sense input value */
>> -#define I2C_SYSTEST_SDA_O      (1 << 0)  /* SDA line drive output value
>> */
>> -
>> -/* I2C System Status Register (I2C_SYSS): */
>> -
>> -#define I2C_SYSS_RDONE          (1 << 0)  /* Internel reset monitoring */
>> -
>> -#define I2C_SCLL_SCLL          0
>> -#define I2C_SCLL_SCLL_M                0xFF
>> -#define I2C_SCLL_HSSCLL                8
>> -#define I2C_SCLH_HSSCLL_M      0xFF
>> -#define I2C_SCLH_SCLH          0
>> -#define I2C_SCLH_SCLH_M                0xFF
>> -#define I2C_SCLH_HSSCLH                8
>> -#define I2C_SCLH_HSSCLH_M      0xFF
>> -
>> -#define OMAP_I2C_STANDARD      100000
>> -#define OMAP_I2C_FAST_MODE     400000
>> -#define OMAP_I2C_HIGH_SPEED    3400000
>> -
>> -#define SYSTEM_CLOCK_12                12000000
>> -#define SYSTEM_CLOCK_13                13000000
>> -#define SYSTEM_CLOCK_192       19200000
>> -#define SYSTEM_CLOCK_96                96000000
>> -
>> -/* Use the reference value of 96MHz if not explicitly set by the board */
>> -#ifndef I2C_IP_CLK
>> -#define I2C_IP_CLK             SYSTEM_CLOCK_96
>> -#endif
>> -
>> -/*
>> - * The reference minimum clock for high speed is 19.2MHz.
>> - * The linux 2.6.30 kernel uses this value.
>> - * The reference minimum clock for fast mode is 9.6MHz
>> - * The reference minimum clock for standard mode is 4MHz
>> - * In TRM, the value of 12MHz is used.
>> - */
>> -#ifndef I2C_INTERNAL_SAMPLING_CLK
>> -#define I2C_INTERNAL_SAMPLING_CLK      19200000
>> -#endif
>> -
>> -/*
>> - * The equation for the low and high time is
>> - * tlow = scll + scll_trim = (sampling clock * tlow_duty) / speed
>> - * thigh = sclh + sclh_trim = (sampling clock * (1 - tlow_duty)) / speed
>> - *
>> - * If the duty cycle is 50%
>> - *
>> - * tlow = scll + scll_trim = sampling clock / (2 * speed)
>> - * thigh = sclh + sclh_trim = sampling clock / (2 * speed)
>> - *
>> - * In TRM
>> - * scll_trim = 7
>> - * sclh_trim = 5
>> - *
>> - * The linux 2.6.30 kernel uses
>> - * scll_trim = 6
>> - * sclh_trim = 6
>> - *
>> - * These are the trim values for standard and fast speed
>> - */
>> -#ifndef I2C_FASTSPEED_SCLL_TRIM
>> -#define I2C_FASTSPEED_SCLL_TRIM                6
>> -#endif
>> -#ifndef I2C_FASTSPEED_SCLH_TRIM
>> -#define I2C_FASTSPEED_SCLH_TRIM                6
>> -#endif
>> -
>> -/* These are the trim values for high speed */
>> -#ifndef I2C_HIGHSPEED_PHASE_ONE_SCLL_TRIM
>> -#define I2C_HIGHSPEED_PHASE_ONE_SCLL_TRIM      I2C_FASTSPEED_SCLL_TRIM
>> -#endif
>> -#ifndef I2C_HIGHSPEED_PHASE_ONE_SCLH_TRIM
>> -#define I2C_HIGHSPEED_PHASE_ONE_SCLH_TRIM      I2C_FASTSPEED_SCLH_TRIM
>> -#endif
>> -#ifndef I2C_HIGHSPEED_PHASE_TWO_SCLL_TRIM
>> -#define I2C_HIGHSPEED_PHASE_TWO_SCLL_TRIM      I2C_FASTSPEED_SCLL_TRIM
>> -#endif
>> -#ifndef I2C_HIGHSPEED_PHASE_TWO_SCLH_TRIM
>> -#define I2C_HIGHSPEED_PHASE_TWO_SCLH_TRIM      I2C_FASTSPEED_SCLH_TRIM
>> -#endif
>> -
>> -#define I2C_PSC_MAX            0x0f
>> -#define I2C_PSC_MIN            0x00
>> -
>> -#endif /* _OMAP24XX_I2C_H_ */
>>
>>
> --
> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
>


More information about the U-Boot mailing list