Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp2470478imm; Mon, 16 Jul 2018 08:32:36 -0700 (PDT) X-Google-Smtp-Source: AAOMgpeyU7HhpDFjQhmfWJvLGSG5DccsNCl3EVINEWXSQYEFIzA6Rz2HEMs2DODZNkWQyRrczueY X-Received: by 2002:a17:902:9a08:: with SMTP id v8-v6mr17285271plp.148.1531755156016; Mon, 16 Jul 2018 08:32:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531755155; cv=none; d=google.com; s=arc-20160816; b=pgBcW191D9XCp9ptf1mWTVHlLO7jItnzHEc9fZb4tve3lqanJHZhC7vB0oy5FNuck4 OE2lflabqmtkcXfImy7nF9W5ASlTEmw1lm9NSntSWs+7jwk406Z0rLtJPHkcYHWKzyfA 05+HeBpY2Gwu0NiZEI+pUlAfhxjIshBCxCfpJVKizMqjWg4sleSvv7tLoV1v4GX6zLgn 4TUGSOWy2Kyg75x+WUoIyRysqQCSmXKGpiVNGmBRQe2ZfKJDh7KUTPuqI9Oj8r/n9lmw +WhQgWWxpaJmH8BeSfdh4PQUpe34R1sNA02KU6byZH9TEtEyGJxECsuCCl7LcKku75lR mckw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=B+F8dT430y6KC3AOKj9WWvOfODS2FxYLxlzM29Sy2BY=; b=DI6ER8ZzGRG1/+D21cq7QwjFcwQpxBMV3ulV7d6FVbPJ01s2zpwBb30LM6a7xxI5lF 5n5CCcUjy9pMQgyMT9aBRIM+b+jxtwHONzA4Q9rSXnPK17y20w5zi3Cw4NSkSp4uY2+r 8FUHN9NHmdIMGIkVEfi8tabUqeaCt6Fl1uGNxfBJiFsdi3EKNddQwq7kQ7TtEAgOf2ar 0+UN6ed0bzXxRh1OrSbDIFN+2ca72cEru9xzudi9cn3k8HXUhPTLVdAp6D1h2T7WwfH8 7DjmTPTg3whmkh9hQButYiGutFKtQszUyB7h6yRjCvy9Q1BPy5TrT+ENHCMtKnFNEOL2 TVMQ== ARC-Authentication-Results: i=1; mx.google.com; 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 m23-v6si2832244pgb.420.2018.07.16.08.32.21; Mon, 16 Jul 2018 08:32:35 -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; 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 S1731126AbeGPP6y (ORCPT + 99 others); Mon, 16 Jul 2018 11:58:54 -0400 Received: from michel.telenet-ops.be ([195.130.137.88]:56042 "EHLO michel.telenet-ops.be" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730890AbeGPP6y (ORCPT ); Mon, 16 Jul 2018 11:58:54 -0400 Received: from ramsan.of.borg ([84.194.111.163]) by michel.telenet-ops.be with bizsmtp id BTWu1y00C3XaVaC06TWulE; Mon, 16 Jul 2018 17:30:56 +0200 Received: from rox.of.borg ([192.168.97.57]) by ramsan.of.borg with esmtp (Exim 4.86_2) (envelope-from ) id 1ff5Sg-0007Mq-2b; Mon, 16 Jul 2018 17:30:54 +0200 Received: from geert by rox.of.borg with local (Exim 4.90_1) (envelope-from ) id 1ff5Sg-0000UK-1d; Mon, 16 Jul 2018 17:30:54 +0200 From: Geert Uytterhoeven To: Marek Vasut , Liam Girdwood , Mark Brown Cc: "Rafael J . Wysocki" , Pavel Machek , Len Brown , linux-pm@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Geert Uytterhoeven Subject: [PATCH v4 1/3] regulator: bd9571mwv: Use "backup_mode" sysfs file instead of "wake_up" Date: Mon, 16 Jul 2018 17:30:50 +0200 Message-Id: <20180716153052.1830-2-geert+renesas@glider.be> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180716153052.1830-1-geert+renesas@glider.be> References: <20180716153052.1830-1-geert+renesas@glider.be> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently the BD9571MWV PMIC driver uses the standard "wake_up" sysfs file to control enablement of DDR Backup Mode. However, configuring DDR Backup Mode is not really equivalent to configuring the PMIC as a wake-up source. To avoid confusion, use a custom "backup_mode" attribute file in sysfs instead. Signed-off-by: Geert Uytterhoeven --- v4: - Fix build error and warning if !CONFIG_PM_SLEEP, v3: - New. --- drivers/regulator/bd9571mwv-regulator.c | 52 ++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 5 deletions(-) diff --git a/drivers/regulator/bd9571mwv-regulator.c b/drivers/regulator/bd9571mwv-regulator.c index be574eb444ebda97..1da36a6590c84ba4 100644 --- a/drivers/regulator/bd9571mwv-regulator.c +++ b/drivers/regulator/bd9571mwv-regulator.c @@ -30,6 +30,7 @@ struct bd9571mwv_reg { /* DDR Backup Power */ u8 bkup_mode_cnt_keepon; /* from "rohm,ddr-backup-power" */ u8 bkup_mode_cnt_saved; + bool bkup_mode_enabled; /* Power switch type */ bool rstbmode_level; @@ -171,13 +172,40 @@ static int bd9571mwv_bkup_mode_write(struct bd9571mwv *bd, unsigned int mode) return 0; } +static ssize_t backup_mode_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct bd9571mwv_reg *bdreg = dev_get_drvdata(dev); + + return sprintf(buf, "%s\n", bdreg->bkup_mode_enabled ? "on" : "off"); +} + +static ssize_t backup_mode_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct bd9571mwv_reg *bdreg = dev_get_drvdata(dev); + int ret; + + if (!count) + return 0; + + ret = kstrtobool(buf, &bdreg->bkup_mode_enabled); + if (ret) + return ret; + + return count; +} + +DEVICE_ATTR_RW(backup_mode); + static int bd9571mwv_suspend(struct device *dev) { struct bd9571mwv_reg *bdreg = dev_get_drvdata(dev); unsigned int mode; int ret; - if (!device_may_wakeup(dev)) + if (!bdreg->bkup_mode_enabled) return 0; /* Save DDR Backup Mode */ @@ -204,7 +232,7 @@ static int bd9571mwv_resume(struct device *dev) { struct bd9571mwv_reg *bdreg = dev_get_drvdata(dev); - if (!device_may_wakeup(dev)) + if (!bdreg->bkup_mode_enabled) return 0; /* Restore DDR Backup Mode */ @@ -215,9 +243,15 @@ static const struct dev_pm_ops bd9571mwv_pm = { SET_SYSTEM_SLEEP_PM_OPS(bd9571mwv_suspend, bd9571mwv_resume) }; +static int bd9571mwv_regulator_remove(struct platform_device *pdev) +{ + device_remove_file(&pdev->dev, &dev_attr_backup_mode); + return 0; +} #define DEV_PM_OPS &bd9571mwv_pm #else #define DEV_PM_OPS NULL +#define bd9571mwv_regulator_remove NULL #endif /* CONFIG_PM_SLEEP */ static int bd9571mwv_regulator_probe(struct platform_device *pdev) @@ -270,14 +304,21 @@ static int bd9571mwv_regulator_probe(struct platform_device *pdev) return -EINVAL; } +#ifdef CONFIG_PM_SLEEP if (bdreg->bkup_mode_cnt_keepon) { - device_set_wakeup_capable(&pdev->dev, true); + int ret; + /* - * Wakeup is enabled by default in pulse mode, but needs + * Backup mode is enabled by default in pulse mode, but needs * explicit user setup in level mode. */ - device_set_wakeup_enable(&pdev->dev, bdreg->rstbmode_pulse); + bdreg->bkup_mode_enabled = bdreg->rstbmode_pulse; + + ret = device_create_file(&pdev->dev, &dev_attr_backup_mode); + if (ret) + return ret; } +#endif /* CONFIG_PM_SLEEP */ return 0; } @@ -294,6 +335,7 @@ static struct platform_driver bd9571mwv_regulator_driver = { .pm = DEV_PM_OPS, }, .probe = bd9571mwv_regulator_probe, + .remove = bd9571mwv_regulator_remove, .id_table = bd9571mwv_regulator_id_table, }; module_platform_driver(bd9571mwv_regulator_driver); -- 2.17.1