summaryrefslogtreecommitdiff
path: root/drivers/iio
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2026-08-10 12:53:41 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2026-08-10 12:53:41 +0200
commitccda015d76736dc5ccefc70a040b9304a6c2000f (patch)
tree1019f81aa32075abc75b50e8082a2c0151a0007f /drivers/iio
parent2d5667b6c3d7adf0f8551bbac7c707fb87155611 (diff)
parent55c16e15ff9f91bc994a20124b83faf27f0e3690 (diff)
Merge tag 'thermal-v7.3-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/thermal/linux
Pull thermal driver updates for 7.3-rc1 from Daniel Lezcano: "- Move thermal_zone_device_enable() to the right place in order to prevent calling it if the thermal zone registration failed (Dan Carpenter) - Improve bitfield manipulations on Armada (Bryan B. Lima) - Remove unneeded 'fast_io' on Sun8i and Armada (Wolfram Sang) - Fix wrong boundary when clamping the low values in the set_trips() callback and fix wrong mask when setting the temperature interval on Airoha (Christian Marangi) - Make use of the regmap API in order to support the Airoha AN7583 (Christian Marangi) - Fix adc_tm5_get_temp() return check value on the QCom SPMI ADC sensor (Rakesh Kota) - Fix unbalanced clock enablement when the resume fails on the iMX driver (Can Peng) - Add Qualcomm Master BandGap thermal monitor support (Satya Priya Kakitapalli) - Add Maili Temperature bindings compatible (Haritha S K) - Add a devm action to clean hardware interrupts, sampling, and control registers on Spacemit K1 (Pei Xiao) - Fix trivial typo in an OF code comment (Marek Vasut) - Remove unecessary print on Qcom SPMI ADC driver when a call to devm_request_threaded_irq() fails as this one already prints a message (Jishnu Prakash) - Add support for QCom PMIC5 Gen3 ADC by using auxialiary driver and shared interrupt with the IIO driver (Jishnu Prakash) - Make resets optional on MT8196 and add the corresponding property in the DT bindings (AngeloGioacchino Del Regno) - Fix clock staying enabled with the resume operation fails on Qoriq (Can Peng) - Fix wrong closing brace position in thermal library header (Andreas Haufler) - Fix low and high trip point validation by moving the check after the clamp on the spacemit driver (surendra) - Remove redundant error messages on IRQ request failure (Pan Chuang) * tag 'thermal-v7.3-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/thermal/linux: (26 commits) thermal/drivers: Remove redundant error messages on IRQ request failure thermal/drivers/spacemit: Validate clamped trip thresholds tools/lib/thermal: Fix misplaced extern "C" closing brace thermal/drivers/qoriq: Disable clock on resume failure thermal/drivers/mediatek/lvts_thermal: Make reset optional for MT8196 dt-bindings: thermal: mediatek: Make resets optional for MT8196 thermal/drivers/qcom: add support for PMIC5 Gen3 ADC thermal monitoring iio: adc: qcom-spmi-adc5-gen3: Share SDAM0 IRQ with ADC_TM auxiliary driver iio: adc: qcom-spmi-adc5-gen3: Remove an unnecessary print thermal/of: Fix trivial enabled typo thermal/drivers/spacemit/k1: Add shutdown action and reorder registration order dt-bindings: thermal: qcom-tsens: Document the Maili Temperature Sensor thermal/drivers/qcom: Add support for Qualcomm MBG thermal monitoring dt-bindings: thermal: Add Qualcomm MBG thermal monitor support thermal/drivers/imx: Disable clock on runtime resume failure thermal/drivers/qcom-spmi-adc-tm5: Drop IIO_VAL_INT check in adc_tm5_get_temp thermal/drivers/airoha: Add support for AN7583 Thermal Sensor dt-bindings: arm: airoha: Add the chip-scu node for AN7583 SoC thermal/drivers/airoha: Generalize get_thermal_ADC and set_mux function thermal/drivers/airoha: Generalize probe function ...
Diffstat (limited to 'drivers/iio')
-rw-r--r--drivers/iio/adc/qcom-spmi-adc5-gen3.c69
1 files changed, 19 insertions, 50 deletions
diff --git a/drivers/iio/adc/qcom-spmi-adc5-gen3.c b/drivers/iio/adc/qcom-spmi-adc5-gen3.c
index c56b650fd8c0..c68c6c5f6aca 100644
--- a/drivers/iio/adc/qcom-spmi-adc5-gen3.c
+++ b/drivers/iio/adc/qcom-spmi-adc5-gen3.c
@@ -55,9 +55,6 @@ struct adc5_channel_prop {
* requests from multiple clients.
* @data: software configuration data.
* @n_tm_channels: number of ADC channels used for TM measurements.
- * @handler: TM callback to be called for threshold violation interrupt
- * on first SDAM.
- * @tm_aux: pointer to auxiliary TM device.
*/
struct adc5_chip {
struct device *dev;
@@ -69,8 +66,6 @@ struct adc5_chip {
struct mutex lock;
const struct adc5_data *data;
unsigned int n_tm_channels;
- void (*handler)(struct auxiliary_device *tm_aux);
- struct auxiliary_device *tm_aux;
};
int adc5_gen3_read(struct adc5_device_data *adc, unsigned int sdam_index,
@@ -286,23 +281,21 @@ static irqreturn_t adc5_gen3_isr(int irq, void *dev_id)
{
struct adc5_chip *adc = dev_id;
struct device *dev = adc->dev;
- struct auxiliary_device *adev;
u8 status, eoc_status, val;
- u8 tm_status[2];
int ret;
ret = adc5_gen3_read(&adc->dev_data, ADC5_GEN3_VADC_SDAM,
ADC5_GEN3_STATUS1, &status, sizeof(status));
if (ret) {
dev_err(dev, "adc read status1 failed with %d\n", ret);
- return IRQ_HANDLED;
+ return IRQ_NONE;
}
ret = adc5_gen3_read(&adc->dev_data, ADC5_GEN3_VADC_SDAM,
ADC5_GEN3_EOC_STS, &eoc_status, sizeof(eoc_status));
if (ret) {
dev_err(dev, "adc read eoc status failed with %d\n", ret);
- return IRQ_HANDLED;
+ return IRQ_NONE;
}
if (status & ADC5_GEN3_STATUS1_CONV_FAULT) {
@@ -315,30 +308,13 @@ static irqreturn_t adc5_gen3_isr(int irq, void *dev_id)
return IRQ_HANDLED;
}
- /* CHAN0 is the preconfigured channel for immediate conversion */
- if (eoc_status & ADC5_GEN3_EOC_CHAN_0)
- complete(&adc->complete);
-
- ret = adc5_gen3_read(&adc->dev_data, ADC5_GEN3_VADC_SDAM,
- ADC5_GEN3_TM_HIGH_STS, tm_status, sizeof(tm_status));
- if (ret) {
- dev_err(dev, "adc read TM status failed with %d\n", ret);
- return IRQ_HANDLED;
- }
-
- dev_dbg(dev, "Interrupt status:%#x, EOC status:%#x, high:%#x, low:%#x\n",
- status, eoc_status, tm_status[0], tm_status[1]);
+ dev_dbg(dev, "Interrupt status:%#x, EOC status:%#x\n", status, eoc_status);
- if (tm_status[0] || tm_status[1]) {
- adev = adc->tm_aux;
- if (!adev || !adev->dev.driver) {
- dev_err(dev, "adc_tm auxiliary device not initialized\n");
- return IRQ_HANDLED;
- }
-
- adc->handler(adev);
- }
+ /* CHAN0 is the preconfigured channel for immediate conversion */
+ if (!(eoc_status & ADC5_GEN3_EOC_CHAN_0))
+ return IRQ_NONE;
+ complete(&adc->complete);
return IRQ_HANDLED;
}
@@ -683,8 +659,6 @@ static int adc5_gen3_add_aux_tm_device(struct adc5_chip *adc)
if (ret)
return ret;
- adc->tm_aux = &aux_device->aux_dev;
-
return 0;
}
@@ -740,16 +714,6 @@ int adc5_gen3_therm_code_to_temp(struct device *dev,
}
EXPORT_SYMBOL_NS_GPL(adc5_gen3_therm_code_to_temp, "QCOM_SPMI_ADC5_GEN3");
-void adc5_gen3_register_tm_event_notifier(struct device *dev,
- void (*handler)(struct auxiliary_device *))
-{
- struct iio_dev *indio_dev = dev_get_drvdata(dev->parent);
- struct adc5_chip *adc = iio_priv(indio_dev);
-
- adc->handler = handler;
-}
-EXPORT_SYMBOL_NS_GPL(adc5_gen3_register_tm_event_notifier, "QCOM_SPMI_ADC5_GEN3");
-
static int adc5_gen3_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -816,14 +780,19 @@ static int adc5_gen3_probe(struct platform_device *pdev)
return -ENOMEM;
}
- ret = devm_request_irq(dev, adc->dev_data.base[ADC5_GEN3_VADC_SDAM].irq,
- adc5_gen3_isr, 0,
- adc->dev_data.base[ADC5_GEN3_VADC_SDAM].irq_name,
- adc);
+ /*
+ * This interrupt is shared with the ADC_TM auxiliary driver, which
+ * is threaded and uses IRQF_ONESHOT. Since shared interrupts need
+ * to agree on IRQF_ONESHOT configuration and there is a kernel
+ * warning for using IRQF_ONESHOT with non-threaded interrupts,
+ * make this also a threaded IRQ.
+ */
+ ret = devm_request_threaded_irq(dev, adc->dev_data.base[ADC5_GEN3_VADC_SDAM].irq,
+ NULL, adc5_gen3_isr, IRQF_ONESHOT | IRQF_SHARED,
+ adc->dev_data.base[ADC5_GEN3_VADC_SDAM].irq_name,
+ adc);
if (ret)
- return dev_err_probe(dev, ret,
- "Failed to request SDAM%d irq\n",
- ADC5_GEN3_VADC_SDAM);
+ return ret;
ret = adc5_get_fw_data(adc);
if (ret)