summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/mvme5500/GT64260/GT64260TWSI.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/powerpc/mvme5500/GT64260/GT64260TWSI.c')
-rw-r--r--c/src/lib/libbsp/powerpc/mvme5500/GT64260/GT64260TWSI.c144
1 files changed, 74 insertions, 70 deletions
diff --git a/c/src/lib/libbsp/powerpc/mvme5500/GT64260/GT64260TWSI.c b/c/src/lib/libbsp/powerpc/mvme5500/GT64260/GT64260TWSI.c
index c0f34b38c7..6b5b46e511 100644
--- a/c/src/lib/libbsp/powerpc/mvme5500/GT64260/GT64260TWSI.c
+++ b/c/src/lib/libbsp/powerpc/mvme5500/GT64260/GT64260TWSI.c
@@ -1,5 +1,8 @@
-/* GT64260TWSI.c : Two-Wire Serial Interface (TWSI) support for the GT64260
- *
+/*
+ * Two-Wire Serial Interface (TWSI) support for the GT64260
+ */
+
+/*
* Copyright (c) 2004, Brookhaven National Laboratory and
* Shuchen Kate Feng <feng1@bnl.gov>
* All rights reserved.
@@ -15,11 +18,11 @@
*
* We need it to read out I2C devices used for the MVME5500
* (eg. the memory SPD and VPD).
- *
*/
+
#include <libcpu/spr.h> /*registers.h included here for rtems_bsp_delay()*/
#include <libcpu/io.h>
-#include <rtems/bspIo.h> /* printk */
+#include <rtems/bspIo.h>
#include "bsp/gtreg.h"
#include "bsp/GT64260TWSI.h"
@@ -28,44 +31,44 @@
#define TWSI_DEBUG 0
-static int TWSI_initFlg = 0; /* TWSI Initialization Flag */
+static int TWSI_initFlg = 0; /* TWSI Initialization Flag */
void GT64260TWSIinit(void)
{
-
- if ( !TWSI_initFlg) {
+ if ( !TWSI_initFlg ) {
#if TWSI_DEBUG
- printk("GT64260TWSIinit(");
+ printk("GT64260TWSIinit(");
#endif
- outl( 0, TWSI_SFT_RST); /* soft reset */
- rtems_bsp_delay(1000);
-
- /* See 24.2.5 : Assume bus speed is 133MHZ
- * Try to be close to the default frequency : 62.5KHZ
- * value 0x2c: 69.27 KHz TWSI bus clock
- */
- outl(0x2c, TWSI_BAUDE_RATE);
- rtems_bsp_delay(1000);
-
- /* Set Acknowledge and enable TWSI in the Control register */
- outl(0x44, TWSI_CTRL);
- rtems_bsp_delay(4000);
- TWSI_initFlg = 1;
+ outl( 0, TWSI_SFT_RST); /* soft reset */
+ rtems_bsp_delay(1000);
+
+ /* See 24.2.5 : Assume bus speed is 133MHZ
+ * Try to be close to the default frequency : 62.5KHZ
+ * value 0x2c: 69.27 KHz TWSI bus clock
+ */
+ outl(0x2c, TWSI_BAUDE_RATE);
+ rtems_bsp_delay(1000);
+
+ /* Set Acknowledge and enable TWSI in the Control register */
+ outl(0x44, TWSI_CTRL);
+ rtems_bsp_delay(4000);
+ TWSI_initFlg = 1;
#if TWSI_DEBUG
- printk(")\n");
+ printk(")\n");
#endif
}
}
/* return the interrupt flag */
-int GT64260TWSIintFlag(void)
+static int GT64260TWSIintFlag(void)
{
unsigned int loop;
for (loop = 0; loop < MAX_LOOP; loop++ ) {
/* Return 1 if the interrupt flag is set */
- if (inl(TWSI_CTRL) & TWSI_INTFLG) return(1);
- rtems_bsp_delay(1000);
+ if (inl(TWSI_CTRL) & TWSI_INTFLG)
+ return(1);
+ rtems_bsp_delay(1000);
}
return(0);
}
@@ -111,19 +114,19 @@ int GT64260TWSIstart(void)
rtems_bsp_delay(1000);
if (GT64260TWSIintFlag()) {
- /* Check for completion of START sequence */
- for (loop = 0; loop<MAX_LOOP; loop++ ) {
- /* if (start condition transmitted) ||
- * (repeated start condition transmitted )
- */
- if (((status= inl( TWSI_STATUS)) == 8) || (status == 0x10)) {
+ /* Check for completion of START sequence */
+ for (loop = 0; loop<MAX_LOOP; loop++ ) {
+ /* if (start condition transmitted) ||
+ * (repeated start condition transmitted )
+ */
+ if (((status= inl( TWSI_STATUS)) == 8) || (status == 0x10)) {
#if TWSI_DEBUG
- printk(")");
+ printk(")");
#endif
- return(0);
- }
- rtems_bsp_delay(1000);
- }
+ return(0);
+ }
+ rtems_bsp_delay(1000);
+ }
}
/* if loop ends or intFlag ==0 */
GT64260TWSIstop();
@@ -142,22 +145,23 @@ int GT64260TWSIread(unsigned char * pData, int lastByte)
rtems_bsp_delay(1000);
if (GT64260TWSIintFlag()) {
- for (loop = 0; loop< MAX_LOOP; loop++) {
- /* if Master received read data, acknowledge transmitted */
- if ( (inl( TWSI_STATUS) == 0x50)) {
- *pData = (unsigned char) inl( TWSI_DATA);
- rtems_bsp_delay(1500);
-
- /* Clear INTFLAG and set Enable bit only */
- if (lastByte) outl(TWSI_TWSIEN, TWSI_CTRL);
- rtems_bsp_delay(1500);
+ for (loop = 0; loop< MAX_LOOP; loop++) {
+ /* if Master received read data, acknowledge transmitted */
+ if ( (inl( TWSI_STATUS) == 0x50)) {
+ *pData = (unsigned char) inl( TWSI_DATA);
+ rtems_bsp_delay(1500);
+
+ /* Clear INTFLAG and set Enable bit only */
+ if (lastByte)
+ outl(TWSI_TWSIEN, TWSI_CTRL);
+ rtems_bsp_delay(1500);
#if TWSI_DEBUG
- printk(")\n");
+ printk(")\n");
#endif
- return(0);
- }
- rtems_bsp_delay(1000);
- } /* end for */
+ return(0);
+ }
+ rtems_bsp_delay(1000);
+ } /* end for */
}
/* if loop ends or intFlag ==0 */
GT64260TWSIstop();
@@ -182,27 +186,27 @@ int GT64260TWSIwrite(unsigned char Data)
rtems_bsp_delay(1000);
if (GT64260TWSIintFlag() ) {
- for (loop = 0; loop< MAX_LOOP; loop++) {
- rtems_bsp_delay(1000);
- /* if address + write bit transmitted, acknowledge not received */
- if ( (status = inl( TWSI_STATUS)) == 0x20) {
- /* No device responding, generate STOP and return -1 */
- printk("no device responding\n");
- GT64260TWSIstop();
- return(-1);
- }
- /* if (address + write bit transmitted, acknowledge received)
- * (Master transmmitted data byte, acknowledge received)
- * (address + read bit transmitted, acknowledge received)
- */
- if ((status == 0x18)||(status == 0x28)||(status == 0x40)) {
+ for (loop = 0; loop< MAX_LOOP; loop++) {
+ rtems_bsp_delay(1000);
+ /* if address + write bit transmitted, acknowledge not received */
+ if ( (status = inl( TWSI_STATUS)) == 0x20) {
+ /* No device responding, generate STOP and return -1 */
+ printk("no device responding\n");
+ GT64260TWSIstop();
+ return(-1);
+ }
+ /* if (address + write bit transmitted, acknowledge received)
+ * (Master transmmitted data byte, acknowledge received)
+ * (address + read bit transmitted, acknowledge received)
+ */
+ if ((status == 0x18)||(status == 0x28)||(status == 0x40)) {
#if TWSI_DEBUG
- printk(")\n");
+ printk(")\n");
#endif
- return(0);
- }
- rtems_bsp_delay(1000);
- } /* end for */
+ return(0);
+ }
+ rtems_bsp_delay(1000);
+ } /* end for */
}
printk("No correct status, timeout\n");
GT64260TWSIstop();