Re: [PATCH] ASoC: rx51: do not fail if could not get jack detection gpio

2015-01-28 Thread Pali Rohár
> > > It is quite important to keep qemu working, really.
> > > Debugging early boot on hardware is very hard, for
> > > example.
> > 
> > I understand, but looking at the history of the driver, if
> > it fails now with the jack-detection GPIO, it should have
> > been failing in the past as well. What triggered this
> > sudden qemu does not like jack-detection GPIO? Before the
> > devm_gpiod_get() conversion the driver should have failed in
> > snd_soc_jack_add_gpios() phase.
> 
> With 3.12 kernel rx51-audio driver loads without any problem.
> So there is some regression. Here is dmesg log from 3.12
> kernel:
> 
> [1.123779] rx51-audio rx51-audio:  tlv320aic3x-hifi <->
> omap- mcbsp.2 mapping ok
> [1.130737] tlv320aic3x-codec 2-0019: ASoC: mux b Right
> Line1L Mux has no paths
> [1.131347] tlv320aic3x-codec 2-0019: ASoC: mux b Left
> Line1R Mux has no paths
> [1.133697] tlv320aic3x-codec 2-0018: ASoC: mux Right
> Line1L Mux has no paths
> [1.134307] tlv320aic3x-codec 2-0018: ASoC: mux Left Line1R
> Mux has no paths
> [1.137451] input: RX-51 AV Jack as /devices/platform/rx51-
> audio/sound/card0/input2
> 
> I will try to investigate where is problem...
> 

Ok, problem found and solved. Please drop my patch and sorry for 
a noise.

As is visible in above lines AV Jack is working fine on non DT 
kernel (3.12) and fails on DT kernel.

Reason is because I have another non-mainline driver which is 
using GPIOs and in non DT kernel is initialized *after* audio. 
And in DT kernel is initialized *before* audio.

Once I changed my non-mainline driver to not request av jack 
gpio, rx51-audio driver loads fine in qemu.

-- 
Pali Rohár
pali.ro...@gmail.com


signature.asc
Description: This is a digitally signed message part.


Re: [PATCH] ASoC: rx51: do not fail if could not get jack detection gpio

2015-01-28 Thread Pali Rohár
   It is quite important to keep qemu working, really.
   Debugging early boot on hardware is very hard, for
   example.
  
  I understand, but looking at the history of the driver, if
  it fails now with the jack-detection GPIO, it should have
  been failing in the past as well. What triggered this
  sudden qemu does not like jack-detection GPIO? Before the
  devm_gpiod_get() conversion the driver should have failed in
  snd_soc_jack_add_gpios() phase.
 
 With 3.12 kernel rx51-audio driver loads without any problem.
 So there is some regression. Here is dmesg log from 3.12
 kernel:
 
 [1.123779] rx51-audio rx51-audio:  tlv320aic3x-hifi -
 omap- mcbsp.2 mapping ok
 [1.130737] tlv320aic3x-codec 2-0019: ASoC: mux b Right
 Line1L Mux has no paths
 [1.131347] tlv320aic3x-codec 2-0019: ASoC: mux b Left
 Line1R Mux has no paths
 [1.133697] tlv320aic3x-codec 2-0018: ASoC: mux Right
 Line1L Mux has no paths
 [1.134307] tlv320aic3x-codec 2-0018: ASoC: mux Left Line1R
 Mux has no paths
 [1.137451] input: RX-51 AV Jack as /devices/platform/rx51-
 audio/sound/card0/input2
 
 I will try to investigate where is problem...
 

Ok, problem found and solved. Please drop my patch and sorry for 
a noise.

As is visible in above lines AV Jack is working fine on non DT 
kernel (3.12) and fails on DT kernel.

Reason is because I have another non-mainline driver which is 
using GPIOs and in non DT kernel is initialized *after* audio. 
And in DT kernel is initialized *before* audio.

Once I changed my non-mainline driver to not request av jack 
gpio, rx51-audio driver loads fine in qemu.

-- 
Pali Rohár
pali.ro...@gmail.com


signature.asc
Description: This is a digitally signed message part.


Re: [PATCH] ASoC: rx51: do not fail if could not get jack detection gpio

2015-01-27 Thread Pali Rohár
On Tuesday 27 January 2015 14:41:43 Peter Ujfalusi wrote:
> On 01/27/2015 03:32 PM, Pavel Machek wrote:
> > On Tue 2015-01-27 15:27:58, Peter Ujfalusi wrote:
> >> Hi,
> >> 
> >> On 01/26/2015 10:51 PM, Pali Rohár wrote:
> >>> qemu does not emulate it
> >> 
> >> Not sure about this... How does qemu emulate tlv320aic3106,
> >> tpa6130a2a, McBSP, sDMA for audio to work? What about the
> >> other three GPIOs in this machine driver?
> >> 

No idea, but with my patch rx51-audio loads without any problem.

> >> The "nokia,n900-audio" compatible mandates that the
> >> jack-detection GPIO must be provided
> >> (Documentation/devicetree/bindings/sound/nokia,rx51.txt)
> >> since it means that the driver is running on the Nokia
> >> n900 HW.
> > 
> > Fix the documentation, then :-).
> 
> You mean document a workaround for qemu, right? AFAIK the
> documentation is fine ;)
> 
> > [Actually, GPIO is provided, it just can't be requested,
> > AFAICT.]
> 
> So what about the other GPIOs in the machine driver? Why is
> this jack-detection GPIO is special for qemu?
> 

Qemu does not detect it and cause rx51-audio driver to fail.

> > It is quite important to keep qemu working, really.
> > Debugging early boot on hardware is very hard, for example.
> 
> I understand, but looking at the history of the driver, if it
> fails now with the jack-detection GPIO, it should have been
> failing in the past as well. What triggered this sudden qemu
> does not like jack-detection GPIO? Before the
> devm_gpiod_get() conversion the driver should have failed in
> snd_soc_jack_add_gpios() phase.
> 

With 3.12 kernel rx51-audio driver loads without any problem. So 
there is some regression. Here is dmesg log from 3.12 kernel:

[1.123779] rx51-audio rx51-audio:  tlv320aic3x-hifi <-> omap-
mcbsp.2 mapping ok
[1.130737] tlv320aic3x-codec 2-0019: ASoC: mux b Right Line1L 
Mux has no paths
[1.131347] tlv320aic3x-codec 2-0019: ASoC: mux b Left Line1R 
Mux has no paths
[1.133697] tlv320aic3x-codec 2-0018: ASoC: mux Right Line1L 
Mux has no paths
[1.134307] tlv320aic3x-codec 2-0018: ASoC: mux Left Line1R 
Mux has no paths
[1.137451] input: RX-51 AV Jack as /devices/platform/rx51-
audio/sound/card0/input2

I will try to investigate where is problem...

> > And yes, some day we may need different dts for n900-qemu
> > (vs. n900-hw), but lets not do it just yet.
> > 
> > Pavel
> >>> 
> >>> Signed-off-by: Pali Rohár 
> >>> ---
> >>> 
> >>>  sound/soc/omap/rx51.c |   45
> >>>  + 1 file
> >>>  changed, 25 insertions(+), 20 deletions(-)
> >>> 
> >>> diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
> >>> index 04896d6..a689021 100644
> >>> --- a/sound/soc/omap/rx51.c
> >>> +++ b/sound/soc/omap/rx51.c
> >>> @@ -310,25 +310,27 @@ static int rx51_aic34_init(struct
> >>> snd_soc_pcm_runtime *rtd)
> >>> 
> >>>   return err;
> >>>   
> >>>   }
> >>> 
> >>> - /* AV jack detection */
> >>> - err = snd_soc_jack_new(codec, "AV Jack",
> >>> -SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
> >>> -_av_jack);
> >>> - if (err) {
> >>> - dev_err(card->dev, "Failed to add AV Jack\n");
> >>> - return err;
> >>> - }
> >>> + if (!IS_ERR(pdata->jack_detection_gpio)) {
> >>> + /* AV jack detection */
> >>> + err = snd_soc_jack_new(codec, "AV Jack",
> >>> +SND_JACK_HEADSET | 
SND_JACK_VIDEOOUT,
> >>> +_av_jack);
> >>> + if (err) {
> >>> + dev_err(card->dev, "Failed to add AV Jack\n");
> >>> + return err;
> >>> + }
> >>> 
> >>> - /* prepare gpio for snd_soc_jack_add_gpios */
> >>> - rx51_av_jack_gpios[0].gpio =
> >>> desc_to_gpio(pdata->jack_detection_gpio);
> >>> - devm_gpiod_put(card->dev, pdata->jack_detection_gpio);
> >>> + /* prepare gpio for snd_soc_jack_add_gpios */
> >>> + rx51_av_jack_gpios[0].gpio =
> >>> desc_to_gpio(pdata->jack_detection_gpio);
> >>> + devm_gpiod_put(card->dev, pdata-
>jack_detection_gpio);
> >>> 
> >>> - err = snd_soc_jack_add_gpios(_av_jack,
> >>> -  ARRAY_SIZE(rx51_av_jack_gpios),
> >>> -  rx51_av_jack_gpios);
> >>> - if (err) {
> >>> - dev_err(card->dev, "Failed to add GPIOs\n");
> >>> - return err;
> >>> + err = snd_soc_jack_add_gpios(_av_jack,
> >>> +  ARRAY_SIZE(rx51_av_jack_gpios),
> >>> +  rx51_av_jack_gpios);
> >>> + if (err) {
> >>> + dev_err(card->dev, "Failed to add GPIOs\n");
> >>> + return err;
> >>> + }
> >>> 
> >>>   }
> >>>   
> >>>   return err;
> >>> 
> >>> @@ -336,8 +338,11 @@ static int rx51_aic34_init(struct
> >>> snd_soc_pcm_runtime *rtd)
> >>> 
> >>>  static int rx51_card_remove(struct 

Re: [PATCH] ASoC: rx51: do not fail if could not get jack detection gpio

2015-01-27 Thread Peter Ujfalusi
On 01/27/2015 03:32 PM, Pavel Machek wrote:
> On Tue 2015-01-27 15:27:58, Peter Ujfalusi wrote:
>> Hi,
>>
>> On 01/26/2015 10:51 PM, Pali Rohár wrote:
>>> qemu does not emulate it
>>
>> Not sure about this... How does qemu emulate tlv320aic3106, tpa6130a2a, 
>> McBSP,
>> sDMA for audio to work? What about the other three GPIOs in this machine 
>> driver?
>>
>> The "nokia,n900-audio" compatible mandates that the jack-detection GPIO must
>> be provided (Documentation/devicetree/bindings/sound/nokia,rx51.txt) since it
>> means that the driver is running on the Nokia n900 HW.
> 
> Fix the documentation, then :-).

You mean document a workaround for qemu, right? AFAIK the documentation is fine 
;)

