+#if defined(CONFIG_I2C_CMD_TREE)
+#if defined(CONFIG_I2C_MULTI_BUS)
+int do_i2c_bus_num(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+ int bus_idx, ret=0;
+
+ if (argc == 1)
+ /* querying current setting */
+ printf("Current bus is %d\n", i2c_get_bus_num());
+ else {
+ bus_idx = simple_strtoul(argv[1], NULL, 10);
+ printf("Setting bus to %d\n", bus_idx);
+ ret = i2c_set_bus_num(bus_idx);
+ if (ret)
+ printf("Failure changing bus number (%d)\n", ret);
+ }
+ return ret;
+}
+#endif /* CONFIG_I2C_MULTI_BUS */
+
+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;
+}
+
+int do_i2c(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+#if defined(CONFIG_I2C_MULTI_BUS)
+ if (!strncmp(argv[1], "de", 2))
+ return do_i2c_bus_num(cmdtp, flag, --argc, ++argv);
+#endif /* CONFIG_I2C_MULTI_BUS */
+ if (!strncmp(argv[1], "sp", 2))
+ return do_i2c_bus_speed(cmdtp, flag, --argc, ++argv);
+ if (!strncmp(argv[1], "md", 2))
+ return do_i2c_md(cmdtp, flag, --argc, ++argv);
+ if (!strncmp(argv[1], "mm", 2))
+ return do_i2c_mm(cmdtp, flag, --argc, ++argv);
+ if (!strncmp(argv[1], "mw", 2))
+ return do_i2c_mw(cmdtp, flag, --argc, ++argv);
+ if (!strncmp(argv[1], "nm", 2))
+ return do_i2c_nm(cmdtp, flag, --argc, ++argv);
+ if (!strncmp(argv[1], "cr", 2))
+ return do_i2c_crc(cmdtp, flag, --argc, ++argv);
+ if (!strncmp(argv[1], "pr", 2))
+ return do_i2c_probe(cmdtp, flag, --argc, ++argv);
+ if (!strncmp(argv[1], "lo", 2))
+ return do_i2c_loop(cmdtp, flag, --argc, ++argv);
+#if defined(CONFIG_CMD_SDRAM)
+ if (!strncmp(argv[1], "sd", 2))
+ return do_sdram(cmdtp, flag, --argc, ++argv);
+#endif
+ else
+ printf ("Usage:\n%s\n", cmdtp->usage);
+ return 0;
+}
+#endif /* CONFIG_I2C_CMD_TREE */
+
+/***************************************************/
+
+#if defined(CONFIG_I2C_CMD_TREE)
+U_BOOT_CMD(
+ i2c, 6, 1, do_i2c,
+ "i2c - I2C sub-system\n",
+#if defined(CONFIG_I2C_MULTI_BUS)
+ "dev [dev] - show or set current I2C bus\n"
+#endif /* CONFIG_I2C_MULTI_BUS */
+ "i2c speed [speed] - show or set I2C bus speed\n"
+ "i2c md chip address[.0, .1, .2] [# of objects] - read from I2C device\n"
+ "i2c mm chip address[.0, .1, .2] - write to I2C device (auto-incrementing)\n"
+ "i2c mw chip address[.0, .1, .2] value [count] - write to I2C device (fill)\n"
+ "i2c nm chip address[.0, .1, .2] - write to I2C device (constant address)\n"
+ "i2c crc32 chip address[.0, .1, .2] count - compute CRC32 checksum\n"
+ "i2c probe - show devices on the I2C bus\n"
+ "i2c loop chip address[.0, .1, .2] [# of objects] - looping read of device\n"
+#if defined(CONFIG_CMD_SDRAM)
+ "i2c sdram chip - print SDRAM configuration information\n"
+#endif
+);
+#endif /* CONFIG_I2C_CMD_TREE */
+U_BOOT_CMD(
+ imd, 4, 1, do_i2c_md, \
+ "imd - i2c memory display\n", \
+ "chip address[.0, .1, .2] [# of objects]\n - i2c memory display\n" \
+);
+
+U_BOOT_CMD(
+ imm, 3, 1, do_i2c_mm,
+ "imm - i2c memory modify (auto-incrementing)\n",
+ "chip address[.0, .1, .2]\n"
+ " - memory modify, auto increment address\n"
+);
+U_BOOT_CMD(
+ inm, 3, 1, do_i2c_nm,
+ "inm - memory modify (constant address)\n",
+ "chip address[.0, .1, .2]\n - memory modify, read and keep address\n"
+);
+
+U_BOOT_CMD(
+ imw, 5, 1, do_i2c_mw,
+ "imw - memory write (fill)\n",
+ "chip address[.0, .1, .2] value [count]\n - memory write (fill)\n"
+);
+
+U_BOOT_CMD(
+ icrc32, 5, 1, do_i2c_crc,
+ "icrc32 - checksum calculation\n",
+ "chip address[.0, .1, .2] count\n - compute CRC32 checksum\n"
+);
+
+U_BOOT_CMD(
+ iprobe, 1, 1, do_i2c_probe,
+ "iprobe - probe to discover valid I2C chip addresses\n",
+ "\n -discover valid I2C chip addresses\n"
+);
+
+/*
+ * Require full name for "iloop" because it is an infinite loop!
+ */
+U_BOOT_CMD(
+ iloop, 5, 1, do_i2c_loop,
+ "iloop - infinite loop on address range\n",
+ "chip address[.0, .1, .2] [# of objects]\n"
+ " - loop, reading a set of addresses\n"
+);
+
+#if defined(CONFIG_CMD_SDRAM)
+U_BOOT_CMD(
+ isdram, 2, 1, do_sdram,
+ "isdram - print SDRAM configuration information\n",
+ "chip\n - print SDRAM configuration information\n"
+ " (valid chip values 50..57)\n"
+);
+#endif