Message ID | 20230722180925.1408885-1-hugo@hugovil.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp931838vqg; Sat, 22 Jul 2023 11:24:55 -0700 (PDT) X-Google-Smtp-Source: APBJJlF24fa+DwrlblnHGQz367mQdrEWfmlsZddaL6gIwOGnzsI+lP8PHhFoeyAjr0MmwTkgTfOe X-Received: by 2002:a17:90a:feb:b0:267:fb26:32bd with SMTP id 98-20020a17090a0feb00b00267fb2632bdmr1688933pjz.7.1690050295250; Sat, 22 Jul 2023 11:24:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690050295; cv=none; d=google.com; s=arc-20160816; b=bSLCYDqBu6ap9k//KrL7qIZbx566ZEyCC905kOSJOKtGcjOsQG2es7S6H1wmbIp/oq H7ZRQ8oNguLz/sLdCmNTtJwt9fRhCwYLdoi5MKjmj9P9W3+4/GJMYjxqBufIBtLX1kse fRL1lWOT2Dcc4KaG7xQ5OdGKAB9NPM0Tc2EFGwmItrrvE11wqx/Lm6wKl3sBlNjRlAHG A5Rou3NNlQEB7YBzey9LJq0GsGgpfFdEmpmclJdVRvwOpOz40g4nkhhKuHDsFNvuquH+ 7i3fYefp9DS1RFC/sUitZFnfmnfGjSgVVmP7dvDpN/lcGJrfmNYPqaknnktei7GECbl9 sMvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:subject:content-transfer-encoding:mime-version :message-id:date:cc:to:from:dkim-signature; bh=bstB9YlCqNA/WOhFlcxMzxMgJHMc9Q6yy29zfQ9Xe3M=; fh=jx556IfQxnA+SVkPjFOTiN2gTXycDTv+SzzEMOSWlIA=; b=JK/FV0XK60QVuzKzR/jDUWYZODBueQt1SxrkIYs0vE7MOELcNVzhblF96NqQc3oecX 3zdMe5rgNaaZhupOKtwFMd9Z2Ruv5XujcL+t7N9afYb0F3s8AsuEDz5ifM8hSrQUm56o LCLml2EJU3aBIwGzIArjdxIEGn53sQ1kNE8QxcVvnRDCZ3nZHApn+lajipXJswG+DOFR 9oC8O2yjZVW0qyR0c16KoQxOsEy2+HNxj0ZFuzpo4zbzbluoT2xmgOYlxmj7FT0wPQan C1IlrXZT3mi3BCurQA3r1lVb646W+5On2KwRuYfwGIuGWgE1WCtMFO5K1wF7dgsYlLTq zM3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@hugovil.com header.s=x header.b=ExLZ1Qy+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id pf14-20020a17090b1d8e00b00262e77d645asi7461981pjb.174.2023.07.22.11.24.42; Sat, 22 Jul 2023 11:24:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@hugovil.com header.s=x header.b=ExLZ1Qy+; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229654AbjGVSJe (ORCPT <rfc822;assdfgzxcv4@gmail.com> + 99 others); Sat, 22 Jul 2023 14:09:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43860 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229468AbjGVSJc (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Sat, 22 Jul 2023 14:09:32 -0400 Received: from mail.hugovil.com (mail.hugovil.com [162.243.120.170]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F0BC82137 for <linux-kernel@vger.kernel.org>; Sat, 22 Jul 2023 11:09:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=hugovil.com ; s=x; h=Subject:Content-Transfer-Encoding:MIME-Version:Message-Id:Date:Cc:To :From:Sender:Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date :Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post: List-Owner:List-Archive; bh=bstB9YlCqNA/WOhFlcxMzxMgJHMc9Q6yy29zfQ9Xe3M=; b=E xLZ1Qy+OxQDAr0kxZHJFU7K62rQXwlDAWNsoNo5PzkboETIwkY4jehoFA9xevYWwUgzAn6/Yxhv0V KiUW5TAKRIpdW21SH0+FnTDVO9Zm9rr8TI9lsdjXrJgqIA9gh8g20HMIeVvVstLM2xb1kCPlRUx/R UrGJ6vKr06E9Hi7M=; Received: from modemcable061.19-161-184.mc.videotron.ca ([184.161.19.61]:49762 helo=localhost.localdomain) by mail.hugovil.com with esmtpa (Exim 4.92) (envelope-from <hugo@hugovil.com>) id 1qNH2n-0004G1-99; Sat, 22 Jul 2023 14:09:29 -0400 From: Hugo Villeneuve <hugo@hugovil.com> To: Miguel Ojeda <ojeda@kernel.org> Cc: hugo@hugovil.com, Hugo Villeneuve <hvilleneuve@dimonoff.com>, linux-kernel@vger.kernel.org Date: Sat, 22 Jul 2023 14:09:25 -0400 Message-Id: <20230722180925.1408885-1-hugo@hugovil.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 184.161.19.61 X-SA-Exim-Mail-From: hugo@hugovil.com X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Subject: [PATCH v2] auxdisplay: hd44780: move cursor home after clear display command X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.hugovil.com) Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772146178433251230 X-GMAIL-MSGID: 1772146178433251230 |
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
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
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 >
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
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
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
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
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>
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);