Skip to content

Commit 064f5f0

Browse files
Tomasz Bursztykanashif
authored andcommitted
drivers/gpio: Manage callback addition/removal properly
It needs to verify if the callback was not already installed, and if so: if is was in controller's list. It should return an error in case the node is not found though it was requested to be removed. If already inserted, it will be silently removed but added again, to avoid circular list as stated in the bug. Fixes zephyrproject-rtos#11394 Signed-off-by: Tomasz Bursztyka <[email protected]>
1 parent 4043909 commit 064f5f0

20 files changed

+37
-59
lines changed

drivers/gpio/gpio_atmel_sam3.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,9 +202,7 @@ static int gpio_sam3_manage_callback(struct device *dev,
202202
{
203203
struct gpio_sam3_runtime *context = dev->driver_data;
204204

205-
_gpio_manage_callback(&context->cb, callback, set);
206-
207-
return 0;
205+
return _gpio_manage_callback(&context->cb, callback, set);
208206
}
209207

210208
static int gpio_sam3_enable_callback(struct device *dev,

drivers/gpio/gpio_cc2650.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,8 +297,7 @@ static int gpio_cc2650_manage_callback(struct device *port,
297297
{
298298
struct gpio_cc2650_data *data = port->driver_data;
299299

300-
_gpio_manage_callback(&data->callbacks, callback, set);
301-
return 0;
300+
return _gpio_manage_callback(&data->callbacks, callback, set);
302301
}
303302

304303
static int gpio_cc2650_enable_callback(struct device *port,

drivers/gpio/gpio_cc32xx.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,7 @@ static int gpio_cc32xx_manage_callback(struct device *dev,
129129
{
130130
struct gpio_cc32xx_data *data = DEV_DATA(dev);
131131

132-
_gpio_manage_callback(&data->callbacks, callback, set);
133-
134-
return 0;
132+
return _gpio_manage_callback(&data->callbacks, callback, set);
135133
}
136134

137135

drivers/gpio/gpio_cmsdk_ahb.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,9 +217,7 @@ static int gpio_cmsdk_ahb_manage_callback(struct device *dev,
217217
{
218218
struct gpio_cmsdk_ahb_dev_data *data = dev->driver_data;
219219

220-
_gpio_manage_callback(&data->gpio_cb, callback, set);
221-
222-
return 0;
220+
return _gpio_manage_callback(&data->gpio_cb, callback, set);
223221
}
224222

225223
static int gpio_cmsdk_ahb_enable_callback(struct device *dev,

drivers/gpio/gpio_dw.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -291,9 +291,7 @@ static inline int gpio_dw_manage_callback(struct device *port,
291291
{
292292
struct gpio_dw_runtime *context = port->driver_data;
293293

294-
_gpio_manage_callback(&context->callbacks, callback, set);
295-
296-
return 0;
294+
return _gpio_manage_callback(&context->callbacks, callback, set);
297295
}
298296

299297
static inline int gpio_dw_enable_callback(struct device *port, int access_op,

drivers/gpio/gpio_esp32.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,7 @@ static int gpio_esp32_manage_callback(struct device *dev,
210210
{
211211
struct gpio_esp32_data *data = dev->driver_data;
212212

213-
_gpio_manage_callback(&data->cb, callback, set);
214-
215-
return 0;
213+
return _gpio_manage_callback(&data->cb, callback, set);
216214
}
217215

218216
static int gpio_esp32_enable_callback(struct device *dev,

drivers/gpio/gpio_gecko.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,9 +192,7 @@ static int gpio_gecko_manage_callback(struct device *dev,
192192
{
193193
struct gpio_gecko_data *data = dev->driver_data;
194194

195-
_gpio_manage_callback(&data->callbacks, callback, set);
196-
197-
return 0;
195+
return _gpio_manage_callback(&data->callbacks, callback, set);
198196
}
199197

200198
static int gpio_gecko_enable_callback(struct device *dev,

drivers/gpio/gpio_imx.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,7 @@ static int imx_gpio_manage_callback(struct device *dev,
109109
{
110110
struct imx_gpio_data *data = dev->driver_data;
111111

112-
_gpio_manage_callback(&data->callbacks, callback, set);
113-
114-
return 0;
112+
return _gpio_manage_callback(&data->callbacks, callback, set);
115113
}
116114

117115
static int imx_gpio_enable_callback(struct device *dev,

drivers/gpio/gpio_intel_apl.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -338,9 +338,7 @@ static int gpio_intel_apl_manage_callback(struct device *dev,
338338
{
339339
struct gpio_intel_apl_data *data = dev->driver_data;
340340

341-
_gpio_manage_callback(&data->cb, callback, set);
342-
343-
return 0;
341+
return _gpio_manage_callback(&data->cb, callback, set);
344342
}
345343

346344
static int gpio_intel_apl_enable_callback(struct device *dev,

drivers/gpio/gpio_mcux.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,7 @@ static int gpio_mcux_manage_callback(struct device *dev,
174174
{
175175
struct gpio_mcux_data *data = dev->driver_data;
176176

177-
_gpio_manage_callback(&data->callbacks, callback, set);
178-
179-
return 0;
177+
return _gpio_manage_callback(&data->callbacks, callback, set);
180178
}
181179

182180
static int gpio_mcux_enable_callback(struct device *dev,
@@ -412,4 +410,3 @@ static int gpio_mcux_porte_init(struct device *dev)
412410
#endif
413411
}
414412
#endif /* CONFIG_GPIO_MCUX_PORTE */
415-

0 commit comments

Comments
 (0)