Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp435977rwl; Wed, 5 Apr 2023 02:58:20 -0700 (PDT) X-Google-Smtp-Source: AKy350YH96GqkZwjW9J3WyLKUxzmmkL6wT/QWA10p+0Cq3rq1wL98Umzl8tPwso6DxB5gpK/qLho X-Received: by 2002:a17:903:234f:b0:1a1:cc91:c44f with SMTP id c15-20020a170903234f00b001a1cc91c44fmr6522471plh.1.1680688700584; Wed, 05 Apr 2023 02:58:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680688700; cv=none; d=google.com; s=arc-20160816; b=ap3LfrrdWzKjNo0pG2lwNZLDRYsp/OBy3kMQ2g/g9BoPF5H86vwL7kmiTJgB3tAvFA NSziI7RhpUYXSMHFR8LPpunMwtZwGytKZ7u2u9KwnAQMUsawCQQYQvD8ZGPaorEicI2s 90HQYmmtQ/0djdiWjomGxlY4szmntU2iMqL7VYDMEZ86wgTbqqSVR75dtNy5BpXpzcZz S4LfPybei+nkz7x2tFifIqj0AG14YSpAsaLqZkWyy0uw3yPjeHR5dmbjNbeHK+3Wp2BO MnaJDvQXj++udqUMOvf/Br/VJ8Q4hepiAZ6Zv4D4/MHx2hrR9Dg1DkMeZIWaos71FCFB ABIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:mime-version :dkim-signature; bh=WuDlPtdV6uZPprhEWy55rkbTExa0n5XzD3AAQzNgbNI=; b=Pzq0VOXsyeMI5MbYM7O6ASsPPPLWuLaxzg1vBNA8owARPdBYTdjysPCB+9l9byxYxF oPvpUybScnQZAOwYOYmVxaadZI23NNymru3j3C7uyeaB8wrpkTpiOV7C53CPnj4JjnSF W7/Pk1CRLTFMIakXK4YpBtZW01QW1R9ZVeBcrI7Y3liFfQ78f5OKqAFbEgUbxXHDLy8+ UifhiUv8KPO5HVWPoUNPSV0k/MkZD7VLiNI1gFcdk/3qN99YGjwFklzYMTZuYh2aDW73 aiuDWI1Vm0Wd8VAPQhTC86VRkBYgDgMj/RbRCD/Ncz8l+qeuraV0qMcvJ11578a2lclW K75Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=n7ssrNKq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p5-20020a170902e74500b0019f23a15f43si12743573plf.578.2023.04.05.02.58.07; Wed, 05 Apr 2023 02:58:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=n7ssrNKq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237241AbjDEJxZ (ORCPT + 99 others); Wed, 5 Apr 2023 05:53:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37650 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230103AbjDEJxX (ORCPT ); Wed, 5 Apr 2023 05:53:23 -0400 Received: from mail-oi1-x22a.google.com (mail-oi1-x22a.google.com [IPv6:2607:f8b0:4864:20::22a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AD43A189 for ; Wed, 5 Apr 2023 02:53:22 -0700 (PDT) Received: by mail-oi1-x22a.google.com with SMTP id f14so12668991oiw.10 for ; Wed, 05 Apr 2023 02:53:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1680688402; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=WuDlPtdV6uZPprhEWy55rkbTExa0n5XzD3AAQzNgbNI=; b=n7ssrNKq2c4+V5onYW0XrsAqYt4idodYcAdodhHTFj71uyPyjRvSXPQdSyA8ujPXNa 8vfh5WObSL/S+IDEb+Zm+NysaXju1Wpr+MGuhKbKxY8I7W0egA8oxjH4UBA2I0XmKIhn sc+SbwcY9E13DrNAO/UhpNMV0EWQzKBeV8PjH+l6ugeLplxZNikKXNBZnK4FMvj7AYLP ujXXcLYDWpeGK1pHgx6vlDrnjOvC/rRGrRObk2Gia0Q1qWN6GV1Tcq4wDfWrehIBIwZ2 yHHwKChXVLwhIyJR1yBm2e7ZVd6ISmX4Lb4zMxvk3+QGawPMvyU0WDigeDnLgu91mC8o cx8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680688402; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=WuDlPtdV6uZPprhEWy55rkbTExa0n5XzD3AAQzNgbNI=; b=fzGI9FDw6MuaFPeZwTjMRf0xbHQ/XOdZUx8Up9nW7Ouaw5llkmY0X7WS+UsyKoHqTz a3QnY+G3kKXGKzFLisLBTAzV7noG9Ryajcx2oziZbLs6i5UzHp94W3KqCkKd9XeNAW41 OtdYdmTK62Di+xyBxtsDp30la78WNbe0kMQxY0UB+gw4vUcrwcdO7qfeiNvbkqALsWDY 0aaELqGwV5/MYpDG59MuO904dAJNkFehAa74FV/vUhXmL3bquoVrL6AElsghGIvFAEay nX6DP9WeL9q9G3GbtK4n/QV1ZkvGGTa2BZhVzI2bXzcqgv1Yzr69pXxFquCWsiY4fqtJ SYdQ== X-Gm-Message-State: AAQBX9d5ChMm2/tES4YyQeBuS9+9C59FkWAnG335CLHlpqd1kxLlOlwv YvCLlEoJTs00xqpmP2LkkumPiFt1eWdRVdA9TxY= X-Received: by 2002:a05:6808:2198:b0:389:8dad:7832 with SMTP id be24-20020a056808219800b003898dad7832mr1770491oib.8.1680688401807; Wed, 05 Apr 2023 02:53:21 -0700 (PDT) MIME-Version: 1.0 From: Fabrizio Lamarque Date: Wed, 5 Apr 2023 11:53:10 +0200 Message-ID: Subject: iio: ad7192: Pending IRQ on SDO/RDY causing retrigger of interrupt handler and missing every sample To: alexandru.tachici@analog.com, linux-kernel@vger.kernel.org Cc: Jonathan Cameron , =?UTF-8?B?TnVubyBTw6E=?= Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Link: https://lore.kernel.org/all/20210906065630.16325-3-alexandru.tachici@analog.com/ This commit broke the driver functionality, i.e. cat in_voltage1_raw triggers a correct sampling sequence only the first time, then it always returns the first sampled value. Following the sequence of ad_sigma_delta_single_conversion() within ad_sigma_delta.c, this is due to: - IRQ resend mechanism is always enabled for ARM cores (CONFIG_HARDIRQS_SW_RESEND) - Edge IRQs are always made pending when a corresponding event happens, even after disable_irq(). This is intentional and designed to prevent missing signal edges. - Level IRQs are not impacted by IRQ resend (i.e. IRQ_PENDING is always cleared). - SPI communication causes the IRQ to be set pending (even if corresponding interrupt is disabled) - The second time ad_sigma_delta_single_conversion() is called, enable_irq() will trigger the interrupt immediately, even if RDY line is high. - In turn, this causes the call wait_for_completion_interruptible_timeout() to exit immediately, with RDY line still high. - Right after the SPI register read, the MODE register is written with AD_SD_MODE_IDLE, and pending conversion is stopped. Hence DATA register is never updated. I would suggest to revert this commit or set the flag with IRQF_TRIGGER_LOW instead of IRQF_TRIGGER_FALLING, but I am not sure about the problem solved by this commit and how to replicate it. Another option would be to keep IRQ flags within bindings only. As a side note, AD7192 datasheet says that the falling edge on SDO line _can_ be used as an interrupt to processor, but it also states that the _level_ on SDO/RDY line indicates the sample is ready. What happens on SDO/RDY interrupt line before the ADC conversion is triggered should be ignored. This bug should be easy to reproduce on ADI demo boards with impacted kernel versions, just by manually reading any input channel from sysfs. Fabrizio Lamarque