From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,T_DKIMWL_WL_HIGH,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BBCBAC04AB6 for ; Mon, 3 Jun 2019 08:54:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7D73827DD1 for ; Mon, 3 Jun 2019 08:54:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="M5LBwXeW" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727846AbfFCIyY (ORCPT ); Mon, 3 Jun 2019 04:54:24 -0400 Received: from mail-vk1-f193.google.com ([209.85.221.193]:40655 "EHLO mail-vk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726604AbfFCIyY (ORCPT ); Mon, 3 Jun 2019 04:54:24 -0400 Received: by mail-vk1-f193.google.com with SMTP id s16so1321236vke.7 for ; Mon, 03 Jun 2019 01:54:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=wdJEk7xoPcDvx0rL8FHQp9oPvWZRTtNsGybP0RtSagY=; b=M5LBwXeW8e3O+PDSsi9zCXscQ8y1vbRUSJsU1dQVFrSJjRzc0XEsTIijLOFvdIySua +OCo46JIId3hfB8wKxv+MCF7fVRzIDejRA2kyMLDpDQwCzug1Ciird69sGvwMmk1d8Mo XsEJ3E2hVFq6TKZA01pfKGQ+jF0WA1WjOA96Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=wdJEk7xoPcDvx0rL8FHQp9oPvWZRTtNsGybP0RtSagY=; b=IjslDn+fZQL0ve1hToPEqnB9pTAjV0lEKD5MNci6ZFpYadqI7BEvEnL/gImuySo5by R2g0FPnMZvFVMu+yFNhwDE5cPWEQONwaJMpyQtrcMXWMo57otRfwnlIn7K8xw5uyyH/S RCsiZzaxwoHnkrx3RnvE1uE8dS4A6iSo1trQryGR7W/ThZCN5WcQCkrneNnt2N7dnc5B phpTMdvwqAsPYwVKcVUyCWBYjodWVf/ti/srWNNHj4AO7+Zd/UUME8WCFipl/33toFzE B6MNqG24Ok0Zx+/EAbROt3gekZA0+Dacz1E2XNEZMb4u1nnJb+D8FUqDuyXeac1Q8rf1 QVfQ== X-Gm-Message-State: APjAAAV0s/HDzHjGdzRyyLeWM1gmPF5QEk4lDfmkB5+PtP77JDV/JjyP eEUbxoI8O/orSmVDIUwtbwJoOIKWsDfp3MoGt7DgJg== X-Google-Smtp-Source: APXvYqzW5LQtHHySgqxIQwZwXTkV349/aO/EZ86HUpABwdgeY6YY1BGiVYaBh3z0RzEL+55rfLwERjYPN8UokbeRX/Y= X-Received: by 2002:a1f:a003:: with SMTP id j3mr5105438vke.74.1559552062071; Mon, 03 Jun 2019 01:54:22 -0700 (PDT) MIME-Version: 1.0 References: <20190603043251.226549-1-cychiang@chromium.org> <20190603043251.226549-3-cychiang@chromium.org> <20190603100301.00d68690@xxx> In-Reply-To: <20190603100301.00d68690@xxx> From: Cheng-yi Chiang Date: Mon, 3 Jun 2019 16:53:55 +0800 Message-ID: Subject: Re: [alsa-devel] [PATCH 2/7] ASoC: hdmi-codec: use HDMI state notifier to add jack support To: =?UTF-8?B?QW1hZGV1c3ogU8WCYXdpxYRza2k=?= Cc: linux-kernel , "moderated list:SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEM..." , Heiko Stuebner , David Airlie , dri-devel@lists.freedesktop.org, Liam Girdwood , Hans Verkuil , Andrzej Hajda , Laurent Pinchart , Takashi Iwai , linux-rockchip@lists.infradead.org, Dylan Reid , linux-media@vger.kernel.org, devicetree@vger.kernel.org, tzungbi@chromium.org, Philipp Zabel , Bartlomiej Zolnierkiewicz , Russell King , Rob Herring , linux-arm-kernel@lists.infradead.org, Greg Kroah-Hartman , Doug Anderson , Mark Brown , Daniel Vetter Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 3, 2019 at 3:59 PM Amadeusz S=C5=82awi=C5=84ski wrote: > > On Mon, 3 Jun 2019 12:32:46 +0800 > Cheng-Yi Chiang wrote: > > > From: Philipp Zabel > > > > Use HDMI connection / disconnection notifications to update an ALSA > > jack object. Also make a copy of the ELD block after every change. > > > > This was posted by Philipp Zabel at > > > > https://patchwork.kernel.org/patch/9430747/ > > > > Modified by Cheng-Yi Chiang: > > - Fix the conflict of removed hdmi_codec_remove ops. > > - Other minor fix for the conflict with latest hdmi-codec on ASoC > > for-next tree. > > > > Signed-off-by: Philipp Zabel > > Signed-off-by: Cheng-Yi Chiang > > --- > > The original patch is at https://patchwork.kernel.org/patch/9430747/ > > I could not find the LKML link for the patch. > > > > include/sound/hdmi-codec.h | 7 +++ > > sound/soc/codecs/Kconfig | 1 + > > sound/soc/codecs/hdmi-codec.c | 104 > > +++++++++++++++++++++++++++++++++- 3 files changed, 110 > > insertions(+), 2 deletions(-) > > > > diff --git a/include/sound/hdmi-codec.h b/include/sound/hdmi-codec.h > > index 9483c55f871b..4fa39c93363f 100644 > > --- a/include/sound/hdmi-codec.h > > +++ b/include/sound/hdmi-codec.h > > @@ -107,6 +107,13 @@ struct hdmi_codec_pdata { > > void *data; > > }; > > > > +struct snd_soc_component; > > +struct snd_soc_jack; > > + > > +int hdmi_codec_set_jack_detect(struct snd_soc_component *component, > > + struct snd_soc_jack *jack, > > + struct device *dev); > > + > > #define HDMI_CODEC_DRV_NAME "hdmi-audio-codec" > > > > #endif /* __HDMI_CODEC_H__ */ > > diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig > > index 8f577258080b..f5f6dd04234c 100644 > > --- a/sound/soc/codecs/Kconfig > > +++ b/sound/soc/codecs/Kconfig > > @@ -639,6 +639,7 @@ config SND_SOC_HDMI_CODEC > > select SND_PCM_ELD > > select SND_PCM_IEC958 > > select HDMI > > + select HDMI_NOTIFIERS > > > > config SND_SOC_ES7134 > > tristate "Everest Semi ES7134 CODEC" > > diff --git a/sound/soc/codecs/hdmi-codec.c > > b/sound/soc/codecs/hdmi-codec.c index 6a0cc8d7e141..fe796a7475a5 > > 100644 --- a/sound/soc/codecs/hdmi-codec.c > > +++ b/sound/soc/codecs/hdmi-codec.c > > @@ -12,9 +12,12 @@ > > * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See > > the GNU > > * General Public License for more details. > > */ > > +#include > > #include > > +#include > > #include > > #include > > +#include > > #include > > #include > > #include > > @@ -282,6 +285,13 @@ struct hdmi_codec_priv { > > struct snd_pcm_chmap *chmap_info; > > unsigned int chmap_idx; > > struct mutex lock; > > + struct snd_soc_jack *jack; > > + /* Lock to protect setting and getting eld. */ > > + struct mutex eld_lock; > > + struct device *dev; > > + struct hdmi_notifier *notifier; > > + struct notifier_block nb; > > + unsigned int jack_status; > > }; > > > > static const struct snd_soc_dapm_widget hdmi_widgets[] =3D { > > @@ -308,7 +318,9 @@ static int hdmi_eld_ctl_get(struct snd_kcontrol > > *kcontrol, struct snd_soc_component *component =3D > > snd_kcontrol_chip(kcontrol); struct hdmi_codec_priv *hcp =3D > > snd_soc_component_get_drvdata(component); > > + mutex_lock(&hcp->eld_lock); > > memcpy(ucontrol->value.bytes.data, hcp->eld, > > sizeof(hcp->eld)); > > + mutex_unlock(&hcp->eld_lock); > > > > return 0; > > } > > @@ -393,7 +405,7 @@ static int hdmi_codec_startup(struct > > snd_pcm_substream *substream, struct snd_soc_dai *dai) > > { > > struct hdmi_codec_priv *hcp =3D snd_soc_dai_get_drvdata(dai); > > - int ret =3D 0; > > + int ret; > > > > ret =3D mutex_trylock(&hcp->lock); > > if (!ret) { > > @@ -408,9 +420,9 @@ static int hdmi_codec_startup(struct > > snd_pcm_substream *substream, } > > > > if (hcp->hcd.ops->get_eld) { > > + mutex_lock(&hcp->eld_lock); > > ret =3D hcp->hcd.ops->get_eld(dai->dev->parent, > > hcp->hcd.data, hcp->eld, sizeof(hcp->eld)); > > - > > if (!ret) { > > ret =3D > > snd_pcm_hw_constraint_eld(substream->runtime, hcp->eld); > > Seems to me like you missed unlock here. There is return inside this > if(). > Thanks for checking! The latest patch on hdmi-codec.c on ASoC tree has a change to replace that return to goto err. https://patchwork.kernel.org/patch/10930875/ My patch is based on that so it should be okay. Thanks! > > @@ -419,6 +431,7 @@ static int hdmi_codec_startup(struct > > snd_pcm_substream *substream, } > > /* Select chmap supported */ > > hdmi_codec_eld_chmap(hcp); > > + mutex_unlock(&hcp->eld_lock); > > } > > return 0; > > > > @@ -747,6 +760,77 @@ static const struct snd_soc_component_driver > > hdmi_driver =3D { .non_legacy_dai_naming =3D 1, > > }; > > > > +static void hdmi_codec_jack_report(struct hdmi_codec_priv *hcp, > > + unsigned int jack_status) > > +{ > > + if (!hcp->jack) > > + return; > > + > > + if (jack_status !=3D hcp->jack_status) { > > + snd_soc_jack_report(hcp->jack, jack_status, > > SND_JACK_LINEOUT); > > + hcp->jack_status =3D jack_status; > > + } > > +} > > + > > +static int hdmi_codec_notify(struct notifier_block *nb, unsigned > > long event, > > + void *data) > > +{ > > + struct hdmi_codec_priv *hcp =3D container_of(nb, struct > > hdmi_codec_priv, > > + nb); > > + struct hdmi_notifier *n =3D data; > > + > > + if (!hcp->jack) > > + return NOTIFY_OK; > > + > > + switch (event) { > > + case HDMI_NEW_ELD: > > + mutex_lock(&hcp->eld_lock); > > + memcpy(hcp->eld, n->eld, sizeof(hcp->eld)); > > + mutex_unlock(&hcp->eld_lock); > > + /* fall through */ > > + case HDMI_CONNECTED: > > + hdmi_codec_jack_report(hcp, SND_JACK_LINEOUT); > > + break; > > + case HDMI_DISCONNECTED: > > + hdmi_codec_jack_report(hcp, 0); > > + break; > > + } > > + > > + return NOTIFY_OK; > > +} > > + > > +/** > > + * hdmi_codec_set_jack_detect - register HDMI state notifier callback > > + * @component: the hdmi-codec instance > > + * @jack: ASoC jack to report (dis)connection events on > > + * @dev: hdmi_notifier device, usually HDMI_TX or CEC device > > + */ > > +int hdmi_codec_set_jack_detect(struct snd_soc_component *component, > > + struct snd_soc_jack *jack, > > + struct device *dev) > > +{ > > + struct hdmi_codec_priv *hcp =3D > > snd_soc_component_get_drvdata(component); > > + int ret; > > + > > + hcp->notifier =3D hdmi_notifier_get(dev); > > + if (!hcp->notifier) > > + return -ENOMEM; > > + > > + hcp->jack =3D jack; > > + hcp->nb.notifier_call =3D hdmi_codec_notify; > > + ret =3D hdmi_notifier_register(hcp->notifier, &hcp->nb); > > + if (ret) > > + goto err_notifier_put; > > + > > + return 0; > > + > > +err_notifier_put: > > + hdmi_notifier_put(hcp->notifier); > > + hcp->notifier =3D NULL; > > + return ret; > > +} > > +EXPORT_SYMBOL_GPL(hdmi_codec_set_jack_detect); > > + > > static int hdmi_codec_probe(struct platform_device *pdev) > > { > > struct hdmi_codec_pdata *hcd =3D pdev->dev.platform_data; > > @@ -774,6 +858,7 @@ static int hdmi_codec_probe(struct > > platform_device *pdev) > > hcp->hcd =3D *hcd; > > mutex_init(&hcp->lock); > > + mutex_init(&hcp->eld_lock); > > > > daidrv =3D devm_kcalloc(dev, dai_count, sizeof(*daidrv), > > GFP_KERNEL); if (!daidrv) > > @@ -797,6 +882,20 @@ static int hdmi_codec_probe(struct > > platform_device *pdev) __func__, ret); > > return ret; > > } > > + > > + hcp->dev =3D dev; > > + > > + return 0; > > +} > > + > > +static int hdmi_codec_remove(struct platform_device *pdev) > > +{ > > + struct hdmi_codec_priv *hcp =3D platform_get_drvdata(pdev); > > + > > + if (hcp->notifier) { > > + hdmi_notifier_unregister(hcp->notifier, &hcp->nb); > > + hdmi_notifier_put(hcp->notifier); > > + } > > return 0; > > } > > > > @@ -805,6 +904,7 @@ static struct platform_driver hdmi_codec_driver =3D > > { .name =3D HDMI_CODEC_DRV_NAME, > > }, > > .probe =3D hdmi_codec_probe, > > + .remove =3D hdmi_codec_remove, > > }; > > > > module_platform_driver(hdmi_codec_driver); > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Cheng-yi Chiang Subject: Re: [alsa-devel] [PATCH 2/7] ASoC: hdmi-codec: use HDMI state notifier to add jack support Date: Mon, 3 Jun 2019 16:53:55 +0800 Message-ID: References: <20190603043251.226549-1-cychiang@chromium.org> <20190603043251.226549-3-cychiang@chromium.org> <20190603100301.00d68690@xxx> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20190603100301.00d68690@xxx> Sender: linux-kernel-owner@vger.kernel.org To: =?UTF-8?B?QW1hZGV1c3ogU8WCYXdpxYRza2k=?= Cc: linux-kernel , "moderated list:SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEM..." , Heiko Stuebner , David Airlie , dri-devel@lists.freedesktop.org, Liam Girdwood , Hans Verkuil , Andrzej Hajda , Laurent Pinchart , Takashi Iwai , linux-rockchip@lists.infradead.org, Dylan Reid , linux-media@vger.kernel.org, devicetree@vger.kernel.org, tzungbi@chromium.org, Philipp Zabel , Bartlomiej Zolnierkiewicz , Russell King , Rob Herring l List-Id: devicetree@vger.kernel.org On Mon, Jun 3, 2019 at 3:59 PM Amadeusz S=C5=82awi=C5=84ski wrote: > > On Mon, 3 Jun 2019 12:32:46 +0800 > Cheng-Yi Chiang wrote: > > > From: Philipp Zabel > > > > Use HDMI connection / disconnection notifications to update an ALSA > > jack object. Also make a copy of the ELD block after every change. > > > > This was posted by Philipp Zabel at > > > > https://patchwork.kernel.org/patch/9430747/ > > > > Modified by Cheng-Yi Chiang: > > - Fix the conflict of removed hdmi_codec_remove ops. > > - Other minor fix for the conflict with latest hdmi-codec on ASoC > > for-next tree. > > > > Signed-off-by: Philipp Zabel > > Signed-off-by: Cheng-Yi Chiang > > --- > > The original patch is at https://patchwork.kernel.org/patch/9430747/ > > I could not find the LKML link for the patch. > > > > include/sound/hdmi-codec.h | 7 +++ > > sound/soc/codecs/Kconfig | 1 + > > sound/soc/codecs/hdmi-codec.c | 104 > > +++++++++++++++++++++++++++++++++- 3 files changed, 110 > > insertions(+), 2 deletions(-) > > > > diff --git a/include/sound/hdmi-codec.h b/include/sound/hdmi-codec.h > > index 9483c55f871b..4fa39c93363f 100644 > > --- a/include/sound/hdmi-codec.h > > +++ b/include/sound/hdmi-codec.h > > @@ -107,6 +107,13 @@ struct hdmi_codec_pdata { > > void *data; > > }; > > > > +struct snd_soc_component; > > +struct snd_soc_jack; > > + > > +int hdmi_codec_set_jack_detect(struct snd_soc_component *component, > > + struct snd_soc_jack *jack, > > + struct device *dev); > > + > > #define HDMI_CODEC_DRV_NAME "hdmi-audio-codec" > > > > #endif /* __HDMI_CODEC_H__ */ > > diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig > > index 8f577258080b..f5f6dd04234c 100644 > > --- a/sound/soc/codecs/Kconfig > > +++ b/sound/soc/codecs/Kconfig > > @@ -639,6 +639,7 @@ config SND_SOC_HDMI_CODEC > > select SND_PCM_ELD > > select SND_PCM_IEC958 > > select HDMI > > + select HDMI_NOTIFIERS > > > > config SND_SOC_ES7134 > > tristate "Everest Semi ES7134 CODEC" > > diff --git a/sound/soc/codecs/hdmi-codec.c > > b/sound/soc/codecs/hdmi-codec.c index 6a0cc8d7e141..fe796a7475a5 > > 100644 --- a/sound/soc/codecs/hdmi-codec.c > > +++ b/sound/soc/codecs/hdmi-codec.c > > @@ -12,9 +12,12 @@ > > * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See > > the GNU > > * General Public License for more details. > > */ > > +#include > > #include > > +#include > > #include > > #include > > +#include > > #include > > #include > > #include > > @@ -282,6 +285,13 @@ struct hdmi_codec_priv { > > struct snd_pcm_chmap *chmap_info; > > unsigned int chmap_idx; > > struct mutex lock; > > + struct snd_soc_jack *jack; > > + /* Lock to protect setting and getting eld. */ > > + struct mutex eld_lock; > > + struct device *dev; > > + struct hdmi_notifier *notifier; > > + struct notifier_block nb; > > + unsigned int jack_status; > > }; > > > > static const struct snd_soc_dapm_widget hdmi_widgets[] =3D { > > @@ -308,7 +318,9 @@ static int hdmi_eld_ctl_get(struct snd_kcontrol > > *kcontrol, struct snd_soc_component *component =3D > > snd_kcontrol_chip(kcontrol); struct hdmi_codec_priv *hcp =3D > > snd_soc_component_get_drvdata(component); > > + mutex_lock(&hcp->eld_lock); > > memcpy(ucontrol->value.bytes.data, hcp->eld, > > sizeof(hcp->eld)); > > + mutex_unlock(&hcp->eld_lock); > > > > return 0; > > } > > @@ -393,7 +405,7 @@ static int hdmi_codec_startup(struct > > snd_pcm_substream *substream, struct snd_soc_dai *dai) > > { > > struct hdmi_codec_priv *hcp =3D snd_soc_dai_get_drvdata(dai); > > - int ret =3D 0; > > + int ret; > > > > ret =3D mutex_trylock(&hcp->lock); > > if (!ret) { > > @@ -408,9 +420,9 @@ static int hdmi_codec_startup(struct > > snd_pcm_substream *substream, } > > > > if (hcp->hcd.ops->get_eld) { > > + mutex_lock(&hcp->eld_lock); > > ret =3D hcp->hcd.ops->get_eld(dai->dev->parent, > > hcp->hcd.data, hcp->eld, sizeof(hcp->eld)); > > - > > if (!ret) { > > ret =3D > > snd_pcm_hw_constraint_eld(substream->runtime, hcp->eld); > > Seems to me like you missed unlock here. There is return inside this > if(). > Thanks for checking! The latest patch on hdmi-codec.c on ASoC tree has a change to replace that return to goto err. https://patchwork.kernel.org/patch/10930875/ My patch is based on that so it should be okay. Thanks! > > @@ -419,6 +431,7 @@ static int hdmi_codec_startup(struct > > snd_pcm_substream *substream, } > > /* Select chmap supported */ > > hdmi_codec_eld_chmap(hcp); > > + mutex_unlock(&hcp->eld_lock); > > } > > return 0; > > > > @@ -747,6 +760,77 @@ static const struct snd_soc_component_driver > > hdmi_driver =3D { .non_legacy_dai_naming =3D 1, > > }; > > > > +static void hdmi_codec_jack_report(struct hdmi_codec_priv *hcp, > > + unsigned int jack_status) > > +{ > > + if (!hcp->jack) > > + return; > > + > > + if (jack_status !=3D hcp->jack_status) { > > + snd_soc_jack_report(hcp->jack, jack_status, > > SND_JACK_LINEOUT); > > + hcp->jack_status =3D jack_status; > > + } > > +} > > + > > +static int hdmi_codec_notify(struct notifier_block *nb, unsigned > > long event, > > + void *data) > > +{ > > + struct hdmi_codec_priv *hcp =3D container_of(nb, struct > > hdmi_codec_priv, > > + nb); > > + struct hdmi_notifier *n =3D data; > > + > > + if (!hcp->jack) > > + return NOTIFY_OK; > > + > > + switch (event) { > > + case HDMI_NEW_ELD: > > + mutex_lock(&hcp->eld_lock); > > + memcpy(hcp->eld, n->eld, sizeof(hcp->eld)); > > + mutex_unlock(&hcp->eld_lock); > > + /* fall through */ > > + case HDMI_CONNECTED: > > + hdmi_codec_jack_report(hcp, SND_JACK_LINEOUT); > > + break; > > + case HDMI_DISCONNECTED: > > + hdmi_codec_jack_report(hcp, 0); > > + break; > > + } > > + > > + return NOTIFY_OK; > > +} > > + > > +/** > > + * hdmi_codec_set_jack_detect - register HDMI state notifier callback > > + * @component: the hdmi-codec instance > > + * @jack: ASoC jack to report (dis)connection events on > > + * @dev: hdmi_notifier device, usually HDMI_TX or CEC device > > + */ > > +int hdmi_codec_set_jack_detect(struct snd_soc_component *component, > > + struct snd_soc_jack *jack, > > + struct device *dev) > > +{ > > + struct hdmi_codec_priv *hcp =3D > > snd_soc_component_get_drvdata(component); > > + int ret; > > + > > + hcp->notifier =3D hdmi_notifier_get(dev); > > + if (!hcp->notifier) > > + return -ENOMEM; > > + > > + hcp->jack =3D jack; > > + hcp->nb.notifier_call =3D hdmi_codec_notify; > > + ret =3D hdmi_notifier_register(hcp->notifier, &hcp->nb); > > + if (ret) > > + goto err_notifier_put; > > + > > + return 0; > > + > > +err_notifier_put: > > + hdmi_notifier_put(hcp->notifier); > > + hcp->notifier =3D NULL; > > + return ret; > > +} > > +EXPORT_SYMBOL_GPL(hdmi_codec_set_jack_detect); > > + > > static int hdmi_codec_probe(struct platform_device *pdev) > > { > > struct hdmi_codec_pdata *hcd =3D pdev->dev.platform_data; > > @@ -774,6 +858,7 @@ static int hdmi_codec_probe(struct > > platform_device *pdev) > > hcp->hcd =3D *hcd; > > mutex_init(&hcp->lock); > > + mutex_init(&hcp->eld_lock); > > > > daidrv =3D devm_kcalloc(dev, dai_count, sizeof(*daidrv), > > GFP_KERNEL); if (!daidrv) > > @@ -797,6 +882,20 @@ static int hdmi_codec_probe(struct > > platform_device *pdev) __func__, ret); > > return ret; > > } > > + > > + hcp->dev =3D dev; > > + > > + return 0; > > +} > > + > > +static int hdmi_codec_remove(struct platform_device *pdev) > > +{ > > + struct hdmi_codec_priv *hcp =3D platform_get_drvdata(pdev); > > + > > + if (hcp->notifier) { > > + hdmi_notifier_unregister(hcp->notifier, &hcp->nb); > > + hdmi_notifier_put(hcp->notifier); > > + } > > return 0; > > } > > > > @@ -805,6 +904,7 @@ static struct platform_driver hdmi_codec_driver =3D > > { .name =3D HDMI_CODEC_DRV_NAME, > > }, > > .probe =3D hdmi_codec_probe, > > + .remove =3D hdmi_codec_remove, > > }; > > > > module_platform_driver(hdmi_codec_driver); > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,T_DKIMWL_WL_HIGH,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C269C04AB6 for ; Mon, 3 Jun 2019 08:54:37 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7118E27DD2 for ; Mon, 3 Jun 2019 08:54:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="tVCC/2xe"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="M5LBwXeW" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7118E27DD2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=chromium.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=gPtyRtZmWt5vHoHBtQ5sO7sRIfCjQg5BRN3W2Iu+n3s=; b=tVCC/2xem9skPT F1mr1N0b6q+TEHU1Rq7LFYom3kf+43RcB80v9iv5Lhdon/N5VTDk6SKodIjA2T27x1pqqicRqe90G nsUcI1A+3mPDVgOzEA7ueZJ0EmfCFrWExJn9VnizCM1zbg49HVjm/KMGIGPUtwpReGVm5E+h6ruE6 EsdEXDozGP/kewCXyewNiQp5eQ3I62VB7wpoEC0YAv8NsT07QbRQ4MoqBecTjr14owu6cKOx9aNQS t2nXddBwxIZ8PJikWq36YFbGJIV47qVJXdetsoh7AVfBxPz2Isj3qACXzJpBkZp2cTJfJ6fSpyNRv O2dCKskMStl8gFmGnY2A==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hXijf-0008ES-5L; Mon, 03 Jun 2019 08:54:31 +0000 Received: from mail-vk1-xa44.google.com ([2607:f8b0:4864:20::a44]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hXija-0008BG-NZ for linux-arm-kernel@lists.infradead.org; Mon, 03 Jun 2019 08:54:28 +0000 Received: by mail-vk1-xa44.google.com with SMTP id g194so2706630vke.13 for ; Mon, 03 Jun 2019 01:54:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=wdJEk7xoPcDvx0rL8FHQp9oPvWZRTtNsGybP0RtSagY=; b=M5LBwXeW8e3O+PDSsi9zCXscQ8y1vbRUSJsU1dQVFrSJjRzc0XEsTIijLOFvdIySua +OCo46JIId3hfB8wKxv+MCF7fVRzIDejRA2kyMLDpDQwCzug1Ciird69sGvwMmk1d8Mo XsEJ3E2hVFq6TKZA01pfKGQ+jF0WA1WjOA96Y= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=wdJEk7xoPcDvx0rL8FHQp9oPvWZRTtNsGybP0RtSagY=; b=JBH0JUC+IiiPAa6DgPTZqj3kVnld7hB2tnRI1J5/U7nGPHT70GE6CUIcRrgjXK3E+Y 0833Hhn8FOyH4vpYhw319zf497h4NBNpSW5tpQIcOFm0y7wdM/xy7lg8q5K2llqf/oFt Rz/cSvLeoZCdgvN5a624keIz0b0uY5aGNTmAqf5Hnlhb33nplxU52I5qSZ7+J0h2i+Ii fTCGxb3krb3mV6rRp5VUYcFGVp27AZw2gvtp2/e7nnKcBirOB4ZREaE5vOnNSGdH8gZI 57nC6n50BYLpjQbvH9m3iANex+gKYsM98WvABcqKp00IJjbN5K4r1oOxlbKsKGkHOSL8 uH5g== X-Gm-Message-State: APjAAAUhVaaQmGPzQzDPQqRgsBfQMMbZiM514hOBXjagMcy+w/u6+i/X TUpyQG1+StaGRKT2kVSwio4jp6Q4t8XZ+PxRE/BcEw== X-Google-Smtp-Source: APXvYqzW5LQtHHySgqxIQwZwXTkV349/aO/EZ86HUpABwdgeY6YY1BGiVYaBh3z0RzEL+55rfLwERjYPN8UokbeRX/Y= X-Received: by 2002:a1f:a003:: with SMTP id j3mr5105438vke.74.1559552062071; Mon, 03 Jun 2019 01:54:22 -0700 (PDT) MIME-Version: 1.0 References: <20190603043251.226549-1-cychiang@chromium.org> <20190603043251.226549-3-cychiang@chromium.org> <20190603100301.00d68690@xxx> In-Reply-To: <20190603100301.00d68690@xxx> From: Cheng-yi Chiang Date: Mon, 3 Jun 2019 16:53:55 +0800 Message-ID: Subject: Re: [alsa-devel] [PATCH 2/7] ASoC: hdmi-codec: use HDMI state notifier to add jack support To: =?UTF-8?B?QW1hZGV1c3ogU8WCYXdpxYRza2k=?= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190603_015426_794002_75D3DC6F X-CRM114-Status: GOOD ( 29.75 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "moderated list:SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEM..." , Heiko Stuebner , Liam Girdwood , David Airlie , dri-devel@lists.freedesktop.org, Takashi Iwai , Hans Verkuil , Andrzej Hajda , Laurent Pinchart , linux-rockchip@lists.infradead.org, Dylan Reid , linux-media@vger.kernel.org, devicetree@vger.kernel.org, tzungbi@chromium.org, Daniel Vetter , Bartlomiej Zolnierkiewicz , Russell King , Rob Herring , linux-arm-kernel@lists.infradead.org, Greg Kroah-Hartman , Doug Anderson , linux-kernel , Mark Brown , Philipp Zabel Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCBKdW4gMywgMjAxOSBhdCAzOjU5IFBNIEFtYWRldXN6IFPFgmF3acWEc2tpCjxhbWFk ZXVzenguc2xhd2luc2tpQGxpbnV4LmludGVsLmNvbT4gd3JvdGU6Cj4KPiBPbiBNb24sICAzIEp1 biAyMDE5IDEyOjMyOjQ2ICswODAwCj4gQ2hlbmctWWkgQ2hpYW5nIDxjeWNoaWFuZ0BjaHJvbWl1 bS5vcmc+IHdyb3RlOgo+Cj4gPiBGcm9tOiBQaGlsaXBwIFphYmVsIDxwLnphYmVsQHBlbmd1dHJv bml4LmRlPgo+ID4KPiA+IFVzZSBIRE1JIGNvbm5lY3Rpb24gLyBkaXNjb25uZWN0aW9uIG5vdGlm aWNhdGlvbnMgdG8gdXBkYXRlIGFuIEFMU0EKPiA+IGphY2sgb2JqZWN0LiBBbHNvIG1ha2UgYSBj b3B5IG9mIHRoZSBFTEQgYmxvY2sgYWZ0ZXIgZXZlcnkgY2hhbmdlLgo+ID4KPiA+IFRoaXMgd2Fz IHBvc3RlZCBieSBQaGlsaXBwIFphYmVsIGF0Cj4gPgo+ID4gaHR0cHM6Ly9wYXRjaHdvcmsua2Vy bmVsLm9yZy9wYXRjaC85NDMwNzQ3Lwo+ID4KPiA+IE1vZGlmaWVkIGJ5IENoZW5nLVlpIENoaWFu ZzoKPiA+IC0gRml4IHRoZSBjb25mbGljdCBvZiByZW1vdmVkIGhkbWlfY29kZWNfcmVtb3ZlIG9w cy4KPiA+IC0gT3RoZXIgbWlub3IgZml4IGZvciB0aGUgY29uZmxpY3Qgd2l0aCBsYXRlc3QgaGRt aS1jb2RlYyBvbiBBU29DCj4gPiAgIGZvci1uZXh0IHRyZWUuCj4gPgo+ID4gU2lnbmVkLW9mZi1i eTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRyb25peC5kZT4KPiA+IFNpZ25lZC1vZmYt Ynk6IENoZW5nLVlpIENoaWFuZyA8Y3ljaGlhbmdAY2hyb21pdW0ub3JnPgo+ID4gLS0tCj4gPiBU aGUgb3JpZ2luYWwgcGF0Y2ggaXMgYXQgaHR0cHM6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wYXRj aC85NDMwNzQ3Lwo+ID4gSSBjb3VsZCBub3QgZmluZCB0aGUgTEtNTCBsaW5rIGZvciB0aGUgcGF0 Y2guCj4gPgo+ID4gIGluY2x1ZGUvc291bmQvaGRtaS1jb2RlYy5oICAgIHwgICA3ICsrKwo+ID4g IHNvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyAgICAgIHwgICAxICsKPiA+ICBzb3VuZC9zb2MvY29k ZWNzL2hkbWktY29kZWMuYyB8IDEwNAo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrLSAzIGZpbGVzIGNoYW5nZWQsIDExMAo+ID4gaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo LSkKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9oZG1pLWNvZGVjLmggYi9pbmNs dWRlL3NvdW5kL2hkbWktY29kZWMuaAo+ID4gaW5kZXggOTQ4M2M1NWY4NzFiLi40ZmEzOWM5MzM2 M2YgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL3NvdW5kL2hkbWktY29kZWMuaAo+ID4gKysrIGIv aW5jbHVkZS9zb3VuZC9oZG1pLWNvZGVjLmgKPiA+IEBAIC0xMDcsNiArMTA3LDEzIEBAIHN0cnVj dCBoZG1pX2NvZGVjX3BkYXRhIHsKPiA+ICAgICAgIHZvaWQgKmRhdGE7Cj4gPiAgfTsKPiA+Cj4g PiArc3RydWN0IHNuZF9zb2NfY29tcG9uZW50Owo+ID4gK3N0cnVjdCBzbmRfc29jX2phY2s7Cj4g PiArCj4gPiAraW50IGhkbWlfY29kZWNfc2V0X2phY2tfZGV0ZWN0KHN0cnVjdCBzbmRfc29jX2Nv bXBvbmVudCAqY29tcG9uZW50LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3Qgc25kX3NvY19qYWNrICpqYWNrLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZGV2aWNlICpkZXYpOwo+ID4gKwo+ID4gICNkZWZpbmUgSERNSV9DT0RFQ19EUlZfTkFN RSAiaGRtaS1hdWRpby1jb2RlYyIKPiA+Cj4gPiAgI2VuZGlmIC8qIF9fSERNSV9DT0RFQ19IX18g Ki8KPiA+IGRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcgYi9zb3VuZC9zb2Mv Y29kZWNzL0tjb25maWcKPiA+IGluZGV4IDhmNTc3MjU4MDgwYi4uZjVmNmRkMDQyMzRjIDEwMDY0 NAo+ID4gLS0tIGEvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCj4gPiArKysgYi9zb3VuZC9zb2Mv Y29kZWNzL0tjb25maWcKPiA+IEBAIC02MzksNiArNjM5LDcgQEAgY29uZmlnIFNORF9TT0NfSERN SV9DT0RFQwo+ID4gICAgICAgc2VsZWN0IFNORF9QQ01fRUxECj4gPiAgICAgICBzZWxlY3QgU05E X1BDTV9JRUM5NTgKPiA+ICAgICAgIHNlbGVjdCBIRE1JCj4gPiArICAgICBzZWxlY3QgSERNSV9O T1RJRklFUlMKPiA+Cj4gPiAgY29uZmlnIFNORF9TT0NfRVM3MTM0Cj4gPiAgICAgICAgIHRyaXN0 YXRlICJFdmVyZXN0IFNlbWkgRVM3MTM0IENPREVDIgo+ID4gZGlmZiAtLWdpdCBhL3NvdW5kL3Nv Yy9jb2RlY3MvaGRtaS1jb2RlYy5jCj4gPiBiL3NvdW5kL3NvYy9jb2RlY3MvaGRtaS1jb2RlYy5j IGluZGV4IDZhMGNjOGQ3ZTE0MS4uZmU3OTZhNzQ3NWE1Cj4gPiAxMDA2NDQgLS0tIGEvc291bmQv c29jL2NvZGVjcy9oZG1pLWNvZGVjLmMKPiA+ICsrKyBiL3NvdW5kL3NvYy9jb2RlY3MvaGRtaS1j b2RlYy5jCj4gPiBAQCAtMTIsOSArMTIsMTIgQEAKPiA+ICAgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICAgICAgIFNlZQo+ID4gdGhlIEdOVQo+ ID4gICAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiA+ICAgKi8K PiA+ICsjaW5jbHVkZSA8bGludXgvaGRtaS1ub3RpZmllci5oPgo+ID4gICNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KPiA+ICAjaW5jbHVk ZSA8bGludXgvc3RyaW5nLmg+Cj4gPiAgI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KPiA+ICsjaW5j bHVkZSA8c291bmQvamFjay5oPgo+ID4gICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KPiA+ICAjaW5j bHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgo+ID4gICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KPiA+ IEBAIC0yODIsNiArMjg1LDEzIEBAIHN0cnVjdCBoZG1pX2NvZGVjX3ByaXYgewo+ID4gICAgICAg c3RydWN0IHNuZF9wY21fY2htYXAgKmNobWFwX2luZm87Cj4gPiAgICAgICB1bnNpZ25lZCBpbnQg Y2htYXBfaWR4Owo+ID4gICAgICAgc3RydWN0IG11dGV4IGxvY2s7Cj4gPiArICAgICBzdHJ1Y3Qg c25kX3NvY19qYWNrICpqYWNrOwo+ID4gKyAgICAgLyogTG9jayB0byBwcm90ZWN0IHNldHRpbmcg YW5kIGdldHRpbmcgZWxkLiAqLwo+ID4gKyAgICAgc3RydWN0IG11dGV4IGVsZF9sb2NrOwo+ID4g KyAgICAgc3RydWN0IGRldmljZSAqZGV2Owo+ID4gKyAgICAgc3RydWN0IGhkbWlfbm90aWZpZXIg Km5vdGlmaWVyOwo+ID4gKyAgICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG5iOwo+ID4gKyAgICAg dW5zaWduZWQgaW50IGphY2tfc3RhdHVzOwo+ID4gIH07Cj4gPgo+ID4gIHN0YXRpYyBjb25zdCBz dHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBoZG1pX3dpZGdldHNbXSA9IHsKPiA+IEBAIC0zMDgs NyArMzE4LDkgQEAgc3RhdGljIGludCBoZG1pX2VsZF9jdGxfZ2V0KHN0cnVjdCBzbmRfa2NvbnRy b2wKPiA+ICprY29udHJvbCwgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQgPQo+ ID4gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOyBzdHJ1Y3QgaGRtaV9jb2RlY19wcml2ICpo Y3AgPQo+ID4gc25kX3NvY19jb21wb25lbnRfZ2V0X2RydmRhdGEoY29tcG9uZW50KTsKPiA+ICsg ICAgIG11dGV4X2xvY2soJmhjcC0+ZWxkX2xvY2spOwo+ID4gICAgICAgbWVtY3B5KHVjb250cm9s LT52YWx1ZS5ieXRlcy5kYXRhLCBoY3AtPmVsZCwKPiA+IHNpemVvZihoY3AtPmVsZCkpOwo+ID4g KyAgICAgbXV0ZXhfdW5sb2NrKCZoY3AtPmVsZF9sb2NrKTsKPiA+Cj4gPiAgICAgICByZXR1cm4g MDsKPiA+ICB9Cj4gPiBAQCAtMzkzLDcgKzQwNSw3IEBAIHN0YXRpYyBpbnQgaGRtaV9jb2RlY19z dGFydHVwKHN0cnVjdAo+ID4gc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgc3RydWN0IHNu ZF9zb2NfZGFpICpkYWkpCj4gPiAgewo+ID4gICAgICAgc3RydWN0IGhkbWlfY29kZWNfcHJpdiAq aGNwID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKPiA+IC0gICAgIGludCByZXQgPSAw Owo+ID4gKyAgICAgaW50IHJldDsKPiA+Cj4gPiAgICAgICByZXQgPSBtdXRleF90cnlsb2NrKCZo Y3AtPmxvY2spOwo+ID4gICAgICAgaWYgKCFyZXQpIHsKPiA+IEBAIC00MDgsOSArNDIwLDkgQEAg c3RhdGljIGludCBoZG1pX2NvZGVjX3N0YXJ0dXAoc3RydWN0Cj4gPiBzbmRfcGNtX3N1YnN0cmVh bSAqc3Vic3RyZWFtLCB9Cj4gPgo+ID4gICAgICAgaWYgKGhjcC0+aGNkLm9wcy0+Z2V0X2VsZCkg ewo+ID4gKyAgICAgICAgICAgICBtdXRleF9sb2NrKCZoY3AtPmVsZF9sb2NrKTsKPiA+ICAgICAg ICAgICAgICAgcmV0ID0gaGNwLT5oY2Qub3BzLT5nZXRfZWxkKGRhaS0+ZGV2LT5wYXJlbnQsCj4g PiBoY3AtPmhjZC5kYXRhLCBoY3AtPmVsZCwgc2l6ZW9mKGhjcC0+ZWxkKSk7Cj4gPiAtCj4gPiAg ICAgICAgICAgICAgIGlmICghcmV0KSB7Cj4gPiAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0K PiA+IHNuZF9wY21faHdfY29uc3RyYWludF9lbGQoc3Vic3RyZWFtLT5ydW50aW1lLCBoY3AtPmVs ZCk7Cj4KPiBTZWVtcyB0byBtZSBsaWtlIHlvdSBtaXNzZWQgdW5sb2NrIGhlcmUuIFRoZXJlIGlz IHJldHVybiBpbnNpZGUgdGhpcwo+IGlmKCkuCj4KClRoYW5rcyBmb3IgY2hlY2tpbmchClRoZSBs YXRlc3QgcGF0Y2ggb24gaGRtaS1jb2RlYy5jIG9uIEFTb0MgdHJlZSBoYXMgYSBjaGFuZ2UgdG8g cmVwbGFjZQp0aGF0IHJldHVybiB0byBnb3RvIGVyci4KCmh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5l bC5vcmcvcGF0Y2gvMTA5MzA4NzUvCgpNeSBwYXRjaCBpcyBiYXNlZCBvbiB0aGF0IHNvIGl0IHNo b3VsZCBiZSBva2F5LgpUaGFua3MhCgo+ID4gQEAgLTQxOSw2ICs0MzEsNyBAQCBzdGF0aWMgaW50 IGhkbWlfY29kZWNfc3RhcnR1cChzdHJ1Y3QKPiA+IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJl YW0sIH0KPiA+ICAgICAgICAgICAgICAgLyogU2VsZWN0IGNobWFwIHN1cHBvcnRlZCAqLwo+ID4g ICAgICAgICAgICAgICBoZG1pX2NvZGVjX2VsZF9jaG1hcChoY3ApOwo+ID4gKyAgICAgICAgICAg ICBtdXRleF91bmxvY2soJmhjcC0+ZWxkX2xvY2spOwo+ID4gICAgICAgfQo+ID4gICAgICAgcmV0 dXJuIDA7Cj4gPgo+ID4gQEAgLTc0Nyw2ICs3NjAsNzcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBz bmRfc29jX2NvbXBvbmVudF9kcml2ZXIKPiA+IGhkbWlfZHJpdmVyID0geyAubm9uX2xlZ2FjeV9k YWlfbmFtaW5nICAgICAgICA9IDEsCj4gPiAgfTsKPiA+Cj4gPiArc3RhdGljIHZvaWQgaGRtaV9j b2RlY19qYWNrX3JlcG9ydChzdHJ1Y3QgaGRtaV9jb2RlY19wcml2ICpoY3AsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgamFja19zdGF0dXMpCj4gPiAr ewo+ID4gKyAgICAgaWYgKCFoY3AtPmphY2spCj4gPiArICAgICAgICAgICAgIHJldHVybjsKPiA+ ICsKPiA+ICsgICAgIGlmIChqYWNrX3N0YXR1cyAhPSBoY3AtPmphY2tfc3RhdHVzKSB7Cj4gPiAr ICAgICAgICAgICAgIHNuZF9zb2NfamFja19yZXBvcnQoaGNwLT5qYWNrLCBqYWNrX3N0YXR1cywK PiA+IFNORF9KQUNLX0xJTkVPVVQpOwo+ID4gKyAgICAgICAgICAgICBoY3AtPmphY2tfc3RhdHVz ID0gamFja19zdGF0dXM7Cj4gPiArICAgICB9Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQg aGRtaV9jb2RlY19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQKPiA+ IGxvbmcgZXZlbnQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQo+ ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBoZG1pX2NvZGVjX3ByaXYgKmhjcCA9IGNvbnRhaW5lcl9v ZihuYiwgc3RydWN0Cj4gPiBoZG1pX2NvZGVjX3ByaXYsCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmIpOwo+ID4gKyAgICAgc3RydWN0IGhkbWlf bm90aWZpZXIgKm4gPSBkYXRhOwo+ID4gKwo+ID4gKyAgICAgaWYgKCFoY3AtPmphY2spCj4gPiAr ICAgICAgICAgICAgIHJldHVybiBOT1RJRllfT0s7Cj4gPiArCj4gPiArICAgICBzd2l0Y2ggKGV2 ZW50KSB7Cj4gPiArICAgICBjYXNlIEhETUlfTkVXX0VMRDoKPiA+ICsgICAgICAgICAgICAgbXV0 ZXhfbG9jaygmaGNwLT5lbGRfbG9jayk7Cj4gPiArICAgICAgICAgICAgIG1lbWNweShoY3AtPmVs ZCwgbi0+ZWxkLCBzaXplb2YoaGNwLT5lbGQpKTsKPiA+ICsgICAgICAgICAgICAgbXV0ZXhfdW5s b2NrKCZoY3AtPmVsZF9sb2NrKTsKPiA+ICsgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICov Cj4gPiArICAgICBjYXNlIEhETUlfQ09OTkVDVEVEOgo+ID4gKyAgICAgICAgICAgICBoZG1pX2Nv ZGVjX2phY2tfcmVwb3J0KGhjcCwgU05EX0pBQ0tfTElORU9VVCk7Cj4gPiArICAgICAgICAgICAg IGJyZWFrOwo+ID4gKyAgICAgY2FzZSBIRE1JX0RJU0NPTk5FQ1RFRDoKPiA+ICsgICAgICAgICAg ICAgaGRtaV9jb2RlY19qYWNrX3JlcG9ydChoY3AsIDApOwo+ID4gKyAgICAgICAgICAgICBicmVh azsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHJldHVybiBOT1RJRllfT0s7Cj4gPiArfQo+ ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGhkbWlfY29kZWNfc2V0X2phY2tfZGV0ZWN0IC0gcmVnaXN0 ZXIgSERNSSBzdGF0ZSBub3RpZmllciBjYWxsYmFjawo+ID4gKyAqIEBjb21wb25lbnQ6IHRoZSBo ZG1pLWNvZGVjIGluc3RhbmNlCj4gPiArICogQGphY2s6IEFTb0MgamFjayB0byByZXBvcnQgKGRp cyljb25uZWN0aW9uIGV2ZW50cyBvbgo+ID4gKyAqIEBkZXY6IGhkbWlfbm90aWZpZXIgZGV2aWNl LCB1c3VhbGx5IEhETUlfVFggb3IgQ0VDIGRldmljZQo+ID4gKyAqLwo+ID4gK2ludCBoZG1pX2Nv ZGVjX3NldF9qYWNrX2RldGVjdChzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9zb2NfamFjayAqamFj aywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZSAqZGV2KQo+ ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBoZG1pX2NvZGVjX3ByaXYgKmhjcCA9Cj4gPiBzbmRfc29j X2NvbXBvbmVudF9nZXRfZHJ2ZGF0YShjb21wb25lbnQpOwo+ID4gKyAgICAgaW50IHJldDsKPiA+ ICsKPiA+ICsgICAgIGhjcC0+bm90aWZpZXIgPSBoZG1pX25vdGlmaWVyX2dldChkZXYpOwo+ID4g KyAgICAgaWYgKCFoY3AtPm5vdGlmaWVyKQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01F TTsKPiA+ICsKPiA+ICsgICAgIGhjcC0+amFjayA9IGphY2s7Cj4gPiArICAgICBoY3AtPm5iLm5v dGlmaWVyX2NhbGwgPSBoZG1pX2NvZGVjX25vdGlmeTsKPiA+ICsgICAgIHJldCA9IGhkbWlfbm90 aWZpZXJfcmVnaXN0ZXIoaGNwLT5ub3RpZmllciwgJmhjcC0+bmIpOwo+ID4gKyAgICAgaWYgKHJl dCkKPiA+ICsgICAgICAgICAgICAgZ290byBlcnJfbm90aWZpZXJfcHV0Owo+ID4gKwo+ID4gKyAg ICAgcmV0dXJuIDA7Cj4gPiArCj4gPiArZXJyX25vdGlmaWVyX3B1dDoKPiA+ICsgICAgIGhkbWlf bm90aWZpZXJfcHV0KGhjcC0+bm90aWZpZXIpOwo+ID4gKyAgICAgaGNwLT5ub3RpZmllciA9IE5V TEw7Cj4gPiArICAgICByZXR1cm4gcmV0Owo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTCho ZG1pX2NvZGVjX3NldF9qYWNrX2RldGVjdCk7Cj4gPiArCj4gPiAgc3RhdGljIGludCBoZG1pX2Nv ZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiAgewo+ID4gICAgICAg c3RydWN0IGhkbWlfY29kZWNfcGRhdGEgKmhjZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwo+ ID4gQEAgLTc3NCw2ICs4NTgsNyBAQCBzdGF0aWMgaW50IGhkbWlfY29kZWNfcHJvYmUoc3RydWN0 Cj4gPiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiAgICAgICBoY3AtPmhjZCA9ICpoY2Q7Cj4g PiAgICAgICBtdXRleF9pbml0KCZoY3AtPmxvY2spOwo+ID4gKyAgICAgbXV0ZXhfaW5pdCgmaGNw LT5lbGRfbG9jayk7Cj4gPgo+ID4gICAgICAgZGFpZHJ2ID0gZGV2bV9rY2FsbG9jKGRldiwgZGFp X2NvdW50LCBzaXplb2YoKmRhaWRydiksCj4gPiBHRlBfS0VSTkVMKTsgaWYgKCFkYWlkcnYpCj4g PiBAQCAtNzk3LDYgKzg4MiwyMCBAQCBzdGF0aWMgaW50IGhkbWlfY29kZWNfcHJvYmUoc3RydWN0 Cj4gPiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpIF9fZnVuY19fLCByZXQpOwo+ID4gICAgICAgICAg ICAgICByZXR1cm4gcmV0Owo+ID4gICAgICAgfQo+ID4gKwo+ID4gKyAgICAgaGNwLT5kZXYgPSBk ZXY7Cj4gPiArCj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlu dCBoZG1pX2NvZGVjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sK PiA+ICsgICAgIHN0cnVjdCBoZG1pX2NvZGVjX3ByaXYgKmhjcCA9IHBsYXRmb3JtX2dldF9kcnZk YXRhKHBkZXYpOwo+ID4gKwo+ID4gKyAgICAgaWYgKGhjcC0+bm90aWZpZXIpIHsKPiA+ICsgICAg ICAgICAgICAgaGRtaV9ub3RpZmllcl91bnJlZ2lzdGVyKGhjcC0+bm90aWZpZXIsICZoY3AtPm5i KTsKPiA+ICsgICAgICAgICAgICAgaGRtaV9ub3RpZmllcl9wdXQoaGNwLT5ub3RpZmllcik7Cj4g PiArICAgICB9Cj4gPiAgICAgICByZXR1cm4gMDsKPiA+ICB9Cj4gPgo+ID4gQEAgLTgwNSw2ICs5 MDQsNyBAQCBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBoZG1pX2NvZGVjX2RyaXZlciA9 Cj4gPiB7IC5uYW1lID0gSERNSV9DT0RFQ19EUlZfTkFNRSwKPiA+ICAgICAgIH0sCj4gPiAgICAg ICAucHJvYmUgPSBoZG1pX2NvZGVjX3Byb2JlLAo+ID4gKyAgICAgLnJlbW92ZSA9IGhkbWlfY29k ZWNfcmVtb3ZlLAo+ID4gIH07Cj4gPgo+ID4gIG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaGRtaV9j b2RlY19kcml2ZXIpOwo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==