lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <201701092132.51414@pali>
Date:   Mon, 9 Jan 2017 21:32:51 +0100
From:   Pali Rohár <pali.rohar@...il.com>
To:     Mark Brown <broonie@...nel.org>
Cc:     Tony Lindgren <tony@...mide.com>,
        Peter Ujfalusi <peter.ujfalusi@...com>,
        Jarkko Nikula <jarkko.nikula@...mer.com>,
        Liam Girdwood <lgirdwood@...il.com>,
        "Lars-Peter Clausen" <lars@...afoo.de>,
        Aaro Koskinen <aaro.koskinen@....fi>,
        Nishanth Menon <nm@...com>, Sebastian Reichel <sre@...nel.org>,
        Pavel Machek <pavel@....cz>,
        Ivaylo Dimitrov <ivo.g.dimitrov.75@...il.com>,
        joerg Reisenweber <joerg@...nmoko.org>,
        linux-omap@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: Nokia N900 headset detection & MIC Bias + TVOUT

On Monday 09 January 2017 20:38:28 Mark Brown wrote:
> On Mon, Jan 09, 2017 at 08:29:53PM +0100, Pali Rohár wrote:
> > On Monday 09 January 2017 20:22:01 Mark Brown wrote:
> > > point where you need an actual change.  Note that if something
> > > holds the microphone bias on (like something using the
> > > microphone) separately then that'll take effect so if you really
> > > need things to get turned off then that won't work but you
> > > probably have trouble anyway in that situation.
> > 
> > This is needed for cable/jack detection at time when jack is
> > inserted. So before it there cannot be any user of (disconnected)
> > microphone.
> 
> That's not going to stop userspace, consider what happens if the
> headset gets removed and userspace is slow to stop a recording for
> example.

Ok. But in this case changing mic bias does not introduce any problems
as userspace already trying to record from disconnected microphone.

> > What I need is to enable mic bias, measure ADC of some time period,
> > check status of some GPIOs. Then disable mic bias, measure ADC
> > again and check GPIOs. I in this detection procedure I need to
> > ensure that nobody changes mic bias. So I though that locking the
> > whole procedure could ensure that.
> 
> That sounds racy and a bit unusual - what's the actual procedure
> here?

The whole old code for production Nokia N900 devices is there:
https://github.com/pali/linux-n900/blob/v2.6.28-nokia/drivers/misc/nokia-av.c

If it is usual/unusual/crazy/wtf/:-) I can just tell: it is working fine
with that Maemo 2.6.28 production kernel. And there is no documentation
for it, just code. So the best what we can do is reimplement that driver
for mainline kernel and check if it is working. (Then we can maybe start
changing logic if something make sense...).

It is more complicated, but basic idea seems to be:

Use interrupt handler when jack_detection_gpio changes. When 1 --> jack
unplugged (no detection is needed), otherwise plugged and start
detection.

Start: set eci_sw_gpio to 1, enable mic bias, wait 20msec

Detection point 1: if eci0_gpio is 1 then goto Detection point 3

Detection point 2: measure ECI_ADC (thresholds define type) and goto Stop

Detection point 3: set eci_sw_gpio to 0, wait 20msec, if eci1_gpio is 1 then goto Stop (open cable 
was inserted)

Detection point 4: set eci_sw_gpio to 1, disable mic bias, measure ECI_ADC until it stabilize 
(thresholds define type)

Stop: set eci_sw_gpio to 1, revert mic bias

Thresholds for Detection point 2 are defined as:
#define THRESHOLD_GROUNDED	40		// HEADPHONES or line input cable or external mic
#define THRESHOLD_VIDEO_HI	150		// VIDEO_CABLE

Thresholds for Detection point 4 are defined as:
#define THRESHOLD_HEADSET_HI	1000	// BASIC_HEADSET

(probably threshold for basic headset is not correct)

The whole procedure is repeated 5-10 times. If open cable is detected
then eci_sw_gpio is set to 0 and procedure is periodically repeated
after some interval (looking at the code I think that interrupt for
eci1_gpio could be used instead of busy waiting). Optionally if nothing
(= unknown) after 5-10 times is detected then another procedure for ECI
headsets could be used. As Joerg pointed that nokia-av.c code has
incorrect detection for ECI it first needs to be investigated. But it
will need to disable TVOUT (OMAP3430 TV_OUT1 and TV_VFB1 pins).

-- 
Pali Rohár
pali.rohar@...il.com

Download attachment "signature.asc " of type "application/pgp-signature" (199 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