ODROID-M1/S: Change CALC

Signed-off-by: Steve Jeong <steve@how2flow.net>
Change-Id: Ie0eefc480949dfb65ff58c1c2ec2ab0990a0d421
diff --git a/wiringPi/odroidm1.c b/wiringPi/odroidm1.c
index 7f220a6..01529f6 100644
--- a/wiringPi/odroidm1.c
+++ b/wiringPi/odroidm1.c
@@ -413,24 +413,24 @@
 	switch (state) {
 	case M1_CLK_ENABLE:
 		if (bank == 0) {
-			target |= *(cru[0] + (M1_PMU_CRU_GPIO_CLK_OFFSET >> 2));
+			target |= *(cru[0] + M1_PMU_CRU_GPIO_CLK_OFFSET);
 			target &= ~(1 << gpioPclkShift);
-			*(cru[0] + (M1_PMU_CRU_GPIO_CLK_OFFSET >> 2)) = target;
+			*(cru[0] + M1_PMU_CRU_GPIO_CLK_OFFSET) = target;
 		} else {
-			target |= *(cru[1] + (M1_CRU_GPIO_CLK_OFFSET >> 2));
+			target |= *(cru[1] + M1_CRU_GPIO_CLK_OFFSET);
 			target &= ~(1 << gpioPclkShift);
-			*(cru[1] + (M1_CRU_GPIO_CLK_OFFSET >> 2)) = target;
+			*(cru[1] + M1_CRU_GPIO_CLK_OFFSET) = target;
 		}
 		break;
 	case M1_CLK_DISABLE:
 		if (bank == 0) {
-			target |= *(cru[0] + (M1_PMU_CRU_GPIO_CLK_OFFSET >> 2));
+			target |= *(cru[0] + M1_PMU_CRU_GPIO_CLK_OFFSET);
 			target |= (1 << gpioPclkShift);
-			*(cru[0] + (M1_PMU_CRU_GPIO_CLK_OFFSET >> 2)) = target;
+			*(cru[0] + M1_PMU_CRU_GPIO_CLK_OFFSET) = target;
 		} else {
-			target |= *(cru[1] + (M1_CRU_GPIO_CLK_OFFSET >> 2));
+			target |= *(cru[1] + M1_CRU_GPIO_CLK_OFFSET);
 			target |=  (1 << gpioPclkShift);
-			*(cru[1] + (M1_CRU_GPIO_CLK_OFFSET >> 2)) = target;
+			*(cru[1] + M1_CRU_GPIO_CLK_OFFSET) = target;
 		}
 		break;
 	case M1_CLK_BYTE_ENABLE:
@@ -465,41 +465,41 @@
 	group = (bankOffset / 8); // A or B or C or D
 	groupOffset = (pin % 8);
 
-	regOffset = (bank == 0 ? 0 : bank-1) * 0x20 + group * 0x8;
-	regOffset += (groupOffset / 4 == 0) ? 0x0 : 0x4;
+	regOffset = (bank == 0 ? 0 : bank-1) * 0x8 + group * 0x2;
+	regOffset += (groupOffset / 4 == 0) ? 0x0 : 0x1;
 
 	// Common IOMUX Funtion 1 : GPIO (3'h0)
 	switch (mode) {
 	case M1_FUNC_GPIO: // Common IOMUX Function 1_GPIO (3'h0)
 		if (bank == 0) {
 			regOffset += M1_PMU_GRF_IOMUX_OFFSET;
-			target = *(grf[0] + (regOffset >> 2));
+			target = *(grf[0] + regOffset);
 			target |= (0x7 << ((groupOffset % 4) * 4 + 16));
 			target &= ~(0x7 << ((groupOffset % 4) * 4)); // ~0x07 = 3'h0
-			*(grf[0] + (regOffset >> 2)) = target;
+			*(grf[0] + regOffset) = target;
 		}
 		else {
 			regOffset += M1_SYS_GRF_IOMUX_OFFSET;
-			target = *(grf[1] + (regOffset >> 2));
+			target = *(grf[1] + regOffset);
 			target |= (0x7 << ((groupOffset % 4) * 4 + 16));
 			target &= ~(0x7 << ((groupOffset % 4) * 4));
-			*(grf[1] + (regOffset >> 2)) = target;
+			*(grf[1] + regOffset) = target;
 		}
 		break;
 	case M1_FUNC_PWM:
 		if (bank == 0) {
 			regOffset += M1_PMU_GRF_IOMUX_OFFSET;
-			target = *(grf[0] + (regOffset >> 2));
+			target = *(grf[0] + regOffset);
 			target |= (0x7 << ((groupOffset % 4) * 4 + 16));
 			target |= (0x4 << ((groupOffset % 4) * 4)); // gpio0 b5/b6: 3'h100
-			*(grf[0] + (regOffset >> 2)) = target;
+			*(grf[0] + regOffset) = target;
 		}
 		else {
 			regOffset += M1_SYS_GRF_IOMUX_OFFSET;
-			target = *(grf[1] + (regOffset >> 2));
+			target = *(grf[1] + regOffset);
 			target |= (0x7 << ((groupOffset % 4) * 4 + 16));
 			target |= (0x5 << ((groupOffset % 4) * 4)); // gpio3 b2: 3'h101
-			*(grf[1] + (regOffset >> 2)) = target;
+			*(grf[1] + regOffset) = target;
 		}
 		break;
 	default:
@@ -525,37 +525,37 @@
 
 	bank = (pin / GPIO_SIZE);
 	bankOffset = (pin - (bank * GPIO_SIZE));
-	regOffset = bankOffset / 16 == 0 ? M1_GPIO_DIR_OFFSET : M1_GPIO_DIR_OFFSET + 0x4;
+	regOffset = (bankOffset / 16 == 0 ? M1_GPIO_DIR_OFFSET : M1_GPIO_DIR_OFFSET + 0x1);
 
 	pwmRelease(origPin);
 	softPwmStop(origPin);
 	softToneStop(origPin);
 
-	target = *(gpio[bank] + (regOffset >> 2));
+	target = *(gpio[bank] + regOffset);
 	target |= (1 << (gpioToShiftRegBy16(pin) + 16));
 
 	switch (mode) {
 	case INPUT:
 		setIomuxMode(origPin, M1_FUNC_GPIO);
 		target &= ~(1 << gpioToShiftRegBy16(pin));
-		*(gpio[bank] + (regOffset >> 2)) = target;
+		*(gpio[bank] + regOffset) = target;
 		_pullUpDnControl(origPin, PUD_OFF);
 		break;
 	case OUTPUT:
 		setIomuxMode(origPin, M1_FUNC_GPIO);
 		target |= (1 << gpioToShiftRegBy16(pin));
-		*(gpio[bank] + (regOffset >> 2)) = target;
+		*(gpio[bank] + regOffset) = target;
 		break;
 	case INPUT_PULLUP:
 		setIomuxMode(origPin, M1_FUNC_GPIO);
 		target &= ~(1 << gpioToShiftRegBy16(pin));
-		*(gpio[bank] + (regOffset >> 2)) = target;
+		*(gpio[bank] + regOffset) = target;
 		_pullUpDnControl(origPin, PUD_UP);
 		break;
 	case INPUT_PULLDOWN:
 		setIomuxMode(origPin, M1_FUNC_GPIO);
 		target &= ~(1 << gpioToShiftRegBy16(pin));
-		*(gpio[bank] + (regOffset >> 2)) = target;
+		*(gpio[bank] + regOffset) = target;
 		_pullUpDnControl(origPin, PUD_DOWN);
 		break;
 	case SOFT_PWM_OUTPUT:
@@ -679,16 +679,16 @@
 
 	if (bank == 0) {
 		regOffset = M1_PMU_GRF_DS_OFFSET;
-		regOffset += (group * 0x10);
-		regOffset += ((groupOffset / 2) * 0x4);
-		target = *(grf[0] + (regOffset >> 2));
+		regOffset += (group * 0x4);
+		regOffset += ((groupOffset / 2) * 0x1);
+		target = *(grf[0] + regOffset);
 	}
 	else {
 		regOffset = M1_SYS_GRF_DS_OFFSET;
-		regOffset += ((bank - 1) * 0x40);
-		regOffset += (group * 0x10);
-		regOffset += ((groupOffset / 2) * 0x4);
-		target = *(grf[1] + (regOffset >> 2));
+		regOffset += ((bank - 1) * 0x10);
+		regOffset += (group * 0x4);
+		regOffset += ((groupOffset / 2) * 0x1);
+		target = *(grf[1] + regOffset);
 	}
 
 	target &= 0x3f3f; //reset reserved bits
@@ -739,16 +739,16 @@
 
 	if (bank == 0) {
 		regOffset = M1_PMU_GRF_DS_OFFSET;
-		regOffset += (group * 0x10);
-		regOffset += ((groupOffset / 2) * 0x4);
-		target = *(grf[0] + (regOffset >> 2));
+		regOffset += (group * 0x4);
+		regOffset += ((groupOffset / 2) * 0x1);
+		target = *(grf[0] + regOffset);
 	}
 	else {
 		regOffset = M1_SYS_GRF_DS_OFFSET;
-		regOffset += ((bank - 1) * 0x40);
-		regOffset += (group * 0x10);
-		regOffset += ((groupOffset / 2) * 0x4);
-		target = *(grf[1] + (regOffset >> 2));
+		regOffset += ((bank - 1) * 0x10);
+		regOffset += (group * 0x4);
+		regOffset += ((groupOffset / 2) * 0x1);
+		target = *(grf[1] + regOffset);
 	}
 
 	target |= (0x3f3f << 16);
@@ -778,10 +778,10 @@
 	}
 
 	if (bank == 0) {
-		*(grf[0] + (regOffset >> 2)) = target;
+		*(grf[0] + regOffset) = target;
 	}
 	else {
-		*(grf[1] + (regOffset >> 2)) = target;
+		*(grf[1] + regOffset) = target;
 	}
 	return 0;
 }
@@ -805,10 +805,10 @@
 	groupOffset = (pin % 8);
 
 	// Move to the proper IOMUX register regardless of whether it is L, H.
-	regOffset = 0x20 * (bank == 0 ? 0x0 : bank - 1) + 0x8 * group;
+	regOffset = 0x8 * (bank == 0 ? 0x0 : bank - 1) + 0x2 * group;
 
 	// Check where the register this pin located in
-	regOffset += (groupOffset / 4 == 0) ? 0x0 : 0x4;
+	regOffset += (groupOffset / 4 == 0) ? 0x0 : 0x1;
 
 	// The shift to move to the target pin at the register
 	shift = groupOffset % 4 * 4;
@@ -816,10 +816,10 @@
 	// Check if the pin is GPIO mode on GRF register
 	if (bank == 0) {
 		regOffset += M1_PMU_GRF_IOMUX_OFFSET; //0x00
-		ret = (*(grf[0] + (regOffset >> 2)) >> shift) & 0x7;
+		ret = (*(grf[0] + regOffset) >> shift) & 0x7;
 	} else {
 		regOffset += M1_SYS_GRF_IOMUX_OFFSET; //0x00
-		ret = (*(grf[1] + (regOffset >> 2)) >> shift) & 0x7;
+		ret = (*(grf[1] + regOffset) >> shift) & 0x7;
 	}
 
 	// If it is ALT0 (GPIO mode), check it's direction
@@ -827,9 +827,9 @@
 	// when the bit group is in the high two-bytes of the word size
 	if (ret == 0) {
 		if (bankOffset / 16 == 0)
-			regOffset = (M1_GPIO_DIR_OFFSET >> 2);
+			regOffset = M1_GPIO_DIR_OFFSET;
 		else
-			regOffset = ((M1_GPIO_DIR_OFFSET + 0x4) >> 2);
+			regOffset = (M1_GPIO_DIR_OFFSET + 0x1);
 		ret = !!(*(gpio[bank] + regOffset) & (1 << gpioToShiftRegBy16(bankOffset)));
 	}
 	else {
@@ -859,12 +859,12 @@
 	groupOffset = (pin % 8);
 	pupd = 0x00;
 	pupd = (0x3 << (groupOffset * 2));
-	regOffset = (bank == 0) ? M1_PMU_GRF_PUPD_OFFSET + (group * 0x4) :  M1_SYS_GRF_PUPD_OFFSET + (group * 0x4) + ((bank - 1) * 0x10);
+	regOffset = (bank == 0) ? M1_PMU_GRF_PUPD_OFFSET + (group * 0x1) :  M1_SYS_GRF_PUPD_OFFSET + (group * 0x1) + ((bank - 1) * 0x4);
 
 	if (bank == 0)
-		pupd &= *(grf[0] + (regOffset >> 2));
+		pupd &= *(grf[0] + regOffset);
 	else
-		pupd &= *(grf[1] + (regOffset >> 2));
+		pupd &= *(grf[1] + regOffset);
 
 	pupd = (pupd >> groupOffset * 2);
 
@@ -886,59 +886,59 @@
 	bankOffset = (pin - (bank * GPIO_SIZE));
 	group = (bankOffset / 8);
 	groupOffset = (pin % 8);
-	regOffset = (bank == 0) ? M1_PMU_GRF_PUPD_OFFSET + (group * 0x4) :  M1_SYS_GRF_PUPD_OFFSET + (group * 0x4) + ((bank - 1) * 0x10);
+	regOffset = (bank == 0) ? M1_PMU_GRF_PUPD_OFFSET + (group * 0x1) :  M1_SYS_GRF_PUPD_OFFSET + (group * 0x1) + ((bank - 1) * 0x4);
 
 	switch (pud) {
 	case PUD_UP:
 		if (bank == 0)
 		{
-			target = *(grf[0] + (regOffset >> 2));
+			target = *(grf[0] + regOffset);
 			target |= (0x3 << ((groupOffset * 2) + 16));
 			target &= ~(0x3 << (groupOffset * 2));
 			target |= (0x1 << (groupOffset * 2));
-			*(grf[0] + (regOffset >> 2)) = target;
+			*(grf[0] + regOffset) = target;
 		}
 		else
 		{
-			target = *(grf[1] + (regOffset >> 2));
+			target = *(grf[1] + regOffset);
 			target |= (0x3 << ((groupOffset * 2) + 16));
 			target &= ~(0x3 << (groupOffset * 2));
 			target |= (0x1 << (groupOffset * 2));
-			*(grf[1] + (regOffset >> 2)) = target;
+			*(grf[1] + regOffset) = target;
 		}
 		break;
 	case PUD_DOWN:
 		if (bank == 0)
 		{
-			target = *(grf[0] + (regOffset >> 2));
+			target = *(grf[0] + regOffset);
 			target |= (0x3 << ((groupOffset * 2) + 16));
 			target &= ~(0x3 << (groupOffset * 2));
 			target |= (0x2 << (groupOffset * 2));
-			*(grf[0] + (regOffset >> 2)) = target;
+			*(grf[0] + regOffset) = target;
 		}
 		else
 		{
-			target = *(grf[1] + (regOffset >> 2));
+			target = *(grf[1] + regOffset);
 			target |= (0x3 << ((groupOffset * 2) + 16));
 			target &= ~(0x3 << (groupOffset * 2));
 			target |= (0x2 << (groupOffset * 2));
-			*(grf[1] + (regOffset >> 2)) = target;
+			*(grf[1] + regOffset) = target;
 		}
 		break;
 	case PUD_OFF:
 		if (bank == 0)
 		{
-			target = *(grf[0] + (regOffset >> 2));
+			target = *(grf[0] + regOffset);
 			target |= (0x3 << ((groupOffset * 2) + 16));
 			target &= ~(0x3 << (groupOffset * 2));
-			*(grf[0] + (regOffset >> 2)) = target;
+			*(grf[0] + regOffset) = target;
 		}
 		else
 		{
-			target = *(grf[1] + (regOffset >> 2));
+			target = *(grf[1] + regOffset);
 			target |= (0x3 << ((groupOffset * 2) + 16));
 			target &= ~(0x3 << (groupOffset * 2));
-			*(grf[1] + (regOffset >> 2)) = target;
+			*(grf[1] + regOffset) = target;
 		}
 		break;
 	default:
@@ -972,7 +972,7 @@
 
 	bank = (pin / GPIO_SIZE);
 
-	ret = *(gpio[bank] + (M1_GPIO_GET_OFFSET >> 2)) & (1 << gpioToShiftRegBy32(pin)) ? HIGH : LOW;
+	ret = *(gpio[bank] + M1_GPIO_GET_OFFSET) & (1 << gpioToShiftRegBy32(pin)) ? HIGH : LOW;
 
 	return ret;
 }
@@ -1056,19 +1056,19 @@
 	bank = (pin / GPIO_SIZE);
 	bankOffset = (pin - (bank * GPIO_SIZE));
 
-	regOffset = (bankOffset / 16 == 0 ? M1_GPIO_SET_OFFSET : M1_GPIO_SET_OFFSET + 0x04);
+	regOffset = (bankOffset / 16 == 0 ? M1_GPIO_SET_OFFSET : M1_GPIO_SET_OFFSET + 0x01);
 
-	target = *(gpio[bank] + (regOffset >> 2));
+	target = *(gpio[bank] + regOffset);
 	target |= (1 << (gpioToShiftRegBy16(pin)+16));
 
 	switch (value) {
 	case LOW:
 		target &= ~(1 << gpioToShiftRegBy16(pin));
-		*(gpio[bank] + (regOffset >> 2)) = target;
+		*(gpio[bank] + regOffset) = target;
 		break;
 	case HIGH:
 		target |= (1 << gpioToShiftRegBy16(pin));
-		*(gpio[bank] + (regOffset >> 2)) =  target;
+		*(gpio[bank] + regOffset) =  target;
 		break;
 	default:
 		break;
@@ -1219,8 +1219,8 @@
 	}
 
 	/* Read data register */
-	gpio0.wvalue = *(gpio[0] + (M1_GPIO_GET_OFFSET >> 2));
-	gpio3.wvalue = *(gpio[3] + (M1_GPIO_GET_OFFSET >> 2));
+	gpio0.wvalue = *(gpio[0] + M1_GPIO_GET_OFFSET);
+	gpio3.wvalue = *(gpio[3] + M1_GPIO_GET_OFFSET);
 
 	/* Wiring PI GPIO0 = M1 GPIO0_C.0 */
 	gpio0.bits.bit16 = ((value & 0x01) >> 0);
@@ -1240,11 +1240,11 @@
 	gpio0.bits.bit14 = ((value & 0x80) >> 7);
 
 	/* Update data register */
-	*(gpio[0] + ((M1_GPIO_SET_OFFSET + 0x4) >> 2)) = (WRITE_BYTE_MASK_GPIO0_H | (gpio0.wvalue >> 16));
-	*(gpio[0] + (M1_GPIO_SET_OFFSET >> 2)) = (WRITE_BYTE_MASK_GPIO0_L | (gpio0.wvalue & 0xffff));
+	*(gpio[0] + (M1_GPIO_SET_OFFSET + 0x1)) = (WRITE_BYTE_MASK_GPIO0_H | (gpio0.wvalue >> 16));
+	*(gpio[0] + M1_GPIO_SET_OFFSET) = (WRITE_BYTE_MASK_GPIO0_L | (gpio0.wvalue & 0xffff));
 
-	*(gpio[3] + ((M1_GPIO_SET_OFFSET + 0x4) >> 2)) = (WRITE_BYTE_MASK_GPIO3_H | (gpio3.wvalue >> 16));
-	*(gpio[3] + (M1_GPIO_SET_OFFSET >> 2)) = (WRITE_BYTE_MASK_GPIO3_L | (gpio3.wvalue & 0xffff));
+	*(gpio[3] + (M1_GPIO_SET_OFFSET + 0x1)) = (WRITE_BYTE_MASK_GPIO3_H | (gpio3.wvalue >> 16));
+	*(gpio[3] + M1_GPIO_SET_OFFSET) = (WRITE_BYTE_MASK_GPIO3_L | (gpio3.wvalue & 0xffff));
 
 	return 0;
 }
@@ -1327,8 +1327,8 @@
 	}
 
 	/* Read data register */
