From patchwork Sat Oct 12 15:51:38 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Lezcano X-Patchwork-Id: 3031791 Return-Path: X-Original-To: patchwork-linux-arm@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 D4BDBBF924 for ; Sat, 12 Oct 2013 15:59:49 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 0AED02038B for ; Sat, 12 Oct 2013 15:59:49 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CD7CD20387 for ; Sat, 12 Oct 2013 15:59:47 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1VV1bB-0007sx-8A; Sat, 12 Oct 2013 15:59:25 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1VV1b8-0006hG-Oc; Sat, 12 Oct 2013 15:59:22 +0000 Received: from mail-we0-f173.google.com ([74.125.82.173]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1VV1b3-0006gw-O6 for linux-arm-kernel@lists.infradead.org; Sat, 12 Oct 2013 15:59:18 +0000 Received: by mail-we0-f173.google.com with SMTP id u57so5505145wes.32 for ; Sat, 12 Oct 2013 08:58:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=tUVl77GRRVzGGsyUbXMEfw2h7xnYlTFN2Zu7RXUNclA=; b=g7crj7TMdoDhZMvUcwq3uGQZTz5UzmEyWaJjy9yGfm98qd7YL9VpiyX3rqckcUIeLT 2c5oC0XssZDMFGIfOKEffDdPD7uqBWsaZT7x9jqsTpLqS9mbTiBxIfgo9L5BrLOV6scL QtFNzvFATIti95Uem18NvQtCcxZ3brFRWKIq1JHv6+yERGnbdScOunx+YU6Mj9MEhkLP P3DZ5KAtiapCKeH6rKMM9Ay8jdqDjkKu/2Nt1eq4CcNLY1w1KUo8k4h4DhmE4ZiWCw3U h0UOVoWwQt/5rABmXhIbhzMv6tY1d+yPm9G4Kq6CeSJEXhqhMYhdzTszgm3kkjR3PxF/ WUIg== X-Gm-Message-State: ALoCoQkOgrK01yiTF1yEsNYNAJdluYnqddMYaSBWdW6cDvuWrspR0x3Y3cHaQuAIesJhgJWd8Tr/ X-Received: by 10.180.98.228 with SMTP id el4mr7901614wib.4.1381593101645; Sat, 12 Oct 2013 08:51:41 -0700 (PDT) Received: from mai.home (AToulouse-654-1-457-225.w83-205.abo.wanadoo.fr. [83.205.200.225]) by mx.google.com with ESMTPSA id gp9sm16132558wib.8.2013.10.12.08.51.40 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 12 Oct 2013 08:51:41 -0700 (PDT) From: Daniel Lezcano To: linux@maxim.org.za, nicolas.ferre@atmel.com, plagnioj@jcrosoft.com Subject: [PATCH 1/2] ARM: at91: cpuidle: convert to platform driver Date: Sat, 12 Oct 2013 17:51:38 +0200 Message-Id: <1381593099-1184-1-git-send-email-daniel.lezcano@linaro.org> X-Mailer: git-send-email 1.7.9.5 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20131012_115917_929635_DB825FD0 X-CRM114-Status: GOOD ( 17.13 ) X-Spam-Score: -2.6 (--) Cc: linux-pm@vger.kernel.org, linaro-kernel@lists.linaro.org, linux-arm-kernel@lists.infradead.org, patches@linaro.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Use the platform driver model to separate the cpuidle specific code from the low level pm code. It allows to remove the dependency between these two components. Tested-on usb-a9263 (at91sam9263) Signed-off-by: Daniel Lezcano --- arch/arm/mach-at91/cpuidle.c | 29 +++++++++++++++-------------- arch/arm/mach-at91/pm.c | 16 +++++++++++++++- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/arch/arm/mach-at91/cpuidle.c b/arch/arm/mach-at91/cpuidle.c index 4ec6a6d..6cdc76d 100644 --- a/arch/arm/mach-at91/cpuidle.c +++ b/arch/arm/mach-at91/cpuidle.c @@ -21,26 +21,17 @@ #include #include #include -#include - -#include "pm.h" #define AT91_MAX_STATES 2 +static void (*at91_standby)(void); + /* Actual code that puts the SoC in different idle states */ static int at91_enter_idle(struct cpuidle_device *dev, struct cpuidle_driver *drv, int index) { - if (cpu_is_at91rm9200()) - at91rm9200_standby(); - else if (cpu_is_at91sam9g45()) - at91sam9g45_standby(); - else if (cpu_is_at91sam9263()) - at91sam9263_standby(); - else - at91sam9_standby(); - + at91_standby(); return index; } @@ -60,9 +51,19 @@ static struct cpuidle_driver at91_idle_driver = { }; /* Initialize CPU idle by registering the idle states */ -static int __init at91_init_cpuidle(void) +static int __init at91_cpuidle_probe(struct platform_device *dev) { + at91_standby = (void *)(dev->dev.platform_data); + return cpuidle_register(&at91_idle_driver, NULL); } -device_initcall(at91_init_cpuidle); +static struct platform_driver at91_cpuidle_driver = { + .driver = { + .name = "cpuidle-at91", + .owner = THIS_MODULE, + }, + .probe = at91_cpuidle_probe, +}; + +module_platform_driver(at91_cpuidle_driver); diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index 15afb5d..debdbf8 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c @@ -314,6 +314,10 @@ static const struct platform_suspend_ops at91_pm_ops = { .end = at91_pm_end, }; +static struct platform_device at91_cpuidle_device = { + .name = "cpuidle-at91", +}; + static int __init at91_pm_init(void) { #ifdef CONFIG_AT91_SLOW_CLOCK @@ -323,8 +327,18 @@ static int __init at91_pm_init(void) pr_info("AT91: Power Management%s\n", (slow_clock ? " (with slow clock mode)" : "")); /* AT91RM9200 SDRAM low-power mode cannot be used with self-refresh. */ - if (cpu_is_at91rm9200()) + if (cpu_is_at91rm9200()) { + at91_cpuidle_device.dev.platform_data = at91rm9200_standby; at91_ramc_write(0, AT91RM9200_SDRAMC_LPR, 0); + } else if (cpu_is_at91sam9g45()) { + at91_cpuidle_device.dev.platform_data = at91sam9g45_standby; + } else if (cpu_is_at91sam9263()) { + at91_cpuidle_device.dev.platform_data = at91sam9263_standby; + } else { + at91_cpuidle_device.dev.platform_data = at91sam9_standby; + } + + platform_device_register(&at91_cpuidle_device); suspend_set_ops(&at91_pm_ops);