From: Hugo Villeneuve <[email protected]>
The "clear display" 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 clear display
command.
Extract of CLEAR_DISPLAY 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 clear display command to support
non-standard LCDs.
Signed-off-by: Hugo Villeneuve <[email protected]>
---
drivers/auxdisplay/hd44780_common.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/auxdisplay/hd44780_common.c b/drivers/auxdisplay/hd44780_common.c
index 3934c2eebf33..70c818945a74 100644
--- a/drivers/auxdisplay/hd44780_common.c
+++ b/drivers/auxdisplay/hd44780_common.c
@@ -82,7 +82,13 @@ 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;
+
+ /*
+ * Some LCDs (ex: NewHaven) do not reset the DDRAM address when
+ * executing the CLEAR_DISPLAY command. Explicitely move cursor
+ * to home position to account for these non-standard LCDs:
+ */
+ return hd44780_common_home(lcd);
}
EXPORT_SYMBOL_GPL(hd44780_common_clear_display);
base-commit: c17414a273b81fe4e34e11d69fc30cc8b1431614
--
2.30.2
On Thu, Jul 6, 2023 at 8:51 PM Hugo Villeneuve <[email protected]> wrote:
>
> The "clear display" 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 clear display
> command.
>
> Extract of CLEAR_DISPLAY 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 clear display command to support
> non-standard LCDs.
>
> Signed-off-by: Hugo Villeneuve <[email protected]>
Thanks! Sounds good to me, as long the extra command does not
introduce some issue with the actual HD44780 -- can we double-check
the HD44780 still works as expected?
Cc'ing Lars and Geert since they may be able to give it a quick test.
> + /*
> + * Some LCDs (ex: NewHaven) do not reset the DDRAM address when
> + * executing the CLEAR_DISPLAY command. Explicitely move cursor
> + * to home position to account for these non-standard LCDs:
> + */
> + return hd44780_common_home(lcd);
Few nits:
- Explicitely -> Explicitly.
- Isn't the command `DISPLAY_CLEAR` instead of `CLEAR_DISPLAY`? (at
least the identifier above is `LCD_CMD_DISPLAY_CLEAR`).
- `:` -> `.`.
What about something like:
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.
Cheers,
Miguel
On Thu, 6 Jul 2023 21:33:05 +0200
Miguel Ojeda <[email protected]> wrote:
> On Thu, Jul 6, 2023 at 8:51 PM Hugo Villeneuve <[email protected]> wrote:
> >
> > The "clear display" 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 clear display
> > command.
> >
> > Extract of CLEAR_DISPLAY 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 clear display command to support
> > non-standard LCDs.
> >
> > Signed-off-by: Hugo Villeneuve <[email protected]>
>
> Thanks! Sounds good to me, as long the extra command does not
> introduce some issue with the actual HD44780 -- can we double-check
> the HD44780 still works as expected?
>
> Cc'ing Lars and Geert since they may be able to give it a quick test.
Hi Miguel,
I do not have a standard Hitachi controller to test it on, so lets wait
for feedback from Lars and Geert or others.
> > + /*
> > + * Some LCDs (ex: NewHaven) do not reset the DDRAM address when
> > + * executing the CLEAR_DISPLAY command. Explicitely move cursor
> > + * to home position to account for these non-standard LCDs:
> > + */
> > + return hd44780_common_home(lcd);
>
> Few nits:
>
> - Explicitely -> Explicitly.
> - Isn't the command `DISPLAY_CLEAR` instead of `CLEAR_DISPLAY`? (at
> least the identifier above is `LCD_CMD_DISPLAY_CLEAR`).
Yes, I have also modified the commit log message to be consistent with
the code.
> - `:` -> `.`.
> What about something like:
>
> 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.
Ok, changed comments to that.
Thank you,
Hugo.
Am 2023-07-06 21:49, schrieb Hugo Villeneuve:
> On Thu, 6 Jul 2023 21:33:05 +0200
> Miguel Ojeda <[email protected]> wrote:
>
>> On Thu, Jul 6, 2023 at 8:51 PM Hugo Villeneuve <[email protected]>
>> wrote:
>> >
>> > The "clear display" 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 clear display
>> > command.
>> >
>> > Extract of CLEAR_DISPLAY 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 clear display command to support
>> > non-standard LCDs.
>> >
>> > Signed-off-by: Hugo Villeneuve <[email protected]>
>>
>> Thanks! Sounds good to me, as long the extra command does not
>> introduce some issue with the actual HD44780 -- can we double-check
>> the HD44780 still works as expected?
>>
>> Cc'ing Lars and Geert since they may be able to give it a quick test.
>
> Hi Miguel,
> I do not have a standard Hitachi controller to test it on, so lets wait
> for feedback from Lars and Geert or others.
Sorry guys,
I do not have access to the relevant hardware anymore. I am CC'ing
Christian,
who has the relevant hardware and maybe he can help testing the patch.
Christian is on vacation up until mid august, so we have to wait a bit
more
for someone able to test this.
BTW: The displays I did the work back then on were for sure not genuine
Hitachi ones either.
I do not see, that the little patch should do any harm.
Regards,
Lars
[email protected] writes:
> Am 2023-07-06 21:49, schrieb Hugo Villeneuve:
>> On Thu, 6 Jul 2023 21:33:05 +0200
>> Miguel Ojeda <[email protected]> wrote:
>>
>>> On Thu, Jul 6, 2023 at 8:51 PM Hugo Villeneuve <[email protected]> wrote:
>>> >
>>> > The "clear display" 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 clear display
>>> > command.
>>> >
>>> > Extract of CLEAR_DISPLAY 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 clear display command to support
>>> > non-standard LCDs.
>>> >
>>> > Signed-off-by: Hugo Villeneuve <[email protected]>
>>> Thanks! Sounds good to me, as long the extra command does not
>>> introduce some issue with the actual HD44780 -- can we double-check
>>> the HD44780 still works as expected?
>>> Cc'ing Lars and Geert since they may be able to give it a quick test.
>> Hi Miguel,
>> I do not have a standard Hitachi controller to test it on, so lets wait
>> for feedback from Lars and Geert or others.
>
> Sorry guys,
> I do not have access to the relevant hardware anymore. I am CC'ing Christian,
> who has the relevant hardware and maybe he can help testing the patch.
> Christian is on vacation up until mid august, so we have to wait a bit more
> for someone able to test this.
>
> BTW: The displays I did the work back then on were for sure not genuine
> Hitachi ones either.
> I do not see, that the little patch should do any harm.
>
> Regards,
> Lars
I was actually hooking up a 16x2 HD44780 on my BeagleBone Black last
night before I came across this patch, so I was able to test this. It
works fine for me. I tested 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. Let me know if there is something else
you would like me to do to test this!
Tested-by: David Reaver <[email protected]>
On Sat, Jul 22, 2023 at 4:54 PM David Reaver <[email protected]> wrote:
>
> I was actually hooking up a 16x2 HD44780 on my BeagleBone Black last
> night before I came across this patch, so I was able to test this. It
> works fine for me. I tested 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. Let me know if there is something else
> you would like me to do to test this!
>
> Tested-by: David Reaver <[email protected]>
Thanks a lot, that is very helpful!
I will wait a while in case Christian or somebody else wants to test
it, and send it for 6.6.
Cheers,
Miguel
On Sat, 22 Jul 2023 18:04:03 +0200
Miguel Ojeda <[email protected]> wrote:
> On Sat, Jul 22, 2023 at 4:54 PM David Reaver <[email protected]> wrote:
> >
> > I was actually hooking up a 16x2 HD44780 on my BeagleBone Black last
> > night before I came across this patch, so I was able to test this. It
> > works fine for me. I tested 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. Let me know if there is something else
> > you would like me to do to test this!
> >
> > Tested-by: David Reaver <[email protected]>
>
> Thanks a lot, that is very helpful!
>
> I will wait a while in case Christian or somebody else wants to test
> it, and send it for 6.6.
Hi Miguel,
in the meantime, I will send V2 of the patch with the changes you
suggested for the commit message and the comments.
Hugo.