-	gpio0.wvalue = *(gpio[0] + (M1_GPIO_GET_OFFSET >> 2));
-	gpio3.wvalue = *(gpio[3] + (M1_GPIO_GET_OFFSET >> 2));
+	gpio0.wvalue = *(gpio[0] + M1_GPIO_GET_OFFSET);
+	gpio3.wvalue = *(gpio[3] + M1_GPIO_GET_OFFSET);
 
 	/* Wiring PI GPIO0 = M1 GPIO0_C.0 */
 	if (gpio0.bits.bit16)
diff --git a/wiringPi/odroidm1.h b/wiringPi/odroidm1.h
index b300a6f..986c9b2 100644
--- a/wiringPi/odroidm1.h
+++ b/wiringPi/odroidm1.h
@@ -46,13 +46,13 @@
 #define M1_GPIO_0_BASE	0xFDD60000
 // to control clock (PMU_CRU)
 #define M1_PMU_CRU_BASE	0xFDD00000
-#define M1_PMU_CRU_GPIO_CLK_OFFSET	0x0184
+#define M1_PMU_CRU_GPIO_CLK_OFFSET	0x61 /* (0x184 >> 2) */
 #define M1_PMU_CRU_GPIO_PCLK_BIT	9
 // to control IOMUX
 #define M1_PMU_GRF_BASE	0xFDC20000
