auxdisplay: add home to charlcd_ops

This adds a home function to the charlcd_ops struct and offer an
implementation for hd44780_common. This implementation is used by our
two hd44780 drivers. This is to make charlcd device independent.

Reviewed-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Lars Poeschel <poeschel@lemonage.de>
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
Lars Poeschel 2020-11-03 10:58:13 +01:00 committed by Miguel Ojeda
parent d3a2fb810f
commit 88645a86e3
6 changed files with 18 additions and 1 deletions

View file

@ -144,7 +144,7 @@ static void charlcd_home(struct charlcd *lcd)
{
lcd->addr.x = 0;
lcd->addr.y = 0;
lcd->ops->gotoxy(lcd);
lcd->ops->home(lcd);
}
static void charlcd_print(struct charlcd *lcd, char c)

View file

@ -41,12 +41,15 @@ struct charlcd {
* wrap to the next line at the end of a line.
* @gotoxy: Set cursor to x, y. The x and y values to set the cursor to are
* previously set in addr.x and addr.y by charlcd.
* @home: Set cursor to 0, 0. The values in addr.x and addr.y are set to 0, 0 by
* charlcd prior to calling this function.
*/
struct charlcd_ops {
void (*clear_fast)(struct charlcd *lcd);
void (*backlight)(struct charlcd *lcd, enum charlcd_onoff on);
int (*print)(struct charlcd *lcd, int c);
int (*gotoxy)(struct charlcd *lcd);
int (*home)(struct charlcd *lcd);
};
struct charlcd *charlcd_alloc(void);

View file

@ -128,6 +128,7 @@ static const struct charlcd_ops hd44780_ops_gpio8 = {
.backlight = hd44780_backlight,
.print = hd44780_common_print,
.gotoxy = hd44780_common_gotoxy,
.home = hd44780_common_home,
};
/* Send a command to the LCD panel in 4 bit GPIO mode */
@ -173,6 +174,7 @@ static const struct charlcd_ops hd44780_ops_gpio4 = {
.backlight = hd44780_backlight,
.print = hd44780_common_print,
.gotoxy = hd44780_common_gotoxy,
.home = hd44780_common_home,
};
static int hd44780_probe(struct platform_device *pdev)

View file

@ -41,6 +41,14 @@ int hd44780_common_gotoxy(struct charlcd *lcd)
}
EXPORT_SYMBOL_GPL(hd44780_common_gotoxy);
int hd44780_common_home(struct charlcd *lcd)
{
lcd->addr.x = 0;
lcd->addr.y = 0;
return hd44780_common_gotoxy(lcd);
}
EXPORT_SYMBOL_GPL(hd44780_common_home);
struct hd44780_common *hd44780_common_alloc(void)
{
struct hd44780_common *hd;

View file

@ -16,4 +16,5 @@ struct hd44780_common {
int hd44780_common_print(struct charlcd *lcd, int c);
int hd44780_common_gotoxy(struct charlcd *lcd);
int hd44780_common_home(struct charlcd *lcd);
struct hd44780_common *hd44780_common_alloc(void);

View file

@ -876,18 +876,21 @@ static const struct charlcd_ops charlcd_serial_ops = {
.clear_fast = lcd_clear_fast_s,
.backlight = lcd_backlight,
.gotoxy = hd44780_common_gotoxy,
.home = hd44780_common_home,
};
static const struct charlcd_ops charlcd_parallel_ops = {
.clear_fast = lcd_clear_fast_p8,
.backlight = lcd_backlight,
.gotoxy = hd44780_common_gotoxy,
.home = hd44780_common_home,
};
static const struct charlcd_ops charlcd_tilcd_ops = {
.clear_fast = lcd_clear_fast_tilcd,
.backlight = lcd_backlight,
.gotoxy = hd44780_common_gotoxy,
.home = hd44780_common_home,
};
/* initialize the LCD driver */