diff options
Diffstat (limited to 'drivers/platform/surface/aggregator')
| -rw-r--r-- | drivers/platform/surface/aggregator/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/platform/surface/aggregator/bus.c | 24 | ||||
| -rw-r--r-- | drivers/platform/surface/aggregator/bus.h | 3 | ||||
| -rw-r--r-- | drivers/platform/surface/aggregator/core.c | 3 | 
4 files changed, 11 insertions, 20 deletions
| diff --git a/drivers/platform/surface/aggregator/Kconfig b/drivers/platform/surface/aggregator/Kconfig index fd6dc452f3e8..cab020324256 100644 --- a/drivers/platform/surface/aggregator/Kconfig +++ b/drivers/platform/surface/aggregator/Kconfig @@ -4,6 +4,7 @@  menuconfig SURFACE_AGGREGATOR  	tristate "Microsoft Surface System Aggregator Module Subsystem and Drivers"  	depends on SERIAL_DEV_BUS +	depends on ACPI  	select CRC_CCITT  	help  	  The Surface System Aggregator Module (Surface SAM or SSAM) is an diff --git a/drivers/platform/surface/aggregator/bus.c b/drivers/platform/surface/aggregator/bus.c index 0a40dd9c94ed..abbbb5b08b07 100644 --- a/drivers/platform/surface/aggregator/bus.c +++ b/drivers/platform/surface/aggregator/bus.c @@ -374,27 +374,19 @@ static int ssam_remove_device(struct device *dev, void *_data)  }  /** - * ssam_controller_remove_clients() - Remove SSAM client devices registered as - * direct children under the given controller. - * @ctrl: The controller to remove all direct clients for. + * ssam_remove_clients() - Remove SSAM client devices registered as direct + * children under the given parent device. + * @dev: The (parent) device to remove all direct clients for.   * - * Remove all SSAM client devices registered as direct children under the - * given controller. Note that this only accounts for direct children of the - * controller device. This does not take care of any client devices where the - * parent device has been manually set before calling ssam_device_add. Refer - * to ssam_device_add()/ssam_device_remove() for more details on those cases. - * - * To avoid new devices being added in parallel to this call, the main - * controller lock (not statelock) must be held during this (and if - * necessary, any subsequent deinitialization) call. + * Remove all SSAM client devices registered as direct children under the given + * device. Note that this only accounts for direct children of the device. + * Refer to ssam_device_add()/ssam_device_remove() for more details.   */ -void ssam_controller_remove_clients(struct ssam_controller *ctrl) +void ssam_remove_clients(struct device *dev)  { -	struct device *dev; - -	dev = ssam_controller_device(ctrl);  	device_for_each_child_reverse(dev, NULL, ssam_remove_device);  } +EXPORT_SYMBOL_GPL(ssam_remove_clients);  /**   * ssam_bus_register() - Register and set-up the SSAM client device bus. diff --git a/drivers/platform/surface/aggregator/bus.h b/drivers/platform/surface/aggregator/bus.h index ed032c2cbdb2..6964ee84e79c 100644 --- a/drivers/platform/surface/aggregator/bus.h +++ b/drivers/platform/surface/aggregator/bus.h @@ -12,14 +12,11 @@  #ifdef CONFIG_SURFACE_AGGREGATOR_BUS -void ssam_controller_remove_clients(struct ssam_controller *ctrl); -  int ssam_bus_register(void);  void ssam_bus_unregister(void);  #else /* CONFIG_SURFACE_AGGREGATOR_BUS */ -static inline void ssam_controller_remove_clients(struct ssam_controller *ctrl) {}  static inline int ssam_bus_register(void) { return 0; }  static inline void ssam_bus_unregister(void) {} diff --git a/drivers/platform/surface/aggregator/core.c b/drivers/platform/surface/aggregator/core.c index c61bbeeec2df..d384d36098c2 100644 --- a/drivers/platform/surface/aggregator/core.c +++ b/drivers/platform/surface/aggregator/core.c @@ -22,6 +22,7 @@  #include <linux/sysfs.h>  #include <linux/surface_aggregator/controller.h> +#include <linux/surface_aggregator/device.h>  #include "bus.h"  #include "controller.h" @@ -735,7 +736,7 @@ static void ssam_serial_hub_remove(struct serdev_device *serdev)  	ssam_controller_lock(ctrl);  	/* Remove all client devices. */ -	ssam_controller_remove_clients(ctrl); +	ssam_remove_clients(&serdev->dev);  	/* Act as if suspending to silence events. */  	status = ssam_ctrl_notif_display_off(ctrl); |