-#define M1_PMU_GRF_IOMUX_OFFSET	0x0000
-#define M1_PMU_GRF_PUPD_OFFSET	0x0020
-#define M1_PMU_GRF_DS_OFFSET	0x0070
+#define M1_PMU_GRF_IOMUX_OFFSET	0x00
+#define M1_PMU_GRF_PUPD_OFFSET	0x08 /* (0x20 >> 2) */
+#define M1_PMU_GRF_DS_OFFSET	0x1C /* (0x70 >> 2) */
 
 // GPIO[1:4]
 #define M1_GPIO_1_BASE	0xFE740000
@@ -61,18 +61,18 @@
 #define M1_GPIO_4_BASE	0xFE770000
 // to control clock (SYS_CRU)
 #define M1_CRU_BASE	0xFDD20000
-#define M1_CRU_GPIO_CLK_OFFSET	0x037C
+#define M1_CRU_GPIO_CLK_OFFSET	0xDF /* (0x37c >> 2) */
 #define M1_CRU_GPIO_PCLK_BIT	2
 // to control IOMUX
 #define M1_SYS_GRF_BASE	0xFDC60000
-#define M1_SYS_GRF_IOMUX_OFFSET	0x0000
-#define M1_SYS_GRF_PUPD_OFFSET	0x0080
-#define M1_SYS_GRF_DS_OFFSET	0x0200
+#define M1_SYS_GRF_IOMUX_OFFSET	0x00
+#define M1_SYS_GRF_PUPD_OFFSET	0x20 /* (0x80 >> 2) */
+#define M1_SYS_GRF_DS_OFFSET	0x80 /* (0x200) >> 2 */
 
 // Common offset for GPIO registers from each GPIO bank's base address
