summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Vasut2018-06-11 13:58:49 +0200
committerLee Jones2018-07-04 08:17:02 +0200
commitc2ffec5e4bb6091bfd7b8dbe835df5059ef5b3f2 (patch)
tree7e478787f410cbed8af802c0bf509628a5bf0206
parentmfd: da9063: Add custom IRQ map for DA9063L (diff)
downloadkernel-qcow2-linux-c2ffec5e4bb6091bfd7b8dbe835df5059ef5b3f2.tar.gz
kernel-qcow2-linux-c2ffec5e4bb6091bfd7b8dbe835df5059ef5b3f2.tar.xz
kernel-qcow2-linux-c2ffec5e4bb6091bfd7b8dbe835df5059ef5b3f2.zip
mfd: da9063: Register RTC only on DA9063L
The DA9063L does not contain RTC block, unlike the full DA9063. Split the RTC block into separate mfd cell and register it only on DA9063. Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com> Signed-off-by: Lee Jones <lee.jones@linaro.org>
-rw-r--r--drivers/mfd/da9063-core.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
index ded59990f18c..6e4ce49b4405 100644
--- a/drivers/mfd/da9063-core.c
+++ b/drivers/mfd/da9063-core.c
@@ -76,7 +76,7 @@ static struct resource da9063_hwmon_resources[] = {
};
-static const struct mfd_cell da9063_devs[] = {
+static const struct mfd_cell da9063_common_devs[] = {
{
.name = DA9063_DRVNAME_REGULATORS,
.num_resources = ARRAY_SIZE(da9063_regulators_resources),
@@ -101,14 +101,18 @@ static const struct mfd_cell da9063_devs[] = {
.of_compatible = "dlg,da9063-onkey",
},
{
+ .name = DA9063_DRVNAME_VIBRATION,
+ },
+};
+
+/* Only present on DA9063 , not on DA9063L */
+static const struct mfd_cell da9063_devs[] = {
+ {
.name = DA9063_DRVNAME_RTC,
.num_resources = ARRAY_SIZE(da9063_rtc_resources),
.resources = da9063_rtc_resources,
.of_compatible = "dlg,da9063-rtc",
},
- {
- .name = DA9063_DRVNAME_VIBRATION,
- },
};
static int da9063_clear_fault_log(struct da9063 *da9063)
@@ -226,10 +230,23 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
da9063->irq_base = regmap_irq_chip_get_base(da9063->regmap_irq);
ret = devm_mfd_add_devices(da9063->dev, PLATFORM_DEVID_NONE,
- da9063_devs, ARRAY_SIZE(da9063_devs),
+ da9063_common_devs,
+ ARRAY_SIZE(da9063_common_devs),
NULL, da9063->irq_base, NULL);
- if (ret)
- dev_err(da9063->dev, "Cannot add MFD cells\n");
+ if (ret) {
+ dev_err(da9063->dev, "Failed to add child devices\n");
+ return ret;
+ }
+
+ if (da9063->type == PMIC_TYPE_DA9063) {
+ ret = devm_mfd_add_devices(da9063->dev, PLATFORM_DEVID_NONE,
+ da9063_devs, ARRAY_SIZE(da9063_devs),
+ NULL, da9063->irq_base, NULL);
+ if (ret) {
+ dev_err(da9063->dev, "Failed to add child devices\n");
+ return ret;
+ }
+ }
return ret;
}