for (i = 0; i < num_pins; i++) {
struct pin_desc *pindesc;
- pindesc = radix_tree_lookup(&pctldev->pin_desc_tree,
- pins[i].number);
- if (pindesc) {
- radix_tree_delete(&pctldev->pin_desc_tree,
- pins[i].number);
- if (pindesc->dynamic_name)
- kfree(pindesc->name);
- }
+ pindesc = xa_erase(&pctldev->pin_desc_xa, pins[i].number);
+ if (pindesc && pindesc->dynamic_name)
+ kfree(pindesc->name);
kfree(pindesc);
}
}
pindesc->drv_data = pin->drv_data;
- radix_tree_insert(&pctldev->pin_desc_tree, pin->number, pindesc);
+ xa_store(&pctldev->pin_desc_xa, pin->number, pindesc, GFP_KERNEL);
pr_debug("registered pin %d (%s) on %s\n",
pin->number, pindesc->name, pctldev->desc->name);
return 0;
pctldev->owner = pctldesc->owner;
pctldev->desc = pctldesc;
pctldev->driver_data = driver_data;
- INIT_RADIX_TREE(&pctldev->pin_desc_tree, GFP_KERNEL);
+ xa_init(&pctldev->pin_desc_xa);
#ifdef CONFIG_GENERIC_PINCTRL_GROUPS
xa_init(&pctldev->pin_group_xa);
#endif
* @node: node to include this pin controller in the global pin controller list
* @desc: the pin controller descriptor supplied when initializing this pin
* controller
- * @pin_desc_tree: each pin descriptor for this pin controller is stored in
- * this radix tree
+ * @pin_desc_xa: each pin descriptor for this pin controller is stored in
+ * this array
* @pin_group_xa: optionally each pin group can be stored in this array
* @num_groups: optionally number of groups can be kept here
* @pin_function_xa: optionally each function can be stored in this array
struct pinctrl_dev {
struct list_head node;
struct pinctrl_desc *desc;
- struct radix_tree_root pin_desc_tree;
+ struct xarray pin_desc_xa;
#ifdef CONFIG_GENERIC_PINCTRL_GROUPS
struct xarray pin_group_xa;
unsigned int num_groups;
static inline struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev,
unsigned int pin)
{
- return radix_tree_lookup(&pctldev->pin_desc_tree, pin);
+ return xa_load(&pctldev->pin_desc_xa, pin);
}
extern struct pinctrl_gpio_range *