Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2178405ybl; Thu, 30 Jan 2020 12:45:53 -0800 (PST) X-Google-Smtp-Source: APXvYqwuBIX86e61wIy23J+jIpDdaLmvCSj/UysKmmF00KzOyCDytGNxFa/938ji/lmRo7D9pjIs X-Received: by 2002:a9d:7386:: with SMTP id j6mr4915607otk.336.1580417153097; Thu, 30 Jan 2020 12:45:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580417153; cv=none; d=google.com; s=arc-20160816; b=R4udWQIGHmWV/hrUxsOXSbbMa4B4C3ToUI7Ag7QQoD/Oeqbg7l466pCEK5P/h9JgO8 lqCsdcQoSvqJiEsPekGFqWI5sD8dEhBbbnRRXPQGf05FnS0hffHVVgocuHAKBALR5JsJ Ea2326WhK6Go1HDzN95hpc3lE3wC/43nBr7ag/Rwsd12E5Wt4DYnfK5RuovlbBAybfkb vVs6n1eyjORG23Xm0/P7TVTcOxnGiHW437/4npoMxlrMmwqZKK2x3AWGU9T9xm2y0/gT ohBy0ckflRsxUacbzP1KWNxCKkD4t7MSKxRiy3XeG3xqtL2L9C6Ok4N/ufCP0uvaxdIe G7xw== 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:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=aMCqGO6pzPjnIyQyehlTcprRJgNKArYeT/n5QqHWbwU=; b=SpAOGz6XJcO1P17cjaTi3cr3cWtWIUtrHWpdaTH9nDpkg6/tJXDQ6RskFtnCGQBl2F xszNKIMMCsmWo5KCZUsrOqXwOO3w9arhTZVfY/cEv166xogaWFPcOYTykmuD1QTpuPm4 7ZkTWHNn22ugBAtv6gDurOclUII5QDk0E979C/yp4ECEUs9P4fnJeAsOeUOpn6b1F3iU lOTPUtnfcBXPn/E7QLGYiJaPSIRU8ZOYnqCH+Z3k8cTnxZ8oCq64gad0I34XdFrUqfnk WZ9eBvQuqZmUZbcZstCFxmgvv1bfp1Oe7ISk0vmJiHca1vIyYZNhXyuFZ0mepajRQ4Mm COjQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-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 g4si2269870oib.152.2020.01.30.12.45.27; Thu, 30 Jan 2020 12:45:53 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727485AbgA3UpY (ORCPT + 99 others); Thu, 30 Jan 2020 15:45:24 -0500 Received: from mail-wm1-f68.google.com ([209.85.128.68]:35064 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727089AbgA3UpY (ORCPT ); Thu, 30 Jan 2020 15:45:24 -0500 Received: by mail-wm1-f68.google.com with SMTP id b17so5993987wmb.0; Thu, 30 Jan 2020 12:45:22 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aMCqGO6pzPjnIyQyehlTcprRJgNKArYeT/n5QqHWbwU=; b=UA36xoDgTEicI4r5nCLrlVqzHgrzXysWdmtx31gNpABAIOsJuk0v+3QP2ouvk+YhlJ 2vH5O2sWoMbksgVYszFsqclSd+57iH4e84b1rZYInAjYbBEZ3bD/cSuI89kgfOv55bLX NBFBagHCc/H8p04ZiSW/y1UWtJn7ulqcvbIcf2Z2F+yMHXZo64R6f6EN9oES1nb5ZFop yp1H1NOEdOPvJ/trTWVu4J1nILdWtuvRKVrgETMv/YU66GQfKP2zOk7rC6ioQj0ExDet Cc0c3bhHvQftpynu1ab95jQKnIlGs6eTBa2XJ+VhfopEAyaBa6d2x8+DDpVLik0/Iump x6kA== X-Gm-Message-State: APjAAAWhzuxAkSZkufRYW1sOw1krY4VPOuPcTYK9q9xbSQfqYeEu9ais dsOyWFrk1iC9IM8oGayxc1mBstDjdGs= X-Received: by 2002:a1c:7d93:: with SMTP id y141mr7380983wmc.111.1580417121978; Thu, 30 Jan 2020 12:45:21 -0800 (PST) Received: from 1aq-andre.garage.tyco.com ([77.107.218.170]) by smtp.gmail.com with ESMTPSA id x7sm8874885wrq.41.2020.01.30.12.45.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Jan 2020 12:45:21 -0800 (PST) From: =?UTF-8?q?Andr=C3=A9=20Draszik?= To: linux-kernel@vger.kernel.org Cc: =?UTF-8?q?Andr=C3=A9=20Draszik?= , Anson Huang , Dmitry Torokhov , =?UTF-8?q?Horia=20Geant=C4=83?= , Aymen Sghaier , Herbert Xu , "David S. Miller" , Rob Herring , Mark Rutland , linux-crypto@vger.kernel.org, devicetree@vger.kernel.org, linux-input@vger.kernel.org Subject: [PATCH 2/3] Input: snvs_pwrkey - enable snvs clock as needed Date: Thu, 30 Jan 2020 20:45:15 +0000 Message-Id: <20200130204516.4760-2-git@andred.net> X-Mailer: git-send-email 2.23.0.rc1 In-Reply-To: <20200130204516.4760-1-git@andred.net> References: <20200130204516.4760-1-git@andred.net> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org At the moment, enabling this driver without the SNVS RTC driver being active will hang the kernel as soon as the power button is pressed. The reason is that in that case the SNVS isn't enabled, and any attempt to read the SNVS registers will simply hang forever. Ensure the clock is enabled (during the interrupt handler) to make this driver work. Also see commit 7f8993995410 ("drivers/rtc/rtc-snvs: add clock support") and commit edb190cb1734 ("rtc: snvs: make sure clock is enabled for interrupt handle") for similar updates to the snvs rtc driver. Signed-off-by: André Draszik Cc: Anson Huang Cc: Dmitry Torokhov Cc: "Horia Geantă" Cc: Aymen Sghaier Cc: Herbert Xu Cc: "David S. Miller" Cc: Rob Herring Cc: Mark Rutland Cc: linux-crypto@vger.kernel.org Cc: devicetree@vger.kernel.org Cc: linux-input@vger.kernel.org --- drivers/input/keyboard/snvs_pwrkey.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/drivers/input/keyboard/snvs_pwrkey.c b/drivers/input/keyboard/snvs_pwrkey.c index 2f5e3ab5ed63..c29711d8735c 100644 --- a/drivers/input/keyboard/snvs_pwrkey.c +++ b/drivers/input/keyboard/snvs_pwrkey.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -38,6 +39,7 @@ struct pwrkey_drv_data { int wakeup; struct timer_list check_timer; struct input_dev *input; + struct clk *clk; u8 minor_rev; }; @@ -72,6 +74,9 @@ static irqreturn_t imx_snvs_pwrkey_interrupt(int irq, void *dev_id) struct input_dev *input = pdata->input; u32 lp_status; + if (pdata->clk) + clk_enable(pdata->clk); + pm_wakeup_event(input->dev.parent, 0); regmap_read(pdata->snvs, SNVS_LPSR_REG, &lp_status); @@ -96,6 +101,9 @@ static irqreturn_t imx_snvs_pwrkey_interrupt(int irq, void *dev_id) /* clear SPO status */ regmap_write(pdata->snvs, SNVS_LPSR_REG, SNVS_LPSR_SPO); + if (pdata->clk) + clk_disable(pdata->clk); + return IRQ_HANDLED; } @@ -140,6 +148,25 @@ static int imx_snvs_pwrkey_probe(struct platform_device *pdev) if (pdata->irq < 0) return -EINVAL; + pdata->clk = devm_clk_get(&pdev->dev, "snvs-pwrkey"); + if (IS_ERR(pdata->clk)) { + pdata->clk = NULL; + } else { + error = clk_prepare_enable(pdata->clk); + if (error) { + dev_err(&pdev->dev, + "Could not prepare or enable the snvs clock\n"); + return error; + } + error = devm_add_action_or_reset(&pdev->dev, + (void(*)(void *))clk_disable_unprepare, + pdata->clk); + if (error) { + dev_err(&pdev->dev, "failed to add reset action on 'snvs-pwrkey'"); + return error; + } + } + regmap_read(pdata->snvs, SNVS_HPVIDR1_REG, &vid); pdata->minor_rev = vid & 0xff; -- 2.23.0.rc1