usb: gadget: s3c-hsotg: Allow driver instantiation using device tree
authorTomasz Figa <t.figa@samsung.com>
Tue, 25 Jun 2013 15:38:23 +0000 (17:38 +0200)
committerFelipe Balbi <balbi@ti.com>
Mon, 29 Jul 2013 10:56:49 +0000 (13:56 +0300)
This patch adds OF match table to the driver to allow instantiating it
using device tree.

Signed-off-by: Tomasz Figa <t.figa@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Documentation/devicetree/bindings/usb/samsung-hsotg.txt [new file with mode: 0644]
drivers/usb/gadget/s3c-hsotg.c

diff --git a/Documentation/devicetree/bindings/usb/samsung-hsotg.txt b/Documentation/devicetree/bindings/usb/samsung-hsotg.txt
new file mode 100644 (file)
index 0000000..b83d428
--- /dev/null
@@ -0,0 +1,40 @@
+Samsung High Speed USB OTG controller
+-----------------------------
+
+The Samsung HSOTG IP can be found on Samsung SoCs, from S3C6400 onwards.
+It gives functionality of OTG-compliant USB 2.0 host and device with
+support for USB 2.0 high-speed (480Mbps) and full-speed (12 Mbps)
+operation.
+
+Currently only device mode is supported.
+
+Binding details
+-----
+
+Required properties:
+- compatible: "samsung,s3c6400-hsotg" should be used for all currently
+    supported SoC,
+- interrupt-parent: phandle for the interrupt controller to which the
+    interrupt signal of the HSOTG block is routed,
+- interrupts: specifier of interrupt signal of interrupt controller,
+    according to bindings of interrupt controller,
+- clocks: contains an array of clock specifiers:
+    - first entry: OTG clock
+- clock-names: contains array of clock names:
+    - first entry: must be "otg"
+- vusb_d-supply: phandle to voltage regulator of digital section,
+- vusb_a-supply: phandle to voltage regulator of analog section.
+
+Example
+-----
+
+       hsotg@12480000 {
+               compatible = "samsung,s3c6400-hsotg";
+               reg = <0x12480000 0x20000>;
+               interrupts = <0 71 0>;
+               clocks = <&clock 305>;
+               clock-names = "otg";
+               vusb_d-supply = <&vusb_reg>;
+               vusb_a-supply = <&vusbdac_reg>;
+       };
+
index af22f24046b239dcc9dda8553c17377326c62ded..616ed51f85858381ca39ba7cacaa8dc48282cdb0 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/slab.h>
 #include <linux/clk.h>
 #include <linux/regulator/consumer.h>
 #include <linux/slab.h>
 #include <linux/clk.h>
 #include <linux/regulator/consumer.h>
+#include <linux/of_platform.h>
 
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
 
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
@@ -3648,10 +3649,19 @@ static int s3c_hsotg_remove(struct platform_device *pdev)
 #define s3c_hsotg_resume NULL
 #endif
 
 #define s3c_hsotg_resume NULL
 #endif
 
+#ifdef CONFIG_OF
+static const struct of_device_id s3c_hsotg_of_ids[] = {
+       { .compatible = "samsung,s3c6400-hsotg", },
+       { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, s3c_hsotg_of_ids);
+#endif
+
 static struct platform_driver s3c_hsotg_driver = {
        .driver         = {
                .name   = "s3c-hsotg",
                .owner  = THIS_MODULE,
 static struct platform_driver s3c_hsotg_driver = {
        .driver         = {
                .name   = "s3c-hsotg",
                .owner  = THIS_MODULE,
+               .of_match_table = of_match_ptr(s3c_hsotg_of_ids),
        },
        .probe          = s3c_hsotg_probe,
        .remove         = s3c_hsotg_remove,
        },
        .probe          = s3c_hsotg_probe,
        .remove         = s3c_hsotg_remove,