From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhangfei Subject: Re: [PATCH] i2c: designware: add reset interface Date: Thu, 15 Dec 2016 16:56:10 +0800 Message-ID: <9e961bff-e949-da81-c42b-e78c89997658@linaro.org> References: <1479789700-19532-1-git-send-email-zhangfei.gao@linaro.org> <20161213203457.GB2889@katana> <1481742050.9552.5.camel@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Return-path: Received: from mail-pf0-f172.google.com ([209.85.192.172]:35660 "EHLO mail-pf0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757525AbcLOI4f (ORCPT ); Thu, 15 Dec 2016 03:56:35 -0500 Received: by mail-pf0-f172.google.com with SMTP id i88so8245156pfk.2 for ; Thu, 15 Dec 2016 00:56:30 -0800 (PST) In-Reply-To: <1481742050.9552.5.camel@linux.intel.com> Sender: linux-i2c-owner@vger.kernel.org List-Id: linux-i2c@vger.kernel.org To: Andy Shevchenko , Wolfram Sang Cc: linux-arm-kernel@lists.infradead.org, linux-i2c@vger.kernel.org, Jarkko Nikula , Mika Westerberg On 2016年12月15日 03:00, Andy Shevchenko wrote: > On Tue, 2016-12-13 at 21:34 +0100, Wolfram Sang wrote: >> On Tue, Nov 22, 2016 at 12:41:40PM +0800, Zhangfei Gao wrote: >>> Some platforms like hi3660 need do reset first to allow accessing >>> registers >>> >>> Signed-off-by: Zhangfei Gao >> Adding designware maintainers to CC... >> >>> --- >>> drivers/i2c/busses/i2c-designware-core.h | 1 + >>> drivers/i2c/busses/i2c-designware-platdrv.c | 5 +++++ >>> 2 files changed, 6 insertions(+) >>> >>> diff --git a/drivers/i2c/busses/i2c-designware-core.h >>> b/drivers/i2c/busses/i2c-designware-core.h >>> index 0d44d2a..94b14fa 100644 >>> --- a/drivers/i2c/busses/i2c-designware-core.h >>> +++ b/drivers/i2c/busses/i2c-designware-core.h >>> @@ -80,6 +80,7 @@ struct dw_i2c_dev { >>> void __iomem *base; >>> struct completion cmd_complete; >>> struct clk *clk; >>> + struct reset_control *rst; >>> u32 (*get_clk_rate_khz) (struct >>> dw_i2c_dev *dev); >>> struct dw_pci_controller *controller; >>> int cmd_err; >>> diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c >>> b/drivers/i2c/busses/i2c-designware-platdrv.c >>> index 0b42a12..fd80e58 100644 >>> --- a/drivers/i2c/busses/i2c-designware-platdrv.c >>> +++ b/drivers/i2c/busses/i2c-designware-platdrv.c >>> @@ -38,6 +38,7 @@ >>> #include >>> #include >>> #include >>> +#include >>> #include >>> #include >>> #include >>> @@ -176,6 +177,10 @@ static int dw_i2c_plat_probe(struct >>> platform_device *pdev) >>> dev->irq = irq; >>> platform_set_drvdata(pdev, dev); >>> >>> + dev->rst = devm_reset_control_get(&pdev->dev, NULL); >>> + if (!IS_ERR(dev->rst)) >>> + reset_control_reset(dev->rst); > Do we care about EPROBE_DEFER? > > Perhaps on error path we need to assert it. > > And I guess it should be devm_reset_control_get_optional(). Thanks Andy Good suggestion, will update accordingly. Thanks