[v2] auxdisplay: hd44780: move cursor home after clear display command

Message ID 20230722180925.1408885-1-hugo@hugovil.com
State New
Headers
Series [v2] auxdisplay: hd44780: move cursor home after clear display command |

Commit Message

Hugo Villeneuve July 22, 2023, 6:09 p.m. UTC
  From: Hugo Villeneuve <hvilleneuve@dimonoff.com>

The DISPLAY_CLEAR command on the NewHaven NHD-0220DZW-AG5 display
does NOT change the DDRAM address to 00h (home position) like the
standard Hitachi HD44780 controller. As a consequence, the starting
position of the initial string LCD_INIT_TEXT is not guaranteed to be
at 0,0 depending on where the cursor was before the DISPLAY_CLEAR
command.

Extract of DISPLAY_CLEAR command from datasheets of:

    Hitachi HD44780:
        ... It then sets DDRAM address 0 into the address counter...

    NewHaven NHD-0220DZW-AG5 datasheet:
	... This instruction does not change the DDRAM Address

Move the cursor home after sending DISPLAY_CLEAR command to support
non-standard LCDs.

Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
---
 drivers/auxdisplay/hd44780_common.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)


base-commit: d192f5382581d972c4ae1b4d72e0b59b34cadeb9
  

Comments

Geert Uytterhoeven July 24, 2023, 4:08 p.m. UTC | #1
Hi Hugo,

On Sat, Jul 22, 2023 at 8:18 PM Hugo Villeneuve <hugo@hugovil.com> wrote:
> From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
>
> The DISPLAY_CLEAR command on the NewHaven NHD-0220DZW-AG5 display
> does NOT change the DDRAM address to 00h (home position) like the
> standard Hitachi HD44780 controller. As a consequence, the starting
> position of the initial string LCD_INIT_TEXT is not guaranteed to be
> at 0,0 depending on where the cursor was before the DISPLAY_CLEAR
> command.
>
> Extract of DISPLAY_CLEAR command from datasheets of:
>
>     Hitachi HD44780:
>         ... It then sets DDRAM address 0 into the address counter...
>
>     NewHaven NHD-0220DZW-AG5 datasheet:
>         ... This instruction does not change the DDRAM Address
>
> Move the cursor home after sending DISPLAY_CLEAR command to support
> non-standard LCDs.
>
> Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>

Thanks for your patch!

> --- a/drivers/auxdisplay/hd44780_common.c
> +++ b/drivers/auxdisplay/hd44780_common.c
> @@ -82,7 +82,15 @@ int hd44780_common_clear_display(struct charlcd *lcd)
>         hdc->write_cmd(hdc, LCD_CMD_DISPLAY_CLEAR);
>         /* datasheet says to wait 1,64 milliseconds */
>         long_sleep(2);
> -       return 0;
> +
> +       /*
> +        * The Hitachi HD44780 controller (and compatible ones) reset the DDRAM
> +        * address when executing the DISPLAY_CLEAR command, thus the
> +        * following call is not required. However, other controllers do not
> +        * (e.g. NewHaven NHD-0220DZW-AG5), thus move the cursor to home
> +        * unconditionally to support both.
> +        */
> +       return hd44780_common_home(lcd);

Sorry, I haven't tested your patch yet, as my HD44780 display is
currently not connected to any system.

Your patch LGTM, so
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>

Note that hd44780_common_home() calls hd44780_common_gotoxy().
According to the documentation, both HD44780U and NHD-0220DZW-AG5
support the Return Home command (0x02), so that could be a good
alternative.

>  }
>  EXPORT_SYMBOL_GPL(hd44780_common_clear_display);

Gr{oetje,eeting}s,

                        Geert
  
Hugo Villeneuve July 25, 2023, 3:13 p.m. UTC | #2
On Mon, 24 Jul 2023 18:08:00 +0200
Geert Uytterhoeven <geert@linux-m68k.org> wrote:

