Subject: Re: [PATCH 2.6.11.6] CPM2 Timers API

From: Jason McMullan <[email-masked]>
Date: Thu, 31 Mar 2005 15:33:45 -0500

A brown bag error handling and Lindent patch, to be applied in that
order, to my previous CPM timers patch.

-- 
Jason McMullan <[email-masked]>
TimeSys Corporation

--- linux-2.6.patch/arch/ppc/syslib/cpm_timer.c.orig	2005-03-31 14:50:29.000000000 -0500
+++ linux-2.6.patch/arch/ppc/syslib/cpm_timer.c	2005-03-31 15:01:39.417496033 -0500
@@ -114,12 +114,16 @@
 
 	tm->start = (timer_id>>4)&0xf;
 	tm->end   = timer_id & 0xf;
-	if (tm->start > 3)
+	if (tm->start > 3) {
+		kfree(tm);
 		return -EINVAL;
+	}
 
 	if ((tm->end != tm->start) && 
-	    ((tm->start & 1) || (tm->end != (tm->start+1))))
-	    return -EINVAL;
+	    ((tm->start & 1) || (tm->end != (tm->start+1)))) {
+		kfree(tm);
+		return -EINVAL;
+	}
 
 	err = request_resource(&cpm_timer_resource,tm);
 	if (err < 0) {
--- linux-2.6/arch/ppc/syslib/cpm_timer.c	2005-03-31 15:15:59.100629916 -0500
+++ linux-2.6.patch/arch/ppc/syslib/cpm_timer.c	2005-03-31 15:15:38.838272681 -0500
@@ -42,7 +42,7 @@
 static struct resource cpm_timer_resource = {
 	.name = "CPM Timers",
 	.start = 0,
-	.end   = 3,
+	.end = 3,
 };
 
 static struct cpm_timer_s {
@@ -101,52 +101,56 @@
  * Returns 0 on success, -errno on error
  */
 EXPORT_SYMBOL(cpm_timer_alloc);
-int cpm_timer_alloc(int timer_id, cpm_timer_t *ptm)
+int cpm_timer_alloc(int timer_id, cpm_timer_t * ptm)
 {
 	struct resource *tm;
 	int err;
 	uint16_t mask;
-      
-	tm = kmalloc(sizeof(struct resource)+16, GFP_KERNEL);
-	memset(tm,0,sizeof(struct resource)+16);
+
+	tm = kmalloc(sizeof(struct resource) + 16, GFP_KERNEL);
+	memset(tm, 0, sizeof(struct resource) + 16);
 	if (tm == NULL)
 		return -ENOMEM;
 
-	tm->start = (timer_id>>4)&0xf;
-	tm->end   = timer_id & 0xf;
+	tm->start = (timer_id >> 4) & 0xf;
+	tm->end = timer_id & 0xf;
 	if (tm->start > 3) {
 		kfree(tm);
 		return -EINVAL;
 	}
 
-	if ((tm->end != tm->start) && 
-	    ((tm->start & 1) || (tm->end != (tm->start+1)))) {
+	if ((tm->end != tm->start) &&
+	    ((tm->start & 1) || (tm->end != (tm->start + 1)))) {
 		kfree(tm);
 		return -EINVAL;
 	}
 
-	err = request_resource(&cpm_timer_resource,tm);
+	err = request_resource(&cpm_timer_resource, tm);
 	if (err < 0) {
 		kfree(tm);
 		return err;
 	}
 
-	*ptm = (cpm_timer_t)(tm);
+	*ptm = (cpm_timer_t) (tm);
 
 	tm->name = ((void *)tm) + sizeof(struct resource);
 	if (tm->start == tm->end) {
-		sprintf((char *)tm->name,"timer%ld",tm->start+1);
+		sprintf((char *)tm->name, "timer%ld", tm->start + 1);
 	} else {
-		sprintf((char *)tm->name,"timer%ld-%ld",tm->start+1,tm->end+1);
+		sprintf((char *)tm->name, "timer%ld-%ld", tm->start + 1,
+			tm->end + 1);
 	}
 
-	err = request_irq(cpm_timer[tm->end].irq,cpm_timer_irq,SA_INTERRUPT,tm->name,&cpm_timer[tm->end]);
+	err =
+	    request_irq(cpm_timer[tm->end].irq, cpm_timer_irq, SA_INTERRUPT,
+			tm->name, &cpm_timer[tm->end]);
 	if (err < 0) {
-		printk(KERN_ERR "CPM Timer %s: Can't allocate IRQ %d.\n",tm->name,cpm_timer[tm->end].irq);
+		printk(KERN_ERR "CPM Timer %s: Can't allocate IRQ %d.\n",
+		       tm->name, cpm_timer[tm->end].irq);
 	}
 
 	/* Step 1 - enable and stop the timer */
-	mask = (TGCR_RST|TGCR_STP) << (4*((tm->end)&1));
+	mask = (TGCR_RST | TGCR_STP) << (4 * ((tm->end) & 1));
 	if (tm->start < 2) {
 		timer_base->cpmt_tgcr1 |= mask;
 	} else {
@@ -188,7 +192,7 @@
 	uint16_t mask;
 
 	cpm_timer_stop(tm);
-	free_irq(cpm_timer[tm->end].irq,&cpm_timer[tm->end]);
+	free_irq(cpm_timer[tm->end].irq, &cpm_timer[tm->end]);
 	if (tm->start != tm->end) {
 		if (tm->start == 0) {
 			timer_base->cpmt_tgcr1 &= ~(TGCR_CAS << 4);
@@ -199,8 +203,8 @@
 	wmb();
 
 	/* Disable the timer */
-	mask = (TGCR_RST << (4*((tm->start)&1))) |
-	       (TGCR_RST << (4*((tm->end)&1)));
+	mask = (TGCR_RST << (4 * ((tm->start) & 1))) |
+	    (TGCR_RST << (4 * ((tm->end) & 1)));
 	if (tm->start < 2) {
 		timer_base->cpmt_tgcr1 &= ~mask;
 	} else {
@@ -219,7 +223,7 @@
 {
 	uint8_t mask;
 
-	mask = (TGCR_STP << (4*((tm->end)&1)));
+	mask = (TGCR_STP << (4 * ((tm->end) & 1)));
 	if (tm->start < 2) {
 		timer_base->cpmt_tgcr1 |= mask;
 	} else {
@@ -236,7 +240,7 @@
 {
 	uint8_t mask;
 
-	mask = (TGCR_STP << (4*((tm->end)&1)));
+	mask = (TGCR_STP << (4 * ((tm->end) & 1)));
 	if (tm->start < 2) {
 		timer_base->cpmt_tgcr1 &= ~mask;
 	} else {
@@ -256,7 +260,7 @@
 	int mask;
 	int tmr;
 
-	mask = ((TGCR_STP|TGCR_RST) << (4*((tm->end)&1)));
+	mask = ((TGCR_STP | TGCR_RST) << (4 * ((tm->end) & 1)));
 	tmr = *cpm_timer[tm->end].ctrl.tmr;
 
 	if (tm->start < 2) {
@@ -290,9 +294,9 @@
 	/* For the mpc85xx, we're just using core frequency/16
 	 */
 	extern unsigned char __res[];
-	bd_t *bd = (bd_t *)__res;
+	bd_t *bd = (bd_t *) __res;
 
-	return bd->bi_busfreq/1000000*16;
+	return bd->bi_busfreq / 1000000 * 16;
 }
 
 /* Get the timer value, in ticks
@@ -317,7 +321,8 @@
  * You cannot call cpm_timer_free() within that context.
  */
 
-static int cpm_timer_call_common(cpm_timer_t tm, unsigned long ticks, cpm_timer_f func, void *func_data)
+static int cpm_timer_call_common(cpm_timer_t tm, unsigned long ticks,
+				 cpm_timer_f func, void *func_data)
 {
 	if (cpm_timer[tm->start].func != NULL)
 		return -EBUSY;
@@ -347,15 +352,15 @@
 	return 0;
 }
 
-
 /* This is the one-shot timer.
  */
 EXPORT_SYMBOL(cpm_timer_call_once);
-int cpm_timer_call_once(cpm_timer_t tm, unsigned long ticks, cpm_timer_f func, void *func_data)
+int cpm_timer_call_once(cpm_timer_t tm, unsigned long ticks, cpm_timer_f func,
+			void *func_data)
 {
 	int err;
 
-	err = cpm_timer_call_common(tm,ticks,func,func_data);
+	err = cpm_timer_call_common(tm, ticks, func, func_data);
 	if (err < 0)
 		return err;
 
@@ -363,16 +368,16 @@
 
 	return 0;
 }
-	
 
 /* This is the repeat-timer function
  */
 EXPORT_SYMBOL(cpm_timer_call_every);
-int cpm_timer_call_every(cpm_timer_t tm, unsigned long ticks, cpm_timer_f func, void *func_data)
+int cpm_timer_call_every(cpm_timer_t tm, unsigned long ticks, cpm_timer_f func,
+			 void *func_data)
 {
 	int err;
 
-	err = cpm_timer_call_common(tm,ticks,func,func_data);
+	err = cpm_timer_call_common(tm, ticks, func, func_data);
 	if (err < 0)
 		return err;
 
@@ -380,7 +385,7 @@
 
 	return 0;
 }
-	
+
 /* Cancel any pending timer functions
  */
 EXPORT_SYMBOL(cpm_timer_call_none);
@@ -411,10 +416,10 @@
 }
 
 static struct file_operations proc_cpm_timer_operations = {
-	.open		= cpm_timer_open,
-	.read		= seq_read,
-	.llseek		= seq_lseek,
-	.release	= seq_release,
+	.open = cpm_timer_open,
+	.read = seq_read,
+	.llseek = seq_lseek,
+	.release = seq_release,
 };
 
 static int __init cpm_timer_proc_init(void)
@@ -432,13 +437,13 @@
 	remove_proc_entry("cpm-timer", NULL);
 }
 
-#endif /* CONFIG_PROC_FS */
+#endif				/* CONFIG_PROC_FS */
 
 static int __devinit cpm_timer_probe(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
 	int i;
-	struct resource *res,*irqs;
+	struct resource *res, *irqs;
 
 	if (timer_base != NULL)
 		return -EBUSY;
@@ -448,10 +453,10 @@
 		return -EINVAL;
 
 	irqs = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
-	if (res == NULL || ((irqs->end+1)-irqs->start) != 4)
+	if (res == NULL || ((irqs->end + 1) - irqs->start) != 4)
 		return -EINVAL;
 
-	timer_base = ioremap(res->start,sizeof(cpmtimer_cpm2_t));
+	timer_base = ioremap(res->start, sizeof(cpmtimer_cpm2_t));
 	if (timer_base == NULL)
 		return -ENOMEM;
 
@@ -477,8 +482,8 @@
 	CPM_TIMER_D_SETUP(tcn);
 
 	for (i = 0; i < 4; i++) {
-		sprintf(cpm_timer[i].name,"CPM Timer %d",i+1);
-		cpm_timer[i].irq = irqs->start+i;
+		sprintf(cpm_timer[i].name, "CPM Timer %d", i + 1);
+		cpm_timer[i].irq = irqs->start + i;
 	}
 
 #ifdef CONFIG_PROC_FS
@@ -522,5 +527,3 @@
 
 module_init(cpm_timer_init);
 module_exit(cpm_timer_exit);
-
-