|
@@ -44,6 +44,7 @@ static const char * const axp20x_model_names[] = {
|
|
|
"AXP803",
|
|
|
"AXP806",
|
|
|
"AXP809",
|
|
|
+ "AXP813",
|
|
|
};
|
|
|
|
|
|
static const struct regmap_range axp152_writeable_ranges[] = {
|
|
@@ -870,6 +871,14 @@ static struct mfd_cell axp809_cells[] = {
|
|
|
},
|
|
|
};
|
|
|
|
|
|
+static struct mfd_cell axp813_cells[] = {
|
|
|
+ {
|
|
|
+ .name = "axp20x-pek",
|
|
|
+ .num_resources = ARRAY_SIZE(axp803_pek_resources),
|
|
|
+ .resources = axp803_pek_resources,
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
static struct axp20x_dev *axp20x_pm_power_off;
|
|
|
static void axp20x_power_off(void)
|
|
|
{
|
|
@@ -956,6 +965,19 @@ int axp20x_match_device(struct axp20x_dev *axp20x)
|
|
|
axp20x->regmap_cfg = &axp22x_regmap_config;
|
|
|
axp20x->regmap_irq_chip = &axp809_regmap_irq_chip;
|
|
|
break;
|
|
|
+ case AXP813_ID:
|
|
|
+ axp20x->nr_cells = ARRAY_SIZE(axp813_cells);
|
|
|
+ axp20x->cells = axp813_cells;
|
|
|
+ axp20x->regmap_cfg = &axp288_regmap_config;
|
|
|
+ /*
|
|
|
+ * The IRQ table given in the datasheet is incorrect.
|
|
|
+ * In IRQ enable/status registers 1, there are separate
|
|
|
+ * IRQs for ACIN and VBUS, instead of bits [7:5] being
|
|
|
+ * the same as bits [4:2]. So it shares the same IRQs
|
|
|
+ * as the AXP803, rather than the AXP288.
|
|
|
+ */
|
|
|
+ axp20x->regmap_irq_chip = &axp803_regmap_irq_chip;
|
|
|
+ break;
|
|
|
default:
|
|
|
dev_err(dev, "unsupported AXP20X ID %lu\n", axp20x->variant);
|
|
|
return -EINVAL;
|