mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
mfd: bd96801: Support ROHM BD96805
The ROHM BD96805 is from the software perspective almost identical to the ROHM BD96801. The main difference is different voltage tuning ranges. Add support differentiating these PMICs based on the compatible, and invoking the regulator driver with correct IC type. Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com> Acked-by: Conor Dooley <conor.dooley@microchip.com> Link: https://lore.kernel.org/r/8680097dc083f191bea56d3ac7c6fe5c005644ec.1744090658.git.mazziesaccount@gmail.com Signed-off-by: Lee Jones <lee@kernel.org>
This commit is contained in:
parent
55606b9b20
commit
6a309b4892
2 changed files with 23 additions and 0 deletions
|
@ -220,6 +220,10 @@ static struct mfd_cell bd96802_cells[] = {
|
|||
[WDG_CELL] = { .name = "bd96801-wdt", },
|
||||
[REGULATOR_CELL] = { .name = "bd96802-regulator", },
|
||||
};
|
||||
static struct mfd_cell bd96805_cells[] = {
|
||||
[WDG_CELL] = { .name = "bd96801-wdt", },
|
||||
[REGULATOR_CELL] = { .name = "bd96805-regulator", },
|
||||
};
|
||||
|
||||
static const struct regmap_range bd96801_volatile_ranges[] = {
|
||||
/* Status registers */
|
||||
|
@ -599,6 +603,20 @@ static const struct bd968xx bd96802_data = {
|
|||
.unlock_val = BD96801_UNLOCK,
|
||||
};
|
||||
|
||||
static const struct bd968xx bd96805_data = {
|
||||
.errb_irqs = bd96801_reg_errb_irqs,
|
||||
.intb_irqs = bd96801_reg_intb_irqs,
|
||||
.num_errb_irqs = ARRAY_SIZE(bd96801_reg_errb_irqs),
|
||||
.num_intb_irqs = ARRAY_SIZE(bd96801_reg_intb_irqs),
|
||||
.errb_irq_chip = &bd96801_irq_chip_errb,
|
||||
.intb_irq_chip = &bd96801_irq_chip_intb,
|
||||
.regmap_config = &bd96801_regmap_config,
|
||||
.cells = bd96805_cells,
|
||||
.num_cells = ARRAY_SIZE(bd96805_cells),
|
||||
.unlock_reg = BD96801_LOCK_REG,
|
||||
.unlock_val = BD96801_UNLOCK,
|
||||
};
|
||||
|
||||
static int bd96801_i2c_probe(struct i2c_client *i2c)
|
||||
{
|
||||
struct regmap_irq_chip_data *intb_irq_data, *errb_irq_data;
|
||||
|
@ -621,6 +639,9 @@ static int bd96801_i2c_probe(struct i2c_client *i2c)
|
|||
case ROHM_CHIP_TYPE_BD96802:
|
||||
ddata = &bd96802_data;
|
||||
break;
|
||||
case ROHM_CHIP_TYPE_BD96805:
|
||||
ddata = &bd96805_data;
|
||||
break;
|
||||
default:
|
||||
dev_err(&i2c->dev, "Unknown IC\n");
|
||||
return -EINVAL;
|
||||
|
@ -717,6 +738,7 @@ skip_errb:
|
|||
static const struct of_device_id bd96801_of_match[] = {
|
||||
{ .compatible = "rohm,bd96801", .data = (void *)ROHM_CHIP_TYPE_BD96801 },
|
||||
{ .compatible = "rohm,bd96802", .data = (void *)ROHM_CHIP_TYPE_BD96802 },
|
||||
{ .compatible = "rohm,bd96805", .data = (void *)ROHM_CHIP_TYPE_BD96805 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, bd96801_of_match);
|
||||
|
|
|
@ -18,6 +18,7 @@ enum rohm_chip_type {
|
|||
ROHM_CHIP_TYPE_BD71847,
|
||||
ROHM_CHIP_TYPE_BD96801,
|
||||
ROHM_CHIP_TYPE_BD96802,
|
||||
ROHM_CHIP_TYPE_BD96805,
|
||||
ROHM_CHIP_TYPE_AMOUNT
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue