|
@@ -583,40 +583,40 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
|
|
|
if (pctldesc->name == NULL)
|
|
|
return NULL;
|
|
|
|
|
|
+ pctldev = kzalloc(sizeof(struct pinctrl_dev), GFP_KERNEL);
|
|
|
+ if (pctldev == NULL)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ /* Initialize pin control device struct */
|
|
|
+ pctldev->owner = pctldesc->owner;
|
|
|
+ pctldev->desc = pctldesc;
|
|
|
+ pctldev->driver_data = driver_data;
|
|
|
+ INIT_RADIX_TREE(&pctldev->pin_desc_tree, GFP_KERNEL);
|
|
|
+ spin_lock_init(&pctldev->pin_desc_tree_lock);
|
|
|
+ INIT_LIST_HEAD(&pctldev->gpio_ranges);
|
|
|
+ mutex_init(&pctldev->gpio_ranges_lock);
|
|
|
+ pctldev->dev = dev;
|
|
|
+
|
|
|
/* If we're implementing pinmuxing, check the ops for sanity */
|
|
|
if (pctldesc->pmxops) {
|
|
|
- ret = pinmux_check_ops(pctldesc->pmxops);
|
|
|
+ ret = pinmux_check_ops(pctldev);
|
|
|
if (ret) {
|
|
|
pr_err("%s pinmux ops lacks necessary functions\n",
|
|
|
pctldesc->name);
|
|
|
- return NULL;
|
|
|
+ goto out_err;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* If we're implementing pinconfig, check the ops for sanity */
|
|
|
if (pctldesc->confops) {
|
|
|
- ret = pinconf_check_ops(pctldesc->confops);
|
|
|
+ ret = pinconf_check_ops(pctldev);
|
|
|
if (ret) {
|
|
|
pr_err("%s pin config ops lacks necessary functions\n",
|
|
|
pctldesc->name);
|
|
|
- return NULL;
|
|
|
+ goto out_err;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- pctldev = kzalloc(sizeof(struct pinctrl_dev), GFP_KERNEL);
|
|
|
- if (pctldev == NULL)
|
|
|
- return NULL;
|
|
|
-
|
|
|
- /* Initialize pin control device struct */
|
|
|
- pctldev->owner = pctldesc->owner;
|
|
|
- pctldev->desc = pctldesc;
|
|
|
- pctldev->driver_data = driver_data;
|
|
|
- INIT_RADIX_TREE(&pctldev->pin_desc_tree, GFP_KERNEL);
|
|
|
- spin_lock_init(&pctldev->pin_desc_tree_lock);
|
|
|
- INIT_LIST_HEAD(&pctldev->gpio_ranges);
|
|
|
- mutex_init(&pctldev->gpio_ranges_lock);
|
|
|
- pctldev->dev = dev;
|
|
|
-
|
|
|
/* Register all the pins */
|
|
|
pr_debug("try to register %d pins on %s...\n",
|
|
|
pctldesc->npins, pctldesc->name);
|