These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / pinctrl / samsung / pinctrl-s3c24xx.c
index f1993f4..3d92f82 100644 (file)
@@ -131,13 +131,13 @@ static int s3c24xx_eint_get_trigger(unsigned int type)
        }
 }
 
-static void s3c24xx_eint_set_handler(unsigned int irq, unsigned int type)
+static void s3c24xx_eint_set_handler(struct irq_data *d, unsigned int type)
 {
        /* Edge- and level-triggered interrupts need different handlers */
        if (type & IRQ_TYPE_EDGE_BOTH)
-               __irq_set_handler_locked(irq, handle_edge_irq);
+               irq_set_handler_locked(d, handle_edge_irq);
        else
-               __irq_set_handler_locked(irq, handle_level_irq);
+               irq_set_handler_locked(d, handle_level_irq);
 }
 
 static void s3c24xx_eint_set_function(struct samsung_pinctrl_drv_data *d,
@@ -181,7 +181,7 @@ static int s3c24xx_eint_type(struct irq_data *data, unsigned int type)
                return -EINVAL;
        }
 
-       s3c24xx_eint_set_handler(data->irq, type);
+       s3c24xx_eint_set_handler(data, type);
 
        /* Set up interrupt trigger */
        reg = d->virt_base + EINT_REG(index);
@@ -240,10 +240,10 @@ static struct irq_chip s3c2410_eint0_3_chip = {
        .irq_set_type   = s3c24xx_eint_type,
 };
 
-static void s3c2410_demux_eint0_3(unsigned int irq, struct irq_desc *desc)
+static void s3c2410_demux_eint0_3(struct irq_desc *desc)
 {
        struct irq_data *data = irq_desc_get_irq_data(desc);
-       struct s3c24xx_eint_data *eint_data = irq_get_handler_data(irq);
+       struct s3c24xx_eint_data *eint_data = irq_desc_get_handler_data(desc);
        unsigned int virq;
 
        /* the first 4 eints have a simple 1 to 1 mapping */
@@ -295,11 +295,11 @@ static struct irq_chip s3c2412_eint0_3_chip = {
        .irq_set_type   = s3c24xx_eint_type,
 };
 
-static void s3c2412_demux_eint0_3(unsigned int irq, struct irq_desc *desc)
+static void s3c2412_demux_eint0_3(struct irq_desc *desc)
 {
-       struct irq_chip *chip = irq_get_chip(irq);
+       struct s3c24xx_eint_data *eint_data = irq_desc_get_handler_data(desc);
        struct irq_data *data = irq_desc_get_irq_data(desc);
-       struct s3c24xx_eint_data *eint_data = irq_get_handler_data(irq);
+       struct irq_chip *chip = irq_data_get_irq_chip(data);
        unsigned int virq;
 
        chained_irq_enter(chip, desc);
@@ -357,11 +357,11 @@ static struct irq_chip s3c24xx_eint_chip = {
        .irq_set_type   = s3c24xx_eint_type,
 };
 
-static inline void s3c24xx_demux_eint(unsigned int irq, struct irq_desc *desc,
+static inline void s3c24xx_demux_eint(struct irq_desc *desc,
                                      u32 offset, u32 range)
 {
-       struct irq_chip *chip = irq_get_chip(irq);
-       struct s3c24xx_eint_data *data = irq_get_handler_data(irq);
+       struct s3c24xx_eint_data *data = irq_desc_get_handler_data(desc);
+       struct irq_chip *chip = irq_desc_get_chip(desc);
        struct samsung_pinctrl_drv_data *d = data->drvdata;
        unsigned int pend, mask;
 
@@ -374,7 +374,7 @@ static inline void s3c24xx_demux_eint(unsigned int irq, struct irq_desc *desc,
        pend &= range;
 
        while (pend) {
-               unsigned int virq;
+               unsigned int virq, irq;
 
                irq = __ffs(pend);
                pend &= ~(1 << irq);
@@ -388,14 +388,14 @@ static inline void s3c24xx_demux_eint(unsigned int irq, struct irq_desc *desc,
        chained_irq_exit(chip, desc);
 }
 
-static void s3c24xx_demux_eint4_7(unsigned int irq, struct irq_desc *desc)
+static void s3c24xx_demux_eint4_7(struct irq_desc *desc)
 {
-       s3c24xx_demux_eint(irq, desc, 0, 0xf0);
+       s3c24xx_demux_eint(desc, 0, 0xf0);
 }
 
-static void s3c24xx_demux_eint8_23(unsigned int irq, struct irq_desc *desc)
+static void s3c24xx_demux_eint8_23(struct irq_desc *desc)
 {
-       s3c24xx_demux_eint(irq, desc, 8, 0xffff00);
+       s3c24xx_demux_eint(desc, 8, 0xffff00);
 }
 
 static irq_flow_handler_t s3c2410_eint_handlers[NUM_EINT_IRQ] = {
@@ -437,7 +437,6 @@ static int s3c24xx_gpf_irq_map(struct irq_domain *h, unsigned int virq,
                                         handle_edge_irq);
        }
        irq_set_chip_data(virq, bank);
-       set_irq_flags(virq, IRQF_VALID);
        return 0;
 }
 
@@ -457,7 +456,6 @@ static int s3c24xx_gpg_irq_map(struct irq_domain *h, unsigned int virq,
 
        irq_set_chip_and_handler(virq, &s3c24xx_eint_chip, handle_edge_irq);
        irq_set_chip_data(virq, bank);
-       set_irq_flags(virq, IRQF_VALID);
        return 0;
 }
 
@@ -514,8 +512,7 @@ static int s3c24xx_eint_init(struct samsung_pinctrl_drv_data *d)
                }
 
                eint_data->parents[i] = irq;
-               irq_set_chained_handler(irq, handlers[i]);
-               irq_set_handler_data(irq, eint_data);
+               irq_set_chained_handler_and_data(irq, handlers[i], eint_data);
        }
 
        bank = d->pin_banks;