[U-Boot] [PATCH 04/13] dm: pinctrl: migrate pinctrl-generic to livetree
Patrick Delaunay
patrick.delaunay at st.com
Wed Oct 23 13:44:39 UTC 2019
Migrate pinctrl-generic to livetree:
- ofnode_get_first_property
- ofnode_get_next_property
- ofnode_get_property_by_prop
- ofnode_read_string_count
- ofnode_read_string_index
and get rid of DECLARE_GLOBAL_DATA_PTR.
This solve parsing issue during test in sandbox for pin
configuration (OF_LIVE is activated in sandbox_defconfig
and sub node are not correctly parsed in
pinctrl_generic_set_state_subnode with fdt lib API).
Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
---
drivers/pinctrl/pinctrl-generic.c | 36 +++++++++++++++----------------
1 file changed, 17 insertions(+), 19 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-generic.c b/drivers/pinctrl/pinctrl-generic.c
index eecf0f5dc1..474a2e65ca 100644
--- a/drivers/pinctrl/pinctrl-generic.c
+++ b/drivers/pinctrl/pinctrl-generic.c
@@ -8,8 +8,6 @@
#include <linux/compat.h>
#include <dm/pinctrl.h>
-DECLARE_GLOBAL_DATA_PTR;
-
/**
* pinctrl_pin_name_to_selector() - return the pin selector for a pin
*
@@ -243,18 +241,18 @@ static int pinctrl_generic_set_state_one(struct udevice *dev,
struct udevice *config,
bool is_group, unsigned selector)
{
- const void *fdt = gd->fdt_blob;
- int node_offset = dev_of_offset(config);
const char *propname;
const void *value;
- int prop_offset, len, func_selector, param, ret;
+ const void *property;
+ int len, func_selector, param, ret;
u32 arg, default_val;
- for (prop_offset = fdt_first_property_offset(fdt, node_offset);
- prop_offset > 0;
- prop_offset = fdt_next_property_offset(fdt, prop_offset)) {
- value = fdt_getprop_by_offset(fdt, prop_offset,
- &propname, &len);
+ for (property = ofnode_get_first_property(dev_ofnode(config));
+ property;
+ property = ofnode_get_next_property(dev_ofnode(config),
+ property)) {
+ value = ofnode_get_property_by_prop(dev_ofnode(config),
+ property, &propname, &len);
if (!value)
return -EINVAL;
@@ -298,19 +296,18 @@ static int pinctrl_generic_set_state_one(struct udevice *dev,
static int pinctrl_generic_set_state_subnode(struct udevice *dev,
struct udevice *config)
{
- const void *fdt = gd->fdt_blob;
- int node = dev_of_offset(config);
const char *subnode_target_type = "pins";
bool is_group = false;
const char *name;
int strings_count, selector, i, ret;
- strings_count = fdt_stringlist_count(fdt, node, subnode_target_type);
+ strings_count = ofnode_read_string_count(dev_ofnode(config),
+ subnode_target_type);
if (strings_count < 0) {
subnode_target_type = "groups";
is_group = true;
- strings_count = fdt_stringlist_count(fdt, node,
- subnode_target_type);
+ strings_count = ofnode_read_string_count(dev_ofnode(config),
+ subnode_target_type);
if (strings_count < 0) {
/* skip this node; may contain config child nodes */
return 0;
@@ -318,10 +315,11 @@ static int pinctrl_generic_set_state_subnode(struct udevice *dev,
}
for (i = 0; i < strings_count; i++) {
- name = fdt_stringlist_get(fdt, node, subnode_target_type, i,
- NULL);
- if (!name)
- return -EINVAL;
+ ret = ofnode_read_string_index(dev_ofnode(config),
+ subnode_target_type, i,
+ &name);
+ if (ret)
+ return ret;
if (is_group)
selector = pinctrl_group_name_to_selector(dev, name);
--
2.17.1
More information about the U-Boot
mailing list