Commit 9ece3601 authored by Adam Thomson's avatar Adam Thomson Committed by Lee Jones

mfd: da9063: Add support for latest DA silicon revision

This update adds new regmap tables to support the latest DA silicon
which will automatically be selected based on the chip and variant
information read from the device.
Signed-off-by: default avatarAdam Thomson <Adam.Thomson.Opensource@diasemi.com>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent 091c6110
...@@ -197,7 +197,7 @@ static const struct regmap_range da9063_bb_writeable_ranges[] = { ...@@ -197,7 +197,7 @@ static const struct regmap_range da9063_bb_writeable_ranges[] = {
regmap_reg_range(DA9063_BB_REG_GP_ID_0, DA9063_BB_REG_GP_ID_19), regmap_reg_range(DA9063_BB_REG_GP_ID_0, DA9063_BB_REG_GP_ID_19),
}; };
static const struct regmap_range da9063_bb_volatile_ranges[] = { static const struct regmap_range da9063_bb_da_volatile_ranges[] = {
regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_REG_EVENT_D), regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_REG_EVENT_D),
regmap_reg_range(DA9063_REG_CONTROL_A, DA9063_REG_CONTROL_B), regmap_reg_range(DA9063_REG_CONTROL_A, DA9063_REG_CONTROL_B),
regmap_reg_range(DA9063_REG_CONTROL_E, DA9063_REG_CONTROL_F), regmap_reg_range(DA9063_REG_CONTROL_E, DA9063_REG_CONTROL_F),
...@@ -219,9 +219,9 @@ static const struct regmap_access_table da9063_bb_writeable_table = { ...@@ -219,9 +219,9 @@ static const struct regmap_access_table da9063_bb_writeable_table = {
.n_yes_ranges = ARRAY_SIZE(da9063_bb_writeable_ranges), .n_yes_ranges = ARRAY_SIZE(da9063_bb_writeable_ranges),
}; };
static const struct regmap_access_table da9063_bb_volatile_table = { static const struct regmap_access_table da9063_bb_da_volatile_table = {
.yes_ranges = da9063_bb_volatile_ranges, .yes_ranges = da9063_bb_da_volatile_ranges,
.n_yes_ranges = ARRAY_SIZE(da9063_bb_volatile_ranges), .n_yes_ranges = ARRAY_SIZE(da9063_bb_da_volatile_ranges),
}; };
static const struct regmap_range da9063l_bb_readable_ranges[] = { static const struct regmap_range da9063l_bb_readable_ranges[] = {
...@@ -241,7 +241,7 @@ static const struct regmap_range da9063l_bb_writeable_ranges[] = { ...@@ -241,7 +241,7 @@ static const struct regmap_range da9063l_bb_writeable_ranges[] = {
regmap_reg_range(DA9063_BB_REG_GP_ID_0, DA9063_BB_REG_GP_ID_19), regmap_reg_range(DA9063_BB_REG_GP_ID_0, DA9063_BB_REG_GP_ID_19),
}; };
static const struct regmap_range da9063l_bb_volatile_ranges[] = { static const struct regmap_range da9063l_bb_da_volatile_ranges[] = {
regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_REG_EVENT_D), regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_REG_EVENT_D),
regmap_reg_range(DA9063_REG_CONTROL_A, DA9063_REG_CONTROL_B), regmap_reg_range(DA9063_REG_CONTROL_A, DA9063_REG_CONTROL_B),
regmap_reg_range(DA9063_REG_CONTROL_E, DA9063_REG_CONTROL_F), regmap_reg_range(DA9063_REG_CONTROL_E, DA9063_REG_CONTROL_F),
...@@ -263,9 +263,64 @@ static const struct regmap_access_table da9063l_bb_writeable_table = { ...@@ -263,9 +263,64 @@ static const struct regmap_access_table da9063l_bb_writeable_table = {
.n_yes_ranges = ARRAY_SIZE(da9063l_bb_writeable_ranges), .n_yes_ranges = ARRAY_SIZE(da9063l_bb_writeable_ranges),
}; };
static const struct regmap_access_table da9063l_bb_volatile_table = { static const struct regmap_access_table da9063l_bb_da_volatile_table = {
.yes_ranges = da9063l_bb_volatile_ranges, .yes_ranges = da9063l_bb_da_volatile_ranges,
.n_yes_ranges = ARRAY_SIZE(da9063l_bb_volatile_ranges), .n_yes_ranges = ARRAY_SIZE(da9063l_bb_da_volatile_ranges),
};
static const struct regmap_range da9063_da_readable_ranges[] = {
regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_BB_REG_SECOND_D),
regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_ID_32_31),
regmap_reg_range(DA9063_REG_SEQ_A, DA9063_REG_AUTO3_LOW),
regmap_reg_range(DA9063_REG_T_OFFSET, DA9063_BB_REG_GP_ID_11),
regmap_reg_range(DA9063_REG_DEVICE_ID, DA9063_REG_VARIANT_ID),
};
static const struct regmap_range da9063_da_writeable_ranges[] = {
regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_REG_PAGE_CON),
regmap_reg_range(DA9063_REG_FAULT_LOG, DA9063_REG_VSYS_MON),
regmap_reg_range(DA9063_REG_COUNT_S, DA9063_BB_REG_ALARM_Y),
regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_ID_32_31),
regmap_reg_range(DA9063_REG_SEQ_A, DA9063_REG_AUTO3_LOW),
regmap_reg_range(DA9063_REG_CONFIG_I, DA9063_BB_REG_MON_REG_4),
regmap_reg_range(DA9063_BB_REG_GP_ID_0, DA9063_BB_REG_GP_ID_11),
};
static const struct regmap_access_table da9063_da_readable_table = {
.yes_ranges = da9063_da_readable_ranges,
.n_yes_ranges = ARRAY_SIZE(da9063_da_readable_ranges),
};
static const struct regmap_access_table da9063_da_writeable_table = {
.yes_ranges = da9063_da_writeable_ranges,
.n_yes_ranges = ARRAY_SIZE(da9063_da_writeable_ranges),
};
static const struct regmap_range da9063l_da_readable_ranges[] = {
regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_REG_MON_A10_RES),
regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_ID_32_31),
regmap_reg_range(DA9063_REG_SEQ_A, DA9063_REG_AUTO3_LOW),
regmap_reg_range(DA9063_REG_T_OFFSET, DA9063_BB_REG_GP_ID_11),
regmap_reg_range(DA9063_REG_DEVICE_ID, DA9063_REG_VARIANT_ID),
};
static const struct regmap_range da9063l_da_writeable_ranges[] = {
regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_REG_PAGE_CON),
regmap_reg_range(DA9063_REG_FAULT_LOG, DA9063_REG_VSYS_MON),
regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_ID_32_31),
regmap_reg_range(DA9063_REG_SEQ_A, DA9063_REG_AUTO3_LOW),
regmap_reg_range(DA9063_REG_CONFIG_I, DA9063_BB_REG_MON_REG_4),
regmap_reg_range(DA9063_BB_REG_GP_ID_0, DA9063_BB_REG_GP_ID_11),
};
static const struct regmap_access_table da9063l_da_readable_table = {
.yes_ranges = da9063l_da_readable_ranges,
.n_yes_ranges = ARRAY_SIZE(da9063l_da_readable_ranges),
};
static const struct regmap_access_table da9063l_da_writeable_table = {
.yes_ranges = da9063l_da_writeable_ranges,
.n_yes_ranges = ARRAY_SIZE(da9063l_da_writeable_ranges),
}; };
static const struct regmap_range_cfg da9063_range_cfg[] = { static const struct regmap_range_cfg da9063_range_cfg[] = {
...@@ -333,7 +388,15 @@ static int da9063_i2c_probe(struct i2c_client *i2c, ...@@ -333,7 +388,15 @@ static int da9063_i2c_probe(struct i2c_client *i2c,
da9063_regmap_config.wr_table = da9063_regmap_config.wr_table =
&da9063_bb_writeable_table; &da9063_bb_writeable_table;
da9063_regmap_config.volatile_table = da9063_regmap_config.volatile_table =
&da9063_bb_volatile_table; &da9063_bb_da_volatile_table;
break;
case PMIC_DA9063_DA:
da9063_regmap_config.rd_table =
&da9063_da_readable_table;
da9063_regmap_config.wr_table =
&da9063_da_writeable_table;
da9063_regmap_config.volatile_table =
&da9063_bb_da_volatile_table;
break; break;
default: default:
dev_err(da9063->dev, dev_err(da9063->dev,
...@@ -350,7 +413,15 @@ static int da9063_i2c_probe(struct i2c_client *i2c, ...@@ -350,7 +413,15 @@ static int da9063_i2c_probe(struct i2c_client *i2c,
da9063_regmap_config.wr_table = da9063_regmap_config.wr_table =
&da9063l_bb_writeable_table; &da9063l_bb_writeable_table;
da9063_regmap_config.volatile_table = da9063_regmap_config.volatile_table =
&da9063l_bb_volatile_table; &da9063l_bb_da_volatile_table;
break;
case PMIC_DA9063_DA:
da9063_regmap_config.rd_table =
&da9063l_da_readable_table;
da9063_regmap_config.wr_table =
&da9063l_da_writeable_table;
da9063_regmap_config.volatile_table =
&da9063l_bb_da_volatile_table;
break; break;
default: default:
dev_err(da9063->dev, dev_err(da9063->dev,
......
...@@ -35,6 +35,7 @@ enum da9063_variant_codes { ...@@ -35,6 +35,7 @@ enum da9063_variant_codes {
PMIC_DA9063_AD = 0x3, PMIC_DA9063_AD = 0x3,
PMIC_DA9063_BB = 0x5, PMIC_DA9063_BB = 0x5,
PMIC_DA9063_CA = 0x6, PMIC_DA9063_CA = 0x6,
PMIC_DA9063_DA = 0x7,
}; };
/* Interrupts */ /* Interrupts */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment