From patchwork Thu Dec 3 09:50:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Ardelean X-Patchwork-Id: 11948297 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=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham 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 C04EBC64E7B for ; Thu, 3 Dec 2020 09:50:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6F49120C56 for ; Thu, 3 Dec 2020 09:50:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729074AbgLCJuz (ORCPT ); Thu, 3 Dec 2020 04:50:55 -0500 Received: from mx0a-00128a01.pphosted.com ([148.163.135.77]:5790 "EHLO mx0a-00128a01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728789AbgLCJuz (ORCPT ); Thu, 3 Dec 2020 04:50:55 -0500 Received: from pps.filterd (m0167088.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 0B39VCfr022503; Thu, 3 Dec 2020 04:50:14 -0500 Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com with ESMTP id 355vj5n7ev-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 03 Dec 2020 04:50:13 -0500 Received: from ASHBMBX8.ad.analog.com (ASHBMBX8.ad.analog.com [10.64.17.5]) by nwd2mta4.analog.com (8.14.7/8.14.7) with ESMTP id 0B39oCJe054227 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=FAIL); Thu, 3 Dec 2020 04:50:12 -0500 Received: from ASHBMBX8.ad.analog.com (10.64.17.5) by ASHBMBX8.ad.analog.com (10.64.17.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1779.2; Thu, 3 Dec 2020 04:50:11 -0500 Received: from zeus.spd.analog.com (10.66.68.11) by ASHBMBX8.ad.analog.com (10.64.17.5) with Microsoft SMTP Server id 15.1.1779.2 via Frontend Transport; Thu, 3 Dec 2020 04:50:11 -0500 Received: from saturn.ad.analog.com ([10.48.65.108]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 0B39o9EA002710; Thu, 3 Dec 2020 04:50:10 -0500 From: Alexandru Ardelean To: , CC: , Alexandru Ardelean Subject: [PATCH 1/3] iio: dummy: convert all simple allocation devm_ variants Date: Thu, 3 Dec 2020 11:50:03 +0200 Message-ID: <20201203095005.72252-1-alexandru.ardelean@analog.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-ADIRuleOP-NewSCL: Rule Triggered X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.312,18.0.737 definitions=2020-12-03_06:2020-12-03,2020-12-03 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 clxscore=1015 malwarescore=0 suspectscore=2 mlxscore=0 bulkscore=0 mlxlogscore=999 phishscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2012030058 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org Since a main requirement for an IIO device is to have a parent device object, it makes sense to attach more of the IIO device's objects to the lifetime of the parent object, to clean up the code. The idea is to also provide a base example that is more up-to-date with what's going on lately with most IIO drivers. This change tackles the simple allocations, to convert them to device-managed calls, and tie them to the parent device. Signed-off-by: Alexandru Ardelean --- drivers/iio/dummy/iio_simple_dummy.c | 29 ++++++++-------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/drivers/iio/dummy/iio_simple_dummy.c b/drivers/iio/dummy/iio_simple_dummy.c index c0b7ef900735..2a2e62f780a1 100644 --- a/drivers/iio/dummy/iio_simple_dummy.c +++ b/drivers/iio/dummy/iio_simple_dummy.c @@ -574,11 +574,9 @@ static struct iio_sw_device *iio_dummy_probe(const char *name) * parent = &client->dev; */ - swd = kzalloc(sizeof(*swd), GFP_KERNEL); - if (!swd) { - ret = -ENOMEM; - goto error_kzalloc; - } + swd = devm_kzalloc(parent, sizeof(*swd), GFP_KERNEL); + if (!swd) + return ERR_PTR(-ENOMEM); /* * Allocate an IIO device. * @@ -587,11 +585,9 @@ static struct iio_sw_device *iio_dummy_probe(const char *name) * It also has a region (accessed by iio_priv() * for chip specific state information. */ - indio_dev = iio_device_alloc(parent, sizeof(*st)); - if (!indio_dev) { - ret = -ENOMEM; - goto error_ret; - } + indio_dev = devm_iio_device_alloc(parent, sizeof(*st)); + if (!indio_dev) + return ERR_PTR(-ENOMEM); st = iio_priv(indio_dev); mutex_init(&st->lock); @@ -615,7 +611,7 @@ static struct iio_sw_device *iio_dummy_probe(const char *name) * indio_dev->name = id->name; * indio_dev->name = spi_get_device_id(spi)->name; */ - indio_dev->name = kstrdup(name, GFP_KERNEL); + indio_dev->name = devm_kstrdup(parent, name, GFP_KERNEL); /* Provide description of available channels */ indio_dev->channels = iio_dummy_channels; @@ -632,7 +628,7 @@ static struct iio_sw_device *iio_dummy_probe(const char *name) ret = iio_simple_dummy_events_register(indio_dev); if (ret < 0) - goto error_free_device; + return ERR_PTR(ret); ret = iio_simple_dummy_configure_buffer(indio_dev); if (ret < 0) @@ -649,11 +645,6 @@ static struct iio_sw_device *iio_dummy_probe(const char *name) iio_simple_dummy_unconfigure_buffer(indio_dev); error_unregister_events: iio_simple_dummy_events_unregister(indio_dev); -error_free_device: - iio_device_free(indio_dev); -error_ret: - kfree(swd); -error_kzalloc: return ERR_PTR(ret); } @@ -683,10 +674,6 @@ static int iio_dummy_remove(struct iio_sw_device *swd) iio_simple_dummy_events_unregister(indio_dev); - /* Free all structures */ - kfree(indio_dev->name); - iio_device_free(indio_dev); - return 0; } From patchwork Thu Dec 3 09:50:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Ardelean X-Patchwork-Id: 11948301 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=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham 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 0C76CC83012 for ; Thu, 3 Dec 2020 09:51:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CDB0C21D91 for ; Thu, 3 Dec 2020 09:51:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730204AbgLCJu5 (ORCPT ); Thu, 3 Dec 2020 04:50:57 -0500 Received: from mx0a-00128a01.pphosted.com ([148.163.135.77]:10458 "EHLO mx0a-00128a01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728789AbgLCJu5 (ORCPT ); Thu, 3 Dec 2020 04:50:57 -0500 Received: from pps.filterd (m0167088.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 0B39VANg022500; Thu, 3 Dec 2020 04:50:16 -0500 Received: from nwd2mta3.analog.com ([137.71.173.56]) by mx0a-00128a01.pphosted.com with ESMTP id 355vj5n7f0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 03 Dec 2020 04:50:15 -0500 Received: from ASHBMBX9.ad.analog.com (ASHBMBX9.ad.analog.com [10.64.17.10]) by nwd2mta3.analog.com (8.14.7/8.14.7) with ESMTP id 0B39oES2007858 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=FAIL); Thu, 3 Dec 2020 04:50:14 -0500 Received: from ASHBMBX9.ad.analog.com (10.64.17.10) by ASHBMBX9.ad.analog.com (10.64.17.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1779.2; Thu, 3 Dec 2020 04:50:13 -0500 Received: from zeus.spd.analog.com (10.66.68.11) by ASHBMBX9.ad.analog.com (10.64.17.10) with Microsoft SMTP Server id 15.1.1779.2 via Frontend Transport; Thu, 3 Dec 2020 04:50:13 -0500 Received: from saturn.ad.analog.com ([10.48.65.108]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 0B39o9EB002710; Thu, 3 Dec 2020 04:50:11 -0500 From: Alexandru Ardelean To: , CC: , Alexandru Ardelean Subject: [PATCH 2/3] iio: dummy: convert events to device-managed handlers Date: Thu, 3 Dec 2020 11:50:04 +0200 Message-ID: <20201203095005.72252-2-alexandru.ardelean@analog.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201203095005.72252-1-alexandru.ardelean@analog.com> References: <20201203095005.72252-1-alexandru.ardelean@analog.com> MIME-Version: 1.0 X-ADIRuleOP-NewSCL: Rule Triggered X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.312,18.0.737 definitions=2020-12-03_06:2020-12-03,2020-12-03 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 clxscore=1015 malwarescore=0 suspectscore=2 mlxscore=0 bulkscore=0 mlxlogscore=851 phishscore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2012030058 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org This change converts the iio_simple_dummy_events_register() function to use device-managed functions/equivalents. The iio_dummy_evgen_release_irq() function needs to be carried over a devm_add_action_or_reset() handler. With this the iio_simple_dummy_events_unregister() function can be removed, and so can it's usage/call. Signed-off-by: Alexandru Ardelean --- drivers/iio/dummy/iio_simple_dummy.c | 8 +--- drivers/iio/dummy/iio_simple_dummy.h | 9 +--- drivers/iio/dummy/iio_simple_dummy_events.c | 53 +++++++++------------ 3 files changed, 26 insertions(+), 44 deletions(-) diff --git a/drivers/iio/dummy/iio_simple_dummy.c b/drivers/iio/dummy/iio_simple_dummy.c index 2a2e62f780a1..a746b34ae7a3 100644 --- a/drivers/iio/dummy/iio_simple_dummy.c +++ b/drivers/iio/dummy/iio_simple_dummy.c @@ -626,13 +626,13 @@ static struct iio_sw_device *iio_dummy_probe(const char *name) /* Specify that device provides sysfs type interfaces */ indio_dev->modes = INDIO_DIRECT_MODE; - ret = iio_simple_dummy_events_register(indio_dev); + ret = iio_simple_dummy_events_register(parent, indio_dev); if (ret < 0) return ERR_PTR(ret); ret = iio_simple_dummy_configure_buffer(indio_dev); if (ret < 0) - goto error_unregister_events; + return ERR_PTR(ret); ret = iio_device_register(indio_dev); if (ret < 0) @@ -643,8 +643,6 @@ static struct iio_sw_device *iio_dummy_probe(const char *name) return swd; error_unconfigure_buffer: iio_simple_dummy_unconfigure_buffer(indio_dev); -error_unregister_events: - iio_simple_dummy_events_unregister(indio_dev); return ERR_PTR(ret); } @@ -672,8 +670,6 @@ static int iio_dummy_remove(struct iio_sw_device *swd) /* Buffered capture related cleanup */ iio_simple_dummy_unconfigure_buffer(indio_dev); - iio_simple_dummy_events_unregister(indio_dev); - return 0; } diff --git a/drivers/iio/dummy/iio_simple_dummy.h b/drivers/iio/dummy/iio_simple_dummy.h index a91622ac54e0..b1ca6e97ed3f 100644 --- a/drivers/iio/dummy/iio_simple_dummy.h +++ b/drivers/iio/dummy/iio_simple_dummy.h @@ -76,21 +76,16 @@ int iio_simple_dummy_write_event_value(struct iio_dev *indio_dev, enum iio_event_info info, int val, int val2); -int iio_simple_dummy_events_register(struct iio_dev *indio_dev); -void iio_simple_dummy_events_unregister(struct iio_dev *indio_dev); +int iio_simple_dummy_events_register(struct device *parent, struct iio_dev *indio_dev); #else /* Stubs for when events are disabled at compile time */ static inline int -iio_simple_dummy_events_register(struct iio_dev *indio_dev) +iio_simple_dummy_events_register(struct device *parent, struct iio_dev *indio_dev) { return 0; } -static inline void -iio_simple_dummy_events_unregister(struct iio_dev *indio_dev) -{} - #endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS*/ /** diff --git a/drivers/iio/dummy/iio_simple_dummy_events.c b/drivers/iio/dummy/iio_simple_dummy_events.c index 63a2b844be50..8f51fe5cbdfc 100644 --- a/drivers/iio/dummy/iio_simple_dummy_events.c +++ b/drivers/iio/dummy/iio_simple_dummy_events.c @@ -222,6 +222,13 @@ static irqreturn_t iio_simple_dummy_event_handler(int irq, void *private) return IRQ_HANDLED; } +static void iio_simple_dummy_events_release_irq(void *data) +{ + struct iio_dummy_state *st = data; + + iio_dummy_evgen_release_irq(st->event_irq); +} + /** * iio_simple_dummy_events_register() - setup interrupt handling for events * @indio_dev: device instance data @@ -233,44 +240,28 @@ static irqreturn_t iio_simple_dummy_event_handler(int irq, void *private) * no way forms part of this example. Just assume that events magically * appear via the provided interrupt. */ -int iio_simple_dummy_events_register(struct iio_dev *indio_dev) +int iio_simple_dummy_events_register(struct device *parent, + struct iio_dev *indio_dev) { struct iio_dummy_state *st = iio_priv(indio_dev); int ret; /* Fire up event source - normally not present */ st->event_irq = iio_dummy_evgen_get_irq(); - if (st->event_irq < 0) { - ret = st->event_irq; - goto error_ret; - } - st->regs = iio_dummy_evgen_get_regs(st->event_irq); - - ret = request_threaded_irq(st->event_irq, - &iio_simple_dummy_get_timestamp, - &iio_simple_dummy_event_handler, - IRQF_ONESHOT, - "iio_simple_event", - indio_dev); - if (ret < 0) - goto error_free_evgen; - return 0; + if (st->event_irq < 0) + return st->event_irq; -error_free_evgen: - iio_dummy_evgen_release_irq(st->event_irq); -error_ret: - return ret; -} + ret = devm_add_action_or_reset(parent, + iio_simple_dummy_events_release_irq, st); + if (ret) + return ret; -/** - * iio_simple_dummy_events_unregister() - tidy up interrupt handling on remove - * @indio_dev: device instance data - */ -void iio_simple_dummy_events_unregister(struct iio_dev *indio_dev) -{ - struct iio_dummy_state *st = iio_priv(indio_dev); + st->regs = iio_dummy_evgen_get_regs(st->event_irq); - free_irq(st->event_irq, indio_dev); - /* Not part of normal driver */ - iio_dummy_evgen_release_irq(st->event_irq); + return devm_request_threaded_irq(parent, st->event_irq, + &iio_simple_dummy_get_timestamp, + &iio_simple_dummy_event_handler, + IRQF_ONESHOT, + "iio_simple_event", + indio_dev); } From patchwork Thu Dec 3 09:50:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Ardelean X-Patchwork-Id: 11948299 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=-16.7 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham 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 C52E4C64E8A for ; Thu, 3 Dec 2020 09:51:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 72A732222E for ; Thu, 3 Dec 2020 09:51:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730213AbgLCJu7 (ORCPT ); Thu, 3 Dec 2020 04:50:59 -0500 Received: from mx0a-00128a01.pphosted.com ([148.163.135.77]:11812 "EHLO mx0a-00128a01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730201AbgLCJu6 (ORCPT ); Thu, 3 Dec 2020 04:50:58 -0500 Received: from pps.filterd (m0167089.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 0B39UIM8020964; Thu, 3 Dec 2020 04:50:16 -0500 Received: from nwd2mta3.analog.com ([137.71.173.56]) by mx0a-00128a01.pphosted.com with ESMTP id 355vjen8ns-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 03 Dec 2020 04:50:16 -0500 Received: from ASHBMBX9.ad.analog.com (ASHBMBX9.ad.analog.com [10.64.17.10]) by nwd2mta3.analog.com (8.14.7/8.14.7) with ESMTP id 0B39oFup007861 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=FAIL); Thu, 3 Dec 2020 04:50:15 -0500 Received: from ASHBCASHYB5.ad.analog.com (10.64.17.133) by ASHBMBX9.ad.analog.com (10.64.17.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1779.2; Thu, 3 Dec 2020 04:50:14 -0500 Received: from ASHBMBX8.ad.analog.com (10.64.17.5) by ASHBCASHYB5.ad.analog.com (10.64.17.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1779.2; Thu, 3 Dec 2020 04:50:14 -0500 Received: from zeus.spd.analog.com (10.66.68.11) by ASHBMBX8.ad.analog.com (10.64.17.5) with Microsoft SMTP Server id 15.1.1779.2 via Frontend Transport; Thu, 3 Dec 2020 04:50:14 -0500 Received: from saturn.ad.analog.com ([10.48.65.108]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 0B39o9EC002710; Thu, 3 Dec 2020 04:50:12 -0500 From: Alexandru Ardelean To: , CC: , Alexandru Ardelean Subject: [PATCH 3/3] iio: dummy: use devm_iio_triggered_buffer_setup() for buffer setup Date: Thu, 3 Dec 2020 11:50:05 +0200 Message-ID: <20201203095005.72252-3-alexandru.ardelean@analog.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201203095005.72252-1-alexandru.ardelean@analog.com> References: <20201203095005.72252-1-alexandru.ardelean@analog.com> MIME-Version: 1.0 X-ADIRuleOP-NewSCL: Rule Triggered X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.312,18.0.737 definitions=2020-12-03_06:2020-12-03,2020-12-03 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 bulkscore=0 phishscore=0 clxscore=1015 mlxscore=0 mlxlogscore=999 malwarescore=0 adultscore=0 impostorscore=0 priorityscore=1501 spamscore=0 suspectscore=2 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2012030058 Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org The iio_simple_dummy_configure_buffer() function is pretty much just the iio_triggered_buffer_setup() function. This change makes use of the devm_iio_triggered_buffer_setup() directly so that we can tie the life-time and unwinding to the same parent object in the probe function. With this, the devm_iio_device_register() can be used directly in the probe function, removing the iio_dummy_remove() function entirely. One side-effect that is negligible for this driver is that the name of the poll-function gets changed from 'iio_simple_dummy_consumer%d' to '%s_consumer%d' where %s is 'indio_dev->name'. Signed-off-by: Alexandru Ardelean --- drivers/iio/dummy/iio_simple_dummy.c | 37 +--------- drivers/iio/dummy/iio_simple_dummy.h | 11 +-- drivers/iio/dummy/iio_simple_dummy_buffer.c | 78 ++------------------- 3 files changed, 13 insertions(+), 113 deletions(-) diff --git a/drivers/iio/dummy/iio_simple_dummy.c b/drivers/iio/dummy/iio_simple_dummy.c index a746b34ae7a3..06baa356e264 100644 --- a/drivers/iio/dummy/iio_simple_dummy.c +++ b/drivers/iio/dummy/iio_simple_dummy.c @@ -630,47 +630,17 @@ static struct iio_sw_device *iio_dummy_probe(const char *name) if (ret < 0) return ERR_PTR(ret); - ret = iio_simple_dummy_configure_buffer(indio_dev); + ret = iio_simple_dummy_configure_buffer(parent, indio_dev); if (ret < 0) return ERR_PTR(ret); - ret = iio_device_register(indio_dev); + ret = devm_iio_device_register(parent, indio_dev); if (ret < 0) - goto error_unconfigure_buffer; + return ERR_PTR(ret); iio_swd_group_init_type_name(swd, name, &iio_dummy_type); return swd; -error_unconfigure_buffer: - iio_simple_dummy_unconfigure_buffer(indio_dev); - return ERR_PTR(ret); -} - -/** - * iio_dummy_remove() - device instance removal function - * @swd: pointer to software IIO device abstraction - * - * Parameters follow those of iio_dummy_probe for buses. - */ -static int iio_dummy_remove(struct iio_sw_device *swd) -{ - /* - * Get a pointer to the device instance iio_dev structure - * from the bus subsystem. E.g. - * struct iio_dev *indio_dev = i2c_get_clientdata(client); - * struct iio_dev *indio_dev = spi_get_drvdata(spi); - */ - struct iio_dev *indio_dev = swd->device; - - /* Unregister the device */ - iio_device_unregister(indio_dev); - - /* Device specific code to power down etc */ - - /* Buffered capture related cleanup */ - iio_simple_dummy_unconfigure_buffer(indio_dev); - - return 0; } /* @@ -685,7 +655,6 @@ static int iio_dummy_remove(struct iio_sw_device *swd) */ static const struct iio_sw_device_ops iio_dummy_device_ops = { .probe = iio_dummy_probe, - .remove = iio_dummy_remove, }; static struct iio_sw_device_type iio_dummy_device = { diff --git a/drivers/iio/dummy/iio_simple_dummy.h b/drivers/iio/dummy/iio_simple_dummy.h index b1ca6e97ed3f..d4fd16b8691b 100644 --- a/drivers/iio/dummy/iio_simple_dummy.h +++ b/drivers/iio/dummy/iio_simple_dummy.h @@ -105,17 +105,12 @@ enum iio_simple_dummy_scan_elements { }; #ifdef CONFIG_IIO_SIMPLE_DUMMY_BUFFER -int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev); -void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev); +int iio_simple_dummy_configure_buffer(struct device *parent, struct iio_dev *indio_dev); #else -static inline int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev) +static inline int iio_simple_dummy_configure_buffer(struct device *parent, + struct iio_dev *indio_dev) { return 0; } - -static inline -void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev) -{} - #endif /* CONFIG_IIO_SIMPLE_DUMMY_BUFFER */ #endif /* _IIO_SIMPLE_DUMMY_H_ */ diff --git a/drivers/iio/dummy/iio_simple_dummy_buffer.c b/drivers/iio/dummy/iio_simple_dummy_buffer.c index 5512d5edc707..76476b45dc8b 100644 --- a/drivers/iio/dummy/iio_simple_dummy_buffer.c +++ b/drivers/iio/dummy/iio_simple_dummy_buffer.c @@ -16,9 +16,9 @@ #include #include -#include #include -#include +#include +#include #include "iio_simple_dummy.h" @@ -101,74 +101,10 @@ static irqreturn_t iio_simple_dummy_trigger_h(int irq, void *p) static const struct iio_buffer_setup_ops iio_simple_dummy_buffer_setup_ops = { }; -int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev) -{ - int ret; - struct iio_buffer *buffer; - - /* Allocate a buffer to use - here a kfifo */ - buffer = iio_kfifo_allocate(); - if (!buffer) { - ret = -ENOMEM; - goto error_ret; - } - - iio_device_attach_buffer(indio_dev, buffer); - - /* - * Tell the core what device type specific functions should - * be run on either side of buffer capture enable / disable. - */ - indio_dev->setup_ops = &iio_simple_dummy_buffer_setup_ops; - - /* - * Configure a polling function. - * When a trigger event with this polling function connected - * occurs, this function is run. Typically this grabs data - * from the device. - * - * NULL for the bottom half. This is normally implemented only if we - * either want to ping a capture now pin (no sleeping) or grab - * a timestamp as close as possible to a data ready trigger firing. - * - * IRQF_ONESHOT ensures irqs are masked such that only one instance - * of the handler can run at a time. - * - * "iio_simple_dummy_consumer%d" formatting string for the irq 'name' - * as seen under /proc/interrupts. Remaining parameters as per printk. - */ - indio_dev->pollfunc = iio_alloc_pollfunc(NULL, - &iio_simple_dummy_trigger_h, - IRQF_ONESHOT, - indio_dev, - "iio_simple_dummy_consumer%d", - indio_dev->id); - - if (!indio_dev->pollfunc) { - ret = -ENOMEM; - goto error_free_buffer; - } - - /* - * Notify the core that this device is capable of buffered capture - * driven by a trigger. - */ - indio_dev->modes |= INDIO_BUFFER_TRIGGERED; - - return 0; - -error_free_buffer: - iio_kfifo_free(indio_dev->buffer); -error_ret: - return ret; -} - -/** - * iio_simple_dummy_unconfigure_buffer() - release buffer resources - * @indio_dev: device instance state - */ -void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev) +int iio_simple_dummy_configure_buffer(struct device *parent, struct iio_dev *indio_dev) { - iio_dealloc_pollfunc(indio_dev->pollfunc); - iio_kfifo_free(indio_dev->buffer); + return devm_iio_triggered_buffer_setup(parent, indio_dev, + &iio_simple_dummy_trigger_h, + NULL, + &iio_simple_dummy_buffer_setup_ops); }