From: Yusuf Caglar Akyuz <cag...@bilkon-kontrol.com.tr>

DaVinci PWM driver was previously imported from 2.6.10 tree. This
commit updates driver for recent kernels.

Signed-off-by: Yusuf Caglar Akyuz <cag...@bilkon-kontrol.com.tr>
---
 arch/arm/mach-davinci/include/mach/pwm.h |    2 +
 arch/arm/mach-davinci/pwm.c              |   33 +++++++++++++----------------
 2 files changed, 17 insertions(+), 18 deletions(-)

diff --git a/arch/arm/mach-davinci/include/mach/pwm.h 
b/arch/arm/mach-davinci/include/mach/pwm.h
index c73604a..cab37f9 100644
--- a/arch/arm/mach-davinci/include/mach/pwm.h
+++ b/arch/arm/mach-davinci/include/mach/pwm.h
@@ -66,4 +66,6 @@ typedef volatile davinci_pwmregs *davinci_pwmregsovly;
 #define        PWM_ONESHOT_MODE        0
 #define        PWM_CONTINUOUS_MODE     1
 
+#define DAVINCI_PWM0_BASE                    (0x01C22000)
+
 #endif                         /* _DAVINCI_PWM_H */
diff --git a/arch/arm/mach-davinci/pwm.c b/arch/arm/mach-davinci/pwm.c
index 6790f3f..ab66d82 100644
--- a/arch/arm/mach-davinci/pwm.c
+++ b/arch/arm/mach-davinci/pwm.c
@@ -17,9 +17,9 @@
  */
 
 /* include Linux files */
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/init.h>
+#include <linux/platform_device.h>
 #include <linux/kernel.h>      /* printk() */
 #include <linux/slab.h>                /* kmalloc() */
 #include <linux/fs.h>          /* everything... */
@@ -31,12 +31,11 @@
 #include <asm/uaccess.h>       /* for VERIFY_READ/VERIFY_WRITE/
                                   copy_from_user */
 #include <linux/wait.h>
-#include <linux/devfs_fs_kernel.h>     /* for devfs */
-#include <asm/hardware/clock.h>
-#include <asm/arch/davinci_pwm.h>
-#include <asm/arch/cpu.h>
-#include <asm/semaphore.h>
-#include <asm/arch/irqs.h>
+#include <linux/clk.h>
+#include <mach/pwm.h>
+#include <mach/cputype.h>
+#include <linux/semaphore.h>
+#include <mach/irqs.h>
 
 #define        DRIVER_NAME             "PWM"
 #define        DAVINCI_PWM_TIMEOUT     (1*HZ)
@@ -264,7 +263,7 @@ static struct file_operations pwm_fops = {
        .ioctl = pwm_ioctl,
 };
 
-static struct class_simple *pwm_class = NULL;
+static struct class *pwm_class = NULL;
 
 static struct platform_device pwm_device[] = {
        [0] = {
@@ -328,7 +327,7 @@ static inline void pwm_davinci_complete_intr(struct 
pwm_davinci_device *dev)
        wake_up(&dev->intr_wait);
 }
 
-static irqreturn_t pwm_isr(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t pwm_isr(int irq, void *dev_id)
 {
        struct pwm_davinci_device *dev = dev_id;
 
@@ -346,7 +345,7 @@ static int __init pwm_init(void)
        unsigned int size, i, j;
        char *name[DAVINCI_PWM_MINORS];
 
-       if (cpu_is_davinci_dm6467()) {
+       if (cpu_is_davinci_dm646x()) {
                pwm_minor_count = DM646X_PWM_MINORS;
                for (i = 0; i < pwm_minor_count; i++)
                        name[i] = dm646x_name[i];
@@ -383,7 +382,7 @@ static int __init pwm_init(void)
                return result;
        }
 
-       pwm_class = class_simple_create(THIS_MODULE, "davinci_pwm");
+       pwm_class = class_create(THIS_MODULE, "davinci_pwm");
        if (!pwm_class) {
                cdev_del(&c_dev);
                return -EIO;
@@ -418,7 +417,7 @@ static int __init pwm_init(void)
                        devno =
                            MKDEV(pwm_major,
                                  pwm_minor_start + i * pwm_minor_count + j);
-                       class_simple_device_add(pwm_class, devno, NULL,
+                       device_create(pwm_class, NULL, devno, NULL,
                                                "davinci_pwm%d", j);
 
                        /*
@@ -427,12 +426,12 @@ static int __init pwm_init(void)
                        if (j == 3) {
                                result =
                                        request_irq(IRQ_DM355_PWMINT3, pwm_isr,
-                                               SA_INTERRUPT,
+                                               0,
                                                pwm_dev_array[j]->name,
                                                pwm_dev_array[j]);
                        } else {
                                result = request_irq(IRQ_PWMINT0 + j,
-                                               pwm_isr, SA_INTERRUPT,
+                                               pwm_isr, 0,
                                                pwm_dev_array[j]->name,
                                                pwm_dev_array[j]);
                        }
@@ -450,7 +449,6 @@ static int __init pwm_init(void)
                                printk("Cannot get clock\n");
                                return -1;
                        }
-                       clk_use(pwm_dev_array[j]->pwm_clk);
                        clk_enable(pwm_dev_array[j]->pwm_clk);
 
                        pwm_dev_array[j]->regs =
@@ -472,16 +470,15 @@ static void __exit pwm_exit(void)
                        platform_device_unregister(&pwm_device[i]);
                        driver_unregister(&pwm_driver[i]);
                        devno = MKDEV(pwm_major, pwm_minor_start + i);
-                       class_simple_device_remove(devno);
+                       device_destroy(pwm_class, devno);
                        if ((i == 3) && (cpu_is_davinci_dm355()))
                                free_irq(IRQ_DM355_PWMINT3, pwm_dev_array[i]);
                        else
                                free_irq(IRQ_PWMINT0 + i, pwm_dev_array[i]);
-                       clk_unuse(pwm_dev_array[i]->pwm_clk);
                        clk_disable(pwm_dev_array[i]->pwm_clk);
                        kfree(pwm_dev_array[i]);
                }
-               class_simple_destroy(pwm_class);
+               class_destroy(pwm_class);
        }
 
        cdev_del(&c_dev);
-- 
1.5.6


_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to