blob: 73d81da93efc19975095ebbe47ef8d05f023c0a8 [file] [log] [blame]
/*
* Copyright (C) 2015 MediaTek Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
/******************************************************************************
* pmic_wrapper.c - Linux pmic_wrapper Driver
*
*
* DESCRIPTION:
* This file provid the other drivers PMIC wrapper relative functions
*
******************************************************************************/
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/types.h>
#include <linux/device.h>
#include <linux/fs.h>
#include <linux/module.h>
/*#include <mach/mt_typedefs.h>*/
#include <linux/timer.h>
//#include <mtk_pmic_wrap.h>
#include <linux/syscore_ops.h>
#include <linux/regmap.h>
#include <linux/soc/mediatek/pmic_wrap.h>
#include <linux/of_address.h>
#include <linux/of_fdt.h>
#include <linux/of.h>
#include <linux/of_irq.h>
#include <linux/of_address.h>
#include <linux/spinlock.h>
static struct regmap *pmic_regmap;
static spinlock_t wrp_lock = __SPIN_LOCK_UNLOCKED(lock);
s32 pwrap_read(u32 adr, u32 *rdata)
{
int ret = 0;
unsigned long flags = 0;
if (pmic_regmap) {
spin_lock_irqsave(&wrp_lock, flags);
ret = regmap_read(pmic_regmap, adr, rdata);
spin_unlock_irqrestore(&wrp_lock, flags);
} else
pr_notice("%s %d rec.\n", __func__, __LINE__);
return ret;
}
EXPORT_SYMBOL(pwrap_read);
s32 pwrap_write(u32 adr, u32 wdata)
{
int ret = 0;
unsigned long flags = 0;
if (pmic_regmap) {
spin_lock_irqsave(&wrp_lock, flags);
ret = regmap_write(pmic_regmap, adr, wdata);
spin_unlock_irqrestore(&wrp_lock, flags);
} else
pr_notice("%s %d Error.\n", __func__, __LINE__);
return ret;
}
EXPORT_SYMBOL(pwrap_write);
static int __init mt_pwrap_init(void)
{
struct device_node *node, *pwrap_node;
pr_info("%s\n", __func__);
node = of_find_compatible_node(NULL, NULL, "mediatek,pwraph");
pwrap_node = of_parse_phandle(node, "mediatek,pwrap-regmap", 0);
if (pwrap_node) {
pmic_regmap = pwrap_node_to_regmap(pwrap_node);
if (IS_ERR(pmic_regmap)) {
pr_notice("%s %d Error.\n", __func__, __LINE__);
return PTR_ERR(pmic_regmap);
}
} else {
pr_notice("%s %d Error.\n", __func__, __LINE__);
return -EINVAL;
}
return 0;
}
subsys_initcall(mt_pwrap_init);
MODULE_AUTHOR("mediatek");
MODULE_DESCRIPTION("pmic_wrapper Driver Revision");
MODULE_LICENSE("GPL");