mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-21 19:53:59 +08:00
greybus: skeleton for future uevents.
Implement a skeleton for the uevent framework, to be filled in later when we figure out what type of module "matching" we want to do for things (connections, interfaces, modules, etc.) Based on a patch from Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
This commit is contained in:
parent
86bf33afa3
commit
0ac5a83881
@ -135,7 +135,7 @@ static void gb_connection_release(struct device *dev)
|
||||
kfree(connection);
|
||||
}
|
||||
|
||||
static struct device_type greybus_connection_type = {
|
||||
struct device_type greybus_connection_type = {
|
||||
.name = "greybus_connection",
|
||||
.release = gb_connection_release,
|
||||
};
|
||||
|
@ -45,13 +45,42 @@ static int greybus_module_match(struct device *dev, struct device_driver *drv)
|
||||
|
||||
static int greybus_uevent(struct device *dev, struct kobj_uevent_env *env)
|
||||
{
|
||||
/* struct gb_module *gmod = to_gb_module(dev); */
|
||||
struct gb_module *gmod = NULL;
|
||||
struct gb_interface *interface = NULL;
|
||||
struct gb_connection *connection = NULL;
|
||||
|
||||
/* FIXME - add some uevents here... */
|
||||
if (is_gb_module(dev)) {
|
||||
gmod = to_gb_module(dev);
|
||||
} else if (is_gb_interface(dev)) {
|
||||
interface = to_gb_interface(dev);
|
||||
gmod = interface->gmod;
|
||||
} else if (is_gb_connection(dev)) {
|
||||
connection = to_gb_connection(dev);
|
||||
interface = connection->interface;
|
||||
gmod = interface->gmod;
|
||||
} else {
|
||||
dev_WARN(dev, "uevent for unknown greybus device \"type\"!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* FIXME - be sure to check the type to know how to handle modules and
|
||||
* interfaces differently */
|
||||
if (connection) {
|
||||
// FIXME
|
||||
// add a uevent that can "load" a connection type
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (interface) {
|
||||
// FIXME
|
||||
// add a uevent that can "load" a interface type
|
||||
// This is what we need to bind a driver to so use the info
|
||||
// in gmod here as well
|
||||
return 0;
|
||||
}
|
||||
|
||||
// FIXME
|
||||
// "just" a module, be vague here, nothing binds to a module except
|
||||
// the greybus core, so there's not much, if anything, we need to
|
||||
// advertise.
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -259,5 +259,24 @@ void gb_uart_device_exit(struct gb_connection *connection);
|
||||
int svc_set_route_send(struct gb_interface *interface,
|
||||
struct greybus_host_device *hd);
|
||||
|
||||
extern struct device_type greybus_module_type;
|
||||
extern struct device_type greybus_interface_type;
|
||||
extern struct device_type greybus_connection_type;
|
||||
|
||||
static inline int is_gb_module(const struct device *dev)
|
||||
{
|
||||
return dev->type == &greybus_module_type;
|
||||
}
|
||||
|
||||
static inline int is_gb_interface(const struct device *dev)
|
||||
{
|
||||
return dev->type == &greybus_interface_type;
|
||||
}
|
||||
|
||||
static inline int is_gb_connection(const struct device *dev)
|
||||
{
|
||||
return dev->type == &greybus_connection_type;
|
||||
}
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* __LINUX_GREYBUS_H */
|
||||
|
@ -31,7 +31,7 @@ static void gb_interface_release(struct device *dev)
|
||||
kfree(interface);
|
||||
}
|
||||
|
||||
static struct device_type greybus_interface_type = {
|
||||
struct device_type greybus_interface_type = {
|
||||
.name = "greybus_interface",
|
||||
.release = gb_interface_release,
|
||||
};
|
||||
|
@ -62,7 +62,7 @@ static void greybus_module_release(struct device *dev)
|
||||
kfree(gmod);
|
||||
}
|
||||
|
||||
static struct device_type greybus_module_type = {
|
||||
struct device_type greybus_module_type = {
|
||||
.name = "greybus_module",
|
||||
.release = greybus_module_release,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user