From 5f9fddd9d5917a1ef95cc91dff79c04b09d9bbbd Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Mon, 30 Aug 2021 20:50:09 +0200 Subject: [PATCH] drivers: sensor: adxl362: improve error handling Error handling was missing in numerous places, mostly on GPIO related callbacks. Some error codes were not correct (-EINVAL vs -ENODEV) and in some cases error was not propagated correctly. Fixes #38117 Signed-off-by: Gerard Marull-Paretas --- drivers/sensor/adxl362/adxl362_trigger.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/sensor/adxl362/adxl362_trigger.c b/drivers/sensor/adxl362/adxl362_trigger.c index 883576b9a2b..b8b1ea11a41 100644 --- a/drivers/sensor/adxl362/adxl362_trigger.c +++ b/drivers/sensor/adxl362/adxl362_trigger.c @@ -124,24 +124,26 @@ int adxl362_init_interrupt(const struct device *dev) if (!device_is_ready(cfg->interrupt.port)) { LOG_ERR("GPIO port %s not ready", cfg->interrupt.port->name); - return -EINVAL; + return -ENODEV; } ret = adxl362_set_interrupt_mode(dev, CONFIG_ADXL362_INTERRUPT_MODE); - - if (ret) { - return -EFAULT; + if (ret < 0) { + return ret; } - gpio_pin_configure_dt(&cfg->interrupt, GPIO_INPUT); + ret = gpio_pin_configure_dt(&cfg->interrupt, GPIO_INPUT); + if (ret < 0) { + return ret; + } gpio_init_callback(&drv_data->gpio_cb, adxl362_gpio_callback, BIT(cfg->interrupt.pin)); - if (gpio_add_callback(cfg->interrupt.port, &drv_data->gpio_cb) < 0) { - LOG_ERR("Failed to set gpio callback!"); - return -EIO; + ret = gpio_add_callback(cfg->interrupt.port, &drv_data->gpio_cb); + if (ret < 0) { + return ret; } drv_data->dev = dev; @@ -158,7 +160,11 @@ int adxl362_init_interrupt(const struct device *dev) drv_data->work.handler = adxl362_work_cb; #endif - gpio_pin_interrupt_configure_dt(&cfg->interrupt, GPIO_INT_EDGE_TO_ACTIVE); + ret = gpio_pin_interrupt_configure_dt(&cfg->interrupt, + GPIO_INT_EDGE_TO_ACTIVE); + if (ret < 0) { + return ret; + } return 0; }