/*
 * Copyright (c) 2021 Teslabs Engineering S.L.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#define DT_DRV_COMPAT st_stm32_backup_sram

#include <zephyr/device.h>
#include <zephyr/drivers/clock_control/stm32_clock_control.h>

#include <stm32_ll_pwr.h>

#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(stm32_backup_sram, CONFIG_SOC_LOG_LEVEL);

struct stm32_backup_sram_config {
	struct stm32_pclken pclken;
};

static int stm32_backup_sram_init(const struct device *dev)
{
	const struct stm32_backup_sram_config *config = dev->config;

	int ret;

	/* enable clock for subsystem */
	const struct device *const clk = DEVICE_DT_GET(STM32_CLOCK_CONTROL_NODE);

	if (!device_is_ready(clk)) {
		LOG_ERR("clock control device not ready");
		return -ENODEV;
	}

	ret = clock_control_on(clk, (clock_control_subsys_t *)&config->pclken);
	if (ret < 0) {
		LOG_ERR("Could not initialize backup SRAM clock (%d)", ret);
		return ret;
	}

	/* enable write access to backup domain */
	LL_PWR_EnableBkUpAccess();
	while (!LL_PWR_IsEnabledBkUpAccess()) {
	}

	/* enable backup sram regulator (required to retain backup SRAM content
	 * while in standby or VBAT modes).
	 */
	LL_PWR_EnableBkUpRegulator();
	while (!LL_PWR_IsEnabledBkUpRegulator()) {
	}

	return 0;
}

static const struct stm32_backup_sram_config config = {
	.pclken = { .bus = DT_INST_CLOCKS_CELL(0, bus),
		    .enr = DT_INST_CLOCKS_CELL(0, bits) },
};

DEVICE_DT_INST_DEFINE(0, stm32_backup_sram_init, NULL, NULL, &config,
		      POST_KERNEL, CONFIG_APPLICATION_INIT_PRIORITY, NULL);
