Ejemplo n.º 1
0
/**
 * dtbocfg_overlay_create() - Create Device Tree Overlay
 * @overlay: Pointer to Device Tree Overlay Item
 * return    Success(0) or Error Status.
 */
static int dtbocfg_overlay_item_create(struct dtbocfg_overlay_item *overlay)
{
    int ret_val;

    of_fdt_unflatten_tree(overlay->dtbo, &overlay->node);
    if (overlay->node == NULL) {
        pr_err("%s: failed to unflatten tree\n", __func__);
        ret_val = -EINVAL;
        goto failed;
    }
    pr_debug("%s: unflattened OK\n", __func__);

    of_node_set_flag(overlay->node, OF_DETACHED);

    ret_val = of_resolve_phandles(overlay->node);
    if (ret_val != 0) {
        pr_err("%s: Failed to resolve tree\n", __func__);
        goto failed;
    }
    pr_debug("%s: resolved OK\n", __func__);

    ret_val = of_overlay_create(overlay->node);
    if (ret_val < 0) {
        pr_err("%s: Failed to create overlay (ret_val=%d)\n", __func__, ret_val);
        goto failed;
    }
    overlay->id = ret_val;
    pr_debug("%s: create OK\n", __func__);
    return 0;

  failed:
    return ret_val;
}
Ejemplo n.º 2
0
	for_each_child_of_node(overlay, fragment) {
		prop = of_find_property(fragment, "target-path", NULL);
		if (!prop)
			continue;
		if (!strncmp("i2c", (char *)prop->value, prop->length))
			if (tilcdc_prop_str_update(prop, i2c->full_name, &kft))
				goto out;
		if (!strncmp("lcdc", (char *)prop->value, prop->length))
			if (tilcdc_prop_str_update(prop, lcdc->full_name, &kft))
				goto out;
	}

	tilcdc_node_disable(slave);

	ret = of_overlay_create(overlay);
	if (ret)
		pr_err("%s: Creating overlay failed: %d\n", __func__, ret);
	else
		pr_info("%s: ti,tilcdc,slave node successfully converted\n",
			__func__);
out:
	kfree_table_free(&kft);
	of_node_put(i2c);
	of_node_put(slave);
	of_node_put(lcdc);
	of_node_put(fragment);
}

static int __init tilcdc_slave_compat_init(void)
{