> [Actually, GPIO is provided, it just can't be requested, AFAICT.]

So what about the other GPIOs in the machine driver? Why is this
jack-detection GPIO is special for qemu?

> 
> It is quite important to keep qemu working, really. Debugging early
> boot on hardware is very hard, for example.

I understand, but looking at the history of the driver, if it fails now with
the jack-detection GPIO, it should have been failing in the past as well. What
triggered this sudden qemu does not like jack-detection GPIO?
Before the devm_gpiod_get() conversion the driver should have failed in
snd_soc_jack_add_gpios() phase.

-- 
Péter


> And yes, some day we may need different dts for n900-qemu
> (vs. n900-hw), but lets not do it just yet.
>   Pavel
> 
>>
>>> Signed-off-by: Pali Rohár 
>>> ---
>>>  sound/soc/omap/rx51.c |   45 +
>>>  1 file changed, 25 insertions(+), 20 deletions(-)
>>>
>>> diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
>>> index 04896d6..a689021 100644
>>> --- a/sound/soc/omap/rx51.c
>>> +++ b/sound/soc/omap/rx51.c
>>> @@ -310,25 +310,27 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
>>> *rtd)
>>> return err;
>>> }
>>>  
>>> -   /* AV jack detection */
>>> -   err = snd_soc_jack_new(codec, "AV Jack",
>>> -  SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
>>> -  _av_jack);
>>> -   if (err) {
>>> -   dev_err(card->dev, "Failed to add AV Jack\n");
>>> -   return err;
>>> -   }
>>> +   if (!IS_ERR(pdata->jack_detection_gpio)) {
>>> +   /* AV jack detection */
>>> +   err = snd_soc_jack_new(codec, "AV Jack",
>>> +  SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
>>> +  _av_jack);
>>> +   if (err) {
>>> +   dev_err(card->dev, "Failed to add AV Jack\n");
>>> +   return err;
>>> +   }
>>>  
>>> -   /* prepare gpio for snd_soc_jack_add_gpios */
>>> -   rx51_av_jack_gpios[0].gpio = desc_to_gpio(pdata->jack_detection_gpio);
>>> -   devm_gpiod_put(card->dev, pdata->jack_detection_gpio);
>>> +   /* prepare gpio for snd_soc_jack_add_gpios */
>>> +   rx51_av_jack_gpios[0].gpio = 
>>> desc_to_gpio(pdata->jack_detection_gpio);
>>> +   devm_gpiod_put(card->dev, pdata->jack_detection_gpio);
>>>  
>>> -   err = snd_soc_jack_add_gpios(_av_jack,
>>> -ARRAY_SIZE(rx51_av_jack_gpios),
>>> -rx51_av_jack_gpios);
>>> -   if (err) {
>>> -   dev_err(card->dev, "Failed to add GPIOs\n");
>>> -   return err;
>>> +   err = snd_soc_jack_add_gpios(_av_jack,
>>> +ARRAY_SIZE(rx51_av_jack_gpios),
>>> +rx51_av_jack_gpios);
>>> +   if (err) {
>>> +   dev_err(card->dev, "Failed to add GPIOs\n");
>>> +   return err;
>>> +   }
>>> }
>>>  
>>> return err;
>>> @@ -336,8 +338,11 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
>>> *rtd)
>>>  
>>>  static int rx51_card_remove(struct snd_soc_card *card)
>>>  {
>>> -   snd_soc_jack_free_gpios(_av_jack, ARRAY_SIZE(rx51_av_jack_gpios),
>>> -   rx51_av_jack_gpios);
>>> +   struct rx51_audio_pdata *pdata = snd_soc_card_get_drvdata(card);
>>> +
>>> +   if (!IS_ERR(pdata->jack_detection_gpio))
>>> +   snd_soc_jack_free_gpios(_av_jack, 
>>> ARRAY_SIZE(rx51_av_jack_gpios),
>>> +   rx51_av_jack_gpios);
>>>  
>>> return 0;
>>>  }
>>> @@ -470,8 +475,8 @@ static int rx51_soc_probe(struct platform_device *pdev)
>>> pdata->jack_detection_gpio = devm_gpiod_get(card->dev,
>>> "jack-detection");
>>> if (IS_ERR(pdata->jack_detection_gpio)) {
>>> +   /* Do not fail, qemu does not emulate jack detection gpio */
>>> dev_err(card->dev, "could not get jack detection gpio\n");
>>> -   return PTR_ERR(pdata->jack_detection_gpio);
>>> }
>>>  
>>> pdata->eci_sw_gpio = devm_gpiod_get(card->dev, "eci-switch");
>>>
>>
>>
> 



--

Re: [PATCH] ASoC: rx51: do not fail if could not get jack detection gpio

2015-01-27 Thread Pavel Machek
On Tue 2015-01-27 15:27:58, Peter Ujfalusi wrote:
> Hi,
> 
> On 01/26/2015 10:51 PM, Pali Rohár wrote:
> > qemu does not emulate it
> 
> Not sure about this... How does qemu emulate tlv320aic3106, tpa6130a2a, McBSP,
> sDMA for audio to work? What about the other three GPIOs in this machine 
> driver?
> 
> The "nokia,n900-audio" compatible mandates that the jack-detection GPIO must
> be provided (Documentation/devicetree/bindings/sound/nokia,rx51.txt) since it
> means that the driver is running on the Nokia n900 HW.

Fix the documentation, then :-). [Actually, GPIO is provided, it just
can't be requested, AFAICT.]

It is quite important to keep qemu working, really. Debugging early
boot on hardware is very hard, for example.

And yes, some day we may need different dts for n900-qemu
(vs. n900-hw), but lets not do it just yet.
Pavel

> 
> > Signed-off-by: Pali Rohár 
> > ---
> >  sound/soc/omap/rx51.c |   45 +
> >  1 file changed, 25 insertions(+), 20 deletions(-)
> > 
> > diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
> > index 04896d6..a689021 100644
> > --- a/sound/soc/omap/rx51.c
> > +++ b/sound/soc/omap/rx51.c
> > @@ -310,25 +310,27 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
> > *rtd)
> > return err;
> > }
> >  
> > -   /* AV jack detection */
> > -   err = snd_soc_jack_new(codec, "AV Jack",
> > -  SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
> > -  _av_jack);
> > -   if (err) {
> > -   dev_err(card->dev, "Failed to add AV Jack\n");
> > -   return err;
> > -   }
> > +   if (!IS_ERR(pdata->jack_detection_gpio)) {
> > +   /* AV jack detection */
> > +   err = snd_soc_jack_new(codec, "AV Jack",
> > +  SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
> > +  _av_jack);
> > +   if (err) {
> > +   dev_err(card->dev, "Failed to add AV Jack\n");
> > +   return err;
> > +   }
> >  
> > -   /* prepare gpio for snd_soc_jack_add_gpios */
> > -   rx51_av_jack_gpios[0].gpio = desc_to_gpio(pdata->jack_detection_gpio);
> > -   devm_gpiod_put(card->dev, pdata->jack_detection_gpio);
> > +   /* prepare gpio for snd_soc_jack_add_gpios */
> > +   rx51_av_jack_gpios[0].gpio = 
> > desc_to_gpio(pdata->jack_detection_gpio);
> > +   devm_gpiod_put(card->dev, pdata->jack_detection_gpio);
> >  
> > -   err = snd_soc_jack_add_gpios(_av_jack,
> > -ARRAY_SIZE(rx51_av_jack_gpios),
> > -rx51_av_jack_gpios);
> > -   if (err) {
> > -   dev_err(card->dev, "Failed to add GPIOs\n");
> > -   return err;
> > +   err = snd_soc_jack_add_gpios(_av_jack,
> > +ARRAY_SIZE(rx51_av_jack_gpios),
> > +rx51_av_jack_gpios);
> > +   if (err) {
> > +   dev_err(card->dev, "Failed to add GPIOs\n");
> > +   return err;
> > +   }
> > }
> >  
> > return err;
> > @@ -336,8 +338,11 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
> > *rtd)
> >  
> >  static int rx51_card_remove(struct snd_soc_card *card)
> >  {
> > -   snd_soc_jack_free_gpios(_av_jack, ARRAY_SIZE(rx51_av_jack_gpios),
> > -   rx51_av_jack_gpios);
> > +   struct rx51_audio_pdata *pdata = snd_soc_card_get_drvdata(card);
> > +
> > +   if (!IS_ERR(pdata->jack_detection_gpio))
> > +   snd_soc_jack_free_gpios(_av_jack, 
> > ARRAY_SIZE(rx51_av_jack_gpios),
> > +   rx51_av_jack_gpios);
> >  
> > return 0;
> >  }
> > @@ -470,8 +475,8 @@ static int rx51_soc_probe(struct platform_device *pdev)
> > pdata->jack_detection_gpio = devm_gpiod_get(card->dev,
> > "jack-detection");
> > if (IS_ERR(pdata->jack_detection_gpio)) {
> > +   /* Do not fail, qemu does not emulate jack detection gpio */
> > dev_err(card->dev, "could not get jack detection gpio\n");
> > -   return PTR_ERR(pdata->jack_detection_gpio);
> > }
> >  
> > pdata->eci_sw_gpio = devm_gpiod_get(card->dev, "eci-switch");
> > 
> 
> 

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) 
http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] ASoC: rx51: do not fail if could not get jack detection gpio

