From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751790AbdAYJsU (ORCPT ); Wed, 25 Jan 2017 04:48:20 -0500 Received: from mailout4.samsung.com ([203.254.224.34]:44305 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751771AbdAYJsR (ORCPT ); Wed, 25 Jan 2017 04:48:17 -0500 MIME-version: 1.0 Content-type: text/plain; charset=UTF-8 X-AuditID: b6c32a37-f79196d000001a39-36-588874564560 Content-transfer-encoding: 8BIT Message-id: <58887456.1060904@samsung.com> Date: Wed, 25 Jan 2017 18:48:06 +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+NgFvrJKsWRmVeSWpSXmKPExsWy7bCmnm5YSUeEwYqpFhb/ptxgt7i8aw6b xe3GFWwWy9/+Z3Ng8Xg58TebR9+WVYwenzfJBTBHpdpkpCampBYppOYl56dk5qXbKnkHxzvH m5oZGOoaWlqYKynkJeam2iq5+AToumXmAG1TUihLzCkFCgUkFhcr6dvZFOWXlqQqZOQXl9gq RRsaGukZGpjrGRkZ6ZkYx1oZmQKVJKRmHPuTUPBVvOLGFL8GxtNCXYycHBICJhKr5jSyQ9hi EhfurWfrYuTiEBLYwShxcvc5dginnUni1sdWNpiOEzc+sEIkljNK7FnXB5bgFRCU+DH5HksX IwcHs4C8xJFL2SBhZgFNia2710MNuscocfhTEwtEvZbEtRnNrCA2i4CqROvbj4wgNhtQfP+L G2Az+QUUJa7+eAwWFxWIkNg5/xvYqSICFhJTltxihliQKHFl3g8mEFtYIEni+dffYDWcAqES y1afZwJZLCHQzy5xb3Yr2HESArISmw4wQzzjIrFy+msmCFtY4tXxLdCgkJZY9e8WVG83o8Sa l02sEE4Po0TjmqPQoDCWuP/gHtQVfBLvvvawQizglehog4avh8T+01+ghjpKvFr+nxkSEssY JVZcv880gVFhFlLgzUIE3iykwFvAyLyKUSy1oDg3PbXYsMBYrzgxt7g0L10vOT93EyM42WmZ 72DccM7nEKMAB6MSD++LlPYIIdbEsuLK3EOMEhzMSiK8jrkdEUK8KYmVValF+fFFpTmpxYcY TYFhP5FZSjQ5H5iI80riDU3MDE2MTAwNzY0MjJTEeRc3WkcICaQnlqRmp6YWpBbB9DFxcEo1 MNo33hA1P6AvF26/RHdPRKdeqMDnw48OJzpl6LuyuZYIXefXqdh5xP3QPot2Ox7RkL+hKtu4 vSVYamyiUm7ufWaQMn3Vw1MJ/29bKP/msKy66bt1UkyflYJ6WZPRzy7hhNxLZ9X4r9dtb+F3 fH8uZa63YHZrCOf1bRted3Yb3ZtaM739ZnSmEktxRqKhFnNRcSIAj6IUoYwDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrEIsWRmVeSWpSXmKPExsVy+t9jAd2wko4Ig53PVSz+TbnBbnF51xw2 i9uNK9gslr/9z+bA4vFy4m82j74tqxg9Pm+SC2COcrPJSE1MSS1SSM1Lzk/JzEu3VQoNcdO1 UFLIS8xNtVWK0PUNCVJSKEvMKQXyjAzQgINzgHuwkr5dglvGsT8JBV/FK25M8WtgPC3UxcjJ ISFgInHixgdWCFtM4sK99WxdjFwcQgJLGSUOnpvKBpLgFRCU+DH5HksXIwcHs4C8xJFL2SBh ZgF1iUnzFjGD2EICDxgljvaYQZRrSVyb0Qw2k0VAVaL17UdGEJsNKL7/xQ2wkfwCihJXfzxm BBkpKhAh0X2iEiQsImAhMWXJLWaI8YkSFy+1gbUKCyRJPP/6mx1i1QpGiedTtUFsToFQiTkv f7BPYBScheTQWQiHzkJy6AJG5lWMEqkFyQXFSem5hnmp5XrFibnFpXnpesn5uZsYwfHzTGoH 48Fd7ocYBTgYlXh4X6S0RwixJpYVV+YeYpTgYFYS4XXM7YgQ4k1JrKxKLcqPLyrNSS0+xGgK 9OpEZinR5HxgbOeVxBuamJuYGxtYmFtamhgpifM2zn4WLiSQnliSmp2aWpBaBNPHxMEp1cAY /WHB7GKt9Zru5zN/nN98765L4MLV59frhR/6O0Gla9KDo/ckpZxXdbB6HWfxvl606qepDfu0 Tcu8Iqas+LWAc7kMwwX3xB6Nicvlcp65vYpd5pD5WO/lVNWQpmWGHRHLjgvzvNZTU71bO23R D2vDTaI/9qj8fWC8dH26oLe8ZG+5qdz8c9V8SizFGYmGWsxFxYkAN6P4S7UCAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170125094806epcas1p4e129eca500615c9a172eaa83056e665e X-Msg-Generator: CA X-Sender-IP: 203.254.230.26 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: 101P 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 Hi, I modified some minor issue and added my comment on below. After modified them by myself, Applied it. 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 Move these definitions on the top. > + > +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); Remove the space indentation. I prefer to use only tab indentation. > + 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"); Use dev_warn() instead of dev_err() because this message just warn the current status. > + 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); > + > regmap_update_bits(arizona->regmap, > ARIZONA_JACK_DETECT_DEBOUNCE, > ARIZONA_MICD_CLAMP_DB | ARIZONA_JD1_DB, > -- Best Regards, Chanwoo Choi Samsung Electronics