All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konstantin Baydarov <kbaidarov@dev.rtsoft.ru>
To: b-cousson@ti.com, kishon@ti.com, kbaidarov@dev.rtsoft.ru,
	santosh.shilimkar@ti.com, tony@atomide.com, paul@pwsan.com
Cc: balbi@ti.com, amit.kucheria@linaro.org,
	linux-pm@lists.linux-foundation.org,
	linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org,
	amit.kachhap@linaro.org,
	Eduardo Valentin <eduardo.valentin@ti.com>,
	J Keerthy <j-keerthy@ti.com>
Subject: [RFC PATCH v2 03/11] mfd: omap: control: core system control driver
Date: Mon, 18 Jun 2012 15:32:19 +0400	[thread overview]
Message-ID: <4FDF11C3.4010701@dev.rtsoft.ru> (raw)
In-Reply-To: <1337934361-1606-1-git-send-email-eduardo.valentin@ti.com>

This patch introduces a MFD core device driver for
OMAP system control module.

The control module allows software control of
various static modes supported by the device. It is
composed of two control submodules: general control
module and device (padconfiguration) control
module.

Changes since previous version:
- omap-control-core: driver is basically the same as arch/arm/mach-omap2/control.c, but resources aren't hardcoded, they are specified in dts file.
- omap-control-core: Control module is a built-in driver - added control module select to ARCH_HAS_CONTROL_MODULE and ARCH_OMAP4.
Probably, no configuration option is required!
- omap-control-core: Added early init call that ioremaps control module IOMEM window, this allows
omap-control-core.c API to be called very early, for example from omap_type()
- omap-control-core: Removed device pointer from omap-control-core API arguments, becuase there can be only one instance control
module device.

Signed-off-by: Konstantin Baydarov <kbaidarov@dev.rtsoft.ru>
Signed-off-by: J Keerthy <j-keerthy@ti.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>

---
 Documentation/devicetree/bindings/mfd/omap_control.txt |   44 +++++
 arch/arm/mach-omap2/Kconfig                            |    1 
 arch/arm/plat-omap/Kconfig                             |    4 
 drivers/mfd/Kconfig                                    |    9 +
 drivers/mfd/Makefile                                   |    1 
 drivers/mfd/omap-control-core.c                        |  141 +++++++++++++++++
 include/linux/mfd/omap_control.h                       |   70 ++++++++
 7 files changed, 270 insertions(+)

Index: linux-2.6/Documentation/devicetree/bindings/mfd/omap_control.txt
===================================================================
--- /dev/null
+++ linux-2.6/Documentation/devicetree/bindings/mfd/omap_control.txt
@@ -0,0 +1,44 @@
+* Texas Instrument OMAP System Control Module (SCM) bindings
+
+The control module allows software control of various static modes supported by
+the device. The control module controls the settings of various device  modules
+through register configuration and internal signals. It also controls  the  pad
+configuration, pin functional multiplexing, and the routing of internal signals
+(such as PRCM  signals or DMA requests)  to output pins configured for hardware
+observability.
+
+Required properties:
+- compatible : Should be:
+  - "ti,omap3-control" for OMAP3 support
+  - "ti,omap4-control" for OMAP4 support
+  - "ti,omap5-control" for OMAP5 support
+
+OMAP specific properties:
+- ti,hwmods: Name of the hwmod associated to the control module:
+  Should be "ctrl_module_core";
+
+Sub-nodes:
+- bandgap : contains the bandgap node
+
+  The bindings details of individual bandgap device can be found in:
+  Documentation/devicetree/bindings/thermal/omap_bandgap.txt
+
+- usb : contains the usb phy pin control node
+
+  The only required property for this child is:
+    - compatible = "ti,omap4-control-usb";
+
+Examples:
+
+ctrl_module_core: ctrl_module_core@4a002000 {
+	compatible = "ti,omap4-control";
+	ti,hwmods = "ctrl_module_core";
+	bandgap {
+		compatible = "ti,omap4460-bandgap";
+		interrupts = <0 126 4>; /* talert */
+		ti,tshut-gpio = <86>; /* tshut */
+	};
+	usb {
+		compatible = "ti,omap4-usb-phy";
+	};
+};
Index: linux-2.6/arch/arm/mach-omap2/Kconfig
===================================================================
--- linux-2.6.orig/arch/arm/mach-omap2/Kconfig
+++ linux-2.6/arch/arm/mach-omap2/Kconfig
@@ -52,6 +52,7 @@ config ARCH_OMAP4
 	select PL310_ERRATA_727915
 	select ARM_ERRATA_720789
 	select ARCH_HAS_OPP
+	select ARCH_HAS_CONTROL_MODULE
 	select PM_OPP if PM
 	select USB_ARCH_HAS_EHCI if USB_SUPPORT
 	select ARM_CPU_SUSPEND if PM
