From patchwork Tue Oct 7 05:28:25 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guenter Roeck X-Patchwork-Id: 5041051 Return-Path: X-Original-To: patchwork-linux-parisc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 1F620C11AB for ; Tue, 7 Oct 2014 05:31:40 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 42C9020131 for ; Tue, 7 Oct 2014 05:31:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 652012010C for ; Tue, 7 Oct 2014 05:31:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754184AbaJGFbf (ORCPT ); Tue, 7 Oct 2014 01:31:35 -0400 Received: from bh-25.webhostbox.net ([208.91.199.152]:41446 "EHLO bh-25.webhostbox.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754017AbaJGFbD (ORCPT ); Tue, 7 Oct 2014 01:31:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=roeck-us.net; s=default; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=A86cH9ks65X9PU9nhclBxy819n4wwi6DVLGTSSnr1NI=; b=j+ucWMPrBIj5xOQ1LOHtls/nMy3StZEXn3T/AXj8HJcgXH+4UXxhglg6wQ7TXbjeSJAgjGfIf8WCfDe88s6JixAAnrwwyHG+gEtRLI+/KBSrD5wbxsw6+tv5eUXH5fupa2rCMMh1EJy5UMmmlcqycW74BZr27AwN7yxUbaPg99c=; Received: from mailnull by bh-25.webhostbox.net with sa-checked (Exim 4.82) (envelope-from ) id 1XbNMU-002jg3-DE for linux-parisc@vger.kernel.org; Tue, 07 Oct 2014 05:31:02 +0000 Received: from 108-223-40-66.lightspeed.sntcca.sbcglobal.net ([108.223.40.66]:32926 helo=localhost) by bh-25.webhostbox.net with esmtpa (Exim 4.82) (envelope-from ) id 1XbNLL-002c5g-2s; Tue, 07 Oct 2014 05:29:51 +0000 From: Guenter Roeck To: linux-kernel@vger.kernel.org Cc: adi-buildroot-devel@lists.sourceforge.net, devel@driverdev.osuosl.org, devicetree@vger.kernel.org, lguest@lists.ozlabs.org, linux-acpi@vger.kernel.org, linux-alpha@vger.kernel.org, linux-am33-list@redhat.com, linux-cris-kernel@axis.com, linux-efi@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-m32r-ja@ml.linux-m32r.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-tegra@vger.kernel.org, linux-xtensa@linux-xtensa.org, openipmi-developer@lists.sourceforge.net, user-mode-linux-devel@lists.sourceforge.net, linux-arm-kernel@lists.infradead.org, linux-c6x-dev@linux-c6x.org, linux-ia64@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-metag@vger.kernel.org, linux-mips@linux-mips.org, linux-parisc@vger.kernel.org, linux-pm@vger.kernel.org, linux-sh@vger.kernel.org, xen-devel@lists.xenproject.org, Guenter Roeck , Sebastian Reichel , Dmitry Eremin-Solenikov , David Woodhouse Subject: [PATCH 23/44] power/reset: qnap-poweroff: Register with kernel poweroff handler Date: Mon, 6 Oct 2014 22:28:25 -0700 Message-Id: <1412659726-29957-24-git-send-email-linux@roeck-us.net> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1412659726-29957-1-git-send-email-linux@roeck-us.net> References: <1412659726-29957-1-git-send-email-linux@roeck-us.net> X-Authenticated_sender: guenter@roeck-us.net X-OutGoing-Spam-Status: No, score=0.3 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY, URIBL_RHS_DOB autolearn=ham version=3.3.1 X-CTCH-PVer: 0000001 X-CTCH-Spam: Unknown X-CTCH-VOD: Unknown X-CTCH-Flags: 0 X-CTCH-RefID: str=0001.0A020204.54337A96.00EB, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-CTCH-Score: 0.000 X-CTCH-ScoreCust: 0.000 X-CTCH-Rules: X-CTCH-SenderID: linux@roeck-us.net X-CTCH-SenderID-Flags: 0 X-CTCH-SenderID-TotalMessages: 980 X-CTCH-SenderID-TotalSpam: 0 X-CTCH-SenderID-TotalSuspected: 20 X-CTCH-SenderID-TotalConfirmed: 0 X-CTCH-SenderID-TotalBulk: 0 X-CTCH-SenderID-TotalVirus: 0 X-CTCH-SenderID-TotalRecipients: 0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - bh-25.webhostbox.net X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - roeck-us.net X-Get-Message-Sender-Via: bh-25.webhostbox.net: mailgid no entry from get_relayhosts_entry X-Source: X-Source-Args: X-Source-Dir: Sender: linux-parisc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-parisc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Register with kernel poweroff handler instead of setting pm_power_off directly. Register with default priority value of 128 to reflect that the original code generates an error if another poweroff handler has already been registered when the driver is loaded. Cc: Sebastian Reichel Cc: Dmitry Eremin-Solenikov Cc: David Woodhouse Signed-off-by: Guenter Roeck Acked-by: Andrew Lunn --- drivers/power/reset/qnap-poweroff.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/power/reset/qnap-poweroff.c b/drivers/power/reset/qnap-poweroff.c index a75db7f..c474980 100644 --- a/drivers/power/reset/qnap-poweroff.c +++ b/drivers/power/reset/qnap-poweroff.c @@ -16,7 +16,9 @@ #include #include +#include #include +#include #include #include #include @@ -55,7 +57,8 @@ static void __iomem *base; static unsigned long tclk; static const struct power_off_cfg *cfg; -static void qnap_power_off(void) +static int qnap_power_off(struct notifier_block *this, unsigned long unused1, + void *unused2) { const unsigned divisor = ((tclk + (8 * cfg->baud)) / (16 * cfg->baud)); @@ -72,14 +75,20 @@ static void qnap_power_off(void) /* send the power-off command to PIC */ writel(cfg->cmd, UART1_REG(TX)); + + return NOTIFY_DONE; } +static struct notifier_block qnap_poweroff_nb = { + .notifier_call = qnap_power_off, + .priority = 128, +}; + static int qnap_power_off_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; struct resource *res; struct clk *clk; - char symname[KSYM_NAME_LEN]; const struct of_device_id *match = of_match_node(qnap_power_off_of_match_table, np); @@ -106,22 +115,13 @@ static int qnap_power_off_probe(struct platform_device *pdev) tclk = clk_get_rate(clk); - /* Check that nothing else has already setup a handler */ - if (pm_power_off) { - lookup_symbol_name((ulong)pm_power_off, symname); - dev_err(&pdev->dev, - "pm_power_off already claimed %p %s", - pm_power_off, symname); - return -EBUSY; - } - pm_power_off = qnap_power_off; - - return 0; + return register_poweroff_handler(&qnap_poweroff_nb); } static int qnap_power_off_remove(struct platform_device *pdev) { - pm_power_off = NULL; + unregister_poweroff_handler(&qnap_poweroff_nb); + return 0; }