Stefan Binding
47ceabd99a
ALSA: hda: cs35l41: Support Firmware switching and reloading
...
This is required to support CS35L41 calibration.
By default, speaker protection firmware will be loaded, if
available. However, different firmware is required to run
the calibration sequence, so it is necessary to add support
to be able to unload, switch and reload firmware.
This patch adds 2 ALSA Controls for each amp:
"DSP1 Firmware Load"
"DSP1 Firmware Type"
"DSP1 Firmware Load" can be used to unload and
load the firmware.
"DSP1 Firmware Type" can be used to switch the
target firmware to be loaded by "DSP1 Firmware Load"
Since loading firmware can add new ALSA controls, it is
necessary to ensure the firmware loading is run asynchronously
from the ALSA control itself to prevent deadlocks.
Note: When switching between firmwares, an ALSA control is
only added if it has not previously existed. If it had existed
previously, it will be re-enabled instead.
Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com >
Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220630002335.366545-14-vitalyr@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-07-15 16:23:29 +02:00
Stefan Binding
3e34e2ae29
ALSA: hda: cs35l41: Read Speaker Calibration data from UEFI variables
...
Speaker Calibration data, specific to an individual speaker is
stored inside UEFI variables during calibration, and can be
used by the DSP.
Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com >
Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220630002335.366545-11-vitalyr@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-07-15 16:22:40 +02:00
Stefan Binding
1873ebd30c
ALSA: hda: cs35l41: Support Hibernation during Suspend
...
CS35L41 supports hibernation during suspend when using
DSP firmware.
When the driver suspends it will hibernate the part, if
firmware is running, and resume will wake from hibernation.
CS35L41 driver will suspend/resume when requested by
hda driver.
Note that suspend/resume and hibernation is only supported
when firmware is running.
Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com >
Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220630002335.366545-10-vitalyr@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-07-15 16:21:39 +02:00
Stefan Binding
63f4b99f00
ALSA: hda: cs35l41: Support Speaker ID for laptops
...
Some Laptops use a number of gpios to define which vendor is
used for a particular laptop.
Different coefficient files are used for different vendors.
Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com >
Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220630002335.366545-9-vitalyr@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-07-14 11:23:14 +02:00
Stefan Binding
e99f3c7e32
ALSA: hda: cs35l41: Save Subsystem ID inside CS35L41 Driver
...
The Subsystem ID is read from the HDA driver, and will
be used by the CS35L41 driver to be able to uniquely
identify the laptop, which is required to be able to
define firmware to be used by specific models.
Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com >
Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220630002335.366545-6-vitalyr@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-07-14 11:23:13 +02:00
Vitaly Rodionov
2e81e1fffd
ALSA: hda: cs35l41: Add initial DSP support and firmware loading
...
This patch adds support for the CS35L41 DSP.
The DSP allows for extra features, such as running
speaker protection algorithms and hibernations.
To utilize these features, the driver must load
firmware into the DSP, as well as various tuning
files which allow for customization for specific
models.
[ Slightly simplified Kconfig changes by tiwai ]
Signed-off-by: Vitaly Rodionov <vitaly.rodionov@cirrus.com >
Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220630002335.366545-5-vitalyr@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-07-14 11:22:55 +02:00
Stefan Binding
22d5cbd273
ALSA: hda: cs35l41: Save codec object inside component struct
...
This is required for ALSA control support.
Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com >
Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220630002335.366545-4-vitalyr@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-07-14 11:22:39 +02:00
Stefan Binding
00f87ec74c
ALSA: hda: cs35l41: Add Amp Name based on channel and index
...
This will be used to identify ALSA controls and firmware.
The Amp Name will be a channel identifier (L or R), and an
index, which identifies which amp for that channel.
Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com >
Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220509214703.4482-10-vitalyr@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-05-16 09:55:39 +02:00
Stefan Binding
aa4a38af97
ALSA: hda: cs35l41: Add Support for Interrupts
...
The CS35L41 can produce interrupts on error.
When the interrupts occur, the driver will report
the error, but errors will only be fixed after playback
finishes.
Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com >
Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220509214703.4482-5-vitalyr@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-05-16 09:51:21 +02:00
Lucas Tanure
fabcf7f12b
ALSA: hda: cs35l41: Remove cs35l41_hda_reg_sequence struct
...
Remove cs35l41_hd_reg_sequence as it adds a layer of flexibility not needed.
As cs35l41_hda_(start/stop)_bst is a single register, it can be replaced by
regmap_update_bits with usleep_range to wait for the same 3000us that
reg_sequence had.
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220413083728.10730-12-tanureal@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-04-13 10:42:34 +02:00
Lucas Tanure
f7f207375d
ALSA: cs35l41: Unify hardware configuration
...
Both ASoC and HDA require to configure the GPIOs and Boost, so
create a single shared struct for hardware configuration.
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220413083728.10730-2-tanureal@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-04-13 10:42:32 +02:00
Uwe Kleine-König
85c25662d1
ALSA: hda: cs35l41: Make cs35l41_hda_remove() return void
...
Up to now cs35l41_hda_remove() returns zero unconditionally. Make it
return void instead which makes it easier to see in the callers that
there is no error to handle.
Also the return value of i2c and spi remove callbacks is ignored anyway.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de >
Reviewed-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220117220055.120955-1-u.kleine-koenig@pengutronix.de
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-01-18 14:08:05 +01:00
Lucas Tanure
8c286a0f97
ALSA: hda: cs35l41: Tidyup code
...
Clean up and simplify cs35l41_hda_bind function
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220117160830.709403-6-tanureal@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-01-18 14:07:16 +01:00
Lucas Tanure
7b2f3eb492
ALSA: hda: cs35l41: Add support for CS35L41 in HDA systems
...
Add support for CS35L41 using a new separated driver
that can be used in all upcoming designs
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20211217115708.882525-8-tanureal@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-01-05 17:08:16 +01:00