> Hi Hugo,
> 
> On Sat, Jul 22, 2023 at 8:18 PM Hugo Villeneuve <hugo@hugovil.com> wrote:
> > From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> >
> > The DISPLAY_CLEAR command on the NewHaven NHD-0220DZW-AG5 display
> > does NOT change the DDRAM address to 00h (home position) like the
> > standard Hitachi HD44780 controller. As a consequence, the starting
> > position of the initial string LCD_INIT_TEXT is not guaranteed to be
> > at 0,0 depending on where the cursor was before the DISPLAY_CLEAR
> > command.
> >
> > Extract of DISPLAY_CLEAR command from datasheets of:
> >
> >     Hitachi HD44780:
> >         ... It then sets DDRAM address 0 into the address counter...
> >
> >     NewHaven NHD-0220DZW-AG5 datasheet:
> >         ... This instruction does not change the DDRAM Address
> >
> > Move the cursor home after sending DISPLAY_CLEAR command to support
> > non-standard LCDs.
> >
> > Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> 
> Thanks for your patch!
> 
> > --- a/drivers/auxdisplay/hd44780_common.c
> > +++ b/drivers/auxdisplay/hd44780_common.c
> > @@ -82,7 +82,15 @@ int hd44780_common_clear_display(struct charlcd *lcd)
> >         hdc->write_cmd(hdc, LCD_CMD_DISPLAY_CLEAR);
> >         /* datasheet says to wait 1,64 milliseconds */
> >         long_sleep(2);
> > -       return 0;
> > +
> > +       /*
> > +        * The Hitachi HD44780 controller (and compatible ones) reset the DDRAM
> > +        * address when executing the DISPLAY_CLEAR command, thus the
> > +        * following call is not required. However, other controllers do not
> > +        * (e.g. NewHaven NHD-0220DZW-AG5), thus move the cursor to home
> > +        * unconditionally to support both.
> > +        */
> > +       return hd44780_common_home(lcd);
> 
> Sorry, I haven't tested your patch yet, as my HD44780 display is
> currently not connected to any system.
> 
> Your patch LGTM, so
> Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
> 
> Note that hd44780_common_home() calls hd44780_common_gotoxy().
> According to the documentation, both HD44780U and NHD-0220DZW-AG5
> support the Return Home command (0x02), so that could be a good
> alternative.

Hi Geert,
If this is desired, I think maybe it would be best to do it in a
separate patch. Maybe there is a good reason why hd44780_common_home()
calls hd44780_common_gotoxy() instead of using Return Home command?

Hugo.


> 
> >  }
> >  EXPORT_SYMBOL_GPL(hd44780_common_clear_display);
> 
> Gr{oetje,eeting}s,
> 
>                         Geert
> 
> -- 
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
> 
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds
>
  
Geert Uytterhoeven July 25, 2023, 3:21 p.m. UTC | #3
Hi Hugo,

On Tue, Jul 25, 2023 at 5:13 PM Hugo Villeneuve <hugo@hugovil.com> wrote:
> On Mon, 24 Jul 2023 18:08:00 +0200
> Geert Uytterhoeven <geert@linux-m68k.org> wrote:
> > On Sat, Jul 22, 2023 at 8:18 PM Hugo Villeneuve <hugo@hugovil.com> wrote:
> > > From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> > >
> > > The DISPLAY_CLEAR command on the NewHaven NHD-0220DZW-AG5 display
> > > does NOT change the DDRAM address to 00h (home position) like the
> > > standard Hitachi HD44780 controller. As a consequence, the starting
> > > position of the initial string LCD_INIT_TEXT is not guaranteed to be
> > > at 0,0 depending on where the cursor was before the DISPLAY_CLEAR
> > > command.
> > >
> > > Extract of DISPLAY_CLEAR command from datasheets of:
> > >
> > >     Hitachi HD44780:
> > >         ... It then sets DDRAM address 0 into the address counter...
> > >
> > >     NewHaven NHD-0220DZW-AG5 datasheet:
> > >         ... This instruction does not change the DDRAM Address
> > >
> > > Move the cursor home after sending DISPLAY_CLEAR command to support
> > > non-standard LCDs.
> > >
> > > Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> >
> > Thanks for your patch!
> >
> > > --- a/drivers/auxdisplay/hd44780_common.c
> > > +++ b/drivers/auxdisplay/hd44780_common.c
> > > @@ -82,7 +82,15 @@ int hd44780_common_clear_display(struct charlcd *lcd)
> > >         hdc->write_cmd(hdc, LCD_CMD_DISPLAY_CLEAR);
> > >         /* datasheet says to wait 1,64 milliseconds */
> > >         long_sleep(2);
> > > -       return 0;
> > > +
> > > +       /*
> > > +        * The Hitachi HD44780 controller (and compatible ones) reset the DDRAM
> > > +        * address when executing the DISPLAY_CLEAR command, thus the
> > > +        * following call is not required. However, other controllers do not
> > > +        * (e.g. NewHaven NHD-0220DZW-AG5), thus move the cursor to home
> > > +        * unconditionally to support both.
> > > +        */
> > > +       return hd44780_common_home(lcd);
> >
> > Sorry, I haven't tested your patch yet, as my HD44780 display is
> > currently not connected to any system.
> >
> > Your patch LGTM, so
> > Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
> >
> > Note that hd44780_common_home() calls hd44780_common_gotoxy().
> > According to the documentation, both HD44780U and NHD-0220DZW-AG5
> > support the Return Home command (0x02), so that could be a good
> > alternative.
>
> Hi Geert,
> If this is desired, I think maybe it would be best to do it in a
> separate patch. Maybe there is a good reason why hd44780_common_home()

