[U-Boot-Users] [PATCH 1/2] Add support for multiple I2C buses

Hello,
Attached is a patch providing support for multiple I2C buses at the command level. The second part of the patch includes an implementation for the MPC834x CPU and MPC8349EMDS board. Note - this does not include support for 10-bit addresses. That's too profound a change to include here... Hopefully this addresses concerns with my previous attempts.
Overview:
1. Include new 'i2c' command (based on USB implementation) using CONFIG_I2C_CMD_TREE. Note - I opted to not use the last remaining CMD bit in 'include/cmd_confdefs.h'.
2. Allow multiple buses by defining CONFIG_I2C_MULTI_BUS. Note that this is only available under the new 'i2c' command mentioned in bullet 1.
3. Allow by-passing of devices when probing a bus by defining CFG_I2C_MULTI_NOPROBES. This is an array of bus-device pairs that will be skipped by the 'i2c probe' command.
CHANGELOG: Added new 'i2c' master command for all I2C interaction. This is conditionally compiled with CONFIG_I2C_CMD_TREE. New commands added for setting I2C bus speed as well as changing the active bus if the board has more than one bus (conditionally compiled with CONFIG_I2C_MULTI_BUS). Added a list of devices to ignore when probing the buses when more than one bus is present. Updated README.
regards, Ben

Ben Warren stated on 8/30/2006 4:35 PM:
Overview:
<snip>
be skipped by the 'i2c probe' command.
Thanks Ben, this is finally in tune with Denx requirements I guess ;)
diff --git a/README b/README index e772c1a..f674050 100644 --- a/README +++ b/README @@ -1188,7 +1188,12 @@ The following options need to be configu clock chips. See common/cmd_i2c.c for a description of the command line interface.
CONFIG_HARD_I2C selects the CPM hardware driver for I2C.
CONFIG_I2C_CMD_TREE is a recommended option that places
all I2C commands under a single 'i2c' root command. The
older 'imm', 'imd', 'iprobe' etc. commands are considered
deprecated and may disappear in the future.
CONFIG_HARD_I2C selects a hardware I2C controller.
I guess I am slow abt this.... but !slow_i2c... is that not good enough? and I cant see any other part in the the common patch using it...
diff --git a/common/cmd_i2c.c b/common/cmd_i2c.c index c543bb5..824f7c7 100644 --- a/common/cmd_i2c.c +++ b/common/cmd_i2c.c
+int do_i2c_bus_speed(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) +{
- int speed, ret=0;
- if (argc == 1) /* querying current speed */
- {
printf("Current bus speed=%d\n", i2c_get_bus_speed());
- }
- else
- {
speed = simple_strtoul(argv[1], NULL, 10);
printf("Setting bus speed to %d Hz\n", speed);
ret = i2c_set_bus_speed(speed);
if(ret)
{
printf("Failure changing bus speed (%d)\n", ret);
}
- }
- return ret;
+}
Err... Does this mean that all other folks who can only support a single speed need to implement this api (including all other existing drivers??)...... Lotsa people are not going to like this if that is so...
Looks good to me.. it should fit in OMAP2430 framework too :)
Some one gotta tell Denx to update this: http://sourceforge.net/cvs/?group_id=65938. i thought we moved to git sometime back. Do we even look at cvs anymore??? :(
Regards, Nishanth Menon

On Thu, 2006-08-31 at 22:45 -0500, Nishanth Menon wrote:
Ben Warren stated on 8/30/2006 4:35 PM:
Overview:
<snip> > be skipped by the 'i2c probe' command. Thanks Ben, this is finally in tune with Denx requirements I guess ;)
Hope so...
diff --git a/README b/README index e772c1a..f674050 100644 --- a/README +++ b/README @@ -1188,7 +1188,12 @@ The following options need to be configu clock chips. See common/cmd_i2c.c for a description of the command line interface.
CONFIG_HARD_I2C selects the CPM hardware driver for I2C.
CONFIG_I2C_CMD_TREE is a recommended option that places
all I2C commands under a single 'i2c' root command. The
older 'imm', 'imd', 'iprobe' etc. commands are considered
deprecated and may disappear in the future.
CONFIG_HARD_I2C selects a hardware I2C controller.
I guess I am slow abt this.... but !slow_i2c... is that not good enough? and I cant see any other part in the the common patch using it...
Sorry, I don't know what you're talking about. What's slow_i2c? I just grepped the source and didn't find it anywhere.
diff --git a/common/cmd_i2c.c b/common/cmd_i2c.c index c543bb5..824f7c7 100644 --- a/common/cmd_i2c.c +++ b/common/cmd_i2c.c
+int do_i2c_bus_speed(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) +{
- int speed, ret=0;
- if (argc == 1) /* querying current speed */
- {
printf("Current bus speed=%d\n", i2c_get_bus_speed());
- }
- else
- {
speed = simple_strtoul(argv[1], NULL, 10);
printf("Setting bus speed to %d Hz\n", speed);
ret = i2c_set_bus_speed(speed);
if(ret)
{
printf("Failure changing bus speed (%d)\n", ret);
}
- }
- return ret;
+}
Err... Does this mean that all other folks who can only support a single speed need to implement this api (including all other existing drivers??)...... Lotsa people are not going to like this if that is so...
Yes. If you want to use the new command tree, you'll have to add a small number of stub functions to your driver. Or else use the old commands. Although I've mentioned deprecation, I suspect they'll be around longer than you or me. I guess if there's huge pushback we can always wrap these calls by yet another CONFIG option, but aren't there enough already?
Looks good to me.. it should fit in OMAP2430 framework too :)
Some one gotta tell Denx to update this: http://sourceforge.net/cvs/?group_id=65938. i thought we moved to git sometime back. Do we even look at cvs anymore??? :(
Wolfgang has mentioned MANY times to people that the CVS isn't in use any more and to use git. I suspect it's hard if not impossible to remove that from Sourceforge, and obviously Wolfgang has lots of things on his plate that have a priority...
Regards, Nishanth Menon

