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
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