summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2007-07-25 15:24:58 +0200
committerKay Sievers <kay.sievers@vrfy.org>2007-07-25 15:24:58 +0200
commitfea9b2d2924235a459e888ecd35a8b43093b9542 (patch)
tree250753611ef74d2b2e8a3a35da50f99ff6b26e24
parent76bd9d319e0d4376d14032cd65503da3a6c2529e (diff)
add $driver subtitution
-rw-r--r--udev.710
-rw-r--r--udev.xml9
-rw-r--r--udev_rules.c8
3 files changed, 27 insertions, 0 deletions
diff --git a/udev.7 b/udev.7
index d3ed4b71d6..821a476aef 100644
--- a/udev.7
+++ b/udev.7
@@ -335,6 +335,16 @@ and
\fBATTRS\fR.
.RE
.PP
+\fB$driver\fR, \fB%d\fR
+.RS 4
+The driver name of the device matched while searching the devpath upwards for
+\fBSUBSYSTEMS\fR,
+\fBKERNELS\fR,
+\fBDRIVERS\fR
+and
+\fBATTRS\fR.
+.RE
+.PP
\fB$attr{\fR\fB\fIfile\fR\fR\fB}\fR, \fB%s{\fR\fB\fIfile\fR\fR\fB}\fR
.RS 4
The value of a sysfs attribute found at the device, where all keys of the rule have matched. If the matching device does not have such an attribute, all devices along the chain of parents are searched for a matching attribute. If the attribute is a symlink, the last element of the symlink target is returned as the value.
diff --git a/udev.xml b/udev.xml
index 520c718c7a..b43abb779b 100644
--- a/udev.xml
+++ b/udev.xml
@@ -488,6 +488,15 @@
</varlistentry>
<varlistentry>
+ <term><option>$driver</option>, <option>%d</option></term>
+ <listitem>
+ <para>The driver name of the device matched while searching the devpath upwards for
+ <option>SUBSYSTEMS</option>, <option>KERNELS</option>, <option>DRIVERS</option> and <option>ATTRS</option>.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><option>$attr{<replaceable>file</replaceable>}</option>, <option>%s{<replaceable>file</replaceable>}</option></term>
<listitem>
<para>The value of a sysfs attribute found at the device, where
diff --git a/udev_rules.c b/udev_rules.c
index daf3d7fff7..3674a27d63 100644
--- a/udev_rules.c
+++ b/udev_rules.c
@@ -597,6 +597,7 @@ void udev_rules_apply_format(struct udevice *udev, char *string, size_t maxsize)
SUBST_KERNEL,
SUBST_KERNEL_NUMBER,
SUBST_ID,
+ SUBST_DRIVER,
SUBST_MAJOR,
SUBST_MINOR,
SUBST_RESULT,
@@ -616,6 +617,7 @@ void udev_rules_apply_format(struct udevice *udev, char *string, size_t maxsize)
{ .name = "number", .fmt = 'n', .type = SUBST_KERNEL_NUMBER },
{ .name = "kernel", .fmt = 'k', .type = SUBST_KERNEL },
{ .name = "id", .fmt = 'b', .type = SUBST_ID },
+ { .name = "driver", .fmt = 'd', .type = SUBST_DRIVER },
{ .name = "major", .fmt = 'M', .type = SUBST_MAJOR },
{ .name = "minor", .fmt = 'm', .type = SUBST_MINOR },
{ .name = "result", .fmt = 'c', .type = SUBST_RESULT },
@@ -707,6 +709,12 @@ found:
dbg("substitute id '%s'", udev->dev_parent->kernel);
}
break;
+ case SUBST_DRIVER:
+ if (udev->dev_parent != NULL) {
+ strlcat(string, udev->dev_parent->driver, maxsize);
+ dbg("substitute driver '%s'", udev->dev_parent->driver);
+ }
+ break;
case SUBST_MAJOR:
sprintf(temp2, "%d", major(udev->devt));
strlcat(string, temp2, maxsize);