These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / iio / adc / xilinx-xadc-core.c
index ce93bd8..02e636a 100644 (file)
@@ -273,33 +273,13 @@ static void xadc_zynq_unmask_worker(struct work_struct *work)
                schedule_delayed_work(&xadc->zynq_unmask_work,
                                msecs_to_jiffies(XADC_ZYNQ_UNMASK_TIMEOUT));
        }
-}
-
-static irqreturn_t xadc_zynq_threaded_interrupt_handler(int irq, void *devid)
-{
-       struct iio_dev *indio_dev = devid;
-       struct xadc *xadc = iio_priv(indio_dev);
-       unsigned int alarm;
-
-       spin_lock_irq(&xadc->lock);
-       alarm = xadc->zynq_alarm;
-       xadc->zynq_alarm = 0;
-       spin_unlock_irq(&xadc->lock);
-
-       xadc_handle_events(indio_dev, xadc_zynq_transform_alarm(alarm));
 
-       /* unmask the required interrupts in timer. */
-       schedule_delayed_work(&xadc->zynq_unmask_work,
-                       msecs_to_jiffies(XADC_ZYNQ_UNMASK_TIMEOUT));
-
-       return IRQ_HANDLED;
 }
 
 static irqreturn_t xadc_zynq_interrupt_handler(int irq, void *devid)
 {
        struct iio_dev *indio_dev = devid;
        struct xadc *xadc = iio_priv(indio_dev);
-       irqreturn_t ret = IRQ_HANDLED;
        uint32_t status;
 
        xadc_read_reg(xadc, XADC_ZYNQ_REG_INTSTS, &status);
@@ -321,18 +301,23 @@ static irqreturn_t xadc_zynq_interrupt_handler(int irq, void *devid)
 
        status &= XADC_ZYNQ_INT_ALARM_MASK;
        if (status) {
-               xadc->zynq_alarm |= status;
                xadc->zynq_masked_alarm |= status;
                /*
                 * mask the current event interrupt,
                 * unmask it when the interrupt is no more active.
                 */
                xadc_zynq_update_intmsk(xadc, 0, 0);
-               ret = IRQ_WAKE_THREAD;
+
+               xadc_handle_events(indio_dev,
+                               xadc_zynq_transform_alarm(status));
+
+               /* unmask the required interrupts in timer. */
+               schedule_delayed_work(&xadc->zynq_unmask_work,
+                               msecs_to_jiffies(XADC_ZYNQ_UNMASK_TIMEOUT));
        }
        spin_unlock(&xadc->lock);
 
-       return ret;
+       return IRQ_HANDLED;
 }
 
 #define XADC_ZYNQ_TCK_RATE_MAX 50000000
@@ -437,7 +422,6 @@ static const struct xadc_ops xadc_zynq_ops = {
        .setup = xadc_zynq_setup,
        .get_dclk_rate = xadc_zynq_get_dclk_rate,
        .interrupt_handler = xadc_zynq_interrupt_handler,
-       .threaded_interrupt_handler = xadc_zynq_threaded_interrupt_handler,
        .update_alarm = xadc_zynq_update_alarm,
 };
 
@@ -857,6 +841,7 @@ static int xadc_read_raw(struct iio_dev *indio_dev,
                        case XADC_REG_VCCINT:
                        case XADC_REG_VCCAUX:
                        case XADC_REG_VREFP:
+                       case XADC_REG_VREFN:
                        case XADC_REG_VCCBRAM:
                        case XADC_REG_VCCPINT:
                        case XADC_REG_VCCPAUX:
@@ -1225,9 +1210,8 @@ static int xadc_probe(struct platform_device *pdev)
        if (ret)
                goto err_free_samplerate_trigger;
 
-       ret = request_threaded_irq(irq, xadc->ops->interrupt_handler,
-                               xadc->ops->threaded_interrupt_handler,
-                               0, dev_name(&pdev->dev), indio_dev);
+       ret = request_irq(irq, xadc->ops->interrupt_handler, 0,
+                       dev_name(&pdev->dev), indio_dev);
        if (ret)
                goto err_clk_disable_unprepare;