Re: [PATCH V2 6/6] pinctrl: tegra: Add complete device tree support
From: Stephen Warren <hidden>
Date: 2012-03-22 17:22:35
Also in:
linux-tegra, lkml
On 03/21/2012 10:07 PM, Dong Aisheng wrote:
On Thu, Mar 22, 2012 at 12:07:27AM +0800, Stephen Warren wrote:quoted
On 03/21/2012 03:35 AM, Dong Aisheng wrote:quoted
On Wed, Mar 21, 2012 at 01:44:39AM +0800, Stephen Warren wrote:quoted
Implement pinctrl_ops dt_node_to_map() and dt_free_map(). These allow complete specification of the desired pinmux configuration using device tree.
...
quoted
quoted
quoted
+ for_each_child_of_node(np_config, np) { + ret = of_property_read_string(np, "nvidia,function", &function); + if (ret < 0) + function = NULL; + + for (i = 0; i < ARRAY_SIZE(cfg_params); i++) { + ret = of_property_read_u32(np, cfg_params[i].property, + &val); + if (!ret) { + config = TEGRA_PINCONF_PACK( + cfg_params[i].param, val); + ret = add_config(&configs, &num_configs, + config); + if (ret < 0) + goto error; + } + } + + of_property_for_each_string(np, "nvidia,pins", prop, group) {If we calculate out the strings count and allocate corresponding size array, we may not need to keep krealloc the maps and configs array size for each entry. And this may be a little higher efficient.That's true. However, it'd require the code to loop once to determine how many properties are present and how many entries there are in the pin list. Then, loop again to actually construct the mapping table array. This is all added complexity that doesn't affect correctness. I'd rather get the simple code going first, and then refine it later if there turns out to be a performance issue.Can we use of_property_count_strings?
It'd be possible to avoid some of the reallocs this way. We could realloc once per node rather than once per (node, pin). It does make the code a bit more complex though, since you have to reserve space up-front during the one realloc and so have to store separate num_maps and num_maps_allocated. I'll see how bad it gets, and maybe include it in v3 if it isn't horrible.