lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ZL/sDSDYXWFDGbcX@1wt.eu>
Date:   Tue, 25 Jul 2023 17:36:45 +0200
From:   Willy Tarreau <w@....eu>
To:     Geert Uytterhoeven <geert@...ux-m68k.org>
Cc:     Hugo Villeneuve <hugo@...ovil.com>,
        Miguel Ojeda <ojeda@...nel.org>,
        Hugo Villeneuve <hvilleneuve@...onoff.com>,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] auxdisplay: hd44780: move cursor home after clear
 display command

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@...ovil.com> wrote:
> > On Mon, 24 Jul 2023 18:08:00 +0200
> > Geert Uytterhoeven <geert@...ux-m68k.org> wrote:
> > > On Sat, Jul 22, 2023 at 8:18 PM Hugo Villeneuve <hugo@...ovil.com> wrote:
> > > > From: Hugo Villeneuve <hvilleneuve@...onoff.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@...onoff.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@...ux-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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