regulator: qpnp-oledb: Add revid support for OLEDB driver

Add PMIC revid support to identify the PMIC subtype for OLEDB driver.
This is useful to enable the functionalities/features that are specific to
certain PMICs like PM660A.

Change-Id: I4539955abb29fe37256e21ac507db646953e0abf
Signed-off-by: Kiran Gunda <kgunda@codeaurora.org>
This commit is contained in:
Kiran Gunda 2017-03-28 11:27:59 +05:30
parent 27489753bf
commit 4312a0931a
3 changed files with 23 additions and 0 deletions

View file

@ -14,6 +14,11 @@ Required Node Structure
Value type: <string>
Definition: should be "qcom,qpnp-oledb-regulator".
- qcom,pmic-revid
Usage: required
Value type: <phandle>
Definition: Used to identify the PMIC subtype.
- reg
Usage: required
Value type: <prop-encoded-array>
@ -224,6 +229,7 @@ pm660a_oledb: qpnp-oledb@e000 {
compatible = "qcom,qpnp-oledb-regulator";
#address-cells = <1>;
#size-cells = <1>;
qcom,pmic-revid = <&pm660l_revid>;
reg = <0xe000 0x100>;
label = "oledb";

View file

@ -418,6 +418,7 @@
compatible = "qcom,qpnp-oledb-regulator";
#address-cells = <1>;
#size-cells = <1>;
qcom,pmic-revid = <&pm660l_revid>;
reg = <0xe000 0x100>;
label = "oledb";

View file

@ -27,6 +27,7 @@
#include <linux/regulator/of_regulator.h>
#include <linux/regulator/qpnp-labibb-regulator.h>
#include <linux/qpnp/qpnp-pbs.h>
#include <linux/qpnp/qpnp-revid.h>
#define QPNP_OLEDB_REGULATOR_DRIVER_NAME "qcom,qpnp-oledb-regulator"
#define OLEDB_VOUT_STEP_MV 100
@ -162,6 +163,7 @@ struct qpnp_oledb {
struct notifier_block oledb_nb;
struct mutex bus_lock;
struct device_node *pbs_dev_node;
struct pmic_revid_data *pmic_rev_id;
u32 base;
u8 mod_enable;
@ -1085,8 +1087,22 @@ static int qpnp_oledb_parse_fast_precharge(struct qpnp_oledb *oledb)
static int qpnp_oledb_parse_dt(struct qpnp_oledb *oledb)
{
int rc = 0;
struct device_node *revid_dev_node;
struct device_node *of_node = oledb->dev->of_node;
revid_dev_node = of_parse_phandle(oledb->dev->of_node,
"qcom,pmic-revid", 0);
if (!revid_dev_node) {
pr_err("Missing qcom,pmic-revid property - driver failed\n");
return -EINVAL;
}
oledb->pmic_rev_id = get_revid_data(revid_dev_node);
if (IS_ERR(oledb->pmic_rev_id)) {
pr_debug("Unable to get revid data\n");
return -EPROBE_DEFER;
}
oledb->swire_control =
of_property_read_bool(of_node, "qcom,swire-control");