staging: comedi: rtd520: factor out the board reset
Factor the common code that does the low-level reset of the board out of rtd_init_board() and rtc_detach(). Fix the if test in rtd_detach() before doing the reset, devpriv->lcfg could be NULL at this point. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
b155c5fadb
commit
09d93a189e
@@ -1542,12 +1542,10 @@ static int rtd_dio_insn_config(struct comedi_device *dev,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtd_init_board(struct comedi_device *dev)
|
static void rtd_reset(struct comedi_device *dev)
|
||||||
{
|
{
|
||||||
struct rtdPrivate *devpriv = dev->private;
|
struct rtdPrivate *devpriv = dev->private;
|
||||||
|
|
||||||
/* initialize board, per RTD spec */
|
|
||||||
/* also, initialize shadow registers */
|
|
||||||
writel(0, devpriv->las0 + LAS0_BOARD_RESET);
|
writel(0, devpriv->las0 + LAS0_BOARD_RESET);
|
||||||
udelay(100); /* needed? */
|
udelay(100); /* needed? */
|
||||||
writel(0, devpriv->lcfg + LCFG_ITCSR);
|
writel(0, devpriv->lcfg + LCFG_ITCSR);
|
||||||
@@ -1556,6 +1554,18 @@ static void rtd_init_board(struct comedi_device *dev)
|
|||||||
devpriv->intClearMask = ~0;
|
devpriv->intClearMask = ~0;
|
||||||
writew(devpriv->intClearMask, devpriv->las0 + LAS0_CLEAR);
|
writew(devpriv->intClearMask, devpriv->las0 + LAS0_CLEAR);
|
||||||
readw(devpriv->las0 + LAS0_CLEAR);
|
readw(devpriv->las0 + LAS0_CLEAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* initialize board, per RTD spec
|
||||||
|
* also, initialize shadow registers
|
||||||
|
*/
|
||||||
|
static void rtd_init_board(struct comedi_device *dev)
|
||||||
|
{
|
||||||
|
struct rtdPrivate *devpriv = dev->private;
|
||||||
|
|
||||||
|
rtd_reset(dev);
|
||||||
|
|
||||||
writel(0, devpriv->las0 + LAS0_OVERRUN);
|
writel(0, devpriv->las0 + LAS0_OVERRUN);
|
||||||
writel(0, devpriv->las0 + LAS0_CGT_CLEAR);
|
writel(0, devpriv->las0 + LAS0_CGT_CLEAR);
|
||||||
writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR);
|
writel(0, devpriv->las0 + LAS0_ADC_FIFO_CLEAR);
|
||||||
@@ -1868,15 +1878,8 @@ static void rtd_detach(struct comedi_device *dev)
|
|||||||
writel(ICS_PIE | ICS_PLIE, devpriv->lcfg + LCFG_ITCSR);
|
writel(ICS_PIE | ICS_PLIE, devpriv->lcfg + LCFG_ITCSR);
|
||||||
}
|
}
|
||||||
#endif /* USE_DMA */
|
#endif /* USE_DMA */
|
||||||
if (devpriv->las0) {
|
if (devpriv->las0 && devpriv->lcfg)
|
||||||
writel(0, devpriv->las0 + LAS0_BOARD_RESET);
|
rtd_reset(dev);
|
||||||
devpriv->intMask = 0;
|
|
||||||
writew(devpriv->intMask, devpriv->las0 + LAS0_IT);
|
|
||||||
devpriv->intClearMask = ~0;
|
|
||||||
writew(devpriv->intClearMask,
|
|
||||||
devpriv->las0 + LAS0_CLEAR);
|
|
||||||
readw(devpriv->las0 + LAS0_CLEAR);
|
|
||||||
}
|
|
||||||
#ifdef USE_DMA
|
#ifdef USE_DMA
|
||||||
/* release DMA */
|
/* release DMA */
|
||||||
for (index = 0; index < DMA_CHAIN_COUNT; index++) {
|
for (index = 0; index < DMA_CHAIN_COUNT; index++) {
|
||||||
|
Reference in New Issue
Block a user