提交 43cc71ee 编写于 作者: K Kay Sievers 提交者: Greg Kroah-Hartman

platform: prefix MODALIAS with "platform:"

Prefix platform modalias strings with "platform:", which
modprobe config to blacklist alias resolving if userspace
configures it.

Send uevents for all platform devices.

Add MODULE_ALIAS's to: pxa2xx_pcmcia, ds1742 and pcspkr to trigger
module autoloading by userspace.

  $ modinfo pcspkr
  alias:          platform:pcspkr
  license:        GPL
  description:    PC Speaker beeper driver
  ...

  $ modprobe -n -v platform:pcspkr
  insmod /lib/modules/2.6.23-rc3-g28e8351a-dirty/kernel/drivers/input/misc/pcspkr.ko
Signed-off-by: NKay Sievers <kay.sievers@vrfy.org>
Cc: David Brownell <david-b@pacbell.net>
Cc: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 782e3b3b
...@@ -160,11 +160,6 @@ static void platform_device_release(struct device *dev) ...@@ -160,11 +160,6 @@ static void platform_device_release(struct device *dev)
* *
* Create a platform device object which can have other objects attached * Create a platform device object which can have other objects attached
* to it, and which will have attached objects freed when it is released. * to it, and which will have attached objects freed when it is released.
*
* This device will be marked as not supporting hotpluggable drivers; no
* device add/remove uevents will be generated. In the unusual case that
* the device isn't being dynamically allocated as a legacy "probe the
* hardware" driver, infrastructure code should reverse this marking.
*/ */
struct platform_device *platform_device_alloc(const char *name, unsigned int id) struct platform_device *platform_device_alloc(const char *name, unsigned int id)
{ {
...@@ -177,12 +172,6 @@ struct platform_device *platform_device_alloc(const char *name, unsigned int id) ...@@ -177,12 +172,6 @@ struct platform_device *platform_device_alloc(const char *name, unsigned int id)
pa->pdev.id = id; pa->pdev.id = id;
device_initialize(&pa->pdev.dev); device_initialize(&pa->pdev.dev);
pa->pdev.dev.release = platform_device_release; pa->pdev.dev.release = platform_device_release;
/* prevent hotplug "modprobe $(MODALIAS)" from causing trouble in
* legacy probe-the-hardware drivers, which don't properly split
* out device enumeration logic from drivers.
*/
pa->pdev.dev.uevent_suppress = 1;
} }
return pa ? &pa->pdev : NULL; return pa ? &pa->pdev : NULL;
...@@ -530,7 +519,7 @@ static ssize_t ...@@ -530,7 +519,7 @@ static ssize_t
modalias_show(struct device *dev, struct device_attribute *a, char *buf) modalias_show(struct device *dev, struct device_attribute *a, char *buf)
{ {
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
int len = snprintf(buf, PAGE_SIZE, "%s\n", pdev->name); int len = snprintf(buf, PAGE_SIZE, "platform:%s\n", pdev->name);
return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len; return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len;
} }
...@@ -546,7 +535,7 @@ static int platform_uevent(struct device *dev, char **envp, int num_envp, ...@@ -546,7 +535,7 @@ static int platform_uevent(struct device *dev, char **envp, int num_envp,
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
envp[0] = buffer; envp[0] = buffer;
snprintf(buffer, buffer_size, "MODALIAS=%s", pdev->name); snprintf(buffer, buffer_size, "MODALIAS=platform:%s", pdev->name);
return 0; return 0;
} }
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>"); MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
MODULE_DESCRIPTION("PC Speaker beeper driver"); MODULE_DESCRIPTION("PC Speaker beeper driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:pcspkr");
#ifdef CONFIG_X86 #ifdef CONFIG_X86
/* Use the global PIT lock ! */ /* Use the global PIT lock ! */
......
...@@ -175,7 +175,6 @@ static int __init mst_pcmcia_init(void) ...@@ -175,7 +175,6 @@ static int __init mst_pcmcia_init(void)
if (!mst_pcmcia_device) if (!mst_pcmcia_device)
return -ENOMEM; return -ENOMEM;
mst_pcmcia_device->dev.uevent_suppress = 0;
mst_pcmcia_device->dev.platform_data = &mst_pcmcia_ops; mst_pcmcia_device->dev.platform_data = &mst_pcmcia_ops;
ret = platform_device_add(mst_pcmcia_device); ret = platform_device_add(mst_pcmcia_device);
...@@ -195,3 +194,4 @@ fs_initcall(mst_pcmcia_init); ...@@ -195,3 +194,4 @@ fs_initcall(mst_pcmcia_init);
module_exit(mst_pcmcia_exit); module_exit(mst_pcmcia_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:pxa2xx-pcmcia");
...@@ -261,7 +261,6 @@ static int __init sharpsl_pcmcia_init(void) ...@@ -261,7 +261,6 @@ static int __init sharpsl_pcmcia_init(void)
if (!sharpsl_pcmcia_device) if (!sharpsl_pcmcia_device)
return -ENOMEM; return -ENOMEM;
sharpsl_pcmcia_device->dev.uevent_suppress = 0;
sharpsl_pcmcia_device->dev.platform_data = &sharpsl_pcmcia_ops; sharpsl_pcmcia_device->dev.platform_data = &sharpsl_pcmcia_ops;
sharpsl_pcmcia_device->dev.parent = platform_scoop_config->devs[0].dev; sharpsl_pcmcia_device->dev.parent = platform_scoop_config->devs[0].dev;
...@@ -284,3 +283,4 @@ module_exit(sharpsl_pcmcia_exit); ...@@ -284,3 +283,4 @@ module_exit(sharpsl_pcmcia_exit);
MODULE_DESCRIPTION("Sharp SL Series PCMCIA Support"); MODULE_DESCRIPTION("Sharp SL Series PCMCIA Support");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:pxa2xx-pcmcia");
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册