From 5b29a08d691c589b337a0446ca60263fe22d93db Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 6 Jul 2012 16:39:00 +0200 Subject: libblock: Fix read-ahead task wake-up In case the read-ahead task is not configured we must not send a wake-up event. This would send the wake-up event to the executing task. We must send the wake-up event only in case the request list changes from empty to non-empty. Since otherwise we may send a false transfer event. --- cpukit/libblock/src/bdbuf.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/cpukit/libblock/src/bdbuf.c b/cpukit/libblock/src/bdbuf.c index 5b66656499..f5da0fcc36 100644 --- a/cpukit/libblock/src/bdbuf.c +++ b/cpukit/libblock/src/bdbuf.c @@ -2039,17 +2039,22 @@ static void rtems_bdbuf_check_read_ahead_trigger (rtems_disk_device *dd, rtems_blkdev_bnum block) { - if (dd->read_ahead.trigger == block + if (bdbuf_cache.read_ahead_task != 0 + && dd->read_ahead.trigger == block && !rtems_bdbuf_is_read_ahead_active (dd)) { rtems_status_code sc; rtems_chain_control *chain = &bdbuf_cache.read_ahead_chain; + if (rtems_chain_is_empty (chain)) + { + sc = rtems_event_send (bdbuf_cache.read_ahead_task, + RTEMS_BDBUF_READ_AHEAD_WAKE_UP); + if (sc != RTEMS_SUCCESSFUL) + rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_RA_WAKE_UP); + } + rtems_chain_append_unprotected (chain, &dd->read_ahead.node); - sc = rtems_event_send (bdbuf_cache.read_ahead_task, - RTEMS_BDBUF_READ_AHEAD_WAKE_UP); - if (sc != RTEMS_SUCCESSFUL) - rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_RA_WAKE_UP); } } -- cgit v1.2.3 From c5ba8ba72708f89ad37356a46e6cfe2a22794480 Mon Sep 17 00:00:00 2001 From: Xiangfu Liu Date: Mon, 9 Jul 2012 10:44:47 +0200 Subject: bsps/lm32: PR2045: Add mic boost option --- c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c | 24 ++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c b/c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c index 48625809e6..4f7b57e09f 100644 --- a/c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c +++ b/c/src/lib/libbsp/lm32/shared/milkymist_ac97/ac97.c @@ -314,6 +314,7 @@ static rtems_status_code ioctl_read_channel(void *buf, unsigned int chan, int mono) { unsigned int *val = (unsigned int *)buf; + int mic_boost; int codec; int left, right; @@ -326,12 +327,14 @@ static rtems_status_code ioctl_read_channel(void *buf, return RTEMS_SUCCESSFUL; } if (mono) { - right = left = 100-(((codec & 0x1f) + 1)*100)/32; + left = 100-(((codec & 0x1f) + 1)*100)/32; + mic_boost = (codec & (1 << 6)) >> 6; + *val = left | mic_boost << 8; } else { right = 100-(((codec & 0x1f) + 1)*100)/32; left = 100-((((codec & 0x1f00) >> 8) + 1)*100)/32; + *val = left | (right << 8); } - *val = left | (right << 8); return RTEMS_SUCCESSFUL; } @@ -339,21 +342,23 @@ static rtems_status_code ioctl_write_channel(void *buf, unsigned int chan, int mono) { unsigned int *val = (unsigned int *)buf; + int mic_boost; int left, right; int codec; rtems_status_code sc; left = *val & 0xff; left = (left*32)/100 - 1; - if(left < 0) + if (left < 0) left = 0; - if (mono) + if (mono) { + mic_boost = *val >> 8; right = 31; - else { + } else { right = (*val >> 8) & 0xff; right = (right*32)/100 - 1; - if(right < 0) + if (right < 0) right = 0; } @@ -363,6 +368,13 @@ static rtems_status_code ioctl_write_channel(void *buf, else codec = (31-left) | ((31-right) << 8); + if (mono) { + if (mic_boost) + codec |= (1 << 6); + else + codec &= ~(1 << 6); + } + if (!write_cr(chan, codec)) sc = RTEMS_UNSATISFIED; else -- cgit v1.2.3