[PATCH] parisc: add uevent helper for parisc bus udev device-driver auto detection was failing to work on the GSC bus, sinceudev didn't knew wich driver to load due to a missing MODALIAS environmentvariable from kernel. This patch fixes this by adding the MODALIAS environment variable to the uevent kernel notifications.Since modalias_show() generated the modalias string already, I splitted thisout and created a new static function make_modalias() which is now used bymodalias_show() and the new parisc_uevent() function. Tested on 715/64 and c3000. Signed-off-by: Helge Deller <deller@xxxxxx> diff --git a/arch/parisc/kernel/drivers.c b/arch/parisc/kernel/drivers.cindex 884b7ce..994bcd9 100644--- a/arch/parisc/kernel/drivers.c+++ b/arch/parisc/kernel/drivers.c@@ -549,6 +549,38 @@ static int parisc_generic_match(struct device *dev, struct device_driver *drv) return match_device(to_parisc_driver(drv), to_parisc_device(dev)); } +static ssize_t make_modalias(struct device *dev, char *buf)+{+ const struct parisc_device *padev = to_parisc_device(dev);+ const struct parisc_device_id *id = &padev->id;++ return sprintf(buf, "parisc:t%02Xhv%04Xrev%02Xsv%08X\n",+ (u8)id->hw_type, (u16)id->hversion, (u8)id->hversion_rev,+ (u32)id->sversion);+}++static int parisc_uevent(struct device *dev, struct kobj_uevent_env *env)+{+ const struct parisc_device *padev;+ char modalias[40];++ if (!dev)+ return -ENODEV;++ padev = to_parisc_device(dev);+ if (!padev)+ return -ENODEV;++ if (add_uevent_var(env, "PARISC_NAME=%s", padev->name))+ return -ENOMEM;++ make_modalias(dev, modalias);+ if (add_uevent_var(env, "MODALIAS=%s", modalias))+ return -ENOMEM;++ return 0;+}+ #define pa_dev_attr(name, field, format_string) \ static ssize_t name##_show(struct device *dev, struct device_attribute *attr, char *buf) \ { \@@ -566,12 +598,7 @@ pa_dev_attr_id(sversion, "0x%05x\n"); static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf) {- struct parisc_device *padev = to_parisc_device(dev);- struct parisc_device_id *id = &padev->id;-- return sprintf(buf, "parisc:t%02Xhv%04Xrev%02Xsv%08X\n",- (u8)id->hw_type, (u16)id->hversion, (u8)id->hversion_rev,- (u32)id->sversion);+ return make_modalias(dev, buf); } static struct device_attribute parisc_device_attrs[] = {@@ -587,6 +614,7 @@ static struct device_attribute parisc_device_attrs[] = { struct bus_type parisc_bus_type = { .name = "parisc", .match = parisc_generic_match,+ .uevent = parisc_uevent, .dev_attrs = parisc_device_attrs, .probe = parisc_driver_probe, .remove = parisc_driver_remove, ÿôèº{.nÇ+?·?®??+%?Ëÿ±éݶ¥?wÿº{.nÇ+?·¥?{±þ?«?Çÿ?{ayºÊ?Ú?ë,j¢f£¢·h??ï?êÿ?êçz_è®(é???Ý¢j"?ú¶m§ÿÿ¾«þG«?éÿ¢¸??¨èÚ&£ø§~?á