Commit 62fcd4ca authored by Tomasz Bursztyka's avatar Tomasz Bursztyka Committed by Anas Nashif
Browse files

sensors: Using new GPIO API callbacks



Adapting GPIO based sensors to use the new callback format.

Change-Id: Ibdc68bf80a2ee42dcaf25c7a6e4431f9b64dc20a
Signed-off-by: default avatarTomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
parent fea1c49b
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <device.h>
#include <misc/util.h>
#include <stdint.h>
#include <gpio.h>

#ifndef CONFIG_SENSOR_DEBUG
#define DBG(...) { ; }
@@ -146,6 +147,7 @@ struct bma280_data {

#ifdef CONFIG_BMA280_TRIGGER
	struct device *gpio;
	struct gpio_callback gpio_cb;

	struct sensor_trigger data_ready_trigger;
	sensor_trigger_handler_t data_ready_handler;
+15 −8
Original line number Diff line number Diff line
@@ -15,15 +15,12 @@
 */

#include <device.h>
#include <gpio.h>
#include <misc/util.h>
#include <nanokernel.h>
#include <sensor.h>

#include "sensor_bma280.h"

extern struct bma280_data bma280_driver;

int bma280_attr_set(struct device *dev,
		    enum sensor_channel chan,
		    enum sensor_attribute attr,
@@ -62,14 +59,20 @@ int bma280_attr_set(struct device *dev,
	return 0;
}

static void bma280_gpio_callback(struct device *dev, uint32_t pin)
static void bma280_gpio_callback(struct device *dev,
				 struct gpio_callback *cb, uint32_t pins)
{
	gpio_pin_disable_callback(dev, pin);
	struct bma280_data *drv_data =
		CONTAINER_OF(cb, struct bma280_data, gpio_cb);

	ARG_UNUSED(pins);

	gpio_pin_disable_callback(dev, CONFIG_BMA280_GPIO_PIN_NUM);

#if defined(CONFIG_BMA280_TRIGGER_OWN_FIBER)
	nano_sem_give(&bma280_driver.gpio_sem);
	nano_sem_give(&drv_data->gpio_sem);
#elif defined(CONFIG_BMA280_TRIGGER_GLOBAL_FIBER)
	nano_isr_fifo_put(sensor_get_work_fifo(), &bma280_driver.work);
	nano_isr_fifo_put(sensor_get_work_fifo(), &drv_data->work);
#endif
}

@@ -203,7 +206,11 @@ int bma280_init_interrupt(struct device *dev)
			   GPIO_DIR_IN | GPIO_INT | GPIO_INT_LEVEL |
			   GPIO_INT_ACTIVE_HIGH | GPIO_INT_DEBOUNCE);

	rc = gpio_set_callback(drv_data->gpio, bma280_gpio_callback);
	gpio_init_callback(&drv_data->gpio_cb,
			   bma280_gpio_callback,
			   BIT(CONFIG_BMA280_GPIO_PIN_NUM));

	rc = gpio_add_callback(drv_data->gpio, &drv_data->gpio_cb);
	if (rc != 0) {
		DBG("Could not set gpio callback\n");
		return -EIO;
+22 −5
Original line number Diff line number Diff line
@@ -29,7 +29,6 @@

#include "sensor_bmc150_magn.h"

static struct bmc150_magn_data bmc150_magn_data;

#ifdef CONFIG_SENSOR_DEBUG
#include <misc/printk.h>
@@ -575,11 +574,20 @@ static int bmc150_magn_trigger_set(struct device *dev,
#endif

#if defined(CONFIG_BMC150_MAGN_TRIGGER_DRDY)
static void bmc150_magn_gpio_drdy_callback(struct device *dev, uint32_t pin)
static void bmc150_magn_gpio_drdy_callback(struct device *dev,
					   struct gpio_callback *cb,
					   uint32_t pins)
{
	gpio_pin_disable_callback(dev, pin);
	struct bmc150_magn_data *data =
		CONTAINER_OF(cb, struct bmc150_magn_data, gpio_cb);
	const struct bmc150_magn_config * const config =
		data->dev->config->config_info;

	nano_isr_sem_give(&bmc150_magn_data.sem);
	ARG_UNUSED(pins);

	gpio_pin_disable_callback(dev, config->gpio_drdy_int_pin);

	nano_isr_sem_give(&data->sem);
}

static void bmc150_magn_fiber_main(int arg1, int gpio_pin)
@@ -747,10 +755,17 @@ int bmc150_magn_init(struct device *dev)
	gpio_pin_configure(data->gpio_drdy, config->gpio_drdy_int_pin,
			   GPIO_DIR_IN | GPIO_INT | GPIO_INT_EDGE |
			   GPIO_INT_ACTIVE_LOW | GPIO_INT_DEBOUNCE);
	if (gpio_set_callback(data->gpio_drdy, bmc150_magn_gpio_drdy_callback) != 0) {

	gpio_init_callback(&data->gpio_cb,
			   bmc150_magn_gpio_drdy_callback,
			   BIT(config->gpio_drdy_int_pin));

	if (gpio_add_callback(data->gpio_drdy, &data->gpio_cb) != 0) {
		sensor_dbg("failed to set gpio callback\n");
		return -EIO;
	}

	data->dev = dev;
#endif

	return 0;
@@ -765,5 +780,7 @@ static struct bmc150_magn_config bmc150_magn_config = {
#endif
};

struct bmc150_magn_data bmc150_magn_data;

DEVICE_INIT(bmc150_magn, CONFIG_BMC150_MAGN_DEV_NAME, bmc150_magn_init, &bmc150_magn_data,
	    &bmc150_magn_config, NANOKERNEL, CONFIG_BMC150_MAGN_INIT_PRIORITY);
+2 −0
Original line number Diff line number Diff line
@@ -130,6 +130,8 @@ struct bmc150_magn_data {
#if defined(CONFIG_BMC150_MAGN_TRIGGER_DRDY)
	char __stack bmc150_magn_fiber_stack[CONFIG_BMC150_MAGN_TRIGGER_FIBER_STACK];
	struct device *gpio_drdy;
	struct device *dev;
	struct gpio_callback gpio_cb;
	struct sensor_trigger trigger_drdy;
	sensor_trigger_handler_t handler_drdy;
#endif
+18 −6
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#include <gpio.h>
#include <nanokernel.h>
#include <sensor.h>
#include <misc/util.h>

#include "sensor_hdc1008.h"

@@ -29,12 +30,17 @@
#define DBG printk
#endif /* CONFIG_SENSOR_DEBUG */

static struct hdc1008_data hdc1008_driver;

static void hdc1008_gpio_callback(struct device *dev, uint32_t pin)
static void hdc1008_gpio_callback(struct device *dev,
				  struct gpio_callback *cb, uint32_t pins)
{
	gpio_pin_disable_callback(dev, pin);
	nano_sem_give(&hdc1008_driver.data_sem);
	struct hdc1008_data *drv_data =
		CONTAINER_OF(cb, struct hdc1008_data, gpio_cb);

	ARG_UNUSED(pins);

	gpio_pin_disable_callback(dev, CONFIG_HDC1008_GPIO_PIN_NUM);
	nano_sem_give(&drv_data->data_sem);
}

static int hdc1008_sample_fetch(struct device *dev)
@@ -131,7 +137,11 @@ int hdc1008_init(struct device *dev)
			   GPIO_DIR_IN | GPIO_INT | GPIO_INT_EDGE |
			   GPIO_INT_ACTIVE_LOW | GPIO_INT_DEBOUNCE);

	rc = gpio_set_callback(drv_data->gpio, hdc1008_gpio_callback);
	gpio_init_callback(&drv_data->gpio_cb,
			   hdc1008_gpio_callback,
			   BIT(CONFIG_HDC1008_GPIO_PIN_NUM));

	rc = gpio_add_callback(drv_data->gpio, &drv_data->gpio_cb);
	if (rc != 0) {
		DBG("Failed to set GPIO callback\n");
		return -EIO;
@@ -140,5 +150,7 @@ int hdc1008_init(struct device *dev)
	return 0;
}

DEVICE_INIT(hdc1008, CONFIG_HDC1008_NAME, hdc1008_init, &hdc1008_driver,
struct hdc1008_data hdc1008_data;

DEVICE_INIT(hdc1008, CONFIG_HDC1008_NAME, hdc1008_init, &hdc1008_data,
	    NULL, SECONDARY, CONFIG_HDC1008_INIT_PRIORITY);
Loading