summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/greybus/interface.c2
-rw-r--r--drivers/staging/greybus/interface.h1
-rw-r--r--drivers/staging/greybus/module.c1
3 files changed, 3 insertions, 1 deletions
diff --git a/drivers/staging/greybus/interface.c b/drivers/staging/greybus/interface.c
index 01cefced7b69..3ad1c757d7e7 100644
--- a/drivers/staging/greybus/interface.c
+++ b/drivers/staging/greybus/interface.c
@@ -873,7 +873,7 @@ static int _gb_interface_activate(struct gb_interface *intf,
*type = GB_INTERFACE_TYPE_UNKNOWN;
- if (intf->ejected)
+ if (intf->ejected || intf->removed)
return -ENODEV;
ret = gb_interface_vsys_set(intf, true);
diff --git a/drivers/staging/greybus/interface.h b/drivers/staging/greybus/interface.h
index f52dfd09bb16..daa9759149a5 100644
--- a/drivers/staging/greybus/interface.h
+++ b/drivers/staging/greybus/interface.h
@@ -53,6 +53,7 @@ struct gb_interface {
bool disconnected;
bool ejected;
+ bool removed;
bool active;
bool enabled;
bool mode_switch;
diff --git a/drivers/staging/greybus/module.c b/drivers/staging/greybus/module.c
index d506fa0b3272..69f67ddbd4a3 100644
--- a/drivers/staging/greybus/module.c
+++ b/drivers/staging/greybus/module.c
@@ -186,6 +186,7 @@ static void gb_module_deregister_interface(struct gb_interface *intf)
intf->disconnected = true;
mutex_lock(&intf->mutex);
+ intf->removed = true;
gb_interface_disable(intf);
gb_interface_deactivate(intf);
mutex_unlock(&intf->mutex);