Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be27b3dc authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

ACPI / dock: Add .uevent() callback to struct acpi_hotplug_context



In order to avoid the need to register special ACPI dock
operations for SATA devices add a .uevent() callback pointer to
struct acpi_hotplug_context and make dock_hotplug_event() use that
callback if available.  Also rename the existing .event() callback
in struct acpi_hotplug_context to .notify() to avoid possible
confusion in the future.

Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent edf5bf34
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -203,10 +203,19 @@ static void dock_hotplug_event(struct dock_dependent_device *dd, u32 event,
			fixup(adev);
			return;
		}
	} else if (cb_type == DOCK_CALL_UEVENT) {
		void (*uevent)(struct acpi_device *, u32);

		uevent = adev->hp->uevent;
		if (uevent) {
			acpi_unlock_hp_context();
			uevent(adev, event);
			return;
		}
	} else {
		int (*notify)(struct acpi_device *, u32);

		notify = adev->hp->event;
		notify = adev->hp->notify;
		if (notify) {
			acpi_unlock_hp_context();
			notify(adev, event);
+4 −4
Original line number Diff line number Diff line
@@ -496,17 +496,17 @@ void acpi_device_hotplug(void *data, u32 src)
			goto err_out;
		}
	} else {
		int (*event)(struct acpi_device *, u32);
		int (*notify)(struct acpi_device *, u32);

		acpi_lock_hp_context();
		event = adev->hp ? adev->hp->event : NULL;
		notify = adev->hp ? adev->hp->notify : NULL;
		acpi_unlock_hp_context();
		/*
		 * There may be additional notify handlers for device objects
		 * without the .event() callback, so ignore them here.
		 */
		if (event)
			error = event(adev, src);
		if (notify)
			error = notify(adev, src);
		else
			goto out;
	}
+4 −4
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@
static LIST_HEAD(bridge_list);
static DEFINE_MUTEX(bridge_mutex);

static int acpiphp_hotplug_event(struct acpi_device *adev, u32 type);
static int acpiphp_hotplug_notify(struct acpi_device *adev, u32 type);
static void acpiphp_post_dock_fixup(struct acpi_device *adev);
static void acpiphp_sanitize_bus(struct pci_bus *bus);
static void acpiphp_set_hpp_values(struct pci_bus *bus);
@@ -81,7 +81,7 @@ static struct acpiphp_context *acpiphp_init_context(struct acpi_device *adev)
		return NULL;

	context->refcount = 1;
	acpi_set_hp_context(adev, &context->hp, acpiphp_hotplug_event,
	acpi_set_hp_context(adev, &context->hp, acpiphp_hotplug_notify, NULL,
			    acpiphp_post_dock_fixup);
	return context;
}
@@ -400,7 +400,7 @@ static void cleanup_bridge(struct acpiphp_bridge *bridge)
			struct acpi_device *adev = func_to_acpi_device(func);

			acpi_lock_hp_context();
			adev->hp->event = NULL;
			adev->hp->notify = NULL;
			adev->hp->fixup = NULL;
			acpi_unlock_hp_context();
		}
@@ -833,7 +833,7 @@ static void hotplug_event(u32 type, struct acpiphp_context *context)
		put_bridge(bridge);
}

static int acpiphp_hotplug_event(struct acpi_device *adev, u32 type)
static int acpiphp_hotplug_notify(struct acpi_device *adev, u32 type)
{
	struct acpiphp_context *context;

+6 −3
Original line number Diff line number Diff line
@@ -143,7 +143,8 @@ struct acpi_scan_handler {

struct acpi_hotplug_context {
	struct acpi_device *self;
	int (*event)(struct acpi_device *, u32);
	int (*notify)(struct acpi_device *, u32);
	void (*uevent)(struct acpi_device *, u32);
	void (*fixup)(struct acpi_device *);
};

@@ -367,11 +368,13 @@ static inline void acpi_set_device_status(struct acpi_device *adev, u32 sta)

static inline void acpi_set_hp_context(struct acpi_device *adev,
				       struct acpi_hotplug_context *hp,
				       int (*event)(struct acpi_device *, u32),
				       int (*notify)(struct acpi_device *, u32),
				       void (*uevent)(struct acpi_device *, u32),
				       void (*fixup)(struct acpi_device *))
{
	hp->self = adev;
	hp->event = event;
	hp->notify = notify;
	hp->uevent = uevent;
	hp->fixup = fixup;
	adev->hp = hp;
}