Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 54674
b: refs/heads/master
c: 49a4ec1
h: refs/heads/master
v: v3
  • Loading branch information
David Brownell authored and Linus Torvalds committed May 8, 2007
1 parent 79a2686 commit e010bf2
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: eb81d93046e7de51d47b8f1303d80e6f51ac9e33
refs/heads/master: 49a4ec188f9a96c9a5567956718213d38a456a19
18 changes: 18 additions & 0 deletions trunk/drivers/base/platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,11 @@ static void platform_device_release(struct device *dev)
*
* Create a platform device object which can have other objects attached
* 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)
{
Expand All @@ -172,6 +177,12 @@ struct platform_device *platform_device_alloc(const char *name, unsigned int id)
pa->pdev.id = id;
device_initialize(&pa->pdev.dev);
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;
Expand Down Expand Up @@ -351,6 +362,13 @@ EXPORT_SYMBOL_GPL(platform_device_unregister);
* memory allocated for the device allows drivers using such devices
* to be unloaded iwithout waiting for the last reference to the device
* to be dropped.
*
* This interface is primarily intended for use with legacy drivers
* which probe hardware directly. Because such drivers create sysfs
* device nodes themselves, rather than letting system infrastructure
* handle such device enumeration tasks, they don't fully conform to
* the Linux driver model. In particular, when such drivers are built
* as modules, they can't be "hotplugged".
*/
struct platform_device *platform_device_register_simple(char *name, unsigned int id,
struct resource *res, unsigned int num)
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/pcmcia/pxa2xx_mainstone.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ static int __init mst_pcmcia_init(void)
if (!mst_pcmcia_device)
return -ENOMEM;

mst_pcmcia_device->dev.uevent_suppress = 0;
mst_pcmcia_device->dev.platform_data = &mst_pcmcia_ops;

ret = platform_device_add(mst_pcmcia_device);
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/pcmcia/pxa2xx_sharpsl.c
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ static int __init sharpsl_pcmcia_init(void)
if (!sharpsl_pcmcia_device)
return -ENOMEM;

sharpsl_pcmcia_device->dev.uevent_suppress = 0;
sharpsl_pcmcia_device->dev.platform_data = &sharpsl_pcmcia_ops;
sharpsl_pcmcia_device->dev.parent = platform_scoop_config->devs[0].dev;

Expand Down
4 changes: 2 additions & 2 deletions trunk/include/linux/device.h
Original file line number Diff line number Diff line change
Expand Up @@ -412,12 +412,13 @@ struct device {
struct klist_node knode_parent; /* node in sibling list */
struct klist_node knode_driver;
struct klist_node knode_bus;
struct device * parent;
struct device *parent;

struct kobject kobj;
char bus_id[BUS_ID_SIZE]; /* position on parent bus */
struct device_type *type;
unsigned is_registered:1;
unsigned uevent_suppress:1;
struct device_attribute uevent_attr;
struct device_attribute *devt_attr;

Expand Down Expand Up @@ -458,7 +459,6 @@ struct device {
struct class *class;
dev_t devt; /* dev_t, creates the sysfs "dev" */
struct attribute_group **groups; /* optional groups */
int uevent_suppress;

void (*release)(struct device * dev);
};
Expand Down

0 comments on commit e010bf2

Please sign in to comment.