Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1634320 > unrolled thread
| Started by | Thierry Escande <thierry.escande@collabora.com> |
|---|---|
| First post | 2017-05-02 12:20 +0200 |
| Last post | 2017-05-05 18:20 +0200 |
| Articles | 5 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH 0/2] Add ACPI table for the ts3a227e driver Thierry Escande <thierry.escande@collabora.com> - 2017-05-02 12:20 +0200
[PATCH 1/2] ASoc: cht_bsw_max98090_ti: Fix jack initialization Thierry Escande <thierry.escande@collabora.com> - 2017-05-02 12:20 +0200
Re: [alsa-devel] [PATCH 1/2] ASoc: cht_bsw_max98090_ti: Fix jack initialization Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> - 2017-05-04 19:10 +0200
Re: [alsa-devel] [PATCH 1/2] ASoc: cht_bsw_max98090_ti: Fix jack initialization Thierry Escande <thierry.escande@collabora.com> - 2017-05-05 14:40 +0200
Re: [alsa-devel] [PATCH 1/2] ASoc: cht_bsw_max98090_ti: Fix jack initialization Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> - 2017-05-05 18:20 +0200
| From | Thierry Escande <thierry.escande@collabora.com> |
|---|---|
| Date | 2017-05-02 12:20 +0200 |
| Subject | [PATCH 0/2] Add ACPI table for the ts3a227e driver |
| Message-ID | <tCD4t-5hm-7@gated-at.bofh.it> |
Hi, This series adds ACPI match table for the ts3a227e driver. The ts3a227e is an Autonomous Audio Accessory Detection and Configuration Switch used to detect audio accessory features like jack plugging and unplugging, mic presence, and button pressed events. This series also fixes a null pointer dereference occurring in the TI max9890 driver when the ts3a227e hardware is present and its driver probed. The jack detection was enabled in the ts3a227e driver before the jack structure was allocated, causing the null pointer access. Regards, Thierry Fang, Yang A (1): ASoC: ts3a227e: add acpi table Thierry Escande (1): ASoc: cht_bsw_max98090_ti: Fix jack initialization sound/soc/codecs/ts3a227e.c | 10 ++++++ sound/soc/intel/boards/cht_bsw_max98090_ti.c | 52 +++++++++++++++++----------- 2 files changed, 41 insertions(+), 21 deletions(-) -- 2.7.4
[toc] | [next] | [standalone]
| From | Thierry Escande <thierry.escande@collabora.com> |
|---|---|
| Date | 2017-05-02 12:20 +0200 |
| Subject | [PATCH 1/2] ASoc: cht_bsw_max98090_ti: Fix jack initialization |
| Message-ID | <tCD4u-5hm-29@gated-at.bofh.it> |
| In reply to | #1634320 |
If the ts3a227e audio accessory detection hardware is present and its
driver probed, the jack needs to be created before enabling jack
detection in the ts3a227e driver. With this patch, the jack is
instantiated in the max98090 headset init function if the ts3a227e is
present. This fixes a null pointer dereference as the jack detection
enabling function in the ts3a driver was called before the jack is
created.
Signed-off-by: Thierry Escande <thierry.escande@collabora.com>
---
sound/soc/intel/boards/cht_bsw_max98090_ti.c | 50 +++++++++++++++++-----------
1 file changed, 30 insertions(+), 20 deletions(-)
diff --git a/sound/soc/intel/boards/cht_bsw_max98090_ti.c b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
index 742bc0d..f17e474 100644
--- a/sound/soc/intel/boards/cht_bsw_max98090_ti.c
+++ b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
@@ -128,30 +128,21 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
struct cht_mc_private *ctx = snd_soc_card_get_drvdata(runtime->card);
struct snd_soc_jack *jack = &ctx->jack;
- /**
- * TI supports 4 butons headset detection
- * KEY_MEDIA
- * KEY_VOICECOMMAND
- * KEY_VOLUMEUP
- * KEY_VOLUMEDOWN
- */
- if (ctx->ts3a227e_present)
- jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE |
- SND_JACK_BTN_0 | SND_JACK_BTN_1 |
- SND_JACK_BTN_2 | SND_JACK_BTN_3;
- else
- jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE;
+ if (ctx->ts3a227e_present) {
+ /*
+ * The jack has already been created in the
+ * cht_max98090_headset_init() function.
+ */
+ snd_soc_jack_notifier_register(jack, &cht_jack_nb);
+ return 0;
+ }
+
+ jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE;
ret = snd_soc_card_jack_new(runtime->card, "Headset Jack",
jack_type, jack, NULL, 0);
-
- if (ret) {
+ if (ret)
dev_err(runtime->dev, "Headset Jack creation failed %d\n", ret);
- return ret;
- }
-
- if (ctx->ts3a227e_present)
- snd_soc_jack_notifier_register(jack, &cht_jack_nb);
return ret;
}
@@ -200,6 +191,25 @@ static int cht_max98090_headset_init(struct snd_soc_component *component)
{
struct snd_soc_card *card = component->card;
struct cht_mc_private *ctx = snd_soc_card_get_drvdata(card);
+ struct snd_soc_jack *jack = &ctx->jack;
+ int jack_type;
+ int ret;
+
+ /*
+ * TI supports 4 butons headset detection
+ * KEY_MEDIA
+ * KEY_VOICECOMMAND
+ * KEY_VOLUMEUP
+ * KEY_VOLUMEDOWN
+ */
+ jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE |
+ SND_JACK_BTN_0 | SND_JACK_BTN_1 |
+ SND_JACK_BTN_2 | SND_JACK_BTN_3;
+
+ ret = snd_soc_card_jack_new(card, "Headset Jack", jack_type,
+ jack, NULL, 0);
+ if (ret)
+ return ret;
return ts3a227e_enable_jack_detect(component, &ctx->jack);
}
--
2.7.4
[toc] | [prev] | [next] | [standalone]
| From | Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> |
|---|---|
| Date | 2017-05-04 19:10 +0200 |
| Subject | Re: [alsa-devel] [PATCH 1/2] ASoc: cht_bsw_max98090_ti: Fix jack initialization |
| Message-ID | <tDsql-6ts-5@gated-at.bofh.it> |
| In reply to | #1634323 |
On 05/02/2017 05:11 AM, Thierry Escande wrote:
> If the ts3a227e audio accessory detection hardware is present and its
> driver probed, the jack needs to be created before enabling jack
> detection in the ts3a227e driver. With this patch, the jack is
> instantiated in the max98090 headset init function if the ts3a227e is
> present. This fixes a null pointer dereference as the jack detection
> enabling function in the ts3a driver was called before the jack is
> created.
is this in any way related to
https://bugzilla.kernel.org/show_bug.cgi?id=151521
" Sound not working on Acer Chromebook R11 (CYAN) braswell / cherryview
/ cherry trail"
I provided a similar patch and didn't see any followup.
https://bugzilla.kernel.org/attachment.cgi?id=254867
Thanks
-Pierre
>
> Signed-off-by: Thierry Escande <thierry.escande@collabora.com>
> ---
> sound/soc/intel/boards/cht_bsw_max98090_ti.c | 50 +++++++++++++++++-----------
> 1 file changed, 30 insertions(+), 20 deletions(-)
>
> diff --git a/sound/soc/intel/boards/cht_bsw_max98090_ti.c b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
> index 742bc0d..f17e474 100644
> --- a/sound/soc/intel/boards/cht_bsw_max98090_ti.c
> +++ b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
> @@ -128,30 +128,21 @@ static int cht_codec_init(struct snd_soc_pcm_runtime *runtime)
> struct cht_mc_private *ctx = snd_soc_card_get_drvdata(runtime->card);
> struct snd_soc_jack *jack = &ctx->jack;
>
> - /**
> - * TI supports 4 butons headset detection
> - * KEY_MEDIA
> - * KEY_VOICECOMMAND
> - * KEY_VOLUMEUP
> - * KEY_VOLUMEDOWN
> - */
> - if (ctx->ts3a227e_present)
> - jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE |
> - SND_JACK_BTN_0 | SND_JACK_BTN_1 |
> - SND_JACK_BTN_2 | SND_JACK_BTN_3;
> - else
> - jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE;
> + if (ctx->ts3a227e_present) {
> + /*
> + * The jack has already been created in the
> + * cht_max98090_headset_init() function.
> + */
> + snd_soc_jack_notifier_register(jack, &cht_jack_nb);
> + return 0;
> + }
> +
> + jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE;
>
> ret = snd_soc_card_jack_new(runtime->card, "Headset Jack",
> jack_type, jack, NULL, 0);
> -
> - if (ret) {
> + if (ret)
> dev_err(runtime->dev, "Headset Jack creation failed %d\n", ret);
> - return ret;
> - }
> -
> - if (ctx->ts3a227e_present)
> - snd_soc_jack_notifier_register(jack, &cht_jack_nb);
>
> return ret;
> }
> @@ -200,6 +191,25 @@ static int cht_max98090_headset_init(struct snd_soc_component *component)
> {
> struct snd_soc_card *card = component->card;
> struct cht_mc_private *ctx = snd_soc_card_get_drvdata(card);
> + struct snd_soc_jack *jack = &ctx->jack;
> + int jack_type;
> + int ret;
> +
> + /*
> + * TI supports 4 butons headset detection
> + * KEY_MEDIA
> + * KEY_VOICECOMMAND
> + * KEY_VOLUMEUP
> + * KEY_VOLUMEDOWN
> + */
> + jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE |
> + SND_JACK_BTN_0 | SND_JACK_BTN_1 |
> + SND_JACK_BTN_2 | SND_JACK_BTN_3;
> +
> + ret = snd_soc_card_jack_new(card, "Headset Jack", jack_type,
> + jack, NULL, 0);
> + if (ret)
> + return ret;
>
> return ts3a227e_enable_jack_detect(component, &ctx->jack);
> }
[toc] | [prev] | [next] | [standalone]
| From | Thierry Escande <thierry.escande@collabora.com> |
|---|---|
| Date | 2017-05-05 14:40 +0200 |
| Subject | Re: [alsa-devel] [PATCH 1/2] ASoc: cht_bsw_max98090_ti: Fix jack initialization |
| Message-ID | <tDKGC-1J7-5@gated-at.bofh.it> |
| In reply to | #1635904 |
Hi,
On 04/05/2017 19:01, Pierre-Louis Bossart wrote:
> On 05/02/2017 05:11 AM, Thierry Escande wrote:
>
>> If the ts3a227e audio accessory detection hardware is present and its
>> driver probed, the jack needs to be created before enabling jack
>> detection in the ts3a227e driver. With this patch, the jack is
>> instantiated in the max98090 headset init function if the ts3a227e is
>> present. This fixes a null pointer dereference as the jack detection
>> enabling function in the ts3a driver was called before the jack is
>> created.
> is this in any way related to
> https://bugzilla.kernel.org/show_bug.cgi?id=151521
> " Sound not working on Acer Chromebook R11 (CYAN) braswell / cherryview
> / cherry trail"
>
> I provided a similar patch and didn't see any followup.
> https://bugzilla.kernel.org/attachment.cgi?id=254867
> Thanks
> -Pierre
That's the exact same issue.
I fixed it by creating the jack in the aux_dev .init() function since
it's how this is done in the rockchip max98090 driver.
Regards,
Thierry
>
>>
>> Signed-off-by: Thierry Escande <thierry.escande@collabora.com>
>> ---
>> sound/soc/intel/boards/cht_bsw_max98090_ti.c | 50
>> +++++++++++++++++-----------
>> 1 file changed, 30 insertions(+), 20 deletions(-)
>>
>> diff --git a/sound/soc/intel/boards/cht_bsw_max98090_ti.c
>> b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
>> index 742bc0d..f17e474 100644
>> --- a/sound/soc/intel/boards/cht_bsw_max98090_ti.c
>> +++ b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
>> @@ -128,30 +128,21 @@ static int cht_codec_init(struct
>> snd_soc_pcm_runtime *runtime)
>> struct cht_mc_private *ctx =
>> snd_soc_card_get_drvdata(runtime->card);
>> struct snd_soc_jack *jack = &ctx->jack;
>> - /**
>> - * TI supports 4 butons headset detection
>> - * KEY_MEDIA
>> - * KEY_VOICECOMMAND
>> - * KEY_VOLUMEUP
>> - * KEY_VOLUMEDOWN
>> - */
>> - if (ctx->ts3a227e_present)
>> - jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE |
>> - SND_JACK_BTN_0 | SND_JACK_BTN_1 |
>> - SND_JACK_BTN_2 | SND_JACK_BTN_3;
>> - else
>> - jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE;
>> + if (ctx->ts3a227e_present) {
>> + /*
>> + * The jack has already been created in the
>> + * cht_max98090_headset_init() function.
>> + */
>> + snd_soc_jack_notifier_register(jack, &cht_jack_nb);
>> + return 0;
>> + }
>> +
>> + jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE;
>> ret = snd_soc_card_jack_new(runtime->card, "Headset Jack",
>> jack_type, jack, NULL, 0);
>> -
>> - if (ret) {
>> + if (ret)
>> dev_err(runtime->dev, "Headset Jack creation failed %d\n",
>> ret);
>> - return ret;
>> - }
>> -
>> - if (ctx->ts3a227e_present)
>> - snd_soc_jack_notifier_register(jack, &cht_jack_nb);
>> return ret;
>> }
>> @@ -200,6 +191,25 @@ static int cht_max98090_headset_init(struct
>> snd_soc_component *component)
>> {
>> struct snd_soc_card *card = component->card;
>> struct cht_mc_private *ctx = snd_soc_card_get_drvdata(card);
>> + struct snd_soc_jack *jack = &ctx->jack;
>> + int jack_type;
>> + int ret;
>> +
>> + /*
>> + * TI supports 4 butons headset detection
>> + * KEY_MEDIA
>> + * KEY_VOICECOMMAND
>> + * KEY_VOLUMEUP
>> + * KEY_VOLUMEDOWN
>> + */
>> + jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE |
>> + SND_JACK_BTN_0 | SND_JACK_BTN_1 |
>> + SND_JACK_BTN_2 | SND_JACK_BTN_3;
>> +
>> + ret = snd_soc_card_jack_new(card, "Headset Jack", jack_type,
>> + jack, NULL, 0);
>> + if (ret)
>> + return ret;
>> return ts3a227e_enable_jack_detect(component, &ctx->jack);
>> }
>
[toc] | [prev] | [next] | [standalone]
| From | Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> |
|---|---|
| Date | 2017-05-05 18:20 +0200 |
| Subject | Re: [alsa-devel] [PATCH 1/2] ASoc: cht_bsw_max98090_ti: Fix jack initialization |
| Message-ID | <tDO7w-437-13@gated-at.bofh.it> |
| In reply to | #1636351 |
On 5/5/17 7:37 AM, Thierry Escande wrote:
> Hi,
>
> On 04/05/2017 19:01, Pierre-Louis Bossart wrote:
>> On 05/02/2017 05:11 AM, Thierry Escande wrote:
>>
>>> If the ts3a227e audio accessory detection hardware is present and its
>>> driver probed, the jack needs to be created before enabling jack
>>> detection in the ts3a227e driver. With this patch, the jack is
>>> instantiated in the max98090 headset init function if the ts3a227e is
>>> present. This fixes a null pointer dereference as the jack detection
>>> enabling function in the ts3a driver was called before the jack is
>>> created.
>> is this in any way related to
>> https://bugzilla.kernel.org/show_bug.cgi?id=151521
>> " Sound not working on Acer Chromebook R11 (CYAN) braswell / cherryview
>> / cherry trail"
>>
>> I provided a similar patch and didn't see any followup.
>> https://bugzilla.kernel.org/attachment.cgi?id=254867
>> Thanks
>> -Pierre
>
> That's the exact same issue.
>
> I fixed it by creating the jack in the aux_dev .init() function since
> it's how this is done in the rockchip max98090 driver.
ok, so do you get sound on Cyan chromebooks with these two fixes?
it'd be worth adding a reference to the bugzilla # in the commit message.
>
> Regards,
> Thierry
>
>>
>>>
>>> Signed-off-by: Thierry Escande <thierry.escande@collabora.com>
>>> ---
>>> sound/soc/intel/boards/cht_bsw_max98090_ti.c | 50
>>> +++++++++++++++++-----------
>>> 1 file changed, 30 insertions(+), 20 deletions(-)
>>>
>>> diff --git a/sound/soc/intel/boards/cht_bsw_max98090_ti.c
>>> b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
>>> index 742bc0d..f17e474 100644
>>> --- a/sound/soc/intel/boards/cht_bsw_max98090_ti.c
>>> +++ b/sound/soc/intel/boards/cht_bsw_max98090_ti.c
>>> @@ -128,30 +128,21 @@ static int cht_codec_init(struct
>>> snd_soc_pcm_runtime *runtime)
>>> struct cht_mc_private *ctx =
>>> snd_soc_card_get_drvdata(runtime->card);
>>> struct snd_soc_jack *jack = &ctx->jack;
>>> - /**
>>> - * TI supports 4 butons headset detection
>>> - * KEY_MEDIA
>>> - * KEY_VOICECOMMAND
>>> - * KEY_VOLUMEUP
>>> - * KEY_VOLUMEDOWN
>>> - */
>>> - if (ctx->ts3a227e_present)
>>> - jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE |
>>> - SND_JACK_BTN_0 | SND_JACK_BTN_1 |
>>> - SND_JACK_BTN_2 | SND_JACK_BTN_3;
>>> - else
>>> - jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE;
>>> + if (ctx->ts3a227e_present) {
>>> + /*
>>> + * The jack has already been created in the
>>> + * cht_max98090_headset_init() function.
>>> + */
>>> + snd_soc_jack_notifier_register(jack, &cht_jack_nb);
>>> + return 0;
>>> + }
>>> +
>>> + jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE;
>>> ret = snd_soc_card_jack_new(runtime->card, "Headset Jack",
>>> jack_type, jack, NULL, 0);
>>> -
>>> - if (ret) {
>>> + if (ret)
>>> dev_err(runtime->dev, "Headset Jack creation failed %d\n",
>>> ret);
>>> - return ret;
>>> - }
>>> -
>>> - if (ctx->ts3a227e_present)
>>> - snd_soc_jack_notifier_register(jack, &cht_jack_nb);
>>> return ret;
>>> }
>>> @@ -200,6 +191,25 @@ static int cht_max98090_headset_init(struct
>>> snd_soc_component *component)
>>> {
>>> struct snd_soc_card *card = component->card;
>>> struct cht_mc_private *ctx = snd_soc_card_get_drvdata(card);
>>> + struct snd_soc_jack *jack = &ctx->jack;
>>> + int jack_type;
>>> + int ret;
>>> +
>>> + /*
>>> + * TI supports 4 butons headset detection
>>> + * KEY_MEDIA
>>> + * KEY_VOICECOMMAND
>>> + * KEY_VOLUMEUP
>>> + * KEY_VOLUMEDOWN
>>> + */
>>> + jack_type = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE |
>>> + SND_JACK_BTN_0 | SND_JACK_BTN_1 |
>>> + SND_JACK_BTN_2 | SND_JACK_BTN_3;
>>> +
>>> + ret = snd_soc_card_jack_new(card, "Headset Jack", jack_type,
>>> + jack, NULL, 0);
>>> + if (ret)
>>> + return ret;
>>> return ts3a227e_enable_jack_detect(component, &ctx->jack);
>>> }
>>
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web