diff options
author | Stefan Agner <stefan@agner.ch> | 2018-01-06 09:25:49 -0500 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2018-01-11 04:29:18 -0500 |
commit | f5843492ecefcf766963518f14bcf8d77b88338c (patch) | |
tree | e30b090188570ea4f1a0df45c28f2f3abda788c6 | |
parent | 32e21f084faacc69014b4bb082db04890fad5f1b (diff) |
pinctrl: imx: use struct imx_pinctrl_soc_info as a const
For some SoCs the struct imx_pinctrl_soc_info is passed through
of_device_id.data which is const. Most variables are already const
or otherwise not written. However, some fields are modified at
runtime. Move those fields to the dynamically allocated struct
imx_pinctrl.
Fixes: b3060044e495 ("pinctrl: freescale: imx7d: make of_device_ids const")
Cc: Shawn Guo <shawnguo@kernel.org>
Cc: Arvind Yadav <arvind.yadav.cs@gmail.com>
Cc: Gary Bisson <gary.bisson@boundarydevices.com>
Signed-off-by: Stefan Agner <stefan@agner.ch>
Acked-by: Dong Aisheng <aisheng.dong@nxp.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
-rw-r--r-- | drivers/pinctrl/freescale/pinctrl-imx.c | 79 | ||||
-rw-r--r-- | drivers/pinctrl/freescale/pinctrl-imx.h | 11 | ||||
-rw-r--r-- | drivers/pinctrl/freescale/pinctrl-imx7ulp.c | 3 | ||||
-rw-r--r-- | drivers/pinctrl/freescale/pinctrl-vf610.c | 3 |
4 files changed, 44 insertions, 52 deletions
diff --git a/drivers/pinctrl/freescale/pinctrl-imx.c b/drivers/pinctrl/freescale/pinctrl-imx.c index 6e472691d8ee..86256d25c4a3 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx.c +++ b/drivers/pinctrl/freescale/pinctrl-imx.c | |||
@@ -62,7 +62,6 @@ static int imx_dt_node_to_map(struct pinctrl_dev *pctldev, | |||
62 | struct pinctrl_map **map, unsigned *num_maps) | 62 | struct pinctrl_map **map, unsigned *num_maps) |
63 | { | 63 | { |
64 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); | 64 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); |
65 | struct imx_pinctrl_soc_info *info = ipctl->info; | ||
66 | const struct group_desc *grp; | 65 | const struct group_desc *grp; |
67 | struct pinctrl_map *new_map; | 66 | struct pinctrl_map *new_map; |
68 | struct device_node *parent; | 67 | struct device_node *parent; |
@@ -75,7 +74,7 @@ static int imx_dt_node_to_map(struct pinctrl_dev *pctldev, | |||
75 | */ | 74 | */ |
76 | grp = imx_pinctrl_find_group_by_name(pctldev, np->name); | 75 | grp = imx_pinctrl_find_group_by_name(pctldev, np->name); |
77 | if (!grp) { | 76 | if (!grp) { |
78 | dev_err(info->dev, "unable to find group for node %s\n", | 77 | dev_err(ipctl->dev, "unable to find group for node %s\n", |
79 | np->name); | 78 | np->name); |
80 | return -EINVAL; | 79 | return -EINVAL; |
81 | } | 80 | } |
@@ -146,7 +145,7 @@ static int imx_pmx_set(struct pinctrl_dev *pctldev, unsigned selector, | |||
146 | unsigned group) | 145 | unsigned group) |
147 | { | 146 | { |
148 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); | 147 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); |
149 | struct imx_pinctrl_soc_info *info = ipctl->info; | 148 | const struct imx_pinctrl_soc_info *info = ipctl->info; |
150 | const struct imx_pin_reg *pin_reg; | 149 | const struct imx_pin_reg *pin_reg; |
151 | unsigned int npins, pin_id; | 150 | unsigned int npins, pin_id; |
152 | int i; | 151 | int i; |
@@ -174,7 +173,7 @@ static int imx_pmx_set(struct pinctrl_dev *pctldev, unsigned selector, | |||
174 | struct imx_pin *pin = &((struct imx_pin *)(grp->data))[i]; | 173 | struct imx_pin *pin = &((struct imx_pin *)(grp->data))[i]; |
175 | 174 | ||
176 | pin_id = pin->pin; | 175 | pin_id = pin->pin; |
177 | pin_reg = &info->pin_regs[pin_id]; | 176 | pin_reg = &ipctl->pin_regs[pin_id]; |
178 | 177 | ||
179 | if (pin_reg->mux_reg == -1) { | 178 | if (pin_reg->mux_reg == -1) { |
180 | dev_dbg(ipctl->dev, "Pin(%s) does not support mux function\n", | 179 | dev_dbg(ipctl->dev, "Pin(%s) does not support mux function\n", |
@@ -255,7 +254,7 @@ static u32 imx_pinconf_decode_generic_config(struct imx_pinctrl *ipctl, | |||
255 | unsigned long *configs, | 254 | unsigned long *configs, |
256 | unsigned int num_configs) | 255 | unsigned int num_configs) |
257 | { | 256 | { |
258 | struct imx_pinctrl_soc_info *info = ipctl->info; | 257 | const struct imx_pinctrl_soc_info *info = ipctl->info; |
259 | struct imx_cfg_params_decode *decode; | 258 | struct imx_cfg_params_decode *decode; |
260 | enum pin_config_param param; | 259 | enum pin_config_param param; |
261 | u32 raw_config = 0; | 260 | u32 raw_config = 0; |
@@ -289,7 +288,7 @@ static u32 imx_pinconf_decode_generic_config(struct imx_pinctrl *ipctl, | |||
289 | static u32 imx_pinconf_parse_generic_config(struct device_node *np, | 288 | static u32 imx_pinconf_parse_generic_config(struct device_node *np, |
290 | struct imx_pinctrl *ipctl) | 289 | struct imx_pinctrl *ipctl) |
291 | { | 290 | { |
292 | struct imx_pinctrl_soc_info *info = ipctl->info; | 291 | const struct imx_pinctrl_soc_info *info = ipctl->info; |
293 | struct pinctrl_dev *pctl = ipctl->pctl; | 292 | struct pinctrl_dev *pctl = ipctl->pctl; |
294 | unsigned int num_configs; | 293 | unsigned int num_configs; |
295 | unsigned long *configs; | 294 | unsigned long *configs; |
@@ -310,11 +309,11 @@ static int imx_pinconf_get(struct pinctrl_dev *pctldev, | |||
310 | unsigned pin_id, unsigned long *config) | 309 | unsigned pin_id, unsigned long *config) |
311 | { | 310 | { |
312 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); | 311 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); |
313 | struct imx_pinctrl_soc_info *info = ipctl->info; | 312 | const struct imx_pinctrl_soc_info *info = ipctl->info; |
314 | const struct imx_pin_reg *pin_reg = &info->pin_regs[pin_id]; | 313 | const struct imx_pin_reg *pin_reg = &ipctl->pin_regs[pin_id]; |
315 | 314 | ||
316 | if (pin_reg->conf_reg == -1) { | 315 | if (pin_reg->conf_reg == -1) { |
317 | dev_err(info->dev, "Pin(%s) does not support config function\n", | 316 | dev_err(ipctl->dev, "Pin(%s) does not support config function\n", |
318 | info->pins[pin_id].name); | 317 | info->pins[pin_id].name); |
319 | return -EINVAL; | 318 | return -EINVAL; |
320 | } | 319 | } |
@@ -332,12 +331,12 @@ static int imx_pinconf_set(struct pinctrl_dev *pctldev, | |||
332 | unsigned num_configs) | 331 | unsigned num_configs) |
333 | { | 332 | { |
334 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); | 333 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); |
335 | struct imx_pinctrl_soc_info *info = ipctl->info; | 334 | const struct imx_pinctrl_soc_info *info = ipctl->info; |
336 | const struct imx_pin_reg *pin_reg = &info->pin_regs[pin_id]; | 335 | const struct imx_pin_reg *pin_reg = &ipctl->pin_regs[pin_id]; |
337 | int i; | 336 | int i; |
338 | 337 | ||
339 | if (pin_reg->conf_reg == -1) { | 338 | if (pin_reg->conf_reg == -1) { |
340 | dev_err(info->dev, "Pin(%s) does not support config function\n", | 339 | dev_err(ipctl->dev, "Pin(%s) does not support config function\n", |
341 | info->pins[pin_id].name); | 340 | info->pins[pin_id].name); |
342 | return -EINVAL; | 341 | return -EINVAL; |
343 | } | 342 | } |
@@ -368,8 +367,7 @@ static void imx_pinconf_dbg_show(struct pinctrl_dev *pctldev, | |||
368 | struct seq_file *s, unsigned pin_id) | 367 | struct seq_file *s, unsigned pin_id) |
369 | { | 368 | { |
370 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); | 369 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); |
371 | struct imx_pinctrl_soc_info *info = ipctl->info; | 370 | const struct imx_pin_reg *pin_reg = &ipctl->pin_regs[pin_id]; |
372 | const struct imx_pin_reg *pin_reg = &info->pin_regs[pin_id]; | ||
373 | unsigned long config; | 371 | unsigned long config; |
374 | 372 | ||
375 | if (!pin_reg || pin_reg->conf_reg == -1) { | 373 | if (!pin_reg || pin_reg->conf_reg == -1) { |
@@ -427,13 +425,13 @@ static int imx_pinctrl_parse_groups(struct device_node *np, | |||
427 | struct imx_pinctrl *ipctl, | 425 | struct imx_pinctrl *ipctl, |
428 | u32 index) | 426 | u32 index) |
429 | { | 427 | { |
430 | struct imx_pinctrl_soc_info *info = ipctl->info; | 428 | const struct imx_pinctrl_soc_info *info = ipctl->info; |
431 | int size, pin_size; | 429 | int size, pin_size; |
432 | const __be32 *list; | 430 | const __be32 *list; |
433 | int i; | 431 | int i; |
434 | u32 config; | 432 | u32 config; |
435 | 433 | ||
436 | dev_dbg(info->dev, "group(%d): %s\n", index, np->name); | 434 | dev_dbg(ipctl->dev, "group(%d): %s\n", index, np->name); |
437 | 435 | ||
438 | if (info->flags & SHARE_MUX_CONF_REG) | 436 | if (info->flags & SHARE_MUX_CONF_REG) |
439 | pin_size = SHARE_FSL_PIN_SIZE; | 437 | pin_size = SHARE_FSL_PIN_SIZE; |
@@ -460,7 +458,7 @@ static int imx_pinctrl_parse_groups(struct device_node *np, | |||
460 | if (!list) { | 458 | if (!list) { |
461 | list = of_get_property(np, "pinmux", &size); | 459 | list = of_get_property(np, "pinmux", &size); |
462 | if (!list) { | 460 | if (!list) { |
463 | dev_err(info->dev, | 461 | dev_err(ipctl->dev, |
464 | "no fsl,pins and pins property in node %pOF\n", np); | 462 | "no fsl,pins and pins property in node %pOF\n", np); |
465 | return -EINVAL; | 463 | return -EINVAL; |
466 | } | 464 | } |
@@ -468,7 +466,7 @@ static int imx_pinctrl_parse_groups(struct device_node *np, | |||
468 | 466 | ||
469 | /* we do not check return since it's safe node passed down */ | 467 | /* we do not check return since it's safe node passed down */ |
470 | if (!size || size % pin_size) { | 468 | if (!size || size % pin_size) { |
471 | dev_err(info->dev, "Invalid fsl,pins or pins property in node %pOF\n", np); | 469 | dev_err(ipctl->dev, "Invalid fsl,pins or pins property in node %pOF\n", np); |
472 | return -EINVAL; | 470 | return -EINVAL; |
473 | } | 471 | } |
474 | 472 | ||
@@ -476,9 +474,9 @@ static int imx_pinctrl_parse_groups(struct device_node *np, | |||
476 | config = imx_pinconf_parse_generic_config(np, ipctl); | 474 | config = imx_pinconf_parse_generic_config(np, ipctl); |
477 | 475 | ||
478 | grp->num_pins = size / pin_size; | 476 | grp->num_pins = size / pin_size; |
479 | grp->data = devm_kzalloc(info->dev, grp->num_pins * | 477 | grp->data = devm_kzalloc(ipctl->dev, grp->num_pins * |
480 | sizeof(struct imx_pin), GFP_KERNEL); | 478 | sizeof(struct imx_pin), GFP_KERNEL); |
481 | grp->pins = devm_kzalloc(info->dev, grp->num_pins * | 479 | grp->pins = devm_kzalloc(ipctl->dev, grp->num_pins * |
482 | sizeof(unsigned int), GFP_KERNEL); | 480 | sizeof(unsigned int), GFP_KERNEL); |
483 | if (!grp->pins || !grp->data) | 481 | if (!grp->pins || !grp->data) |
484 | return -ENOMEM; | 482 | return -ENOMEM; |
@@ -502,7 +500,7 @@ static int imx_pinctrl_parse_groups(struct device_node *np, | |||
502 | } | 500 | } |
503 | 501 | ||
504 | pin_id = (mux_reg != -1) ? mux_reg / 4 : conf_reg / 4; | 502 | pin_id = (mux_reg != -1) ? mux_reg / 4 : conf_reg / 4; |
505 | pin_reg = &info->pin_regs[pin_id]; | 503 | pin_reg = &ipctl->pin_regs[pin_id]; |
506 | pin->pin = pin_id; | 504 | pin->pin = pin_id; |
507 | grp->pins[i] = pin_id; | 505 | grp->pins[i] = pin_id; |
508 | pin_reg->mux_reg = mux_reg; | 506 | pin_reg->mux_reg = mux_reg; |
@@ -524,7 +522,7 @@ static int imx_pinctrl_parse_groups(struct device_node *np, | |||
524 | pin->config = config & ~IMX_PAD_SION; | 522 | pin->config = config & ~IMX_PAD_SION; |
525 | } | 523 | } |
526 | 524 | ||
527 | dev_dbg(info->dev, "%s: 0x%x 0x%08lx", info->pins[pin_id].name, | 525 | dev_dbg(ipctl->dev, "%s: 0x%x 0x%08lx", info->pins[pin_id].name, |
528 | pin->mux_mode, pin->config); | 526 | pin->mux_mode, pin->config); |
529 | } | 527 | } |
530 | 528 | ||
@@ -536,13 +534,12 @@ static int imx_pinctrl_parse_functions(struct device_node *np, | |||
536 | u32 index) | 534 | u32 index) |
537 | { | 535 | { |
538 | struct pinctrl_dev *pctl = ipctl->pctl; | 536 | struct pinctrl_dev *pctl = ipctl->pctl; |
539 | struct imx_pinctrl_soc_info *info = ipctl->info; | ||
540 | struct device_node *child; | 537 | struct device_node *child; |
541 | struct function_desc *func; | 538 | struct function_desc *func; |
542 | struct group_desc *grp; | 539 | struct group_desc *grp; |
543 | u32 i = 0; | 540 | u32 i = 0; |
544 | 541 | ||
545 | dev_dbg(info->dev, "parse function(%d): %s\n", index, np->name); | 542 | dev_dbg(pctl->dev, "parse function(%d): %s\n", index, np->name); |
546 | 543 | ||
547 | func = pinmux_generic_get_function(pctl, index); | 544 | func = pinmux_generic_get_function(pctl, index); |
548 | if (!func) | 545 | if (!func) |
@@ -552,10 +549,10 @@ static int imx_pinctrl_parse_functions(struct device_node *np, | |||
552 | func->name = np->name; | 549 | func->name = np->name; |
553 | func->num_group_names = of_get_child_count(np); | 550 | func->num_group_names = of_get_child_count(np); |
554 | if (func->num_group_names == 0) { | 551 | if (func->num_group_names == 0) { |
555 | dev_err(info->dev, "no groups defined in %pOF\n", np); | 552 | dev_err(ipctl->dev, "no groups defined in %pOF\n", np); |
556 | return -EINVAL; | 553 | return -EINVAL; |
557 | } | 554 | } |
558 | func->group_names = devm_kcalloc(info->dev, func->num_group_names, | 555 | func->group_names = devm_kcalloc(ipctl->dev, func->num_group_names, |
559 | sizeof(char *), GFP_KERNEL); | 556 | sizeof(char *), GFP_KERNEL); |
560 | if (!func->group_names) | 557 | if (!func->group_names) |
561 | return -ENOMEM; | 558 | return -ENOMEM; |
@@ -563,15 +560,15 @@ static int imx_pinctrl_parse_functions(struct device_node *np, | |||
563 | for_each_child_of_node(np, child) { | 560 | for_each_child_of_node(np, child) { |
564 | func->group_names[i] = child->name; | 561 | func->group_names[i] = child->name; |
565 | 562 | ||
566 | grp = devm_kzalloc(info->dev, sizeof(struct group_desc), | 563 | grp = devm_kzalloc(ipctl->dev, sizeof(struct group_desc), |
567 | GFP_KERNEL); | 564 | GFP_KERNEL); |
568 | if (!grp) | 565 | if (!grp) |
569 | return -ENOMEM; | 566 | return -ENOMEM; |
570 | 567 | ||
571 | mutex_lock(&info->mutex); | 568 | mutex_lock(&ipctl->mutex); |
572 | radix_tree_insert(&pctl->pin_group_tree, | 569 | radix_tree_insert(&pctl->pin_group_tree, |
573 | info->group_index++, grp); | 570 | ipctl->group_index++, grp); |
574 | mutex_unlock(&info->mutex); | 571 | mutex_unlock(&ipctl->mutex); |
575 | 572 | ||
576 | imx_pinctrl_parse_groups(child, grp, ipctl, i++); | 573 | imx_pinctrl_parse_groups(child, grp, ipctl, i++); |
577 | } | 574 | } |
@@ -608,7 +605,6 @@ static int imx_pinctrl_probe_dt(struct platform_device *pdev, | |||
608 | struct device_node *np = pdev->dev.of_node; | 605 | struct device_node *np = pdev->dev.of_node; |
609 | struct device_node *child; | 606 | struct device_node *child; |
610 | struct pinctrl_dev *pctl = ipctl->pctl; | 607 | struct pinctrl_dev *pctl = ipctl->pctl; |
611 | struct imx_pinctrl_soc_info *info = ipctl->info; | ||
612 | u32 nfuncs = 0; | 608 | u32 nfuncs = 0; |
613 | u32 i = 0; | 609 | u32 i = 0; |
614 | bool flat_funcs; | 610 | bool flat_funcs; |
@@ -635,13 +631,13 @@ static int imx_pinctrl_probe_dt(struct platform_device *pdev, | |||
635 | if (!function) | 631 | if (!function) |
636 | return -ENOMEM; | 632 | return -ENOMEM; |
637 | 633 | ||
638 | mutex_lock(&info->mutex); | 634 | mutex_lock(&ipctl->mutex); |
639 | radix_tree_insert(&pctl->pin_function_tree, i, function); | 635 | radix_tree_insert(&pctl->pin_function_tree, i, function); |
640 | mutex_unlock(&info->mutex); | 636 | mutex_unlock(&ipctl->mutex); |
641 | } | 637 | } |
642 | pctl->num_functions = nfuncs; | 638 | pctl->num_functions = nfuncs; |
643 | 639 | ||
644 | info->group_index = 0; | 640 | ipctl->group_index = 0; |
645 | if (flat_funcs) { | 641 | if (flat_funcs) { |
646 | pctl->num_groups = of_get_child_count(np); | 642 | pctl->num_groups = of_get_child_count(np); |
647 | } else { | 643 | } else { |
@@ -672,7 +668,7 @@ static void imx_free_resources(struct imx_pinctrl *ipctl) | |||
672 | } | 668 | } |
673 | 669 | ||
674 | int imx_pinctrl_probe(struct platform_device *pdev, | 670 | int imx_pinctrl_probe(struct platform_device *pdev, |
675 | struct imx_pinctrl_soc_info *info) | 671 | const struct imx_pinctrl_soc_info *info) |
676 | { | 672 | { |
677 | struct regmap_config config = { .name = "gpr" }; | 673 | struct regmap_config config = { .name = "gpr" }; |
678 | struct device_node *dev_np = pdev->dev.of_node; | 674 | struct device_node *dev_np = pdev->dev.of_node; |
@@ -687,7 +683,6 @@ int imx_pinctrl_probe(struct platform_device *pdev, | |||
687 | dev_err(&pdev->dev, "wrong pinctrl info\n"); | 683 | dev_err(&pdev->dev, "wrong pinctrl info\n"); |
688 | return -EINVAL; | 684 | return -EINVAL; |
689 | } | 685 | } |
690 | info->dev = &pdev->dev; | ||
691 | 686 | ||
692 | if (info->gpr_compatible) { | 687 | if (info->gpr_compatible) { |
693 | gpr = syscon_regmap_lookup_by_compatible(info->gpr_compatible); | 688 | gpr = syscon_regmap_lookup_by_compatible(info->gpr_compatible); |
@@ -700,14 +695,14 @@ int imx_pinctrl_probe(struct platform_device *pdev, | |||
700 | if (!ipctl) | 695 | if (!ipctl) |
701 | return -ENOMEM; | 696 | return -ENOMEM; |
702 | 697 | ||
703 | info->pin_regs = devm_kmalloc(&pdev->dev, sizeof(*info->pin_regs) * | 698 | ipctl->pin_regs = devm_kmalloc(&pdev->dev, sizeof(*ipctl->pin_regs) * |
704 | info->npins, GFP_KERNEL); | 699 | info->npins, GFP_KERNEL); |
705 | if (!info->pin_regs) | 700 | if (!ipctl->pin_regs) |
706 | return -ENOMEM; | 701 | return -ENOMEM; |
707 | 702 | ||
708 | for (i = 0; i < info->npins; i++) { | 703 | for (i = 0; i < info->npins; i++) { |
709 | info->pin_regs[i].mux_reg = -1; | 704 | ipctl->pin_regs[i].mux_reg = -1; |
710 | info->pin_regs[i].conf_reg = -1; | 705 | ipctl->pin_regs[i].conf_reg = -1; |
711 | } | 706 | } |
712 | 707 | ||
713 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 708 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
@@ -751,10 +746,10 @@ int imx_pinctrl_probe(struct platform_device *pdev, | |||
751 | /* platform specific callback */ | 746 | /* platform specific callback */ |
752 | imx_pmx_ops.gpio_set_direction = info->gpio_set_direction; | 747 | imx_pmx_ops.gpio_set_direction = info->gpio_set_direction; |
753 | 748 | ||
754 | mutex_init(&info->mutex); | 749 | mutex_init(&ipctl->mutex); |
755 | 750 | ||
756 | ipctl->info = info; | 751 | ipctl->info = info; |
757 | ipctl->dev = info->dev; | 752 | ipctl->dev = &pdev->dev; |
758 | platform_set_drvdata(pdev, ipctl); | 753 | platform_set_drvdata(pdev, ipctl); |
759 | ret = devm_pinctrl_register_and_init(&pdev->dev, | 754 | ret = devm_pinctrl_register_and_init(&pdev->dev, |
760 | imx_pinctrl_desc, ipctl, | 755 | imx_pinctrl_desc, ipctl, |
diff --git a/drivers/pinctrl/freescale/pinctrl-imx.h b/drivers/pinctrl/freescale/pinctrl-imx.h index 5aa22b52c1d4..41ee75537da4 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx.h +++ b/drivers/pinctrl/freescale/pinctrl-imx.h | |||
@@ -58,14 +58,10 @@ struct imx_cfg_params_decode { | |||
58 | }; | 58 | }; |
59 | 59 | ||
60 | struct imx_pinctrl_soc_info { | 60 | struct imx_pinctrl_soc_info { |
61 | struct device *dev; | ||
62 | const struct pinctrl_pin_desc *pins; | 61 | const struct pinctrl_pin_desc *pins; |
63 | unsigned int npins; | 62 | unsigned int npins; |
64 | struct imx_pin_reg *pin_regs; | ||
65 | unsigned int group_index; | ||
66 | unsigned int flags; | 63 | unsigned int flags; |
67 | const char *gpr_compatible; | 64 | const char *gpr_compatible; |
68 | struct mutex mutex; | ||
69 | 65 | ||
70 | /* MUX_MODE shift and mask in case SHARE_MUX_CONF_REG */ | 66 | /* MUX_MODE shift and mask in case SHARE_MUX_CONF_REG */ |
71 | unsigned int mux_mask; | 67 | unsigned int mux_mask; |
@@ -95,7 +91,10 @@ struct imx_pinctrl { | |||
95 | struct pinctrl_dev *pctl; | 91 | struct pinctrl_dev *pctl; |
96 | void __iomem *base; | 92 | void __iomem *base; |
97 | void __iomem *input_sel_base; | 93 | void __iomem *input_sel_base; |
98 | struct imx_pinctrl_soc_info *info; | 94 | const struct imx_pinctrl_soc_info *info; |
95 | struct imx_pin_reg *pin_regs; | ||
96 | unsigned int group_index; | ||
97 | struct mutex mutex; | ||
99 | }; | 98 | }; |
100 | 99 | ||
101 | #define IMX_CFG_PARAMS_DECODE(p, m, o) \ | 100 | #define IMX_CFG_PARAMS_DECODE(p, m, o) \ |
@@ -117,5 +116,5 @@ struct imx_pinctrl { | |||
117 | #define IOMUXC_CONFIG_SION (0x1 << 4) | 116 | #define IOMUXC_CONFIG_SION (0x1 << 4) |
118 | 117 | ||
119 | int imx_pinctrl_probe(struct platform_device *pdev, | 118 | int imx_pinctrl_probe(struct platform_device *pdev, |
120 | struct imx_pinctrl_soc_info *info); | 119 | const struct imx_pinctrl_soc_info *info); |
121 | #endif /* __DRIVERS_PINCTRL_IMX_H */ | 120 | #endif /* __DRIVERS_PINCTRL_IMX_H */ |
diff --git a/drivers/pinctrl/freescale/pinctrl-imx7ulp.c b/drivers/pinctrl/freescale/pinctrl-imx7ulp.c index b7bebb292f37..9161c984f57b 100644 --- a/drivers/pinctrl/freescale/pinctrl-imx7ulp.c +++ b/drivers/pinctrl/freescale/pinctrl-imx7ulp.c | |||
@@ -307,11 +307,10 @@ static int imx7ulp_pmx_gpio_set_direction(struct pinctrl_dev *pctldev, | |||
307 | unsigned offset, bool input) | 307 | unsigned offset, bool input) |
308 | { | 308 | { |
309 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); | 309 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); |
310 | struct imx_pinctrl_soc_info *info = ipctl->info; | ||
311 | const struct imx_pin_reg *pin_reg; | 310 | const struct imx_pin_reg *pin_reg; |
312 | u32 reg; | 311 | u32 reg; |
313 | 312 | ||
314 | pin_reg = &info->pin_regs[offset]; | 313 | pin_reg = &ipctl->pin_regs[offset]; |
315 | if (pin_reg->mux_reg == -1) | 314 | if (pin_reg->mux_reg == -1) |
316 | return -EINVAL; | 315 | return -EINVAL; |
317 | 316 | ||
diff --git a/drivers/pinctrl/freescale/pinctrl-vf610.c b/drivers/pinctrl/freescale/pinctrl-vf610.c index ac18bb6d6d5e..42745c690be3 100644 --- a/drivers/pinctrl/freescale/pinctrl-vf610.c +++ b/drivers/pinctrl/freescale/pinctrl-vf610.c | |||
@@ -300,11 +300,10 @@ static int vf610_pmx_gpio_set_direction(struct pinctrl_dev *pctldev, | |||
300 | unsigned offset, bool input) | 300 | unsigned offset, bool input) |
301 | { | 301 | { |
302 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); | 302 | struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev); |
303 | struct imx_pinctrl_soc_info *info = ipctl->info; | ||
304 | const struct imx_pin_reg *pin_reg; | 303 | const struct imx_pin_reg *pin_reg; |
305 | u32 reg; | 304 | u32 reg; |
306 | 305 | ||
307 | pin_reg = &info->pin_regs[offset]; | 306 | pin_reg = &ipctl->pin_regs[offset]; |
308 | if (pin_reg->mux_reg == -1) | 307 | if (pin_reg->mux_reg == -1) |
309 | return -EINVAL; | 308 | return -EINVAL; |
310 | 309 | ||