[U-Boot] [PATCH/RFC] Support Newhaven I2C character LCD modules

Updates the display command to work correctly with Newhaven character LCD modules on I2C bus 3. Tested with 20x2 module (part number NNHD-0220D3Z-FL-GBW) on Gumstix Overo.
Requires multi-bus I2C support from my previous patch.
To use this, you need to define CONFIG_CMD_DISPLAY and CONFIG_SYS_NEWHAVEN_CHAR_LCD in your board config.
Signed-off-by: Hugo Vincent hugo.vincent@gmail.com
diff --git a/common/cmd_display.c b/common/cmd_display.c index 4102424..44b7bf7 100644 --- a/common/cmd_display.c +++ b/common/cmd_display.c @@ -23,15 +23,52 @@
#include <common.h> #include <command.h> +#include <i2c.h>
#undef DEBUG_DISP
+#ifdef CONFIG_SYS_NEWHAVEN_CHAR_LCD +#define DISP_SIZE 80 +#define CWORD_CLEAR 0x51 +#else #define DISP_SIZE 8 #define CWORD_CLEAR 0x80 +#endif #define CLEAR_DELAY (110 * 2) +#define LCD_I2C_ADDR 0x28
int do_display (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { +#ifdef CONFIG_SYS_NEWHAVEN_CHAR_LCD + int i; + int pos; + uchar buffer = CWORD_CLEAR; + + i2c_set_bus_num(2); + i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); + + /* Clear display */ + if (i2c_write(LCD_I2C_ADDR, 0xfe, 1, &buffer, 1) != 0) + goto error; + + if (argc < 2) + return 0; + + for (pos = 0, i = 1; i < argc && pos < DISP_SIZE; i++) { + if (i > 1) { + buffer = ' '; + if (i2c_write(LCD_I2C_ADDR, 0, 0, &buffer, 1) != 0) + goto error; + } + if (i2c_write(LCD_I2C_ADDR, 0, 0, argv[i], min(strlen(argv[i]), DISP_SIZE)) != 0) + goto error; + } + + return 0; +error: + printf("I2C LCD not responding\n"); + return 1; +#else int i; int pos;
@@ -65,6 +100,7 @@ int do_display (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) #endif
return (0); +#endif }
/***************************************************/

On 18:05 Sat 27 Jun , Hugo Vincent wrote:
Updates the display command to work correctly with Newhaven character LCD modules on I2C bus 3. Tested with 20x2 module (part number NNHD-0220D3Z-FL-GBW) on Gumstix Overo.
Requires multi-bus I2C support from my previous patch.
To use this, you need to define CONFIG_CMD_DISPLAY and CONFIG_SYS_NEWHAVEN_CHAR_LCD in your board config.
in will be better to implement it as a display so we can use it with putc, puts and use ansi to clear it as done for the other lcd
Best Regards, J.
participants (2)
-
Hugo Vincent
-
Jean-Christophe PLAGNIOL-VILLARD