From patchwork Wed Oct 18 14:29:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joel Stanley X-Patchwork-Id: 116313 Delivered-To: patch@linaro.org Received: by 10.140.22.163 with SMTP id 32csp6133518qgn; Wed, 18 Oct 2017 07:30:51 -0700 (PDT) X-Received: by 10.98.245.153 with SMTP id b25mr14991760pfm.296.1508337051266; Wed, 18 Oct 2017 07:30:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508337051; cv=none; d=google.com; s=arc-20160816; b=IGkrTC7wXQ/rpekWYQWAcKf2IlBKJx9rX9koz6evi+lP+npkI2/QHI1SW35YpolJzT So7OJUUz0ccH+L1nLOSe2HMZ0jkcLRBt/hxo+eGeXqirzvfbUSfvPXMjpYrwlMZqfVL2 putR0zTpiiRNNgKOybSvgNmfVdUfLPSQIWbMCV3lN0BULvr7vAgi/XCa82Fxul6weMvn n3BMJoAcX4auRx7nYdCeOyTdE3GuvpW4gnT+MOOYsRAIPIKMWOxEJ0km7fL6hdXWjcJx Xg1u7lTLoyXXlnviAb5/YtDpz0/YFp8ToP78ChaskAyJSA9eNJvwWIuXONuaQ8DwGO3/ BCtQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=NKLIW9OEKBoZpYBa2NWskz6ws8O2v6EPaTZdRcGqQ4o=; b=nMFdK0pstcko8TlSc4vFLAwL5w3VQT+zHDcSZu1gg7KIeNE82W78LAFdRbXKN+7d3o UZTvcXfxfQ67Zz2ZIwtGuQGEVKiksj+hyW92z7Ydm7NyQzOvzyCH0QgaPBvqWVTAXOl7 8UM4/28TVOs8wL8sP49rI52pif/uvqEjwI9gX5gk/9du0YPyxxtg9wUgfZCYM6QkY+U6 KCA9IoShrPjYE23VRQwN3c6CWnLjmB7vR8aEOXhcbxa21bE2STABQKYeXAC70QFXPJkx 8XlROdf8P5QCfWwfL6rkeum4nDmueWDFKnktMdPoaorOEX2AvPWnintXDbbFQp5c1Kyz FkVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@jms.id.au header.s=google header.b=Oyz/4A/l; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v30si7098741pgn.569.2017.10.18.07.30.50; Wed, 18 Oct 2017 07:30:51 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@jms.id.au header.s=google header.b=Oyz/4A/l; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752198AbdJROat (ORCPT + 27 others); Wed, 18 Oct 2017 10:30:49 -0400 Received: from mail-pg0-f65.google.com ([74.125.83.65]:53608 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751462AbdJROaX (ORCPT ); Wed, 18 Oct 2017 10:30:23 -0400 Received: by mail-pg0-f65.google.com with SMTP id s2so4408978pge.10 for ; Wed, 18 Oct 2017 07:30:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jms.id.au; s=google; h=from:to:cc:subject:date:message-id; bh=NKLIW9OEKBoZpYBa2NWskz6ws8O2v6EPaTZdRcGqQ4o=; b=Oyz/4A/l9NMmhpCMbx2HYIWjNSxNzYbRRHqQBhzEN58x8VvhYXQDejrCW5qK4LIVDA 52gxFqJscCZ3tFGtAm6oMQP39BBYWI30gLGLXkBJ/wWx8Wib4lucwkOVQq0qYlZDr6sN Q8JJVRbFA3jwb4cmfrpl79CA7TCIW9OauHW5U= 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; bh=NKLIW9OEKBoZpYBa2NWskz6ws8O2v6EPaTZdRcGqQ4o=; b=IXsw1KNzP6Wn4INOc7yyafYODFXPtF0QujB6HCoFLg7cTDUDhLOV1pJsZrYtDLtiys 7LsUN1aM5TbJlV49wjn7NJ4gapIU9UQ0mD3qVACyRip83pMm2MyUXKzhKGMuKYcKrCpo ex2BUEL9hueR+66y4zpxlb0SOGnuBdnoG/cRoN4LRpr1MTUyWKMgFL2egGEnmsnzOpmP 2WgV6ZJChSl/FNYydMMnsF6yeH7G/GhUarVrc1x58F8RVAY7McyebRvpiyAhFXjuJD/n 7AxmJxCxzrvd34dbGfObcFgT2XndGtji1r8MC4KSm6U9K6aPiLUpk8OXl/PzTalxBr4o XZJg== X-Gm-Message-State: AMCzsaVQPmjf9xZ2UOUXhB1gfY1q+89Ymx0J6InA5JljvzYGZtaxXiSo sg5xfJWl81kZzrK4a9Znk0u9Vw== X-Google-Smtp-Source: ABhQp+TmFP00b0JdLiWi9c4R4aV8BDqcyzSP0qNNoMYuzUZaydDhdqEZe/IXsSIaqLQBEtNmuDm1HQ== X-Received: by 10.101.82.76 with SMTP id q12mr2770232pgp.140.1508337022580; Wed, 18 Oct 2017 07:30:22 -0700 (PDT) Received: from localhost.localdomain (218-173-167-109.dynamic-ip.hinet.net. [218.173.167.109]) by smtp.gmail.com with ESMTPSA id b10sm28710271pfk.20.2017.10.18.07.30.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 18 Oct 2017 07:30:21 -0700 (PDT) From: Joel Stanley To: Wolfram Sang Cc: Brendan Higgins , Benjamin Herrenschmidt , Andrew Jeffery , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] i2c: aspeed: Deassert reset in probe Date: Wed, 18 Oct 2017 22:29:30 +0800 Message-Id: <20171018142930.13052-1-joel@jms.id.au> X-Mailer: git-send-email 2.14.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In order to use i2c from a cold boot, the i2c peripheral must be taken out of reset. We request a shared reset controller each time a bus driver is loaded, as the reset is shared between the 14 i2c buses. On remove the reset is asserted, which only touches the hardware once the last i2c bus is removed. The request is optional, so if a device tree does not specify a reset controller (or the driver is not built in), the driver continues to probe. Signed-off-by: Joel Stanley --- v2: Sort the headers drivers/i2c/busses/i2c-aspeed.c | 8 ++++++++ 1 file changed, 8 insertions(+) -- 2.14.1 Reviewed-by: Brendan Higgins diff --git a/drivers/i2c/busses/i2c-aspeed.c b/drivers/i2c/busses/i2c-aspeed.c index 284f8670dbeb..a2006376322f 100644 --- a/drivers/i2c/busses/i2c-aspeed.c +++ b/drivers/i2c/busses/i2c-aspeed.c @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -27,6 +28,7 @@ #include #include #include +#include #include /* I2C Register */ @@ -132,6 +134,7 @@ struct aspeed_i2c_bus { struct i2c_adapter adap; struct device *dev; void __iomem *base; + struct reset_control *rst; /* Synchronizes I/O mem access to base. */ spinlock_t lock; struct completion cmd_complete; @@ -847,6 +850,9 @@ static int aspeed_i2c_probe_bus(struct platform_device *pdev) /* We just need the clock rate, we don't actually use the clk object. */ devm_clk_put(&pdev->dev, parent_clk); + bus->rst = devm_reset_control_get_optional_shared(&pdev->dev, NULL); + reset_control_deassert(bus->rst); + ret = of_property_read_u32(pdev->dev.of_node, "bus-frequency", &bus->bus_frequency); if (ret < 0) { @@ -919,6 +925,8 @@ static int aspeed_i2c_remove_bus(struct platform_device *pdev) i2c_del_adapter(&bus->adap); + reset_control_assert(bus->rst); + return 0; }