From 27b9e257dd57fba0d63d996bf050fcbd94d998d7 Mon Sep 17 00:00:00 2001 From: Johan Hovold Date: Wed, 20 Jul 2016 16:40:21 +0200 Subject: [PATCH] greybus: interface: do not read DME during reactivation It will soon be possible to reactivate an interface that has been powered down after already having been activated. In that case there's no need to re-read the DME attributes as part of activation as the values are already cached. Reviewed-by: Sandeep Patil Signed-off-by: Johan Hovold Reviewed-by: Alex Elder Reviewed-by: Viresh Kumar Reviewed-by: Patrick Titiano Signed-off-by: Greg Kroah-Hartman --- drivers/staging/greybus/interface.c | 12 +++++++++++- drivers/staging/greybus/interface.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/staging/greybus/interface.c b/drivers/staging/greybus/interface.c index e21491b81a7d..9fe6764a6ac2 100644 --- a/drivers/staging/greybus/interface.c +++ b/drivers/staging/greybus/interface.c @@ -95,6 +95,10 @@ static int gb_interface_read_dme(struct gb_interface *intf) { int ret; + /* DME attributes have already been read */ + if (intf->dme_read) + return 0; + ret = gb_interface_dme_attr_get(intf, DME_DDBL1_MANUFACTURERID, &intf->ddbl1_manufacturer_id); if (ret) @@ -111,7 +115,13 @@ static int gb_interface_read_dme(struct gb_interface *intf) intf->quirks |= GB_INTERFACE_QUIRK_NO_INIT_STATUS; } - return gb_interface_read_ara_dme(intf); + ret = gb_interface_read_ara_dme(intf); + if (ret) + return ret; + + intf->dme_read = true; + + return 0; } static int gb_interface_route_create(struct gb_interface *intf) diff --git a/drivers/staging/greybus/interface.h b/drivers/staging/greybus/interface.h index bba1881aee56..f52dfd09bb16 100644 --- a/drivers/staging/greybus/interface.h +++ b/drivers/staging/greybus/interface.h @@ -56,6 +56,7 @@ struct gb_interface { bool active; bool enabled; bool mode_switch; + bool dme_read; struct work_struct mode_switch_work; struct completion mode_switch_completion;