* Copyright (c) 2014, The Linux Foundation. All rights reserved.
*/
+#include <linux/cleanup.h>
#include <linux/clk-provider.h>
#include <linux/err.h>
#include <linux/export.h>
unsigned long active_rate, sleep_rate;
int ret;
- mutex_lock(&rpm_smd_clk_lock);
+ guard(mutex)(&rpm_smd_clk_lock);
if (!r->rate)
- goto out;
+ return;
/* Take peer clock's rate into account only if it's enabled. */
if (peer->enabled)
active_rate = r->branch ? !!peer_rate : peer_rate;
ret = clk_smd_rpm_set_rate_active(r, active_rate);
if (ret)
- goto out;
+ return;
sleep_rate = r->branch ? !!peer_sleep_rate : peer_sleep_rate;
ret = clk_smd_rpm_set_rate_sleep(r, sleep_rate);
if (ret)
- goto out;
+ return;
r->enabled = false;
-
-out:
- mutex_unlock(&rpm_smd_clk_lock);
}
static int clk_smd_rpm_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long peer_rate = 0, peer_sleep_rate = 0;
int ret = 0;
- mutex_lock(&rpm_smd_clk_lock);
+ guard(mutex)(&rpm_smd_clk_lock);
if (!r->enabled)
- goto out;
+ return 0;
to_active_sleep(r, rate, &this_rate, &this_sleep_rate);
active_rate = max(this_rate, peer_rate);
ret = clk_smd_rpm_set_rate_active(r, active_rate);
if (ret)
- goto out;
+ return ret;
sleep_rate = max(this_sleep_rate, peer_sleep_rate);
ret = clk_smd_rpm_set_rate_sleep(r, sleep_rate);
if (ret)
- goto out;
+ return ret;
r->rate = rate;
-out:
- mutex_unlock(&rpm_smd_clk_lock);
-
- return ret;
+ return 0;
}
static long clk_smd_rpm_round_rate(struct clk_hw *hw, unsigned long rate,