#define DISP_LINE_LEN 16
+/* implement possible board specific board init */
+void __def_i2c_init_board(void)
+{
+ return;
+}
+void i2c_init_board(void)
+ __attribute__((weak, alias("__def_i2c_init_board")));
+
/* TODO: Implement architecture-specific get/set functions */
unsigned int __def_i2c_get_bus_speed(void)
{
device = device->next;
}
} else {
- I2C_MUX_DEVICE *dev;
-
- dev = i2c_mux_ident_muxstring ((uchar *)argv[1]);
+ (void)i2c_mux_ident_muxstring ((uchar *)argv[1]);
ret = 0;
}
return ret;
U_BOOT_CMD_MKENT(speed, 1, 1, do_i2c_bus_speed, "", ""),
};
+#ifdef CONFIG_NEEDS_MANUAL_RELOC
+void i2c_reloc(void) {
+ fixup_cmdtable(cmd_i2c_sub, ARRAY_SIZE(cmd_i2c_sub));
+}
+#endif
+
static int do_i2c(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
{
cmd_tbl_t *c;
+ if (argc < 2)
+ return cmd_usage(cmdtp);
+
/* Strip off leading 'i2c' command argument */
argc--;
argv++;
return tmp;
}
-/* Analyses a Muxstring and sends immediately the
- Commands to the Muxes. Runs from Flash.
+/* Analyses a Muxstring and immediately sends the
+ commands to the muxes. Runs from flash.
*/
int i2c_mux_ident_muxstring_f (uchar *buf)
{
mux = dev->mux;
while (mux != NULL) {
+ /* do deblocking on each level of mux, before mux config */
+ i2c_init_board();
if (i2c_write(mux->chip, 0, 0, &mux->channel, 1) != 0) {
printf ("Error setting Mux: chip:%x channel: \
%x\n", mux->chip, mux->channel);
}
mux = mux->next;
}
+ /* do deblocking on each level of mux and after mux config */
+ i2c_init_board();
return 0;
}
#endif /* CONFIG_I2C_MUX */