Merge "mfd: pm8921-core: Add support for PMIC PM8922 chips" into msm-3.0
This commit is contained in:
committed by
QuIC Gerrit Code Review
commit
55c981500b
@@ -39,6 +39,7 @@
|
|||||||
|
|
||||||
#define PM8921_VERSION_MASK 0xFFF0
|
#define PM8921_VERSION_MASK 0xFFF0
|
||||||
#define PM8921_VERSION_VALUE 0x06F0
|
#define PM8921_VERSION_VALUE 0x06F0
|
||||||
|
#define PM8922_VERSION_VALUE 0x0AF0
|
||||||
#define PM8921_REVISION_MASK 0x000F
|
#define PM8921_REVISION_MASK 0x000F
|
||||||
|
|
||||||
#define REG_PM8921_PON_CNTRL_3 0x01D
|
#define REG_PM8921_PON_CNTRL_3 0x01D
|
||||||
@@ -109,6 +110,9 @@ static enum pm8xxx_version pm8921_get_version(const struct device *dev)
|
|||||||
|
|
||||||
if ((pmic->rev_registers & PM8921_VERSION_MASK) == PM8921_VERSION_VALUE)
|
if ((pmic->rev_registers & PM8921_VERSION_MASK) == PM8921_VERSION_VALUE)
|
||||||
version = PM8XXX_VERSION_8921;
|
version = PM8XXX_VERSION_8921;
|
||||||
|
else if ((pmic->rev_registers & PM8921_VERSION_MASK)
|
||||||
|
== PM8922_VERSION_VALUE)
|
||||||
|
version = PM8XXX_VERSION_8922;
|
||||||
|
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
@@ -365,8 +369,11 @@ pm8921_add_subdevices(const struct pm8921_platform_data *pdata,
|
|||||||
int ret = 0, irq_base = 0;
|
int ret = 0, irq_base = 0;
|
||||||
struct pm_irq_chip *irq_chip;
|
struct pm_irq_chip *irq_chip;
|
||||||
static struct mfd_cell *mfd_regulators;
|
static struct mfd_cell *mfd_regulators;
|
||||||
|
enum pm8xxx_version version;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
version = pm8xxx_get_version(pmic->dev);
|
||||||
|
|
||||||
if (pdata->irq_pdata) {
|
if (pdata->irq_pdata) {
|
||||||
pdata->irq_pdata->irq_cdata.nirqs = PM8921_NR_IRQS;
|
pdata->irq_pdata->irq_cdata.nirqs = PM8921_NR_IRQS;
|
||||||
pdata->irq_pdata->irq_cdata.base_addr = REG_IRQ_BASE;
|
pdata->irq_pdata->irq_cdata.base_addr = REG_IRQ_BASE;
|
||||||
@@ -619,6 +626,13 @@ static const char * const pm8921_rev_names[] = {
|
|||||||
[PM8XXX_REVISION_8921_3p0] = "3.0",
|
[PM8XXX_REVISION_8921_3p0] = "3.0",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char * const pm8922_rev_names[] = {
|
||||||
|
[PM8XXX_REVISION_8922_TEST] = "test",
|
||||||
|
[PM8XXX_REVISION_8922_1p0] = "1.0",
|
||||||
|
[PM8XXX_REVISION_8922_1p1] = "1.1",
|
||||||
|
[PM8XXX_REVISION_8922_2p0] = "2.0",
|
||||||
|
};
|
||||||
|
|
||||||
static int __devinit pm8921_probe(struct platform_device *pdev)
|
static int __devinit pm8921_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
const struct pm8921_platform_data *pdata = pdev->dev.platform_data;
|
const struct pm8921_platform_data *pdata = pdev->dev.platform_data;
|
||||||
@@ -665,13 +679,18 @@ static int __devinit pm8921_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
/* Print out human readable version and revision names. */
|
/* Print out human readable version and revision names. */
|
||||||
version = pm8xxx_get_version(pmic->dev);
|
version = pm8xxx_get_version(pmic->dev);
|
||||||
|
revision = pm8xxx_get_revision(pmic->dev);
|
||||||
if (version == PM8XXX_VERSION_8921) {
|
if (version == PM8XXX_VERSION_8921) {
|
||||||
revision = pm8xxx_get_revision(pmic->dev);
|
|
||||||
if (revision >= 0 && revision < ARRAY_SIZE(pm8921_rev_names))
|
if (revision >= 0 && revision < ARRAY_SIZE(pm8921_rev_names))
|
||||||
revision_name = pm8921_rev_names[revision];
|
revision_name = pm8921_rev_names[revision];
|
||||||
pr_info("PMIC version: PM8921 rev %s\n", revision_name);
|
pr_info("PMIC version: PM8921 rev %s\n", revision_name);
|
||||||
|
} else if (version == PM8XXX_VERSION_8922) {
|
||||||
|
if (revision >= 0 && revision < ARRAY_SIZE(pm8922_rev_names))
|
||||||
|
revision_name = pm8922_rev_names[revision];
|
||||||
|
pr_info("PMIC version: PM8922 rev %s\n", revision_name);
|
||||||
} else {
|
} else {
|
||||||
WARN_ON(version != PM8XXX_VERSION_8921);
|
WARN_ON(version != PM8XXX_VERSION_8921
|
||||||
|
&& version != PM8XXX_VERSION_8922);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Log human readable restart reason */
|
/* Log human readable restart reason */
|
||||||
|
|||||||
@@ -1360,7 +1360,8 @@ static int __devinit pm8xxx_pwm_probe(struct platform_device *pdev)
|
|||||||
version = pm8xxx_get_version(chip->dev->parent);
|
version = pm8xxx_get_version(chip->dev->parent);
|
||||||
|
|
||||||
if (version == PM8XXX_VERSION_8921 ||
|
if (version == PM8XXX_VERSION_8921 ||
|
||||||
version == PM8XXX_VERSION_8058) {
|
version == PM8XXX_VERSION_8058 ||
|
||||||
|
version == PM8XXX_VERSION_8922) {
|
||||||
chip->is_lpg_supported = 1;
|
chip->is_lpg_supported = 1;
|
||||||
}
|
}
|
||||||
if (chip->is_lpg_supported) {
|
if (chip->is_lpg_supported) {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ enum pm8xxx_version {
|
|||||||
PM8XXX_VERSION_8921,
|
PM8XXX_VERSION_8921,
|
||||||
PM8XXX_VERSION_8821,
|
PM8XXX_VERSION_8821,
|
||||||
PM8XXX_VERSION_8018,
|
PM8XXX_VERSION_8018,
|
||||||
|
PM8XXX_VERSION_8922,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* PMIC version specific silicon revisions */
|
/* PMIC version specific silicon revisions */
|
||||||
@@ -56,6 +57,11 @@ enum pm8xxx_version {
|
|||||||
#define PM8XXX_REVISION_8018_1p1 2
|
#define PM8XXX_REVISION_8018_1p1 2
|
||||||
#define PM8XXX_REVISION_8018_2p0 3
|
#define PM8XXX_REVISION_8018_2p0 3
|
||||||
|
|
||||||
|
#define PM8XXX_REVISION_8922_TEST 0
|
||||||
|
#define PM8XXX_REVISION_8922_1p0 1
|
||||||
|
#define PM8XXX_REVISION_8922_1p1 2
|
||||||
|
#define PM8XXX_REVISION_8922_2p0 3
|
||||||
|
|
||||||
struct pm8xxx_drvdata {
|
struct pm8xxx_drvdata {
|
||||||
int (*pmic_readb) (const struct device *dev,
|
int (*pmic_readb) (const struct device *dev,
|
||||||
u16 addr, u8 *val);
|
u16 addr, u8 *val);
|
||||||
|
|||||||
Reference in New Issue
Block a user