irqchip: s3c24xx: add irq_set_type callback for basic interrupt types
authorHeiko Stuebner <heiko@sntech.de>
Thu, 4 Apr 2013 05:53:45 +0000 (14:53 +0900)
committerKukjin Kim <kgene.kim@samsung.com>
Thu, 4 Apr 2013 05:56:08 +0000 (14:56 +0900)
Enables post-init setting of the desired typehandler for the interrupt.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
drivers/irqchip/irq-s3c24xx.c

index a565eb8def305911a9f50120513fa30e2166c0c5..7cba4f0090f25a89c98da9efbdaa39cfec1c49f6 100644 (file)
@@ -123,6 +123,28 @@ static inline void s3c_irq_ack(struct irq_data *data)
                __raw_writel(bitval, intc->reg_intpnd);
 }
 
+static int s3c_irq_type(struct irq_data *data, unsigned int type)
+{
+       switch (type) {
+       case IRQ_TYPE_NONE:
+               break;
+       case IRQ_TYPE_EDGE_RISING:
+       case IRQ_TYPE_EDGE_FALLING:
+       case IRQ_TYPE_EDGE_BOTH:
+               irq_set_handler(data->irq, handle_edge_irq);
+               break;
+       case IRQ_TYPE_LEVEL_LOW:
+       case IRQ_TYPE_LEVEL_HIGH:
+               irq_set_handler(data->irq, handle_level_irq);
+               break;
+       default:
+               pr_err("No such irq type %d", type);
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
 static int s3c_irqext_type_set(void __iomem *gpcon_reg,
                               void __iomem *extint_reg,
                               unsigned long gpcon_offset,
@@ -228,6 +250,7 @@ static struct irq_chip s3c_irq_chip = {
        .irq_ack        = s3c_irq_ack,
        .irq_mask       = s3c_irq_mask,
        .irq_unmask     = s3c_irq_unmask,
+       .irq_set_type   = s3c_irq_type,
        .irq_set_wake   = s3c_irq_wake
 };
 
@@ -236,6 +259,7 @@ static struct irq_chip s3c_irq_level_chip = {
        .irq_mask       = s3c_irq_mask,
        .irq_unmask     = s3c_irq_unmask,
        .irq_ack        = s3c_irq_ack,
+       .irq_set_type   = s3c_irq_type,
 };
 
 static struct irq_chip s3c_irqext_chip = {