In message 1157139773.13685.113.camel@saruman.qstreams.net you wrote:
Wolfgang has mentioned MANY times to people that the CVS isn't in use any more and to use git. I suspect it's hard if not impossible to remove that from Sourceforge, and obviously Wolfgang has lots of things on his plate that have a priority...
It's impossible to remove (and does not ake sense - IMHO it's actually a very good thing that projects cannot just disappear for example if someone retires or ries to convert it to another, non-open license model). Also, the web page mentioned cannot be edited by me, as it's one of the common site docs.
Best regards,
Wolfgang Denk

Wolfgang,
Wolfgang Denk wrote:
In message 1157139773.13685.113.camel@saruman.qstreams.net you wrote:
Wolfgang has mentioned MANY times to people that the CVS isn't in use any more and to use git. I suspect it's hard if not impossible to remove that from Sourceforge, and obviously Wolfgang has lots of things on his plate that have a priority...
It's impossible to remove (and does not ake sense - IMHO it's actually a very good thing that projects cannot just disappear for example if someone retires or ries to convert it to another, non-open license model). Also, the web page mentioned cannot be edited by me, as it's one of the common site docs.
How about adding a warning text to the Makefile on CVS repository so that if someone checks out from CVS and does a build they are given warning that CVS repository is obsolete and they should use git repository only at denx.de
Best regards, Tolunay

On 9/1/06, Ben Warren bwarren@qstreams.com wrote:
CONFIG_HARD_I2C selects a hardware I2C controller.
I guess I am slow abt this.... but !slow_i2c... is that not good enough? and I cant see any other part in the the common patch using it...
Sorry, I don't know what you're talking about. What's slow_i2c? I just grepped the source and didn't find it anywhere.
Voila, a typo :-) ! I should have stated soft_i2c. !CONFIG_SOFT_I2C should mean HARD_I2C. Regards, Nishanth Menon

Nishanth,
--- nishanth menon menon.nishanth@gmail.com wrote:
On 9/1/06, Ben Warren bwarren@qstreams.com wrote:
CONFIG_HARD_I2C selects a hardware
I2C controller.
I guess I am slow abt this.... but !slow_i2c...
is that not good enough?
and I cant see any other part in the the common
patch using it...
Sorry, I don't know what you're talking about.
What's slow_i2c? I just
grepped the source and didn't find it anywhere.
Voila, a typo :-) ! I should have stated soft_i2c. !CONFIG_SOFT_I2C should mean HARD_I2C. Regards, Nishanth Menon
OK... look a little more closely at the diff. All I did was change the word 'CPM' to 'hardware', because nowadays there are many more I2C controllers than the ones in QUICC engines. I was just cleaning up documentation, and didn't change any code regarding either HARD_I2C or SOFT_I2C.
Sorry for the confusion, Ben

Hi Ben, Ben Warren stated on 9/1/2006 10:18 PM:
OK... look a little more closely at the diff. All I did was change the word 'CPM' to 'hardware', because
Accepted :) But I still in my naivete question the sense of CONFIG_HARD_I2C? what is !HARD_I2C && !SOFT_I2C?? Regards, Nishanth Menon

Hello,
Attached is a patch providing support for multiple I2C buses at the command level. The second part of the patch includes an implementation for the MPC834x CPU and MPC8349EMDS board.
/*** Note: This patch replaces ticket DNX#2006083042000018 ***/
Signed-off-by: Ben Warren bwarren@qstreams.com
Overview:
1. Include new 'i2c' command (based on USB implementation) using CONFIG_I2C_CMD_TREE.
2. Allow multiple buses by defining CONFIG_I2C_MULTI_BUS. Note that the commands to change bus number and speed are only available under the new 'i2c' command mentioned in the first bullet.
3. The option CFG_I2C_NOPROBES has been expanded to work in multi-bus systems. When CONFIG_I2C_MULTI_BUS is used, this option takes the form of an array of bus-device pairs. Otherwise, it is an array of uchar.
CHANGELOG: Added new 'i2c' master command for all I2C interaction. This is conditionally compiled with CONFIG_I2C_CMD_TREE. New commands added for setting I2C bus speed as well as changing the active bus if the board has more than one (conditionally compiled with CONFIG_I2C_MULTI_BUS). Updated NOPROBE logic to handle multiple buses. Updated README.
regards, Ben
participants (5)
-
Ben Warren
-
Nishanth Menon
-
nishanth menon
-
Tolunay Orkun
-
Wolfgang Denk