diff mbox series

[2/5] pinctrl: Add API function pinctrl_gpio_get_direction

Message ID 20180627114904.10890-3-paul@crapouillou.net
State New
Headers show
Series pinctrl_gpio_get_direction & ingenic fixes | expand

Commit Message

Paul Cercueil June 27, 2018, 11:49 a.m. UTC
This function can be used to retrieve the direction (input/output) of a
given GPIO.

It should *ONLY* be used from gpiolib-based GPIO drivers, as part of their
gpio_get_direction() semantics, platforms and individual drivers shall
*NOT* touch pin control GPIO calls.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
 drivers/pinctrl/core.c           | 31 +++++++++++++++++++++++++++++++
 include/linux/pinctrl/consumer.h |  1 +
 2 files changed, 32 insertions(+)

Comments

kernel test robot June 27, 2018, 2:07 p.m. UTC | #1
Hi Paul,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on pinctrl/devel]
[also build test ERROR on v4.18-rc2 next-20180627]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Paul-Cercueil/pinctrl-Add-core-function-pinmux_gpio_get_direction/20180627-201609
base:   https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git devel
config: x86_64-randconfig-x002-201825 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers//pinctrl/core.c: In function 'pinctrl_gpio_get_direction':
>> drivers//pinctrl/core.c:873:8: error: implicit declaration of function 'pinmux_gpio_get_direction'; did you mean 'pinmux_gpio_direction'? [-Werror=implicit-function-declaration]
     ret = pinmux_gpio_get_direction(pctldev, range, pin);
           ^~~~~~~~~~~~~~~~~~~~~~~~~
           pinmux_gpio_direction
   cc1: some warnings being treated as errors

vim +873 drivers//pinctrl/core.c

   849	
   850	/**
   851	 * pinctrl_gpio_get_direction() - Get the direction (input/output) of a GPIO pin
   852	 * @gpio: the GPIO pin number from the GPIO subsystem number space
   853	 *
   854	 * This function should *ONLY* be used from gpiolib-based GPIO drivers,
   855	 * as part of their gpio_get_direction() semantics, platforms and individual
   856	 * drivers shall *NOT* touch pin control GPIO calls.
   857	 */
   858	int pinctrl_gpio_get_direction(unsigned int gpio)
   859	{
   860		struct pinctrl_dev *pctldev;
   861		struct pinctrl_gpio_range *range;
   862		int ret;
   863		int pin;
   864	
   865		ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range);
   866		if (ret)
   867			return ret;
   868	
   869		mutex_lock(&pctldev->mutex);
   870	
   871		/* Convert to the pin controllers number space */
   872		pin = gpio_to_pin(range, gpio);
 > 873		ret = pinmux_gpio_get_direction(pctldev, range, pin);
   874	
   875		mutex_unlock(&pctldev->mutex);
   876	
   877		return ret;
   878	}
   879	EXPORT_SYMBOL_GPL(pinctrl_gpio_get_direction);
   880	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
