From patchwork Fri Nov 9 03:25:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "(Exiting) Baolin Wang" X-Patchwork-Id: 10675267 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CC0F313BF for ; Fri, 9 Nov 2018 03:26:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B58622EB83 for ; Fri, 9 Nov 2018 03:26:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A62552EB74; Fri, 9 Nov 2018 03:26:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3F09B2EB74 for ; Fri, 9 Nov 2018 03:26:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727391AbeKINEh (ORCPT ); Fri, 9 Nov 2018 08:04:37 -0500 Received: from mail-pl1-f194.google.com ([209.85.214.194]:38894 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727311AbeKINEh (ORCPT ); Fri, 9 Nov 2018 08:04:37 -0500 Received: by mail-pl1-f194.google.com with SMTP id p4-v6so272986plo.5 for ; Thu, 08 Nov 2018 19:25:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=yX2sCd2EA1FTKfmRYjC58TpT5nQVf8lwKNV7j+JnwoA=; b=GJwqF1YAE8+XFqsMPGlLa5K1x5M0ynidJ3srGG1Gsug9GkYRPjW8nKPItLgwL/t5XL tRsXtSnck7I/I/g9dn12vUY8YP7xJLjaZ8iKmkIfoHGA+I8ODwETEG/KVDaE5g4hM0BS KNE4gfzekefEf9dP9Pl1Zfva2OtQGZMkNSStM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=yX2sCd2EA1FTKfmRYjC58TpT5nQVf8lwKNV7j+JnwoA=; b=eYpyOdFabpVhOc+Y8sQL+Dm01ef8hxayA5X+ziPNDoyQG0lsCKgIeRKfljcjS3RRi2 Rv4trlq/urRutdC4QdNK6jsIvDyV6SiCEQziOGbnHce/D/sE9BqiKxetAyP612qs6T6B rRSP9xBIaI7jj8wIMa06Du6UQ8LlOA4Nbw3x5mLSG07Lxui+iBseJxzBC+xlX18rKUUw Qr9GiD4gz9DOTR3CWD6wBGUV33aBXCV1Z7nXI5C7SnC6qI8omYVyc1CfQCuTaAQSXeU4 QRumP4lNMkwFI6v6VT4n4ohclA3Xrmu+/tBgc2F5+AsNackKsPTY356qUlPjOTGUsZUU TOpw== X-Gm-Message-State: AGRZ1gKPjQCMepVr7udaxh89nD/l6tFlNVtr9lyTNxj6Sa/PuaBZHGXX caDKtm93h/BzzsLAb2x3evGp6g== X-Google-Smtp-Source: AJdET5ffLVtugP0nUJykP0UozNL8jk5m3ALMixWhiyHtZCc9UbFIoEeKNfEcwEcLtAojDmgRg1u+eA== X-Received: by 2002:a17:902:6b46:: with SMTP id g6-v6mr7176191plt.33.1541733959593; Thu, 08 Nov 2018 19:25:59 -0800 (PST) Received: from baolinwangubtpc.spreadtrum.com ([117.18.48.102]) by smtp.gmail.com with ESMTPSA id h7-v6sm6656675pfd.35.2018.11.08.19.25.55 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 08 Nov 2018 19:25:58 -0800 (PST) From: Baolin Wang To: jic23@kernel.org Cc: knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net, freeman.liu@unisoc.com, broonie@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, baolin.wang@linaro.org Subject: [PATCH] iio: adc: sc27xx: Add ADC data conversion timeout Date: Fri, 9 Nov 2018 11:25:31 +0800 Message-Id: <208f9043fbd9b14b7a0c2743f68fa424388f5dcd.1541733478.git.baolin.wang@linaro.org> X-Mailer: git-send-email 1.7.9.5 Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Freeman Liu Sometimes the ADC controller met some problems, and it will not complete the data conversion, that will can not wake up the read process any more to block users. So we should add one maximum conversion time to avoid this issue. Signed-off-by: Freeman Liu Signed-off-by: Baolin Wang --- drivers/iio/adc/sc27xx_adc.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/iio/adc/sc27xx_adc.c b/drivers/iio/adc/sc27xx_adc.c index 7940b23..f7f7a189 100644 --- a/drivers/iio/adc/sc27xx_adc.c +++ b/drivers/iio/adc/sc27xx_adc.c @@ -52,6 +52,9 @@ /* Timeout (ms) for the trylock of hardware spinlocks */ #define SC27XX_ADC_HWLOCK_TIMEOUT 5000 +/* Timeout (ms) for ADC data conversion according to ADC datasheet */ +#define SC27XX_ADC_RDY_TIMEOUT 100 + /* Maximum ADC channel number */ #define SC27XX_ADC_CHANNEL_MAX 32 @@ -223,7 +226,14 @@ static int sc27xx_adc_read(struct sc27xx_adc_data *data, int channel, if (ret) goto disable_adc; - wait_for_completion(&data->completion); + ret = wait_for_completion_timeout(&data->completion, + msecs_to_jiffies(SC27XX_ADC_RDY_TIMEOUT)); + if (!ret) { + dev_err(data->dev, "read ADC data timeout\n"); + ret = -ETIMEDOUT; + } else { + ret = 0; + } disable_adc: regmap_update_bits(data->regmap, data->base + SC27XX_ADC_CTL,