From 87feab86a24a4c6c86ba2cc730bdda3082c299e5 Mon Sep 17 00:00:00 2001 From: Shubhi Garg Date: Thu, 21 Jul 2022 10:00:01 +0000 Subject: [PATCH] mfd: return from probe for vrs chip rev < 0x40 VRS Power Sequencer has silicon issues for chip revision < 0x40. Thus making probe failed and driver will exit if we read revision < 0x40. Bug 3366934 Change-Id: I8ce7ddc1c6b76e6cced5349798a5d42878605441 Signed-off-by: Shubhi Garg Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2728938 (cherry picked from commit 67df4ac93fb2f8e6285407a8fdcea186479cbaa1) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2704054 (cherry picked from commit 2e3764ac0dddd3d7d96d29f6a9b49655c16027bc) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/2748742 Reviewed-by: Bibek Basu GVS: Gerrit_Virtual_Submit --- drivers/mfd/nvidia-vrs-pseq.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/mfd/nvidia-vrs-pseq.c b/drivers/mfd/nvidia-vrs-pseq.c index 9ae0357d..afe63c02 100644 --- a/drivers/mfd/nvidia-vrs-pseq.c +++ b/drivers/mfd/nvidia-vrs-pseq.c @@ -171,6 +171,14 @@ static int nvvrs_pseq_vendor_info(struct nvvrs_pseq_chip *chip) } model_rev = (unsigned int)ret; + + if (model_rev < 0x40) { + dev_info(chip->dev, "NVVRS Chip Rev: 0x%X which is < 0x40\n", + model_rev); + dev_info(chip->dev, "Silicon issues thus exiting...\n"); + return -EINVAL; + } + dev_info(chip->dev, "NVVRS Model Rev: 0x%X\n", model_rev); return 0; @@ -208,6 +216,12 @@ static int nvvrs_pseq_probe(struct i2c_client *client, return ret; } + ret = nvvrs_pseq_vendor_info(nvvrs_chip); + if (ret < 0) { + dev_err(nvvrs_chip->dev, "Invalid vendor info: %d\n", ret); + return ret; + } + nvvrs_pseq_irq_chip.irq_drv_data = nvvrs_chip; ret = devm_regmap_add_irq_chip(nvvrs_chip->dev, nvvrs_chip->rmap, client->irq, IRQF_ONESHOT | IRQF_SHARED, 0, @@ -230,12 +244,6 @@ static int nvvrs_pseq_probe(struct i2c_client *client, return ret; } - ret = nvvrs_pseq_vendor_info(nvvrs_chip); - if (ret < 0) { - dev_err(nvvrs_chip->dev, "Failed to read vendor info: %d\n", ret); - return ret; - } - dev_info(nvvrs_chip->dev, "NVVRS PSEQ probe successful"); return 0; }