Index: linux-2.6/arch/arm/plat-omap/Kconfig
===================================================================
--- linux-2.6.orig/arch/arm/plat-omap/Kconfig
+++ linux-2.6/arch/arm/plat-omap/Kconfig
@@ -5,6 +5,10 @@ menu "TI OMAP Common Features"
 config ARCH_OMAP_OTG
 	bool
 
+config ARCH_HAS_CONTROL_MODULE
+	bool
+	select MFD_OMAP_CONTROL
+
 choice
 	prompt "OMAP System Type"
 	default ARCH_OMAP2PLUS
Index: linux-2.6/drivers/mfd/Kconfig
===================================================================
--- linux-2.6.orig/drivers/mfd/Kconfig
+++ linux-2.6/drivers/mfd/Kconfig
@@ -822,6 +822,15 @@ config MFD_WL1273_CORE
 	  driver connects the radio-wl1273 V4L2 module and the wl1273
 	  audio codec.
 
+config MFD_OMAP_CONTROL
+	bool "Texas Instruments OMAP System control module"
+	depends on ARCH_HAS_CONTROL_MODULE
+	help
+	  This is the core driver for system control module. This driver
+	  is responsible for creating the control module mfd child,
+	  like USB-pin control, pin muxing, MMC-pbias and DDR IO dynamic
+	  change for off mode.
+
 config MFD_OMAP_USB_HOST
 	bool "Support OMAP USBHS core driver"
 	depends on USB_EHCI_HCD_OMAP || USB_OHCI_HCD_OMAP3
Index: linux-2.6/drivers/mfd/Makefile
===================================================================
--- linux-2.6.orig/drivers/mfd/Makefile
+++ linux-2.6/drivers/mfd/Makefile
@@ -107,6 +107,7 @@ obj-$(CONFIG_MFD_TPS6586X)	+= tps6586x.o
 obj-$(CONFIG_MFD_VX855)		+= vx855.o
 obj-$(CONFIG_MFD_WL1273_CORE)	+= wl1273-core.o
 obj-$(CONFIG_MFD_CS5535)	+= cs5535-mfd.o
+obj-$(CONFIG_MFD_OMAP_CONTROL)	+= omap-control-core.o
 obj-$(CONFIG_MFD_OMAP_USB_HOST)	+= omap-usb-host.o
 obj-$(CONFIG_MFD_PM8921_CORE) 	+= pm8921-core.o
 obj-$(CONFIG_MFD_PM8XXX_IRQ) 	+= pm8xxx-irq.o
