Both ioctl commands destroyed the control register by writing the
content of the status register into it.
---
 c/src/lib/libbsp/sparc/shared/spw/grspw.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/c/src/lib/libbsp/sparc/shared/spw/grspw.c 
b/c/src/lib/libbsp/sparc/shared/spw/grspw.c
index b6ee255..5cedcb9 100644
--- a/c/src/lib/libbsp/sparc/shared/spw/grspw.c
+++ b/c/src/lib/libbsp/sparc/shared/spw/grspw.c
@@ -1138,7 +1138,7 @@ static rtems_device_driver grspw_control(
                        if ((unsigned int)ioarg->buffer > 1) {
                                return RTEMS_INVALID_NAME;
                        }
-                       SPW_CTRL_WRITE(pDev, (SPW_STATUS_READ(pDev) & 
0xFFFEFFFF) | ((unsigned int)ioarg->buffer << 16));
+                       SPW_CTRL_WRITE(pDev, (SPW_CTRL_READ(pDev) & 0xFFFEFFFF) 
| ((unsigned int)ioarg->buffer << 16));
                        if (((SPW_CTRL_READ(pDev) >> 16) & 1) != (unsigned 
int)ioarg->buffer) {
                                return RTEMS_IO_ERROR;
                        }
@@ -1149,7 +1149,7 @@ static rtems_device_driver grspw_control(
                        if ((unsigned int)ioarg->buffer > 1) {
                                return RTEMS_INVALID_NAME;
                        }
-                       SPW_CTRL_WRITE(pDev, (SPW_STATUS_READ(pDev) & 
0xFFFDFFFF) | ((unsigned int)ioarg->buffer << 17));
+                       SPW_CTRL_WRITE(pDev, (SPW_CTRL_READ(pDev) & 0xFFFDFFFF) 
| ((unsigned int)ioarg->buffer << 17));
                        if (((SPW_CTRL_READ(pDev) >> 17) & 1) != (unsigned 
int)ioarg->buffer) {
                                return RTEMS_IO_ERROR;
                        }
-- 
1.7.0.4

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to