summaryrefslogtreecommitdiffstats
path: root/sound/soc/intel
Commit message (Collapse)AuthorAgeFilesLines
*-. Merge remote-tracking branches 'asoc/topic/fsl-easi', 'asoc/topic/fsl-sai', ↵Mark Brown2014-10-066-37/+447
|\ \ | | | | | | | | | 'asoc/topic/fsl-ssi' and 'asoc/topic/intel' into asoc-next
| | * ASoC: Intel: byt-rt5640: fix coccinelle warningsFengguang Wu2014-10-041-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | sound/soc/intel/byt-rt5640.c:140:2-3: Unneeded semicolon Removes unneeded semicolon. Generated by: scripts/coccinelle/misc/semicolon.cocci Signed-off-by: Fengguang Wu <fengguang.wu@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * ASoC: Intel: byt-rt5640: Set card as fully routedJarkko Nikula2014-10-021-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Although it's not known does current version of byt-rt5640 cover all possible variants it is better to set the fully_routed flag on in order to disable unused codecs pins in known machines and get regression from machines that use different routing than the default one. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * ASoC: Intel: byt-rt5640: Add quirk for Dell Venue 8 Pro tabletJarkko Nikula2014-10-021-0/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It was found with help of Jan-Michael Brummer <jan.brummer@tabos.org> that Dell Venue 8 Pro tablet has a digital microphone connected to DMIC2 interface of the RT564x. This patch adds a DAPM route to DMIC2 and a quirk using it for that tablet. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Reported-by: Jan-Michael Brummer <jan.brummer@tabos.org> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * ASoC: Intel: byt-rt5640: Enable DMIC interface for default DAPM routeJarkko Nikula2014-10-011-3/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It turned out DMIC interface wasn't enabled/disabled runtime for active DMIC route in the rt5640 codec driver anymore after commit 71d97a794301 ("ASoC: rt5640: Use the platform data for DMIC settings"). Since DMIC interface must be enabled explicitly either by passing platform data to rt5640 codec driver or by calling new rt5640_dmic_enable() this patch adds a DMI quirk flag that is used to conditionally enable DMIC interface during sound card init time. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * ASoC: Intel: byt-rt5640: Add quirk for Asus T100Jarkko Nikula2014-09-291-1/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Asus T100 internal microphone is not digital but analogue connected to IN1P pin of the RT564x codec with shared bias between internal and headset microphones. Because of this there is need to have machine specific DAPM routes in byt-rt5640. Add handling for them with the help of DMI quirk that is used to add custom routes in addition to common. Because "Internal Mic" connected to DMIC1 is not common to all move it as a default custom route when there is no match in quirk table. Custom "Internal Mic" -> "IN1P" with MICBIAS1 route is added for Asus T100. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * ASoC: Intel: byt-rt5640: Remove IN2N pin from DAPM route tableJarkko Nikula2014-09-291-1/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I tested couple byt-rt5640 based platforms and they have single-ended headset microphone connection to IN2P only. I guess IN2N was either defined by accident or some early platform had floating ground for headset. It's better to remove IN2N and add a custom route for such a platform if needed. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * ASoC: Intel: byt-max98090: Set card as fully routedJarkko Nikula2014-09-281-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | All byt-max98090 audio connections are known and described in DAPM routing table. Set the fully_routed flag in order to disable unused codec pins. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * ASoC: Intel: mfld-pcm: add control for powering up/down dspVinod Koul2014-09-252-8/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we have PCM (FE/BE) opened or DAPM widgets triggered we need power up/down DSP accordingly. The DSP will do ref count of these requests i.e. link these runtime_get/put calls of DSP Also fix some preexisting spacing error. 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: mrfld: Use snd_soc_dai_get_drvdata to derive drv dataSubhransu S. Prusty2014-09-161-6/+6
| | | | | | | | | | | | | | | | | | Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
| | * ASoC: Intel: mrfld: add bytes control for modulesVinod Koul2014-09-163-1/+310
| | | | | | | | | | | | | | | | | | | | | | | | | | | This patch add support for various modules like eq etc for mrfld DSP. All these modules will be exposed to usermode as bytes controls. 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: mfld-pcm: don't call trigger ops to DSP for internal streamsVinod Koul2014-09-161-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | For internal stream i.e. BE we have don't need trigger ops as that would be handled by DAPM for us in subsequent patches 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: mfld: pcm: Replace pr_ with dev_Subhransu S. Prusty2014-09-061-21/+23
| | | | | | | | | | | | | | | | | | Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
* | | Merge remote-tracking branch 'asoc/topic/component' into asoc-nextMark Brown2014-10-067-84/+429
|\ \ \ | | |/ | |/|
| * | ASoC: sst-haswell-pcm: Move controls and DAPM elements to componentLars-Peter Clausen2014-09-061-17/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The sst-haswell-pcm driver registers both a snd_soc_component and a snd_soc_platform and expects that the DAPM widgets for the DAIs registered by component are added to the DAPM context of the platform. This requires us to have a hack in the ASoC core which does so. Moving the DAPM elements over to the component allows us to remove this hack. While we are at it also move the controls over to the component. The controls don't need the platform for anything other than snd_soc_platform_get_drvdata(), this can easily be replaced by snd_soc_component_get_drvdata(). As the long term goal is to register only a single component this is a step in the right direction. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: sst-haswell-pcm: Alloc state struct in driver probe()Lars-Peter Clausen2014-09-061-11/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Resource allocations should happen in driver probe callback rather than in snd_soc_platform probe functions. Especially if the resource is device managed. The snd_soc_* probe/remove functions are mainly intended to be used for things that require the component to be already bound to a card. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: mfld-compress: Use dedicated function instead of ioctlSubhransu S. Prusty2014-08-272-19/+46
| | | | | | | | | | | | | | | | | | | | | | | | | | | Also pass sst device as an argument to function pointer prototypes of compr_ops. This will be used to derive sst driver context. Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: add mrfld DSP definesVinod Koul2014-08-165-4/+335
| | | | | | | | | | | | | | | | | | | | | | | | We define the DSP commands,structures here which will be used to send the IPCs 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@linaro.org>
| * | ASoC: Intel: mfld-pcm: Change sst_ops prototypes to take dev parameterSubhransu S. Prusty2014-08-162-19/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | sst_ops need to use the sst driver context. So pass sst device as argument, which can be used to retrieve sst context. Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: mfld-pcm: Use function instead of ioctlSubhransu S. Prusty2014-08-162-25/+15
| | | | | | | | | | | | | | | | | | Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Fix to use byte control interfaceVinod Koul2014-08-161-4/+2
| |/ | | | | | | | | | | | | | | Using a byte control interface instead of generic_params ioctl. Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
* | Merge remote-tracking branches 'asoc/fix/arizona', 'asoc/fix/fsl', ↵Mark Brown2014-08-154-40/+18
|\ \ | |/ |/| | | 'asoc/fix/fsl-esai', 'asoc/fix/intel', 'asoc/fix/mcasp' and 'asoc/fix/pxa' into asoc-linus
| * ASoC: Intel: Restore Baytrail ADSP streams only when ADSP was in resetJarkko Nikula2014-08-111-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There is no need to restore and restart PCM streams in case ADSP didn't reach reset and power off state during system suspend/resume cycle. In that case stream is still active but paused and firmware doesn't allow allocating a new stream before paused stream is freed. ADSP remains active in case suspend sequence didn't go to suspend_late stage. This can happen when either suspend sequence is aborted by a wakeup or by letting only devices suspend by "echo devices >/sys/power/pm_test". Currently stream restoring fails in these suspend cases. Fix this by adding a flag that indicates is complete stream reinitialization needed or is it enough to resume paused stream. Flag is set when we know that ADSP reached suspend_late. Initial fix to this issue came from Fang Yang. I modified it a little and forward ported it to top of two other suspend/resume patches from me. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Tested-by: Borun Fu <borun.fu@intel.com> Cc: yang fang <yang.a.fang@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * ASoC: Intel: Wait Baytrail ADSP boot at resume_early stageJarkko Nikula2014-08-111-9/+4
| | | | | | | | | | | | | | | | | | | | | | | | Remove sst_byt_pcm_dev_resume() and move waiting of firmware boot into sst_byt_pcm_dev_resume_early(). Now suspend_late and resume_early phases are in sync with each other so that we know that ADSP was put into reset and was unpowered after suspend_late and is ready to resume IO after resume_early during resume stage in sst_byt_pcm_trigger(). Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Tested-by: Borun Fu <borun.fu@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * ASoC: Intel: Merge Baytrail ADSP suspend_noirq into suspend_lateJarkko Nikula2014-08-113-28/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Merge DSP reset and cleanup sequence in sst_byt_pcm_dev_suspend_noirq() into sst_byt_pcm_dev_suspend_late(). First their order was wrong by first unloading firmware modules in suspend_late and then taking DSP into reset in suspend_noirq. Second ACPI has put device into OFF state already during suspend_late so trying to reset the DSP is a no-op at suspend_noirq stage. Fix these by moving DSP reset and cleanup into sst_byt_pcm_dev_suspend_late() before firmware unloading. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Tested-by: Borun Fu <borun.fu@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * ASoC: Intel: Update Baytrail ADSP firmware nameJarkko Nikula2014-08-061-2/+2
| | | | | | | | | | | | | | | | | | Update the initial Baytrail ADSP firmware file name with the one that is now in linux-firmware.git. Please see linux-firmware.git commit 7551a3a78453 ("fw_sst_0f28: Add firmware for Intel Baytrail SST DSP"). Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| |
| \
*-. \ Merge remote-tracking branches 'asoc/topic/intel', 'asoc/topic/kirkwood', ↵Mark Brown2014-08-0415-150/+1118
|\ \ \ | |_|/ |/| | | | | 'asoc/topic/max98090' and 'asoc/topic/mc13783' into asoc-next
| * | ASoC: Intel: update stream only on stream IPC msgsPaweł Piskorski2014-08-011-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | Only update the stream when the IPC message type matches stream type. Signed-off-by: Paweł Piskorski <pawel.piskorski@intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Don't issue ipc when processing responsePaweł Piskorski2014-08-011-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | Make sure we dont issue IPC when we are processing a response. Signed-off-by: Paweł Piskorski <pawel.piskorski@intel.com> Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Delete message when IPC timeout occursLiam Girdwood2014-08-011-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | This fixes a bug where we dont delete the current message when an IPC message timeout occurs. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Add dependency to DW_DMAC for BDW platformJie Yang2014-08-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Add dependency to DW_DMAC for broadwell machine, which have built in DW dma engines. Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: mfld-pcm: Allocate platform dataSubhransu S. Prusty2014-07-311-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | Platform data may be null during platform_device_add. Allocate platform data before using. Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: mfld-pcm: Fix to use correct sst_data pointerSubhransu S. Prusty2014-07-311-1/+1
| | | | | | | | | | | | | | | | | | Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Check ops before we derefference pointers.Liam Girdwood2014-07-301-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | Check ops pointer members before we can derefference them. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Add debug to set DX stateLiam Girdwood2014-07-301-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | Add some debugging info to help with Dx state debug. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Add notification trace for reset.Liam Girdwood2014-07-301-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | Add trace notification of IPC stream reset. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Add macros for SST shim register bits.Liam Girdwood2014-07-301-0/+27
| | | | | | | | | | | | | | | | | | | | | | | | Add some register definitions for other shim register bits. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Fix naming of HMDC register macros.Liam Girdwood2014-07-302-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | HMDC is the correct naming for this register. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Add Broadwell Machine supportLiam Girdwood2014-07-163-0/+265
| | | | | | | | | | | | | | | | | | | | | | | | Add support for Broadwell based machines with SST DSP audio. Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com> Signed-off-by: Jie Yang <yang.jie@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Update FW version readbackJie Yang2014-07-161-3/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | Update FW version readback. IPC_GLB_GET_FW_VERSION reads back the ABI version whilst the release version is in the mailbox. Update to use mailbox version for info logging. Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: intel: Cleanup useless ACPI inclusion.Lv Zheng2014-07-161-3/+0
| | | | | | | | | | | | | | | | | | | | | | | | The sst-haswell-dsp.c is an ACPI independent file, this patch removes ACPI header files for it. Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: mfld: add generic parameter interfaceVinod Koul2014-07-141-1/+4
| | | | | | | | | | | | | | | | | | | | | This interface will be used by subsequent patches to set/get parameters from DSP Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: mfld: add dsp error codesVinod Koul2014-07-141-0/+15
| | | | | | | | | | | | | | | | | | | | | DSP returns error codes for IPC return so add them in driver Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: add sst shim register start-end variablesVinod Koul2014-07-141-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | the shim registers start and end can be useful while parsing the shim addresses, so add these Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Start with all memory banks disabledJie Yang2014-07-141-2/+3
| | | | | | | | | | | | | | | | | | | | | All required banks are enabled during boot procedure. Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Use a table for ADSP SRAM shiftJie Yang2014-07-141-10/+29
| | | | | | | | | | | | | | | | | | | | | Use a table for ADSP IRAM/DRAM bit shift. Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: Merge wild cat point ADSP DRAM regionsJie Yang2014-07-141-3/+1
| | | | | | | | | | | | | | | | | | | | | Merge D-SRAM0 D-SRAM1 D-SRAM2 to D-SRAM, for wild cat point ADSP mem regions. Signed-off-by: Jie Yang <yang.jie@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: byt-max98090: Do not change speaker and DMIC with jack stateJarkko Nikula2014-06-241-8/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Kernel should not enable/disable speakers and digital microphone whenever jack is inserted/removed. This is more use-case than kernel specific decision. For instance one may want to play VoIP ring tones using both speakers and headphone but play music only from one of them. Because of above reason remove "Ext Spk" and "Int Mic" update when jack state is changed. Also this update was illogical anyway: "Ext Spk" was enabled when jack was inserted and disabled when jack was removed. Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: use common stream allocation method for compressed streamVinod Koul2014-06-232-7/+11
| | | | | | | | | | | | | | | | | | | | | | | | As added in previosu patch along with stream to piep conversion si required for compressed audio too Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
| * | ASoC: Intel: add mrfld pipelinesVinod Koul2014-06-233-9/+139
| | | | | | | | | | | | | | | | | | | | | | | | | | | Merrifield DSP used various pipelines to identify the streams and processing modules. Add these defination in the pcm driver and also add a table for device entries to firmware pipeline id conversion Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@linaro.org>
OpenPOWER on IntegriCloud