You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.8 KiB
57 lines
1.8 KiB
/* |
|
* Copyright (c) 2025 Vogl Electronic GmbH |
|
* |
|
* SPDX-License-Identifier: Apache-2.0 |
|
*/ |
|
|
|
#define DT_DRV_COMPAT adi_maxq10xx |
|
|
|
#include <zephyr/kernel.h> |
|
#include <zephyr/device.h> |
|
#include <zephyr/drivers/spi.h> |
|
#include <zephyr/drivers/mfd/mfd_maxq10xx.h> |
|
|
|
#include <zephyr/logging/log.h> |
|
LOG_MODULE_REGISTER(mfd_maxq10xx, CONFIG_MFD_LOG_LEVEL); |
|
|
|
struct mfd_maxq10xx_config { |
|
struct spi_dt_spec spi; |
|
}; |
|
|
|
struct mfd_maxq10xx_data { |
|
struct k_sem sem_lock; |
|
}; |
|
|
|
struct k_sem *mfd_maxq10xx_get_lock(const struct device *dev) |
|
{ |
|
struct mfd_maxq10xx_data *data = dev->data; |
|
|
|
return &data->sem_lock; |
|
} |
|
|
|
static int mfd_maxq10xx_init(const struct device *dev) |
|
{ |
|
const struct mfd_maxq10xx_config *config = dev->config; |
|
|
|
if (!spi_is_ready_dt(&config->spi)) { |
|
return -ENODEV; |
|
} |
|
|
|
return 0; |
|
} |
|
|
|
BUILD_ASSERT(CONFIG_SPI_INIT_PRIORITY < CONFIG_MFD_MAXQ10XX_INIT_PRIORITY, |
|
"SPI driver must be initialized before maxq10xx mfd driver"); |
|
|
|
#define DEFINE_MAXQ10XX_MFD(_num) \ |
|
static const struct mfd_maxq10xx_config mfd_maxq10xx_config##_num = { \ |
|
.spi = SPI_DT_SPEC_INST_GET(_num, SPI_WORD_SET(8), 0), \ |
|
}; \ |
|
static struct mfd_maxq10xx_data mfd_maxq10xx_data##_num = { \ |
|
.sem_lock = Z_SEM_INITIALIZER(mfd_maxq10xx_data##_num.sem_lock, 1, 1), \ |
|
}; \ |
|
DEVICE_DT_INST_DEFINE(_num, mfd_maxq10xx_init, NULL, &mfd_maxq10xx_data##_num, \ |
|
&mfd_maxq10xx_config##_num, POST_KERNEL, \ |
|
CONFIG_MFD_MAXQ10XX_INIT_PRIORITY, NULL); |
|
|
|
DT_INST_FOREACH_STATUS_OKAY(DEFINE_MAXQ10XX_MFD);
|
|
|