From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751746AbdAYJf2 (ORCPT ); Wed, 25 Jan 2017 04:35:28 -0500 Received: from mailout3.samsung.com ([203.254.224.33]:57690 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751717AbdAYJfR (ORCPT ); Wed, 25 Jan 2017 04:35:17 -0500 MIME-version: 1.0 Content-type: text/plain; charset=UTF-8 X-AuditID: b6c32a2e-f79656d0000012f2-1d-588871523520 Content-transfer-encoding: 8BIT Message-id: <58887151.3050503@samsung.com> Date: Wed, 25 Jan 2017 18:35:13 +0900 From: Chanwoo Choi Organization: Samsung Electronics User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 To: Charles Keepax Cc: myungjoo.ham@samsung.com, linux-kernel@vger.kernel.org, patches@opensource.wolfsonmicro.com Subject: Re: [PATCH v2] extcon: arizona: Wait for any running HPDETs to complete on jack removal In-reply-to: <1485336846-6440-1-git-send-email-ckeepax@opensource.wolfsonmicro.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrBKsWRmVeSWpSXmKPExsWy7bCmhm5QYUeEwco+Xot/U26wW1zeNYfN 4nbjCjaL5W//szmweLyc+JvNo2/LKkaPz5vkApijUm0yUhNTUosUUvOS81My89JtlbyD453j Tc0MDHUNLS3MlRTyEnNTbZVcfAJ03TJzgLYpKZQl5pQChQISi4uV9O1sivJLS1IVMvKLS2yV og0NjfQMDcz1jIyM9EyMY62MTIFKElIz7nQ9Zy/YKV5xb90dxgbGxUJdjJwcEgImEn86G5gh bDGJC/fWs3UxcnEICSxllGjZv4IFwmlnkrh17zVjFyMHWMeWBRUgDUICyxkl1h2WAbF5BQQl fky+xwJSwiwgL3HkUjZImFlAU2Lr7vXsEOX3GCVmrrCHKNeSaH+1CizOIqAq8ev1KiYQmw0o vv/FDTYQm19AUeLqj8eMILaoQITEzvnfwOpFBCwkpiy5xQwxP1HiyrwfYL3CAkkSz7/+Bqvh FAiVWLb6PBPI+RICk9klXk1YyAJxvqzEpgNQ/7pIHL22nRXCFpZ4dXwLO4QtLfF36S1GiN5u Rok1L5tYIZweRonGNUfZIKqMJe4/uAd1BZ9E7+8nTBALeCU62qCB6yGx//QXqKGOEq+W/2eG hOcyRokV1+8zTWBUmIUUdrMQYTcLKewWMDKvYhRLLSjOTU8tNi0w1itOzC0uzUvXS87P3cQI TnVaejsY/y3wPsQowMGoxMNr8L49Qog1say4MvcQowQHs5IIr2NuR4QQb0piZVVqUX58UWlO avEhRlNg2E9klhJNzgem4bySeEMTM0MTI0sgNDc0VxLnXVBhHSEkkJ5YkpqdmlqQWgTTx8TB KdXAGLpUWk7QbdnVRzYp2b5HG6pvaR/7vXXf0r8F7OrvWiZm88/vWN7E1+h0wSwhLzVb7eqn iVkibFuW56+ZbMJ939jjxGuGfL3e/lJlAxF7mbNXvt27sdb3Sfme2RmR359e7N4Sbu7gann+ U2aqpz4r80v7vyfThdf5r30m2F/SHD0pW4jhtx+jEktxRqKhFnNRcSIA8NCJi4sDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrCIsWRmVeSWpSXmKPExsVy+t9jAd3Awo4Ig5mrLSz+TbnBbnF51xw2 i9uNK9gslr/9z+bA4vFy4m82j74tqxg9Pm+SC2COcrPJSE1MSS1SSM1Lzk/JzEu3VQoNcdO1 UFLIS8xNtVWK0PUNCVJSKEvMKQXyjAzQgINzgHuwkr5dglvGna7n7AU7xSvurbvD2MC4WKiL kYNDQsBEYsuCii5GTiBTTOLCvfVsXYxcHEICSxklPq0+yAqS4BUQlPgx+R4LSD2zgLzEkUvZ IGFmAXWJSfMWMUPUP2CUmHVwERNEvZZE+6tV7CA2i4CqxK/Xq8DibEDx/S9usIHY/AKKEld/ PGYEmSkqECHRfaISJCwiYCExZcktZoj5iRIXL7UxgtjCAkkSz7/+BhspJLCCUeL5VG0Qm1Mg VGLOyx/sExgFZyG5dBbCpbOQXLqAkXkVo0RqQXJBcVJ6rlFearlecWJucWleul5yfu4mRnAM PZPewXh4l/shRgEORiUe3glJ7RFCrIllxZW5hxglOJiVRHgdczsihHhTEiurUovy44tKc1KL DzGaAr06kVlKNDkfGN95JfGGJuYm5sYGFuaWliZGSuK8jbOfhQsJpCeWpGanphakFsH0MXFw SjUwHl67oZZzN++pybUXZ3WccVvNWskwYT3v7Sdhiyt6xUs60n8ybbvBY9pyeT6n/55DO9Zd nu7cvqrVuNhz88kpSUz32Kw2HDznEX9iV/ijf2c8jpV4eJqyzzRawb8rTXzb6tMiT/6t5vu+ h1n1T1+W6A4txl75u2v39OxvtW1cWLcj76nCNPbVYkosxRmJhlrMRcWJAD+VEaK3AgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170125093513epcas5p4a13e41b60fe9f8f2068914bb14f5daa1 X-Msg-Generator: CA X-Sender-IP: 203.254.230.27 X-Local-Sender: =?UTF-8?B?7LWc7LCs7JqwG1RpemVuIFBsYXRmb3JtIExhYihTL1fshLw=?= =?UTF-8?B?7YSwKRvsgrzshLHsoITsnpAbUzUo7LGF7J6EKS/ssYXsnoQ=?= X-Global-Sender: =?UTF-8?B?Q2hhbndvbyBDaG9pG1RpemVuIFBsYXRmb3JtIExhYi4bU2Ft?= =?UTF-8?B?c3VuZyBFbGVjdHJvbmljcxtTNS9TZW5pb3IgRW5naW5lZXI=?= X-Sender-Code: =?UTF-8?B?QzEwG1NUQUYbQzEwVjgxMTE=?= CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-HopCount: 7 X-CMS-RootMailID: 20170125093332epcas2p27a231cb2c921811302a8e2df9c23f251 X-RootMTR: 20170125093332epcas2p27a231cb2c921811302a8e2df9c23f251 References: <1485336846-6440-1-git-send-email-ckeepax@opensource.wolfsonmicro.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2017년 01월 25일 18:34, Charles Keepax wrote: > As the HPDET can't be aborted mid way through we should not allow any new > insertion to be processed until the previous HPDET has finished. It is very > unlikely but with low enough debounce settings you could start a new HPDET > before the old one has completed, which results in an erroneous reading. > > Signed-off-by: Charles Keepax > --- > > Changes since v1: > - Added defines for the count and delay > - Added a comment to explain why we call arizona_hpdet_wait > > Thanks, > Charles > > drivers/extcon/extcon-arizona.c | 45 +++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 45 insertions(+) > > diff --git a/drivers/extcon/extcon-arizona.c b/drivers/extcon/extcon-arizona.c > index ed78b7c..df98d84 100644 > --- a/drivers/extcon/extcon-arizona.c > +++ b/drivers/extcon/extcon-arizona.c > @@ -1049,6 +1049,42 @@ static void arizona_hpdet_work(struct work_struct *work) > mutex_unlock(&info->lock); > } > > +#define ARIZONA_HPDET_WAIT_COUNT 15 > +#define ARIZONA_HPDET_WAIT_DELAY_MS 20 > + > +static int arizona_hpdet_wait(struct arizona_extcon_info *info) > +{ > + struct arizona *arizona = info->arizona; > + unsigned int val; > + int i, ret; > + > + for (i = 0; i < ARIZONA_HPDET_WAIT_COUNT; i++) { > + ret = regmap_read(arizona->regmap, ARIZONA_HEADPHONE_DETECT_2, > + &val); > + if (ret) { > + dev_err(arizona->dev, > + "Failed to read HPDET state: %d\n", ret); > + return ret; > + } > + > + switch (info->hpdet_ip_version) { > + case 0: > + if (val & ARIZONA_HP_DONE) > + return 0; > + break; > + default: > + if (val & ARIZONA_HP_DONE_B) > + return 0; > + break; > + } > + > + msleep(ARIZONA_HPDET_WAIT_DELAY_MS); > + } > + > + dev_err(arizona->dev, "HPDET did not appear to complete\n"); > + return -ETIMEDOUT; > +} > + > static irqreturn_t arizona_jackdet(int irq, void *data) > { > struct arizona_extcon_info *info = data; > @@ -1155,6 +1191,15 @@ static irqreturn_t arizona_jackdet(int irq, void *data) > "Removal report failed: %d\n", ret); > } > > + /* > + * If the jack was removed during a headphone detection we > + * need to wait for the headphone detection to finish, as > + * it can not be aborted. We don't want to be able to start > + * a new headphone detection from a fresh insert until this > + * one is finished. > + */ > + arizona_hpdet_wait(info); If there is no necessary to handle the error return value, I recommend that you better to use the dev_warn() instead of dev_err(). dev_warn(arizona->dev, "HPDET did not appear to complete\n"); How about changing the debug level with dev_warn()? > + > regmap_update_bits(arizona->regmap, > ARIZONA_JACK_DETECT_DEBOUNCE, > ARIZONA_MICD_CLAMP_DB | ARIZONA_JD1_DB, > -- Best Regards, Chanwoo Choi Samsung Electronics