Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>

authored by

Adam Thomson and committed by
Lee Jones
9ece3601 091c6110

+82 -10
+81 -10
drivers/mfd/da9063-i2c.c
··· 197 197 regmap_reg_range(DA9063_BB_REG_GP_ID_0, DA9063_BB_REG_GP_ID_19), 198 198 }; 199 199 200 - static const struct regmap_range da9063_bb_volatile_ranges[] = { 200 + static const struct regmap_range da9063_bb_da_volatile_ranges[] = { 201 201 regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_REG_EVENT_D), 202 202 regmap_reg_range(DA9063_REG_CONTROL_A, DA9063_REG_CONTROL_B), 203 203 regmap_reg_range(DA9063_REG_CONTROL_E, DA9063_REG_CONTROL_F), ··· 219 219 .n_yes_ranges = ARRAY_SIZE(da9063_bb_writeable_ranges), 220 220 }; 221 221 222 - static const struct regmap_access_table da9063_bb_volatile_table = { 223 - .yes_ranges = da9063_bb_volatile_ranges, 224 - .n_yes_ranges = ARRAY_SIZE(da9063_bb_volatile_ranges), 222 + static const struct regmap_access_table da9063_bb_da_volatile_table = { 223 + .yes_ranges = da9063_bb_da_volatile_ranges, 224 + .n_yes_ranges = ARRAY_SIZE(da9063_bb_da_volatile_ranges), 225 225 }; 226 226 227 227 static const struct regmap_range da9063l_bb_readable_ranges[] = { ··· 241 241 regmap_reg_range(DA9063_BB_REG_GP_ID_0, DA9063_BB_REG_GP_ID_19), 242 242 }; 243 243 244 - static const struct regmap_range da9063l_bb_volatile_ranges[] = { 244 + static const struct regmap_range da9063l_bb_da_volatile_ranges[] = { 245 245 regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_REG_EVENT_D), 246 246 regmap_reg_range(DA9063_REG_CONTROL_A, DA9063_REG_CONTROL_B), 247 247 regmap_reg_range(DA9063_REG_CONTROL_E, DA9063_REG_CONTROL_F), ··· 263 263 .n_yes_ranges = ARRAY_SIZE(da9063l_bb_writeable_ranges), 264 264 }; 265 265 266 - static const struct regmap_access_table da9063l_bb_volatile_table = { 267 - .yes_ranges = da9063l_bb_volatile_ranges, 268 - .n_yes_ranges = ARRAY_SIZE(da9063l_bb_volatile_ranges), 266 + static const struct regmap_access_table da9063l_bb_da_volatile_table = { 267 + .yes_ranges = da9063l_bb_da_volatile_ranges, 268 + .n_yes_ranges = ARRAY_SIZE(da9063l_bb_da_volatile_ranges), 269 + }; 270 + 271 + static const struct regmap_range da9063_da_readable_ranges[] = { 272 + regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_BB_REG_SECOND_D), 273 + regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_ID_32_31), 274 + regmap_reg_range(DA9063_REG_SEQ_A, DA9063_REG_AUTO3_LOW), 275 + regmap_reg_range(DA9063_REG_T_OFFSET, DA9063_BB_REG_GP_ID_11), 276 + regmap_reg_range(DA9063_REG_DEVICE_ID, DA9063_REG_VARIANT_ID), 277 + }; 278 + 279 + static const struct regmap_range da9063_da_writeable_ranges[] = { 280 + regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_REG_PAGE_CON), 281 + regmap_reg_range(DA9063_REG_FAULT_LOG, DA9063_REG_VSYS_MON), 282 + regmap_reg_range(DA9063_REG_COUNT_S, DA9063_BB_REG_ALARM_Y), 283 + regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_ID_32_31), 284 + regmap_reg_range(DA9063_REG_SEQ_A, DA9063_REG_AUTO3_LOW), 285 + regmap_reg_range(DA9063_REG_CONFIG_I, DA9063_BB_REG_MON_REG_4), 286 + regmap_reg_range(DA9063_BB_REG_GP_ID_0, DA9063_BB_REG_GP_ID_11), 287 + }; 288 + 289 + static const struct regmap_access_table da9063_da_readable_table = { 290 + .yes_ranges = da9063_da_readable_ranges, 291 + .n_yes_ranges = ARRAY_SIZE(da9063_da_readable_ranges), 292 + }; 293 + 294 + static const struct regmap_access_table da9063_da_writeable_table = { 295 + .yes_ranges = da9063_da_writeable_ranges, 296 + .n_yes_ranges = ARRAY_SIZE(da9063_da_writeable_ranges), 297 + }; 298 + 299 + static const struct regmap_range da9063l_da_readable_ranges[] = { 300 + regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_REG_MON_A10_RES), 301 + regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_ID_32_31), 302 + regmap_reg_range(DA9063_REG_SEQ_A, DA9063_REG_AUTO3_LOW), 303 + regmap_reg_range(DA9063_REG_T_OFFSET, DA9063_BB_REG_GP_ID_11), 304 + regmap_reg_range(DA9063_REG_DEVICE_ID, DA9063_REG_VARIANT_ID), 305 + }; 306 + 307 + static const struct regmap_range da9063l_da_writeable_ranges[] = { 308 + regmap_reg_range(DA9063_REG_PAGE_CON, DA9063_REG_PAGE_CON), 309 + regmap_reg_range(DA9063_REG_FAULT_LOG, DA9063_REG_VSYS_MON), 310 + regmap_reg_range(DA9063_REG_SEQ, DA9063_REG_ID_32_31), 311 + regmap_reg_range(DA9063_REG_SEQ_A, DA9063_REG_AUTO3_LOW), 312 + regmap_reg_range(DA9063_REG_CONFIG_I, DA9063_BB_REG_MON_REG_4), 313 + regmap_reg_range(DA9063_BB_REG_GP_ID_0, DA9063_BB_REG_GP_ID_11), 314 + }; 315 + 316 + static const struct regmap_access_table da9063l_da_readable_table = { 317 + .yes_ranges = da9063l_da_readable_ranges, 318 + .n_yes_ranges = ARRAY_SIZE(da9063l_da_readable_ranges), 319 + }; 320 + 321 + static const struct regmap_access_table da9063l_da_writeable_table = { 322 + .yes_ranges = da9063l_da_writeable_ranges, 323 + .n_yes_ranges = ARRAY_SIZE(da9063l_da_writeable_ranges), 269 324 }; 270 325 271 326 static const struct regmap_range_cfg da9063_range_cfg[] = { ··· 388 333 da9063_regmap_config.wr_table = 389 334 &da9063_bb_writeable_table; 390 335 da9063_regmap_config.volatile_table = 391 - &da9063_bb_volatile_table; 336 + &da9063_bb_da_volatile_table; 337 + break; 338 + case PMIC_DA9063_DA: 339 + da9063_regmap_config.rd_table = 340 + &da9063_da_readable_table; 341 + da9063_regmap_config.wr_table = 342 + &da9063_da_writeable_table; 343 + da9063_regmap_config.volatile_table = 344 + &da9063_bb_da_volatile_table; 392 345 break; 393 346 default: 394 347 dev_err(da9063->dev, ··· 413 350 da9063_regmap_config.wr_table = 414 351 &da9063l_bb_writeable_table; 415 352 da9063_regmap_config.volatile_table = 416 - &da9063l_bb_volatile_table; 353 + &da9063l_bb_da_volatile_table; 354 + break; 355 + case PMIC_DA9063_DA: 356 + da9063_regmap_config.rd_table = 357 + &da9063l_da_readable_table; 358 + da9063_regmap_config.wr_table = 359 + &da9063l_da_writeable_table; 360 + da9063_regmap_config.volatile_table = 361 + &da9063l_bb_da_volatile_table; 417 362 break; 418 363 default: 419 364 dev_err(da9063->dev,
+1
include/linux/mfd/da9063/core.h
··· 35 35 PMIC_DA9063_AD = 0x3, 36 36 PMIC_DA9063_BB = 0x5, 37 37 PMIC_DA9063_CA = 0x6, 38 + PMIC_DA9063_DA = 0x7, 38 39 }; 39 40 40 41 /* Interrupts */