summaryrefslogtreecommitdiff
path: root/include/dm
diff options
context:
space:
mode:
authorMasahiro Yamada <yamada.m@jp.panasonic.com>2014-10-07 14:51:31 +0900
committerSimon Glass <sjg@chromium.org>2014-10-22 10:32:17 -0600
commitf887cb6d86012a79147cc67d512782644426dd9a (patch)
treee1a884b95798ec4f5924c10eadd5a466f974d5a2 /include/dm
parentb1799fcbdc9d5bd7c7eb85f70f256d81b3af0bfe (diff)
dm: add of_match_ptr() macro
The driver model supports two ways for passing device parameters; Device Tree and platform_data (board file). Each driver should generally support both of them because some popular IPs are used on various platforms. Assume the following scenario: - The driver Foo is used on SoC Bar and SoC Baz - The SoC Bar uses Device Tree control (CONFIG_OF_CONTROL=y) - The SoC Baz does not support Device Tree; uses a board file In this situation, the device driver Foo should work with/without the device tree control. The driver should have .of_match and .ofdata_to_platdata members for SoC Bar, while they are meaningless for SoC Baz; therefore those device-tree control code should go inside #ifdef CONFIG_OF_CONTROL. The driver code will be like this: #ifdef CONFIG_OF_CONTROL static const struct udevice_id foo_of_match = { { .compatible = "foo_driver" }, {}, } static int foo_ofdata_to_platdata(struct udevice *dev) { ... } #endif U_BOOT_DRIVER(foo_driver) = { ... .of_match = of_match_ptr(foo_of_match), .ofdata_to_platdata = of_match_ptr(foo_ofdata_to_platdata), ... } This idea has been borrowed from Linux. (In Linux, this macro is defined in include/linux/of.h) Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com> Acked-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'include/dm')
-rw-r--r--include/dm/device.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/dm/device.h b/include/dm/device.h
index c8a4072bcf..e08d496e6a 100644
--- a/include/dm/device.h
+++ b/include/dm/device.h
@@ -96,6 +96,12 @@ struct udevice_id {
ulong data;
};
+#ifdef CONFIG_OF_CONTROL
+#define of_match_ptr(_ptr) (_ptr)
+#else
+#define of_match_ptr(_ptr) NULL
+#endif /* CONFIG_OF_CONTROL */
+
/**
* struct driver - A driver for a feature or peripheral
*