Index: linux-2.6/drivers/mfd/omap-control-core.c
===================================================================
--- /dev/null
+++ linux-2.6/drivers/mfd/omap-control-core.c
@@ -0,0 +1,141 @@
+/*
+ * OMAP system control module driver file
+ *
+ * Copyright (C) 2011-2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Contacts:
+ * Based on original code written by:
+ *    J Keerthy <j-keerthy@ti.com>
+ *    Moiz Sonasath <m-sonasath@ti.com>
+ * MFD clean up and re-factoring:
+ *    Eduardo Valentin <eduardo.valentin@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/export.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+#include <linux/io.h>
+#include <linux/err.h>
+#include <linux/of_platform.h>
+#include <linux/of_address.h>
+#include <linux/mfd/core.h>
+#include <linux/mfd/omap_control.h>
+
+#include <linux/of.h>
+#include <linux/of_address.h>
+
+void __iomem *omap_control_base;
+
+void __iomem *omap_control_get(void)
+{
+	return omap_control_base;
+}
+
+u32 omap_control_readl(u16 offset)
+{
+	return __raw_readl(omap_control_base + (offset));
+}
+
+void omap_control_writel(u32 val, u16 offset)
+{
+	__raw_writel(val, omap_control_base + (offset));
+}
+
+static const struct of_device_id of_omap_control_match[] = {
+	{ .compatible = "ti,omap3-control", },
+	{ .compatible = "ti,omap4-control", },
+	{ .compatible = "ti,omap5-control", },
+	{ },
+};
+
+static int __devinit omap_control_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *np = dev->of_node;
+
+	/*
+	 *  Build child defvices of ctrl_module_core
+	 */
+	return of_platform_populate(np, of_omap_control_match, NULL, dev);
+}
+
+
+static struct platform_driver omap_control_driver = {
+	.probe			= omap_control_probe,
+	.driver = {
+		.name		= "omap-control-core",
+		.owner		= THIS_MODULE,
+		.of_match_table	= of_omap_control_match,
+	},
+};
+
+int __init omap_control_of_init(struct device_node *node,
+			     struct device_node *parent)
+{
+	struct resource res;
+
+	if (WARN_ON(!node))
+		return -ENODEV;
+
+	if (of_address_to_resource(node, 0, &res)) {
+		WARN(1, "unable to get intc registers\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+void __init of_omap_control_init(const struct of_device_id *matches)
+{
+	struct device_node *np;
+	struct property *pp = 0;
+	unsigned long phys_base = 0;
+	size_t mapsize = 0;
+
+	for_each_matching_node(np, matches) {
+
+		pp = of_find_property(np, "reg", NULL);
+		if(pp) {
+			phys_base = (unsigned long)be32_to_cpup(pp->value);
+			mapsize = (size_t)be32_to_cpup( (void*)((char*)pp->value + 4) );
+			omap_control_base = ioremap(phys_base, mapsize);
+		}
+	}
+}
+
+static int __init
+omap_control_early_initcall(void)
+{
+	of_omap_control_init(of_omap_control_match);
+
+	return 0;
+}
+early_initcall(omap_control_early_initcall);
+
+static int __init omap_control_init(void)
+{
+	return platform_driver_register(&omap_control_driver);
+}
+postcore_initcall_sync(omap_control_init);
+
+static void __exit omap_control_exit(void)
+{
+	platform_driver_unregister(&omap_control_driver);
+}
+module_exit(omap_control_exit);
+early_platform_init("early_omap_control", &omap_control_driver);
+
+MODULE_DESCRIPTION("OMAP system control module driver");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS("platform:omap-control-core");
+MODULE_AUTHOR("Texas Instruments Inc.");
Index: linux-2.6/include/linux/mfd/omap_control.h
===================================================================
--- /dev/null
+++ linux-2.6/include/linux/mfd/omap_control.h
@@ -0,0 +1,70 @@
+/*
+ * OMAP system control module header file
+ *
+ * Copyright (C) 2011-2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Contact:
+ *   J Keerthy <j-keerthy@ti.com>
+ *   Moiz Sonasath <m-sonasath@ti.com>
+ *   Abraham, Kishon Vijay <kishon@ti.com>
+ *   Eduardo Valentin <eduardo.valentin@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#ifndef __DRIVERS_OMAP_CONTROL_H
+#define __DRIVERS_OMAP_CONTROL_H
+
+#include <linux/err.h>
+
+/**
+ * struct system control module - scm device structure
+ * @dev: device pointer
+ * @base: Base of the temp I/O
+ * @reg_lock: protect omap_control structure
+ * @use_count: track API users
+ */
+struct omap_control {
+	struct device		*dev;
+	void __iomem		*base;
+	/* protect this data structure and register access */
+	spinlock_t		reg_lock;
+	int			use_count;
+};
+
+/* TODO: Add helpers for 16bit and byte access */
+#ifdef CONFIG_MFD_OMAP_CONTROL
+void __iomem *omap_control_get(void);
+u32 omap_control_readl(u16 offset);
+void omap_control_writel(u32 val, u16 offset);
+
+extern void omap_control_put(struct device *dev);
+#else
+static inline int omap_control_readl(struct device *dev, u32 reg, u32 *val)
+{
+	return 0;
+}
+
+static inline int omap_control_writel(struct device *dev, u32 val, u32 reg)
+{
+	return 0;
+}
+
+static inline struct device *omap_control_get(void)
+{
+	return ERR_PTR(-EINVAL);
+}
+
+static inline void omap_control_put(struct device *dev)
+{
+}
+#endif
+
+#endif /* __DRIVERS_OMAP_CONTROL_H */

WARNING: multiple messages have this Message-ID (diff)
From: kbaidarov@dev.rtsoft.ru (Konstantin Baydarov)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH v2 03/11] mfd: omap: control: core system control driver
Date: Mon, 18 Jun 2012 15:32:19 +0400	[thread overview]
Message-ID: <4FDF11C3.4010701@dev.rtsoft.ru> (raw)
In-Reply-To: <1337934361-1606-1-git-send-email-eduardo.valentin@ti.com>

This patch introduces a MFD core device driver for
OMAP system control module.

The control module allows software control of
various static modes supported by the device. It is
composed of two control submodules: general control
module and device (padconfiguration) control
module.

Changes since previous version:
- omap-control-core: driver is basically the same as arch/arm/mach-omap2/control.c, but resources aren't hardcoded, they are specified in dts file.
- omap-control-core: Control module is a built-in driver - added control module select to ARCH_HAS_CONTROL_MODULE and ARCH_OMAP4.
Probably, no configuration option is required!
- omap-control-core: Added early init call that ioremaps control module IOMEM window, this allows
omap-control-core.c API to be called very early, for example from omap_type()
- omap-control-core: Removed device pointer from omap-control-core API arguments, becuase there can be only one instance control
module device.

Signed-off-by: Konstantin Baydarov <kbaidarov@dev.rtsoft.ru>
Signed-off-by: J Keerthy <j-keerthy@ti.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Eduardo Valentin <eduardo.valentin@ti.com>

---
 Documentation/devicetree/bindings/mfd/omap_control.txt |   44 +++++
 arch/arm/mach-omap2/Kconfig                            |    1 
 arch/arm/plat-omap/Kconfig                             |    4 
 drivers/mfd/Kconfig                                    |    9 +
 drivers/mfd/Makefile                                   |    1 
 drivers/mfd/omap-control-core.c                        |  141 +++++++++++++++++
 include/linux/mfd/omap_control.h                       |   70 ++++++++
 7 files changed, 270 insertions(+)

Index: linux-2.6/Documentation/devicetree/bindings/mfd/omap_control.txt
===================================================================
--- /dev/null
+++ linux-2.6/Documentation/devicetree/bindings/mfd/omap_control.txt
@@ -0,0 +1,44 @@
+* Texas Instrument OMAP System Control Module (SCM) bindings
+
+The control module allows software control of various static modes supported by
+the device. The control module controls the settings of various device  modules
+through register configuration and internal signals. It also controls  the  pad
+configuration, pin functional multiplexing, and the routing of internal signals
+(such as PRCM  signals or DMA requests)  to output pins configured for hardware
+observability.
+
+Required properties:
+- compatible : Should be:
+  - "ti,omap3-control" for OMAP3 support
+  - "ti,omap4-control" for OMAP4 support
+  - "ti,omap5-control" for OMAP5 support
+
+OMAP specific properties:
+- ti,hwmods: Name of the hwmod associated to the control module:
+  Should be "ctrl_module_core";
+
+Sub-nodes:
+- bandgap : contains the bandgap node
+
+  The bindings details of individual bandgap device can be found in:
+  Documentation/devicetree/bindings/thermal/omap_bandgap.txt
+
+- usb : contains the usb phy pin control node
+
+  The only required property for this child is:
+    - compatible = "ti,omap4-control-usb";
+
+Examples:
+
+ctrl_module_core: ctrl_module_core at 4a002000 {
+	compatible = "ti,omap4-control";
+	ti,hwmods = "ctrl_module_core";
+	bandgap {
+		compatible = "ti,omap4460-bandgap";
+		interrupts = <0 126 4>; /* talert */
+		ti,tshut-gpio = <86>; /* tshut */
+	};
+	usb {
+		compatible = "ti,omap4-usb-phy";
+	};
+};
Index: linux-2.6/arch/arm/mach-omap2/Kconfig
===================================================================
--- linux-2.6.orig/arch/arm/mach-omap2/Kconfig
+++ linux-2.6/arch/arm/mach-omap2/Kconfig
@@ -52,6 +52,7 @@ config ARCH_OMAP4
 	select PL310_ERRATA_727915
 	select ARM_ERRATA_720789
 	select ARCH_HAS_OPP
+	select ARCH_HAS_CONTROL_MODULE
 	select PM_OPP if PM
 	select USB_ARCH_HAS_EHCI if USB_SUPPORT
 	select ARM_CPU_SUSPEND if PM
Index: linux-2.6/arch/arm/plat-omap/Kconfig
===================================================================
--- linux-2.6.orig/arch/arm/plat-omap/Kconfig
+++ linux-2.6/arch/arm/plat-omap/Kconfig
@@ -5,6 +5,10 @@ menu "TI OMAP Common Features"
 config ARCH_OMAP_OTG
 	bool
 
+config ARCH_HAS_CONTROL_MODULE
+	bool
+	select MFD_OMAP_CONTROL
+
 choice
 	prompt "OMAP System Type"
 	default ARCH_OMAP2PLUS
Index: linux-2.6/drivers/mfd/Kconfig
===================================================================
--- linux-2.6.orig/drivers/mfd/Kconfig
+++ linux-2.6/drivers/mfd/Kconfig
@@ -822,6 +822,15 @@ config MFD_WL1273_CORE
 	  driver connects the radio-wl1273 V4L2 module and the wl1273
 	  audio codec.
 
+config MFD_OMAP_CONTROL
+	bool "Texas Instruments OMAP System control module"
+	depends on ARCH_HAS_CONTROL_MODULE
+	help
+	  This is the core driver for system control module. This driver
+	  is responsible for creating the control module mfd child,
+	  like USB-pin control, pin muxing, MMC-pbias and DDR IO dynamic
+	  change for off mode.
+
 config MFD_OMAP_USB_HOST
 	bool "Support OMAP USBHS core driver"
 	depends on USB_EHCI_HCD_OMAP || USB_OHCI_HCD_OMAP3
Index: linux-2.6/drivers/mfd/Makefile
===================================================================
--- linux-2.6.orig/drivers/mfd/Makefile
+++ linux-2.6/drivers/mfd/Makefile
@@ -107,6 +107,7 @@ obj-$(CONFIG_MFD_TPS6586X)	+= tps6586x.o
 obj-$(CONFIG_MFD_VX855)		+= vx855.o
 obj-$(CONFIG_MFD_WL1273_CORE)	+= wl1273-core.o
 obj-$(CONFIG_MFD_CS5535)	+= cs5535-mfd.o
+obj-$(CONFIG_MFD_OMAP_CONTROL)	+= omap-control-core.o
 obj-$(CONFIG_MFD_OMAP_USB_HOST)	+= omap-usb-host.o
 obj-$(CONFIG_MFD_PM8921_CORE) 	+= pm8921-core.o
 obj-$(CONFIG_MFD_PM8XXX_IRQ) 	+= pm8xxx-irq.o
Index: linux-2.6/drivers/mfd/omap-control-core.c
===================================================================
--- /dev/null
+++ linux-2.6/drivers/mfd/omap-control-core.c
@@ -0,0 +1,141 @@
+/*
+ * OMAP system control module driver file
+ *
+ * Copyright (C) 2011-2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Contacts:
+ * Based on original code written by:
+ *    J Keerthy <j-keerthy@ti.com>
+ *    Moiz Sonasath <m-sonasath@ti.com>
+ * MFD clean up and re-factoring:
+ *    Eduardo Valentin <eduardo.valentin@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/export.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+#include <linux/io.h>
+#include <linux/err.h>
+#include <linux/of_platform.h>
+#include <linux/of_address.h>
+#include <linux/mfd/core.h>
+#include <linux/mfd/omap_control.h>
+
+#include <linux/of.h>
+#include <linux/of_address.h>
+
+void __iomem *omap_control_base;
+
+void __iomem *omap_control_get(void)
+{
+	return omap_control_base;
+}
+
+u32 omap_control_readl(u16 offset)
+{
+	return __raw_readl(omap_control_base + (offset));
+}
+
+void omap_control_writel(u32 val, u16 offset)
+{
+	__raw_writel(val, omap_control_base + (offset));
+}
+
+static const struct of_device_id of_omap_control_match[] = {
+	{ .compatible = "ti,omap3-control", },
+	{ .compatible = "ti,omap4-control", },
+	{ .compatible = "ti,omap5-control", },
+	{ },
+};
+
+static int __devinit omap_control_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct device_node *np = dev->of_node;
+
+	/*
+	 *  Build child defvices of ctrl_module_core
+	 */
+	return of_platform_populate(np, of_omap_control_match, NULL, dev);
+}
+
+
+static struct platform_driver omap_control_driver = {
+	.probe			= omap_control_probe,
+	.driver = {
+		.name		= "omap-control-core",
+		.owner		= THIS_MODULE,
+		.of_match_table	= of_omap_control_match,
+	},
+};
+
+int __init omap_control_of_init(struct device_node *node,
+			     struct device_node *parent)
+{
+	struct resource res;
+
+	if (WARN_ON(!node))
+		return -ENODEV;
+
+	if (of_address_to_resource(node, 0, &res)) {
+		WARN(1, "unable to get intc registers\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+void __init of_omap_control_init(const struct of_device_id *matches)
+{
+	struct device_node *np;
+	struct property *pp = 0;
+	unsigned long phys_base = 0;
+	size_t mapsize = 0;
+
+	for_each_matching_node(np, matches) {
+
+		pp = of_find_property(np, "reg", NULL);
+		if(pp) {
+			phys_base = (unsigned long)be32_to_cpup(pp->value);
+			mapsize = (size_t)be32_to_cpup( (void*)((char*)pp->value + 4) );
+			omap_control_base = ioremap(phys_base, mapsize);
+		}
+	}
+}
+
+static int __init
+omap_control_early_initcall(void)
+{
+	of_omap_control_init(of_omap_control_match);
+
+	return 0;
+}
+early_initcall(omap_control_early_initcall);
+
+static int __init omap_control_init(void)
+{
+	return platform_driver_register(&omap_control_driver);
+}
+postcore_initcall_sync(omap_control_init);
+
+static void __exit omap_control_exit(void)
+{
+	platform_driver_unregister(&omap_control_driver);
+}
+module_exit(omap_control_exit);
+early_platform_init("early_omap_control", &omap_control_driver);
+
+MODULE_DESCRIPTION("OMAP system control module driver");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS("platform:omap-control-core");
+MODULE_AUTHOR("Texas Instruments Inc.");
Index: linux-2.6/include/linux/mfd/omap_control.h
===================================================================
--- /dev/null
+++ linux-2.6/include/linux/mfd/omap_control.h
@@ -0,0 +1,70 @@
+/*
+ * OMAP system control module header file
+ *
+ * Copyright (C) 2011-2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Contact:
+ *   J Keerthy <j-keerthy@ti.com>
+ *   Moiz Sonasath <m-sonasath@ti.com>
+ *   Abraham, Kishon Vijay <kishon@ti.com>
+ *   Eduardo Valentin <eduardo.valentin@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ */
+
+#ifndef __DRIVERS_OMAP_CONTROL_H
+#define __DRIVERS_OMAP_CONTROL_H
+
+#include <linux/err.h>
+
+/**
+ * struct system control module - scm device structure
+ * @dev: device pointer
+ * @base: Base of the temp I/O
+ * @reg_lock: protect omap_control structure
+ * @use_count: track API users
+ */
+struct omap_control {
+	struct device		*dev;
+	void __iomem		*base;
+	/* protect this data structure and register access */
+	spinlock_t		reg_lock;
+	int			use_count;
+};
+
+/* TODO: Add helpers for 16bit and byte access */
+#ifdef CONFIG_MFD_OMAP_CONTROL
+void __iomem *omap_control_get(void);
+u32 omap_control_readl(u16 offset);
+void omap_control_writel(u32 val, u16 offset);
+
+extern void omap_control_put(struct device *dev);
+#else
+static inline int omap_control_readl(struct device *dev, u32 reg, u32 *val)
+{
+	return 0;
+}
+
+static inline int omap_control_writel(struct device *dev, u32 val, u32 reg)
+{
+	return 0;
+}
+
+static inline struct device *omap_control_get(void)
+{
+	return ERR_PTR(-EINVAL);
+}
+
+static inline void omap_control_put(struct device *dev)
+{
+}
+#endif
+
+#endif /* __DRIVERS_OMAP_CONTROL_H */

  parent reply	other threads:[~2012-06-18 11:32 UTC|newest]

Thread overview: 198+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-25  8:25 [RFC PATCH 00/11] OMAP System Control Module Eduardo Valentin
2012-05-25  8:25 ` Eduardo Valentin
2012-05-25  8:25 ` [RFC PATCH 01/11] ARM: OMAP4: Remove un-used control module headers and defines Eduardo Valentin
2012-05-25  8:25   ` Eduardo Valentin
2012-05-28  9:12   ` Shilimkar, Santosh
2012-05-28  9:12     ` Shilimkar, Santosh
2012-05-25  8:25 ` [RFC PATCH 02/11] ARM: OMAP: expose control.h to mach area Eduardo Valentin
2012-05-25  8:25   ` Eduardo Valentin
2012-05-28  9:25   ` Shilimkar, Santosh
2012-05-28  9:25     ` Shilimkar, Santosh
2012-05-28 10:30     ` Valentin, Eduardo
2012-05-28 10:30       ` Valentin, Eduardo
2012-06-01 11:19       ` Tony Lindgren
2012-06-01 11:19         ` Tony Lindgren
2012-05-25  8:25 ` [RFC PATCH 03/11] arm: omap: device: create a device for system control module Eduardo Valentin
2012-05-25  8:25   ` Eduardo Valentin
2012-05-25 12:30   ` Cousson, Benoit
2012-05-25 12:30     ` Cousson, Benoit
2012-05-29  9:44     ` Eduardo Valentin
2012-05-29  9:44       ` Eduardo Valentin
2012-06-14 13:50       ` Konstantin Baydarov
2012-06-14 13:50         ` Konstantin Baydarov
2012-06-15  9:22         ` Valentin, Eduardo
2012-06-15  9:22           ` Valentin, Eduardo
2012-05-29 13:39   ` Konstantin Baydarov
2012-05-29 13:39     ` Konstantin Baydarov
2012-05-25  8:25 ` [RFC PATCH 04/11] OMAP: Add early " Eduardo Valentin
2012-05-25  8:25   ` Eduardo Valentin
2012-05-25 11:32   ` Konstantin Baydarov
2012-05-25 11:32     ` Konstantin Baydarov
2012-05-25 11:44     ` Valentin, Eduardo
2012-05-25 11:44       ` Valentin, Eduardo
2012-05-25 11:54   ` Konstantin Baydarov
2012-05-25 11:54     ` Konstantin Baydarov
2012-05-25 12:32   ` Cousson, Benoit
2012-05-25 12:32     ` Cousson, Benoit
2012-05-28  9:58   ` Shilimkar, Santosh
2012-05-28  9:58     ` Shilimkar, Santosh
2012-05-25  8:25 ` [RFC PATCH 05/11] mfd: omap: control: core system control driver Eduardo Valentin
2012-05-25  8:25   ` Eduardo Valentin
2012-05-25 12:52   ` Cousson, Benoit
2012-05-25 12:52     ` Cousson, Benoit
2012-05-28 11:35     ` Eduardo Valentin
2012-05-28 11:35       ` Eduardo Valentin
2012-05-29 13:25       ` Cousson, Benoit
2012-05-29 13:25         ` Cousson, Benoit
2012-06-01 11:29         ` Tony Lindgren
2012-06-01 11:29           ` Tony Lindgren
2012-06-01 12:30           ` Shilimkar, Santosh
2012-06-01 12:30             ` Shilimkar, Santosh
2012-06-01 12:43             ` Cousson, Benoit
2012-06-01 12:43               ` Cousson, Benoit
2012-06-01 17:19               ` Eduardo Valentin
2012-06-01 17:19                 ` Eduardo Valentin
2012-06-01 13:40           ` Konstantin Baydarov
2012-06-01 13:40             ` Konstantin Baydarov
2012-06-01 14:13             ` Tony Lindgren
2012-06-01 14:13               ` Tony Lindgren
2012-06-01 14:26               ` Konstantin Baydarov
2012-06-01 14:26                 ` Konstantin Baydarov
2012-05-28  9:54   ` Shilimkar, Santosh
2012-05-28  9:54     ` Shilimkar, Santosh
2012-05-28 11:42     ` Eduardo Valentin
2012-05-28 11:42       ` Eduardo Valentin
2012-05-28 13:15       ` Shilimkar, Santosh
2012-05-28 13:15         ` Shilimkar, Santosh
2012-05-29 13:31         ` Cousson, Benoit
2012-05-29 13:31           ` Cousson, Benoit
2012-05-25  8:25 ` [RFC PATCH 06/11] OMAP2+: use control module mfd driver in omap_type Eduardo Valentin
2012-05-25  8:25   ` Eduardo Valentin
2012-05-25 12:53   ` Cousson, Benoit
2012-05-25 12:53     ` Cousson, Benoit
2012-05-28 10:02     ` Shilimkar, Santosh
2012-05-28 10:02       ` Shilimkar, Santosh
2012-05-28 11:24       ` Eduardo Valentin
2012-05-28 11:24         ` Eduardo Valentin
2012-06-01 11:35         ` Tony Lindgren
2012-06-01 11:35           ` Tony Lindgren
2012-05-25  8:25 ` [RFC PATCH 07/11] mfd: omap: control: usb-phy: introduce the ctrl-module usb driver Eduardo Valentin
2012-05-25  8:25   ` Eduardo Valentin
2012-05-25 13:35   ` Shubhrajyoti Datta
2012-05-25 13:35     ` Shubhrajyoti Datta
2012-05-25 15:06   ` Cousson, Benoit
2012-05-25 15:06     ` Cousson, Benoit
2012-06-01 11:38   ` Tony Lindgren
2012-06-01 11:38     ` Tony Lindgren
2012-06-01 13:20     ` [linux-pm] " Tony Lindgren
2012-06-01 13:20       ` Tony Lindgren
2012-06-01 14:07       ` Kevin Hilman
2012-06-01 14:07         ` Kevin Hilman
2012-06-01 14:15         ` Tony Lindgren
2012-06-01 14:15           ` Tony Lindgren
2012-05-25  8:25 ` [RFC PATCH 08/11] ARM: OMAP4+: Adding the temperature sensor register set bit fields Eduardo Valentin
2012-05-25  8:25   ` Eduardo Valentin
2012-05-25 15:13   ` Cousson, Benoit
2012-05-25 15:13     ` Cousson, Benoit
2012-05-28 11:17     ` Eduardo Valentin
2012-05-28 11:17       ` Eduardo Valentin
2012-05-28 10:04   ` Shilimkar, Santosh
2012-05-28 10:04     ` Shilimkar, Santosh
2012-05-28 11:18     ` Eduardo Valentin
2012-05-28 11:18       ` Eduardo Valentin
2012-05-25  8:25 ` [RFC PATCH 09/11] ARM: OMAP4+: thermal: introduce bandgap temperature sensor Eduardo Valentin
2012-05-25  8:25   ` Eduardo Valentin
2012-05-25 15:49   ` Cousson, Benoit
2012-05-25 15:49     ` Cousson, Benoit
2012-05-28 11:06     ` Eduardo Valentin
2012-05-28 11:06       ` Eduardo Valentin
2012-05-28 11:16     ` Eduardo Valentin
2012-05-28 11:16       ` Eduardo Valentin
2012-05-29 13:14       ` Cousson, Benoit
2012-05-29 13:14         ` Cousson, Benoit
2012-05-29 17:51         ` Mike Turquette
2012-05-29 17:51           ` Mike Turquette
2012-05-25 16:39   ` Konstantin Baydarov
2012-05-25 16:39     ` Konstantin Baydarov
2012-05-28 10:55     ` Eduardo Valentin
2012-05-28 10:55       ` Eduardo Valentin
2012-06-01 11:42   ` Tony Lindgren
2012-06-01 11:42     ` Tony Lindgren
2012-05-25  8:26 ` [RFC PATCH 10/11] omap4: thermal: add basic CPU thermal zone Eduardo Valentin
2012-05-25  8:26   ` Eduardo Valentin
2012-05-28  9:33   ` Shilimkar, Santosh
2012-05-28  9:33     ` Shilimkar, Santosh
2012-05-28  9:48     ` Felipe Balbi
2012-05-28  9:48       ` Felipe Balbi
2012-05-28 10:26       ` Valentin, Eduardo
2012-05-28 10:26         ` Valentin, Eduardo
2012-05-29 12:54         ` Cousson, Benoit
2012-05-29 12:54           ` Cousson, Benoit
2012-05-25  8:26 ` [RFC PATCH 11/11] ARM: DT: Add support to system control module for OMAP4 Eduardo Valentin
2012-05-25  8:26   ` Eduardo Valentin
2012-05-29  9:49   ` Konstantin Baydarov
2012-05-29  9:49     ` Konstantin Baydarov
2012-05-30  8:38     ` Cousson, Benoit
2012-05-30  8:38       ` Cousson, Benoit
2012-05-30  9:05       ` Konstantin Baydarov
2012-05-30  9:05         ` Konstantin Baydarov
2012-05-30  9:26         ` Cousson, Benoit
2012-05-30  9:26           ` Cousson, Benoit
2012-05-30 10:17           ` Konstantin Baydarov
2012-05-30 10:17             ` Konstantin Baydarov
2012-05-30 10:22             ` Cousson, Benoit
2012-05-30 10:22               ` Cousson, Benoit
2012-05-30 10:42               ` Eduardo Valentin
2012-05-30 10:42                 ` Eduardo Valentin
2012-05-30 12:16                 ` Cousson, Benoit
2012-05-30 12:16                   ` Cousson, Benoit
2012-05-31 12:06           ` Konstantin Baydarov
2012-05-31 12:06             ` Konstantin Baydarov
2012-05-31 12:49             ` Eduardo Valentin
2012-05-31 12:49               ` Eduardo Valentin
2012-05-31 12:52               ` Cousson, Benoit
2012-05-31 12:52                 ` Cousson, Benoit
2012-05-31 14:51                 ` Konstantin Baydarov
2012-05-31 14:51                   ` Konstantin Baydarov
2012-05-25  8:35 ` [RFC PATCH 00/11] OMAP System Control Module Eduardo Valentin
2012-05-25  8:35   ` Eduardo Valentin
2012-05-25 10:50 ` Konstantin Baydarov
2012-05-25 10:50   ` Konstantin Baydarov
2012-05-25 11:11   ` Valentin, Eduardo
2012-05-25 11:11     ` Valentin, Eduardo
2012-05-25 12:21     ` Konstantin Baydarov
2012-05-25 12:21       ` Konstantin Baydarov
2012-06-01  0:12 ` [linux-pm] " Kevin Hilman
2012-06-01  0:12   ` Kevin Hilman
2012-06-18 11:32 ` [RFC PATCH v2 01/11] ARM: OMAP4: Remove un-used control module headers and defines Konstantin Baydarov
2012-06-18 11:32   ` Konstantin Baydarov
2012-06-18 11:32 ` [RFC PATCH v2 02/11] ARM: OMAP: expose control.h to mach area Konstantin Baydarov
2012-06-18 11:32   ` Konstantin Baydarov
2012-06-20 10:17   ` Tony Lindgren
2012-06-20 10:17     ` Tony Lindgren
2012-06-18 11:32 ` Konstantin Baydarov [this message]
2012-06-18 11:32   ` [RFC PATCH v2 03/11] mfd: omap: control: core system control driver Konstantin Baydarov
2012-06-20 10:22   ` Tony Lindgren
2012-06-20 10:22     ` Tony Lindgren
2012-06-20 14:13     ` Konstantin Baydarov
2012-06-20 14:13       ` Konstantin Baydarov
2012-06-26 11:17       ` Tony Lindgren
2012-06-26 11:17         ` Tony Lindgren
2012-06-18 11:32 ` [RFC PATCH v2 04/11] OMAP2+: use control module mfd driver in omap_type Konstantin Baydarov
2012-06-18 11:32   ` Konstantin Baydarov
2012-06-20 10:24   ` Tony Lindgren
2012-06-20 10:24     ` Tony Lindgren
2012-06-18 11:32 ` [RFC PATCH v2 05/11] mfd: omap: control: usb-phy: introduce the ctrl-module usb driver Konstantin Baydarov
2012-06-18 11:32   ` Konstantin Baydarov
2012-06-18 11:32 ` [RFC PATCH v2 06/11] ARM: OMAP4+: Adding the temperature sensor register set bit fields Konstantin Baydarov
2012-06-18 11:32   ` Konstantin Baydarov
2012-06-20 10:25   ` Tony Lindgren
2012-06-20 10:25     ` Tony Lindgren
2012-06-18 11:32 ` [RFC PATCH v2 07/11] ARM: OMAP4+: thermal: introduce bandgap temperature sensor Konstantin Baydarov
2012-06-18 11:32   ` Konstantin Baydarov
2012-06-18 11:32 ` [RFC PATCH v2 08/11] omap4: thermal: add basic CPU thermal zone Konstantin Baydarov
2012-06-18 11:32   ` Konstantin Baydarov
2012-06-18 11:32 ` [RFC PATCH v2 09/11] ARM: DT: Add support to system control module for OMAP4 Konstantin Baydarov
2012-06-18 11:32   ` Konstantin Baydarov
2012-06-18 12:13   ` Sergei Shtylyov
2012-06-18 12:13     ` Sergei Shtylyov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4FDF11C3.4010701@dev.rtsoft.ru \
    --to=kbaidarov@dev.rtsoft.ru \
    --cc=amit.kachhap@linaro.org \
    --cc=amit.kucheria@linaro.org \
    --cc=b-cousson@ti.com \
    --cc=balbi@ti.com \
    --cc=eduardo.valentin@ti.com \
    --cc=j-keerthy@ti.com \
    --cc=kishon@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=paul@pwsan.com \
    --cc=santosh.shilimkar@ti.com \
    --cc=tony@atomide.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.