2015-01-27 Thread Peter Ujfalusi
Hi,

On 01/26/2015 10:51 PM, Pali Rohár wrote:
> qemu does not emulate it

Not sure about this... How does qemu emulate tlv320aic3106, tpa6130a2a, McBSP,
sDMA for audio to work? What about the other three GPIOs in this machine driver?

The "nokia,n900-audio" compatible mandates that the jack-detection GPIO must
be provided (Documentation/devicetree/bindings/sound/nokia,rx51.txt) since it
means that the driver is running on the Nokia n900 HW.


> Signed-off-by: Pali Rohár 
> ---
>  sound/soc/omap/rx51.c |   45 +
>  1 file changed, 25 insertions(+), 20 deletions(-)
> 
> diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
> index 04896d6..a689021 100644
> --- a/sound/soc/omap/rx51.c
> +++ b/sound/soc/omap/rx51.c
> @@ -310,25 +310,27 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
> *rtd)
>   return err;
>   }
>  
> - /* AV jack detection */
> - err = snd_soc_jack_new(codec, "AV Jack",
> -SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
> -_av_jack);
> - if (err) {
> - dev_err(card->dev, "Failed to add AV Jack\n");
> - return err;
> - }
> + if (!IS_ERR(pdata->jack_detection_gpio)) {
> + /* AV jack detection */
> + err = snd_soc_jack_new(codec, "AV Jack",
> +SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
> +_av_jack);
> + if (err) {
> + dev_err(card->dev, "Failed to add AV Jack\n");
> + return err;
> + }
>  
> - /* prepare gpio for snd_soc_jack_add_gpios */
> - rx51_av_jack_gpios[0].gpio = desc_to_gpio(pdata->jack_detection_gpio);
> - devm_gpiod_put(card->dev, pdata->jack_detection_gpio);
> + /* prepare gpio for snd_soc_jack_add_gpios */
> + rx51_av_jack_gpios[0].gpio = 
> desc_to_gpio(pdata->jack_detection_gpio);
> + devm_gpiod_put(card->dev, pdata->jack_detection_gpio);
>  
> - err = snd_soc_jack_add_gpios(_av_jack,
> -  ARRAY_SIZE(rx51_av_jack_gpios),
> -  rx51_av_jack_gpios);
> - if (err) {
> - dev_err(card->dev, "Failed to add GPIOs\n");
> - return err;
> + err = snd_soc_jack_add_gpios(_av_jack,
> +  ARRAY_SIZE(rx51_av_jack_gpios),
> +  rx51_av_jack_gpios);
> + if (err) {
> + dev_err(card->dev, "Failed to add GPIOs\n");
> + return err;
> + }
>   }
>  
>   return err;
> @@ -336,8 +338,11 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
> *rtd)
>  
>  static int rx51_card_remove(struct snd_soc_card *card)
>  {
> - snd_soc_jack_free_gpios(_av_jack, ARRAY_SIZE(rx51_av_jack_gpios),
> - rx51_av_jack_gpios);
> + struct rx51_audio_pdata *pdata = snd_soc_card_get_drvdata(card);
> +
> + if (!IS_ERR(pdata->jack_detection_gpio))
> + snd_soc_jack_free_gpios(_av_jack, 
> ARRAY_SIZE(rx51_av_jack_gpios),
> + rx51_av_jack_gpios);
>  
>   return 0;
>  }
> @@ -470,8 +475,8 @@ static int rx51_soc_probe(struct platform_device *pdev)
>   pdata->jack_detection_gpio = devm_gpiod_get(card->dev,
>   "jack-detection");
>   if (IS_ERR(pdata->jack_detection_gpio)) {
> + /* Do not fail, qemu does not emulate jack detection gpio */
>   dev_err(card->dev, "could not get jack detection gpio\n");
> - return PTR_ERR(pdata->jack_detection_gpio);
>   }
>  
>   pdata->eci_sw_gpio = devm_gpiod_get(card->dev, "eci-switch");
> 


-- 
Péter
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] ASoC: rx51: do not fail if could not get jack detection gpio

2015-01-27 Thread Pali Rohár
On Tuesday 27 January 2015 14:41:43 Peter Ujfalusi wrote:
 On 01/27/2015 03:32 PM, Pavel Machek wrote:
  On Tue 2015-01-27 15:27:58, Peter Ujfalusi wrote:
  Hi,
  
  On 01/26/2015 10:51 PM, Pali Rohár wrote:
  qemu does not emulate it
  
  Not sure about this... How does qemu emulate tlv320aic3106,
  tpa6130a2a, McBSP, sDMA for audio to work? What about the
  other three GPIOs in this machine driver?
  

No idea, but with my patch rx51-audio loads without any problem.

  The nokia,n900-audio compatible mandates that the
  jack-detection GPIO must be provided
  (Documentation/devicetree/bindings/sound/nokia,rx51.txt)
  since it means that the driver is running on the Nokia
  n900 HW.
  
  Fix the documentation, then :-).
 
 You mean document a workaround for qemu, right? AFAIK the
 documentation is fine ;)
 
  [Actually, GPIO is provided, it just can't be requested,
  AFAICT.]
 
 So what about the other GPIOs in the machine driver? Why is
 this jack-detection GPIO is special for qemu?
 

Qemu does not detect it and cause rx51-audio driver to fail.

  It is quite important to keep qemu working, really.
  Debugging early boot on hardware is very hard, for example.
 
 I understand, but looking at the history of the driver, if it
 fails now with the jack-detection GPIO, it should have been
 failing in the past as well. What triggered this sudden qemu
 does not like jack-detection GPIO? Before the
 devm_gpiod_get() conversion the driver should have failed in
 snd_soc_jack_add_gpios() phase.
 

With 3.12 kernel rx51-audio driver loads without any problem. So 
there is some regression. Here is dmesg log from 3.12 kernel:

[1.123779] rx51-audio rx51-audio:  tlv320aic3x-hifi - omap-
mcbsp.2 mapping ok
[1.130737] tlv320aic3x-codec 2-0019: ASoC: mux b Right Line1L 
Mux has no paths
[1.131347] tlv320aic3x-codec 2-0019: ASoC: mux b Left Line1R 
Mux has no paths
[1.133697] tlv320aic3x-codec 2-0018: ASoC: mux Right Line1L 
Mux has no paths
[1.134307] tlv320aic3x-codec 2-0018: ASoC: mux Left Line1R 
Mux has no paths
[1.137451] input: RX-51 AV Jack as /devices/platform/rx51-
audio/sound/card0/input2

I will try to investigate where is problem...

  And yes, some day we may need different dts for n900-qemu
  (vs. n900-hw), but lets not do it just yet.
  
  Pavel
  
  Signed-off-by: Pali Rohár pali.ro...@gmail.com
  ---
  
   sound/soc/omap/rx51.c |   45
   + 1 file
   changed, 25 insertions(+), 20 deletions(-)
  
  diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
  index 04896d6..a689021 100644
  --- a/sound/soc/omap/rx51.c
  +++ b/sound/soc/omap/rx51.c
  @@ -310,25 +310,27 @@ static int rx51_aic34_init(struct
  snd_soc_pcm_runtime *rtd)
  
return err;

}
  
  - /* AV jack detection */
  - err = snd_soc_jack_new(codec, AV Jack,
  -SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
  -rx51_av_jack);
  - if (err) {
  - dev_err(card-dev, Failed to add AV Jack\n);
  - return err;
  - }
  + if (!IS_ERR(pdata-jack_detection_gpio)) {
  + /* AV jack detection */
  + err = snd_soc_jack_new(codec, AV Jack,
  +SND_JACK_HEADSET | 
SND_JACK_VIDEOOUT,
  +rx51_av_jack);
  + if (err) {
  + dev_err(card-dev, Failed to add AV Jack\n);
  + return err;
  + }
  
  - /* prepare gpio for snd_soc_jack_add_gpios */
  - rx51_av_jack_gpios[0].gpio =
  desc_to_gpio(pdata-jack_detection_gpio);
  - devm_gpiod_put(card-dev, pdata-jack_detection_gpio);
  + /* prepare gpio for snd_soc_jack_add_gpios */
  + rx51_av_jack_gpios[0].gpio =
  desc_to_gpio(pdata-jack_detection_gpio);
  + devm_gpiod_put(card-dev, pdata-
jack_detection_gpio);
  
  - err = snd_soc_jack_add_gpios(rx51_av_jack,
  -  ARRAY_SIZE(rx51_av_jack_gpios),
  -  rx51_av_jack_gpios);
  - if (err) {
  - dev_err(card-dev, Failed to add GPIOs\n);
  - return err;
  + err = snd_soc_jack_add_gpios(rx51_av_jack,
  +  ARRAY_SIZE(rx51_av_jack_gpios),
  +  rx51_av_jack_gpios);
  + if (err) {
  + dev_err(card-dev, Failed to add GPIOs\n);
  + return err;
  + }
  
}

return err;
  
  @@ -336,8 +338,11 @@ static int rx51_aic34_init(struct
  snd_soc_pcm_runtime *rtd)
  
   static int rx51_card_remove(struct snd_soc_card *card)
   {
  
  - snd_soc_jack_free_gpios(rx51_av_jack,
  ARRAY_SIZE(rx51_av_jack_gpios), - 
rx51_av_jack_gpios);
  + struct rx51_audio_pdata *pdata =
  snd_soc_card_get_drvdata(card); +
  + if (!IS_ERR(pdata-jack_detection_gpio))
  + snd_soc_jack_free_gpios(rx51_av_jack,
  ARRAY_SIZE(rx51_av_jack_gpios),
  

Re: [PATCH] ASoC: rx51: do not fail if could not get jack detection gpio

2015-01-27 Thread Peter Ujfalusi
On 01/27/2015 03:32 PM, Pavel Machek wrote:
 On Tue 2015-01-27 15:27:58, Peter Ujfalusi wrote:
 Hi,

 On 01/26/2015 10:51 PM, Pali Rohár wrote:
 qemu does not emulate it

 Not sure about this... How does qemu emulate tlv320aic3106, tpa6130a2a, 
 McBSP,
 sDMA for audio to work? What about the other three GPIOs in this machine 
 driver?

 The nokia,n900-audio compatible mandates that the jack-detection GPIO must
 be provided (Documentation/devicetree/bindings/sound/nokia,rx51.txt) since it
 means that the driver is running on the Nokia n900 HW.
 
 Fix the documentation, then :-).

You mean document a workaround for qemu, right? AFAIK the documentation is fine 
;)

 [Actually, GPIO is provided, it just can't be requested, AFAICT.]

So what about the other GPIOs in the machine driver? Why is this
jack-detection GPIO is special for qemu?

 
 It is quite important to keep qemu working, really. Debugging early
 boot on hardware is very hard, for example.

I understand, but looking at the history of the driver, if it fails now with
the jack-detection GPIO, it should have been failing in the past as well. What
triggered this sudden qemu does not like jack-detection GPIO?
Before the devm_gpiod_get() conversion the driver should have failed in
snd_soc_jack_add_gpios() phase.

-- 
Péter


 And yes, some day we may need different dts for n900-qemu
 (vs. n900-hw), but lets not do it just yet.
   Pavel
 

 Signed-off-by: Pali Rohár pali.ro...@gmail.com
 ---
  sound/soc/omap/rx51.c |   45 +
  1 file changed, 25 insertions(+), 20 deletions(-)

 diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
 index 04896d6..a689021 100644
 --- a/sound/soc/omap/rx51.c
 +++ b/sound/soc/omap/rx51.c
 @@ -310,25 +310,27 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
 *rtd)
 return err;
 }
  
 -   /* AV jack detection */
 -   err = snd_soc_jack_new(codec, AV Jack,
 -  SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
 -  rx51_av_jack);
 -   if (err) {
 -   dev_err(card-dev, Failed to add AV Jack\n);
 -   return err;
 -   }
 +   if (!IS_ERR(pdata-jack_detection_gpio)) {
 +   /* AV jack detection */
 +   err = snd_soc_jack_new(codec, AV Jack,
 +  SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
 +  rx51_av_jack);
 +   if (err) {
 +   dev_err(card-dev, Failed to add AV Jack\n);
 +   return err;
 +   }
  
 -   /* prepare gpio for snd_soc_jack_add_gpios */
 -   rx51_av_jack_gpios[0].gpio = desc_to_gpio(pdata-jack_detection_gpio);
 -   devm_gpiod_put(card-dev, pdata-jack_detection_gpio);
 +   /* prepare gpio for snd_soc_jack_add_gpios */
 +   rx51_av_jack_gpios[0].gpio = 
 desc_to_gpio(pdata-jack_detection_gpio);
 +   devm_gpiod_put(card-dev, pdata-jack_detection_gpio);
  
 -   err = snd_soc_jack_add_gpios(rx51_av_jack,
 -ARRAY_SIZE(rx51_av_jack_gpios),
 -rx51_av_jack_gpios);
 -   if (err) {
 -   dev_err(card-dev, Failed to add GPIOs\n);
 -   return err;
 +   err = snd_soc_jack_add_gpios(rx51_av_jack,
 +ARRAY_SIZE(rx51_av_jack_gpios),
 +rx51_av_jack_gpios);
 +   if (err) {
 +   dev_err(card-dev, Failed to add GPIOs\n);
 +   return err;
 +   }
 }
  
 return err;
 @@ -336,8 +338,11 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
 *rtd)
  
  static int rx51_card_remove(struct snd_soc_card *card)
  {
 -   snd_soc_jack_free_gpios(rx51_av_jack, ARRAY_SIZE(rx51_av_jack_gpios),
 -   rx51_av_jack_gpios);
 +   struct rx51_audio_pdata *pdata = snd_soc_card_get_drvdata(card);
 +
 +   if (!IS_ERR(pdata-jack_detection_gpio))
 +   snd_soc_jack_free_gpios(rx51_av_jack, 
 ARRAY_SIZE(rx51_av_jack_gpios),
 +   rx51_av_jack_gpios);
  
 return 0;
  }
 @@ -470,8 +475,8 @@ static int rx51_soc_probe(struct platform_device *pdev)
 pdata-jack_detection_gpio = devm_gpiod_get(card-dev,
 jack-detection);
 if (IS_ERR(pdata-jack_detection_gpio)) {
 +   /* Do not fail, qemu does not emulate jack detection gpio */
 dev_err(card-dev, could not get jack detection gpio\n);
 -   return PTR_ERR(pdata-jack_detection_gpio);
 }
  
 pdata-eci_sw_gpio = devm_gpiod_get(card-dev, eci-switch);



 



--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] ASoC: rx51: do not fail if could not get jack detection gpio

2015-01-27 Thread Peter Ujfalusi
Hi,

On 01/26/2015 10:51 PM, Pali Rohár wrote:
 qemu does not emulate it

Not sure about this... How does qemu emulate tlv320aic3106, tpa6130a2a, McBSP,
sDMA for audio to work? What about the other three GPIOs in this machine driver?

The nokia,n900-audio compatible mandates that the jack-detection GPIO must
be provided (Documentation/devicetree/bindings/sound/nokia,rx51.txt) since it
means that the driver is running on the Nokia n900 HW.


 Signed-off-by: Pali Rohár pali.ro...@gmail.com
 ---
  sound/soc/omap/rx51.c |   45 +
  1 file changed, 25 insertions(+), 20 deletions(-)
 
 diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
 index 04896d6..a689021 100644
 --- a/sound/soc/omap/rx51.c
 +++ b/sound/soc/omap/rx51.c
 @@ -310,25 +310,27 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
 *rtd)
   return err;
   }
  
 - /* AV jack detection */
 - err = snd_soc_jack_new(codec, AV Jack,
 -SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
 -rx51_av_jack);
 - if (err) {
 - dev_err(card-dev, Failed to add AV Jack\n);
 - return err;
 - }
 + if (!IS_ERR(pdata-jack_detection_gpio)) {
 + /* AV jack detection */
 + err = snd_soc_jack_new(codec, AV Jack,
 +SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
 +rx51_av_jack);
 + if (err) {
 + dev_err(card-dev, Failed to add AV Jack\n);
 + return err;
 + }
  
 - /* prepare gpio for snd_soc_jack_add_gpios */
 - rx51_av_jack_gpios[0].gpio = desc_to_gpio(pdata-jack_detection_gpio);
 - devm_gpiod_put(card-dev, pdata-jack_detection_gpio);
 + /* prepare gpio for snd_soc_jack_add_gpios */
 + rx51_av_jack_gpios[0].gpio = 
 desc_to_gpio(pdata-jack_detection_gpio);
 + devm_gpiod_put(card-dev, pdata-jack_detection_gpio);
  
 - err = snd_soc_jack_add_gpios(rx51_av_jack,
 -  ARRAY_SIZE(rx51_av_jack_gpios),
 -  rx51_av_jack_gpios);
 - if (err) {
 - dev_err(card-dev, Failed to add GPIOs\n);
 - return err;
 + err = snd_soc_jack_add_gpios(rx51_av_jack,
 +  ARRAY_SIZE(rx51_av_jack_gpios),
 +  rx51_av_jack_gpios);
 + if (err) {
 + dev_err(card-dev, Failed to add GPIOs\n);
 + return err;
 + }
   }
  
   return err;
 @@ -336,8 +338,11 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
 *rtd)
  
  static int rx51_card_remove(struct snd_soc_card *card)
  {
 - snd_soc_jack_free_gpios(rx51_av_jack, ARRAY_SIZE(rx51_av_jack_gpios),
 - rx51_av_jack_gpios);
 + struct rx51_audio_pdata *pdata = snd_soc_card_get_drvdata(card);
 +
 + if (!IS_ERR(pdata-jack_detection_gpio))
 + snd_soc_jack_free_gpios(rx51_av_jack, 
 ARRAY_SIZE(rx51_av_jack_gpios),
 + rx51_av_jack_gpios);
  
   return 0;
  }
 @@ -470,8 +475,8 @@ static int rx51_soc_probe(struct platform_device *pdev)
   pdata-jack_detection_gpio = devm_gpiod_get(card-dev,
   jack-detection);
   if (IS_ERR(pdata-jack_detection_gpio)) {
 + /* Do not fail, qemu does not emulate jack detection gpio */
   dev_err(card-dev, could not get jack detection gpio\n);
 - return PTR_ERR(pdata-jack_detection_gpio);
   }
  
   pdata-eci_sw_gpio = devm_gpiod_get(card-dev, eci-switch);
 


-- 
Péter
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] ASoC: rx51: do not fail if could not get jack detection gpio

2015-01-27 Thread Pavel Machek
On Tue 2015-01-27 15:27:58, Peter Ujfalusi wrote:
 Hi,
 
 On 01/26/2015 10:51 PM, Pali Rohár wrote:
  qemu does not emulate it
 
 Not sure about this... How does qemu emulate tlv320aic3106, tpa6130a2a, McBSP,
 sDMA for audio to work? What about the other three GPIOs in this machine 
 driver?
 
 The nokia,n900-audio compatible mandates that the jack-detection GPIO must
 be provided (Documentation/devicetree/bindings/sound/nokia,rx51.txt) since it
 means that the driver is running on the Nokia n900 HW.

Fix the documentation, then :-). [Actually, GPIO is provided, it just
can't be requested, AFAICT.]

It is quite important to keep qemu working, really. Debugging early
boot on hardware is very hard, for example.

And yes, some day we may need different dts for n900-qemu
(vs. n900-hw), but lets not do it just yet.
Pavel

 
  Signed-off-by: Pali Rohár pali.ro...@gmail.com
  ---
   sound/soc/omap/rx51.c |   45 +
   1 file changed, 25 insertions(+), 20 deletions(-)
  
  diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
  index 04896d6..a689021 100644
  --- a/sound/soc/omap/rx51.c
  +++ b/sound/soc/omap/rx51.c
  @@ -310,25 +310,27 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
  *rtd)
  return err;
  }
   
  -   /* AV jack detection */
  -   err = snd_soc_jack_new(codec, AV Jack,
  -  SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
  -  rx51_av_jack);
  -   if (err) {
  -   dev_err(card-dev, Failed to add AV Jack\n);
  -   return err;
  -   }
  +   if (!IS_ERR(pdata-jack_detection_gpio)) {
  +   /* AV jack detection */
  +   err = snd_soc_jack_new(codec, AV Jack,
  +  SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
  +  rx51_av_jack);
  +   if (err) {
  +   dev_err(card-dev, Failed to add AV Jack\n);
  +   return err;
  +   }
   
  -   /* prepare gpio for snd_soc_jack_add_gpios */
  -   rx51_av_jack_gpios[0].gpio = desc_to_gpio(pdata-jack_detection_gpio);
  -   devm_gpiod_put(card-dev, pdata-jack_detection_gpio);
  +   /* prepare gpio for snd_soc_jack_add_gpios */
  +   rx51_av_jack_gpios[0].gpio = 
  desc_to_gpio(pdata-jack_detection_gpio);
  +   devm_gpiod_put(card-dev, pdata-jack_detection_gpio);
   
  -   err = snd_soc_jack_add_gpios(rx51_av_jack,
  -ARRAY_SIZE(rx51_av_jack_gpios),
  -rx51_av_jack_gpios);
  -   if (err) {
  -   dev_err(card-dev, Failed to add GPIOs\n);
  -   return err;
  +   err = snd_soc_jack_add_gpios(rx51_av_jack,
  +ARRAY_SIZE(rx51_av_jack_gpios),
  +rx51_av_jack_gpios);
  +   if (err) {
  +   dev_err(card-dev, Failed to add GPIOs\n);
  +   return err;
  +   }
  }
   
  return err;
  @@ -336,8 +338,11 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
  *rtd)
   
   static int rx51_card_remove(struct snd_soc_card *card)
   {
  -   snd_soc_jack_free_gpios(rx51_av_jack, ARRAY_SIZE(rx51_av_jack_gpios),
  -   rx51_av_jack_gpios);
  +   struct rx51_audio_pdata *pdata = snd_soc_card_get_drvdata(card);
  +
  +   if (!IS_ERR(pdata-jack_detection_gpio))
  +   snd_soc_jack_free_gpios(rx51_av_jack, 
  ARRAY_SIZE(rx51_av_jack_gpios),
  +   rx51_av_jack_gpios);
   
  return 0;
   }
  @@ -470,8 +475,8 @@ static int rx51_soc_probe(struct platform_device *pdev)
  pdata-jack_detection_gpio = devm_gpiod_get(card-dev,
  jack-detection);
  if (IS_ERR(pdata-jack_detection_gpio)) {
  +   /* Do not fail, qemu does not emulate jack detection gpio */
  dev_err(card-dev, could not get jack detection gpio\n);
  -   return PTR_ERR(pdata-jack_detection_gpio);
  }
   
  pdata-eci_sw_gpio = devm_gpiod_get(card-dev, eci-switch);
  
 
 

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) 
http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] ASoC: rx51: do not fail if could not get jack detection gpio

2015-01-26 Thread Pali Rohár
qemu does not emulate it

Signed-off-by: Pali Rohár 
---
 sound/soc/omap/rx51.c |   45 +
 1 file changed, 25 insertions(+), 20 deletions(-)

diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
index 04896d6..a689021 100644
--- a/sound/soc/omap/rx51.c
+++ b/sound/soc/omap/rx51.c
@@ -310,25 +310,27 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
*rtd)
return err;
}
 
