From patchwork Sat Feb 19 12:01:48 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nishanth Menon X-Patchwork-Id: 574751 X-Patchwork-Delegate: khilman@deeprootsystems.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p1JC2BhC013921 for ; Sat, 19 Feb 2011 12:03:24 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754266Ab1BSMDU (ORCPT ); Sat, 19 Feb 2011 07:03:20 -0500 Received: from na3sys009aog114.obsmtp.com ([74.125.149.211]:40483 "EHLO na3sys009aog114.obsmtp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753966Ab1BSMDU (ORCPT ); Sat, 19 Feb 2011 07:03:20 -0500 Received: from source ([209.85.160.176]) (using TLSv1) by na3sys009aob114.postini.com ([74.125.148.12]) with SMTP ID DSNKTV+xh7X3WrpcBx8XnTUE4+OB6kmN/rtq@postini.com; Sat, 19 Feb 2011 04:03:20 PST Received: by gyf1 with SMTP id 1so2132642gyf.35 for ; Sat, 19 Feb 2011 04:03:18 -0800 (PST) Received: by 10.147.91.33 with SMTP id t33mr3048891yal.7.1298116998648; Sat, 19 Feb 2011 04:03:18 -0800 (PST) Received: from localhost (dragon.ti.com [192.94.94.33]) by mx.google.com with ESMTPS id 17sm3910708anx.33.2011.02.19.04.03.15 (version=TLSv1/SSLv3 cipher=OTHER); Sat, 19 Feb 2011 04:03:17 -0800 (PST) From: Nishanth Menon To: linux-omap Cc: Tony Lindgren , Kevin Hilman , Nishanth Menon Subject: [PATCH 09/19] omap3+: sr: introduce class init, deinit and priv data Date: Sat, 19 Feb 2011 17:31:48 +0530 Message-Id: <1298116918-30744-10-git-send-email-nm@ti.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1298116918-30744-1-git-send-email-nm@ti.com> References: <1298116918-30744-1-git-send-email-nm@ti.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Sat, 19 Feb 2011 12:03:24 +0000 (UTC) diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c index 6f0c7d0..fb675c0 100644 --- a/arch/arm/mach-omap2/smartreflex.c +++ b/arch/arm/mach-omap2/smartreflex.c @@ -220,6 +220,13 @@ static void sr_start_vddautocomp(struct omap_sr *sr) return; } + if (sr_class->class_init && + sr_class->class_init(sr->voltdm, sr_class->class_priv_data)) { + dev_err(&sr->pdev->dev, + "%s: SRClass initialization failed\n", __func__); + return; + } + if (!sr_class->enable(sr->voltdm)) sr->autocomp_active = true; } @@ -235,6 +242,13 @@ static void sr_stop_vddautocomp(struct omap_sr *sr) if (sr->autocomp_active) { sr_class->disable(sr->voltdm, 1); + if (sr_class->class_deinit && + sr_class->class_deinit(sr->voltdm, + sr_class->class_priv_data)) { + dev_err(&sr->pdev->dev, + "%s: SR[%d]Class deinitialization failed\n", + __func__, sr->srid); + } sr->autocomp_active = false; } } diff --git a/arch/arm/plat-omap/include/plat/smartreflex.h b/arch/arm/plat-omap/include/plat/smartreflex.h index 6568c88..8b6ecd9 100644 --- a/arch/arm/plat-omap/include/plat/smartreflex.h +++ b/arch/arm/plat-omap/include/plat/smartreflex.h @@ -167,6 +167,8 @@ struct omap_sr_pmic_data { * * @enable: API to enable a particular class smaartreflex. * @disable: API to disable a particular class smartreflex. + * @class_init: API to do class specific initialization (optional) + * @class_deinit: API to do class specific initialization (optional) * @configure: API to configure a particular class smartreflex. * @notify: API to notify the class driver about an event in SR. * Not needed for class3. @@ -174,14 +176,19 @@ struct omap_sr_pmic_data { * @class_type: specify which smartreflex class. * Can be used by the SR driver to take any class * based decisions. + * @class_priv_data: Class specific private data (optional) */ struct omap_sr_class_data { int (*enable)(struct voltagedomain *voltdm); int (*disable)(struct voltagedomain *voltdm, int is_volt_reset); + int (*class_init)(struct voltagedomain *voltdm, void *class_priv_data); + int (*class_deinit)(struct voltagedomain *voltdm, + void *class_priv_data); int (*configure)(struct voltagedomain *voltdm); int (*notify)(struct voltagedomain *voltdm, u32 status); u8 notify_flags; u8 class_type; + void *class_priv_data; }; /**