Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v5.6-rc4 60 lines 1.6 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#include <linux/export.h> 14 15#include "gpiolib.h" 16 17/** 18 * devprop_gpiochip_set_names - Set GPIO line names using device properties 19 * @chip: GPIO chip whose lines should be named, if possible 20 * @fwnode: Property Node containing the gpio-line-names property 21 * 22 * Looks for device property "gpio-line-names" and if it exists assigns 23 * GPIO line names for the chip. The memory allocated for the assigned 24 * names belong to the underlying firmware node and should not be released 25 * by the caller. 26 */ 27void devprop_gpiochip_set_names(struct gpio_chip *chip, 28 const struct fwnode_handle *fwnode) 29{ 30 struct gpio_device *gdev = chip->gpiodev; 31 const char **names; 32 int ret, i; 33 int count; 34 35 count = fwnode_property_read_string_array(fwnode, "gpio-line-names", 36 NULL, 0); 37 if (count < 0) 38 return; 39 40 if (count > gdev->ngpio) 41 count = gdev->ngpio; 42 43 names = kcalloc(count, sizeof(*names), GFP_KERNEL); 44 if (!names) 45 return; 46 47 ret = fwnode_property_read_string_array(fwnode, "gpio-line-names", 48 names, count); 49 if (ret < 0) { 50 dev_warn(&gdev->dev, "failed to read GPIO line names\n"); 51 kfree(names); 52 return; 53 } 54 55 for (i = 0; i < count; i++) 56 gdev->descs[i].name = names[i]; 57 58 kfree(names); 59} 60EXPORT_SYMBOL_GPL(devprop_gpiochip_set_names);