Sure, a separate patch would be fine.

> calls hd44780_common_gotoxy() instead of using Return Home command?

Looks like the Linux driver has always used goto 0/0 instead of Return Home.
Perhaps not all displays support that command? I know mine does.

Willy: do you remember?

Gr{oetje,eeting}s,

                        Geert
  
Willy Tarreau July 25, 2023, 3:36 p.m. UTC | #4
Hi Geert,

On Tue, Jul 25, 2023 at 05:21:36PM +0200, Geert Uytterhoeven wrote:
> Hi Hugo,
> 
> On Tue, Jul 25, 2023 at 5:13 PM Hugo Villeneuve <hugo@hugovil.com> wrote:
> > On Mon, 24 Jul 2023 18:08:00 +0200
> > Geert Uytterhoeven <geert@linux-m68k.org> wrote:
> > > On Sat, Jul 22, 2023 at 8:18 PM Hugo Villeneuve <hugo@hugovil.com> wrote:
> > > > From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> > > >
> > > > The DISPLAY_CLEAR command on the NewHaven NHD-0220DZW-AG5 display
> > > > does NOT change the DDRAM address to 00h (home position) like the
> > > > standard Hitachi HD44780 controller. As a consequence, the starting
> > > > position of the initial string LCD_INIT_TEXT is not guaranteed to be
> > > > at 0,0 depending on where the cursor was before the DISPLAY_CLEAR
> > > > command.
> > > >
> > > > Extract of DISPLAY_CLEAR command from datasheets of:
> > > >
> > > >     Hitachi HD44780:
> > > >         ... It then sets DDRAM address 0 into the address counter...
> > > >
> > > >     NewHaven NHD-0220DZW-AG5 datasheet:
> > > >         ... This instruction does not change the DDRAM Address
> > > >
> > > > Move the cursor home after sending DISPLAY_CLEAR command to support
> > > > non-standard LCDs.
> > > >
> > > > Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> > >
> > > Thanks for your patch!
> > >
> > > > --- a/drivers/auxdisplay/hd44780_common.c
> > > > +++ b/drivers/auxdisplay/hd44780_common.c
> > > > @@ -82,7 +82,15 @@ int hd44780_common_clear_display(struct charlcd *lcd)
> > > >         hdc->write_cmd(hdc, LCD_CMD_DISPLAY_CLEAR);
> > > >         /* datasheet says to wait 1,64 milliseconds */
> > > >         long_sleep(2);
> > > > -       return 0;
> > > > +
> > > > +       /*
> > > > +        * The Hitachi HD44780 controller (and compatible ones) reset the DDRAM
> > > > +        * address when executing the DISPLAY_CLEAR command, thus the
> > > > +        * following call is not required. However, other controllers do not
> > > > +        * (e.g. NewHaven NHD-0220DZW-AG5), thus move the cursor to home
> > > > +        * unconditionally to support both.
> > > > +        */
> > > > +       return hd44780_common_home(lcd);
> > >
> > > Sorry, I haven't tested your patch yet, as my HD44780 display is
> > > currently not connected to any system.
> > >
> > > Your patch LGTM, so
> > > Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
> > >
> > > Note that hd44780_common_home() calls hd44780_common_gotoxy().
> > > According to the documentation, both HD44780U and NHD-0220DZW-AG5
> > > support the Return Home command (0x02), so that could be a good
> > > alternative.
> >
> > Hi Geert,
> > If this is desired, I think maybe it would be best to do it in a
> > separate patch. Maybe there is a good reason why hd44780_common_home()
> 
> Sure, a separate patch would be fine.
> 
> > calls hd44780_common_gotoxy() instead of using Return Home command?
> 
> Looks like the Linux driver has always used goto 0/0 instead of Return Home.
> Perhaps not all displays support that command? I know mine does.
> 
> Willy: do you remember?

