diff --git a/pm49fl004.c b/pm49fl004.c
index 25921c6..e0bd6aa 100644
--- a/pm49fl004.c
+++ b/pm49fl004.c
@@ -31,37 +31,38 @@
 #define RESET			0xFF
 #define READ_ID			0x90
 
-static __inline__ int erase_block_49fl004 ( volatile unsigned char * bios ,unsigned long address) 
+static __inline__ int erase_block_49fl004(volatile unsigned char *bios,
+					  unsigned long address)
 {
-        volatile unsigned char *Temp;
+	volatile unsigned char *Temp;
 
-        Temp  = bios + 0x5555;	/* set up address to be C000:5555h      */
-        *Temp = 0xAA;		/* write data 0xAA to the address       */
-        myusec_delay(10);
-        Temp  = bios + 0x2AAA;	/* set up address to be C000:2AAAh      */
-        *Temp = 0x55;		/* write data 0x55 to the address       */
-        myusec_delay(10);
-        Temp  = bios + 0x5555;	/* set up address to be C000:5555h      */
-        *Temp = 0x80;		/* write data 0x80 to the address       */
-        myusec_delay(10);
-        Temp  = bios + 0x5555;	/* set up address to be C000:5555h      */
-        *Temp = 0xAA;		/* write data 0xAA to the address       */
-        myusec_delay(10);
-        Temp  = bios + 0x2AAA;	/* set up address to be C000:2AAAh      */
-        *Temp = 0x55;		/* write data 0x55 to the address       */
-        myusec_delay(10);
-        Temp  = bios + address;	/* set up address to be C000:5555h      */
-        *Temp = 0x50;		/* write data 0x50 to the address       */
+	Temp = bios + 0x5555;	/* set up address to be C000:5555h      */
+	*Temp = 0xAA;		/* write data 0xAA to the address       */
+	myusec_delay(10);
+	Temp = bios + 0x2AAA;	/* set up address to be C000:2AAAh      */
+	*Temp = 0x55;		/* write data 0x55 to the address       */
+	myusec_delay(10);
+	Temp = bios + 0x5555;	/* set up address to be C000:5555h      */
+	*Temp = 0x80;		/* write data 0x80 to the address       */
+	myusec_delay(10);
+	Temp = bios + 0x5555;	/* set up address to be C000:5555h      */
+	*Temp = 0xAA;		/* write data 0xAA to the address       */
+	myusec_delay(10);
+	Temp = bios + 0x2AAA;	/* set up address to be C000:2AAAh      */
+	*Temp = 0x55;		/* write data 0x55 to the address       */
+	myusec_delay(10);
+	Temp = bios + address;	/* set up address to be C000:5555h      */
+	*Temp = 0x50;		/* write data 0x50 to the address       */
 
 	/* wait for Toggle bit ready         */
-        toggle_ready_jedec(bios);
+	toggle_ready_jedec(bios);
 
-        return(0);
+	return (0);
 }
 
-static __inline__ int write_block_49fl004(volatile char * bios, 
-					  unsigned char * src,
-					  volatile unsigned char * dst, 
+static __inline__ int write_block_49fl004(volatile char *bios,
+					  unsigned char *src,
+					  volatile unsigned char *dst,
 					  unsigned int page_size)
 {
 	int i;
@@ -69,8 +70,9 @@
 
 	for (i = 0; i < page_size; i++) {
 		if (*dst != 0xff) {
-			printf("FATAL: dst %p not erased (val 0x%x\n", dst, *dst);
-			return(-1);
+			printf("FATAL: dst %p not erased (val 0x%x\n", dst,
+			       *dst);
+			return (-1);
 		}
 		/* transfer data from source to destination */
 		if (*src == 0xFF) {
@@ -78,42 +80,44 @@
 			/* If the data is 0xFF, don't program it */
 			continue;
 		}
-		Temp =   (bios + 0x5555); 
-		*Temp = 0xAA;                   
-		Temp =  bios + 0x2AAA; 
-		*Temp = 0x55; 
-		Temp =  bios + 0x5555; 
-		*Temp = 0xA0;                   
+		Temp = (bios + 0x5555);
+		*Temp = 0xAA;
+		Temp = bios + 0x2AAA;
+		*Temp = 0x55;
+		Temp = bios + 0x5555;
+		*Temp = 0xA0;
 		*dst = *src;
 		toggle_ready_jedec(bios);
 		if (*dst != *src)
 			printf("BAD! dst 0x%lx val 0x%x src 0x%x\n",
-			       (unsigned long)dst, *dst, *src);
+			       (unsigned long) dst, *dst, *src);
 		dst++, src++;
 	}
 
-	return(0);
+	return (0);
 }
 
-int write_49fl004 (struct flashchip * flash, unsigned char * buf)
+int write_49fl004(struct flashchip *flash, unsigned char *buf)
 {
 	int i;
-	int total_size = flash->total_size * 1024, page_size = flash->page_size;
-	volatile char * bios = flash->virt_addr;
+	int total_size = flash->total_size * 1024, page_size =
+	    flash->page_size;
+	volatile char *bios = flash->virt_addr;
 
-	printf ("Programming Page: ");
-	for (i = 0; i < total_size/page_size; i++) {
+	printf("Programming Page: ");
+	for (i = 0; i < total_size / page_size; i++) {
 		/* erase the page before programming */
 		erase_block_49fl004(bios, i * page_size);
 
 		/* write to the sector */
-		printf ("%04d at address: 0x%08x", i, i * page_size);
-		write_block_49fl004(bios, buf + i * page_size, bios + i * page_size,
-				    page_size);
-		printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
-                fflush(stdout);
+		printf("%04d at address: 0x%08x", i, i * page_size);
+		write_block_49fl004(bios, buf + i * page_size,
+				    bios + i * page_size, page_size);
+		printf
+		    ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
+		fflush(stdout);
 	}
 	printf("\n");
 
-	return(0);
+	return (0);
 }
