// SPDX-License-Identifier: GPL-2.0+
/*
 * PMIC Error Signal Monitor driver
 *
 * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
 *      Tero Kristo <t-kristo@ti.com>
 *
 */

#include <common.h>
#include <dm.h>
#include <errno.h>
#include <power/pmic.h>
#include <dm/device_compat.h>
#include <linux/bitops.h>

#define INT_ESM_REG		0x6c
#define INT_ESM_MASK		0x3f

#define ESM_MCU_START_REG	0x8f

#define ESM_MCU_START		BIT(0)

#define ESM_MCU_MODE_CFG_REG	0x92

#define ESM_MCU_EN		BIT(6)
#define ESM_MCU_ENDRV		BIT(5)

/**
 * pmic_esm_probe: configures and enables PMIC ESM functionality
 *
 * Configures ESM PMIC support and enables it.
 */
static int pmic_esm_probe(struct udevice *dev)
{
	int ret;

	ret = pmic_reg_write(dev->parent, INT_ESM_REG, INT_ESM_MASK);
	if (ret) {
		dev_err(dev, "clearing ESM irqs failed: %d\n", ret);
		return ret;
	}

	ret = pmic_reg_write(dev->parent, ESM_MCU_MODE_CFG_REG,
			     ESM_MCU_EN | ESM_MCU_ENDRV);
	if (ret) {
		dev_err(dev, "setting ESM mode failed: %d\n", ret);
		return ret;
	}

	ret = pmic_reg_write(dev->parent, ESM_MCU_START_REG, ESM_MCU_START);
	if (ret) {
		dev_err(dev, "starting ESM failed: %d\n", ret);
		return ret;
	}

	return 0;
}

static const struct udevice_id pmic_esm_ids[] = {
	{ .compatible = "ti,tps659413-esm" },
	{}
};

U_BOOT_DRIVER(pmic_esm) = {
	.name = "esm_pmic",
	.of_match = pmic_esm_ids,
	.id = UCLASS_MISC,
	.probe = pmic_esm_probe,
};
