Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp662829iog; Wed, 15 Jun 2022 09:36:49 -0700 (PDT) X-Received: by 2002:a17:90a:fe0a:b0:1ea:d8bb:6916 with SMTP id ck10-20020a17090afe0a00b001ead8bb6916mr3706476pjb.123.1655311008894; Wed, 15 Jun 2022 09:36:48 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sBov1ux22zWnS53DKkoFP1WPbxGFlNdVtVGZ6fgCdKAF8iqgWB4VNXpm/NkhlVFUXMsOuy X-Received: by 2002:a17:90a:fe0a:b0:1ea:d8bb:6916 with SMTP id ck10-20020a17090afe0a00b001ead8bb6916mr3706279pjb.123.1655311007199; Wed, 15 Jun 2022 09:36:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655311007; cv=none; d=google.com; s=arc-20160816; b=YAAHauaP4Ho3YXKbwyZV8c+i2kBxdJoqw1h71+aaVbLWl/J5mJvLAiPjTUlfkws5Uh kfLUD9jJMhhy9eTATK/IGkFxw6ysQ7ffE5sZVxURoAifwC1AK0FCoIpRHmcDoR031Hg5 9zBYYrgXAq+tQBt3rQoD+NEBnOm94hOsIpts5raYAgm8z5opnrbcsn06icXTVs+SX4Me 02j2oN43PMSjpkV9I6pNirBJG8EoyU/xi0a9/Gf0drtIdc7NFh0O6wJjOdqU8qUc5ORI z85tbvGzKE69lVv+Barjjc9ex9N1mnjY0EXU+OIJXVH+Jb7fhPXLnvQP4P/76/8SvLg6 Y3ug== 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:in-reply-to :references:mime-version:dkim-signature; bh=37sI1USoy+xRQH8QbGSjnzweIUNwAt0HoK9F/1KuOZ4=; b=UuQNz5Y/KqPKKixHYZBP03mgf6Zp/tX1ErxhVL2S5qMBdPfU+4TRcWVvyU3zDQzQ7l ijCy7bWh+RN57enHvRyutWvbL08hzswg74j7xani11WYS6B5CtGXMUXQsw29WJoceQTR oOc34TDnVTeTDgqgJWqXNrB81nGs1dJ0Oe7Iot9acnJ2ls0dBT3/0HUiEromJfmv1VRv rfeT4q5oWJtfRfLcvKuAJEVymD3AYqQ+koLzOvQi9w7vyC6qwHSbGiwxJ5j9YVvMe/7x fYGl3xN7G0OBteq5WFYzieAWVlHuUtq/MKRMacY4bIL01mPVcY+osLdII+2z+6U+c/xY 2aiA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=VDL9QmcQ; 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 q1-20020a639801000000b003fdbe9d3498si19595793pgd.877.2022.06.15.09.36.32; Wed, 15 Jun 2022 09:36:47 -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=VDL9QmcQ; 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 S1347617AbiFOQdk (ORCPT + 99 others); Wed, 15 Jun 2022 12:33:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36938 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1356130AbiFOQdQ (ORCPT ); Wed, 15 Jun 2022 12:33:16 -0400 Received: from mail-ej1-x634.google.com (mail-ej1-x634.google.com [IPv6:2a00:1450:4864:20::634]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C8162457B1; Wed, 15 Jun 2022 09:33:11 -0700 (PDT) Received: by mail-ej1-x634.google.com with SMTP id u12so24297182eja.8; Wed, 15 Jun 2022 09:33:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=37sI1USoy+xRQH8QbGSjnzweIUNwAt0HoK9F/1KuOZ4=; b=VDL9QmcQj8yIgSj4LMJxd1bT9DSNCD5IK1lckPMPlBcMaksnq3xla7UTUsu/fXVPbs eT80MVA5NJwXjMR37UiwDMwDqpi2s+9bWp5Ui56I6O8BYZaU1n/VLeEA6p4oVX7sH/6U onyymzSLt9QM5kO823hLqwx4KbcOy5RiCYi9FXemWzCshZMK+xuL60lzOKeHI1temeIt nh5KNquRW7ySATd2l6Iw5nd6GHt6Kw0kbFkNa/ZAQJUVEVG5b4BKnCCNBHrQDJbZiWLi SPWGk1vS6YRhsxjQCwT8pzpgxFJtPqIfXgvHJVfoB55Was/cQda3Fw5+cDYgFJkSFmjZ zbSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=37sI1USoy+xRQH8QbGSjnzweIUNwAt0HoK9F/1KuOZ4=; b=Pa2wwPYfKx+XZC4S/02tIct7LDBbnrOT0ib2rVqtOu/O0JOdqFo6uesLg3DwQIlMSK wAe9imRwgzijrFuQjNl3i2FgRKqBF3C4xvaPgOYFdMhTpWKagMllI4O7U4HGG5eL8ave 8lVM/XYVYYb9Z+Ugwn8eDeJC7OGRCbM1BwXWcZCy0ZbrgIhcp2V1Mjk3evQzqEx5KbCL Vlno57sdj8QlkszYJAnMNjzvAUoppM68aIY8j5M7Ij1OET4+OQczP5ghLFXfSLnW4tK8 HsnXeY85wp6TdjXG/FblFnLHefkhD+iCbUbXjQmv9sDpxspT2NpVo+JjMADCu94EKmAb 9IyA== X-Gm-Message-State: AJIora/P1NxyfcytZkZF7yKLBPK3rdZCeOdhObFtvw3o3dfVh3c0GDZB XWAUSFHXcbsNZ2ANjKBDNplpF6uYJEw2fuCqehg= X-Received: by 2002:a17:906:434f:b0:711:eb76:c320 with SMTP id z15-20020a170906434f00b00711eb76c320mr602613ejm.636.1655310790302; Wed, 15 Jun 2022 09:33:10 -0700 (PDT) MIME-Version: 1.0 References: <20220615135130.227236-1-shreeya.patel@collabora.com> <20220615135130.227236-3-shreeya.patel@collabora.com> In-Reply-To: <20220615135130.227236-3-shreeya.patel@collabora.com> From: Andy Shevchenko Date: Wed, 15 Jun 2022 18:32:33 +0200 Message-ID: Subject: Re: [PATCH v6 2/2] iio: light: Add support for ltrf216a sensor To: Shreeya Patel Cc: Jonathan Cameron , Lars-Peter Clausen , Rob Herring , Zhigang.Shi@liteon.com, krisman@collabora.com, linux-iio , devicetree , Linux Kernel Mailing List , Collabora Kernel ML , alvaro.soliverez@collabora.com, Dmitry Osipenko , kernel test robot Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 On Wed, Jun 15, 2022 at 3:52 PM Shreeya Patel wrote: > > From: Zhigang Shi > > Add initial support for ltrf216a ambient light sensor. This doesn't clarify why regmap API for SMBus can't be used. ... > Datasheet: https://bit.ly/3MRTYwY These kinds of links tend to disappear, please use the real link. ... > Reported-by: kernel test robot No, the new feature may not be reported. ... > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include + blank line > +#include + blank line > +#include ... > +/* > + * Window Factor is needed when the device is under Window glass > + * with coated tinted ink. This is to compensate the light loss compensate for the > + * due to the lower transmission rate of the window glass and helps > + * in calculating lux. > + */ ... > +static int ltrf216a_set_power_state(struct ltrf216a_data *data, bool on) > +{ > + struct device *dev = &data->client->dev; > + int ret, suspended; > + > + if (on) { > + suspended = pm_runtime_suspended(dev); > + ret = pm_runtime_get_sync(dev); > + /* Allow one integration cycle before allowing a reading */ > + if (suspended) > + msleep(ltrf216a_int_time_reg[0][0]); Even if the get_sync() failed? Also, how do you take care about reference count in the case of failed get_sync90? > + } else { > + pm_runtime_mark_last_busy(dev); > + ret = pm_runtime_put_autosuspend(dev); > + } > + > + return ret; > +} ... > +static int ltrf216a_read_raw(struct iio_dev *indio_dev, > + struct iio_chan_spec const *chan, int *val, > + int *val2, long mask) > +{ > + struct ltrf216a_data *data = iio_priv(indio_dev); > + int ret; > + > + mutex_lock(&data->lock); > + > + switch (mask) { > + case IIO_CHAN_INFO_PROCESSED: > + ret = ltrf216a_get_lux(data); > + if (ret < 0) > + break; > + *val = ret; > + ret = IIO_VAL_INT; > + break; > + case IIO_CHAN_INFO_INT_TIME: > + ret = ltrf216a_get_int_time(data, val, val2); > + break; > + default: > + ret = -EINVAL; > + break; > + } > + > + mutex_unlock(&data->lock); > + > + return ret; > +} You can refactor this function to call mutex lock/unlock as many times as cases you have and return directly. ... > + /* reset sensor, chip fails to respond to this, so ignore any errors */ > + ltrf216a_reset(indio_dev); > + > + ret = pm_runtime_set_active(&client->dev); > + if (ret) > + goto error_power_down; Why do you need to power down here? > + pm_runtime_enable(&client->dev); > + pm_runtime_set_autosuspend_delay(&client->dev, 5000); > + pm_runtime_use_autosuspend(&client->dev); > + > + ltrf216a_set_power_state(data, true); The below code suggests that you are mixing badly devm_ with non-devm_ APIs, don't do this. You have to group devm_ first followed by non-devm_ calls. ... > +static int ltrf216a_remove(struct i2c_client *client) > +{ > + struct iio_dev *indio_dev = i2c_get_clientdata(client); > + > + iio_device_unregister(indio_dev); > + pm_runtime_disable(&client->dev); > + pm_runtime_set_suspended(&client->dev); > + ltrf216a_disable(indio_dev); > + > + return 0; I believe the ordering of freeing resources and reverting state is not in reverse. See above why. > +} ... > +static DEFINE_SIMPLE_DEV_PM_OPS(ltrf216a_pm_ops, ltrf216a_runtime_suspend, > + ltrf216a_runtime_resume); Are you sure you are using proper macro? SIMPLE is for system sleep, while the function names suggest that this is about runtime PM. -- With Best Regards, Andy Shevchenko