1 // SPDX-License-Identifier: GPL-2.0-only
3 * Driver for the NVIDIA Tegra pinmux
5 * Copyright (c) 2011-2012, NVIDIA CORPORATION. All rights reserved.
8 * Copyright (C) 2010 Google, Inc.
9 * Copyright (C) 2010 NVIDIA Corporation
10 * Copyright (C) 2009-2011 ST-Ericsson AB
13 #include <linux/err.h>
14 #include <linux/init.h>
17 #include <linux/platform_device.h>
18 #include <linux/seq_file.h>
19 #include <linux/slab.h>
21 #include <linux/pinctrl/machine.h>
22 #include <linux/pinctrl/pinconf.h>
23 #include <linux/pinctrl/pinctrl.h>
24 #include <linux/pinctrl/pinmux.h>
27 #include "../pinctrl-utils.h"
28 #include "pinctrl-tegra.h"
30 static inline u32
pmx_readl(struct tegra_pmx
*pmx
, u32 bank
, u32 reg
)
32 return readl(pmx
->regs
[bank
] + reg
);
35 static inline void pmx_writel(struct tegra_pmx
*pmx
, u32 val
, u32 bank
, u32 reg
)
37 writel_relaxed(val
, pmx
->regs
[bank
] + reg
);
38 /* make sure pinmux register write completed */
39 pmx_readl(pmx
, bank
, reg
);
42 static int tegra_pinctrl_get_groups_count(struct pinctrl_dev
*pctldev
)
44 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
46 return pmx
->soc
->ngroups
;
49 static const char *tegra_pinctrl_get_group_name(struct pinctrl_dev
*pctldev
,
52 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
54 return pmx
->soc
->groups
[group
].name
;
57 static int tegra_pinctrl_get_group_pins(struct pinctrl_dev
*pctldev
,
59 const unsigned **pins
,
62 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
64 *pins
= pmx
->soc
->groups
[group
].pins
;
65 *num_pins
= pmx
->soc
->groups
[group
].npins
;
70 #ifdef CONFIG_DEBUG_FS
71 static void tegra_pinctrl_pin_dbg_show(struct pinctrl_dev
*pctldev
,
75 seq_printf(s
, " %s", dev_name(pctldev
->dev
));
79 static const struct cfg_param
{
81 enum tegra_pinconf_param param
;
83 {"nvidia,pull", TEGRA_PINCONF_PARAM_PULL
},
84 {"nvidia,tristate", TEGRA_PINCONF_PARAM_TRISTATE
},
85 {"nvidia,enable-input", TEGRA_PINCONF_PARAM_ENABLE_INPUT
},
86 {"nvidia,open-drain", TEGRA_PINCONF_PARAM_OPEN_DRAIN
},
87 {"nvidia,lock", TEGRA_PINCONF_PARAM_LOCK
},
88 {"nvidia,io-reset", TEGRA_PINCONF_PARAM_IORESET
},
89 {"nvidia,rcv-sel", TEGRA_PINCONF_PARAM_RCV_SEL
},
90 {"nvidia,io-hv", TEGRA_PINCONF_PARAM_RCV_SEL
},
91 {"nvidia,high-speed-mode", TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE
},
92 {"nvidia,schmitt", TEGRA_PINCONF_PARAM_SCHMITT
},
93 {"nvidia,low-power-mode", TEGRA_PINCONF_PARAM_LOW_POWER_MODE
},
94 {"nvidia,pull-down-strength", TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH
},
95 {"nvidia,pull-up-strength", TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH
},
96 {"nvidia,slew-rate-falling", TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING
},
97 {"nvidia,slew-rate-rising", TEGRA_PINCONF_PARAM_SLEW_RATE_RISING
},
98 {"nvidia,drive-type", TEGRA_PINCONF_PARAM_DRIVE_TYPE
},
101 static int tegra_pinctrl_dt_subnode_to_map(struct pinctrl_dev
*pctldev
,
102 struct device_node
*np
,
103 struct pinctrl_map
**map
,
104 unsigned *reserved_maps
,
107 struct device
*dev
= pctldev
->dev
;
109 const char *function
;
111 unsigned long config
;
112 unsigned long *configs
= NULL
;
113 unsigned num_configs
= 0;
115 struct property
*prop
;
118 ret
= of_property_read_string(np
, "nvidia,function", &function
);
120 /* EINVAL=missing, which is fine since it's optional */
123 "%pOF: could not parse property nvidia,function\n", np
);
127 for (i
= 0; i
< ARRAY_SIZE(cfg_params
); i
++) {
128 ret
= of_property_read_u32(np
, cfg_params
[i
].property
, &val
);
130 config
= TEGRA_PINCONF_PACK(cfg_params
[i
].param
, val
);
131 ret
= pinctrl_utils_add_config(pctldev
, &configs
,
132 &num_configs
, config
);
135 /* EINVAL=missing, which is fine since it's optional */
136 } else if (ret
!= -EINVAL
) {
137 dev_err(dev
, "%pOF: could not parse property %s\n",
138 np
, cfg_params
[i
].property
);
143 if (function
!= NULL
)
147 ret
= of_property_count_strings(np
, "nvidia,pins");
149 dev_err(dev
, "%pOF: could not parse property nvidia,pins\n", np
);
154 ret
= pinctrl_utils_reserve_map(pctldev
, map
, reserved_maps
,
159 of_property_for_each_string(np
, "nvidia,pins", prop
, group
) {
161 ret
= pinctrl_utils_add_map_mux(pctldev
, map
,
162 reserved_maps
, num_maps
, group
,
169 ret
= pinctrl_utils_add_map_configs(pctldev
, map
,
170 reserved_maps
, num_maps
, group
,
171 configs
, num_configs
,
172 PIN_MAP_TYPE_CONFIGS_GROUP
);
185 static int tegra_pinctrl_dt_node_to_map(struct pinctrl_dev
*pctldev
,
186 struct device_node
*np_config
,
187 struct pinctrl_map
**map
,
190 unsigned reserved_maps
;
197 for_each_child_of_node_scoped(np_config
, np
) {
198 ret
= tegra_pinctrl_dt_subnode_to_map(pctldev
, np
, map
,
199 &reserved_maps
, num_maps
);
201 pinctrl_utils_free_map(pctldev
, *map
,
210 static const struct pinctrl_ops tegra_pinctrl_ops
= {
211 .get_groups_count
= tegra_pinctrl_get_groups_count
,
212 .get_group_name
= tegra_pinctrl_get_group_name
,
213 .get_group_pins
= tegra_pinctrl_get_group_pins
,
214 #ifdef CONFIG_DEBUG_FS
215 .pin_dbg_show
= tegra_pinctrl_pin_dbg_show
,
217 .dt_node_to_map
= tegra_pinctrl_dt_node_to_map
,
218 .dt_free_map
= pinctrl_utils_free_map
,
221 static int tegra_pinctrl_get_funcs_count(struct pinctrl_dev
*pctldev
)
223 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
225 return pmx
->soc
->nfunctions
;
228 static const char *tegra_pinctrl_get_func_name(struct pinctrl_dev
*pctldev
,
231 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
233 return pmx
->functions
[function
].name
;
236 static int tegra_pinctrl_get_func_groups(struct pinctrl_dev
*pctldev
,
238 const char * const **groups
,
239 unsigned * const num_groups
)
241 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
243 *groups
= pmx
->functions
[function
].groups
;
244 *num_groups
= pmx
->functions
[function
].ngroups
;
249 static int tegra_pinctrl_set_mux(struct pinctrl_dev
*pctldev
,
253 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
254 const struct tegra_pingroup
*g
;
258 g
= &pmx
->soc
->groups
[group
];
260 if (WARN_ON(g
->mux_reg
< 0))
263 for (i
= 0; i
< ARRAY_SIZE(g
->funcs
); i
++) {
264 if (g
->funcs
[i
] == function
)
267 if (WARN_ON(i
== ARRAY_SIZE(g
->funcs
)))
270 val
= pmx_readl(pmx
, g
->mux_bank
, g
->mux_reg
);
271 val
&= ~(0x3 << g
->mux_bit
);
272 val
|= i
<< g
->mux_bit
;
273 pmx_writel(pmx
, val
, g
->mux_bank
, g
->mux_reg
);
278 static const struct tegra_pingroup
*tegra_pinctrl_get_group(struct pinctrl_dev
*pctldev
,
281 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
282 unsigned int group
, num_pins
, j
;
283 const unsigned int *pins
;
286 for (group
= 0; group
< pmx
->soc
->ngroups
; ++group
) {
287 ret
= tegra_pinctrl_get_group_pins(pctldev
, group
, &pins
, &num_pins
);
290 for (j
= 0; j
< num_pins
; j
++) {
291 if (offset
== pins
[j
])
292 return &pmx
->soc
->groups
[group
];
296 dev_err(pctldev
->dev
, "Pingroup not found for pin %u\n", offset
);
300 static int tegra_pinctrl_gpio_request_enable(struct pinctrl_dev
*pctldev
,
301 struct pinctrl_gpio_range
*range
,
304 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
305 const struct tegra_pingroup
*group
;
308 if (!pmx
->soc
->sfsel_in_mux
)
311 group
= tegra_pinctrl_get_group(pctldev
, offset
);
316 if (group
->mux_reg
< 0 || group
->sfsel_bit
< 0)
319 value
= pmx_readl(pmx
, group
->mux_bank
, group
->mux_reg
);
320 value
&= ~BIT(group
->sfsel_bit
);
321 pmx_writel(pmx
, value
, group
->mux_bank
, group
->mux_reg
);
326 static void tegra_pinctrl_gpio_disable_free(struct pinctrl_dev
*pctldev
,
327 struct pinctrl_gpio_range
*range
,
330 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
331 const struct tegra_pingroup
*group
;
334 if (!pmx
->soc
->sfsel_in_mux
)
337 group
= tegra_pinctrl_get_group(pctldev
, offset
);
342 if (group
->mux_reg
< 0 || group
->sfsel_bit
< 0)
345 value
= pmx_readl(pmx
, group
->mux_bank
, group
->mux_reg
);
346 value
|= BIT(group
->sfsel_bit
);
347 pmx_writel(pmx
, value
, group
->mux_bank
, group
->mux_reg
);
350 static const struct pinmux_ops tegra_pinmux_ops
= {
351 .get_functions_count
= tegra_pinctrl_get_funcs_count
,
352 .get_function_name
= tegra_pinctrl_get_func_name
,
353 .get_function_groups
= tegra_pinctrl_get_func_groups
,
354 .set_mux
= tegra_pinctrl_set_mux
,
355 .gpio_request_enable
= tegra_pinctrl_gpio_request_enable
,
356 .gpio_disable_free
= tegra_pinctrl_gpio_disable_free
,
359 static int tegra_pinconf_reg(struct tegra_pmx
*pmx
,
360 const struct tegra_pingroup
*g
,
361 enum tegra_pinconf_param param
,
363 s8
*bank
, s32
*reg
, s8
*bit
, s8
*width
)
366 case TEGRA_PINCONF_PARAM_PULL
:
367 *bank
= g
->pupd_bank
;
372 case TEGRA_PINCONF_PARAM_TRISTATE
:
378 case TEGRA_PINCONF_PARAM_ENABLE_INPUT
:
381 *bit
= g
->einput_bit
;
384 case TEGRA_PINCONF_PARAM_OPEN_DRAIN
:
387 *bit
= g
->odrain_bit
;
390 case TEGRA_PINCONF_PARAM_LOCK
:
396 case TEGRA_PINCONF_PARAM_IORESET
:
399 *bit
= g
->ioreset_bit
;
402 case TEGRA_PINCONF_PARAM_RCV_SEL
:
405 *bit
= g
->rcv_sel_bit
;
408 case TEGRA_PINCONF_PARAM_HIGH_SPEED_MODE
:
409 if (pmx
->soc
->hsm_in_mux
) {
419 case TEGRA_PINCONF_PARAM_SCHMITT
:
420 if (pmx
->soc
->schmitt_in_mux
) {
427 *bit
= g
->schmitt_bit
;
430 case TEGRA_PINCONF_PARAM_LOW_POWER_MODE
:
436 case TEGRA_PINCONF_PARAM_DRIVE_DOWN_STRENGTH
:
440 *width
= g
->drvdn_width
;
442 case TEGRA_PINCONF_PARAM_DRIVE_UP_STRENGTH
:
446 *width
= g
->drvup_width
;
448 case TEGRA_PINCONF_PARAM_SLEW_RATE_FALLING
:
452 *width
= g
->slwf_width
;
454 case TEGRA_PINCONF_PARAM_SLEW_RATE_RISING
:
458 *width
= g
->slwr_width
;
460 case TEGRA_PINCONF_PARAM_DRIVE_TYPE
:
461 if (pmx
->soc
->drvtype_in_mux
) {
468 *bit
= g
->drvtype_bit
;
472 dev_err(pmx
->dev
, "Invalid config param %04x\n", param
);
476 if (*reg
< 0 || *bit
< 0) {
478 const char *prop
= "unknown";
481 for (i
= 0; i
< ARRAY_SIZE(cfg_params
); i
++) {
482 if (cfg_params
[i
].param
== param
) {
483 prop
= cfg_params
[i
].property
;
489 "Config param %04x (%s) not supported on group %s\n",
490 param
, prop
, g
->name
);
498 static int tegra_pinconf_get(struct pinctrl_dev
*pctldev
,
499 unsigned pin
, unsigned long *config
)
501 dev_err(pctldev
->dev
, "pin_config_get op not supported\n");
505 static int tegra_pinconf_set(struct pinctrl_dev
*pctldev
,
506 unsigned pin
, unsigned long *configs
,
507 unsigned num_configs
)
509 dev_err(pctldev
->dev
, "pin_config_set op not supported\n");
513 static int tegra_pinconf_group_get(struct pinctrl_dev
*pctldev
,
514 unsigned group
, unsigned long *config
)
516 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
517 enum tegra_pinconf_param param
= TEGRA_PINCONF_UNPACK_PARAM(*config
);
519 const struct tegra_pingroup
*g
;
525 g
= &pmx
->soc
->groups
[group
];
527 ret
= tegra_pinconf_reg(pmx
, g
, param
, true, &bank
, ®
, &bit
,
532 val
= pmx_readl(pmx
, bank
, reg
);
533 mask
= (1 << width
) - 1;
534 arg
= (val
>> bit
) & mask
;
536 *config
= TEGRA_PINCONF_PACK(param
, arg
);
541 static int tegra_pinconf_group_set(struct pinctrl_dev
*pctldev
,
542 unsigned group
, unsigned long *configs
,
543 unsigned num_configs
)
545 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
546 enum tegra_pinconf_param param
;
548 const struct tegra_pingroup
*g
;
554 g
= &pmx
->soc
->groups
[group
];
556 for (i
= 0; i
< num_configs
; i
++) {
557 param
= TEGRA_PINCONF_UNPACK_PARAM(configs
[i
]);
558 arg
= TEGRA_PINCONF_UNPACK_ARG(configs
[i
]);
560 ret
= tegra_pinconf_reg(pmx
, g
, param
, true, &bank
, ®
, &bit
,
565 val
= pmx_readl(pmx
, bank
, reg
);
567 /* LOCK can't be cleared */
568 if (param
== TEGRA_PINCONF_PARAM_LOCK
) {
569 if ((val
& BIT(bit
)) && !arg
) {
570 dev_err(pctldev
->dev
, "LOCK bit cannot be cleared\n");
575 /* Special-case Boolean values; allow any non-zero as true */
579 /* Range-check user-supplied value */
580 mask
= (1 << width
) - 1;
582 dev_err(pctldev
->dev
,
583 "config %lx: %x too big for %d bit register\n",
584 configs
[i
], arg
, width
);
588 /* Update register */
589 val
&= ~(mask
<< bit
);
591 pmx_writel(pmx
, val
, bank
, reg
);
592 } /* for each config */
597 #ifdef CONFIG_DEBUG_FS
598 static void tegra_pinconf_dbg_show(struct pinctrl_dev
*pctldev
,
599 struct seq_file
*s
, unsigned offset
)
603 static const char *strip_prefix(const char *s
)
605 const char *comma
= strchr(s
, ',');
612 static void tegra_pinconf_group_dbg_show(struct pinctrl_dev
*pctldev
,
613 struct seq_file
*s
, unsigned group
)
615 struct tegra_pmx
*pmx
= pinctrl_dev_get_drvdata(pctldev
);
616 const struct tegra_pingroup
*g
;
622 g
= &pmx
->soc
->groups
[group
];
624 for (i
= 0; i
< ARRAY_SIZE(cfg_params
); i
++) {
625 ret
= tegra_pinconf_reg(pmx
, g
, cfg_params
[i
].param
, false,
626 &bank
, ®
, &bit
, &width
);
630 val
= pmx_readl(pmx
, bank
, reg
);
632 val
&= (1 << width
) - 1;
634 seq_printf(s
, "\n\t%s=%u",
635 strip_prefix(cfg_params
[i
].property
), val
);
638 if (g
->mux_reg
>= 0) {
639 /* read pinmux function and dump to seq_file */
640 val
= pmx_readl(pmx
, g
->mux_bank
, g
->mux_reg
);
641 val
= g
->funcs
[(val
>> g
->mux_bit
) & 0x3];
643 seq_printf(s
, "\n\tfunction=%s", pmx
->functions
[val
].name
);
647 static void tegra_pinconf_config_dbg_show(struct pinctrl_dev
*pctldev
,
649 unsigned long config
)
651 enum tegra_pinconf_param param
= TEGRA_PINCONF_UNPACK_PARAM(config
);
652 u16 arg
= TEGRA_PINCONF_UNPACK_ARG(config
);
653 const char *pname
= "unknown";
656 for (i
= 0; i
< ARRAY_SIZE(cfg_params
); i
++) {
657 if (cfg_params
[i
].param
== param
) {
658 pname
= cfg_params
[i
].property
;
663 seq_printf(s
, "%s=%d", strip_prefix(pname
), arg
);
667 static const struct pinconf_ops tegra_pinconf_ops
= {
668 .pin_config_get
= tegra_pinconf_get
,
669 .pin_config_set
= tegra_pinconf_set
,
670 .pin_config_group_get
= tegra_pinconf_group_get
,
671 .pin_config_group_set
= tegra_pinconf_group_set
,
672 #ifdef CONFIG_DEBUG_FS
673 .pin_config_dbg_show
= tegra_pinconf_dbg_show
,
674 .pin_config_group_dbg_show
= tegra_pinconf_group_dbg_show
,
675 .pin_config_config_dbg_show
= tegra_pinconf_config_dbg_show
,
679 static void tegra_pinctrl_clear_parked_bits(struct tegra_pmx
*pmx
)
682 const struct tegra_pingroup
*g
;
685 for (i
= 0; i
< pmx
->soc
->ngroups
; ++i
) {
686 g
= &pmx
->soc
->groups
[i
];
687 if (g
->parked_bitmask
> 0) {
688 unsigned int bank
, reg
;
690 if (g
->mux_reg
!= -1) {
698 val
= pmx_readl(pmx
, bank
, reg
);
699 val
&= ~g
->parked_bitmask
;
700 pmx_writel(pmx
, val
, bank
, reg
);
705 static size_t tegra_pinctrl_get_bank_size(struct device
*dev
,
706 unsigned int bank_id
)
708 struct platform_device
*pdev
= to_platform_device(dev
);
709 struct resource
*res
;
711 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, bank_id
);
713 return resource_size(res
) / 4;
716 static int tegra_pinctrl_suspend(struct device
*dev
)
718 struct tegra_pmx
*pmx
= dev_get_drvdata(dev
);
719 u32
*backup_regs
= pmx
->backup_regs
;
724 for (i
= 0; i
< pmx
->nbanks
; i
++) {
725 bank_size
= tegra_pinctrl_get_bank_size(dev
, i
);
727 for (k
= 0; k
< bank_size
; k
++)
728 *backup_regs
++ = readl_relaxed(regs
++);
731 return pinctrl_force_sleep(pmx
->pctl
);
734 static int tegra_pinctrl_resume(struct device
*dev
)
736 struct tegra_pmx
*pmx
= dev_get_drvdata(dev
);
737 u32
*backup_regs
= pmx
->backup_regs
;
742 for (i
= 0; i
< pmx
->nbanks
; i
++) {
743 bank_size
= tegra_pinctrl_get_bank_size(dev
, i
);
745 for (k
= 0; k
< bank_size
; k
++)
746 writel_relaxed(*backup_regs
++, regs
++);
749 /* flush all the prior writes */
750 readl_relaxed(pmx
->regs
[0]);
751 /* wait for pinctrl register read to complete */
756 DEFINE_NOIRQ_DEV_PM_OPS(tegra_pinctrl_pm
, tegra_pinctrl_suspend
, tegra_pinctrl_resume
);
758 static bool tegra_pinctrl_gpio_node_has_range(struct tegra_pmx
*pmx
)
760 struct device_node
*np
;
761 bool has_prop
= false;
763 np
= of_find_compatible_node(NULL
, NULL
, pmx
->soc
->gpio_compatible
);
767 has_prop
= of_find_property(np
, "gpio-ranges", NULL
);
774 int tegra_pinctrl_probe(struct platform_device
*pdev
,
775 const struct tegra_pinctrl_soc_data
*soc_data
)
777 struct tegra_pmx
*pmx
;
778 struct resource
*res
;
780 const char **group_pins
;
782 unsigned long backup_regs_size
= 0;
784 pmx
= devm_kzalloc(&pdev
->dev
, sizeof(*pmx
), GFP_KERNEL
);
788 pmx
->dev
= &pdev
->dev
;
792 * Each mux group will appear in 4 functions' list of groups.
793 * This over-allocates slightly, since not all groups are mux groups.
795 pmx
->group_pins
= devm_kcalloc(&pdev
->dev
, pmx
->soc
->ngroups
* 4,
796 sizeof(*pmx
->group_pins
), GFP_KERNEL
);
797 if (!pmx
->group_pins
)
800 pmx
->functions
= devm_kcalloc(&pdev
->dev
, pmx
->soc
->nfunctions
,
801 sizeof(*pmx
->functions
), GFP_KERNEL
);
805 group_pins
= pmx
->group_pins
;
807 for (fn
= 0; fn
< pmx
->soc
->nfunctions
; fn
++) {
808 struct tegra_function
*func
= &pmx
->functions
[fn
];
810 func
->name
= pmx
->soc
->functions
[fn
];
811 func
->groups
= group_pins
;
813 for (gn
= 0; gn
< pmx
->soc
->ngroups
; gn
++) {
814 const struct tegra_pingroup
*g
= &pmx
->soc
->groups
[gn
];
816 if (g
->mux_reg
== -1)
819 for (gfn
= 0; gfn
< 4; gfn
++)
820 if (g
->funcs
[gfn
] == fn
)
825 BUG_ON(group_pins
- pmx
->group_pins
>=
826 pmx
->soc
->ngroups
* 4);
827 *group_pins
++ = g
->name
;
832 pmx
->gpio_range
.name
= "Tegra GPIOs";
833 pmx
->gpio_range
.id
= 0;
834 pmx
->gpio_range
.base
= 0;
835 pmx
->gpio_range
.npins
= pmx
->soc
->ngpios
;
837 pmx
->desc
.pctlops
= &tegra_pinctrl_ops
;
838 pmx
->desc
.pmxops
= &tegra_pinmux_ops
;
839 pmx
->desc
.confops
= &tegra_pinconf_ops
;
840 pmx
->desc
.owner
= THIS_MODULE
;
841 pmx
->desc
.name
= dev_name(&pdev
->dev
);
842 pmx
->desc
.pins
= pmx
->soc
->pins
;
843 pmx
->desc
.npins
= pmx
->soc
->npins
;
846 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, i
);
849 backup_regs_size
+= resource_size(res
);
853 pmx
->regs
= devm_kcalloc(&pdev
->dev
, pmx
->nbanks
, sizeof(*pmx
->regs
),
858 pmx
->backup_regs
= devm_kzalloc(&pdev
->dev
, backup_regs_size
,
860 if (!pmx
->backup_regs
)
863 for (i
= 0; i
< pmx
->nbanks
; i
++) {
864 pmx
->regs
[i
] = devm_platform_ioremap_resource(pdev
, i
);
865 if (IS_ERR(pmx
->regs
[i
]))
866 return PTR_ERR(pmx
->regs
[i
]);
869 pmx
->pctl
= devm_pinctrl_register(&pdev
->dev
, &pmx
->desc
, pmx
);
870 if (IS_ERR(pmx
->pctl
)) {
871 dev_err(&pdev
->dev
, "Couldn't register pinctrl driver\n");
872 return PTR_ERR(pmx
->pctl
);
875 tegra_pinctrl_clear_parked_bits(pmx
);
877 if (pmx
->soc
->ngpios
> 0 && !tegra_pinctrl_gpio_node_has_range(pmx
))
878 pinctrl_add_gpio_range(pmx
->pctl
, &pmx
->gpio_range
);
880 platform_set_drvdata(pdev
, pmx
);
882 dev_dbg(&pdev
->dev
, "Probed Tegra pinctrl driver\n");