44 * Copyright (c) 2022, Linaro Ltd
55 */
66#include <linux/auxiliary_bus.h>
7+ #include <linux/cleanup.h>
78#include <linux/delay.h>
89#include <linux/module.h>
910#include <linux/of.h>
@@ -100,15 +101,13 @@ void pmic_glink_client_register(struct pmic_glink_client *client)
100101 struct pmic_glink * pg = client -> pg ;
101102 unsigned long flags ;
102103
103- mutex_lock (& pg -> state_lock );
104+ guard ( mutex ) (& pg -> state_lock );
104105 spin_lock_irqsave (& pg -> client_lock , flags );
105106
106107 list_add (& client -> node , & pg -> clients );
107108 client -> pdr_notify (client -> priv , pg -> client_state );
108109
109110 spin_unlock_irqrestore (& pg -> client_lock , flags );
110- mutex_unlock (& pg -> state_lock );
111-
112111}
113112EXPORT_SYMBOL_GPL (pmic_glink_client_register );
114113
@@ -119,26 +118,25 @@ int pmic_glink_send(struct pmic_glink_client *client, void *data, size_t len)
119118 unsigned long start ;
120119 int ret ;
121120
122- mutex_lock (& pg -> state_lock );
121+ guard ( mutex ) (& pg -> state_lock );
123122 if (!pg -> ept ) {
124- ret = - ECONNRESET ;
125- } else {
126- start = jiffies ;
127- for (;;) {
128- ret = rpmsg_send (pg -> ept , data , len );
129- if (ret != - EAGAIN )
130- break ;
131-
132- if (timeout_reached ) {
133- ret = - ETIMEDOUT ;
134- break ;
135- }
136-
137- usleep_range (1000 , 5000 );
138- timeout_reached = time_after (jiffies , start + PMIC_GLINK_SEND_TIMEOUT );
123+ return - ECONNRESET ;
124+ }
125+
126+ start = jiffies ;
127+ for (;;) {
128+ ret = rpmsg_send (pg -> ept , data , len );
129+ if (ret != - EAGAIN )
130+ break ;
131+
132+ if (timeout_reached ) {
133+ ret = - ETIMEDOUT ;
134+ break ;
139135 }
136+
137+ usleep_range (1000 , 5000 );
138+ timeout_reached = time_after (jiffies , start + PMIC_GLINK_SEND_TIMEOUT );
140139 }
141- mutex_unlock (& pg -> state_lock );
142140
143141 return ret ;
144142}
@@ -227,51 +225,42 @@ static void pmic_glink_pdr_callback(int state, char *svc_path, void *priv)
227225{
228226 struct pmic_glink * pg = priv ;
229227
230- mutex_lock (& pg -> state_lock );
228+ guard ( mutex ) (& pg -> state_lock );
231229 pg -> pdr_state = state ;
232230
233231 pmic_glink_state_notify_clients (pg );
234- mutex_unlock (& pg -> state_lock );
235232}
236233
237234static int pmic_glink_rpmsg_probe (struct rpmsg_device * rpdev )
238235{
239236 struct pmic_glink * pg = __pmic_glink ;
240- int ret = 0 ;
241237
242- mutex_lock (& __pmic_glink_lock );
243- if (!pg ) {
244- ret = dev_err_probe (& rpdev -> dev , - ENODEV , "no pmic_glink device to attach to\n" );
245- goto out_unlock ;
246- }
238+ guard (mutex )(& __pmic_glink_lock );
239+ pg = __pmic_glink ;
240+ if (!pg )
241+ return dev_err_probe (& rpdev -> dev , - ENODEV , "no pmic_glink device to attach to\n" );
247242
248243 dev_set_drvdata (& rpdev -> dev , pg );
249244
250- mutex_lock (& pg -> state_lock );
245+ guard ( mutex ) (& pg -> state_lock );
251246 pg -> ept = rpdev -> ept ;
252247 pmic_glink_state_notify_clients (pg );
253- mutex_unlock (& pg -> state_lock );
254248
255- out_unlock :
256- mutex_unlock (& __pmic_glink_lock );
257- return ret ;
249+ return 0 ;
258250}
259251
260252static void pmic_glink_rpmsg_remove (struct rpmsg_device * rpdev )
261253{
262254 struct pmic_glink * pg ;
263255
264- mutex_lock (& __pmic_glink_lock );
256+ guard ( mutex ) (& __pmic_glink_lock );
265257 pg = __pmic_glink ;
266258 if (!pg )
267- goto out_unlock ;
259+ return ;
268260
269- mutex_lock (& pg -> state_lock );
261+ guard ( mutex ) (& pg -> state_lock );
270262 pg -> ept = NULL ;
271263 pmic_glink_state_notify_clients (pg );
272- mutex_unlock (& pg -> state_lock );
273- out_unlock :
274- mutex_unlock (& __pmic_glink_lock );
275264}
276265
277266static const struct rpmsg_device_id pmic_glink_rpmsg_id_match [] = {
@@ -378,9 +367,8 @@ static void pmic_glink_remove(struct platform_device *pdev)
378367 if (pg -> client_mask & BIT (PMIC_GLINK_CLIENT_UCSI ))
379368 pmic_glink_del_aux_device (pg , & pg -> ucsi_aux );
380369
381- mutex_lock (& __pmic_glink_lock );
370+ guard ( mutex ) (& __pmic_glink_lock );
382371 __pmic_glink = NULL ;
383- mutex_unlock (& __pmic_glink_lock );
384372}
385373
386374static const unsigned long pmic_glink_sc8280xp_client_mask = BIT (PMIC_GLINK_CLIENT_BATT ) |
0 commit comments