/*
 * Copyright (c) 2020 Christian Taedcke
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/init.h>
#include <zephyr/drivers/gpio.h>
#include <zephyr/sys/printk.h>

struct supply_cfg {
	const struct device *gpio;
	gpio_pin_t pin;
	gpio_dt_flags_t flags;
};

static int enable_supply(const struct supply_cfg *cfg)
{
	int rv = -ENODEV;

	if (device_is_ready(cfg->gpio)) {
		gpio_pin_configure(cfg->gpio, cfg->pin,
				   GPIO_OUTPUT | cfg->flags);
		gpio_pin_set(cfg->gpio, cfg->pin, 1);
		rv = 0;
	}

	return rv;
}

static int efr32mg_sltb004a_init(void)
{
	struct supply_cfg cfg;
	int rc = 0;

	(void)cfg;

#define CCS811 DT_NODELABEL(ccs811)

#if DT_NODE_HAS_STATUS(CCS811, okay)
	cfg = (struct supply_cfg){
		.gpio = DEVICE_DT_GET(DT_GPIO_CTLR(CCS811, supply_gpios)),
		.pin = DT_GPIO_PIN(CCS811, supply_gpios),
		.flags = DT_GPIO_FLAGS(CCS811, supply_gpios),
	};

	/* Enable the CCS811 power */
	rc = enable_supply(&cfg);
	if (rc < 0) {
		printk("CCS811 supply not enabled: %d\n", rc);
	}
#endif

	return rc;
}

/* needs to be done after GPIO driver init */
SYS_INIT(efr32mg_sltb004a_init, POST_KERNEL,
	 CONFIG_KERNEL_INIT_PRIORITY_DEVICE);
