mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 12:44:11 +08:00
pinctrl: renesas: Fixes for v6.5
- Fix handling of non-unique pin control configuration subnode names on the RZ/V2M and RZ/G2L SoC families. -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQQ9qaHoIs/1I4cXmEiKwlD9ZEnxcAUCZK6cTAAKCRCKwlD9ZEnx cPlbAPwKp2wIc7pN6vWsepYxPqIdQ5QVL1erZmJiTq+9ePde4AEAyhpMwlJjF7me 4xTv3b9roIyAH0kygOwO9CwWs43cGwg= =W2Ae -----END PGP SIGNATURE----- Merge tag 'renesas-pinctrl-fixes-for-v6.5-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers into fixes pinctrl: renesas: Fixes for v6.5 - Fix handling of non-unique pin control configuration subnode names on the RZ/V2M and RZ/G2L SoC families. Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
commit
04e601f2a7
@ -249,6 +249,7 @@ static int rzg2l_map_add_config(struct pinctrl_map *map,
|
||||
|
||||
static int rzg2l_dt_subnode_to_map(struct pinctrl_dev *pctldev,
|
||||
struct device_node *np,
|
||||
struct device_node *parent,
|
||||
struct pinctrl_map **map,
|
||||
unsigned int *num_maps,
|
||||
unsigned int *index)
|
||||
@ -266,6 +267,7 @@ static int rzg2l_dt_subnode_to_map(struct pinctrl_dev *pctldev,
|
||||
struct property *prop;
|
||||
int ret, gsel, fsel;
|
||||
const char **pin_fn;
|
||||
const char *name;
|
||||
const char *pin;
|
||||
|
||||
pinmux = of_find_property(np, "pinmux", NULL);
|
||||
@ -349,8 +351,19 @@ static int rzg2l_dt_subnode_to_map(struct pinctrl_dev *pctldev,
|
||||
psel_val[i] = MUX_FUNC(value);
|
||||
}
|
||||
|
||||
if (parent) {
|
||||
name = devm_kasprintf(pctrl->dev, GFP_KERNEL, "%pOFn.%pOFn",
|
||||
parent, np);
|
||||
if (!name) {
|
||||
ret = -ENOMEM;
|
||||
goto done;
|
||||
}
|
||||
} else {
|
||||
name = np->name;
|
||||
}
|
||||
|
||||
/* Register a single pin group listing all the pins we read from DT */
|
||||
gsel = pinctrl_generic_add_group(pctldev, np->name, pins, num_pinmux, NULL);
|
||||
gsel = pinctrl_generic_add_group(pctldev, name, pins, num_pinmux, NULL);
|
||||
if (gsel < 0) {
|
||||
ret = gsel;
|
||||
goto done;
|
||||
@ -360,17 +373,16 @@ static int rzg2l_dt_subnode_to_map(struct pinctrl_dev *pctldev,
|
||||
* Register a single group function where the 'data' is an array PSEL
|
||||
* register values read from DT.
|
||||
*/
|
||||
pin_fn[0] = np->name;
|
||||
fsel = pinmux_generic_add_function(pctldev, np->name, pin_fn, 1,
|
||||
psel_val);
|
||||
pin_fn[0] = name;
|
||||
fsel = pinmux_generic_add_function(pctldev, name, pin_fn, 1, psel_val);
|
||||
if (fsel < 0) {
|
||||
ret = fsel;
|
||||
goto remove_group;
|
||||
}
|
||||
|
||||
maps[idx].type = PIN_MAP_TYPE_MUX_GROUP;
|
||||
maps[idx].data.mux.group = np->name;
|
||||
maps[idx].data.mux.function = np->name;
|
||||
maps[idx].data.mux.group = name;
|
||||
maps[idx].data.mux.function = name;
|
||||
idx++;
|
||||
|
||||
dev_dbg(pctrl->dev, "Parsed %pOF with %d pins\n", np, num_pinmux);
|
||||
@ -417,7 +429,7 @@ static int rzg2l_dt_node_to_map(struct pinctrl_dev *pctldev,
|
||||
index = 0;
|
||||
|
||||
for_each_child_of_node(np, child) {
|
||||
ret = rzg2l_dt_subnode_to_map(pctldev, child, map,
|
||||
ret = rzg2l_dt_subnode_to_map(pctldev, child, np, map,
|
||||
num_maps, &index);
|
||||
if (ret < 0) {
|
||||
of_node_put(child);
|
||||
@ -426,7 +438,7 @@ static int rzg2l_dt_node_to_map(struct pinctrl_dev *pctldev,
|
||||
}
|
||||
|
||||
if (*num_maps == 0) {
|
||||
ret = rzg2l_dt_subnode_to_map(pctldev, np, map,
|
||||
ret = rzg2l_dt_subnode_to_map(pctldev, np, NULL, map,
|
||||
num_maps, &index);
|
||||
if (ret < 0)
|
||||
goto done;
|
||||
|
@ -209,6 +209,7 @@ static int rzv2m_map_add_config(struct pinctrl_map *map,
|
||||
|
||||
static int rzv2m_dt_subnode_to_map(struct pinctrl_dev *pctldev,
|
||||
struct device_node *np,
|
||||
struct device_node *parent,
|
||||
struct pinctrl_map **map,
|
||||
unsigned int *num_maps,
|
||||
unsigned int *index)
|
||||
@ -226,6 +227,7 @@ static int rzv2m_dt_subnode_to_map(struct pinctrl_dev *pctldev,
|
||||
struct property *prop;
|
||||
int ret, gsel, fsel;
|
||||
const char **pin_fn;
|
||||
const char *name;
|
||||
const char *pin;
|
||||
|
||||
pinmux = of_find_property(np, "pinmux", NULL);
|
||||
@ -309,8 +311,19 @@ static int rzv2m_dt_subnode_to_map(struct pinctrl_dev *pctldev,
|
||||
psel_val[i] = MUX_FUNC(value);
|
||||
}
|
||||
|
||||
if (parent) {
|
||||
name = devm_kasprintf(pctrl->dev, GFP_KERNEL, "%pOFn.%pOFn",
|
||||
parent, np);
|
||||
if (!name) {
|
||||
ret = -ENOMEM;
|
||||
goto done;
|
||||
}
|
||||
} else {
|
||||
name = np->name;
|
||||
}
|
||||
|
||||
/* Register a single pin group listing all the pins we read from DT */
|
||||
gsel = pinctrl_generic_add_group(pctldev, np->name, pins, num_pinmux, NULL);
|
||||
gsel = pinctrl_generic_add_group(pctldev, name, pins, num_pinmux, NULL);
|
||||
if (gsel < 0) {
|
||||
ret = gsel;
|
||||
goto done;
|
||||
@ -320,17 +333,16 @@ static int rzv2m_dt_subnode_to_map(struct pinctrl_dev *pctldev,
|
||||
* Register a single group function where the 'data' is an array PSEL
|
||||
* register values read from DT.
|
||||
*/
|
||||
pin_fn[0] = np->name;
|
||||
fsel = pinmux_generic_add_function(pctldev, np->name, pin_fn, 1,
|
||||
psel_val);
|
||||
pin_fn[0] = name;
|
||||
fsel = pinmux_generic_add_function(pctldev, name, pin_fn, 1, psel_val);
|
||||
if (fsel < 0) {
|
||||
ret = fsel;
|
||||
goto remove_group;
|
||||
}
|
||||
|
||||
maps[idx].type = PIN_MAP_TYPE_MUX_GROUP;
|
||||
maps[idx].data.mux.group = np->name;
|
||||
maps[idx].data.mux.function = np->name;
|
||||
maps[idx].data.mux.group = name;
|
||||
maps[idx].data.mux.function = name;
|
||||
idx++;
|
||||
|
||||
dev_dbg(pctrl->dev, "Parsed %pOF with %d pins\n", np, num_pinmux);
|
||||
@ -377,7 +389,7 @@ static int rzv2m_dt_node_to_map(struct pinctrl_dev *pctldev,
|
||||
index = 0;
|
||||
|
||||
for_each_child_of_node(np, child) {
|
||||
ret = rzv2m_dt_subnode_to_map(pctldev, child, map,
|
||||
ret = rzv2m_dt_subnode_to_map(pctldev, child, np, map,
|
||||
num_maps, &index);
|
||||
if (ret < 0) {
|
||||
of_node_put(child);
|
||||
@ -386,7 +398,7 @@ static int rzv2m_dt_node_to_map(struct pinctrl_dev *pctldev,
|
||||
}
|
||||
|
||||
if (*num_maps == 0) {
|
||||
ret = rzv2m_dt_subnode_to_map(pctldev, np, map,
|
||||
ret = rzv2m_dt_subnode_to_map(pctldev, np, NULL, map,
|
||||
num_maps, &index);
|
||||
if (ret < 0)
|
||||
goto done;
|
||||
|
Loading…
Reference in New Issue
Block a user