Received: by 10.213.65.68 with SMTP id h4csp644511imn; Fri, 23 Mar 2018 12:23:21 -0700 (PDT) X-Google-Smtp-Source: AG47ELu0U7CBYaNRttOaINeSeC5O5D/6CUCdaZUS5xHgio5TuH9TAf4FQvxvINwYfTOkrLHeQB/v X-Received: by 10.101.98.137 with SMTP id f9mr21535133pgv.6.1521833001056; Fri, 23 Mar 2018 12:23:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521833001; cv=none; d=google.com; s=arc-20160816; b=rf9VNVPankBy6vpYWYGxUvVZjBr5Zo6N6MKD/WEsUjx6j3nrP2y4yppvlZUhwBgQz6 hE7+P8W/oWpz/ykE024JP8YtfBn0jAS8PAa6iBUlCCkpe5OeK14jGZl0uHKK7ZoyMLUG 2YVcN9e8lRwAyFPyJTU3jd45Cg+8C8KvxGnWsRRhWphu05RurgFj3odVWeQZfxAM26Sw cD/uygbjVLg6tpYsblUw3/U5uM2on/o4p8lOezMhZt7Mnh+nUYmK0R1McnieRsY9ekUQ J1Pe+ol05XFGX4yUtPKdjpWuupurfYgg4HPP0Z9I2FLjcKQ3eTSeJpkhHoWDRqaO05rR yfZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature:arc-authentication-results; bh=vkmGTVneZzvsfju37lrgX/guqxV3DZuggxMhz8U9XXE=; b=B6o2bAAAJ3nXgtKGeKih11BsODZA2ExZXv64OtCP8uVdQQtsPCA0/3vr7WHZ1eOV7J 8bNOr2WMxl8wTLYAjlpLdGBWolU1IBfd5qg5nGVBfGZZGH1jPdFWpOS1r4pIwEdDRMDM bpyfnrhfKHbZLE3A7Zk6N1arSq10uuqxwyT6GkZRlSKfgZaooJ15AmM7HtciWKOEfQGa mrC8abq/i6VnkB4SfjW6QtB/ybhxeUhnlkZIURoJh8Hx8LhN5uxX1B8QaC0YlLNA9dyU j71ReioOf+R18fAKi6xjFSXVdIjBRjEuUOuit7mFxr+/s2d+WRuQ7Tdu/v6NyUuWQJFJ HZyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=tt3jd35t; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b14si6412764pge.252.2018.03.23.12.23.06; Fri, 23 Mar 2018 12:23:21 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=tt3jd35t; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752642AbeCWTWT (ORCPT + 99 others); Fri, 23 Mar 2018 15:22:19 -0400 Received: from mail-pg0-f68.google.com ([74.125.83.68]:33102 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752610AbeCWTWO (ORCPT ); Fri, 23 Mar 2018 15:22:14 -0400 Received: by mail-pg0-f68.google.com with SMTP id i194so735816pgd.0; Fri, 23 Mar 2018 12:22:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=vkmGTVneZzvsfju37lrgX/guqxV3DZuggxMhz8U9XXE=; b=tt3jd35toScEm90PR9aNLUy81m+UB66+/8rI9A8U0oBbc5QCUbFZUWW3fh1RORXadN s44WLb/H06/29GsljEyhLYVRM7HHKCSfrxWF8ZMYy2bB9raiolkSG81Sp635161x+0Kk 2j698OetBJJiVaGNOO6f5mcAP5LIH0F8DC+2UmiAsl1woQK3y5YEsVs7vizrajCxEi+q 8i7j45vpAbNJiTr1KsMhGCoCoLxvLm/z/Ez2bIcD/RZYNB6Tk5LaWdY+zz6EfFyV1RNi 4nT2NopTiY+dt0EHLUuv2pMBPOedoZhxrUmIHL6xd+q7j+XwurV3D2lPpXAF2ToOEeBO /3iA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=vkmGTVneZzvsfju37lrgX/guqxV3DZuggxMhz8U9XXE=; b=ONxy1u/8kY2udQo11vdzg8jQxaN9x6NOu30M3RL2LlsLmOGyoF0movQKba5gtrLhDL YBd731/+kMEMnwYEV4PbAZGNbI1dPK+G5Iw9mJtjkd9aiez8o8RbfJk6dNVimuF3V30W ECjDUOcthSXCJo4xu9kpipf3aX9evenedpnb4Y0P1L5vn2UDr+L+NmEaPmiEg2l6sJGd yOvysqFEjeBTvGR/ByvKz8diSFF4b4kz74TvBQDIPt86cR1UBJ1VbjvKc+83/VGBmHKg ThBV50m0oMWrIlB/KoBQO648HTQ5eCdv4/YIDzpeLN9wOhU0ajW5JN+oSduSj2jBsJqN BQFA== X-Gm-Message-State: AElRT7FUdoInjCvHQzNOv9yY1XQeWphIW5Kani6g2/OIM9sbYmDULtu8 fqNpc8IJzFqQVtaI8+q0l3A= X-Received: by 10.167.129.217 with SMTP id c25mr5462400pfn.143.1521832932805; Fri, 23 Mar 2018 12:22:12 -0700 (PDT) Received: from dtor-ws ([2620:0:1000:1511:8de6:27a8:ed13:2ef5]) by smtp.gmail.com with ESMTPSA id t65sm4801262pfe.174.2018.03.23.12.22.11 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 23 Mar 2018 12:22:12 -0700 (PDT) Date: Fri, 23 Mar 2018 12:22:10 -0700 From: Dmitry Torokhov To: Trilok Soni Cc: Tirupathi Reddy , bjorn.andersson@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com, linux-input@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH V3] Input: pm8941-pwrkey: add resin key capabilities Message-ID: <20180323192210.GE255819@dtor-ws> References: <1521786192-19487-1-git-send-email-tirupath@codeaurora.org> <240c6cbc-886f-94c6-cba4-3c4eb3ed0b45@codeaurora.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <240c6cbc-886f-94c6-cba4-3c4eb3ed0b45@codeaurora.org> User-Agent: Mutt/1.9.2 (2017-12-15) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Mar 23, 2018 at 12:14:22PM -0700, Trilok Soni wrote: > Hi Tirupathi, > > > +static irqreturn_t pm8941_resinkey_irq(int irq, void *_data) > > +{ > > + struct pm8941_pwrkey *pwrkey = _data; > > + unsigned int sts; > > + int error; > > + u32 key_code = pwrkey->resin_key_code; > > + > > + error = regmap_read(pwrkey->regmap, > > + pwrkey->baseaddr + PON_RT_STS, &sts); > > + if (error) > > + return IRQ_HANDLED; > > + > > + input_report_key(pwrkey->input, key_code, !!(sts & PON_RESIN_N_SET)); > > + input_sync(pwrkey->input); > > + > > + return IRQ_HANDLED; > > +} > > + > > static int __maybe_unused pm8941_pwrkey_suspend(struct device *dev) > > { > > struct pm8941_pwrkey *pwrkey = dev_get_drvdata(dev); > > @@ -153,9 +175,56 @@ static int __maybe_unused pm8941_pwrkey_resume(struct device *dev) > > static SIMPLE_DEV_PM_OPS(pm8941_pwr_key_pm_ops, > > pm8941_pwrkey_suspend, pm8941_pwrkey_resume); > > +static int pm8941_resin_key_init(struct pm8941_pwrkey *pwrkey, > > + struct device_node *np) > > +{ > > + int error, irq; > > + bool pull_up; > > + > > + /* > > + * Get the standard-key parameters. This might not be > > + * specified if there is no key mapping on the reset line. > > + */ > > + error = of_property_read_u32(np, "linux,code", &pwrkey->resin_key_code); > > + if (error) { > > + dev_err(pwrkey->dev, "failed to read key-code for resin key\n"); > > + return error; > > + } > > + > > + pull_up = of_property_read_bool(np, "bias-pull-up"); > > + > > + irq = irq_of_parse_and_map(np, 0); > > + if (irq < 0) { > > + dev_err(pwrkey->dev, "failed to get resin irq\n"); > > + return -EINVAL; > > + } > > + > > + /* Register key configuration */ > > + input_set_capability(pwrkey->input, EV_KEY, pwrkey->resin_key_code); > > + > > + error = regmap_update_bits(pwrkey->regmap, > > + pwrkey->baseaddr + PON_PULL_CTL, > > + PON_RESIN_PULL_UP, > > + pull_up ? PON_RESIN_PULL_UP : 0); > > + if (error) { > > + dev_err(pwrkey->dev, "failed to set resin pull: %d\n", error); > > + return error; > > + } > > + > > + error = devm_request_threaded_irq(pwrkey->dev, irq, NULL, > > + pm8941_resinkey_irq, IRQF_ONESHOT, > > + "pm8941_resinkey", pwrkey); > > + if (error) > > + dev_err(pwrkey->dev, "failed requesting resin key IRQ: %d\n", > > + error); > > + > > + return error; > > +} > > + > > static int pm8941_pwrkey_probe(struct platform_device *pdev) > > { > > struct pm8941_pwrkey *pwrkey; > > + struct device_node *np = NULL; > > bool pull_up; > > u32 req_delay; > > int error; > > @@ -241,6 +310,18 @@ static int pm8941_pwrkey_probe(struct platform_device *pdev) > > return error; > > } > > + np = of_find_node_by_name(pdev->dev.of_node, "resin"); > > + if (np) { > > + /* resin key capabilities are defined in device node */ > > + error = pm8941_resin_key_init(pwrkey, np); > > > What happens if interrupts comes as soon as you have done the key_init(..) > here? I see that you are registering the input device after it, right? Looks > like you should do this at the end of probe? It should be fine, input devices properly allocated (with input_allocate_device() or devm- version) are able to accept events even if input device has not been registered yet. It is and advertised feature: drivers/input/input.c: " * input_event() - report new input event ... * NOTE: input_event() may be safely used right after input device was * allocated with input_allocate_device(), even before it is registered * with input_register_device(), but the event will not reach any of the * input handlers. Such early invocation of input_event() may be used * to 'seed' initial state of a switch or initial position of absolute * axis, etc. " Thanks. -- Dmitry