mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-08 15:04:45 +00:00
gpio: swnode: replace gpiochip_find() with gpio_device_find_by_label()
We're porting all users of gpiochip_find() to using gpio_device_find(). Update the swnode GPIO code. Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
3c9d5431b4
commit
b7b56e64a3
@ -31,22 +31,17 @@ static void swnode_format_propname(const char *con_id, char *propname,
|
||||
strscpy(propname, "gpios", max_size);
|
||||
}
|
||||
|
||||
static int swnode_gpiochip_match_name(struct gpio_chip *chip, void *data)
|
||||
static struct gpio_device *swnode_get_gpio_device(struct fwnode_handle *fwnode)
|
||||
{
|
||||
return !strcmp(chip->label, data);
|
||||
}
|
||||
const struct software_node *gdev_node;
|
||||
struct gpio_device *gdev;
|
||||
|
||||
static struct gpio_chip *swnode_get_chip(struct fwnode_handle *fwnode)
|
||||
{
|
||||
const struct software_node *chip_node;
|
||||
struct gpio_chip *chip;
|
||||
|
||||
chip_node = to_software_node(fwnode);
|
||||
if (!chip_node || !chip_node->name)
|
||||
gdev_node = to_software_node(fwnode);
|
||||
if (!gdev_node || !gdev_node->name)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
chip = gpiochip_find((void *)chip_node->name, swnode_gpiochip_match_name);
|
||||
return chip ?: ERR_PTR(-EPROBE_DEFER);
|
||||
gdev = gpio_device_find_by_label(gdev_node->name);
|
||||
return gdev ?: ERR_PTR(-EPROBE_DEFER);
|
||||
}
|
||||
|
||||
struct gpio_desc *swnode_find_gpio(struct fwnode_handle *fwnode,
|
||||
@ -55,7 +50,6 @@ struct gpio_desc *swnode_find_gpio(struct fwnode_handle *fwnode,
|
||||
{
|
||||
const struct software_node *swnode;
|
||||
struct fwnode_reference_args args;
|
||||
struct gpio_chip *chip;
|
||||
struct gpio_desc *desc;
|
||||
char propname[32]; /* 32 is max size of property name */
|
||||
int error;
|
||||
@ -77,12 +71,17 @@ struct gpio_desc *swnode_find_gpio(struct fwnode_handle *fwnode,
|
||||
return ERR_PTR(error);
|
||||
}
|
||||
|
||||
chip = swnode_get_chip(args.fwnode);
|
||||
struct gpio_device *gdev __free(gpio_device_put) =
|
||||
swnode_get_gpio_device(args.fwnode);
|
||||
fwnode_handle_put(args.fwnode);
|
||||
if (IS_ERR(chip))
|
||||
return ERR_CAST(chip);
|
||||
if (IS_ERR(gdev))
|
||||
return ERR_CAST(gdev);
|
||||
|
||||
desc = gpiochip_get_desc(chip, args.args[0]);
|
||||
/*
|
||||
* FIXME: The GPIO device reference is put at return but the descriptor
|
||||
* is passed on. Find a proper solution.
|
||||
*/
|
||||
desc = gpio_device_get_desc(gdev, args.args[0]);
|
||||
*flags = args.args[1]; /* We expect native GPIO flags */
|
||||
|
||||
pr_debug("%s: parsed '%s' property of node '%pfwP[%d]' - status (%d)\n",
|
||||
|
Loading…
Reference in New Issue
Block a user