From patchwork Fri Nov 14 18:09:49 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Kleine-Budde X-Patchwork-Id: 40846 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-lb0-f198.google.com (mail-lb0-f198.google.com [209.85.217.198]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id D4D7E240ED for ; Fri, 14 Nov 2014 18:10:36 +0000 (UTC) Received: by mail-lb0-f198.google.com with SMTP id 10sf9470206lbg.5 for ; Fri, 14 Nov 2014 10:10:35 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:delivered-to:from:to:cc:subject :date:message-id:in-reply-to:references:sender:precedence:list-id :x-original-sender:x-original-authentication-results:mailing-list :list-post:list-help:list-archive:list-unsubscribe; bh=POZpfZ+VYDZTscsBhmQSAm8jewu+m6tHplbzvB8vFE8=; b=c7dEEoI3kXI0/7r+FMJFF3RVFuxJOpzLKsBFwYpFWYx1welOpk4E55X1uArAtYfbbG qLFwBmODkxShuDxehYpl0oVpALPWgAm8ZMF1/Bmphh2ojJ5NBIMKNdWsk8xt7Jscy3d+ 5lRgqQF3OKd8qT1v+8zPYUyIATbExs9DT1Fw82VVOz6X4X0dmLWfPuuOFgzuEbbLbxsB 7MB9FIaWkL6yhMjmo2MUGBFX6o2uFmxr25mpudzkLqUzjGWQrAMT+XZPzKlGj67H9xF4 Hvtr+fTVE7myClabWMiwvZ3fFeFdrp07osh4UeyuIDfIHbozii8DtxHksLUHcga9/bI3 Hqdg== X-Gm-Message-State: ALoCoQmri99Pam8MB+TmNBBUYgvI6B28pPTP4lcIiEMXYoR5ARA4F290mzCBRtWhGTAgztjLqL6H X-Received: by 10.112.159.199 with SMTP id xe7mr29161lbb.21.1415988635962; Fri, 14 Nov 2014 10:10:35 -0800 (PST) MIME-Version: 1.0 X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.170.133 with SMTP id am5ls1031040lac.54.gmail; Fri, 14 Nov 2014 10:10:35 -0800 (PST) X-Received: by 10.152.2.41 with SMTP id 9mr9373255lar.47.1415988635674; Fri, 14 Nov 2014 10:10:35 -0800 (PST) Received: from mail-la0-f46.google.com (mail-la0-f46.google.com. [209.85.215.46]) by mx.google.com with ESMTPS id uf7si27121047lac.99.2014.11.14.10.10.35 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 14 Nov 2014 10:10:35 -0800 (PST) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.46 as permitted sender) client-ip=209.85.215.46; Received: by mail-la0-f46.google.com with SMTP id gm9so15685060lab.33 for ; Fri, 14 Nov 2014 10:10:35 -0800 (PST) X-Received: by 10.112.189.10 with SMTP id ge10mr9476047lbc.23.1415988635572; Fri, 14 Nov 2014 10:10:35 -0800 (PST) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.184.201 with SMTP id ew9csp809492lbc; Fri, 14 Nov 2014 10:10:34 -0800 (PST) X-Received: by 10.68.89.129 with SMTP id bo1mr11922868pbb.46.1415988632279; Fri, 14 Nov 2014 10:10:32 -0800 (PST) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id kj7si29059118pab.98.2014.11.14.10.10.31 for ; Fri, 14 Nov 2014 10:10:32 -0800 (PST) Received-SPF: none (google.com: linux-omap-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161698AbaKNSKH (ORCPT + 5 others); Fri, 14 Nov 2014 13:10:07 -0500 Received: from metis.ext.pengutronix.de ([92.198.50.35]:51617 "EHLO metis.ext.pengutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161720AbaKNSKB (ORCPT ); Fri, 14 Nov 2014 13:10:01 -0500 Received: from gallifrey.ext.pengutronix.de ([2001:6f8:1178:4:5054:ff:fe8d:eefb] helo=hardanger.do.blackshift.org) by metis.ext.pengutronix.de with esmtp (Exim 4.72) (envelope-from ) id 1XpLJm-00039L-4d; Fri, 14 Nov 2014 19:09:58 +0100 From: Marc Kleine-Budde To: linux-can@vger.kernel.org Cc: wsa@the-dreams.de, linux-omap@vger.kernel.org, rogerq@ti.com, kernel@pengutronix.de, Marc Kleine-Budde Subject: [PATCH v8 6/8] can: c_can: Disable pins when CAN interface is down Date: Fri, 14 Nov 2014 19:09:49 +0100 Message-Id: <1415988591-6032-7-git-send-email-mkl@pengutronix.de> X-Mailer: git-send-email 2.1.1 In-Reply-To: <1415988591-6032-1-git-send-email-mkl@pengutronix.de> References: <1415988591-6032-1-git-send-email-mkl@pengutronix.de> X-SA-Exim-Connect-IP: 2001:6f8:1178:4:5054:ff:fe8d:eefb X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-omap@vger.kernel.org Sender: linux-omap-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: mkl@pengutronix.de X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.46 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , From: Roger Quadros DRA7 CAN IP suffers from a problem which causes it to be prevented from fully turning OFF (i.e. stuck in transition) if the module was disabled while there was traffic on the CAN_RX line. To work around this issue we select the SLEEP pin state by default on probe and use the DEFAULT pin state on CAN up and back to the SLEEP pin state on CAN down. Signed-off-by: Roger Quadros Signed-off-by: Marc Kleine-Budde --- drivers/net/can/c_can/c_can.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c index 8e78bb48f5a4..f94a9fa60488 100644 --- a/drivers/net/can/c_can/c_can.c +++ b/drivers/net/can/c_can/c_can.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -603,6 +604,8 @@ static int c_can_start(struct net_device *dev) priv->can.state = CAN_STATE_ERROR_ACTIVE; + /* activate pins */ + pinctrl_pm_select_default_state(dev->dev.parent); return 0; } @@ -611,6 +614,9 @@ static void c_can_stop(struct net_device *dev) struct c_can_priv *priv = netdev_priv(dev); c_can_irq_control(priv, false); + + /* deactivate pins */ + pinctrl_pm_select_sleep_state(dev->dev.parent); priv->can.state = CAN_STATE_STOPPED; } @@ -1244,6 +1250,13 @@ int register_c_can_dev(struct net_device *dev) struct c_can_priv *priv = netdev_priv(dev); int err; + /* Deactivate pins to prevent DRA7 DCAN IP from being + * stuck in transition when module is disabled. + * Pins are activated in c_can_start() and deactivated + * in c_can_stop() + */ + pinctrl_pm_select_sleep_state(dev->dev.parent); + c_can_pm_runtime_enable(priv); dev->flags |= IFF_ECHO; /* we support local echo */