From nobody Sat Jan 17 03:41:38 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dtMw76j1vz6PJDv for ; Sat, 17 Jan 2026 03:41:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dtMw73Wxtz3Rwk for ; Sat, 17 Jan 2026 03:41:43 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1768621303; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=+knsaCAkQ0M+vvMVYZY/KYTOGz6+9c9/l9UFilcTQ9Y=; b=pIf+CDfUlH5GguIFcbv/lOvK0pELabGvuErd9AZeY6dyP3EoUYQw5jdAtsbqbjBxbS6Cmf UEH1LdKeH3t0iR6khsgQAU/AJVcx7NmEFYDjVX6uEaQpvAA1kYnLGPkyBMXZ0NSN7T2jlL dGNrXmtbWTMjyJEGw+Pv3yL3ThGA9DZ2UX6IQmmdHp9tsZLPemJKmNDNJ+bjRNotERQbIv reV5C/UQdfo0dS/uyNZauiIutKoXr50DodkxgmFt3EyGchselHtUKBjta3XgBS8AoxfYyZ hHsMSfifLbJD3tlHsAuD5XfY0OrW69sX1nCyiMNpjBnzrBjiCpfcVVv19Wm7vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1768621303; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=+knsaCAkQ0M+vvMVYZY/KYTOGz6+9c9/l9UFilcTQ9Y=; b=HmTIWeGhs/2GKXFH9S2rtYQyKhFLZH8shpWHQtiSbW66rctiDEJGz2CJdM2SrXII2cBv1z 2SD00iO/pavvnLSXSDuf79w0bM4sIMat77S5wAirYGtgHWo8Oyr5hT+Ya7QChj3yE0QDkB ooPleKrXxV7Vg1U58hvm9KJN+yB2KqYaJQ/6I+KO7wv1LVlNFM5ZZlRzTcBGs/iRbkKJmU fbiIJeOFpQoq9WpM1ZMbWbBsc2qfu3t4pYru16aPMkrCzkxtgauJa3awBVDfGLRfL7M+Rc TzJwQo6xyagUBeOERZV05aGlpY8jBbTUwsBB9bMz10Pg7NequygcmmyribNcNQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1768621303; a=rsa-sha256; cv=none; b=vUzGJhgph3UzIrihkFwAX+0Zv5fZU3IdRXCexpWnJtCKVk71D3iWOx00KGRx/SoRczVb0n JZuHQNe8KKf0XViAz4xfd2L3ea5MZmI8Ete4aTNHibhNBZ7O4WKXvdJV1cqpWCH9+5xMhs BhuOoryci+5/zs4Y44pR3quQOHcScbBMjjpcjKC5VWdvSvBcd5WhLBrqavo3S+dVa3gUNv 0Gnf6LZZ5Djd+Y86FUY2sLA+9BVwUT0bGKkkVnywtleg50bJ2Ch1ooaTK7j/w0CdWwRAdu ByOOyRiO/Jnf9D8wT0wKTIzX6YfdFMtw/ONpNSTk5rGgayJQH5m5Oc3bvdhzRg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dtMw730rCzk0v for ; Sat, 17 Jan 2026 03:41:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25c10 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 17 Jan 2026 03:41:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Sulev-Madis Silber From: Adrian Chadd Subject: git: 6dc12ecfb268 - main - spi: "-S" option for continuous stream from standard input to bus List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6dc12ecfb268d2d043f9415156d475278f3f714b Auto-Submitted: auto-generated Date: Sat, 17 Jan 2026 03:41:38 +0000 Message-Id: <696b04f2.25c10.6e70feb8@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=6dc12ecfb268d2d043f9415156d475278f3f714b commit 6dc12ecfb268d2d043f9415156d475278f3f714b Author: Sulev-Madis Silber AuthorDate: 2026-01-17 03:29:19 +0000 Commit: Adrian Chadd CommitDate: 2026-01-17 03:41:33 +0000 spi: "-S" option for continuous stream from standard input to bus created to allow addressable leds to be driven by abusing spi bus as waveform generator. this might have other uses for similar "permanent" spi transfers Differential Revision: https://reviews.freebsd.org/D54734 Reviewed by: adrian --- usr.sbin/spi/spi.8 | 7 +++++++ usr.sbin/spi/spi.c | 41 +++++++++++++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/usr.sbin/spi/spi.8 b/usr.sbin/spi/spi.8 index c3c041fe8e93..d12b7a510aa0 100644 --- a/usr.sbin/spi/spi.8 +++ b/usr.sbin/spi/spi.8 @@ -38,6 +38,7 @@ .Op Fl d Cm r Ns | Ns Cm w Ns | Ns Cm rw .Op Fl f Ar device .Op Fl m Ar mode +.Op Fl S .Op Fl s Ar max-speed .Nm .Op Fl i @@ -145,6 +146,12 @@ caused the LSB to be transmitted and read first. SPI mode, 0 through 3. This defines the clock phase and timing with respect to reading and writing data, as per the SPI specification. +.It Fl S +Constantly stream from +.Xr stdin 3 +to the +.Nm +bus. .It Fl s Ar speed Specify the maximum speed, in Hz, for the SPI clock. The bus will operate at its highest available speed which does not diff --git a/usr.sbin/spi/spi.c b/usr.sbin/spi/spi.c index 351474dde0ba..1ced2371e3d0 100644 --- a/usr.sbin/spi/spi.c +++ b/usr.sbin/spi/spi.c @@ -129,7 +129,7 @@ usage(void) fputs(" - communicate on SPI bus with slave devices\n" "Usage:\n" " spi [-f device] [-d r|w|rw] [-m mode] [-s max-speed] [-c count]\n" - " [-C \"command bytes\"] [-A] [-b] [-L] [-v]\n" + " [-C \"command bytes\"] [-A] [-b] [-L] [-S] [-v]\n" " spi -i [-f device] [-v]\n" " spi -h\n" " where\n" @@ -145,6 +145,7 @@ usage(void) " -i query information about the device\n" " -A uses ASCII for input/output as 2-digit hex values\n" " -b Override output format as binary (only valid with '-A')\n" + " -S constantly stream from stdin to bus\n" " -v verbose output\n" " -h prints this message\n" "\n" @@ -158,11 +159,12 @@ int main(int argc, char *argv[], char *envp[] __unused) { struct spi_options opt; - int err, ch, hdev, finfo, fdir; + int err, ch, hdev, finfo, stream, fdir; char *pstr; char dev_name[PATH_MAX * 2 + 5]; finfo = 0; + stream = 0; fdir = DIR_NONE; hdev = -1; @@ -180,7 +182,7 @@ main(int argc, char *argv[], char *envp[] __unused) opt.ncmd = 0; opt.pcmd = NULL; - while (!err && (ch = getopt(argc, argv, "f:d:m:s:c:C:AbLvih")) != -1) { + while (!err && (ch = getopt(argc, argv, "f:d:m:s:c:C:AbLviSh")) != -1) { switch (ch) { case 'd': if (optarg[0] == 'r') { @@ -275,6 +277,10 @@ main(int argc, char *argv[], char *envp[] __unused) finfo = 1; break; + case 'S': + stream = 1; + break; + default: err = 1; /* FALLTHROUGH */ @@ -358,14 +364,29 @@ main(int argc, char *argv[], char *envp[] __unused) /* do data transfer */ - if (fdir == DIR_READ) { - err = perform_read(hdev, &opt); - } - else if (fdir == DIR_WRITE) { - err = perform_write(hdev, &opt); + if (stream) { + while (!err && !feof(stdin)) { + if (fdir == DIR_READ) { + err = perform_read(hdev, &opt); + } + else if (fdir == DIR_WRITE) { + err = perform_write(hdev, &opt); + } + else if (fdir == DIR_READWRITE) { + err = perform_readwrite(hdev, &opt); + } + } } - else if (fdir == DIR_READWRITE) { - err = perform_readwrite(hdev, &opt); + else { + if (fdir == DIR_READ) { + err = perform_read(hdev, &opt); + } + else if (fdir == DIR_WRITE) { + err = perform_write(hdev, &opt); + } + else if (fdir == DIR_READWRITE) { + err = perform_readwrite(hdev, &opt); + } } the_end: