Merge tag 'sound-5.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound updates from Takashi Iwai: "This became again a busy development cycle. There are few ALSA core updates (merely API cleanups and sparse fixes), with the majority of other changes are found in ASoC scene. Here are some highlights: ALSA core: - More helper macros for sparse warning fixes (e.g. bitwise types) - Slight optimization of PCM OSS locks - Make common handling for PCM / compress buffers (for SOF) ASoC: - Lots of code refactoring and modernization for (still ongoing) componentization works - Conversion of SND_SOC_ALL_CODECS to use imply - Continued refactoring and fixing of the Intel SOF/SST support, including the initial (but still incomplete) SoundWire support - SoundWire and more advanced clocking support for Realtek RT5682 - Support for amlogic GX, Meson 8, Meson 8B and T9015 DAC, Broadcom DSL/PON, Ingenic JZ4760 and JZ4770, Realtek RL6231, and TI TAS2563 and TLV320ADCX140 HD-audio: - Optimizations in HDMI jack handling - A few new quirks and fixups for Realtek codecs USB-audio: - Delayed registration support - New quirks for Motu, Kingston, Presonus" * tag 'sound-5.7-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (415 commits) ALSA: usb-audio: Fix case when USB MIDI interface has more than one extra endpoint descriptor Revert "ALSA: uapi: Drop asound.h inclusion from asoc.h" ALSA: hda/realtek - Remove now-unnecessary XPS 13 headphone noise fixups ALSA: hda/realtek - Set principled PC Beep configuration for ALC256 ALSA: doc: Document PC Beep Hidden Register on Realtek ALC256 ALSA: hda/realtek - a fake key event is triggered by running shutup ALSA: hda: default enable CA0132 DSP support ASoC: amd: acp3x-pcm-dma: clean up two indentation issues ASoC: tlv320adcx140: Remove undocumented property ASoC: Intel: sof_sdw: Add Volteer support with RT5682 SNDW helper function ASoC: Intel: common: add match table for TGL RT5682 SoundWire driver ASoC: Intel: boards: add sof_sdw machine driver ASoC: Intel: soc-acpi: update topology and driver name for SoundWire platforms ASoC: rt5682: move DAI clock registry to I2S mode ASoC: pxa: magician: convert to use i2c_new_client_device() ASoC: SOF: Intel: hda-ctrl: add reset cycle before parsing capabilities Asoc: SOF: Intel: hda: check SoundWire wakeen interrupt in irq thread ASoC: SOF: Intel: hda: add WAKEEN interrupt support for SoundWire ASoC: SOF: Intel: hda: add parameter to control SoundWire clock stop quirks ASoC: SOF: Intel: hda: merge IPC, stream and SoundWire interrupt handlers ...
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
#include <linux/io.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mfd/syscon.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_gpio.h>
|
||||
@@ -169,6 +170,9 @@ struct mtk_hdmi {
|
||||
bool audio_enable;
|
||||
bool powered;
|
||||
bool enabled;
|
||||
hdmi_codec_plugged_cb plugged_cb;
|
||||
struct device *codec_dev;
|
||||
struct mutex update_plugged_status_lock;
|
||||
};
|
||||
|
||||
static inline struct mtk_hdmi *hdmi_ctx_from_bridge(struct drm_bridge *b)
|
||||
@@ -1194,13 +1198,26 @@ static void mtk_hdmi_clk_disable_audio(struct mtk_hdmi *hdmi)
|
||||
clk_disable_unprepare(hdmi->clk[MTK_HDMI_CLK_AUD_SPDIF]);
|
||||
}
|
||||
|
||||
static enum drm_connector_status
|
||||
mtk_hdmi_update_plugged_status(struct mtk_hdmi *hdmi)
|
||||
{
|
||||
bool connected;
|
||||
|
||||
mutex_lock(&hdmi->update_plugged_status_lock);
|
||||
connected = mtk_cec_hpd_high(hdmi->cec_dev);
|
||||
if (hdmi->plugged_cb && hdmi->codec_dev)
|
||||
hdmi->plugged_cb(hdmi->codec_dev, connected);
|
||||
mutex_unlock(&hdmi->update_plugged_status_lock);
|
||||
|
||||
return connected ?
|
||||
connector_status_connected : connector_status_disconnected;
|
||||
}
|
||||
|
||||
static enum drm_connector_status hdmi_conn_detect(struct drm_connector *conn,
|
||||
bool force)
|
||||
{
|
||||
struct mtk_hdmi *hdmi = hdmi_ctx_from_conn(conn);
|
||||
|
||||
return mtk_cec_hpd_high(hdmi->cec_dev) ?
|
||||
connector_status_connected : connector_status_disconnected;
|
||||
return mtk_hdmi_update_plugged_status(hdmi);
|
||||
}
|
||||
|
||||
static void hdmi_conn_destroy(struct drm_connector *conn)
|
||||
@@ -1657,20 +1674,39 @@ static int mtk_hdmi_audio_get_eld(struct device *dev, void *data, uint8_t *buf,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mtk_hdmi_audio_hook_plugged_cb(struct device *dev, void *data,
|
||||
hdmi_codec_plugged_cb fn,
|
||||
struct device *codec_dev)
|
||||
{
|
||||
struct mtk_hdmi *hdmi = data;
|
||||
|
||||
mutex_lock(&hdmi->update_plugged_status_lock);
|
||||
hdmi->plugged_cb = fn;
|
||||
hdmi->codec_dev = codec_dev;
|
||||
mutex_unlock(&hdmi->update_plugged_status_lock);
|
||||
|
||||
mtk_hdmi_update_plugged_status(hdmi);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct hdmi_codec_ops mtk_hdmi_audio_codec_ops = {
|
||||
.hw_params = mtk_hdmi_audio_hw_params,
|
||||
.audio_startup = mtk_hdmi_audio_startup,
|
||||
.audio_shutdown = mtk_hdmi_audio_shutdown,
|
||||
.digital_mute = mtk_hdmi_audio_digital_mute,
|
||||
.get_eld = mtk_hdmi_audio_get_eld,
|
||||
.hook_plugged_cb = mtk_hdmi_audio_hook_plugged_cb,
|
||||
};
|
||||
|
||||
static void mtk_hdmi_register_audio_driver(struct device *dev)
|
||||
static int mtk_hdmi_register_audio_driver(struct device *dev)
|
||||
{
|
||||
struct mtk_hdmi *hdmi = dev_get_drvdata(dev);
|
||||
struct hdmi_codec_pdata codec_data = {
|
||||
.ops = &mtk_hdmi_audio_codec_ops,
|
||||
.max_i2s_channels = 2,
|
||||
.i2s = 1,
|
||||
.data = hdmi,
|
||||
};
|
||||
struct platform_device *pdev;
|
||||
|
||||
@@ -1678,9 +1714,10 @@ static void mtk_hdmi_register_audio_driver(struct device *dev)
|
||||
PLATFORM_DEVID_AUTO, &codec_data,
|
||||
sizeof(codec_data));
|
||||
if (IS_ERR(pdev))
|
||||
return;
|
||||
return PTR_ERR(pdev);
|
||||
|
||||
DRM_INFO("%s driver bound to HDMI\n", HDMI_CODEC_DRV_NAME);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mtk_drm_hdmi_probe(struct platform_device *pdev)
|
||||
@@ -1706,6 +1743,7 @@ static int mtk_drm_hdmi_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
mutex_init(&hdmi->update_plugged_status_lock);
|
||||
platform_set_drvdata(pdev, hdmi);
|
||||
|
||||
ret = mtk_hdmi_output_init(hdmi);
|
||||
@@ -1714,7 +1752,11 @@ static int mtk_drm_hdmi_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
mtk_hdmi_register_audio_driver(dev);
|
||||
ret = mtk_hdmi_register_audio_driver(dev);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to register audio driver: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
hdmi->bridge.funcs = &mtk_hdmi_bridge_funcs;
|
||||
hdmi->bridge.of_node = pdev->dev.of_node;
|
||||
|
Reference in New Issue
Block a user