Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v5.0-rc1 58 lines 1.5 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Device property helpers for GPIO chips. 4 * 5 * Copyright (C) 2016, Intel Corporation 6 * Author: Mika Westerberg <mika.westerberg@linux.intel.com> 7 */ 8 9#include <linux/property.h> 10#include <linux/slab.h> 11#include <linux/gpio/consumer.h> 12#include <linux/gpio/driver.h> 13 14#include "gpiolib.h" 15 16/** 17 * devprop_gpiochip_set_names - Set GPIO line names using device properties 18 * @chip: GPIO chip whose lines should be named, if possible 19 * @fwnode: Property Node containing the gpio-line-names property 20 * 21 * Looks for device property "gpio-line-names" and if it exists assigns 22 * GPIO line names for the chip. The memory allocated for the assigned 23 * names belong to the underlying firmware node and should not be released 24 * by the caller. 25 */ 26void devprop_gpiochip_set_names(struct gpio_chip *chip, 27 const struct fwnode_handle *fwnode) 28{ 29 struct gpio_device *gdev = chip->gpiodev; 30 const char **names; 31 int ret, i; 32 int count; 33 34 count = fwnode_property_read_string_array(fwnode, "gpio-line-names", 35 NULL, 0); 36 if (count < 0) 37 return; 38 39 if (count > gdev->ngpio) 40 count = gdev->ngpio; 41 42 names = kcalloc(count, sizeof(*names), GFP_KERNEL); 43 if (!names) 44 return; 45 46 ret = fwnode_property_read_string_array(fwnode, "gpio-line-names", 47 names, count); 48 if (ret < 0) { 49 dev_warn(&gdev->dev, "failed to read GPIO line names\n"); 50 kfree(names); 51 return; 52 } 53 54 for (i = 0; i < count; i++) 55 gdev->descs[i].name = names[i]; 56 57 kfree(names); 58}