diff --git a/drivers/sensor/mcp9808/mcp9808.c b/drivers/sensor/mcp9808/mcp9808.c index d3d7948d950..5f3f47a0efb 100644 --- a/drivers/sensor/mcp9808/mcp9808.c +++ b/drivers/sensor/mcp9808/mcp9808.c @@ -116,21 +116,26 @@ int mcp9808_init(const struct device *dev) } #ifdef CONFIG_MCP9808_TRIGGER - rc = mcp9808_setup_interrupt(dev); + if (cfg->int_gpio.port) { + rc = mcp9808_setup_interrupt(dev); + } #endif /* CONFIG_MCP9808_TRIGGER */ return rc; } -static struct mcp9808_data mcp9808_data; -static const struct mcp9808_config mcp9808_cfg = { - .i2c = I2C_DT_SPEC_INST_GET(0), - .resolution = DT_INST_PROP(0, resolution), -#ifdef CONFIG_MCP9808_TRIGGER - .int_gpio = GPIO_DT_SPEC_INST_GET(0, int_gpios), -#endif /* CONFIG_MCP9808_TRIGGER */ -}; +#define MCP9808_DEFINE(inst) \ + static struct mcp9808_data mcp9808_data_##inst; \ + \ + static const struct mcp9808_config mcp9808_config_##inst = { \ + .i2c = I2C_DT_SPEC_INST_GET(inst), \ + .resolution = DT_INST_PROP(inst, resolution), \ + IF_ENABLED(CONFIG_MCP9808_TRIGGER, \ + (.int_gpio = GPIO_DT_SPEC_INST_GET_OR(inst, int_gpios, { 0 }),)) \ + }; \ + \ + DEVICE_DT_INST_DEFINE(inst, mcp9808_init, NULL, \ + &mcp9808_data_##inst, &mcp9808_config_##inst, POST_KERNEL, \ + CONFIG_SENSOR_INIT_PRIORITY, &mcp9808_api_funcs); \ -DEVICE_DT_INST_DEFINE(0, mcp9808_init, NULL, - &mcp9808_data, &mcp9808_cfg, POST_KERNEL, - CONFIG_SENSOR_INIT_PRIORITY, &mcp9808_api_funcs); +DT_INST_FOREACH_STATUS_OKAY(MCP9808_DEFINE) diff --git a/drivers/sensor/mcp9808/mcp9808_trigger.c b/drivers/sensor/mcp9808/mcp9808_trigger.c index e922f2fe395..1343416eb52 100644 --- a/drivers/sensor/mcp9808/mcp9808_trigger.c +++ b/drivers/sensor/mcp9808/mcp9808_trigger.c @@ -18,11 +18,16 @@ int mcp9808_attr_set(const struct device *dev, enum sensor_channel chan, enum sensor_attribute attr, const struct sensor_value *val) { + const struct mcp9808_config *cfg = dev->config; uint8_t reg_addr; int temp; __ASSERT_NO_MSG(chan == SENSOR_CHAN_AMBIENT_TEMP); + if (!cfg->int_gpio.port) { + return -ENOTSUP; + } + switch (attr) { case SENSOR_ATTR_LOWER_THRESH: reg_addr = MCP9808_REG_LOWER_LIMIT; @@ -89,6 +94,10 @@ int mcp9808_trigger_set(const struct device *dev, const struct mcp9808_config *cfg = dev->config; int rv = 0; + if (!cfg->int_gpio.port) { + return -ENOTSUP; + } + setup_int(dev, false); data->trig = *trig;