X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fmfd%2Frk808.c;h=86dd427b0fe358e66df0b4783ae3b609cbb5f808;hb=b7e38650563260f6950a2959621b827ed7d6dfaf;hp=2220855cc1fe0b0b8a0b1f71f3a70f7f07e0792f;hpb=3d362c8dbe6d6ab0b4595740229a4d24a49a9a0d;p=firefly-linux-kernel-4.4.55.git diff --git a/drivers/mfd/rk808.c b/drivers/mfd/rk808.c index 2220855cc1fe..86dd427b0fe3 100644 --- a/drivers/mfd/rk808.c +++ b/drivers/mfd/rk808.c @@ -89,6 +89,38 @@ static int rk818_shutdown(struct regmap *regmap) return ret; } +static bool rk818_is_volatile_reg(struct device *dev, unsigned int reg) +{ + /* + * Notes: + * - Technically the ROUND_30s bit makes RTC_CTRL_REG volatile, but + * we don't use that feature. It's better to cache. + * - It's unlikely we care that RK808_DEVCTRL_REG is volatile since + * bits are cleared in case when we shutoff anyway, but better safe. + */ + + switch (reg) { + case RK808_SECONDS_REG ... RK808_WEEKS_REG: + case RK808_RTC_STATUS_REG: + case RK808_VB_MON_REG: + case RK808_THERMAL_REG: + case RK808_DCDC_EN_REG: + case RK808_DCDC_UV_STS_REG: + case RK808_LDO_UV_STS_REG: + case RK808_DCDC_PG_REG: + case RK808_LDO_PG_REG: + case RK808_DEVCTRL_REG: + case RK808_INT_STS_REG1: + case RK808_INT_STS_REG2: + case RK808_INT_STS_MSK_REG1: + case RK808_INT_STS_MSK_REG2: + case RK818_SUP_STS_REG ... RK818_SAVE_DATA19: + return true; + } + + return false; +} + static const struct regmap_config rk808_regmap_config = { .reg_bits = 8, .val_bits = 8, @@ -185,12 +217,13 @@ static const struct regmap_config rk818_regmap_config = { .val_bits = 8, .max_register = RK818_SAVE_DATA19, .cache_type = REGCACHE_RBTREE, - .volatile_reg = rk808_is_volatile_reg, + .volatile_reg = rk818_is_volatile_reg, }; static const struct mfd_cell rk818s[] = { { .name = "rk808-clkout", }, { .name = "rk818-regulator", }, + { .name = "rk818-battery", .of_compatible = "rk818-battery", }, { .name = "rk808-rtc", .num_resources = ARRAY_SIZE(rtc_resources),