// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (c) 2023 MediaTek Inc.
 */

#include <linux/fs.h>
#include <linux/module.h>
#include <linux/of_device.h>

#include <lpm_dbg_common_v1.h>
#include <lpm_module.h>
#include <lpm_spm_comm.h>

#include <lpm_dbg_fs_common.h>
#include <lpm_dbg_logger.h>

#include <mt8532_lpm_logger.h>
#include "mt8532_lpm_compat.h"

static int __init mt8532_dbg_fs_init(void)
{
	lpm_spm_fs_init();

	return 0;
}

#ifdef MTK_LPM_MODE_MODULE
static void __exit mt8532_dbg_fs_exit(void)
{
	lpm_spm_fs_deinit();
}
#endif

static int __init mt8532_dbg_device_initcall(void)
{
	mt8532_dbg_ops_register();
	lpm_dbg_common_fs_init();
	mt8532_dbg_fs_init();
	lpm_rc_fs_init();

	return 0;
}

static int __init mt8532_dbg_late_initcall(void)
{
	return 0;
}

int __init mt8532_dbg_init(void)
{
	if (mt8532_dbg_device_initcall())
		goto mt8532_dbg_init_fail;

	if (mt8532_dbg_late_initcall())
		goto mt8532_dbg_init_fail;

	return 0;

mt8532_dbg_init_fail:
	return -EAGAIN;
}
#ifdef MTK_LPM_MODE_MODULE
void __exit mt8532_dbg_exit(void)
{
	mt8532_dbg_fs_exit();
}

module_init(mt8532_dbg_init);
module_exit(mt8532_dbg_exit);
#else
late_initcall_sync(mt8532_dbg_init);
#endif
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("MT8532 low power debug module");
MODULE_AUTHOR("MediaTek Inc.");
