mirror of
https://github.com/apache/nuttx.git
synced 2026-05-28 03:45:50 +08:00
cxd56xx: use small lock in arch/arm/src/cxd56xx/cxd56_nxaudio_src.c
reason: We hope to remove all instances of spin_lock_irqsave(NULL). Signed-off-by: hujun5 <hujun5@xiaomi.com>
This commit is contained in:
@@ -85,6 +85,8 @@ struct cxd56_srcdata_s
|
|||||||
|
|
||||||
float buf_count;
|
float buf_count;
|
||||||
float buf_increment;
|
float buf_increment;
|
||||||
|
|
||||||
|
spinlock_t lock;
|
||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@@ -114,18 +116,18 @@ static struct ap_buffer_s *cxd56_src_get_apb(void)
|
|||||||
struct ap_buffer_s *src_apb;
|
struct ap_buffer_s *src_apb;
|
||||||
irqstate_t flags;
|
irqstate_t flags;
|
||||||
|
|
||||||
flags = spin_lock_irqsave(NULL);
|
flags = spin_lock_irqsave(&g_src.lock);
|
||||||
|
|
||||||
if (dq_count(g_src.inq) == 0)
|
if (dq_count(g_src.inq) == 0)
|
||||||
{
|
{
|
||||||
size_t bufsize = sizeof(struct ap_buffer_s) +
|
size_t bufsize = sizeof(struct ap_buffer_s) +
|
||||||
CONFIG_CXD56_AUDIO_BUFFER_SIZE;
|
CONFIG_CXD56_AUDIO_BUFFER_SIZE;
|
||||||
|
|
||||||
spin_unlock_irqrestore(NULL, flags);
|
spin_unlock_irqrestore(&g_src.lock, flags);
|
||||||
|
|
||||||
src_apb = kmm_zalloc(bufsize);
|
src_apb = kmm_zalloc(bufsize);
|
||||||
|
|
||||||
flags = spin_lock_irqsave(NULL);
|
flags = spin_lock_irqsave(&g_src.lock);
|
||||||
|
|
||||||
if (!src_apb)
|
if (!src_apb)
|
||||||
{
|
{
|
||||||
@@ -146,7 +148,7 @@ static struct ap_buffer_s *cxd56_src_get_apb(void)
|
|||||||
src_apb->flags = 0;
|
src_apb->flags = 0;
|
||||||
|
|
||||||
errorout_with_lock:
|
errorout_with_lock:
|
||||||
spin_unlock_irqrestore(NULL, flags);
|
spin_unlock_irqrestore(&g_src.lock, flags);
|
||||||
return src_apb;
|
return src_apb;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,9 +185,9 @@ static int cxd56_src_process(struct ap_buffer_s *apb)
|
|||||||
src_apb->nbytes = apb->nbytes;
|
src_apb->nbytes = apb->nbytes;
|
||||||
src_apb->flags |= AUDIO_APB_SRC_FINAL;
|
src_apb->flags |= AUDIO_APB_SRC_FINAL;
|
||||||
|
|
||||||
flags = spin_lock_irqsave(NULL);
|
flags = spin_lock_irqsave(&g_src.lock);
|
||||||
dq_put(g_src.outq, &src_apb->dq_entry);
|
dq_put(g_src.outq, &src_apb->dq_entry);
|
||||||
spin_unlock_irqrestore(NULL, flags);
|
spin_unlock_irqrestore(&g_src.lock, flags);
|
||||||
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
@@ -287,9 +289,9 @@ static int cxd56_src_process(struct ap_buffer_s *apb)
|
|||||||
|
|
||||||
/* Put in out queue to be DMA'd */
|
/* Put in out queue to be DMA'd */
|
||||||
|
|
||||||
flags = spin_lock_irqsave(NULL);
|
flags = spin_lock_irqsave(&g_src.lock);
|
||||||
dq_put(g_src.outq, &src_apb->dq_entry);
|
dq_put(g_src.outq, &src_apb->dq_entry);
|
||||||
spin_unlock_irqrestore(NULL, flags);
|
spin_unlock_irqrestore(&g_src.lock, flags);
|
||||||
|
|
||||||
#ifdef DUMP_DATA
|
#ifdef DUMP_DATA
|
||||||
file_write(&dump_file_post, src_apb->samp, src_apb->nbytes);
|
file_write(&dump_file_post, src_apb->samp, src_apb->nbytes);
|
||||||
@@ -318,9 +320,9 @@ static int cxd56_src_process(struct ap_buffer_s *apb)
|
|||||||
|
|
||||||
src_apb->nbytes += g_src.bytewidth * src_nframes * g_src.channels;
|
src_apb->nbytes += g_src.bytewidth * src_nframes * g_src.channels;
|
||||||
|
|
||||||
flags = spin_lock_irqsave(NULL);
|
flags = spin_lock_irqsave(&g_src.lock);
|
||||||
dq_put_back(g_src.inq, &src_apb->dq_entry);
|
dq_put_back(g_src.inq, &src_apb->dq_entry);
|
||||||
spin_unlock_irqrestore(NULL, flags);
|
spin_unlock_irqrestore(&g_src.lock, flags);
|
||||||
|
|
||||||
apb->curbyte += (float_in_left * g_src.bytewidth);
|
apb->curbyte += (float_in_left * g_src.bytewidth);
|
||||||
}
|
}
|
||||||
@@ -521,6 +523,7 @@ int cxd56_src_deinit(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
src_delete(g_src.src_state);
|
src_delete(g_src.src_state);
|
||||||
|
spin_lock_init(&g_src.lock);
|
||||||
|
|
||||||
#ifdef DUMP_DATA
|
#ifdef DUMP_DATA
|
||||||
if (dump_file_pre.f_inode)
|
if (dump_file_pre.f_inode)
|
||||||
|
|||||||
Reference in New Issue
Block a user