+static void build_kernel_number(struct sysfs_class_device *class_dev, struct udevice *udev)
+{
+ char *dig;
+
+ /* FIXME, figure out how to handle stuff like sdaj which will not work right now. */
+ dig = class_dev->name + strlen(class_dev->name);
+ while (isdigit(*(dig-1)))
+ dig--;
+ strfieldcpy(udev->kernel_number, dig);
+ dbg("kernel_number = %s", udev->kernel_number);
+}
+
+static void apply_format(struct udevice *udev, unsigned char *string)
+{
+ char name[NAME_SIZE];
+ char *pos;
+
+ while (1) {
+ pos = strchr(string, '%');
+
+ if (pos) {
+ strfieldcpy(name, pos+2);
+ *pos = 0x00;
+ switch (pos[1]) {
+ case 'b':
+ if (strlen(udev->bus_id) == 0)
+ break;
+ strcat(string, udev->bus_id);
+ dbg("substitute bus_id '%s'", udev->bus_id);
+ break;
+ case 'n':
+ if (strlen(udev->kernel_number) == 0)
+ break;
+ strcat(pos, udev->kernel_number);
+ dbg("substitute kernel number '%s'", udev->kernel_number);
+ break;
+ case 'm':
+ sprintf(pos, "%u", udev->minor);
+ dbg("substitute minor number '%u'", udev->minor);
+ break;
+ case 'M':
+ sprintf(pos, "%u", udev->major);
+ dbg("substitute major number '%u'", udev->major);
+ break;
+ case 'c':
+ if (strlen(udev->callout_value) == 0)
+ break;
+ strcat(pos, udev->callout_value);
+ dbg("substitute callout output '%s'", udev->callout_value);
+ break;
+ default:
+ dbg("unknown substitution type '%%%c'", pos[1]);
+ break;
+ }
+ strcat(string, name);
+ } else
+ break;
+ }
+}
+