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

Commit bfe75681 authored by Deepak Katragadda's avatar Deepak Katragadda
Browse files

msm: subsystem-restart: Replace using wake lock APIs



Currently, the ssr framework uses the wake lock APIs. Instead,
use the power APIs directly.

Change-Id: If7a22be8f5bdcaa49a3f6a078a747063b88a9919
Signed-off-by: default avatarDeepak Katragadda <dkatraga@codeaurora.org>
parent cfb69012
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -123,9 +123,9 @@ struct restart_log {
/**
 * struct subsys_device - subsystem device
 * @desc: subsystem descriptor
 * @wake_lock: prevents suspend during subsystem_restart()
 * @wlname: name of @wake_lock
 * @work: context for subsystem_restart_wq_func() for this device
 * @ssr_wlock: prevents suspend during subsystem_restart()
 * @wlname: name of wakeup source
 * @track: state tracking and locking
 * @notify: subsys notify handle
 * @dev: device
@@ -142,10 +142,9 @@ struct restart_log {
 */
struct subsys_device {
	struct subsys_desc *desc;
	struct wake_lock wake_lock;
	char wlname[64];
	struct work_struct work;

	struct wakeup_source ssr_wlock;
	char wlname[64];
	struct subsys_tracking track;

	void *notify;
@@ -728,7 +727,7 @@ static void subsystem_restart_wq_func(struct work_struct *work)

	spin_lock_irqsave(&track->s_lock, flags);
	track->p_state = SUBSYS_NORMAL;
	wake_unlock(&dev->wake_lock);
	__pm_relax(&dev->ssr_wlock);
	spin_unlock_irqrestore(&track->s_lock, flags);
}

@@ -752,7 +751,7 @@ static void __subsystem_restart_dev(struct subsys_device *dev)
		if (dev->track.state == SUBSYS_ONLINE &&
		    track->p_state != SUBSYS_RESTARTING) {
			track->p_state = SUBSYS_CRASHED;
			wake_lock(&dev->wake_lock);
			__pm_stay_awake(&dev->ssr_wlock);
			queue_work(ssr_wq, &dev->work);
		} else {
			panic("Subsystem %s crashed during SSR!", name);
@@ -1017,7 +1016,7 @@ static void subsys_device_release(struct device *dev)
{
	struct subsys_device *subsys = to_subsys(dev);

	wake_lock_destroy(&subsys->wake_lock);
	wakeup_source_trash(&subsys->ssr_wlock);
	mutex_destroy(&subsys->track.lock);
	ida_simple_remove(&subsys_ida, subsys->id);
	kfree(subsys);
@@ -1317,7 +1316,7 @@ struct subsys_device *subsys_register(struct subsys_desc *desc)
	subsys->notify = subsys_notif_add_subsys(desc->name);

	snprintf(subsys->wlname, sizeof(subsys->wlname), "ssr(%s)", desc->name);
	wake_lock_init(&subsys->wake_lock, WAKE_LOCK_SUSPEND, subsys->wlname);
	wakeup_source_init(&subsys->ssr_wlock, subsys->wlname);
	INIT_WORK(&subsys->work, subsystem_restart_wq_func);
	spin_lock_init(&subsys->track.s_lock);

@@ -1371,7 +1370,7 @@ err_debugfs:
	mutex_destroy(&subsys->track.lock);
	ida_simple_remove(&subsys_ida, subsys->id);
err_ida:
	wake_lock_destroy(&subsys->wake_lock);
	wakeup_source_trash(&subsys->ssr_wlock);
	kfree(subsys);
	return ERR_PTR(ret);
}