Indeed, this vaguely reminds me something. I've been using an old 2x40
salvaged from a fax in the late 80s, originally all reverse-engineered
under DOS. When I implemented Linux support for it 10 years later, I
ported my working code there and we started to adapt to other said
compatible models and fixed certain things that were specific to my
model or that were incorrect in my initial analysis. But I remember that
we broke several times the support for mine while trying to match the
available specs more closely.

Several times we had something related to the initialization, where it
wouldn't always initialize well. But maybe that's because we were calling
what became hd44780_common_home() while during the init code it's possible
that we need at least one call to gotoxy(), I don't really know.

One thing I'm having in mind is that this LCD supported horizontal
scrolling to show the off-screen columns. I'm wondering if the gotoxy()
and home() did the same thing regarding this. Maybe gotoxy() scrolled
back to 0,0 while home() just moved the cursor to the visible home
without scrolling back, in which case it could make a difference.

I would suggest that we just stick to the specs and see if anyone reports
any trouble. There are so many compatible devices nowadays that possibly
implement only a subset of the original controller that we should really
stick to what is clearly understood by everyone and not rely on some old
conclusions about vague observations made by me 25 years ago!

Thanks,
Willy
  
Geert Uytterhoeven July 25, 2023, 3:58 p.m. UTC | #5
Hi Willy,

