[U-Boot] [PATCH 7/8 V2] I2C: Add support for Multi channel

Joonyoung Shim dofmind at gmail.com
Tue Jun 19 09:30:59 CEST 2012


2012/6/19 Rajeshwari Birje <rajeshwari.birje at gmail.com>:
> Hi Joonyoung Shim,
>
> Thank you for comments.
>
> On Fri, Jun 15, 2012 at 12:45 PM, Joonyoung Shim <dofmind at gmail.com> wrote:
>> Hi,
>>
>> 2012/6/7 Rajeshwari Shinde <rajeshwari.s at samsung.com>:
>>> This adds multiple i2c channel support for I2C.
>>>
>>> Signed-off-by: Alim Akhtar <alim.akhtar at samsung.com>
>>> Signed-off-by: Rajeshwari Shinde <rajeshwari.s at samsung.com>
>>> Acked-by: Simon Glass <sjg at chromium.org>
>>> ---
>>>  drivers/i2c/s3c24x0_i2c.c |   27 +++++++++++++++++++++++++++
>>>  1 files changed, 27 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/drivers/i2c/s3c24x0_i2c.c b/drivers/i2c/s3c24x0_i2c.c
>>> index a71f147..7521cb8 100644
>>> --- a/drivers/i2c/s3c24x0_i2c.c
>>> +++ b/drivers/i2c/s3c24x0_i2c.c
>>> @@ -191,6 +191,33 @@ static void i2c_bus_init(struct s3c24x0_i2c *i2c, unsigned int bus)
>>>        i2c_ch_init(i2c, CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
>>>  }
>>>
>>> +/*
>>> + * MULTI BUS I2C support
>>> + */
>>> +
>>> +#ifdef CONFIG_I2C_MULTI_BUS
>>> +int i2c_set_bus_num(unsigned int bus)
>>> +{
>>> +       struct s3c24x0_i2c *i2c;
>>> +
>>> +       if ((bus < 0) || (bus >= CONFIG_MAX_I2C_NUM)) {
>>> +               debug("Bad bus: %d\n", bus);
>>> +               return -1;
>>> +       }
>>> +
>>> +       g_current_bus = bus;
>>> +       i2c = get_base_i2c(g_current_bus);
>>> +       i2c_bus_init(i2c, g_current_bus);
>>
>> This causes duplicated pin configuration whenever calls i2c_set_bus_num().
>>
> -- Initally we are initialising only for bus 0, When this function
> gets called with bus id other than 0 we need to initialise that bus.

The problem is i2c_set_bus_num() can be called many times.
If did i2c_bus_init() already, just set g_current_bus.


-- 
- Joonyoung Shim


More information about the U-Boot mailing list