Received: by 2002:a05:6a10:f3d0:0:0:0:0 with SMTP id a16csp1119920pxv; Fri, 25 Jun 2021 06:01:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJydVZY6eo5zwECkgsNQWnJwhCoETAh5/ON5SUl8hHeVyLOWegaQHEitENSU33Pv+/Y79EZP X-Received: by 2002:a17:906:49ce:: with SMTP id w14mr10796138ejv.273.1624626114325; Fri, 25 Jun 2021 06:01:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624626114; cv=none; d=google.com; s=arc-20160816; b=Uscwov9c0IumOP3m3Wy0RoyDos2s05SGUnVV/kYKPKIwVqRw9zagjpuWAFwmLMzDw8 FSTzLZrBZyb5AAAxgryOjMNBiX1ypyhfBtOFAIFQQuWmaPOwdlY0+hZ2YEFXzl+KDEjF Yu4tAMXsqRk2egP9LZrxfGrKr4AeyeFf2CrJOQS9ut+om99jWPCUe53Bl0eIy3SX4uDi S1ZwvKcPfWbULcTI7b53/KwSiZCkbsUq9ixOwalCiWGGrxChxOMxlzzcSFX0WXzYoZnC 640MHK9Hwm4xOtnOcsEkdfutx/W1lCYO1MBw2f3CpcaYP4ygnBtZMYa9ryYOMDjIACE5 whew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=4Dmpj6+N+n/jPyzjZMFxDvFyEMSozrei2NrMhwvIVJc=; b=0qYfdMwYiA1vHlPxHwhDAiuDNsJnCMJITSvDwtxjC3AXhECOmUTmw9z2E31fUL5YYk 10Nt+8+p4Vz/xpHcA28crBmpozpah8rFVOoJsS3eY62z2Xlsafq085d864vPhV85cM4f jVdO9e2ryOVMQ8sjbQ6bPp16e/Z71frnryu/WDiSDIo4odb1MihEwZZjqsnRVqOXu4MY Xfq7xfWMwi4/2AbOmKK8aDCvTa69rRjOjTSLq7skPaMEjT0FH6IL/VAEyQ0bE5hk1d1u 42mGT+QVDGrdJMILbIdInKtlKcPEzQDc0XdxX8DhF9QZNdABG/iHF18XhAVTkzWnk5t7 7erg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i11si6968864edb.418.2021.06.25.06.01.30; Fri, 25 Jun 2021 06:01:54 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231966AbhFYNCP (ORCPT + 99 others); Fri, 25 Jun 2021 09:02:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37136 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231740AbhFYNBv (ORCPT ); Fri, 25 Jun 2021 09:01:51 -0400 Received: from michel.telenet-ops.be (michel.telenet-ops.be [IPv6:2a02:1800:110:4::f00:18]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 00956C06114D for ; Fri, 25 Jun 2021 05:59:17 -0700 (PDT) Received: from ramsan.of.borg ([IPv6:2a02:1810:ac12:ed20:1476:ce84:e216:add8]) by michel.telenet-ops.be with bizsmtp id MQzD2500P2B1U9906QzDHz; Fri, 25 Jun 2021 14:59:14 +0200 Received: from rox.of.borg ([192.168.97.57]) by ramsan.of.borg with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.93) (envelope-from ) id 1lwlQO-003TMK-SL; Fri, 25 Jun 2021 14:59:12 +0200 Received: from geert by rox.of.borg with local (Exim 4.93) (envelope-from ) id 1lwlQN-004sQn-L2; Fri, 25 Jun 2021 14:59:11 +0200 From: Geert Uytterhoeven To: Robin van der Gracht , Rob Herring , Miguel Ojeda , Paul Burton , Greg Kroah-Hartman , Pavel Machek Cc: devicetree@vger.kernel.org, linux-leds@vger.kernel.org, linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven Subject: [PATCH v2 08/18] auxdisplay: linedisp: Add support for changing scroll rate Date: Fri, 25 Jun 2021 14:58:52 +0200 Message-Id: <20210625125902.1162428-9-geert@linux-m68k.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210625125902.1162428-1-geert@linux-m68k.org> References: <20210625125902.1162428-1-geert@linux-m68k.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If the message to display is longer than the number of characters that the display can show, the message will be scrolled. Currently the scroll rate is fixed, moving every 500 ms. Add support for changing the scroll rate through a "scroll_step_ms" device attribute in sysfs. Signed-off-by: Geert Uytterhoeven --- v2: - No changes. --- drivers/auxdisplay/line-display.c | 37 +++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/drivers/auxdisplay/line-display.c b/drivers/auxdisplay/line-display.c index 3f35199bc39f511f..03e7f104aa1add32 100644 --- a/drivers/auxdisplay/line-display.c +++ b/drivers/auxdisplay/line-display.c @@ -19,6 +19,8 @@ #include "line-display.h" +#define DEFAULT_SCROLL_RATE (HZ / 2) + /** * linedisp_scroll() - scroll the display by a character * @t: really a pointer to the private data structure @@ -50,7 +52,7 @@ static void linedisp_scroll(struct timer_list *t) linedisp->scroll_pos %= linedisp->message_len; /* rearm the timer */ - if (linedisp->message_len > num_chars) + if (linedisp->message_len > num_chars && linedisp->scroll_rate) mod_timer(&linedisp->timer, jiffies + linedisp->scroll_rate); } @@ -149,8 +151,39 @@ static ssize_t message_store(struct device *dev, struct device_attribute *attr, static DEVICE_ATTR_RW(message); +static ssize_t scroll_step_ms_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct linedisp *linedisp = container_of(dev, struct linedisp, dev); + + return sysfs_emit(buf, "%u\n", jiffies_to_msecs(linedisp->scroll_rate)); +} + +static ssize_t scroll_step_ms_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct linedisp *linedisp = container_of(dev, struct linedisp, dev); + unsigned int ms; + + if (kstrtouint(buf, 10, &ms) != 0) + return -EINVAL; + + linedisp->scroll_rate = msecs_to_jiffies(ms); + if (linedisp->message && linedisp->message_len > linedisp->num_chars) { + del_timer_sync(&linedisp->timer); + if (linedisp->scroll_rate) + linedisp_scroll(&linedisp->timer); + } + + return count; +} + +static DEVICE_ATTR_RW(scroll_step_ms); + static struct attribute *linedisp_attrs[] = { &dev_attr_message.attr, + &dev_attr_scroll_step_ms.attr, NULL, }; ATTRIBUTE_GROUPS(linedisp); @@ -182,7 +215,7 @@ int linedisp_register(struct linedisp *linedisp, struct device *parent, linedisp->update = update; linedisp->buf = buf; linedisp->num_chars = num_chars; - linedisp->scroll_rate = HZ / 2; + linedisp->scroll_rate = DEFAULT_SCROLL_RATE; device_initialize(&linedisp->dev); dev_set_name(&linedisp->dev, "linedisp.%lu", -- 2.25.1