Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp801244pxa; Wed, 5 Aug 2020 13:07:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzAXttGE86yNAFgbpu3rvWageH5ecUwSjkNMHMiqWRjQgvRvcIxRgplWKMo4BB2GPZbGUS1 X-Received: by 2002:a17:906:1b0a:: with SMTP id o10mr977608ejg.463.1596658032638; Wed, 05 Aug 2020 13:07:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596658032; cv=none; d=google.com; s=arc-20160816; b=RG2zKaIAEtr8z15654VjqqJbKPSwEoMAg2pVPKVcNAANN6UlOEO/TzrDR7zzMgleOR SX/rk9vta1L3wlwrx7tzMxmPelyIW+56P/4DCQevFnbh5jw5KWFo8erxh73DDz92Xhod caxy+x+ZwDipYqJ57xTcySgAY4iPTOeB/2qooQ+1iTt+sfodfsuMsQX9Vi3DtlCXtnFm VwxS9p+PgNQxqrQCUzl/gotxO3QCKFB+rkJupFBjugp1CFQYOw26zBRwe41YEesXZueg TVHudCIez+IUMnqce/qVOxABO/7TFK9X+qgL7dyDoHdL8mf0TJw0z6QBB4bzu5i0Yq1J VgTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:message-id:subject:cc:to:from:date:dkim-signature; bh=iHSzOazTNUEaAs7FVtrAy+fRFQzNQ0Gp+EdGb87jWQc=; b=t2oRBVWmqvFjz7t6h7K1eNmDCGlCsqrxf6e5xMYRhFJowfkoBp+qobrmj8YDnNdH5c S1ij2xAzgSkJkVqW6RXvsmWbF2hlHaGSB3VFn6kpTmymrTXnqE194mnYYiPisiGLzha8 fg9Yj/RNqcnj3DWPKPyXaEUew/5I3kZYHtf7tgrS+s3yv+8TBqKjnxgeK97VDyWRHFDv +ryNBCk9fQRyQUI+hECY6lPgBnGV0po+CrlPMt42B+pUuuz6QYobFTRTqHpW6nijjLGX qKohzLNAtwO/NqnAMJTGVuXnK/9mxuVSKZuw6dgoCjZDH7rWmkLpZBaWAJHPbrqE+2RG Vthg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=T2+XSPeh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a1si1855330edn.356.2020.08.05.13.06.50; Wed, 05 Aug 2020 13:07:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=T2+XSPeh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726954AbgHEUEA (ORCPT + 99 others); Wed, 5 Aug 2020 16:04:00 -0400 Received: from mail.kernel.org ([198.145.29.99]:50666 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726569AbgHEQgi (ORCPT ); Wed, 5 Aug 2020 12:36:38 -0400 Received: from localhost (mobile-166-175-186-42.mycingular.net [166.175.186.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 300DD22BED; Wed, 5 Aug 2020 15:23:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1596641013; bh=BFqcBYITNyNBWLkZLsFiZsM+0wk0yyEyUZo4cqZHcQU=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=T2+XSPehLm5jhlp/tZVgLUhQiXe5DyTRMLTdi0yOnOPWOeqAdcFxXxr4tcWPM+y80 Cdh4VpRxiqbcyPgLAHJBx9RbeYvUy4PN6Y/AveKgLEbMnjoTIrVDvk9tRf27bcGITh ZkJOy9kXskrEFns8q09CV73+xDOXcG2bHwi/3Drg= Date: Wed, 5 Aug 2020 10:23:31 -0500 From: Bjorn Helgaas To: Vaibhav Gupta Cc: Bjorn Helgaas , Bjorn Helgaas , Vaibhav Gupta , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linuxfoundation.org, Shuah Khan , Tomoya MORINAGA , Tomoya MORINAGA , Linus Walleij , Qi Wang , Ben Dooks Subject: Re: [PATCH v1] i2c: eg20t: use generic power management Message-ID: <20200805152331.GA510793@bjorn-Precision-5520> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200720140031.511830-1-vaibhavgupta40@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [+cc Tomoya, Linus, Qi, Ben from e9bc8fa5df1c] On Mon, Jul 20, 2020 at 07:30:32PM +0530, Vaibhav Gupta wrote: > Drivers using legacy PM have to manage PCI states and device's PM states > themselves. They also need to take care of configuration registers. > > With improved and powerful support of generic PM, PCI Core takes care of > above mentioned, device-independent, jobs. > > This driver makes use of PCI helper functions like > pci_save/restore_state(), pci_enable/disable_device(), > pci_enable_wake() and pci_set_power_state() to do required operations. In > generic mode, they are no longer needed. > > Change function parameter in both .suspend() and .resume() to > "struct device*" type. Use to_pci_dev() and dev_get_drvdata() to get > "struct pci_dev*" variable and drv data. > > Compile-tested only. > > Signed-off-by: Vaibhav Gupta > --- > drivers/i2c/busses/i2c-eg20t.c | 39 ++++++++-------------------------- > 1 file changed, 9 insertions(+), 30 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-eg20t.c b/drivers/i2c/busses/i2c-eg20t.c > index 73f139690e4e..c0ddc4cc2ce7 100644 > --- a/drivers/i2c/busses/i2c-eg20t.c > +++ b/drivers/i2c/busses/i2c-eg20t.c > @@ -846,11 +846,10 @@ static void pch_i2c_remove(struct pci_dev *pdev) > kfree(adap_info); > } > > -#ifdef CONFIG_PM > -static int pch_i2c_suspend(struct pci_dev *pdev, pm_message_t state) > +static int __maybe_unused pch_i2c_suspend(struct device *dev) > { > - int ret; > int i; > + struct pci_dev *pdev = to_pci_dev(dev); > struct adapter_info *adap_info = pci_get_drvdata(pdev); Why don't you use "adap_info = dev_get_drvdata(dev)" as you did below, so you don't need to_pci_dev()? > void __iomem *p = adap_info->pch_data[0].pch_base_address; > > @@ -872,34 +871,17 @@ static int pch_i2c_suspend(struct pci_dev *pdev, pm_message_t state) > ioread32(p + PCH_I2CSR), ioread32(p + PCH_I2CBUFSTA), > ioread32(p + PCH_I2CESRSTA)); > > - ret = pci_save_state(pdev); > - > - if (ret) { > - pch_pci_err(pdev, "pci_save_state\n"); > - return ret; > - } > - > - pci_enable_wake(pdev, PCI_D3hot, 0); > - pci_disable_device(pdev); > - pci_set_power_state(pdev, pci_choose_state(pdev, state)); > + device_wakeup_disable(dev); > > return 0; > } > > -static int pch_i2c_resume(struct pci_dev *pdev) > +static int __maybe_unused pch_i2c_resume(struct device *dev) > { > int i; > - struct adapter_info *adap_info = pci_get_drvdata(pdev); > - > - pci_set_power_state(pdev, PCI_D0); > - pci_restore_state(pdev); > + struct adapter_info *adap_info = dev_get_drvdata(dev); > > - if (pci_enable_device(pdev) < 0) { > - pch_pci_err(pdev, "pch_i2c_resume:pci_enable_device FAILED\n"); > - return -EIO; > - } > - > - pci_enable_wake(pdev, PCI_D3hot, 0); > + device_wakeup_disable(dev); It *looks* wrong to disable wakeup in both suspend and resume. I think the usual pattern is to enable wakeup in suspend and disable it in resume. But it looks like it's been that way since the driver was added by e9bc8fa5df1c ("i2c-eg20t: add driver for Intel EG20T"). If the device doesn't support wakeup, I would not expect the driver to mention wakeup at all. In any case, I think it's the right thing for *this* patch to preserve the previous wakeup behavior. Maybe we want a follow-up patch to just remove both device_wakeup_disable() calls? > for (i = 0; i < adap_info->ch_num; i++) > pch_i2c_init(&adap_info->pch_data[i]); > @@ -908,18 +890,15 @@ static int pch_i2c_resume(struct pci_dev *pdev) > > return 0; > } > -#else > -#define pch_i2c_suspend NULL > -#define pch_i2c_resume NULL > -#endif > + > +static SIMPLE_DEV_PM_OPS(pch_i2c_pm_ops, pch_i2c_suspend, pch_i2c_resume); > > static struct pci_driver pch_pcidriver = { > .name = KBUILD_MODNAME, > .id_table = pch_pcidev_id, > .probe = pch_i2c_probe, > .remove = pch_i2c_remove, > - .suspend = pch_i2c_suspend, > - .resume = pch_i2c_resume > + .driver.pm = &pch_i2c_pm_ops, > }; > > module_pci_driver(pch_pcidriver); > -- > 2.27.0 >