Takashi Iwai [Mon, 20 Feb 2017 20:43:40 +0000 (21:43 +0100)]
Merge tag 'asoc-v4.11' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Updates for v4.11
Another release that's mainly focused on drivers rather than core
changes, highlights include:
- A huge batch of updates to the Intel drivers, mainly around
DisplayPort and HDMI with some additional board support too.
- Channel mapping support for HDMI.
- Support for AllWinner A31 and A33, Everest Semiconductor ES8328,
Nuvoton NAU8540.
Detlef Urban [Mon, 20 Feb 2017 08:47:59 +0000 (09:47 +0100)]
ALSA: usb-audio: Tascam US-16x08 DSP mixer quirk
Add mixer quirk for Tascam US-16x08 usb interface.
Even that this is an usb compliant device,
the input channels and DSP functions (EQ/Compressor) aren't accessible
by default.
Declare snd_emux_operators structure as const as it is only copied into
another structure. So, snd_emux_operators structures having this property
can be made const.
Mark Brown [Sun, 19 Feb 2017 16:35:15 +0000 (16:35 +0000)]
Merge tag 'asoc-fix-v4.10-rc3' into asoc-linus
ASoC: Fixes for v4.10
As well as the usual smattering of driver specific fixes collected since
the merge window this has one particularly important fix to the core for
handling of aux_devs which was broken during the merge window by some of
the componentization refactoring.
# gpg: Signature made Wed 11 Jan 2017 17:26:37 GMT
# gpg: using RSA key ADE668AA675718B59FE29FEA24D68B725D5487D0
# gpg: issuer "broonie@kernel.org"
# gpg: key 0D9EACE2CD7BEEBC: no public key for trusted key - skipped
# gpg: key 0D9EACE2CD7BEEBC marked as ultimately trusted
# gpg: key CCB0A420AF88CD16: no public key for trusted key - skipped
# gpg: key CCB0A420AF88CD16 marked as ultimately trusted
# gpg: key 162614E316005C11: no public key for trusted key - skipped
# gpg: key 162614E316005C11 marked as ultimately trusted
# gpg: key A730C53A5621E907: no public key for trusted key - skipped
# gpg: key A730C53A5621E907 marked as ultimately trusted
# gpg: key 276568D75C6153AD: no public key for trusted key - skipped
# gpg: key 276568D75C6153AD marked as ultimately trusted
# gpg: Good signature from "Mark Brown <broonie@sirena.org.uk>" [ultimate]
# gpg: aka "Mark Brown <broonie@debian.org>" [ultimate]
# gpg: aka "Mark Brown <broonie@kernel.org>" [ultimate]
# gpg: aka "Mark Brown <broonie@tardis.ed.ac.uk>" [ultimate]
# gpg: aka "Mark Brown <broonie@linaro.org>" [ultimate]
# gpg: aka "Mark Brown <Mark.Brown@linaro.org>" [ultimate]
Wei Yongjun [Mon, 6 Feb 2017 15:22:24 +0000 (15:22 +0000)]
ASoC: sun4i-spdif: drop unnessary snd_soc_unregister_component()
It's not necessary to unregister a component registered
with devm_snd_soc_register_component(). Also removed
pointness clk_disable_unprepare() from error path and
snd_soc_unregister_platform() from the remove.
Fixes: f8260afa444b ("ASoC: sunxi: Add support for the SPDIF block") Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Jeeja KP [Fri, 17 Feb 2017 09:34:46 +0000 (15:04 +0530)]
ASoC: Intel: bxt: Add jack port initialize in bxt_rt298 machine
After the pcm jack is created, create and initialize the pin switch
widget for each port. Pin switch is to enable/disable the pin when
monitor is connected/disconnected.
Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
John Hsu [Fri, 17 Feb 2017 01:55:33 +0000 (09:55 +0800)]
ASoC: nau8825: automatic BCLK and LRC divde in master mode
configurable LRC and BCLK divide. The driver
will make configurations of LRC and BCLK automatically according to
BCLK and FS information in master mode.
Signed-off-by: John Hsu <KCHSU0@nuvoton.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Vinod Koul [Thu, 9 Feb 2017 11:14:03 +0000 (16:44 +0530)]
ASoC: Intel: Skylake: Add Geminlake IDs
Geminilake is next gen SoC, so add the IDs for Geminilake.
Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Vinod Koul [Thu, 9 Feb 2017 11:14:02 +0000 (16:44 +0530)]
ASoC: rt298: Add DMI match for Geminilake reference platform
Geminilake reference platform also uses combo jack for audio connector
so we need to set codec pdata to use this based on DMI match for this
board.
Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
ASoC: Intel: Skylake: Check device type to get endpoint configuration
Geminilake has two different devices connected to the same SSP, so use
device_type check to get correct device configuration.
Signed-off-by: Senthilnathan Veppur <senthilnathanx.veppur@intel.com> Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Jeeja KP [Tue, 7 Feb 2017 13:40:00 +0000 (19:10 +0530)]
ASoC: Intel: bxt: Add jack port initialize in da7219_max98357a machine
After the pcm jack is created, create and initialize the pin switch
widget for each port. Pin switch is to enable/disable the pin when
monitor is connected/disconnected.
Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Jeeja KP [Tue, 7 Feb 2017 13:39:58 +0000 (19:09 +0530)]
ASoC: Intel: Skylake: Add jack port initialize in nau88l25_ssm4567 machine
After the pcm jack is created, create and initialize the pin switch
widget for each port. Pin switch is to enable/disable the pin when
monitor is connected/disconnected.
Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Jeeja KP [Tue, 7 Feb 2017 13:39:57 +0000 (19:09 +0530)]
ASoC: Intel: Skylake: Add jack port initialize in nau88l25_max98357a machine
After the pcm jack is created, create and initialize the pin switch
widget for each port. Pin switch is to enable/disable the pin when
monitor is connected/disconnected.
Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Jeeja KP [Tue, 7 Feb 2017 13:39:56 +0000 (19:09 +0530)]
ASoC: Intel: Skylake: Add jack port initialize in rt286 machine
After the pcm jack is created, create and initialize the pin switch
widget for each port. Pin switch is to enable/disable the pin when
monitor is connected/disconnected.
Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Jeeja KP [Tue, 7 Feb 2017 13:39:55 +0000 (19:09 +0530)]
ASoC: hdac_hdmi: Add machine pin widget for each port
Represent each port as machine DAPM pin widget. This helps in
enable/disable pin when monitor is connected/disconnected in case pcm
is rendered to multiple ports.
Create machine pin widgets and pin switch kcontrol for each port and
report based on the pin status
Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Jeeja KP [Tue, 7 Feb 2017 13:39:48 +0000 (19:09 +0530)]
ASoC: hdac_hdmi: Add support for multiple ports to a PCM
Since we have the MST feature enabled and Pin-Port mux for user to
select the converter routing, multiple port mapping to same converter
needs to be supported.
To support multiple port mapped to same converter following changes are
done for this:.
o Add port list to pcm, so that multiple ports can be mapped to a PCM.
o Jack reporting in case where multiple port are attached to same PCM.
o Change hdac_hdmi_get_port_from_cvt(), channel_map, remove functions
to parse through all ports mapped to same the PCM.
Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Jeeja KP [Tue, 7 Feb 2017 13:39:47 +0000 (19:09 +0530)]
ASoc: hdac_hdmi: Configure pin verbs for MST
To enable stream on a specific port of a MST capable pin, the port
needs to be selected before we configure the pin widget verb.
When port is selected, all the pin widget verb controlling the sink
device operation will be directed to selected port. So add port
selection before configuring the pin widget verb.
Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Jeeja KP [Tue, 7 Feb 2017 13:39:46 +0000 (19:09 +0530)]
ASoC: hdac_hdmi: Handle MST pin jack detection at boot/resume
The ELD notification can be received asynchronously from the graphics
side and this may happen just at the moment the sound driver is
initializing and notification will be missed. Similarly at system
resume, the notification is ignored as the ELD and connection states
are updated in anyway at the end of the resume.
So check the jack status in boot/resume by querying the port presence
based on pin caps and report the jack status.
Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Jeeja KP [Tue, 7 Feb 2017 13:39:45 +0000 (19:09 +0530)]
ASoC: hdac_hdmi: Add MST verb support
To support DP MST audio, new pin verbs/params are added. This patch
adds helper functions to do following:
o To set a specific port
o To get the currently selected port
o To get the length of port.
Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Takashi Iwai [Wed, 15 Feb 2017 21:11:13 +0000 (22:11 +0100)]
ALSA: x86: Don't bail out from PCM ops when disconnected
Currently the driver returns -ENODEV when the monitor is disconnected.
But PA alsa module doesn't like this and it starts playing Juliet,
kills itself as if it were a fatal tragedy.
Since we protect the whole read/write at disconnection, just allow the
PCM accesses even during disconnection.
Takashi Iwai [Wed, 15 Feb 2017 21:02:10 +0000 (22:02 +0100)]
ALSA: x86: Avoid register accesses during disconnection
It seems that accessing registers during disconnection often leads to
the GPU pipe error. The original driver had a similar check in the
past, but it was lost through refactoring. Now put a connection check
in the register access functions.
One exception is the irq handler: it still needs to access the raw
register even while disconnected, because it has to read and write to
ACK the irq mask. Although the irq shouldn't be raised while
disconnected (the stream should have been disabled), let's make it
safer for now.
Takashi Iwai [Wed, 15 Feb 2017 20:45:06 +0000 (21:45 +0100)]
ALSA: x86: Don't return an error from chmap ctl at disconnected
It's not wise to return an error at info/get callback when
disconnected, which happens at any time.
The chmap ctl is supposed to fill zero for such a case, instead.
Kai-Heng Feng [Thu, 16 Feb 2017 07:26:54 +0000 (15:26 +0800)]
ALSA: hda/realtek - Cannot adjust speaker's volume on a Dell AIO
The issue is the same as "dd9aa335c880 ALSA: hda/realtek - Can't adjust
speaker's volume on a Dell AIO", the output requires to connect to a node
with Amp-out capability.
Applying the same fixup "ALC298_FIXUP_SPK_VOLUME" can fix the issue.
Jaroslav Kysela [Wed, 15 Feb 2017 16:09:43 +0000 (17:09 +0100)]
ALSA: hda - add sanity check to force the separate stream tags
It seems that newer Intel chipsets have more than 15 I/O streams (total).
This patch forces the separate stream tags, when this hardware is detected
to avoid SDxCTL.STRM field overflow and an unexpected behaviour.
Signed-off-by: Jaroslav Kysela <perex@perex.cz> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Jaroslav Kysela [Wed, 15 Feb 2017 16:09:42 +0000 (17:09 +0100)]
ALSA: hda - fix Lewisburg audio issue
Like for Sunrise Point, the total stream number of Lewisburg's
input and output stream exceeds 15 (GCAP is 0x9701), which will
cause some streams do not work because of the overflow on
SDxCTL.STRM field if using the legacy stream tag allocation method.
ASoC: sun4i-i2s: Update binding documentation to include A31
Add a new compatible for sun4i-i2s driver to handle some
SoCs that have a reset line that must be asserted/deasserted.
This new compatible, "allwinner,sun6i-a31-i2s", requires the
property "resets" which should be a phandle to the reset line.
Except these differences, the compatible is identical to previous one
which will not handle a reset line.
Signed-off-by: Mylène Josserand <mylene.josserand@free-electrons.com> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Acked-by: Rob Herring <robh@kernel.org> Signed-off-by: Mark Brown <broonie@kernel.org>
Takashi Iwai [Sat, 11 Feb 2017 07:21:56 +0000 (08:21 +0100)]
ALSA: x86: Handle reset at prepare callback
Currently the driver handles some reset procedure at the trigger STOP
and the underrun functions, where both are executed in the interrupt
context. Especially the underrun function has a sync-loop to clear
the UNDERRUN status bit, and this is supposed to be one of plausible
causes of GPU hangup.
Since the job to be done in the interrupt handler should be minimum,
we move the reset function out of trigger and underrun, and push it
into the prepare (and hw_free) callbacks instead. Here a new flag,
need_reset, is introduced to indicate the requirement of the reset
procedure. This is for avoiding the multiple resets when PCM prepare
is called sequentially.
Also in the UNDERRUN bit-clear sync loop, take a longer pause to be in
the safer side. Taking a longer delay is no longer a problem now
because we're running in the normal context.
Takashi Iwai [Tue, 7 Feb 2017 12:33:17 +0000 (13:33 +0100)]
ALSA: x86: Support S32 format
The hardware has the support for the left-aligned 24bit format in
32bit packet. This corresponds to S32 format in ALSA. We need to set
the msbits restriction as well to inform user-space that only MSB
24bit are available.
Takashi Iwai [Tue, 7 Feb 2017 07:05:46 +0000 (08:05 +0100)]
ALSA: x86: Allow single period PCM operation
This is an implementation of PCM streaming with only 1 period.
Since the hardware requires the refresh of BDs after each BD
processing finishes, we'd need at least two BDs. The trick is that
both BDs point to the same content: the address of the PCM buffer
head, and the whole buffer size. Then it loops over to the whole
buffer again after it finished once.
Takashi Iwai [Thu, 2 Feb 2017 20:33:54 +0000 (21:33 +0100)]
ALSA: x86: Don't pass SNDRV_PCM_INFO_BATCH flag
The PCM engine on LPE audio isn't like a batch-style process any
longer, but rather it deals with the standard ring buffer. Remove the
BATCH info flag so that PA can handle the buffer in timer-sched mode.
Similarly, the DOUBLE flag is also superfluous. Drop both bits.
Baoyou Xie [Thu, 9 Feb 2017 03:12:58 +0000 (11:12 +0800)]
ASoC: zx-i2s: introduce pclk for zx2967 family
The pclk is necessary for zx2967 I2S controller. the driver
currently doesn't handle it. This is something we need to fix.
In turn, the driver supports zx296718's I2S controller.
By the way, this patch also change the clock name from tx to wclk
to make it clear.
Signed-off-by: Baoyou Xie <baoyou.xie@linaro.org> Reviewed-by: Shawn Guo <shawnguo@kernel.org> Reviewed-by: Jun Nie <jun.nie@linaro.org> Signed-off-by: Mark Brown <broonie@kernel.org>
Vincent Abriou [Wed, 8 Feb 2017 09:47:01 +0000 (10:47 +0100)]
ASoC: hdmi-codec: remove HDMI device unregister
While unregistering the hdmi-codec, the hdmi device list must be
cleaned up. It avoid kernel page fault when registering again the
hdmi-codec.
Signed-off-by: Vincent Abriou <vincent.abriou@st.com> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Mark Brown <broonie@kernel.org>
Icenowy Zheng [Tue, 7 Feb 2017 18:30:40 +0000 (02:30 +0800)]
ASoC: sunxi: allow the analog codec driver to be built on ARM64
As the 64-bit Allwinner H5 SoC has the same analog codec part (also the
same digital part) as H3, enable the driver to be built on ARM64
Allwinner platform, so that it can be used on H5.
Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Acked-by: Chen-Yu Tsai <wens@csie.org> Signed-off-by: Mark Brown <broonie@kernel.org>
Jeeja KP [Mon, 6 Feb 2017 06:39:18 +0000 (12:09 +0530)]
ASoC: hdac_hdmi: Add support to handle MST capable pin
To handle jack event and configuration of the pin widget for MST
capable pin, this patch adds:
o Flag to identify the pin is MST capable.
o In notify callback(), based on the pipe and port information marks if
the port is mst_capable. In case of non MST, port is defaulted to zero.
Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Jeeja KP [Mon, 6 Feb 2017 06:39:14 +0000 (12:09 +0530)]
ASoC: hdac_hdmi: Begin to add support for DP Multi-stream audio
With MST each pin contains several ports to which device can be
connected.
As a preparatory work to support DP MST this patch adds below changes:
1. Defines the port structure and moves all stream related information
like ELD, converter list, chmap to port.
2. Creates ports for each pin based on the max_ports support.
3. Based on Pin-Port combination creates DAPM Mux widget instead of Pin
to allow user to select a converter.
4. Port zero is the default port when pin does not support MST.
Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Takashi Iwai [Wed, 8 Feb 2017 11:35:39 +0000 (12:35 +0100)]
ALSA: seq: Fix race at creating a queue
When a sequencer queue is created in snd_seq_queue_alloc(),it adds the
new queue element to the public list before referencing it. Thus the
queue might be deleted before the call of snd_seq_queue_use(), and it
results in the use-after-free error, as spotted by syzkaller.
The fix is to reference the queue object at the right time.
Takashi Iwai [Tue, 7 Feb 2017 15:17:06 +0000 (16:17 +0100)]
ALSA: x86: Cache AUD_CONFIG register value
At enabling the audio, we modify AUD_CONFIG register bit 0. So far,
it does read-modify-write procedure with a special hack for the
channel bits due to the silicon bug. But we can optimize it by
remembering the AUD_CONFIG register value privately. This simplifies
the things a lot.
Takashi Iwai [Tue, 7 Feb 2017 11:17:23 +0000 (12:17 +0100)]
ALSA: x86: Rearrange defines
We have two header files and everything is mixed up chaotically.
Move the chip-specific definitions like the hardware registers to
intel_hdmi_lpe_audio.h, and the rest, the implementation specific
stuff into intel_hdmi_audio.h.
In addition, put some more comments to the register fields, and fix
the incorrect name prefix for AUD_HDMI_STATUS bits, too.
The whole changes are merely a code shuffling, and there is no
functional change.
Arnd Bergmann [Tue, 7 Feb 2017 13:38:51 +0000 (14:38 +0100)]
ALSA: x86: mark hdmi suspend/resume functions as __maybe_unused
The two functions are unused when CONFIG_PM_SLEEP is disabled:
sound/x86/intel_hdmi_audio.c:1633:12: error: 'hdmi_lpe_audio_resume' defined but not used [-Werror=unused-function]
sound/x86/intel_hdmi_audio.c:1622:12: error: 'hdmi_lpe_audio_suspend' defined but not used [-Werror=unused-function]
Marking them as __maybe_unused avoids the warning without introducing an
ugly #ifdef.
Takashi Iwai [Tue, 7 Feb 2017 06:55:27 +0000 (07:55 +0100)]
ALSA: x86: Rename had_enable_audio_int() to had_ack_irqs()
had_enable_audio_int() came from the LPE audio shell set_caps
callback with ENABLE_INT and DISABLE_INT caps. I interpreted as these
correspond to enabling / disabling the audio interface, but the actual
implementation is only to clear (send ACK) to both BUFFER_DONE and
BUFFER_UNDERRUN interrupts unconditionally. And, there is no
counterpart, DISABLE_INT, code at all.
For avoiding the further misunderstanding, rename the function to the
more fitting one, had_ack_irqs(), and drop the calls with enable=false
in allover places. There is no functional changes at all.
After this patch, there is only one caller at the PCM trigger start.
Then it's doubtful whether this call is still really needed or not; I
bet it not, but let's stay in the safer side for now and keep it as
was.
Takashi Iwai [Tue, 7 Feb 2017 07:13:50 +0000 (08:13 +0100)]
ALSA: x86: Drop suspicious U24 format support
U24 format is declared to be supported by the driver, but this looks
really doubtful, as there is no corresponding code. Better to drop
it. This format is very uncommon, so there should be practically no
impact by this change.
The commit caused a regression on LINE6 Transport that has no control
caps. Although reverting the commit may result back in a spurious
error message for some device again, it's the simplest regression fix,
hence it's taken as is at first. The further code fix will follow
later.
Fixes: f6a0dd107ad0 ("ALSA: line6: Only determine control port properties if needed") Reported-by: Igor Zinovev <zinigor@gmail.com> Cc: <stable@vger.kernel.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Arnd Bergmann [Mon, 6 Feb 2017 12:27:11 +0000 (13:27 +0100)]
ASoC: fix ES8328_I2C/SPI dependencies
The two front-ends to the codec can now be selected individually, but fail to
build when the bus support is missing:
sound/built-in.o: In function `es8328_spi_probe':
es8328-spi.c:(.text+0x125854): undefined reference to `__devm_regmap_init_spi'
sound/built-in.o: In function `es8328_spi_driver_init':
es8328-spi.c:(.init.text+0x3589): undefined reference to `__spi_register_driver'
Related to this, the added dependency on SND_SOC_ES8328 breaks:
warning: (SND_SOC_ALL_CODECS) selects SND_SOC_ES8328_I2C which has unmet direct dependencies (SOUND && !M68K && !UML && SND && SND_SOC && SND_SOC_ES8328 && I2C)
This adds the respective Kconfig dependencies and changes SND_SOC_ES8328 to a hidden
symbol that is selected implicitly by the two more specific options, as we do for
some other codecs. We have to remove the 'depends on' for SND_SOC_IMX_ES8328 in the
same step to avoid a recursive dependency.
Fixes: aa00f2c8aff7 ("ASoC: Allow to select ES8328_I2C and ES8328_SPI directly") Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Mark Brown <broonie@kernel.org>
Takashi Iwai [Mon, 6 Feb 2017 14:09:48 +0000 (15:09 +0100)]
ALSA: seq: Don't handle loop timeout at snd_seq_pool_done()
snd_seq_pool_done() syncs with closing of all opened threads, but it
aborts the wait loop with a timeout, and proceeds to the release
resource even if not all threads have been closed. The timeout was 5
seconds, and if you run a crazy stuff, it can exceed easily, and may
result in the access of the invalid memory address -- this is what
syzkaller detected in a bug report.
As a fix, let the code graduate from naiveness, simply remove the loop
timeout.
Takashi Iwai [Thu, 2 Feb 2017 23:01:18 +0000 (00:01 +0100)]
ALSA: x86: Refactor PCM process engine
This is again a big rewrite of the driver; now it touches the code to
process PCM stream transfers.
The most fundamental change is that the driver may support more than
four periods. Instead of keeping the same index between both the ring
buffer (with the fixed four buffer descriptors) and the PCM buffer
periods, we keep difference indices for both (bd_head and pcm_head
fields). In addition, when the periods are more than four, we need to
track both head and next indices. That is, we now have three indices:
bd_head, pcm_head and pcm_filled.
Also, the driver works better for periods < 4, too: the remaining BDs
out of four are marked as invalid, so that the hardware skips those
BDs in its loop.
By this flexibility, we can use even ALSA-lib dmix plugin, which
requires 16 periods as default.
The buffer size could be up to 20bit, so the max buffer size was
increased accordingly. However, the buffer pre-allocation is kept as
the old value (600kB) as default. The reason is the limited number of
BDs: since it doesn't suffice for the useful SG page management that
can fit with the usual page allocator like some other drivers, we have
to still allocate continuous pages, hence we shouldn't take too big
memories there.
Takashi Iwai [Fri, 3 Feb 2017 07:50:06 +0000 (08:50 +0100)]
ALSA: x86: Don't check connection in lowlevel accessors
The lowlevel register read/write don't have to be careful about the
connection state. It should be checked in the caller side instead.
By dropping the check, we can simplify the code, and readability.
This patch also refacors the functions slightly: namely,
- drop the useless always-zero return values
- fold the inline functions to the main accessor functions themselves
- move the DP audio hack for AUD_CONFIG to the caller side
- simplify snd_intelhad_eanble_audio() and drop the unused
had_read_modify()
Linus Torvalds [Sat, 4 Feb 2017 20:18:01 +0000 (12:18 -0800)]
Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fixes from Thomas Gleixner:
- Prevent double activation of interrupt lines, which causes problems
on certain interrupt controllers
- Handle the fallout of the above because x86 (ab)uses the activation
function to reconfigure interrupts under the hood.
* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/irq: Make irq activate operations symmetric
irqdomain: Avoid activating interrupts more than once