kernel test robot June 27, 2018, 3:24 p.m. UTC | #2
Hi Paul,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on pinctrl/devel]
[also build test ERROR on v4.18-rc2 next-20180627]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Paul-Cercueil/pinctrl-Add-core-function-pinmux_gpio_get_direction/20180627-201609
base:   https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git devel
config: x86_64-randconfig-s0-06272107 (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers//pinctrl/core.c: In function 'pinctrl_gpio_get_direction':
>> drivers//pinctrl/core.c:873:8: error: implicit declaration of function 'pinmux_gpio_get_direction' [-Werror=implicit-function-declaration]
     ret = pinmux_gpio_get_direction(pctldev, range, pin);
           ^~~~~~~~~~~~~~~~~~~~~~~~~
   Cyclomatic Complexity 5 include/linux/compiler.h:__write_once_size
   Cyclomatic Complexity 1 include/linux/kasan-checks.h:kasan_check_write
   Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:fls64
   Cyclomatic Complexity 1 include/linux/log2.h:__ilog2_u64
   Cyclomatic Complexity 1 include/linux/list.h:INIT_LIST_HEAD
   Cyclomatic Complexity 1 include/linux/list.h:__list_del
   Cyclomatic Complexity 1 include/asm-generic/getorder.h:__get_order
   Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:arch_atomic_set
   Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic_set
   Cyclomatic Complexity 3 include/linux/string.h:kmemdup
   Cyclomatic Complexity 1 include/linux/err.h:ERR_PTR
   Cyclomatic Complexity 1 include/linux/err.h:PTR_ERR
   Cyclomatic Complexity 1 include/linux/spinlock.h:spinlock_check
   Cyclomatic Complexity 1 include/linux/refcount.h:refcount_set
   Cyclomatic Complexity 1 include/linux/kref.h:kref_init
   Cyclomatic Complexity 1 include/linux/kobject.h:kobject_name
   Cyclomatic Complexity 2 include/linux/device.h:dev_name
   Cyclomatic Complexity 28 include/linux/slab.h:kmalloc_index
   Cyclomatic Complexity 68 include/linux/slab.h:kmalloc_large
   Cyclomatic Complexity 5 include/linux/slab.h:kmalloc
   Cyclomatic Complexity 1 include/linux/slab.h:kzalloc
   Cyclomatic Complexity 1 drivers//pinctrl/devicetree.h:pinctrl_dt_to_map
   Cyclomatic Complexity 1 drivers//pinctrl/devicetree.h:pinctrl_dt_free_maps
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_check_ops
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_validate_map
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_request_gpio
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_free_gpio
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_gpio_direction
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_map_to_setting
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_free_setting
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_enable_setting
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_disable_setting
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_show_map
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_show_setting
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_init_device_debugfs
   Cyclomatic Complexity 1 drivers//pinctrl/pinmux.h:pinmux_generic_free_functions
   Cyclomatic Complexity 2 drivers//pinctrl/core.c:gpio_to_pin
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_generic_free_groups
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:devm_pinctrl_match
   Cyclomatic Complexity 2 drivers//pinctrl/core.c:map_type
   Cyclomatic Complexity 4 drivers//pinctrl/core.c:pinctrl_check_ops
   Cyclomatic Complexity 1 drivers//pinctrl/core.h:pin_desc_get
   Cyclomatic Complexity 2 include/linux/list.h:__list_add
   Cyclomatic Complexity 1 include/linux/list.h:list_add_tail
   Cyclomatic Complexity 2 drivers//pinctrl/core.c:create_state
   Cyclomatic Complexity 2 include/linux/list.h:__list_del_entry
   Cyclomatic Complexity 1 include/linux/list.h:list_del
   Cyclomatic Complexity 6 drivers//pinctrl/core.c:pinctrl_match_gpio_range
   Cyclomatic Complexity 5 drivers//pinctrl/core.c:pinctrl_get_device_gpio_range
   Cyclomatic Complexity 2 drivers//pinctrl/core.c:pinctrl_gpio_direction
   Cyclomatic Complexity 1 include/linux/err.h:IS_ERR
   Cyclomatic Complexity 3 include/linux/err.h:IS_ERR_OR_NULL
   Cyclomatic Complexity 5 drivers//pinctrl/core.c:devm_pinctrl_dev_match
   Cyclomatic Complexity 1 include/asm-generic/gpio.h:gpio_to_chip
   Cyclomatic Complexity 11 drivers//pinctrl/core.c:pinctrl_ready_for_gpio_range
   Cyclomatic Complexity 5 drivers//pinctrl/core.c:find_pinctrl
   Cyclomatic Complexity 1 include/linux/kref.h:kref_get
   Cyclomatic Complexity 5 drivers//pinctrl/core.c:find_state
   Cyclomatic Complexity 4 drivers//pinctrl/core.c:pinctrl_free_setting
   Cyclomatic Complexity 10 drivers//pinctrl/core.c:pinctrl_free
   Cyclomatic Complexity 2 drivers//pinctrl/core.c:pinctrl_release
   Cyclomatic Complexity 2 include/linux/kref.h:kref_put
   Cyclomatic Complexity 3 drivers//pinctrl/core.c:pinctrl_init_debugfs
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_init
   Cyclomatic Complexity 8 drivers//pinctrl/core.c:pinctrl_init_device_debugfs
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_gpioranges_open
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_groups_open
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_pins_open
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_open
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_maps_open
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_devices_open
   Cyclomatic Complexity 6 drivers//pinctrl/core.c:pinctrl_gpioranges_show
   Cyclomatic Complexity 4 drivers//pinctrl/core.c:pinctrl_pins_show
   Cyclomatic Complexity 1 include/linux/radix-tree.h:radix_tree_insert
   Cyclomatic Complexity 5 drivers//pinctrl/core.c:pinctrl_register_one_pin
   Cyclomatic Complexity 3 drivers//pinctrl/core.c:pinctrl_register_pins
   Cyclomatic Complexity 4 drivers//pinctrl/core.c:pinctrl_free_pindescs
   Cyclomatic Complexity 10 drivers//pinctrl/core.c:pinctrl_init_controller
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_remove_device_debugfs
   Cyclomatic Complexity 8 drivers//pinctrl/core.c:pinctrl_maps_show
   Cyclomatic Complexity 6 drivers//pinctrl/core.c:pinctrl_devices_show
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_provide_dummies
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_dev_get_name
   Cyclomatic Complexity 13 drivers//pinctrl/core.c:pinctrl_show
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_dev_get_devname
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_dev_get_drvdata
   Cyclomatic Complexity 6 drivers//pinctrl/core.c:get_pinctrl_dev_from_devname
   Cyclomatic Complexity 11 drivers//pinctrl/core.c:add_setting
   Cyclomatic Complexity 12 drivers//pinctrl/core.c:create_pinctrl
   Cyclomatic Complexity 5 drivers//pinctrl/core.c:get_pinctrl_dev_from_of_node
   Cyclomatic Complexity 4 drivers//pinctrl/core.c:pin_get_from_name
   Cyclomatic Complexity 2 drivers//pinctrl/core.c:pin_get_name
   Cyclomatic Complexity 7 drivers//pinctrl/core.c:pinctrl_groups_show
   Cyclomatic Complexity 2 drivers//pinctrl/core.c:pin_is_valid
   Cyclomatic Complexity 1 drivers//pinctrl/core.c:pinctrl_add_gpio_range
   Cyclomatic Complexity 2 drivers//pinctrl/core.c:pinctrl_add_gpio_ranges
   Cyclomatic Complexity 2 drivers//pinctrl/core.c:pinctrl_find_and_add_gpio_range
   Cyclomatic Complexity 9 drivers//pinctrl/core.c:pinctrl_find_gpio_range_from_pin_nolock

vim +/pinmux_gpio_get_direction +873 drivers//pinctrl/core.c

   849	
   850	/**
   851	 * pinctrl_gpio_get_direction() - Get the direction (input/output) of a GPIO pin
   852	 * @gpio: the GPIO pin number from the GPIO subsystem number space
   853	 *
   854	 * This function should *ONLY* be used from gpiolib-based GPIO drivers,
   855	 * as part of their gpio_get_direction() semantics, platforms and individual
   856	 * drivers shall *NOT* touch pin control GPIO calls.
   857	 */
   858	int pinctrl_gpio_get_direction(unsigned int gpio)
   859	{
   860		struct pinctrl_dev *pctldev;
   861		struct pinctrl_gpio_range *range;
   862		int ret;
   863		int pin;
   864	
   865		ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range);
   866		if (ret)
   867			return ret;
   868	
   869		mutex_lock(&pctldev->mutex);
   870	
   871		/* Convert to the pin controllers number space */
   872		pin = gpio_to_pin(range, gpio);
 > 873		ret = pinmux_gpio_get_direction(pctldev, range, pin);
   874	
   875		mutex_unlock(&pctldev->mutex);
   876	
   877		return ret;
   878	}
   879	EXPORT_SYMBOL_GPL(pinctrl_gpio_get_direction);
   880	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox series

