|
@@ -356,6 +356,45 @@ struct slim_device *slim_get_device(struct slim_controller *ctrl,
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(slim_get_device);
|
|
|
|
|
|
+static int of_slim_match_dev(struct device *dev, void *data)
|
|
|
+{
|
|
|
+ struct device_node *np = data;
|
|
|
+ struct slim_device *sbdev = to_slim_device(dev);
|
|
|
+
|
|
|
+ return (sbdev->dev.of_node == np);
|
|
|
+}
|
|
|
+
|
|
|
+static struct slim_device *of_find_slim_device(struct slim_controller *ctrl,
|
|
|
+ struct device_node *np)
|
|
|
+{
|
|
|
+ struct slim_device *sbdev;
|
|
|
+ struct device *dev;
|
|
|
+
|
|
|
+ dev = device_find_child(ctrl->dev, np, of_slim_match_dev);
|
|
|
+ if (dev) {
|
|
|
+ sbdev = to_slim_device(dev);
|
|
|
+ return sbdev;
|
|
|
+ }
|
|
|
+
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * of_slim_get_device() - get handle to a device using dt node.
|
|
|
+ *
|
|
|
+ * @ctrl: Controller on which this device will be added/queried
|
|
|
+ * @np: node pointer to device
|
|
|
+ *
|
|
|
+ * Return: pointer to a device if it has already reported. Creates a new
|
|
|
+ * device and returns pointer to it if the device has not yet enumerated.
|
|
|
+ */
|
|
|
+struct slim_device *of_slim_get_device(struct slim_controller *ctrl,
|
|
|
+ struct device_node *np)
|
|
|
+{
|
|
|
+ return of_find_slim_device(ctrl, np);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(of_slim_get_device);
|
|
|
+
|
|
|
static int slim_device_alloc_laddr(struct slim_device *sbdev,
|
|
|
bool report_present)
|
|
|
{
|