6
6
*/
7
7
8
8
#include <linux/backlight.h>
9
+ #include <linux/cleanup.h>
9
10
#include <linux/err.h>
10
11
#include <linux/gpio/driver.h>
11
12
#include <linux/i2c.h>
@@ -94,7 +95,7 @@ static int attiny_lcd_power_enable(struct regulator_dev *rdev)
94
95
{
95
96
struct attiny_lcd * state = rdev_get_drvdata (rdev );
96
97
97
- mutex_lock (& state -> lock );
98
+ guard ( mutex ) (& state -> lock );
98
99
99
100
/* Ensure bridge, and tp stay in reset */
100
101
attiny_set_port_state (state , REG_PORTC , 0 );
@@ -115,16 +116,14 @@ static int attiny_lcd_power_enable(struct regulator_dev *rdev)
115
116
116
117
msleep (80 );
117
118
118
- mutex_unlock (& state -> lock );
119
-
120
119
return 0 ;
121
120
}
122
121
123
122
static int attiny_lcd_power_disable (struct regulator_dev * rdev )
124
123
{
125
124
struct attiny_lcd * state = rdev_get_drvdata (rdev );
126
125
127
- mutex_lock (& state -> lock );
126
+ guard ( mutex ) (& state -> lock );
128
127
129
128
regmap_write (rdev -> regmap , REG_PWM , 0 );
130
129
usleep_range (5000 , 10000 );
@@ -136,28 +135,24 @@ static int attiny_lcd_power_disable(struct regulator_dev *rdev)
136
135
attiny_set_port_state (state , REG_PORTC , 0 );
137
136
msleep (30 );
138
137
139
- mutex_unlock (& state -> lock );
140
-
141
138
return 0 ;
142
139
}
143
140
144
141
static int attiny_lcd_power_is_enabled (struct regulator_dev * rdev )
145
142
{
146
143
struct attiny_lcd * state = rdev_get_drvdata (rdev );
147
144
unsigned int data ;
148
- int ret , i ;
149
-
150
- mutex_lock ( & state -> lock );
151
-
152
- for ( i = 0 ; i < 10 ; i ++ ) {
153
- ret = regmap_read ( rdev -> regmap , REG_PORTC , & data );
154
- if (! ret )
155
- break ;
156
- usleep_range ( 10000 , 12000 );
145
+ int ret = 0 , i ;
146
+
147
+ scoped_guard ( mutex , & state -> lock ) {
148
+ for ( i = 0 ; i < 10 ; i ++ ) {
149
+ ret = regmap_read ( rdev -> regmap , REG_PORTC , & data );
150
+ if (! ret )
151
+ break ;
152
+ usleep_range ( 10000 , 12000 ) ;
153
+ }
157
154
}
158
155
159
- mutex_unlock (& state -> lock );
160
-
161
156
if (ret < 0 )
162
157
return ret ;
163
158
@@ -190,16 +185,14 @@ static int attiny_update_status(struct backlight_device *bl)
190
185
int brightness = backlight_get_brightness (bl );
191
186
int ret , i ;
192
187
193
- mutex_lock (& state -> lock );
188
+ guard ( mutex ) (& state -> lock );
194
189
195
190
for (i = 0 ; i < 10 ; i ++ ) {
196
191
ret = regmap_write (regmap , REG_PWM , brightness );
197
192
if (!ret )
198
193
break ;
199
194
}
200
195
201
- mutex_unlock (& state -> lock );
202
-
203
196
return ret ;
204
197
}
205
198
@@ -217,7 +210,7 @@ static void attiny_gpio_set(struct gpio_chip *gc, unsigned int off, int val)
217
210
struct attiny_lcd * state = gpiochip_get_data (gc );
218
211
u8 last_val ;
219
212
220
- mutex_lock (& state -> lock );
213
+ guard ( mutex ) (& state -> lock );
221
214
222
215
last_val = attiny_get_port_state (state , mappings [off ].reg );
223
216
if (val )
@@ -239,8 +232,6 @@ static void attiny_gpio_set(struct gpio_chip *gc, unsigned int off, int val)
239
232
240
233
msleep (100 );
241
234
}
242
-
243
- mutex_unlock (& state -> lock );
244
235
}
245
236
246
237
static int attiny_i2c_read (struct i2c_client * client , u8 reg , unsigned int * buf )
0 commit comments