aboutsummaryrefslogtreecommitdiff
path: root/drivers/mfd/tps65086.c
diff options
context:
space:
mode:
authorGravatar Andre Werner <andre.werner@systec-electronic.com> 2023-08-18 10:37:21 +0200
committerGravatar Lee Jones <lee@kernel.org> 2023-08-18 21:43:02 +0100
commitc01467355f8eb126cab0ef28b66bb506fe6a2e21 (patch)
treec181ea63a0ee6d1bae835e29460f346c02c424a3 /drivers/mfd/tps65086.c
parentLinux 6.5-rc1 (diff)
downloadlinux-c01467355f8eb126cab0ef28b66bb506fe6a2e21.tar.gz
linux-c01467355f8eb126cab0ef28b66bb506fe6a2e21.tar.bz2
linux-c01467355f8eb126cab0ef28b66bb506fe6a2e21.zip
mfd: tps65086: Read DEVICE ID register 1 from device
This commit prepares a following commit for the regulator part of the MFD. The driver should support different device chips that differ in their register definitions, for instance to control LDOA1 and SWB2. So it is necessary to use a dedicated regulator description for a specific device variant. Thus, the content from DEVICEID Register 1 is used to choose a dedicated configuration between the different device variants. Signed-off-by: Andre Werner <andre.werner@systec-electronic.com> Link: https://lore.kernel.org/r/20230818083721.29790-2-andre.werner@systec-electronic.com Signed-off-by: Lee Jones <lee@kernel.org>
Diffstat (limited to 'drivers/mfd/tps65086.c')
-rw-r--r--drivers/mfd/tps65086.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/mfd/tps65086.c b/drivers/mfd/tps65086.c
index 6a21000aad4a..9bb7d7d8dcfc 100644
--- a/drivers/mfd/tps65086.c
+++ b/drivers/mfd/tps65086.c
@@ -81,16 +81,23 @@ static int tps65086_probe(struct i2c_client *client)
return PTR_ERR(tps->regmap);
}
- ret = regmap_read(tps->regmap, TPS65086_DEVICEID, &version);
+ /* Store device ID to load regulator configuration that fit to IC variant */
+ ret = regmap_read(tps->regmap, TPS65086_DEVICEID1, &tps->chip_id);
if (ret) {
- dev_err(tps->dev, "Failed to read revision register\n");
+ dev_err(tps->dev, "Failed to read revision register 1\n");
+ return ret;
+ }
+
+ ret = regmap_read(tps->regmap, TPS65086_DEVICEID2, &version);
+ if (ret) {
+ dev_err(tps->dev, "Failed to read revision register 2\n");
return ret;
}
dev_info(tps->dev, "Device: TPS65086%01lX, OTP: %c, Rev: %ld\n",
- (version & TPS65086_DEVICEID_PART_MASK),
- (char)((version & TPS65086_DEVICEID_OTP_MASK) >> 4) + 'A',
- (version & TPS65086_DEVICEID_REV_MASK) >> 6);
+ (version & TPS65086_DEVICEID2_PART_MASK),
+ (char)((version & TPS65086_DEVICEID2_OTP_MASK) >> 4) + 'A',
+ (version & TPS65086_DEVICEID2_REV_MASK) >> 6);
if (tps->irq > 0) {
ret = regmap_add_irq_chip(tps->regmap, tps->irq, IRQF_ONESHOT, 0,