thunderbolt: Add details to router uevent
Expose two environment variables for routers as part of the initial uevent: USB4_VERSION=1.0 USB4_TYPE=host|device|hub Userspace can use this information to expose more details about each connected device. Only USB4 devices have USB4_VERSION but all devices have USB4_TYPE. Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2e7a5b3e22
commit
2f608ba196
@ -1835,6 +1835,39 @@ static void tb_switch_release(struct device *dev)
|
||||
kfree(sw);
|
||||
}
|
||||
|
||||
static int tb_switch_uevent(struct device *dev, struct kobj_uevent_env *env)
|
||||
{
|
||||
struct tb_switch *sw = tb_to_switch(dev);
|
||||
const char *type;
|
||||
|
||||
if (sw->config.thunderbolt_version == USB4_VERSION_1_0) {
|
||||
if (add_uevent_var(env, "USB4_VERSION=1.0"))
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (!tb_route(sw)) {
|
||||
type = "host";
|
||||
} else {
|
||||
const struct tb_port *port;
|
||||
bool hub = false;
|
||||
|
||||
/* Device is hub if it has any downstream ports */
|
||||
tb_switch_for_each_port(sw, port) {
|
||||
if (!port->disabled && !tb_is_upstream_port(port) &&
|
||||
tb_port_is_null(port)) {
|
||||
hub = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
type = hub ? "hub" : "device";
|
||||
}
|
||||
|
||||
if (add_uevent_var(env, "USB4_TYPE=%s", type))
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Currently only need to provide the callbacks. Everything else is handled
|
||||
* in the connection manager.
|
||||
@ -1868,6 +1901,7 @@ static const struct dev_pm_ops tb_switch_pm_ops = {
|
||||
struct device_type tb_switch_type = {
|
||||
.name = "thunderbolt_device",
|
||||
.release = tb_switch_release,
|
||||
.uevent = tb_switch_uevent,
|
||||
.pm = &tb_switch_pm_ops,
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user