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; }