-#define M1_GPIO_DIR_OFFSET	0x0008
-#define M1_GPIO_SET_OFFSET	0x0000
-#define M1_GPIO_GET_OFFSET	0x0070
+#define M1_GPIO_DIR_OFFSET	0x02 /* (0x8) >> 2 */
+#define M1_GPIO_SET_OFFSET	0x00
+#define M1_GPIO_GET_OFFSET	0x1C /* (0x70 >> 2) */
 
 // GPIO DS LEVELS
 #define DS_LEVEL_0	0x01 //0b000001
diff --git a/wiringPi/odroidm1s.c b/wiringPi/odroidm1s.c
index 30ee6ec..f85a41c 100644
--- a/wiringPi/odroidm1s.c
+++ b/wiringPi/odroidm1s.c
@@ -415,24 +415,24 @@
 	switch (state) {
 	case M1_CLK_ENABLE:
 		if (bank == 0) {
-			target |= *(cru[0] + (M1_PMU_CRU_GPIO_CLK_OFFSET >> 2));
+			target |= *(cru[0] + M1_PMU_CRU_GPIO_CLK_OFFSET);
 			target &= ~(1 << gpioPclkShift);
-			*(cru[0] + (M1_PMU_CRU_GPIO_CLK_OFFSET >> 2)) = target;
+			*(cru[0] + M1_PMU_CRU_GPIO_CLK_OFFSET) = target;
 		} else {
-			target |= *(cru[1] + (M1_CRU_GPIO_CLK_OFFSET >> 2));
+			target |= *(cru[1] + M1_CRU_GPIO_CLK_OFFSET);
 			target &= ~(1 << gpioPclkShift);
-			*(cru[1] + (M1_CRU_GPIO_CLK_OFFSET >> 2)) = target;
+			*(cru[1] + M1_CRU_GPIO_CLK_OFFSET) = target;
 		}
 		break;
 	case M1_CLK_DISABLE:
 		if (bank == 0) {
-			target |= *(cru[0] + (M1_PMU_CRU_GPIO_CLK_OFFSET >> 2));
+			target |= *(cru[0] + M1_PMU_CRU_GPIO_CLK_OFFSET);
 			target |= (1 << gpioPclkShift);
-			*(cru[0] + (M1_PMU_CRU_GPIO_CLK_OFFSET >> 2)) = target;
+			*(cru[0] + M1_PMU_CRU_GPIO_CLK_OFFSET) = target;
 		} else {
-			target |= *(cru[1] + (M1_CRU_GPIO_CLK_OFFSET >> 2));
+			target |= *(cru[1] + M1_CRU_GPIO_CLK_OFFSET);
 			target |=  (1 << gpioPclkShift);
-			*(cru[1] + (M1_CRU_GPIO_CLK_OFFSET >> 2)) = target;
+			*(cru[1] + M1_CRU_GPIO_CLK_OFFSET) = target;
 		}
 		break;
 	case M1_CLK_BYTE_ENABLE:
@@ -467,41 +467,41 @@
 	group = (bankOffset / 8); // A or B or C or D
 	groupOffset = (pin % 8);
 
-	regOffset = (bank == 0 ? 0 : bank-1) * 0x20 + group * 0x8;
-	regOffset += (groupOffset / 4 == 0) ? 0x0 : 0x4;
+	regOffset = (bank == 0 ? 0 : bank-1) * 0x8 + group * 0x2;
+	regOffset += (groupOffset / 4 == 0) ? 0x0 : 0x1;
 
 	// Common IOMUX Funtion 1 : GPIO (3'h0)
 	switch (mode) {
 	case M1_FUNC_GPIO: // Common IOMUX Function 1_GPIO (3'h0)
 		if (bank == 0) {
 			regOffset += M1_PMU_GRF_IOMUX_OFFSET;
-			target = *(grf[0] + (regOffset >> 2));
+			target = *(grf[0] + regOffset);
 			target |= (0x7 << ((groupOffset % 4) * 4 + 16));
 			target &= ~(0x7 << ((groupOffset % 4) * 4)); // ~0x07 = 3'h0
-			*(grf[0] + (regOffset >> 2)) = target;
+			*(grf[0] + regOffset) = target;
 		}
 		else {
 			regOffset += M1_SYS_GRF_IOMUX_OFFSET;
-			target = *(grf[1] + (regOffset >> 2));
+			target = *(grf[1] + regOffset);
 			target |= (0x7 << ((groupOffset % 4) * 4 + 16));
 			target &= ~(0x7 << ((groupOffset % 4) * 4));
-			*(grf[1] + (regOffset >> 2)) = target;
+			*(grf[1] + regOffset) = target;
 		}
 		break;
 	case M1_FUNC_PWM:
 		if (bank == 0) {
 			regOffset += M1_PMU_GRF_IOMUX_OFFSET;
-			target = *(grf[0] + (regOffset >> 2));
+			target = *(grf[0] + regOffset);
 			target |= (0x7 << ((groupOffset % 4) * 4 + 16));
 			target |= (0x4 << ((groupOffset % 4) * 4)); // gpio0 b5/b6: 3'h100
-			*(grf[0] + (regOffset >> 2)) = target;
+			*(grf[0] + regOffset) = target;
 		}
 		else {
 			regOffset += M1_SYS_GRF_IOMUX_OFFSET;
-			target = *(grf[1] + (regOffset >> 2));
+			target = *(grf[1] + regOffset);
 			target |= (0x7 << ((groupOffset % 4) * 4 + 16));
 			target |= (0x5 << ((groupOffset % 4) * 4)); // gpio3 b2: 3'h101
-			*(grf[1] + (regOffset >> 2)) = target;
+			*(grf[1] + regOffset) = target;
 		}
 		break;
 	default:
@@ -527,37 +527,37 @@
 
 	bank = (pin / GPIO_SIZE);
 	bankOffset = (pin - (bank * GPIO_SIZE));
-	regOffset = bankOffset / 16 == 0 ? M1_GPIO_DIR_OFFSET : M1_GPIO_DIR_OFFSET + 0x4;
+	regOffset = (bankOffset / 16 == 0 ? M1_GPIO_DIR_OFFSET : M1_GPIO_DIR_OFFSET + 0x1);
 
 	pwmRelease(origPin);
 	softPwmStop(origPin);
 	softToneStop(origPin);
 
-	target = *(gpio[bank] + (regOffset >> 2));
+	target = *(gpio[bank] + regOffset);
 	target |= (1 << (gpioToShiftRegBy16(pin) + 16));
 
 	switch (mode) {
 	case INPUT:
 		setIomuxMode(origPin, M1_FUNC_GPIO);
 		target &= ~(1 << gpioToShiftRegBy16(pin));
-		*(gpio[bank] + (regOffset >> 2)) = target;
+		*(gpio[bank] + regOffset) = target;
 		_pullUpDnControl(origPin, PUD_OFF);
 		break;
 	case OUTPUT:
 		setIomuxMode(origPin, M1_FUNC_GPIO);
 		target |= (1 << gpioToShiftRegBy16(pin));
-		*(gpio[bank] + (regOffset >> 2)) = target;
+		*(gpio[bank] + regOffset) = target;
 		break;
 	case INPUT_PULLUP:
 		setIomuxMode(origPin, M1_FUNC_GPIO);
 		target &= ~(1 << gpioToShiftRegBy16(pin));
-		*(gpio[bank] + (regOffset >> 2)) = target;
+		*(gpio[bank] + regOffset) = target;
 		_pullUpDnControl(origPin, PUD_UP);
 		break;
 	case INPUT_PULLDOWN:
 		setIomuxMode(origPin, M1_FUNC_GPIO);
 		target &= ~(1 << gpioToShiftRegBy16(pin));
-		*(gpio[bank] + (regOffset >> 2)) = target;
+		*(gpio[bank] + regOffset) = target;
 		_pullUpDnControl(origPin, PUD_DOWN);
 		break;
 	case SOFT_PWM_OUTPUT:
@@ -681,16 +681,16 @@
 
 	if (bank == 0) {
 		regOffset = M1_PMU_GRF_DS_OFFSET;
-		regOffset += (group * 0x10);
-		regOffset += ((groupOffset / 2) * 0x4);
-		target = *(grf[0] + (regOffset >> 2));
+		regOffset += (group * 0x4);
+		regOffset += ((groupOffset / 2) * 0x1);
+		target = *(grf[0] + regOffset);
 	}
 	else {
 		regOffset = M1_SYS_GRF_DS_OFFSET;
-		regOffset += ((bank - 1) * 0x40);
-		regOffset += (group * 0x10);
-		regOffset += ((groupOffset / 2) * 0x4);
-		target = *(grf[1] + (regOffset >> 2));
+		regOffset += ((bank - 1) * 0x10);
+		regOffset += (group * 0x4);
+		regOffset += ((groupOffset / 2) * 0x1);
+		target = *(grf[1] + regOffset);
 	}
 
 	target &= 0x3f3f; //reset reserved bits
@@ -741,16 +741,16 @@
 
 	if (bank == 0) {
 		regOffset = M1_PMU_GRF_DS_OFFSET;
-		regOffset += (group * 0x10);
-		regOffset += ((groupOffset / 2) * 0x4);
-		target = *(grf[0] + (regOffset >> 2));
+		regOffset += (group * 0x4);
+		regOffset += ((groupOffset / 2) * 0x1);
+		target = *(grf[0] + regOffset);
 	}
 	else {
 		regOffset = M1_SYS_GRF_DS_OFFSET;
-		regOffset += ((bank - 1) * 0x40);
-		regOffset += (group * 0x10);
-		regOffset += ((groupOffset / 2) * 0x4);
-		target = *(grf[1] + (regOffset >> 2));
+		regOffset += ((bank - 1) * 0x10);
+		regOffset += (group * 0x4);
+		regOffset += ((groupOffset / 2) * 0x1);
+		target = *(grf[1] + regOffset);
 	}
 
 	target |= (0x3f3f << 16);
@@ -780,10 +780,10 @@
 	}
 
 	if (bank == 0) {
-		*(grf[0] + (regOffset >> 2)) = target;
+		*(grf[0] + regOffset) = target;
 	}
 	else {
-		*(grf[1] + (regOffset >> 2)) = target;
+		*(grf[1] + regOffset) = target;
 	}
 	return 0;
 }
@@ -807,10 +807,10 @@
 	groupOffset = (pin % 8);
 
 	// Move to the proper IOMUX register regardless of whether it is L, H.
-	regOffset = 0x20 * (bank == 0 ? 0x0 : bank - 1) + 0x8 * group;
+	regOffset = 0x8 * (bank == 0 ? 0x0 : bank - 1) + 0x2 * group;
 
 	// Check where the register this pin located in
-	regOffset += (groupOffset / 4 == 0) ? 0x0 : 0x4;
+	regOffset += (groupOffset / 4 == 0) ? 0x0 : 0x1;
 
 	// The shift to move to the target pin at the register
 	shift = groupOffset % 4 * 4;
@@ -818,10 +818,10 @@
 	// Check if the pin is GPIO mode on GRF register
 	if (bank == 0) {
 		regOffset += M1_PMU_GRF_IOMUX_OFFSET; //0x00
-		ret = (*(grf[0] + (regOffset >> 2)) >> shift) & 0x7;
+		ret = (*(grf[0] + regOffset) >> shift) & 0x7;
 	} else {
 		regOffset += M1_SYS_GRF_IOMUX_OFFSET; //0x00
-		ret = (*(grf[1] + (regOffset >> 2)) >> shift) & 0x7;
+		ret = (*(grf[1] + regOffset) >> shift) & 0x7;
 	}
 
 	// If it is ALT0 (GPIO mode), check it's direction
@@ -829,9 +829,9 @@
 	// when the bit group is in the high two-bytes of the word size
 	if (ret == 0) {
 		if (bankOffset / 16 == 0)
-			regOffset = (M1_GPIO_DIR_OFFSET >> 2);
+			regOffset = M1_GPIO_DIR_OFFSET;
 		else
-			regOffset = ((M1_GPIO_DIR_OFFSET + 0x4) >> 2);
+			regOffset = (M1_GPIO_DIR_OFFSET + 0x1);
 		ret = !!(*(gpio[bank] + regOffset) & (1 << gpioToShiftRegBy16(bankOffset)));
 	}
 	else {
@@ -861,12 +861,12 @@
 	groupOffset = (pin % 8);
 	pupd = 0x00;
 	pupd = (0x3 << (groupOffset * 2));
-	regOffset = (bank == 0) ? M1_PMU_GRF_PUPD_OFFSET + (group * 0x4) :  M1_SYS_GRF_PUPD_OFFSET + (group * 0x4) + ((bank - 1) * 0x10);
+	regOffset = (bank == 0) ? M1_PMU_GRF_PUPD_OFFSET + (group * 0x1) :  M1_SYS_GRF_PUPD_OFFSET + (group * 0x1) + ((bank - 1) * 0x4);
 
 	if (bank == 0)
-		pupd &= *(grf[0] + (regOffset >> 2));
+		pupd &= *(grf[0] + regOffset);
 	else
-		pupd &= *(grf[1] + (regOffset >> 2));
+		pupd &= *(grf[1] + regOffset);
 
 	pupd = (pupd >> groupOffset * 2);
 
@@ -888,59 +888,59 @@
 	bankOffset = (pin - (bank * GPIO_SIZE));
 	group = (bankOffset / 8);
 	groupOffset = (pin % 8);
-	regOffset = (bank == 0) ? M1_PMU_GRF_PUPD_OFFSET + (group * 0x4) :  M1_SYS_GRF_PUPD_OFFSET + (group * 0x4) + ((bank - 1) * 0x10);
+	regOffset = (bank == 0) ? M1_PMU_GRF_PUPD_OFFSET + (group * 0x1) :  M1_SYS_GRF_PUPD_OFFSET + (group * 0x1) + ((bank - 1) * 0x4);
 
 	switch (pud) {
 	case PUD_UP:
 		if (bank == 0)
 		{
-			target = *(grf[0] + (regOffset >> 2));
+			target = *(grf[0] + regOffset);
 			target |= (0x3 << ((groupOffset * 2) + 16));
 			target &= ~(0x3 << (groupOffset * 2));
 			target |= (0x1 << (groupOffset * 2));
-			*(grf[0] + (regOffset >> 2)) = target;
+			*(grf[0] + regOffset) = target;
 		}
 		else
 		{
-			target = *(grf[1] + (regOffset >> 2));
+			target = *(grf[1] + regOffset);
 			target |= (0x3 << ((groupOffset * 2) + 16));
 			target &= ~(0x3 << (groupOffset * 2));
 			target |= (0x1 << (groupOffset * 2));
-			*(grf[1] + (regOffset >> 2)) = target;
+			*(grf[1] + regOffset) = target;
 		}
 		break;
 	case PUD_DOWN:
 		if (bank == 0)
 		{
-			target = *(grf[0] + (regOffset >> 2));
+			target = *(grf[0] + regOffset);
 			target |= (0x3 << ((groupOffset * 2) + 16));
 			target &= ~(0x3 << (groupOffset * 2));
 			target |= (0x2 << (groupOffset * 2));
-			*(grf[0] + (regOffset >> 2)) = target;
+			*(grf[0] + regOffset) = target;
 		}
 		else
 		{
-			target = *(grf[1] + (regOffset >> 2));
+			target = *(grf[1] + regOffset);
 			target |= (0x3 << ((groupOffset * 2) + 16));
 			target &= ~(0x3 << (groupOffset * 2));
 			target |= (0x2 << (groupOffset * 2));
-			*(grf[1] + (regOffset >> 2)) = target;
+			*(grf[1] + regOffset) = target;
 		}
 		break;
 	case PUD_OFF:
 		if (bank == 0)
 		{
-			target = *(grf[0] + (regOffset >> 2));
+			target = *(grf[0] + regOffset);
 			target |= (0x3 << ((groupOffset * 2) + 16));
 			target &= ~(0x3 << (groupOffset * 2));
-			*(grf[0] + (regOffset >> 2)) = target;
+			*(grf[0] + regOffset) = target;
 		}
 		else
 		{
-			target = *(grf[1] + (regOffset >> 2));
+			target = *(grf[1] + regOffset);
 			target |= (0x3 << ((groupOffset * 2) + 16));
 			target &= ~(0x3 << (groupOffset * 2));
-			*(grf[1] + (regOffset >> 2)) = target;
+			*(grf[1] + regOffset) = target;
 		}
 		break;
 	default:
@@ -974,7 +974,7 @@
 
 	bank = (pin / GPIO_SIZE);
 
-	ret = *(gpio[bank] + (M1_GPIO_GET_OFFSET >> 2)) & (1 << gpioToShiftRegBy32(pin)) ? HIGH : LOW;
+	ret = *(gpio[bank] + M1_GPIO_GET_OFFSET) & (1 << gpioToShiftRegBy32(pin)) ? HIGH : LOW;
 
 	return ret;
 }
@@ -1058,19 +1058,19 @@
 	bank = (pin / GPIO_SIZE);
 	bankOffset = (pin - (bank * GPIO_SIZE));
 
-	regOffset = (bankOffset / 16 == 0 ? M1_GPIO_SET_OFFSET : M1_GPIO_SET_OFFSET + 0x04);
+	regOffset = (bankOffset / 16 == 0 ? M1_GPIO_SET_OFFSET : M1_GPIO_SET_OFFSET + 0x01);
 
-	target = *(gpio[bank] + (regOffset >> 2));
+	target = *(gpio[bank] + regOffset);
 	target |= (1 << (gpioToShiftRegBy16(pin)+16));
 
 	switch (value) {
 	case LOW:
 		target &= ~(1 << gpioToShiftRegBy16(pin));
-		*(gpio[bank] + (regOffset >> 2)) = target;
+		*(gpio[bank] + regOffset) = target;
 		break;
 	case HIGH:
 		target |= (1 << gpioToShiftRegBy16(pin));
-		*(gpio[bank] + (regOffset >> 2)) =  target;
+		*(gpio[bank] + regOffset) =  target;
 		break;
 	default:
 		break;
@@ -1221,8 +1221,8 @@
 	}
 
 	/* Read data register */
-	gpio0.wvalue = *(gpio[0] + (M1_GPIO_GET_OFFSET >> 2));
-	gpio3.wvalue = *(gpio[3] + (M1_GPIO_GET_OFFSET >> 2));
+	gpio0.wvalue = *(gpio[0] + M1_GPIO_GET_OFFSET);
+	gpio3.wvalue = *(gpio[3] + M1_GPIO_GET_OFFSET);
 
 	/* Wiring PI GPIO0 = M1 GPIO0_C.0 */
 	gpio0.bits.bit16 = ((value & 0x01) >> 0);
@@ -1242,11 +1242,11 @@
 	gpio0.bits.bit14 = ((value & 0x80) >> 7);
 
 	/* Update data register */
-	*(gpio[0] + ((M1_GPIO_SET_OFFSET + 0x4) >> 2)) = (WRITE_BYTE_MASK_GPIO0_H | (gpio0.wvalue >> 16));
-	*(gpio[0] + (M1_GPIO_SET_OFFSET >> 2)) = (WRITE_BYTE_MASK_GPIO0_L | (gpio0.wvalue & 0xffff));
+	*(gpio[0] + (M1_GPIO_SET_OFFSET + 0x1)) = (WRITE_BYTE_MASK_GPIO0_H | (gpio0.wvalue >> 16));
+	*(gpio[0] + M1_GPIO_SET_OFFSET) = (WRITE_BYTE_MASK_GPIO0_L | (gpio0.wvalue & 0xffff));
 
-	*(gpio[3] + ((M1_GPIO_SET_OFFSET + 0x4) >> 2)) = (WRITE_BYTE_MASK_GPIO3_H | (gpio3.wvalue >> 16));
-	*(gpio[3] + (M1_GPIO_SET_OFFSET >> 2)) = (WRITE_BYTE_MASK_GPIO3_L | (gpio3.wvalue & 0xffff));
+	*(gpio[3] + (M1_GPIO_SET_OFFSET + 0x1)) = (WRITE_BYTE_MASK_GPIO3_H | (gpio3.wvalue >> 16));
+	*(gpio[3] + M1_GPIO_SET_OFFSET) = (WRITE_BYTE_MASK_GPIO3_L | (gpio3.wvalue & 0xffff));
 
 	return 0;
 }
@@ -1329,8 +1329,8 @@
 	}
 
 	/* Read data register */
-	gpio0.wvalue = *(gpio[0] + (M1_GPIO_GET_OFFSET >> 2));
-	gpio3.wvalue = *(gpio[3] + (M1_GPIO_GET_OFFSET >> 2));
+	gpio0.wvalue = *(gpio[0] + M1_GPIO_GET_OFFSET);
+	gpio3.wvalue = *(gpio[3] + M1_GPIO_GET_OFFSET);
 
 	/* Wiring PI GPIO0 = M1 GPIO0_C.0 */
 	if (gpio0.bits.bit16)