On Wed, Apr 20, 2011 at 05:31:02PM +0800, Mark Brown wrote:
On Wed, Apr 20, 2011 at 02:52:12PM +0800, Lu Guanqun wrote:
I have a question wrt jack detection, suppose now I have internal speaker enabled and then headphone is inserted. According to the current jack code in asoc, the Headphone pin wil be enabled, but it does nothing to Internal Speaker. There is still sound coming out from speaker.
This is a policy question - depending on the use case the application may wish to still play sound out of the speaker. One obvious example here is ringtones on phones. If the user has been doing something like listen to music on headphones but then takes the headphones off they'll probably not hear anything that plays out of only the headphones so you should play ringtones out of both outputs in order to ensure that they are audible.
Yes, it's related to policy. But I see some inconsistencies in handling this stuff. In this above example, you suggest we should play out of both outputs. However in HDA code, the common way when headphone is inserted is to mute the speaker and enable the headphone. Is there some differences between the HDA code and the ASoC code? Or this is just due to legacy code?
If you really want to you can add an invert to the hookup for a pin, but it's not recommended unless there's some physical reason both can't be enabled simultaneously.
The possible solution is to let the application make the policy to switch the output source to Headphone, because the jack event can be observed. If we decide to let the userspace application make the policy, then why do we bother to enable the jack pin at the first place?
If we can detect the physical presence of the output transducer it's not really a policy decision if it's worth enabling the audio path.