diff options
author | Lars Poeschel <poeschel@lemonage.de> | 2020-11-03 12:58:12 +0300 |
---|---|---|
committer | Miguel Ojeda <ojeda@kernel.org> | 2020-11-04 13:04:03 +0300 |
commit | d3a2fb810f273b7a2c393d4de28ae91a3f76985d (patch) | |
tree | 4d115a26af764f1a08b3a949771d2d1cb451d3bb /drivers/auxdisplay/hd44780_common.c | |
parent | b26deabb1d915fe87d395081bbd3058b938dee89 (diff) | |
download | linux-d3a2fb810f273b7a2c393d4de28ae91a3f76985d.tar.xz |
auxdisplay: provide hd44780_common_gotoxy
Provide a hd44780_common_gotoxy function and a pointer in the ops for
charlcd to use to move the cursor.
Reviewed-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Lars Poeschel <poeschel@lemonage.de>
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Diffstat (limited to 'drivers/auxdisplay/hd44780_common.c')
-rw-r--r-- | drivers/auxdisplay/hd44780_common.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/auxdisplay/hd44780_common.c b/drivers/auxdisplay/hd44780_common.c index 1dfcb2cdbc70..f86eb2f27cee 100644 --- a/drivers/auxdisplay/hd44780_common.c +++ b/drivers/auxdisplay/hd44780_common.c @@ -5,6 +5,9 @@ #include "charlcd.h" #include "hd44780_common.h" +/* LCD commands */ +#define LCD_CMD_SET_DDRAM_ADDR 0x80 /* Set display data RAM address */ + int hd44780_common_print(struct charlcd *lcd, int c) { struct hd44780_common *hdc = lcd->drvdata; @@ -18,6 +21,26 @@ int hd44780_common_print(struct charlcd *lcd, int c) } EXPORT_SYMBOL_GPL(hd44780_common_print); +int hd44780_common_gotoxy(struct charlcd *lcd) +{ + struct hd44780_common *hdc = lcd->drvdata; + unsigned int addr; + + /* + * we force the cursor to stay at the end of the + * line if it wants to go farther + */ + addr = lcd->addr.x < hdc->bwidth ? lcd->addr.x & (hdc->hwidth - 1) + : hdc->bwidth - 1; + if (lcd->addr.y & 1) + addr += hdc->hwidth; + if (lcd->addr.y & 2) + addr += hdc->bwidth; + hdc->write_cmd(hdc, LCD_CMD_SET_DDRAM_ADDR | addr); + return 0; +} +EXPORT_SYMBOL_GPL(hd44780_common_gotoxy); + struct hd44780_common *hd44780_common_alloc(void) { struct hd44780_common *hd; |