aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/bus
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/bus')
-rw-r--r--drivers/bus/Kconfig15
-rw-r--r--drivers/bus/Makefile5
-rw-r--r--drivers/bus/omap-ocp2scp.c88
3 files changed, 108 insertions, 0 deletions
diff --git a/drivers/bus/Kconfig b/drivers/bus/Kconfig
new file mode 100644
index 000000000000..6270415107d0
--- /dev/null
+++ b/drivers/bus/Kconfig
@@ -0,0 +1,15 @@
1#
2# Bus Devices
3#
4
5menu "Bus devices"
6
7config OMAP_OCP2SCP
8 tristate "OMAP OCP2SCP DRIVER"
9 help
10 Driver to enable ocp2scp module which transforms ocp interface
11 protocol to scp protocol. In OMAP4, USB PHY is connected via
12 OCP2SCP and in OMAP5, both USB PHY and SATA PHY is connected via
13 OCP2SCP.
14
15endmenu
diff --git a/drivers/bus/Makefile b/drivers/bus/Makefile
new file mode 100644
index 000000000000..0ec50bc43d7c
--- /dev/null
+++ b/drivers/bus/Makefile
@@ -0,0 +1,5 @@
1#
2# Makefile for the bus drivers.
3#
4
5obj-$(CONFIG_OMAP_OCP2SCP) += omap-ocp2scp.o
diff --git a/drivers/bus/omap-ocp2scp.c b/drivers/bus/omap-ocp2scp.c
new file mode 100644
index 000000000000..9075ef8baf56
--- /dev/null
+++ b/drivers/bus/omap-ocp2scp.c
@@ -0,0 +1,88 @@
1/*
2 * omap-ocp2scp.c - transform ocp interface protocol to scp protocol
3 *
4 * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * Author: Kishon Vijay Abraham I <kishon@ti.com>
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 */
18
19#include <linux/module.h>
20#include <linux/platform_device.h>
21#include <linux/err.h>
22#include <linux/pm_runtime.h>
23#include <linux/of.h>
24#include <linux/of_platform.h>
25
26static int ocp2scp_remove_devices(struct device *dev, void *c)
27{
28 struct platform_device *pdev = to_platform_device(dev);
29
30 platform_device_unregister(pdev);
31
32 return 0;
33}
34
35static int __devinit omap_ocp2scp_probe(struct platform_device *pdev)
36{
37 int ret;
38 struct device_node *np = pdev->dev.of_node;
39
40 if (np) {
41 ret = of_platform_populate(np, NULL, NULL, &pdev->dev);
42 if (ret) {
43 dev_err(&pdev->dev, "failed to add resources for ocp2scp child\n");
44 goto err0;
45 }
46 }
47 pm_runtime_enable(&pdev->dev);
48
49 return 0;
50
51err0:
52 device_for_each_child(&pdev->dev, NULL, ocp2scp_remove_devices);
53
54 return ret;
55}
56
57static int __devexit omap_ocp2scp_remove(struct platform_device *pdev)
58{
59 pm_runtime_disable(&pdev->dev);
60 device_for_each_child(&pdev->dev, NULL, ocp2scp_remove_devices);
61
62 return 0;
63}
64
65#ifdef CONFIG_OF
66static const struct of_device_id omap_ocp2scp_id_table[] = {
67 { .compatible = "ti,omap-ocp2scp" },
68 {}
69};
70MODULE_DEVICE_TABLE(of, omap_usb2_id_table);
71#endif
72
73static struct platform_driver omap_ocp2scp_driver = {
74 .probe = omap_ocp2scp_probe,
75 .remove = __devexit_p(omap_ocp2scp_remove),
76 .driver = {
77 .name = "omap-ocp2scp",
78 .owner = THIS_MODULE,
79 .of_match_table = of_match_ptr(omap_ocp2scp_id_table),
80 },
81};
82
83module_platform_driver(omap_ocp2scp_driver);
84
85MODULE_ALIAS("platform: omap-ocp2scp");
86MODULE_AUTHOR("Texas Instruments Inc.");
87MODULE_DESCRIPTION("OMAP OCP2SCP driver");
88MODULE_LICENSE("GPL v2");