Received: by 10.213.65.68 with SMTP id h4csp639487imn; Fri, 23 Mar 2018 12:15:41 -0700 (PDT) X-Google-Smtp-Source: AG47ELv3gkDHqkFPmDD9EKG9NaTG5NnEWizd2GrMI0WrlN1uThfs0KkffNGxeGHlM/Y1Goakw1Uv X-Received: by 10.98.102.131 with SMTP id s3mr18313477pfj.89.1521832541133; Fri, 23 Mar 2018 12:15:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521832541; cv=none; d=google.com; s=arc-20160816; b=igbMEXP9h3P3DHGITH/6fPF87huCT09Q9Btchr0pBMs/yihSsxvecHiYP33me8sHYk Ljw0KLGc8m7m7vzvANZmcNDv/7MtrvuRVzOTXdFmIDnnyBAcVTp3gRbrU9ChmnRSUz3U RXXnJqsxltpR629lvgr7piWR4eZynGFnbBx8VTHmzTGcDe8Cd/Ly7j4j71tw0v1kER6k sLnFxDyj5b/rxzVIy3nLtX4nQbF9jfJgPdxi1j5tZzrLYzR8k9H0lsueW7ce6iqN6ymk YPkaI4bdd+fW97h5eiIfgkM9CliN4FbwfOHJ/oOZzJt/vvE7aPycIl9GYHTCe/EH8ECe 0zYw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dmarc-filter :dkim-signature:dkim-signature:arc-authentication-results; bh=wGWjaEVUNJ8tqthEwyVOXYwj+jW4ceUHG8zYuS3cTvw=; b=zNyU7RUU8GJAl3QV5hvD/Ei6Dld7TBfCGn7aYBx6iChlwCat4XVLVVnQta+dflQOXb r0DVZNdnLY2g4AR8cAAoSWR0kTqdGj+DOQir4EBDcNQysEN9vd0fzQdSuVxsIDFdcKhK m0t+CH4vACfwCabz7OqqIruPzeP3PTW6dYLKPl6l0QtAxQxmsmrmIeTwdCG3ngHfwsuz 3gfl0Wn33doERRaWa6zLBh+xQnBqjU98zLQkhkKzVgtBqP0Ist3M9Ld5iTI89EnLw5sP KnubTfqAD/mzncT4KAL17JLkufFPV1JRzuav8V4Z0UOvxUvwYl1P5ui+HYXzp30ZwczA ffzw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@codeaurora.org header.s=default header.b=FEvh03Xa; dkim=pass header.i=@codeaurora.org header.s=default header.b=htElBOF+; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j129si7073552pfb.311.2018.03.23.12.15.25; Fri, 23 Mar 2018 12:15:41 -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=@codeaurora.org header.s=default header.b=FEvh03Xa; dkim=pass header.i=@codeaurora.org header.s=default header.b=htElBOF+; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752279AbeCWTO0 (ORCPT + 99 others); Fri, 23 Mar 2018 15:14:26 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:45796 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751668AbeCWTOY (ORCPT ); Fri, 23 Mar 2018 15:14:24 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id 6AB46607A2; Fri, 23 Mar 2018 19:14:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1521832463; bh=cKZHAOVf6RQe3lYPXu/A+5Yish1E6yURqLcfBVE1e2g=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=FEvh03XaxW4CFLYxsLcNIPKjiCmJsXiPjZ8EqhFQ45+j3cLK3MQWsPvEdJodJUAAk ApykP8E0dXMdMKf53C5GTXT+jFrUC6ElsQlDy/m8QegyePwrXst4Fvq1gjx5jJs+Zw 0hpPwZef3C7sNrwNDH66YQQQENNfXGEmxG0TST0E= X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on pdx-caf-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from [10.63.172.127] (i-global254.qualcomm.com [199.106.103.254]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: tsoni@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 671F6603AF; Fri, 23 Mar 2018 19:14:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1521832462; bh=cKZHAOVf6RQe3lYPXu/A+5Yish1E6yURqLcfBVE1e2g=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=htElBOF+RSrhmEbBhLdVbRBPhaWRRkLeuvHob67laD5dDDJWnTG65l88RfrLnPhpr vxGJE7oE1Bi+ippuP6Uy5BOU5LtC4FjrP+IS/JflX9O8gi2reabiDQxeLA42I9R7dr ouJMhZYMMZVz5G0q/4sqElu95JXTFoH6PeZfPmPM= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 671F6603AF Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=tsoni@codeaurora.org Subject: Re: [PATCH V3] Input: pm8941-pwrkey: add resin key capabilities To: Tirupathi Reddy , dmitry.torokhov@gmail.com, bjorn.andersson@linaro.org, robh+dt@kernel.org, mark.rutland@arm.com Cc: linux-input@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org References: <1521786192-19487-1-git-send-email-tirupath@codeaurora.org> From: Trilok Soni Message-ID: <240c6cbc-886f-94c6-cba4-3c4eb3ed0b45@codeaurora.org> Date: Fri, 23 Mar 2018 12:14:22 -0700 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:59.0) Gecko/20100101 Thunderbird/59.0 MIME-Version: 1.0 In-Reply-To: <1521786192-19487-1-git-send-email-tirupath@codeaurora.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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? > + of_node_put(np); > + if (error) { > + dev_err(&pdev->dev, "failed resin key initialization: %d\n", > + error); > + return error; > + } > + } > + > error = input_register_device(pwrkey->input); > if (error) { > dev_err(&pdev->dev, "failed to register input device: %d\n", > -- ---Trilok Soni Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project