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

regulator: pca9450: Make IRQ optional

The IRQ line might not be connected on some boards. Allow the driver
to be probed without it.

Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Link: https://patch.msgid.link/20240708084107.38986-5-frieder@fris.de
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Frieder Schrempf and committed by
Mark Brown
83808c54 60704710

+19 -22
+19 -22
drivers/regulator/pca9450-regulator.c
··· 891 891 unsigned int reset_ctrl; 892 892 int ret; 893 893 894 - if (!i2c->irq) { 895 - dev_err(&i2c->dev, "No IRQ configured?\n"); 896 - return -EINVAL; 897 - } 898 - 899 894 pca9450 = devm_kzalloc(&i2c->dev, sizeof(struct pca9450), GFP_KERNEL); 900 895 if (!pca9450) 901 896 return -ENOMEM; ··· 962 967 } 963 968 } 964 969 965 - ret = devm_request_threaded_irq(pca9450->dev, pca9450->irq, NULL, 966 - pca9450_irq_handler, 967 - (IRQF_TRIGGER_FALLING | IRQF_ONESHOT), 968 - "pca9450-irq", pca9450); 969 - if (ret != 0) { 970 - dev_err(pca9450->dev, "Failed to request IRQ: %d\n", 971 - pca9450->irq); 972 - return ret; 973 - } 974 - /* Unmask all interrupt except PWRON/WDOG/RSVD */ 975 - ret = regmap_update_bits(pca9450->regmap, PCA9450_REG_INT1_MSK, 976 - IRQ_VR_FLT1 | IRQ_VR_FLT2 | IRQ_LOWVSYS | 977 - IRQ_THERM_105 | IRQ_THERM_125, 978 - IRQ_PWRON | IRQ_WDOGB | IRQ_RSVD); 979 - if (ret) { 980 - dev_err(&i2c->dev, "Unmask irq error\n"); 981 - return ret; 970 + if (pca9450->irq) { 971 + ret = devm_request_threaded_irq(pca9450->dev, pca9450->irq, NULL, 972 + pca9450_irq_handler, 973 + (IRQF_TRIGGER_FALLING | IRQF_ONESHOT), 974 + "pca9450-irq", pca9450); 975 + if (ret != 0) { 976 + dev_err(pca9450->dev, "Failed to request IRQ: %d\n", 977 + pca9450->irq); 978 + return ret; 979 + } 980 + /* Unmask all interrupt except PWRON/WDOG/RSVD */ 981 + ret = regmap_update_bits(pca9450->regmap, PCA9450_REG_INT1_MSK, 982 + IRQ_VR_FLT1 | IRQ_VR_FLT2 | IRQ_LOWVSYS | 983 + IRQ_THERM_105 | IRQ_THERM_125, 984 + IRQ_PWRON | IRQ_WDOGB | IRQ_RSVD); 985 + if (ret) { 986 + dev_err(&i2c->dev, "Unmask irq error\n"); 987 + return ret; 988 + } 982 989 } 983 990 984 991 /* Clear PRESET_EN bit in BUCK123_DVS to use DVS registers */