From: ChunAn Wu <an.wu@canonical.com>
To: linux-serial@vger.kernel.org, platform-driver-x86@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, markus.probst@posteo.de,
gregkh@linuxfoundation.org, jirislaby@kernel.org,
hansg@kernel.org, ilpo.jarvinen@linux.intel.com,
mpearson-lenovo@squebb.ca, derekjohn.clark@gmail.com
Subject: [PATCH v6 0/3] serdev: handle devices without an ACPI or device tree node
Date: Sun, 25 Oct 2026 10:03:14 +0800 [thread overview]
Message-ID: <cover.1792856688.git.an.wu@canonical.com> (raw)
Driver-created serdev clients without an ACPI companion or device tree
node currently have no modalias and cannot be matched to a driver:
their modalias sysfs read returns -ENODEV and their creators force a
bind with device_driver_attach().
Backlight function on dell-uart-backlight is not affected: that class
device is registered independently and gets its own add uevent. The
user-visible breakage is the failing modalias read on an existing
serdev child -- Checkbox dkms_info_attachment aborts with
"OSError: [Errno 19] No such device".
Resolve the two long-standing serdev-core TODOs by letting the creator
pass a modalias to serdev_device_add() and giving the serdev driver an
id_table, modelled on the SPI bus. ACPI and OF match first and are
unchanged. Convert dell-uart-backlight and the Lenovo Yoga Tab 2 Pro
fastcharger to this path and drop their force-attach workarounds.
Changes in v6:
- Patch 1: switch dell-uart-backlight and yoga-tab2-pro-1380
fastcharger over to the new serdev_device_add() signature with
modalias=NULL so the tree keeps building through patch 1; patches
2/3 then switch them to a real modalias. Fixes the bisect break
that sashiko-bot flagged (true positive, Markus Probst confirmed).
- Patch 1: wire up struct serdev_device_id in modpost, modelled on
the SPI bus: new DEVID() + DEVID_FIELD() entries in
scripts/mod/devicetable-offsets.c, do_serdev_entry() and devtable[]
entry in scripts/mod/file2alias.c, and the device-id/serdev.h
include in include/linux/mod_devicetable.h. Also add
serdev_device_id to scripts/coccinelle/misc/of_table.cocci.
Reported by sashiko-bot; the two in-tree firmware-less clients do
not need MODULE_DEVICE_TABLE(serdev, ...) because the same module
creates and drives their serdev child, but the plumbing matches
the other buses in case out-of-tree users want it. Markus Probst
confirmed as true positive.
- Patch 1: drop the unused `#include <linux/string.h>` from
include/linux/serdev.h. strscpy() is used only in core.c, which
already pulls string.h transitively. Reported by Markus Probst.
- Patch 1: drop Markus's v5 Reviewed-by. The modpost wiring and the
dell/yoga NULL-stub bisect fix are new code he has not seen; the
tag belongs on code that was actually reviewed.
- Patch 3: drop the "serdev driver MUST be registered first" comment
in yt2_1380_fc_module_init(). With id_table matching the order of
driver_register vs device_add no longer matters. Reported by
Markus Probst.
Changes in v5:
- Patch 1: restore is_serdev_device() guard at the top of
serdev_device_match(). Dropping it was correct when match only
called acpi/of helpers, but Patch 1 also adds
serdev_match_id(sdrv->id_table, serdev->modalias), which
dereferences serdev_device-only memory. Since serdev_controller
shares serdev_bus_type, the driver core calls .match on controllers
too; without the guard, serdev->modalias on a controller reads bytes
from inside host/nr/serdev/ops, and strcmp() can walk past the end of
the controller struct. Reported by sashiko-bot on 2/3 and 3/3.
Changes in v4:
- Patch 1: drop the dead is_serdev_device() guard from the match
callback, and dereference serdev once at the top
- Patch 1: drop the "large enough" comment on SERDEV_NAME_SIZE
- Patch 1: in struct serdev_device_driver, place id_table right under
driver, next to driver->of_match_table and driver->acpi_match_table
- Patch 1: merge serdev_device_set_modalias() into serdev_device_add()
so the modalias is set at the only point where forgetting it would
matter; internal firmware callers pass NULL
- All three patches: tightened commit messages and moved the v2/v3
changelog narrative out of Patch 1 into this cover letter
Changes in v3:
- Rename struct serdev_device::name to ::modalias; dev_name() is
unchanged
- Model matching on the SPI bus: add struct serdev_device_id and
id_table; drop driver->name matching
- Add serdev_device_set_modalias() helper and SERDEV_MODULE_PREFIX
- No MODULE_DEVICE_TABLE(serdev, ...) support: both in-tree
firmware-less clients are created by the same module that provides
their driver, so udev has nothing to autoload
Changes in v2:
- Instead of silently returning success with no modalias, use a
creator-supplied name as a "serial:<name>" modalias fallback and as
the matching key, so clients can bind through normal serdev matching
v5: https://lore.kernel.org/lkml/cover.1792831564.git.an.wu@canonical.com/
v4: https://lore.kernel.org/lkml/20261024022930.2704030-1-an.wu@canonical.com/
v3: https://lore.kernel.org/lkml/20261023052717.2577234-1-an.wu@canonical.com/
v2: https://lore.kernel.org/lkml/20261022032842.2492572-1-an.wu@canonical.com/
v1: https://lore.kernel.org/lkml/20261021092124.2306053-1-an.wu@canonical.com/
ChunAn Wu (3):
serdev: handle devices without an ACPI or device tree node
platform/x86: dell-uart-backlight: Bind through normal serdev matching
platform/x86: lenovo-yoga-tab2-pro-1380-fastcharger: Bind through
normal serdev matching
MAINTAINERS | 1 +
.../platform/x86/dell/dell-uart-backlight.c | 18 +++---
.../lenovo/yoga-tab2-pro-1380-fastcharger.c | 25 +++-----
.../platform/x86/x86-android-tablets/core.c | 2 +-
drivers/power/sequencing/pwrseq-pcie-m2.c | 2 +-
drivers/tty/serdev/core.c | 62 ++++++++++++++++---
include/linux/device-id/serdev.h | 19 ++++++
include/linux/mod_devicetable.h | 1 +
include/linux/serdev.h | 11 +++-
scripts/coccinelle/misc/of_table.cocci | 16 ++---
scripts/mod/devicetable-offsets.c | 3 +
scripts/mod/file2alias.c | 9 +++
12 files changed, 120 insertions(+), 49 deletions(-)
create mode 100644 include/linux/device-id/serdev.h
base-commit: 9e947d96915af63e28896caae85a81b74855621b
--
2.34.1
next reply other threads:[~2026-10-25 2:03 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-25 2:03 ChunAn Wu [this message]
2026-10-25 2:03 ` [PATCH v6 1/3] serdev: handle devices without an ACPI or device tree node ChunAn Wu
2026-10-25 2:18 ` sashiko-bot
2026-10-26 13:59 ` Markus Probst
2026-10-27 21:47 ` ChunAn Wu
2026-10-25 2:03 ` [PATCH v6 2/3] platform/x86: dell-uart-backlight: Bind through normal serdev matching ChunAn Wu
2026-10-25 2:12 ` sashiko-bot
2026-10-25 2:03 ` [PATCH v6 3/3] platform/x86: lenovo-yoga-tab2-pro-1380-fastcharger: " ChunAn Wu
2026-10-25 2:20 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1792856688.git.an.wu@canonical.com \
--to=an.wu@canonical.com \
--cc=derekjohn.clark@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=hansg@kernel.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=jirislaby@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=markus.probst@posteo.de \
--cc=mpearson-lenovo@squebb.ca \
--cc=platform-driver-x86@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.