Skip to content

Commit

Permalink
can: flexcan: factor out transceiver {en,dis}able into seperate funct…
Browse files Browse the repository at this point in the history
…ions

This patch moves the transceiver enable and disable into seperate functions,
where the NULL pointer check is hidden.

Cc: linux-stable <stable@vger.kernel.org>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
  • Loading branch information
Marc Kleine-Budde committed Mar 3, 2014
1 parent 9b00b30 commit f003698
Showing 1 changed file with 20 additions and 7 deletions.
27 changes: 20 additions & 7 deletions drivers/net/can/flexcan.c
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,22 @@ static inline void flexcan_write(u32 val, void __iomem *addr)
}
#endif

static inline int flexcan_transceiver_enable(const struct flexcan_priv *priv)
{
if (!priv->reg_xceiver)
return 0;

return regulator_enable(priv->reg_xceiver);
}

static inline int flexcan_transceiver_disable(const struct flexcan_priv *priv)
{
if (!priv->reg_xceiver)
return 0;

return regulator_disable(priv->reg_xceiver);
}

static inline int flexcan_has_and_handle_berr(const struct flexcan_priv *priv,
u32 reg_esr)
{
Expand Down Expand Up @@ -808,11 +824,9 @@ static int flexcan_chip_start(struct net_device *dev)
if (priv->devtype_data->features & FLEXCAN_HAS_V10_FEATURES)
flexcan_write(0x0, &regs->rxfgmask);

if (priv->reg_xceiver) {
err = regulator_enable(priv->reg_xceiver);
if (err)
goto out;
}
err = flexcan_transceiver_enable(priv);
if (err)
goto out;

/* synchronize with the can bus */
reg_mcr = flexcan_read(&regs->mcr);
Expand Down Expand Up @@ -857,8 +871,7 @@ static void flexcan_chip_stop(struct net_device *dev)
flexcan_write(priv->reg_ctrl_default & ~FLEXCAN_CTRL_ERR_ALL,
&regs->ctrl);

if (priv->reg_xceiver)
regulator_disable(priv->reg_xceiver);
flexcan_transceiver_disable(priv);
priv->can.state = CAN_STATE_STOPPED;

return;
Expand Down

0 comments on commit f003698

Please sign in to comment.