On 07/31/2015 04:10 AM, Sasha Levin wrote: > From: Heiko Carstens <[email protected]> > > This patch has been added to the 3.18 stable tree. If you have any > objections, please let us know. > > =============== > > [ Upstream commit 033365191136c97f88c81b7bd0011414db28bb4e ] > > The previous change 3973c526ae9c (net: can: c_can: Disable pins when CAN > interface is down) causes a slight glitch on the pinctrl settings when used. > Since commit ab78029 (drivers/pinctrl: grab default handles from device core), > the device core will automatically set the default pins. This causes the pins > to be momentarily set to the default and then to the sleep state in > register_c_can_dev(). By adding an optional "enable" state, boards can set the > default pin state to be disabled and avoid the glitch when the switch from > default to sleep first occurs. If the "enable" state is not available > c_can_pinctrl_select_state() falls back to using the "default" pinctrl state. > > [Roger Q] - Forward port to v4.2 and use pinctrl_get_select(). > > Signed-off-by: J.D. Schroeder <[email protected]> > Signed-off-by: Roger Quadros <[email protected]> > Reviewed-by: Grygorii Strashko <[email protected]> > Cc: linux-stable <[email protected]> > Signed-off-by: Marc Kleine-Budde <[email protected]> > Signed-off-by: Sasha Levin <[email protected]> > --- > arch/s390/kernel/process.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c > index ed84cc2..9b72e68 100644 > --- a/arch/s390/kernel/process.c > +++ b/arch/s390/kernel/process.c > @@ -171,7 +171,7 @@ asmlinkage void execve_tail(void) > { > current->thread.fp_regs.fpc = 0; > if (MACHINE_HAS_IEEE) > - asm volatile("sfpc %0,%0" : : "d" (0)); > + asm volatile("sfpc %0" : : "d" (0)); > } > > /* >
The original upstream patch looked like this:
diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c
index 041525d2595c..5d214d135332 100644
--- a/drivers/net/can/c_can/c_can.c
+++ b/drivers/net/can/c_can/c_can.c
@@ -592,6 +592,7 @@ static int c_can_start(struct net_device *dev)
{
struct c_can_priv *priv = netdev_priv(dev);
int err;
+ struct pinctrl *p;
/* basic c_can configuration */
err = c_can_chip_config(dev);
@@ -604,8 +605,13 @@ 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);
+ /* Attempt to use "active" if available else use "default" */
+ p = pinctrl_get_select(priv->device, "active");
+ if (!IS_ERR(p))
+ pinctrl_put(p);
+ else
+ pinctrl_pm_select_default_state(priv->device);
+
return 0;
}
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Industrial Linux Solutions | Phone: +49-231-2826-924 |
Vertretung West/Dortmund | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
signature.asc
Description: OpenPGP digital signature