On Tue, Jul 25, 2023 at 5:36 PM Willy Tarreau <w@1wt.eu> wrote:
> On Tue, Jul 25, 2023 at 05:21:36PM +0200, Geert Uytterhoeven wrote:
> > On Tue, Jul 25, 2023 at 5:13 PM Hugo Villeneuve <hugo@hugovil.com> wrote:
> > > On Mon, 24 Jul 2023 18:08:00 +0200
> > > Geert Uytterhoeven <geert@linux-m68k.org> wrote:
> > > > On Sat, Jul 22, 2023 at 8:18 PM Hugo Villeneuve <hugo@hugovil.com> wrote:
> > > > > From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> > > > >
> > > > > The DISPLAY_CLEAR command on the NewHaven NHD-0220DZW-AG5 display
> > > > > does NOT change the DDRAM address to 00h (home position) like the
> > > > > standard Hitachi HD44780 controller. As a consequence, the starting
> > > > > position of the initial string LCD_INIT_TEXT is not guaranteed to be
> > > > > at 0,0 depending on where the cursor was before the DISPLAY_CLEAR
> > > > > command.
> > > > >
> > > > > Extract of DISPLAY_CLEAR command from datasheets of:
> > > > >
> > > > >     Hitachi HD44780:
> > > > >         ... It then sets DDRAM address 0 into the address counter...
> > > > >
> > > > >     NewHaven NHD-0220DZW-AG5 datasheet:
> > > > >         ... This instruction does not change the DDRAM Address
> > > > >
> > > > > Move the cursor home after sending DISPLAY_CLEAR command to support
> > > > > non-standard LCDs.
> > > > >
> > > > > Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> > > >
> > > > Thanks for your patch!
> > > >
> > > > > --- a/drivers/auxdisplay/hd44780_common.c
> > > > > +++ b/drivers/auxdisplay/hd44780_common.c
> > > > > @@ -82,7 +82,15 @@ int hd44780_common_clear_display(struct charlcd *lcd)
> > > > >         hdc->write_cmd(hdc, LCD_CMD_DISPLAY_CLEAR);
> > > > >         /* datasheet says to wait 1,64 milliseconds */
> > > > >         long_sleep(2);
> > > > > -       return 0;
> > > > > +
> > > > > +       /*
> > > > > +        * The Hitachi HD44780 controller (and compatible ones) reset the DDRAM
> > > > > +        * address when executing the DISPLAY_CLEAR command, thus the
> > > > > +        * following call is not required. However, other controllers do not
> > > > > +        * (e.g. NewHaven NHD-0220DZW-AG5), thus move the cursor to home
> > > > > +        * unconditionally to support both.
> > > > > +        */
> > > > > +       return hd44780_common_home(lcd);
> > > >
> > > > Sorry, I haven't tested your patch yet, as my HD44780 display is
> > > > currently not connected to any system.
> > > >
> > > > Your patch LGTM, so
> > > > Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
> > > >
> > > > Note that hd44780_common_home() calls hd44780_common_gotoxy().
> > > > According to the documentation, both HD44780U and NHD-0220DZW-AG5
> > > > support the Return Home command (0x02), so that could be a good
> > > > alternative.
> > >
> > > Hi Geert,
> > > If this is desired, I think maybe it would be best to do it in a
> > > separate patch. Maybe there is a good reason why hd44780_common_home()
> >
> > Sure, a separate patch would be fine.
> >
> > > calls hd44780_common_gotoxy() instead of using Return Home command?
> >
> > Looks like the Linux driver has always used goto 0/0 instead of Return Home.
> > Perhaps not all displays support that command? I know mine does.
> >
> > Willy: do you remember?
>
> Indeed, this vaguely reminds me something. I've been using an old 2x40
> salvaged from a fax in the late 80s, originally all reverse-engineered
> under DOS. When I implemented Linux support for it 10 years later, I
> ported my working code there and we started to adapt to other said
> compatible models and fixed certain things that were specific to my
> model or that were incorrect in my initial analysis. But I remember that
> we broke several times the support for mine while trying to match the
> available specs more closely.
>
> Several times we had something related to the initialization, where it
> wouldn't always initialize well. But maybe that's because we were calling
> what became hd44780_common_home() while during the init code it's possible
> that we need at least one call to gotoxy(), I don't really know.
>
> One thing I'm having in mind is that this LCD supported horizontal
> scrolling to show the off-screen columns. I'm wondering if the gotoxy()
> and home() did the same thing regarding this. Maybe gotoxy() scrolled
> back to 0,0 while home() just moved the cursor to the visible home
> without scrolling back, in which case it could make a difference.

Indeed, at least according to the real HD44780 documentation,
Return Home also resets the scrolling.

> I would suggest that we just stick to the specs and see if anyone reports
> any trouble. There are so many compatible devices nowadays that possibly
> implement only a subset of the original controller that we should really
> stick to what is clearly understood by everyone and not rely on some old
> conclusions about vague observations made by me 25 years ago!

OK. Given this patch is also a workaround for an incomplete
implementation, let's keep hd44780_common_home() as-is.

Gr{oetje,eeting}s,

                        Geert
  
Willy Tarreau July 25, 2023, 4:42 p.m. UTC | #6
On Tue, Jul 25, 2023 at 05:58:45PM +0200, Geert Uytterhoeven wrote:
> > One thing I'm having in mind is that this LCD supported horizontal
> > scrolling to show the off-screen columns. I'm wondering if the gotoxy()
> > and home() did the same thing regarding this. Maybe gotoxy() scrolled
> > back to 0,0 while home() just moved the cursor to the visible home
> > without scrolling back, in which case it could make a difference.
> 
> Indeed, at least according to the real HD44780 documentation,
> Return Home also resets the scrolling.

OK, thanks for checking!

> > I would suggest that we just stick to the specs and see if anyone reports
> > any trouble. There are so many compatible devices nowadays that possibly
> > implement only a subset of the original controller that we should really
> > stick to what is clearly understood by everyone and not rely on some old
> > conclusions about vague observations made by me 25 years ago!
> 
> OK. Given this patch is also a workaround for an incomplete
> implementation, let's keep hd44780_common_home() as-is.

