|
|
@@ -68,12 +68,6 @@ static void am335x_tscadc_need_adc(struct ti_tscadc_dev *tsadc)
|
|
|
DEFINE_WAIT(wait);
|
|
|
u32 reg;
|
|
|
|
|
|
- /*
|
|
|
- * disable TSC steps so it does not run while the ADC is using it. If
|
|
|
- * write 0 while it is running (it just started or was already running)
|
|
|
- * then it completes all steps that were enabled and stops then.
|
|
|
- */
|
|
|
- tscadc_writel(tsadc, REG_SE, 0);
|
|
|
reg = tscadc_readl(tsadc, REG_ADCFSM);
|
|
|
if (reg & SEQ_STATUS) {
|
|
|
tsadc->adc_waiting = true;
|
|
|
@@ -86,8 +80,12 @@ static void am335x_tscadc_need_adc(struct ti_tscadc_dev *tsadc)
|
|
|
spin_lock_irq(&tsadc->reg_lock);
|
|
|
finish_wait(&tsadc->reg_se_wait, &wait);
|
|
|
|
|
|
+ /*
|
|
|
+ * Sequencer should either be idle or
|
|
|
+ * busy applying the charge step.
|
|
|
+ */
|
|
|
reg = tscadc_readl(tsadc, REG_ADCFSM);
|
|
|
- WARN_ON(reg & SEQ_STATUS);
|
|
|
+ WARN_ON((reg & SEQ_STATUS) && !(reg & CHARGE_STEP));
|
|
|
tsadc->adc_waiting = false;
|
|
|
}
|
|
|
tsadc->adc_in_use = true;
|
|
|
@@ -96,7 +94,6 @@ static void am335x_tscadc_need_adc(struct ti_tscadc_dev *tsadc)
|
|
|
void am335x_tsc_se_set_once(struct ti_tscadc_dev *tsadc, u32 val)
|
|
|
{
|
|
|
spin_lock_irq(&tsadc->reg_lock);
|
|
|
- tsadc->reg_se_cache |= val;
|
|
|
am335x_tscadc_need_adc(tsadc);
|
|
|
|
|
|
tscadc_writel(tsadc, REG_SE, val);
|