drivers: sensor: hmc5883l: Update driver to use gpio_dt_spec
Simplify driver by using gpio_dt_spec for bus access.
Signed-off-by: Benjamin Björnsson <benjamin.bjornsson@gmail.com>
diff --git a/drivers/sensor/hmc5883l/hmc5883l.c b/drivers/sensor/hmc5883l/hmc5883l.c
index 6d71117..06420c8 100644
--- a/drivers/sensor/hmc5883l/hmc5883l.c
+++ b/drivers/sensor/hmc5883l/hmc5883l.c
@@ -158,6 +158,8 @@
static const struct hmc5883l_config hmc5883l_config_inst = {
.i2c = I2C_DT_SPEC_INST_GET(0),
+ IF_ENABLED(CONFIG_HMC5883L_TRIGGER,
+ (.int_gpio = GPIO_DT_SPEC_INST_GET(0, int_gpios),))
};
DEVICE_DT_INST_DEFINE(0, hmc5883l_init, NULL, &hmc5883l_data_inst,
diff --git a/drivers/sensor/hmc5883l/hmc5883l.h b/drivers/sensor/hmc5883l/hmc5883l.h
index 2eac35f..4958c2e 100644
--- a/drivers/sensor/hmc5883l/hmc5883l.h
+++ b/drivers/sensor/hmc5883l/hmc5883l.h
@@ -49,7 +49,6 @@
#ifdef CONFIG_HMC5883L_TRIGGER
const struct device *dev;
- const struct device *gpio;
struct gpio_callback gpio_cb;
struct sensor_trigger data_ready_trigger;
@@ -68,6 +67,9 @@
struct hmc5883l_config {
struct i2c_dt_spec i2c;
+#ifdef CONFIG_HMC5883L_TRIGGER
+ struct gpio_dt_spec int_gpio;
+#endif
};
#ifdef CONFIG_HMC5883L_TRIGGER
diff --git a/drivers/sensor/hmc5883l/hmc5883l_trigger.c b/drivers/sensor/hmc5883l/hmc5883l_trigger.c
index 52eeac0..b89ee4e 100644
--- a/drivers/sensor/hmc5883l/hmc5883l_trigger.c
+++ b/drivers/sensor/hmc5883l/hmc5883l_trigger.c
@@ -22,12 +22,11 @@
sensor_trigger_handler_t handler)
{
struct hmc5883l_data *drv_data = dev->data;
+ const struct hmc5883l_config *config = dev->config;
__ASSERT_NO_MSG(trig->type == SENSOR_TRIG_DATA_READY);
- gpio_pin_interrupt_configure(drv_data->gpio,
- DT_INST_GPIO_PIN(0, int_gpios),
- GPIO_INT_DISABLE);
+ gpio_pin_interrupt_configure_dt(&config->int_gpio, GPIO_INT_DISABLE);
drv_data->data_ready_handler = handler;
if (handler == NULL) {
@@ -36,9 +35,8 @@
drv_data->data_ready_trigger = *trig;
- gpio_pin_interrupt_configure(drv_data->gpio,
- DT_INST_GPIO_PIN(0, int_gpios),
- GPIO_INT_EDGE_TO_ACTIVE);
+ gpio_pin_interrupt_configure_dt(&config->int_gpio,
+ GPIO_INT_EDGE_TO_ACTIVE);
return 0;
}
@@ -48,12 +46,11 @@
{
struct hmc5883l_data *drv_data =
CONTAINER_OF(cb, struct hmc5883l_data, gpio_cb);
+ const struct hmc5883l_config *config = drv_data->dev->config;
ARG_UNUSED(pins);
- gpio_pin_interrupt_configure(dev,
- DT_INST_GPIO_PIN(0, int_gpios),
- GPIO_INT_DISABLE);
+ gpio_pin_interrupt_configure_dt(&config->int_gpio, GPIO_INT_DISABLE);
#if defined(CONFIG_HMC5883L_TRIGGER_OWN_THREAD)
k_sem_give(&drv_data->gpio_sem);
@@ -65,15 +62,15 @@
static void hmc5883l_thread_cb(const struct device *dev)
{
struct hmc5883l_data *drv_data = dev->data;
+ const struct hmc5883l_config *config = dev->config;
if (drv_data->data_ready_handler != NULL) {
drv_data->data_ready_handler(dev,
&drv_data->data_ready_trigger);
}
- gpio_pin_interrupt_configure(drv_data->gpio,
- DT_INST_GPIO_PIN(0, int_gpios),
- GPIO_INT_EDGE_TO_ACTIVE);
+ gpio_pin_interrupt_configure_dt(&config->int_gpio,
+ GPIO_INT_EDGE_TO_ACTIVE);
}
#ifdef CONFIG_HMC5883L_TRIGGER_OWN_THREAD
@@ -99,26 +96,19 @@
int hmc5883l_init_interrupt(const struct device *dev)
{
struct hmc5883l_data *drv_data = dev->data;
+ const struct hmc5883l_config *config = dev->config;
- /* setup data ready gpio interrupt */
- drv_data->gpio = device_get_binding(
- DT_INST_GPIO_LABEL(0, int_gpios));
- if (drv_data->gpio == NULL) {
- LOG_ERR("Failed to get pointer to %s device.",
- DT_INST_GPIO_LABEL(0, int_gpios));
- return -EINVAL;
+ if (!device_is_ready(config->int_gpio.port)) {
+ LOG_ERR("GPIO device not ready");
+ return -ENODEV;
}
- gpio_pin_configure(drv_data->gpio,
- DT_INST_GPIO_PIN(0, int_gpios),
- GPIO_INPUT |
- DT_INST_GPIO_FLAGS(0, int_gpios));
+ gpio_pin_configure_dt(&config->int_gpio, GPIO_INPUT);
- gpio_init_callback(&drv_data->gpio_cb,
- hmc5883l_gpio_callback,
- BIT(DT_INST_GPIO_PIN(0, int_gpios)));
+ gpio_init_callback(&drv_data->gpio_cb, hmc5883l_gpio_callback,
+ BIT(config->int_gpio.pin));
- if (gpio_add_callback(drv_data->gpio, &drv_data->gpio_cb) < 0) {
+ if (gpio_add_callback(config->int_gpio.port, &drv_data->gpio_cb) < 0) {
LOG_ERR("Failed to set gpio callback.");
return -EIO;
}
@@ -138,9 +128,8 @@
drv_data->work.handler = hmc5883l_work_cb;
#endif
- gpio_pin_interrupt_configure(drv_data->gpio,
- DT_INST_GPIO_PIN(0, int_gpios),
- GPIO_INT_EDGE_TO_ACTIVE);
+ gpio_pin_interrupt_configure_dt(&config->int_gpio,
+ GPIO_INT_EDGE_TO_ACTIVE);
return 0;
}