-   /* AV jack detection */
-   err = snd_soc_jack_new(codec, "AV Jack",
-  SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
-  _av_jack);
-   if (err) {
-   dev_err(card->dev, "Failed to add AV Jack\n");
-   return err;
-   }
+   if (!IS_ERR(pdata->jack_detection_gpio)) {
+   /* AV jack detection */
+   err = snd_soc_jack_new(codec, "AV Jack",
+  SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
+  _av_jack);
+   if (err) {
+   dev_err(card->dev, "Failed to add AV Jack\n");
+   return err;
+   }
 
-   /* prepare gpio for snd_soc_jack_add_gpios */
-   rx51_av_jack_gpios[0].gpio = desc_to_gpio(pdata->jack_detection_gpio);
-   devm_gpiod_put(card->dev, pdata->jack_detection_gpio);
+   /* prepare gpio for snd_soc_jack_add_gpios */
+   rx51_av_jack_gpios[0].gpio = 
desc_to_gpio(pdata->jack_detection_gpio);
+   devm_gpiod_put(card->dev, pdata->jack_detection_gpio);
 
-   err = snd_soc_jack_add_gpios(_av_jack,
-ARRAY_SIZE(rx51_av_jack_gpios),
-rx51_av_jack_gpios);
-   if (err) {
-   dev_err(card->dev, "Failed to add GPIOs\n");
-   return err;
+   err = snd_soc_jack_add_gpios(_av_jack,
+ARRAY_SIZE(rx51_av_jack_gpios),
+rx51_av_jack_gpios);
+   if (err) {
+   dev_err(card->dev, "Failed to add GPIOs\n");
+   return err;
+   }
}
 
return err;
@@ -336,8 +338,11 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime *rtd)
 
 static int rx51_card_remove(struct snd_soc_card *card)
 {
-   snd_soc_jack_free_gpios(_av_jack, ARRAY_SIZE(rx51_av_jack_gpios),
-   rx51_av_jack_gpios);
+   struct rx51_audio_pdata *pdata = snd_soc_card_get_drvdata(card);
+
+   if (!IS_ERR(pdata->jack_detection_gpio))
+   snd_soc_jack_free_gpios(_av_jack, 
ARRAY_SIZE(rx51_av_jack_gpios),
+   rx51_av_jack_gpios);
 
return 0;
 }
@@ -470,8 +475,8 @@ static int rx51_soc_probe(struct platform_device *pdev)
pdata->jack_detection_gpio = devm_gpiod_get(card->dev,
"jack-detection");
if (IS_ERR(pdata->jack_detection_gpio)) {
+   /* Do not fail, qemu does not emulate jack detection gpio */
dev_err(card->dev, "could not get jack detection gpio\n");
-   return PTR_ERR(pdata->jack_detection_gpio);
}
 
pdata->eci_sw_gpio = devm_gpiod_get(card->dev, "eci-switch");
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] ASoC: rx51: do not fail if could not get jack detection gpio

2015-01-26 Thread Pali Rohár
qemu does not emulate it

Signed-off-by: Pali Rohár pali.ro...@gmail.com
---
 sound/soc/omap/rx51.c |   45 +
 1 file changed, 25 insertions(+), 20 deletions(-)

diff --git a/sound/soc/omap/rx51.c b/sound/soc/omap/rx51.c
index 04896d6..a689021 100644
--- a/sound/soc/omap/rx51.c
+++ b/sound/soc/omap/rx51.c
@@ -310,25 +310,27 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime 
*rtd)
return err;
}
 
-   /* AV jack detection */
-   err = snd_soc_jack_new(codec, AV Jack,
-  SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
-  rx51_av_jack);
-   if (err) {
-   dev_err(card-dev, Failed to add AV Jack\n);
-   return err;
-   }
+   if (!IS_ERR(pdata-jack_detection_gpio)) {
+   /* AV jack detection */
+   err = snd_soc_jack_new(codec, AV Jack,
+  SND_JACK_HEADSET | SND_JACK_VIDEOOUT,
+  rx51_av_jack);
+   if (err) {
+   dev_err(card-dev, Failed to add AV Jack\n);
+   return err;
+   }
 
-   /* prepare gpio for snd_soc_jack_add_gpios */
-   rx51_av_jack_gpios[0].gpio = desc_to_gpio(pdata-jack_detection_gpio);
-   devm_gpiod_put(card-dev, pdata-jack_detection_gpio);
+   /* prepare gpio for snd_soc_jack_add_gpios */
+   rx51_av_jack_gpios[0].gpio = 
desc_to_gpio(pdata-jack_detection_gpio);
+   devm_gpiod_put(card-dev, pdata-jack_detection_gpio);
 
-   err = snd_soc_jack_add_gpios(rx51_av_jack,
-ARRAY_SIZE(rx51_av_jack_gpios),
-rx51_av_jack_gpios);
-   if (err) {
-   dev_err(card-dev, Failed to add GPIOs\n);
-   return err;
+   err = snd_soc_jack_add_gpios(rx51_av_jack,
+ARRAY_SIZE(rx51_av_jack_gpios),
+rx51_av_jack_gpios);
+   if (err) {
+   dev_err(card-dev, Failed to add GPIOs\n);
+   return err;
+   }
}
 
return err;
@@ -336,8 +338,11 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime *rtd)
 
 static int rx51_card_remove(struct snd_soc_card *card)
 {
-   snd_soc_jack_free_gpios(rx51_av_jack, ARRAY_SIZE(rx51_av_jack_gpios),
-   rx51_av_jack_gpios);
+   struct rx51_audio_pdata *pdata = snd_soc_card_get_drvdata(card);
+
+   if (!IS_ERR(pdata-jack_detection_gpio))
+   snd_soc_jack_free_gpios(rx51_av_jack, 
ARRAY_SIZE(rx51_av_jack_gpios),
+   rx51_av_jack_gpios);
 
return 0;
 }
@@ -470,8 +475,8 @@ static int rx51_soc_probe(struct platform_device *pdev)
pdata-jack_detection_gpio = devm_gpiod_get(card-dev,
jack-detection);
if (IS_ERR(pdata-jack_detection_gpio)) {
+   /* Do not fail, qemu does not emulate jack detection gpio */
dev_err(card-dev, could not get jack detection gpio\n);
-   return PTR_ERR(pdata-jack_detection_gpio);
}
 
pdata-eci_sw_gpio = devm_gpiod_get(card-dev, eci-switch);
-- 
1.7.9.5

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/