diff --git a/Documentation/NuttxUserGuide.html b/Documentation/NuttxUserGuide.html
index a5997f9728c..09407bfb081 100644
--- a/Documentation/NuttxUserGuide.html
+++ b/Documentation/NuttxUserGuide.html
@@ -13,7 +13,7 @@
NuttX Operating SystemUser's Manual
by
Gregory Nutt
-
Last Updated: July 19, 2011
+ Last Updated: December 5, 2011
@@ -1549,58 +1549,83 @@ interface of the same name.
-Function Prototype:
+ Function Prototype:
#include <mqueue.h>
int mq_notify(mqd_t mqdes, const struct sigevent *notification);
-
+
-Description: If the "notification" input parameter
-is not NULL, this function connects the task with the message queue such
-that the specified signal will be sent to the task whenever the message
-changes from empty to non-empty. One notification can be attached
-to a message queue.
+ Description: If the notification input parameter
+ is not NULL, this function connects the task with the message queue such
+ that the specified signal will be sent to the task whenever the message
+ changes from empty to non-empty. One notification can be attached
+ to a message queue.
+
-If "notification" is NULL, the attached notification
-is detached (if it was held by the calling task) and the queue
-is available to attach another notification.
+ If notification; is NULL, the attached notification
+ is detached (if it was held by the calling task) and the queue
+ is available to attach another notification.
+
-When the notification is sent to the registered task, its registration
-will be removed. The message queue will then be available for
-registration.
+ When the notification is sent to the registered task, its registration
+ will be removed. The message queue will then be available for
+ registration.
-Input Parameters:
-
-- mqdes. Message queue descriptor
-
- notification. Real-time signal structure containing:
-
-- sigev_notify. Should be SIGEV_SIGNAL (but actually
-ignored)
-
- sigev_signo. The signo to use for the notification
-
- sigev_value. Value associated with the signal
-
-
-
-
+ Input Parameters:
+
+ -
+
mqdes. Message queue descriptor
+
+ notification. Real-time signal structure containing:
+
+ sigev_notify. Should be SIGEV_SIGNAL (but actually ignored)
+ sigev_signo. The signo to use for the notification
+ sigev_value. Value associated with the signal
+
+
+
-Returned Values: None.
+ Returned Values:
+ On success mq_notify() returns 0; on error, -1 is returned, with
+ errno set to indicate the error:
+
+ -
+
EBADF. The descriptor specified in mqdes is invalid.
+
+ -
+
EBUSY. Another process has already registered to receive notification
+ for this message queue.
+
+ -
+
EINVAL. sevp->sigev_notify is not one of the permitted values; or
+ sevp->sigev_notify is SIGEV_SIGNAL and sevp->sigev_signo is not a
+ valid signal number.
+
+ -
+
ENOMEM. Insufficient memory.
+
+
+
-Assumptions/Limitations:
+ Assumptions/Limitations:
+
- POSIX Compatibility: Comparable to the POSIX interface
-of the same name.
-Differences from the full POSIX implementation include:
-
-- The notification signal will be sent to the registered task even if
-another task is waiting for the message queue to become non-empty. This is
-inconsistent with the POSIX specification which states, "If a process
-has registered for notification of message arrival at a message queue and
-some process is blocked in mq_receive waiting to receive a message
-when a message arrives at the queue, the arriving message shall satisfy the
-appropriate mq_receive() ... The resulting behavior is as if the
-message queue remains empty, and no notification shall be sent."
-
+ POSIX Compatibility: Comparable to the POSIX interface of the same name.
+ Differences from the full POSIX implementation include:
+
+ -
+ The notification signal will be sent to the registered task even if
+ another task is waiting for the message queue to become non-empty. This is
+ inconsistent with the POSIX specification which states, "If a process
+ has registered for notification of message arrival at a message queue and
+ some process is blocked in mq_receive waiting to receive a message
+ when a message arrives at the queue, the arriving message shall satisfy the
+ appropriate mq_receive() ... The resulting behavior is as if the
+ message queue remains empty, and no notification shall be sent."
+
+
+
diff --git a/configs/stm3210e-eval/RIDE/defconfig b/configs/stm3210e-eval/RIDE/defconfig
index 21adf16aba4..f47f40bf375 100755
--- a/configs/stm3210e-eval/RIDE/defconfig
+++ b/configs/stm3210e-eval/RIDE/defconfig
@@ -223,6 +223,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4
+#
+# STM3210E-EVAL specific LCD settings
+#
+CONFIG_STM32_AM240320_DISABLE=n
+CONFIG_STM32_SPFD5408B_DISABLE=n
+CONFIG_STM32_R61580_DISABLE=y
+
#
# General build options
#
diff --git a/configs/stm3210e-eval/buttons/defconfig b/configs/stm3210e-eval/buttons/defconfig
index 16c19e07fe3..7a1e4d78dba 100644
--- a/configs/stm3210e-eval/buttons/defconfig
+++ b/configs/stm3210e-eval/buttons/defconfig
@@ -236,6 +236,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4
+#
+# STM3210E-EVAL specific LCD settings
+#
+CONFIG_STM32_AM240320_DISABLE=n
+CONFIG_STM32_SPFD5408B_DISABLE=n
+CONFIG_STM32_R61580_DISABLE=y
+
#
# General build options
#
diff --git a/configs/stm3210e-eval/nsh/defconfig b/configs/stm3210e-eval/nsh/defconfig
index 06df09d2e98..8e1e1f84843 100755
--- a/configs/stm3210e-eval/nsh/defconfig
+++ b/configs/stm3210e-eval/nsh/defconfig
@@ -232,6 +232,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4
+#
+# STM3210E-EVAL specific LCD settings
+#
+CONFIG_STM32_AM240320_DISABLE=n
+CONFIG_STM32_SPFD5408B_DISABLE=n
+CONFIG_STM32_R61580_DISABLE=y
+
#
# General build options
#
diff --git a/configs/stm3210e-eval/nsh2/defconfig b/configs/stm3210e-eval/nsh2/defconfig
index 281fec5b713..ae6a06606a4 100644
--- a/configs/stm3210e-eval/nsh2/defconfig
+++ b/configs/stm3210e-eval/nsh2/defconfig
@@ -232,6 +232,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4
+#
+# STM3210E-EVAL specific LCD settings
+#
+CONFIG_STM32_AM240320_DISABLE=n
+CONFIG_STM32_SPFD5408B_DISABLE=n
+CONFIG_STM32_R61580_DISABLE=y
+
#
# General build options
#
diff --git a/configs/stm3210e-eval/nx/defconfig b/configs/stm3210e-eval/nx/defconfig
index 8381ae8f6d1..94d843fb954 100644
--- a/configs/stm3210e-eval/nx/defconfig
+++ b/configs/stm3210e-eval/nx/defconfig
@@ -232,6 +232,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4
+#
+# STM3210E-EVAL specific LCD settings
+#
+CONFIG_STM32_AM240320_DISABLE=n
+CONFIG_STM32_SPFD5408B_DISABLE=n
+CONFIG_STM32_R61580_DISABLE=y
+
#
# General build options
#
diff --git a/configs/stm3210e-eval/nxlines/defconfig b/configs/stm3210e-eval/nxlines/defconfig
index 048476296ea..0ed46b6ad14 100644
--- a/configs/stm3210e-eval/nxlines/defconfig
+++ b/configs/stm3210e-eval/nxlines/defconfig
@@ -232,6 +232,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4
+#
+# STM3210E-EVAL specific LCD settings
+#
+CONFIG_STM32_AM240320_DISABLE=n
+CONFIG_STM32_SPFD5408B_DISABLE=n
+CONFIG_STM32_R61580_DISABLE=y
+
#
# General build options
#
diff --git a/configs/stm3210e-eval/nxtext/defconfig b/configs/stm3210e-eval/nxtext/defconfig
index 07ab05c7431..e48a147c94d 100644
--- a/configs/stm3210e-eval/nxtext/defconfig
+++ b/configs/stm3210e-eval/nxtext/defconfig
@@ -232,6 +232,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4
+#
+# STM3210E-EVAL specific LCD settings
+#
+CONFIG_STM32_AM240320_DISABLE=n
+CONFIG_STM32_SPFD5408B_DISABLE=n
+CONFIG_STM32_R61580_DISABLE=y
+
#
# General build options
#
diff --git a/configs/stm3210e-eval/ostest/defconfig b/configs/stm3210e-eval/ostest/defconfig
index b3516fa5d4f..c4f81ecd8c7 100755
--- a/configs/stm3210e-eval/ostest/defconfig
+++ b/configs/stm3210e-eval/ostest/defconfig
@@ -234,6 +234,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4
+#
+# STM3210E-EVAL specific LCD settings
+#
+CONFIG_STM32_AM240320_DISABLE=n
+CONFIG_STM32_SPFD5408B_DISABLE=n
+CONFIG_STM32_R61580_DISABLE=y
+
#
# General build options
#
diff --git a/configs/stm3210e-eval/src/up_lcd.c b/configs/stm3210e-eval/src/up_lcd.c
index 481da54dd6a..a3fe6c8107d 100644
--- a/configs/stm3210e-eval/src/up_lcd.c
+++ b/configs/stm3210e-eval/src/up_lcd.c
@@ -289,6 +289,7 @@
#define LCD_REG_153 0x99
#define LCD_REG_154 0x9a
#define LCD_REG_157 0x9d
+#define LCD_REG_164 0xa4
#define LCD_REG_192 0xc0
#define LCD_REG_193 0xc1
#define LCD_REG_229 0xe5
@@ -1074,27 +1075,14 @@ static inline void stm3210e_lcdinitialize(void)
id = stm3210e_readreg(LCD_REG_0);
lcddbg("LCD ID: %04x\n", id);
- /* Check if the ID is for the SPFD5408B or the almost compatible R61580 */
+ /* Check if the ID is for the SPFD5408B */
-#if !defined(CONFIG_STM32_SPFD5408B_DISABLE) || !defined(CONFIG_STM32_R61580_DISABLE)
-#if !defined(CONFIG_STM32_SPFD5408B_DISABLE) && !defined(CONFIG_STM32_R61580_DISABLE)
- if (id == SPFD5408B_ID || id == R61580_ID)
-#elif !defined(CONFIG_STM32_SPFD5408B_DISABLE)
+#if !defined(CONFIG_STM32_SPFD5408B_DISABLE)
if (id == SPFD5408B_ID)
-#else
- if (id == R61580_ID)
-#endif
{
- /* Set the LCD type for the SPFD5408B or the R61580 */
-
-#if !defined(CONFIG_STM32_SPFD5408B_DISABLE) && !defined(CONFIG_STM32_R61580_DISABLE)
- g_lcddev.type = (id == SPFD5408B_ID ? LCD_TYPE_SPFD5408B : LCD_TYPE_R61580);
-#elif !defined(CONFIG_STM32_SPFD5408B_DISABLE)
- g_lcddev.type = SPFD5408B_ID;
-#else
- g_lcddev.type = LCD_TYPE_R61580;
-#endif
+ /* Set the LCD type for the SPFD5408B */
+ g_lcddev.type = LCD_TYPE_SPFD5408B;
lcddbg("LCD type: %d\n", g_lcddev.type);
/* Start Initial Sequence */
@@ -1191,6 +1179,80 @@ static inline void stm3210e_lcdinitialize(void)
}
else
#endif
+
+ /* Check if the ID is for the almost compatible R61580 */
+
+#if !defined(CONFIG_STM32_R61580_DISABLE)
+ if (id == R61580_ID)
+ {
+ /* Set the LCD type for the R61580 */
+
+ g_lcddev.type = LCD_TYPE_R61580;
+ lcddbg("LCD type: %d\n", g_lcddev.type);
+
+ /* Start Initial Sequence */
+
+ stm3210e_writereg(LCD_REG_0, 0x0000);
+ stm3210e_writereg(LCD_REG_0, 0x0000);
+ up_mdelay(100);
+ stm3210e_writereg(LCD_REG_0, 0x0000);
+ stm3210e_writereg(LCD_REG_0, 0x0000);
+ stm3210e_writereg(LCD_REG_0, 0x0000);
+ stm3210e_writereg(LCD_REG_0, 0x0000);
+ stm3210e_writereg(LCD_REG_164, 0x0001);
+ up_mdelay(100);
+ stm3210e_writereg(LCD_REG_96, 0xa700);
+ stm3210e_writereg(LCD_REG_8, 0x0808);
+
+ /* Gamma Setting */
+
+ stm3210e_writereg(LCD_REG_48, 0x0203);
+ stm3210e_writereg(LCD_REG_49, 0x080f);
+ stm3210e_writereg(LCD_REG_50, 0x0401);
+ stm3210e_writereg(LCD_REG_51, 0x050b);
+ stm3210e_writereg(LCD_REG_52, 0x3330);
+ stm3210e_writereg(LCD_REG_53, 0x0b05);
+ stm3210e_writereg(LCD_REG_54, 0x0005);
+ stm3210e_writereg(LCD_REG_55, 0x0f08);
+ stm3210e_writereg(LCD_REG_56, 0x0302);
+ stm3210e_writereg(LCD_REG_57, 0x3033);
+
+ /* Power Setting */
+
+ stm3210e_writereg(LCD_REG_144, 0x0018); /* 80Hz */
+ stm3210e_writereg(LCD_REG_16, 0x0530); /* BT, AP */
+ stm3210e_writereg(LCD_REG_17, 0x0237); /* DC1,DC0,VC */
+ stm3210e_writereg(LCD_REG_18, 0x01bf);
+ stm3210e_writereg(LCD_REG_19, 0x1000); /* VCOM */
+ up_mdelay(200);
+
+ stm3210e_writereg(LCD_REG_1, 0x0100); /* Set SS bit */
+ stm3210e_writereg(LCD_REG_2, 0x0200);
+ stm3210e_writereg(LCD_REG_3, 0x1030); /* Set GRAM write direction and BGR=1. */
+ stm3210e_writereg(LCD_REG_9, 0x0001);
+ stm3210e_writereg(LCD_REG_10, 0x0008);
+ stm3210e_writereg(LCD_REG_12, 0x0000); /* RGB 18-bit System interface setting */
+ stm3210e_writereg(LCD_REG_13, 0xd000);
+ stm3210e_writereg(LCD_REG_14, 0x0030);
+ stm3210e_writereg(LCD_REG_15, 0x0000); /* RGB interface polarity, no impact */
+ stm3210e_writereg(LCD_REG_32, 0x0000); /* H Start */
+ stm3210e_writereg(LCD_REG_33, 0x0000); /* V Start */
+ stm3210e_writereg(LCD_REG_41, 0x002e);
+ stm3210e_writereg(LCD_REG_80, 0x0000); /* Horizontal GRAM Start Address */
+ stm3210e_writereg(LCD_REG_81, 0x00ef); /* Horizontal GRAM End Address */
+ stm3210e_writereg(LCD_REG_82, 0x0000); /* Vertical GRAM Start Address */
+ stm3210e_writereg(LCD_REG_83, 0x013f); /* Vertical GRAM End Address */
+ stm3210e_writereg(LCD_REG_97, 0x0001); /* NDL, VLE, REV */
+ stm3210e_writereg(LCD_REG_106, 0x0000); /* set scrolling line */
+ stm3210e_writereg(LCD_REG_128, 0x0000);
+ stm3210e_writereg(LCD_REG_129, 0x0000);
+ stm3210e_writereg(LCD_REG_130, 0x005f);
+ stm3210e_writereg(LCD_REG_147, 0x0701);
+
+ stm3210e_writereg(LCD_REG_7, 0x0000); /* Display OFF */
+ }
+ else
+#endif
{
#ifndef CONFIG_STM32_AM240320_DISABLE
g_lcddev.type = LCD_TYPE_AM240320;
diff --git a/configs/stm3210e-eval/usbserial/defconfig b/configs/stm3210e-eval/usbserial/defconfig
index ef85b33bb5a..be28df9666a 100755
--- a/configs/stm3210e-eval/usbserial/defconfig
+++ b/configs/stm3210e-eval/usbserial/defconfig
@@ -234,6 +234,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4
+#
+# STM3210E-EVAL specific LCD settings
+#
+CONFIG_STM32_AM240320_DISABLE=n
+CONFIG_STM32_SPFD5408B_DISABLE=n
+CONFIG_STM32_R61580_DISABLE=y
+
#
# General build options
#
diff --git a/configs/stm3210e-eval/usbstorage/defconfig b/configs/stm3210e-eval/usbstorage/defconfig
index 7e7a447ce59..9d4557ab9fe 100755
--- a/configs/stm3210e-eval/usbstorage/defconfig
+++ b/configs/stm3210e-eval/usbstorage/defconfig
@@ -232,6 +232,13 @@ CONFIG_SSI1_DISABLE=y
CONFIG_SSI_POLLWAIT=y
#CONFIG_SSI_TXLIMIT=4
+#
+# STM3210E-EVAL specific LCD settings
+#
+CONFIG_STM32_AM240320_DISABLE=n
+CONFIG_STM32_SPFD5408B_DISABLE=n
+CONFIG_STM32_R61580_DISABLE=y
+
#
# General build options
#
diff --git a/sched/mq_notify.c b/sched/mq_notify.c
index 4ec3d82c981..ce64d5a54ea 100644
--- a/sched/mq_notify.c
+++ b/sched/mq_notify.c
@@ -2,7 +2,7 @@
* sched/mq_notify.c
*
* Copyright (C) 2007, 2009, 2011 Gregory Nutt. All rights reserved.
- * Author: Gregory Nutt
+ * Author: Gregory Nutt
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -97,17 +97,17 @@
* sigev_value - Value associated with the signal
*
* Return Value:
- * On success mq_notify() returns 0; on error, -1 is returned, with
- * errno set to indicate the error.
+ * On success mq_notify() returns 0; on error, -1 is returned, with
+ * errno set to indicate the error.
*
- * EBADF The descriptor specified in mqdes is invalid.
- * EBUSY Another process has already registered to receive notification
- * for this message queue.
- * EINVAL sevp->sigev_notify is not one of the permitted values; or
- * sevp->sigev_notify is SIGEV_SIGNAL and sevp->sigev_signo is not a
- * valid signal number.
- * ENOMEM
- * Insufficient memory.
+ * EBADF The descriptor specified in mqdes is invalid.
+ * EBUSY Another process has already registered to receive notification
+ * for this message queue.
+ * EINVAL sevp->sigev_notify is not one of the permitted values; or
+ * sevp->sigev_notify is SIGEV_SIGNAL and sevp->sigev_signo is not a
+ * valid signal number.
+ * ENOMEM
+ * Insufficient memory.
*
* Assumptions:
*