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