Thread (42 messages) 42 messages, 4 authors, 2014-11-28

Re: [PATCH v7 6/8] net: can: c_can: Disable pins when CAN interface is down

From: Linus Walleij <hidden>
Date: 2014-11-27 13:26:32
Also in: linux-can, linux-omap

On Fri, Nov 14, 2014 at 4:40 PM, Roger Quadros [off-list ref] wrote:
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 <redacted>
Reviewed-by: Linus Walleij <redacted>

I see you figured it out all by yourselves :D

(Sorry for being absent.)
+#include <linux/pinctrl/consumer.h>
+       pinctrl_pm_select_default_state(dev->dev.parent);
+       pinctrl_pm_select_sleep_state(dev->dev.parent);
+       pinctrl_pm_select_sleep_state(dev->dev.parent);
NB: in drivers/base/pinctrl.c:

#ifdef CONFIG_PM
        /*
         * If power management is enabled, we also look for the optional
         * sleep and idle pin states, with semantics as defined in
         * <linux/pinctrl/pinctrl-state.h>
         */
        dev->pins->sleep_state = pinctrl_lookup_state(dev->pins->p,
                                        PINCTRL_STATE_SLEEP);

So if these states are necessary for the driver to work, put
depends on PM or select PM in the Kconfig.

Yours,
Linus Walleij
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help