From patchwork Mon Oct 26 13:36:09 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bartosz Golaszewski X-Patchwork-Id: 11857275 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F01ACC4363A for ; Mon, 26 Oct 2020 13:50:06 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3045821D42 for ; Mon, 26 Oct 2020 13:50:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="p2pvXT4Y"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=bgdev-pl.20150623.gappssmtp.com header.i=@bgdev-pl.20150623.gappssmtp.com header.b="xULoTkoU" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3045821D42 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=DO+QJTIky2z/Um6AM8hLIgZ5+gnAChlS4S+whSyEvoo=; b=p2pvXT4YVJAhOL5GJ1jolmhd2 wox0toviPSklhaDTeZiZt2Id4au9/jZhONz+x1X2MXq9jJjjTPNFM3Tw2QGOXIHFcii1lB9jeSk0s GAvTcs38iTSq3+wViuLJuK4dk2pvZo1h4qmXkPS3Y0Mdj5ULM1vQ6HAbfdFm4Ht4nvCjTz7tuQ1JI iBgwAnQ5T+ZQ0OMXHesBssKqY/pcryHmu+Uep/SD66Q+oA+QY3bqObhCHR/8zyaz6vNoDW/jeUg19 hLbzJB91VbTEdFzzeCDCK0LyINTowfIL2SH5IOIlRtnsoBwz1yCTGZ6CCWIbWpx0oA+dTY7OjjZJb i+k9V5B+w==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kX2qp-0005Fs-Ki; Mon, 26 Oct 2020 13:47:55 +0000 Received: from mail-wr1-x441.google.com ([2a00:1450:4864:20::441]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kX2fm-0008Fp-H9 for linux-arm-kernel@lists.infradead.org; Mon, 26 Oct 2020 13:36:37 +0000 Received: by mail-wr1-x441.google.com with SMTP id x7so12611661wrl.3 for ; Mon, 26 Oct 2020 06:36:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=k40eJc8Lhw98TUMyUtqdBZVrG65XsNSVzHSaCNt0jHc=; b=xULoTkoUGRbnpHi6ZghaIZ1Q5yiAkgzBSZomS+pZDERJpF71+9WHNz7PkKFZCppqnR E8TvUVRzJBWf61WOq6yMPk1rtsL/mjsrHd984WeDRag1X84yfn9JZ3/BUdFfpsyAhr9i r+3jGNJKjnN9NhccBQ3VVT/UqJwJoQO0rwTYfNAdIj3OK+AX71r8AOVUI8mt+ZO9CAjl crYeJmkgxX/876FoIJU0Li4C6oO8FT+cCgFCyan2kbT99hhNS3i2Q9r4i1ccDmqKiRT0 mMHQBprSDMOBi94y3N82AbCwRWdMXNsHegunbPSFZH3U49aHEKpZXieoIckKWFPib/GG 7/eg== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=k40eJc8Lhw98TUMyUtqdBZVrG65XsNSVzHSaCNt0jHc=; b=EGIyc4MCwEn8qup1a9CvxORqnd2elSJG1gc+0+HiTWtjaOBo95jvMWRuwtFJVLN6Zk b1msqRtiyUsDKGyxKH40nNEx5Wjg1Wu8mwvKFyeKQZiFNf0G5jS51ha7XC0ePximabL5 sxxUhLjVv4Qq/JfkA1K8QevlSojTRW9uKFIWLLUbMGZm2ccl2VorQwSFoEYxeNW5IbhR bTvAYcea3dkMrwj4CbUarG8oQSTiVy3VDks6HpfjhfHYUlwPiTpKiejtqlELg/wX1M7H kNFyDU35uCm2LVu0QaM36kngSOVASKhPQDjystsgXc5Yf3hLNC2h+JrCkOD/eVr53u7v 0ymg== X-Gm-Message-State: AOAM530gAANiSphMbomSxdo5FZeR2RZQK8Ed4HdK/KBmoGJZaCM9p72i 8C3JV4lsJN8QF8u/9rSvBiqg+w== X-Google-Smtp-Source: ABdhPJya7i/8CLwnUaaOp1aYoYaQe7iJhVlKyGV0P8+acTJoTJqeMcxGCcPsHQ982b6i6Dwhqn+clQ== X-Received: by 2002:a5d:5344:: with SMTP id t4mr17501589wrv.267.1603719387795; Mon, 26 Oct 2020 06:36:27 -0700 (PDT) Received: from localhost.localdomain (lfbn-nic-1-190-206.w2-15.abo.wanadoo.fr. [2.15.39.206]) by smtp.gmail.com with ESMTPSA id f7sm23688991wrx.64.2020.10.26.06.36.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Oct 2020 06:36:27 -0700 (PDT) From: Bartosz Golaszewski To: Jonathan Cameron , Lars-Peter Clausen , Peter Meerwald-Stadler , Michal Simek Subject: [PATCH 5/5] iio: adc: xilinx: use iio devres helpers Date: Mon, 26 Oct 2020 14:36:09 +0100 Message-Id: <20201026133609.24262-6-brgl@bgdev.pl> X-Mailer: git-send-email 2.29.1 In-Reply-To: <20201026133609.24262-1-brgl@bgdev.pl> References: <20201026133609.24262-1-brgl@bgdev.pl> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201026_093631_529649_39DE88DD X-CRM114-Status: GOOD ( 22.20 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-iio@vger.kernel.org, Bartosz Golaszewski , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Bartosz Golaszewski Shrink the code by using devres variants of all iio routines. This allows us to entirely drop the remove() callback as well as significantly simplifies error paths in probe(). Signed-off-by: Bartosz Golaszewski --- drivers/iio/adc/xilinx-xadc-core.c | 97 ++++++++++-------------------- 1 file changed, 32 insertions(+), 65 deletions(-) diff --git a/drivers/iio/adc/xilinx-xadc-core.c b/drivers/iio/adc/xilinx-xadc-core.c index 4440b7a9bd36..c17705205456 100644 --- a/drivers/iio/adc/xilinx-xadc-core.c +++ b/drivers/iio/adc/xilinx-xadc-core.c @@ -706,11 +706,12 @@ static const struct iio_trigger_ops xadc_trigger_ops = { static struct iio_trigger *xadc_alloc_trigger(struct iio_dev *indio_dev, const char *name) { + struct device *dev = indio_dev->dev.parent; struct iio_trigger *trig; int ret; - trig = iio_trigger_alloc("%s%d-%s", indio_dev->name, - indio_dev->id, name); + trig = devm_iio_trigger_alloc(dev, "%s%d-%s", indio_dev->name, + indio_dev->id, name); if (trig == NULL) return ERR_PTR(-ENOMEM); @@ -718,15 +719,11 @@ static struct iio_trigger *xadc_alloc_trigger(struct iio_dev *indio_dev, trig->ops = &xadc_trigger_ops; iio_trigger_set_drvdata(trig, iio_priv(indio_dev)); - ret = iio_trigger_register(trig); + ret = devm_iio_trigger_register(dev, trig); if (ret) - goto error_free_trig; + return ERR_PTR(ret); return trig; - -error_free_trig: - iio_trigger_free(trig); - return ERR_PTR(ret); } static int xadc_power_adc_b(struct xadc *xadc, unsigned int seq_mode) @@ -1247,39 +1244,35 @@ static int xadc_probe(struct platform_device *pdev) return ret; if (xadc->ops->flags & XADC_FLAGS_BUFFERED) { - ret = iio_triggered_buffer_setup(indio_dev, - &iio_pollfunc_store_time, &xadc_trigger_handler, - &xadc_buffer_ops); + ret = devm_iio_triggered_buffer_setup(dev, indio_dev, + &iio_pollfunc_store_time, + &xadc_trigger_handler, + &xadc_buffer_ops); if (ret) return ret; xadc->convst_trigger = xadc_alloc_trigger(indio_dev, "convst"); - if (IS_ERR(xadc->convst_trigger)) { - ret = PTR_ERR(xadc->convst_trigger); - goto err_triggered_buffer_cleanup; - } + if (IS_ERR(xadc->convst_trigger)) + return PTR_ERR(xadc->convst_trigger); + xadc->samplerate_trigger = xadc_alloc_trigger(indio_dev, "samplerate"); - if (IS_ERR(xadc->samplerate_trigger)) { - ret = PTR_ERR(xadc->samplerate_trigger); - goto err_free_convst_trigger; - } + if (IS_ERR(xadc->samplerate_trigger)) + return PTR_ERR(xadc->samplerate_trigger); } xadc->clk = devm_clk_get(dev, NULL); - if (IS_ERR(xadc->clk)) { - ret = PTR_ERR(xadc->clk); - goto err_free_samplerate_trigger; - } + if (IS_ERR(xadc->clk)) + return PTR_ERR(xadc->clk); ret = clk_prepare_enable(xadc->clk); if (ret) - goto err_free_samplerate_trigger; + return ret; ret = devm_add_action_or_reset(dev, xadc_clk_disable_unprepare, xadc->clk); if (ret) - goto err_free_samplerate_trigger; + return ret; /* * Make sure not to exceed the maximum samplerate since otherwise the @@ -1288,27 +1281,28 @@ static int xadc_probe(struct platform_device *pdev) if (xadc->ops->flags & XADC_FLAGS_BUFFERED) { ret = xadc_read_samplerate(xadc); if (ret < 0) - goto err_free_samplerate_trigger; + return ret; + if (ret > XADC_MAX_SAMPLERATE) { ret = xadc_write_samplerate(xadc, XADC_MAX_SAMPLERATE); if (ret < 0) - goto err_free_samplerate_trigger; + return ret; } } ret = devm_request_irq(dev, xadc->irq, xadc->ops->interrupt_handler, 0, dev_name(dev), indio_dev); if (ret) - goto err_free_samplerate_trigger; + return ret; ret = devm_add_action_or_reset(dev, xadc_cancel_delayed_work, &xadc->zynq_unmask_work); if (ret) - goto err_free_samplerate_trigger; + return ret; ret = xadc->ops->setup(pdev, indio_dev, xadc->irq); if (ret) - goto err_free_samplerate_trigger; + return ret; for (i = 0; i < 16; i++) xadc_read_adc_reg(xadc, XADC_REG_THRESHOLD(i), @@ -1316,7 +1310,7 @@ static int xadc_probe(struct platform_device *pdev) ret = xadc_write_adc_reg(xadc, XADC_REG_CONF0, conf0); if (ret) - goto err_free_samplerate_trigger; + return ret; bipolar_mask = 0; for (i = 0; i < indio_dev->num_channels; i++) { @@ -1326,17 +1320,18 @@ static int xadc_probe(struct platform_device *pdev) ret = xadc_write_adc_reg(xadc, XADC_REG_INPUT_MODE(0), bipolar_mask); if (ret) - goto err_free_samplerate_trigger; + return ret; + ret = xadc_write_adc_reg(xadc, XADC_REG_INPUT_MODE(1), bipolar_mask >> 16); if (ret) - goto err_free_samplerate_trigger; + return ret; /* Disable all alarms */ ret = xadc_update_adc_reg(xadc, XADC_REG_CONF1, XADC_CONF1_ALARM_MASK, XADC_CONF1_ALARM_MASK); if (ret) - goto err_free_samplerate_trigger; + return ret; /* Set thresholds to min/max */ for (i = 0; i < 16; i++) { @@ -1351,51 +1346,23 @@ static int xadc_probe(struct platform_device *pdev) ret = xadc_write_adc_reg(xadc, XADC_REG_THRESHOLD(i), xadc->threshold[i]); if (ret) - goto err_free_samplerate_trigger; + return ret; } /* Go to non-buffered mode */ xadc_postdisable(indio_dev); - ret = iio_device_register(indio_dev); + ret = devm_iio_device_register(dev, indio_dev); if (ret) - goto err_free_samplerate_trigger; + return ret; platform_set_drvdata(pdev, indio_dev); - return 0; - -err_free_samplerate_trigger: - if (xadc->ops->flags & XADC_FLAGS_BUFFERED) - iio_trigger_free(xadc->samplerate_trigger); -err_free_convst_trigger: - if (xadc->ops->flags & XADC_FLAGS_BUFFERED) - iio_trigger_free(xadc->convst_trigger); -err_triggered_buffer_cleanup: - if (xadc->ops->flags & XADC_FLAGS_BUFFERED) - iio_triggered_buffer_cleanup(indio_dev); - - return ret; -} - -static int xadc_remove(struct platform_device *pdev) -{ - struct iio_dev *indio_dev = platform_get_drvdata(pdev); - struct xadc *xadc = iio_priv(indio_dev); - - iio_device_unregister(indio_dev); - if (xadc->ops->flags & XADC_FLAGS_BUFFERED) { - iio_trigger_free(xadc->samplerate_trigger); - iio_trigger_free(xadc->convst_trigger); - iio_triggered_buffer_cleanup(indio_dev); - } - return 0; } static struct platform_driver xadc_driver = { .probe = xadc_probe, - .remove = xadc_remove, .driver = { .name = "xadc", .of_match_table = xadc_of_match_table,