]> err.no Git - linux-2.6/blobdiff - drivers/mfd/asic3.c
atmel_pwm: set up only one PWM clock when allocating a clock
[linux-2.6] / drivers / mfd / asic3.c
index 50c773c4d60adf34582b84cffc82a9690bc41542..3b870e7fb3e12c9c932742c3f0a03f1f5605006d 100644 (file)
@@ -137,7 +137,7 @@ static void asic3_irq_demux(unsigned int irq, struct irq_desc *desc)
                for (i = ASIC3_NUM_GPIOS; i < ASIC3_NR_IRQS; i++) {
                        /* They start at bit 4 and go up */
                        if (status & (1 << (i - ASIC3_NUM_GPIOS + 4))) {
-                               desc = irq_desc +  + i;
+                               desc = irq_desc + asic->irq_base + i;
                                desc->handle_irq(asic->irq_base + i,
                                                 desc);
                        }
@@ -313,6 +313,7 @@ static int __init asic3_irq_probe(struct platform_device *pdev)
        struct asic3 *asic = platform_get_drvdata(pdev);
        unsigned long clksel = 0;
        unsigned int irq, irq_base;
+       int map_size;
 
        asic->irq_nr = platform_get_irq(pdev, 0);
        if (asic->irq_nr < 0)
@@ -551,8 +552,8 @@ static int __init asic3_probe(struct platform_device *pdev)
                goto out_free;
        }
 
-
-       asic->mapping = ioremap(mem->start, PAGE_SIZE);
+       map_size = mem->end - mem->start + 1;
+       asic->mapping = ioremap(mem->start, map_size);
        if (!asic->mapping) {
                ret = -ENOMEM;
                dev_err(asic->dev, "Couldn't ioremap\n");
@@ -561,10 +562,8 @@ static int __init asic3_probe(struct platform_device *pdev)
 
        asic->irq_base = pdata->irq_base;
 
-       if (pdata && pdata->bus_shift)
-               asic->bus_shift = 2 - pdata->bus_shift;
-       else
-               asic->bus_shift = 0;
+       /* calculate bus shift from mem resource */
+       asic->bus_shift = 2 - (map_size >> 12);
 
        clksel = 0;
        asic3_write_register(asic, ASIC3_OFFSET(CLOCK, SEL), clksel);