Compress offload playback for AAC requires media format block to be
sent to the DSP before the bitstream can be decoded. Send this
as part of configuring the DSP
Change-Id: Ia22bc52aa0c136a1ee3f70a1e150458f8e4b6866
Signed-off-by: Haynes Mathew George <hgeorge@codeaurora.org>
Signed-off-by: Eric Laurent <elaurent@google.com>
Git-commit: ed16e26a99b2b7904d0badae4bd0d30953873b9e
Git-repo: https://android.googlesource.com/kernel/msm
Signed-off-by: Dhananjay Kumar <dhakumar@codeaurora.org>
Add missing synchronization between handling of flush and
drain in the compressed audio driver.
Change-Id: I01b6d2c4fb372be483022d1c3430b9369dea34f7
Signed-off-by: Haynes Mathew George <hgeorge@codeaurora.org>
Signed-off-by: Dhananjay Kumar <dhakumar@codeaurora.org>
Change condition to skip request for session time from DSP
during compress offload.
Change-Id: I0192b1f4059f09a32b8848c40e91eecf3dadf966
Signed-off-by: Haynes Mathew George <hgeorge@codeaurora.org>
Signed-off-by: Eric Laurent <elaurent@google.com>
Git-commit: b31efc7e185f453da00cedbbad5b59c23560dcde
Git-repo: https://android.googlesource.com/kernel/msm
Signed-off-by: Dhananjay Kumar <dhakumar@codeaurora.org>
Pointer member variables in snd_codec params break bit alignment and
causes data corruption. By changing these pointers to fixed size
array variables, the bit alignment is rectified. The size has been
set to max possible size. Also, remove params which are not required
anymore.
Change-Id: Ib87bbeb07b0df1ce8a81166b319976fe54c0f013
Signed-off-by: Amit Shekhar <ashekhar@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Kernel 3.10 has cpu dai widgets in the list of card
widgets in addition to platform and codec widgets.
This is causing a delay in device switch because
cpu dai widgets increase the number of widgets to be
processed for bias changes by a factor of five, however
they are not required to be processed.
Skip processing of cpu dai widgets to keep
the device switch latency at same level as in kernel 3.4.
CRs-fixed: 699168
Change-Id: I2d7d9e34dabf2cd25ec5fdd3e58be0fc657c0f6c
Signed-off-by: Damir Didjusto <damird@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
This gerrit reverts the gerrit with the commit number-
b8bab04829
Now that we don't use SNDRV_PCM_RATE_xxx bit fields for sample rate, we need to
change the description to an array for describing the sample rates supported by
the sink/source
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Increase the Input device SW ID from 15 to 32. This is needed
to accomodate more input devices.
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
There is use case that the HDMI input goes through MI2S
TX interface to ADSP. Add compressed TX support for
this use case.
Signed-off-by: Subhash Chandra Bose Naripeddy <snariped@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
WMA V9 and WMA Pro tunnel-mode supports are added to
compressed driver. It allows user-space application to
decode WMA V9 and WMA Pro audio stream through QDSP6.
Change-Id: I99407d00b618a627e6d762be9abea4abd2410b8b
Signed-off-by: Manish Dewangan <manish@codeaurora.org>
Signed-off-by: Dhananjay Kumar <dhakumar@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Add timestamp field to compress structure which indicates when
audio sample has been captured or needs to be rendered.
Change-Id: Ie61170c6645c71207e7df1c7176e0750e47590f8
Signed-off-by: Gopikrishnaiah Anandan <agopik@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Dolby surround1-DS1 module supports both Dolby Audio processing - post
processing and Dolby digital plus decoder in DSP. Add support for
AC3 and EC3 playback in tunnel mode so that DS1 is integrated and
functional end to end.
Change-Id: Iacb46cdfded16c9a5a9227a6ff4e072c61df2be8
Signed-off-by: Subhash Chandra Bose Naripeddy <snariped@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Set the output path of the decoder output of the compressed format
to input of the pseudo port.
Output of the pseudo port is connected to the input of
DTS encoder.
Output of the DTS encoder is connected to the selected
output ports SPDIF, HDMI.
Change-Id: I3945e53fdfd57de47fb2209ddc81ba4623999028
Signed-off-by: Aviral Gupta <aviralg@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
- Added DTS_LBR for Passthrough case in Compress Driver
- Added Graceful Error Handling for Unsupported Codec
IDs in case of open_write_compressed.
Change-Id: Ifbecb02832a2599be0e3c73cc69381f87969d78a
Signed-off-by: Dhananjay Kumar <dhakumar@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Support the MP2 as a format for the tunnel mode.
MP2 format to be decoded in the DSP.
Change-Id: I0d268a6ddb57b1470ee2c43449ac31520176232f
Signed-off-by: Aviral Gupta <aviralg@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
In the use case of HDMI input PCM capture, timestamp received from
DSP is required in userspace to propogate it on the playback path.
Timestamp mode propagation is availble through the meta data mode
in compressed driver. Add support for PCM capture in compressed
driver to address the usecase
Change-Id: I1221b8e99628dadc136df681619ed960ff7c5c1a
Signed-off-by: Subhash Chandra Bose Naripeddy <snariped@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
There is a usecase where compressed data is sent over HDMI IN to
ADSP. The format of compressed is detected in ADSP and sent through
the meta data to compressed driver. Add support for meta data in
compressed TX for this use case.
Change-Id: Idbb18fe4a0ad828e9c2e9d7beec048b3cedf002d
Signed-off-by: Subhash Chandra Bose Naripeddy <snariped@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Add support for hostless PCM mode to support usecases
where PCM is not consumed by host.
Signed-off-by: Gopikrishnaiah Anandan <agopik@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Use SPECIAL format for AMR. Add mixer control to
input mode and rate.
Change-Id: I8746d86ce323744995575a22b6128b39daaa3d13
Signed-off-by: Helen Zeng <xiaoyunz@codeaurora.org>
[sboyd: Drop soc/msm parts]
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Introduced a new helper function snd_pcm_add_usr_ctls() to
create control elements representing the user control for each
PCM (sub)stream
Signed-off-by: Jayasena Sangaraboina <jsanga@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
Channel info data structure is parsed from userspace and if
user does not set the no. of channels correctly, it could lead
to security vulnerability if we don't check for overflow when the
no. of channels is multiplied with pcm bit width. Add a condition
to check for overflow during multiplication.
CRs-fixed: 537818
Change-Id: Ib9631b6e45d77b39be2c27343d4aee3e9244d8cc
Signed-off-by: Phani Kumar Uppalapati <phaniu@codeaurora.org>
Introduced a new helper function snd_pcm_add_volume_ctls() to
create control elements representing the volume for each PCM
(sub)stream.
Signed-off-by: Damir Didjusto <damird@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
Change adds compat ioctl to listen driver for supporting 32 bit userspace
client when kernel is compiled for 64 bit.
Change-Id: Ie6a6fb1f2b6ea569e03b02bc520ef79b95c1009c
Signed-off-by: Gopikrishnaiah Anandan <agopik@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Compat driver should support compress ioctls when
COMPAT mode is enabled. Change adds support for
handling compress ioctls.
Change-Id: If7223ace326253240a1cd65bc9a111b8903977f1
Signed-off-by: Gopikrishnaiah Anandan <agopik@codeaurora.org>
Allow some PCM devices to be hostless, i.e. there is no PCM data transferred
to or from the host CPU. This can be used to minimise power on systems since
the CPU can idle/sleep during the PCM device operation (e.g. a phone call
where the DAI is between a MODEM and DSP)
TODO: cleanup, look at adding a read/write blocker.
Singed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
Handle ioctl magic 'U' as an user defined ioctl so that ALSA core calls
substream's ioctl handler. This gets rid of a requirement that ALSA core
needs to be changed every time when a new user defined ioctl is introduced.
Signed-off-by: Joonwoo Park <joonwoop@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
This is needed to support the compressed audio till the
compressed core is done with development.
Signed-off-by: Asish Bhattacharya <asishb@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
Incase of A2DP usecase using proxy driver, appl_ptr has
boundary value as 0x60000000 frames in sw_params for stereo(2 channels).
When this value crosses 0x40000000, then userspace calculating
appl_ptr at bytes results in crossing 32-bit value 0x100000000,
and points to 0x0 offset which can result in crash or pop.
To avoid above scenario, set the sw_params appl_ptr boundary value
within 0x40000000. Added proper check at sw_params update
to set this value correctly within 32-bit boundary(frames).
Change-Id: I537a04156699d90549a0a468ae19539ecd552d3b
CRs-Fixed: 483203
Signed-off-by: Laxminath Kasam <lkasam@codeaurora.org>
When compressed and pcm session is started the buffer pull will
Be from the DSP, in mmap mode for the scenario Hardware pointer
Is same as application pointer implies application has not filled the
Buffer to be send to DSP, and platform driver has to break and restart
The de queue process when the application has sufficient buffers.
When hardware pointer is same as application pointer it is an under run
Scenario where the ALSA framework has to trigger the under run and in HAL
The session has to re-prepare and re-triggered. based on the stop
Threshold, but in our system the stop threshold is INT_MAX which
Indicates that under run is not triggered in practical cases.
We have a brodcast usecase in which the mentioned under run case
Is hit mulitple times, and every time re-prepare and re-trigger will be
Expensive
Update the ASoC core framework to restart de queue process stopped
By platform Driver when the under run is hit, based on the available
Buffer and render flag, so the System will recover from the hang state.
To restart de queue process the ASoC core will be calling the restart
Callback registered by platform driver and this callback will be running in
Atomic context.
Change-Id: Ic9ea05a0dc6246346e9913493232882e2f5447d1
Signed-off-by: Santosh Mardi <gsantosh@codeaurora.org>
Dirty widget list can be accessed by multiple paths
in dapm framework. Dirty list is protected by dapm mutex.
Since dapm_force_enable_pin function accesses the dirty
list, protect it using the dapm mutex.
Signed-off-by: Aviral Gupta <aviralg@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
For wigdets which have set the suspend ignore flag asoc framework
shouldn't mark them as dirty when ASoC suspend function is called.
This change adds check to skip suspending the widgets with the flag set.
Signed-off-by: Gopikrishnaiah Anandan <agopik@codeaurora.org>
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
Add a debug message which can be used for tracking widgets being
power-up and powered-down by DAPM, mainly used for debugging
purpose.
Change-Id: I291a381da44edca3bc2bb07be53b1969c03a48f0
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Widgets power up/down sequence in dapm is specific
to platform. Change makes msm specific changes to the
sequence.
Signed-off-by: Gopikrishnaiah Anandan <agopik@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
Add virtual ANC widgets which are used to enable ANC
before PA is turned on, and to disable ANC before TX is
turned off.
CRs-fixed: 387904
Change-Id: Id3eca8c09d1d1d3c3d89ebe3d58be9bf676eb9c0
Signed-off-by: Damir Didjusto <damird@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Return error code ENETRESET from the platform driver
during the SSR recovery.
This facilitates the client to handle the error code
and take corrective measures rather than being blocked
on the call.
CRs-Fixed: 683288
Change-Id: I618edf0276bbe8826b47edec39df0dd4f87ffe93
Signed-off-by: Aviral Gupta <aviralg@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Currently digital mute ops are called only for playback
use cases. Add support to call into codec digital mute
even for capture use cases.
CRs-Fixed: 662372
Change-Id: Idf5d1a823deb04d5ccb9139be745b6f936121a0c
Signed-off-by: Phani Kumar Uppalapati <phaniu@codeaurora.org>
While playback and capture is done concurrently the dapm widget
data is accessed parallelly which results in data corruption and
kernel panic. Fix this problem by serializing the stream event
operation by adding lock
dapm_seq_run will invoke dapm power sequence for pre-sorted list
of widgets to be powered up. Kernel panic issue is observed
during stability runs with the above sequence caused by null
pointer dereference in dapm_seq_run_coalesced. Fix kernel panic
issue by checking for valid snd_soc_dapm_context pointer in
dapm_seq_run before invoking dapm_seq_run_coalesced
Widget list in dapm is getting corrupted during concurrent
use cases where dapm_power_widget is accessed. This corruption
is resulting in kernel crash in dapm. Fix the issue by adding
protection in dapm_power_widgets API.
Change-Id: I49d19860277726cf3152e104ab40627fd56c021c
CRs-Fixed: 388785
Signed-off-by: Sriranjan Srikantam <cssrika@codeaurora.org>
Signed-off-by: Gopikrishnaiah Anandan <agopik@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
When control value is queried framework is returning the
min value as zero even if min is negative.
This change will make sure that frame work will update
the max value in cases where min is negative.
Signed-off-by: Gopikrishnaiah Anandan <agopik@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
Based on which codec dai is selected, slimbus channel numbers
have to be queried when use case is being enabled.
Change adds support to get the channel numbers.
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
When kernel is compiled for 64 bit and userspace client is in 32 bit
mode compat ioctl path will be taken.If platform driver supports compat
mode asoc framework should call compat function pointers.
Change adds support in asoc framework to call snd_pcm_lib_ioctl
in compat mode.
Change-Id: Ib4254648666aedfc2037a267cd7ffe4af4be398f
Signed-off-by: Anish Kumar <kanish@codeaurora.org>
Compat ioctl pointer is assigned to ioctl field instead of compat_ioctl
member variable. Change updates the assignment.
CRs-fixed: 688027
Change-Id: I248e3225493f0ceafcb5e70ce0ff827ab77c7a74
Signed-off-by: Gopikrishnaiah Anandan <agopik@codeaurora.org>
Add audio backend to hwdep interface. This is to provide ioctl
interface to communicate to routing driver.
Signed-off-by: Subhash Chandra Bose Naripeddy <snariped@codeaurora.org>
Signed-off-by: Krishnankutty Kolathappilly <kkolat@codeaurora.org>
Signed-off-by: Banajit Goswami <bgoswami@codeaurora.org>
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
When kernel is compiled for 64 bit and userspace client is in 32 bit
mode compat ioctl path will be taken.If platform driver supports compat
mode asoc framework should call compat function pointers.
Change adds support in asoc framework to support compat mode.
Change-Id: I4929bc89c2ad467cdc83f5a00fe9d38e425c3ca2
Signed-off-by: Gopikrishnaiah Anand <agopik@codeaurora.org>