Merge "mfd: pm8921-core: Add support for PMIC PM8922 chips" into msm-3.0

This commit is contained in:
Linux Build Service Account
2011-12-02 21:29:05 -08:00
committed by QuIC Gerrit Code Review
3 changed files with 29 additions and 3 deletions

View File

@@ -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 */

View File

@@ -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) {

View File

@@ -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);