OK, works for me.

Thanks,
Willy
  
David Reaver July 26, 2023, 3:12 p.m. UTC | #7
Hugo Villeneuve <hugo@hugovil.com> writes:

> From: Hugo Villeneuve <hvilleneuve@dimonoff.com>
>
> The DISPLAY_CLEAR command on the NewHaven NHD-0220DZW-AG5 display
> does NOT change the DDRAM address to 00h (home position) like the
> standard Hitachi HD44780 controller. As a consequence, the starting
> position of the initial string LCD_INIT_TEXT is not guaranteed to be
> at 0,0 depending on where the cursor was before the DISPLAY_CLEAR
> command.
>
> Extract of DISPLAY_CLEAR command from datasheets of:
>
>     Hitachi HD44780:
>         ... It then sets DDRAM address 0 into the address counter...
>
>     NewHaven NHD-0220DZW-AG5 datasheet:
> 	... This instruction does not change the DDRAM Address
>
> Move the cursor home after sending DISPLAY_CLEAR command to support
> non-standard LCDs.
>
> Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
> ---
>  drivers/auxdisplay/hd44780_common.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/auxdisplay/hd44780_common.c b/drivers/auxdisplay/hd44780_common.c
> index 3934c2eebf33..7cbf375b0fa5 100644
> --- a/drivers/auxdisplay/hd44780_common.c
> +++ b/drivers/auxdisplay/hd44780_common.c
> @@ -82,7 +82,15 @@ int hd44780_common_clear_display(struct charlcd *lcd)
>  	hdc->write_cmd(hdc, LCD_CMD_DISPLAY_CLEAR);
>  	/* datasheet says to wait 1,64 milliseconds */
>  	long_sleep(2);
> -	return 0;
> +
> +	/*
> +	 * The Hitachi HD44780 controller (and compatible ones) reset the DDRAM
> +	 * address when executing the DISPLAY_CLEAR command, thus the
> +	 * following call is not required. However, other controllers do not
> +	 * (e.g. NewHaven NHD-0220DZW-AG5), thus move the cursor to home
> +	 * unconditionally to support both.
> +	 */
> +	return hd44780_common_home(lcd);
>  }
>  EXPORT_SYMBOL_GPL(hd44780_common_clear_display);
>
>
> base-commit: d192f5382581d972c4ae1b4d72e0b59b34cadeb9

I tested this on a 16x2 HD44780 on my BeagleBone Black with:

    $ printf '\f' > /dev/lcd
    $ printf 'Hello\nWorld!\n' > /dev/lcd
    $ printf '\x1b[LR' > /dev/lcd
    $ printf '\x1b[LR' > /dev/lcd
    $ printf '\x1b[LR' > /dev/lcd
    $ printf '\f' > /dev/lcd
    $ printf 'Goodbye\nWorld!\n' > /dev/lcd

As expected, "Goodbye World!" was correctly placed left-aligned on the
display, split over both lines.

Tested-by: David Reaver <me@davidreaver.com>
  

Patch

diff --git a/drivers/auxdisplay/hd44780_common.c b/drivers/auxdisplay/hd44780_common.c
index 3934c2eebf33..7cbf375b0fa5 100644
--- a/drivers/auxdisplay/hd44780_common.c
+++ b/drivers/auxdisplay/hd44780_common.c
@@ -82,7 +82,15 @@  int hd44780_common_clear_display(struct charlcd *lcd)
 	hdc->write_cmd(hdc, LCD_CMD_DISPLAY_CLEAR);
 	/* datasheet says to wait 1,64 milliseconds */
 	long_sleep(2);
-	return 0;
+
+	/*
+	 * The Hitachi HD44780 controller (and compatible ones) reset the DDRAM
+	 * address when executing the DISPLAY_CLEAR command, thus the
+	 * following call is not required. However, other controllers do not
+	 * (e.g. NewHaven NHD-0220DZW-AG5), thus move the cursor to home
+	 * unconditionally to support both.
+	 */
+	return hd44780_common_home(lcd);
 }
 EXPORT_SYMBOL_GPL(hd44780_common_clear_display);