The devices sizes can be variable depending on any IPC init data that is
stored. Make sure we allocate the correct size.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
This change provides an IIR equalizer component. The
IIR equalizer can be used for any transducer or effects equalizer needs but
it is especially recommended for speaker response equalization and other
applications without dependence to matched phase response or best possible
THD+N performance where FIR may be a better choise. IIR equalization is
capable to strong response enhancement without need for large DSP resources
consumption. The tool to create the EQ setup blobs is included in the
rimage tools.
This change provides a finite impulse response (FIR)
equalizer component. The FIR equalizer can be used for any transducer or
effects equalizer needs but it is especially recommended for microphone
arrays equalization. The tool to create EQ setup blobs is included in the
rimage tools.
This change provides a tone generator component. The
purpose is to provide a high quality FW internal test signal generator for
objective audio quality measurements for component or system tests. It can
also be used as simple beep indication tones generator for users.
This change provides a sample rate converter (SRC).
The SRC is polyphase FIR type. All the conversions coefficients tables are
automatically generated by a separate Octave scripts set in the rimage
tools set. The supported in/out rates and the performance can be customized
for a different quality/resources trade-off.
Add an API to allow drivers to writeback or invalidate cache contents.
This is useful where the DSP firmware runs from cache and needs to
writeback/buffer prior to DMA or other peripheral usage.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Currently pipelines have to be statically defined in the firmware source
code. This patch provides a mechanism whereby they can be created and
destroyed via IPC messages from the host.
Part 2 to follow.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Add an Earliest Deadline First scheduler to perform scheduling of audio
pipeline tasks based on task deadlines. i.e. the task with the earliest
deadline will be scheduled so that it will complete and preempt other
lower priority tasks before the deadline.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Provide a method for tasks to be performed on a priority basis using the
interrupts levels to preempt lower priority tasks.
The scheduler will use the to schedule work at different priorities.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Clean up the DW-DMA rsgisters so that it can be more easily integrated
into other platforms.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Create a global firmware context structure and pass this to each subsystem
on initialisation. This allows components to share access to global DSP
context.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
The allocator currently has different methods to allocate heap memory
depending on memory size requested. The heap also has to be defined
in two places atm i.e in memory.h and baytrail.x
This patch aligns the heap macros with the linker script and introduces
new flags to specify the allocation type.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
We need enable/disable workq timer also after each calling to
set/clear timer, but not only CPU frequency change, so merge
them into work_set/clear_timer().
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
We assume that there are always datas/spaces for playback/capture,
and then don't need to check the host side buffer pointers, here
remove these buffer check related code to save about 0.6KB to the
firmware binary size.
We also do code cleanup for host in this patch: remove superfluous
prefix 'host_' for host_data members, merge host_dma_cb_playback()
and host_dma_cb_capture() as they have most common code, and the
latter change can save about 0.25KB to firmware binary size.
Furthermore, we also fix the capture doesn't work issue at the
same time.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
Considering of capture pipeline, when doing .params(), we need
set params to each component's source buffer.
This patch implement that for host/volume component, as mixer is
only for playback ATM, and dai don't have source buffer for capture,
we don't need change them ATM.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
We met a variable uninitialized issue:
'ret' might be used uninitialized in this function.
host.c:606 | host_preload()
Here adding the initialized assignment to fix this issue.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
Preload entire pipeline and all components by walking the pipeline graph.
Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Modified-by: Keyon Jie <yang.jie@linux.intel.com>
The elements reset code may be shared by params() and stop(),
and the host side pointer resetting code may be used by both
reset() and stop().
Here create separate functions for those common codes, to make
code more clean.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
For command stop, excepting reset components, we may need reset
the buffer next to the component, otherwise, if the next start
command comes(without reset before it), the buffer pointers may
be disordered.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
After finished a transfer copy, check for reload channel:
1. if next.size is DMA_RELOAD_END, stop this dma copy;
2. if next.size > 0 but not DMA_RELOAD_LLI, use next
element for next copy;
3. if we are waiting for pause, pause it;
4. otherwise, reload lli.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
We should only copy when there is data, after copied the last bytes
or period, we will stop the dai and ssp, and trigger the pipeline
finish, which will notify host side the last read pointer and let
host side send trigger stop ipc.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
For the last bytes (< 1 period) copy, we need to remember this
for the size caculation at finished, here add dd->last_bytes for
this purpos.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
We should only copy when there is data, as we are using pulling
mode, should sink side should have free space always, we check
each source->avail and copy only some bytes when avail < period
size.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
As its sink won't be host/dai, it is alwasys internal component,
let's hard code it to STREAM_FORMAT_S32_LE ATM.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
We should only copy when there is data, as we are using pulling
mode, should sink side should have free space always, we check
source->avail only and copy only some bytes when avail < period
size.
Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>