drivers/pnp/driver.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)
Currently ISAPNP devices do not generate an uevent for udev to
auto-load the driver modules for Creative SoundBlaster or Gravis
UltraSound to just work.
Signed-off-by: René Rebe <rene@exactco.de>
---
Tested for a while in T2/Linux already.
---
drivers/pnp/driver.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c
index 7de7aabb275e..05e9840bc3d4 100644
--- a/drivers/pnp/driver.c
+++ b/drivers/pnp/driver.c
@@ -150,6 +150,24 @@ static void pnp_device_shutdown(struct device *dev)
drv->shutdown(pnp_dev);
}
+static int pnp_uevent(const struct device *dev, struct kobj_uevent_env *env)
+{
+ struct pnp_id *pos;
+ const struct pnp_dev *pnp_dev = to_pnp_dev(dev);
+
+ if (!dev)
+ return -ENODEV;
+
+ pos = pnp_dev->id;
+ while (pos) {
+ if (add_uevent_var(env, "MODALIAS=pnp:d%s", pos->id))
+ return -ENOMEM;
+ pos = pos->next;
+ }
+
+ return 0;
+}
+
static int pnp_bus_match(struct device *dev, const struct device_driver *drv)
{
struct pnp_dev *pnp_dev = to_pnp_dev(dev);
@@ -259,6 +277,7 @@ static const struct dev_pm_ops pnp_bus_dev_pm_ops = {
const struct bus_type pnp_bus_type = {
.name = "pnp",
.match = pnp_bus_match,
+ .uevent = pnp_uevent,
.probe = pnp_device_probe,
.remove = pnp_device_remove,
.shutdown = pnp_device_shutdown,
--
2.46.0
--
René Rebe, ExactCODE GmbH, Berlin, Germany
https://exactco.de • https://t2linux.com • https://patreon.com/renerebe
On Tue, Nov 18, 2025 at 2:59 PM René Rebe <rene@exactco.de> wrote:
>
> Currently ISAPNP devices do not generate an uevent for udev to
> auto-load the driver modules for Creative SoundBlaster or Gravis
> UltraSound to just work.
>
> Signed-off-by: René Rebe <rene@exactco.de>
> ---
> Tested for a while in T2/Linux already.
> ---
> drivers/pnp/driver.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/pnp/driver.c b/drivers/pnp/driver.c
> index 7de7aabb275e..05e9840bc3d4 100644
> --- a/drivers/pnp/driver.c
> +++ b/drivers/pnp/driver.c
> @@ -150,6 +150,24 @@ static void pnp_device_shutdown(struct device *dev)
> drv->shutdown(pnp_dev);
> }
>
> +static int pnp_uevent(const struct device *dev, struct kobj_uevent_env *env)
> +{
> + struct pnp_id *pos;
> + const struct pnp_dev *pnp_dev = to_pnp_dev(dev);
> +
> + if (!dev)
> + return -ENODEV;
> +
> + pos = pnp_dev->id;
> + while (pos) {
> + if (add_uevent_var(env, "MODALIAS=pnp:d%s", pos->id))
> + return -ENOMEM;
> + pos = pos->next;
> + }
> +
> + return 0;
> +}
> +
> static int pnp_bus_match(struct device *dev, const struct device_driver *drv)
> {
> struct pnp_dev *pnp_dev = to_pnp_dev(dev);
> @@ -259,6 +277,7 @@ static const struct dev_pm_ops pnp_bus_dev_pm_ops = {
> const struct bus_type pnp_bus_type = {
> .name = "pnp",
> .match = pnp_bus_match,
> + .uevent = pnp_uevent,
> .probe = pnp_device_probe,
> .remove = pnp_device_remove,
> .shutdown = pnp_device_shutdown,
> --
Applied as 6.19 material with minor edits in the subject, thanks!
© 2016 - 2025 Red Hat, Inc.