Patch

diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
index e5a303002021..7fee8347fb51 100644
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -849,6 +849,37 @@  int pinctrl_gpio_direction_output(unsigned gpio)
 EXPORT_SYMBOL_GPL(pinctrl_gpio_direction_output);
 
 /**
+ * pinctrl_gpio_get_direction() - Get the direction (input/output) of a GPIO pin
+ * @gpio: the GPIO pin number from the GPIO subsystem number space
+ *
+ * This function should *ONLY* be used from gpiolib-based GPIO drivers,
+ * as part of their gpio_get_direction() semantics, platforms and individual
+ * drivers shall *NOT* touch pin control GPIO calls.
+ */
+int pinctrl_gpio_get_direction(unsigned int gpio)
+{
+	struct pinctrl_dev *pctldev;
+	struct pinctrl_gpio_range *range;
+	int ret;
+	int pin;
+
+	ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range);
+	if (ret)
+		return ret;
+
+	mutex_lock(&pctldev->mutex);
+
+	/* Convert to the pin controllers number space */
+	pin = gpio_to_pin(range, gpio);
+	ret = pinmux_gpio_get_direction(pctldev, range, pin);
+
+	mutex_unlock(&pctldev->mutex);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(pinctrl_gpio_get_direction);
+
+/**
  * pinctrl_gpio_set_config() - Apply config to given GPIO pin
  * @gpio: the GPIO pin number from the GPIO subsystem number space
  * @config: the configuration to apply to the GPIO
diff --git a/include/linux/pinctrl/consumer.h b/include/linux/pinctrl/consumer.h
index 0412cc9833e9..5f945c329f1c 100644
--- a/include/linux/pinctrl/consumer.h
+++ b/include/linux/pinctrl/consumer.h
@@ -29,6 +29,7 @@  extern int pinctrl_gpio_request(unsigned gpio);
 extern void pinctrl_gpio_free(unsigned gpio);
 extern int pinctrl_gpio_direction_input(unsigned gpio);
 extern int pinctrl_gpio_direction_output(unsigned gpio);
+extern int pinctrl_gpio_get_direction(unsigned gpio);
 extern int pinctrl_gpio_set_config(unsigned gpio, unsigned long config);
 
 extern struct pinctrl * __must_check pinctrl_get(struct device *dev);