intel-gpio for v6.4-1
* Remove some of the legacy APIs that are not used anymore * Clean up headers in the GPIO library and drivers The following is an automated git shortlog grouped by driver: aggregator: - Add missing header(s) ARM: - s3c64xx: Use the right include - orion/gpio: Use the right include gpiolib: - Clean up headers - Group forward declarations in consumer.h - Deduplicate forward declarations in consumer.h - Drop unused forward declaration from driver.h - split of_mm_gpio_chip out of linux/of_gpio.h - split linux/gpio/driver.h out of linux/gpio.h - remove legacy gpio_export() - remove gpio_set_debounce() - remove asm-generic/gpio.h - coldfire: remove custom asm/gpio.h - remove empty asm/gpio.h files - Make the legacy <linux/gpio.h> consumer-only hte: - tegra-194: Use proper includes reg: - Add missing header(s) regmap: - Add missing header(s) -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEqaflIX74DDDzMJJtb7wzTHR8rCgFAmQHHfQACgkQb7wzTHR8 rCim7A//Rar7oFB82nHriufTxWV0CjQzu2xJw3p0liIyA7iWydEVpparfM7Mqv0z 3Z/03vG1H12M8wQ4jFyPfxcT1UPLaQSRCBl7omEWupFHvyUEIz+/Xxt9BY9RAKno ZK2Ty0YR00MlXZOPosd+Hv9jwWJMw2mrwQy4mStn8jCCeblF675ad6dfzVuPlsaY kKdZslUT48NcCQZolQaz6V0ygy6O2JUabkuh9uJSYG0/ZN4UZzCYtvhfcvXgVTNJ IQz2Fl4g1mR/r1JU8upVW0WR78LEKIcyUHD+ARD4oCXPdjSTp8k25UExyn121k7L qxSAIlJKEg0s0/0hwVOsuyhnYrJXXgivkOGXbnDp27Su8pGejHS0WGn4LMxTa2SV A1OaxrfxAy57lBv3j4bfEWTxQB1Nxo22EA2ejm5Jd0JxB6cQ2NlJqlwE+StYYSkg 8sFp/rim/mcNO3r3BLa/WliOp+TWtVFAsVCSf9uxVQmtUBnoHte+GGiyVZZuSNyS fS8F5xURJQwempT1T0LUr6Ex5s4okJc9D+wEpatK9IpSszBgFOdb/U335+noRChF pLkQsAOZa5GTGQbHYkAUBJY90gd8KN+63sJNBgcpo1HxifCrSfjrSw8T3tJhUAH/ ppI1R3KLhFQzl8jB/3EDN+eNWvtMPqAc19JEsfOuG9ytGBj/wX0= =DBx5 -----END PGP SIGNATURE----- Merge tag 'intel-gpio-v6.4-1' of git://git.kernel.org/pub/scm/linux/kernel/git/andy/linux-gpio-intel into gpio/for-next intel-gpio for v6.4-1 * Remove some of the legacy APIs that are not used anymore * Clean up headers in the GPIO library and drivers The following is an automated git shortlog grouped by driver: aggregator: - Add missing header(s) ARM: - s3c64xx: Use the right include - orion/gpio: Use the right include gpiolib: - Clean up headers - Group forward declarations in consumer.h - Deduplicate forward declarations in consumer.h - Drop unused forward declaration from driver.h - split of_mm_gpio_chip out of linux/of_gpio.h - split linux/gpio/driver.h out of linux/gpio.h - remove legacy gpio_export() - remove gpio_set_debounce() - remove asm-generic/gpio.h - coldfire: remove custom asm/gpio.h - remove empty asm/gpio.h files - Make the legacy <linux/gpio.h> consumer-only hte: - tegra-194: Use proper includes reg: - Add missing header(s) regmap: - Add missing header(s)
This commit is contained in:
commit
aea92b54ee
@ -145,7 +145,7 @@ requested using gpio_request()::
|
||||
/* export the GPIO to userspace */
|
||||
int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
|
||||
|
||||
/* reverse gpio_export() */
|
||||
/* reverse gpiod_export() */
|
||||
void gpiod_unexport(struct gpio_desc *desc);
|
||||
|
||||
/* create a sysfs link to an exported GPIO node */
|
||||
|
@ -238,8 +238,6 @@ setup or driver probe/teardown code, so this is an easy constraint.)::
|
||||
## gpio_free_array()
|
||||
|
||||
gpio_free()
|
||||
gpio_set_debounce()
|
||||
|
||||
|
||||
|
||||
Claiming and Releasing GPIOs
|
||||
@ -716,27 +714,6 @@ gpiochip nodes (possibly in conjunction with schematics) to determine
|
||||
the correct GPIO number to use for a given signal.
|
||||
|
||||
|
||||
Exporting from Kernel code
|
||||
--------------------------
|
||||
Kernel code can explicitly manage exports of GPIOs which have already been
|
||||
requested using gpio_request()::
|
||||
|
||||
/* export the GPIO to userspace */
|
||||
int gpio_export(unsigned gpio, bool direction_may_change);
|
||||
|
||||
/* reverse gpio_export() */
|
||||
void gpio_unexport();
|
||||
|
||||
After a kernel driver requests a GPIO, it may only be made available in
|
||||
the sysfs interface by gpio_export(). The driver can control whether the
|
||||
signal direction may change. This helps drivers prevent userspace code
|
||||
from accidentally clobbering important system state.
|
||||
|
||||
This explicit exporting can help with debugging (by making some kinds
|
||||
of experiments easier), or can provide an always-there interface that's
|
||||
suitable for documenting as part of a board support package.
|
||||
|
||||
|
||||
API Reference
|
||||
=============
|
||||
|
||||
|
@ -219,7 +219,6 @@ GPIO 值的命令需要等待其信息排到队首才发送命令,再获得其
|
||||
## gpio_free_array()
|
||||
|
||||
gpio_free()
|
||||
gpio_set_debounce()
|
||||
|
||||
|
||||
|
||||
@ -654,25 +653,6 @@ GPIO 控制器的路径类似 /sys/class/gpio/gpiochip42/ (对于从#42 GPIO
|
||||
确定给定信号所用的 GPIO 编号。
|
||||
|
||||
|
||||
从内核代码中导出
|
||||
----------------
|
||||
|
||||
内核代码可以明确地管理那些已通过 gpio_request()申请的 GPIO 的导出::
|
||||
|
||||
/* 导出 GPIO 到用户空间 */
|
||||
int gpio_export(unsigned gpio, bool direction_may_change);
|
||||
|
||||
/* gpio_export()的逆操作 */
|
||||
void gpio_unexport();
|
||||
|
||||
在一个内核驱动申请一个 GPIO 之后,它可以通过 gpio_export()使其在 sysfs
|
||||
接口中可见。该驱动可以控制信号方向是否可修改。这有助于防止用户空间代码无意间
|
||||
破坏重要的系统状态。
|
||||
|
||||
这个明确的导出有助于(通过使某些实验更容易来)调试,也可以提供一个始终存在的接口,
|
||||
与文档配合作为板级支持包的一部分。
|
||||
|
||||
|
||||
API参考
|
||||
=======
|
||||
|
||||
|
@ -226,7 +226,6 @@ GPIO 值的命令需要等待其信息排到隊首才發送命令,再獲得其
|
||||
## gpio_free_array()
|
||||
|
||||
gpio_free()
|
||||
gpio_set_debounce()
|
||||
|
||||
|
||||
|
||||
@ -615,21 +614,3 @@ GPIO 控制器的路徑類似 /sys/class/gpio/gpiochip42/ (對於從#42 GPIO
|
||||
固定的,例如在擴展卡上的 GPIO會根據所使用的主板或所在堆疊架構中其他的板子而
|
||||
有所不同。在這種情況下,你可能需要使用 gpiochip 節點(儘可能地結合電路圖)來
|
||||
確定給定信號所用的 GPIO 編號。
|
||||
|
||||
|
||||
從內核代碼中導出
|
||||
-------------
|
||||
內核代碼可以明確地管理那些已通過 gpio_request()申請的 GPIO 的導出:
|
||||
|
||||
/* 導出 GPIO 到用戶空間 */
|
||||
int gpio_export(unsigned gpio, bool direction_may_change);
|
||||
|
||||
/* gpio_export()的逆操作 */
|
||||
void gpio_unexport();
|
||||
|
||||
在一個內核驅動申請一個 GPIO 之後,它可以通過 gpio_export()使其在 sysfs
|
||||
接口中可見。該驅動可以控制信號方向是否可修改。這有助於防止用戶空間代碼無意間
|
||||
破壞重要的系統狀態。
|
||||
|
||||
這個明確的導出有助於(通過使某些實驗更容易來)調試,也可以提供一個始終存在的接口,
|
||||
與文檔配合作爲板級支持包的一部分。
|
||||
|
@ -8752,7 +8752,6 @@ F: Documentation/admin-guide/gpio/
|
||||
F: Documentation/devicetree/bindings/gpio/
|
||||
F: Documentation/driver-api/gpio/
|
||||
F: drivers/gpio/
|
||||
F: include/asm-generic/gpio.h
|
||||
F: include/dt-bindings/gpio/
|
||||
F: include/linux/gpio.h
|
||||
F: include/linux/gpio/
|
||||
|
@ -24,7 +24,6 @@ config ARM
|
||||
select ARCH_HAS_SYNC_DMA_FOR_CPU
|
||||
select ARCH_HAS_TEARDOWN_DMA_OPS if MMU
|
||||
select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST
|
||||
select ARCH_HAVE_CUSTOM_GPIO_H
|
||||
select ARCH_HAVE_NMI_SAFE_CMPXCHG if CPU_V7 || CPU_V7M || CPU_V6K
|
||||
select ARCH_HAS_GCOV_PROFILE_ALL
|
||||
select ARCH_KEEP_MEMBLOCK
|
||||
|
@ -1,21 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _ARCH_ARM_GPIO_H
|
||||
#define _ARCH_ARM_GPIO_H
|
||||
|
||||
#include <asm-generic/gpio.h>
|
||||
|
||||
/* The trivial gpiolib dispatchers */
|
||||
#define gpio_get_value __gpio_get_value
|
||||
#define gpio_set_value __gpio_set_value
|
||||
#define gpio_cansleep __gpio_cansleep
|
||||
|
||||
/*
|
||||
* Provide a default gpio_to_irq() which should satisfy every case.
|
||||
* However, some platforms want to do this differently, so allow them
|
||||
* to override it.
|
||||
*/
|
||||
#ifndef gpio_to_irq
|
||||
#define gpio_to_irq __gpio_to_irq
|
||||
#endif
|
||||
|
||||
#endif /* _ARCH_ARM_GPIO_H */
|
@ -41,6 +41,7 @@
|
||||
#include <linux/sched.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/irqdomain.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/exception.h>
|
||||
|
@ -6,6 +6,7 @@
|
||||
*/
|
||||
#include <linux/clk.h>
|
||||
#include <linux/davinci_emac.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
@ -108,7 +109,7 @@ static int omap3_sbc_t3730_twl_callback(struct device *dev,
|
||||
if (res)
|
||||
return res;
|
||||
|
||||
gpio_export(gpio, 0);
|
||||
gpiod_export(gpio_to_desc(gpio), 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -123,7 +124,7 @@ static void __init omap3_sbc_t3x_usb_hub_init(int gpio, char *hub_name)
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_export(gpio, 0);
|
||||
gpiod_export(gpio_to_desc(gpio), 0);
|
||||
|
||||
udelay(10);
|
||||
gpio_set_value(gpio, 1);
|
||||
@ -200,8 +201,8 @@ static void __init omap3_sbc_t3517_wifi_init(void)
|
||||
return;
|
||||
}
|
||||
|
||||
gpio_export(cm_t3517_wlan_gpios[0].gpio, 0);
|
||||
gpio_export(cm_t3517_wlan_gpios[1].gpio, 0);
|
||||
gpiod_export(gpio_to_desc(cm_t3517_wlan_gpios[0].gpio), 0);
|
||||
gpiod_export(gpio_to_desc(cm_t3517_wlan_gpios[1].gpio), 0);
|
||||
|
||||
msleep(100);
|
||||
gpio_set_value(cm_t3517_wlan_gpios[1].gpio, 0);
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/irq.h>
|
||||
|
@ -21,13 +21,13 @@
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/serial_s3c.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/reboot.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/clk/samsung.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/irqchip/arm-vic.h>
|
||||
#include <clocksource/samsung_pwm.h>
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/gpio-reg.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
|
@ -18,7 +18,8 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_irq.h>
|
||||
@ -312,7 +313,7 @@ int orion_gpio_led_blink_set(struct gpio_desc *desc, int state,
|
||||
case GPIO_LED_NO_BLINK_LOW:
|
||||
case GPIO_LED_NO_BLINK_HIGH:
|
||||
orion_gpio_set_blink(gpio, 0);
|
||||
gpio_set_value(gpio, state);
|
||||
gpiod_set_raw_value(desc, state);
|
||||
break;
|
||||
case GPIO_LED_BLINK:
|
||||
orion_gpio_set_blink(gpio, 1);
|
||||
|
@ -24,7 +24,6 @@ config M68KCLASSIC
|
||||
|
||||
config COLDFIRE
|
||||
bool "Coldfire CPU family support"
|
||||
select ARCH_HAVE_CUSTOM_GPIO_H
|
||||
select CPU_HAS_NO_BITFIELDS
|
||||
select CPU_HAS_NO_CAS
|
||||
select CPU_HAS_NO_MULDIV64
|
||||
|
@ -1,95 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Coldfire generic GPIO support
|
||||
*
|
||||
* (C) Copyright 2009, Steven King <sfking@fdwdc.com>
|
||||
*/
|
||||
|
||||
#ifndef coldfire_gpio_h
|
||||
#define coldfire_gpio_h
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <asm/coldfire.h>
|
||||
#include <asm/mcfsim.h>
|
||||
#include <asm/mcfgpio.h>
|
||||
/*
|
||||
* The Generic GPIO functions
|
||||
*
|
||||
* If the gpio is a compile time constant and is one of the Coldfire gpios,
|
||||
* use the inline version, otherwise dispatch thru gpiolib.
|
||||
*/
|
||||
|
||||
static inline int gpio_get_value(unsigned gpio)
|
||||
{
|
||||
if (__builtin_constant_p(gpio) && gpio < MCFGPIO_PIN_MAX)
|
||||
return mcfgpio_read(__mcfgpio_ppdr(gpio)) & mcfgpio_bit(gpio);
|
||||
else
|
||||
return __gpio_get_value(gpio);
|
||||
}
|
||||
|
||||
static inline void gpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
if (__builtin_constant_p(gpio) && gpio < MCFGPIO_PIN_MAX) {
|
||||
if (gpio < MCFGPIO_SCR_START) {
|
||||
unsigned long flags;
|
||||
MCFGPIO_PORTTYPE data;
|
||||
|
||||
local_irq_save(flags);
|
||||
data = mcfgpio_read(__mcfgpio_podr(gpio));
|
||||
if (value)
|
||||
data |= mcfgpio_bit(gpio);
|
||||
else
|
||||
data &= ~mcfgpio_bit(gpio);
|
||||
mcfgpio_write(data, __mcfgpio_podr(gpio));
|
||||
local_irq_restore(flags);
|
||||
} else {
|
||||
if (value)
|
||||
mcfgpio_write(mcfgpio_bit(gpio),
|
||||
MCFGPIO_SETR_PORT(gpio));
|
||||
else
|
||||
mcfgpio_write(~mcfgpio_bit(gpio),
|
||||
MCFGPIO_CLRR_PORT(gpio));
|
||||
}
|
||||
} else
|
||||
__gpio_set_value(gpio, value);
|
||||
}
|
||||
|
||||
static inline int gpio_to_irq(unsigned gpio)
|
||||
{
|
||||
#if defined(MCFGPIO_IRQ_MIN)
|
||||
if ((gpio >= MCFGPIO_IRQ_MIN) && (gpio < MCFGPIO_IRQ_MAX))
|
||||
#else
|
||||
if (gpio < MCFGPIO_IRQ_MAX)
|
||||
#endif
|
||||
return gpio + MCFGPIO_IRQ_VECBASE;
|
||||
else
|
||||
return __gpio_to_irq(gpio);
|
||||
}
|
||||
|
||||
static inline int gpio_cansleep(unsigned gpio)
|
||||
{
|
||||
return gpio < MCFGPIO_PIN_MAX ? 0 : __gpio_cansleep(gpio);
|
||||
}
|
||||
|
||||
#ifndef CONFIG_GPIOLIB
|
||||
static inline int gpio_request_one(unsigned gpio, unsigned long flags, const char *label)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = gpio_request(gpio, label);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (flags & GPIOF_DIR_IN)
|
||||
err = gpio_direction_input(gpio);
|
||||
else
|
||||
err = gpio_direction_output(gpio,
|
||||
(flags & GPIOF_INIT_HIGH) ? 1 : 0);
|
||||
|
||||
if (err)
|
||||
gpio_free(gpio);
|
||||
|
||||
return err;
|
||||
}
|
||||
#endif /* !CONFIG_GPIOLIB */
|
||||
#endif
|
@ -9,7 +9,7 @@
|
||||
#define mcfgpio_h
|
||||
|
||||
#ifdef CONFIG_GPIOLIB
|
||||
#include <asm-generic/gpio.h>
|
||||
#include <linux/gpio.h>
|
||||
#else
|
||||
|
||||
int __mcfgpio_get_value(unsigned gpio);
|
||||
|
@ -230,6 +230,7 @@ config PPC4xx_GPIO
|
||||
bool "PPC4xx GPIO support"
|
||||
depends on 44x
|
||||
select GPIOLIB
|
||||
select OF_GPIO_MM_GPIOCHIP
|
||||
help
|
||||
Enable gpiolib support for ppc440 based boards
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/gpio/legacy-of-mm-gpiochip.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/slab.h>
|
||||
|
@ -101,6 +101,7 @@ comment "Generic MPC8xx Options"
|
||||
config 8xx_GPIO
|
||||
bool "GPIO API Support"
|
||||
select GPIOLIB
|
||||
select OF_GPIO_MM_GPIOCHIP
|
||||
help
|
||||
Saying Y here will cause the ports on an MPC8xx processor to be used
|
||||
with the GPIO API. If you say N here, the kernel needs less memory.
|
||||
|
@ -44,7 +44,7 @@
|
||||
#include <asm/fs_pd.h>
|
||||
|
||||
#ifdef CONFIG_8xx_GPIO
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/gpio/legacy-of-mm-gpiochip.h>
|
||||
#endif
|
||||
|
||||
#define CPM_MAP_SIZE (0x4000)
|
||||
|
@ -244,6 +244,7 @@ config QE_GPIO
|
||||
bool "QE GPIO support"
|
||||
depends on QUICC_ENGINE
|
||||
select GPIOLIB
|
||||
select OF_GPIO_MM_GPIOCHIP
|
||||
help
|
||||
Say Y here if you're going to use hardware that connects to the
|
||||
QE GPIOs.
|
||||
@ -254,6 +255,7 @@ config CPM2
|
||||
select CPM
|
||||
select HAVE_PCI
|
||||
select GPIOLIB
|
||||
select OF_GPIO_MM_GPIOCHIP
|
||||
help
|
||||
The CPM2 (Communications Processor Module) is a coprocessor on
|
||||
embedded CPUs made by Freescale. Selecting this option means that
|
||||
|
@ -31,7 +31,7 @@
|
||||
#include <mm/mmu_decl.h>
|
||||
|
||||
#if defined(CONFIG_CPM2) || defined(CONFIG_8xx_GPIO)
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/gpio/legacy-of-mm-gpiochip.h>
|
||||
#endif
|
||||
|
||||
static int __init cpm_init(void)
|
||||
|
@ -4,7 +4,6 @@ config SUPERH
|
||||
select ARCH_32BIT_OFF_T
|
||||
select ARCH_ENABLE_MEMORY_HOTPLUG if SPARSEMEM && MMU
|
||||
select ARCH_ENABLE_MEMORY_HOTREMOVE if SPARSEMEM && MMU
|
||||
select ARCH_HAVE_CUSTOM_GPIO_H
|
||||
select ARCH_HAVE_NMI_SAFE_CMPXCHG if (GUSA_RB || CPU_SH4A)
|
||||
select ARCH_HAS_BINFMT_FLAT if !MMU
|
||||
select ARCH_HAS_CURRENT_STACK_POINTER
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <linux/sh_intc.h>
|
||||
#include <mach/magicpanelr2.h>
|
||||
#include <asm/heartbeat.h>
|
||||
#include <cpu/gpio.h>
|
||||
#include <cpu/sh7720.h>
|
||||
|
||||
/* Dummy supplies, where voltage doesn't matter */
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/init.h>
|
||||
@ -411,16 +412,16 @@ static int __init ap325rxa_devices_setup(void)
|
||||
/* LD3 and LD4 LEDs */
|
||||
gpio_request(GPIO_PTX5, NULL); /* RUN */
|
||||
gpio_direction_output(GPIO_PTX5, 1);
|
||||
gpio_export(GPIO_PTX5, 0);
|
||||
gpiod_export(gpio_to_desc(GPIO_PTX5), 0);
|
||||
|
||||
gpio_request(GPIO_PTX4, NULL); /* INDICATOR */
|
||||
gpio_direction_output(GPIO_PTX4, 0);
|
||||
gpio_export(GPIO_PTX4, 0);
|
||||
gpiod_export(gpio_to_desc(GPIO_PTX4), 0);
|
||||
|
||||
/* SW1 input */
|
||||
gpio_request(GPIO_PTF7, NULL); /* MODE */
|
||||
gpio_direction_input(GPIO_PTF7);
|
||||
gpio_export(GPIO_PTF7, 0);
|
||||
gpiod_export(gpio_to_desc(GPIO_PTF7), 0);
|
||||
|
||||
/* LCDC */
|
||||
gpio_request(GPIO_FN_LCDD15, NULL);
|
||||
|
@ -1,45 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0
|
||||
*
|
||||
* include/asm-sh/gpio.h
|
||||
*
|
||||
* Generic GPIO API and pinmux table support for SuperH.
|
||||
*
|
||||
* Copyright (c) 2008 Magnus Damm
|
||||
*/
|
||||
#ifndef __ASM_SH_GPIO_H
|
||||
#define __ASM_SH_GPIO_H
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/errno.h>
|
||||
|
||||
#if defined(CONFIG_CPU_SH3)
|
||||
#include <cpu/gpio.h>
|
||||
#endif
|
||||
|
||||
#include <asm-generic/gpio.h>
|
||||
|
||||
#ifdef CONFIG_GPIOLIB
|
||||
|
||||
static inline int gpio_get_value(unsigned gpio)
|
||||
{
|
||||
return __gpio_get_value(gpio);
|
||||
}
|
||||
|
||||
static inline void gpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
__gpio_set_value(gpio, value);
|
||||
}
|
||||
|
||||
static inline int gpio_cansleep(unsigned gpio)
|
||||
{
|
||||
return __gpio_cansleep(gpio);
|
||||
}
|
||||
|
||||
static inline int gpio_to_irq(unsigned gpio)
|
||||
{
|
||||
return __gpio_to_irq(gpio);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_GPIOLIB */
|
||||
|
||||
#endif /* __ASM_SH_GPIO_H */
|
@ -3,14 +3,6 @@
|
||||
# GPIO infrastructure and drivers
|
||||
#
|
||||
|
||||
config ARCH_HAVE_CUSTOM_GPIO_H
|
||||
bool
|
||||
help
|
||||
Selecting this config option from the architecture Kconfig allows
|
||||
the architecture to provide a custom asm/gpio.h implementation
|
||||
overriding the default implementations. New uses of this are
|
||||
strongly discouraged.
|
||||
|
||||
menuconfig GPIOLIB
|
||||
bool "GPIO Support"
|
||||
help
|
||||
@ -47,6 +39,14 @@ config GPIOLIB_IRQCHIP
|
||||
select IRQ_DOMAIN
|
||||
bool
|
||||
|
||||
config OF_GPIO_MM_GPIOCHIP
|
||||
bool
|
||||
help
|
||||
This adds support for the legacy 'struct of_mm_gpio_chip' interface
|
||||
from PowerPC. Existing drivers using this interface need to select
|
||||
this symbol, but new drivers should use the generic gpio-regmap
|
||||
infrastructure instead.
|
||||
|
||||
config DEBUG_GPIO
|
||||
bool "Debug GPIO calls"
|
||||
depends on DEBUG_KERNEL
|
||||
@ -139,6 +139,7 @@ config GPIO_ALTERA
|
||||
tristate "Altera GPIO"
|
||||
depends on OF_GPIO
|
||||
select GPIOLIB_IRQCHIP
|
||||
select OF_GPIO_MM_GPIOCHIP
|
||||
help
|
||||
Say Y or M here to build support for the Altera PIO device.
|
||||
|
||||
@ -423,6 +424,7 @@ config GPIO_MENZ127
|
||||
config GPIO_MM_LANTIQ
|
||||
bool "Lantiq Memory mapped GPIOs"
|
||||
depends on LANTIQ && SOC_XWAY
|
||||
select OF_GPIO_MM_GPIOCHIP
|
||||
help
|
||||
This enables support for memory mapped GPIOs on the External Bus Unit
|
||||
(EBU) found on Lantiq SoCs. The GPIOs are output only as they are
|
||||
@ -431,6 +433,7 @@ config GPIO_MM_LANTIQ
|
||||
config GPIO_MPC5200
|
||||
def_bool y
|
||||
depends on PPC_MPC52xx
|
||||
select OF_GPIO_MM_GPIOCHIP
|
||||
|
||||
config GPIO_MPC8XXX
|
||||
bool "MPC512x/MPC8xxx/QorIQ GPIO support"
|
||||
|
@ -59,11 +59,6 @@ the device tree back-end. It is legacy and should not be used in new code.
|
||||
|
||||
Work items:
|
||||
|
||||
- Get rid of struct of_mm_gpio_chip altogether: use the generic MMIO
|
||||
GPIO for all current users (see below). Delete struct of_mm_gpio_chip,
|
||||
to_of_mm_gpio_chip(), of_mm_gpiochip_add_data(), of_mm_gpiochip_remove()
|
||||
from the kernel.
|
||||
|
||||
- Change all consumer drivers that #include <linux/of_gpio.h> to
|
||||
#include <linux/gpio/consumer.h> and stop doing custom parsing of the
|
||||
GPIO lines from the device tree. This can be tricky and often ivolves
|
||||
@ -81,6 +76,16 @@ Work items:
|
||||
uses <linux/gpio/consumer.h> or <linux/gpio/driver.h> instead.
|
||||
|
||||
|
||||
Get rid of <linux/gpio/legacy-of-mm-gpiochip.h>
|
||||
|
||||
Work items:
|
||||
|
||||
- Get rid of struct of_mm_gpio_chip altogether: use the generic MMIO
|
||||
GPIO for all current users (see below). Delete struct of_mm_gpio_chip,
|
||||
to_of_mm_gpio_chip(), of_mm_gpiochip_add_data(), of_mm_gpiochip_remove(),
|
||||
CONFIG_OF_GPIO_MM_GPIOCHIP from the kernel.
|
||||
|
||||
|
||||
Get rid of <linux/gpio.h>
|
||||
|
||||
This legacy header is a one stop shop for anything GPIO is closely tied
|
||||
|
@ -10,19 +10,20 @@
|
||||
#include <linux/bitmap.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/idr.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/overflow.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
|
||||
#define AGGREGATOR_MAX_GPIOS 512
|
||||
|
||||
/*
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/of_gpio.h> /* For of_mm_gpio_chip */
|
||||
#include <linux/gpio/legacy-of-mm-gpiochip.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#define ALTERA_GPIO_MAX_NGPIO 32
|
||||
|
@ -24,8 +24,6 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
|
||||
#include <asm-generic/gpio.h>
|
||||
|
||||
#define MAX_REGS_BANKS 5
|
||||
#define MAX_INT_PER_BANK 32
|
||||
|
||||
|
@ -10,8 +10,8 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/legacy-of-mm-gpiochip.h.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/gpio/legacy-of-mm-gpiochip.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/of_platform.h>
|
||||
#include <linux/module.h>
|
||||
|
@ -4,11 +4,19 @@
|
||||
*
|
||||
* Copyright (C) 2016 Russell King
|
||||
*/
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/gpio-reg.h>
|
||||
#include <linux/bits.h>
|
||||
#include <linux/container_of.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/gpio-reg.h>
|
||||
|
||||
struct gpio_reg {
|
||||
struct gpio_chip gc;
|
||||
|
@ -5,11 +5,17 @@
|
||||
* Copyright 2020 Michael Walle <michael@walle.cc>
|
||||
*/
|
||||
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/regmap.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/bits.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/regmap.h>
|
||||
|
||||
struct gpio_regmap {
|
||||
struct device *parent;
|
||||
|
@ -7,16 +7,18 @@
|
||||
* Mika Westerberg <mika.westerberg@linux.intel.com>
|
||||
*/
|
||||
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
|
||||
#include "gpiolib.h"
|
||||
#include "gpiolib-acpi.h"
|
||||
|
@ -9,7 +9,6 @@
|
||||
#define GPIOLIB_ACPI_H
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <linux/gpio/consumer.h>
|
||||
|
@ -10,14 +10,16 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
|
||||
#include "gpiolib.h"
|
||||
@ -892,6 +894,8 @@ static int of_gpio_simple_xlate(struct gpio_chip *gc,
|
||||
return gpiospec->args[0];
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_OF_GPIO_MM_GPIOCHIP)
|
||||
#include <linux/gpio/legacy-of-mm-gpiochip.h>
|
||||
/**
|
||||
* of_mm_gpiochip_add_data - Add memory mapped GPIO chip (bank)
|
||||
* @np: device node of the GPIO chip
|
||||
@ -964,6 +968,7 @@ void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc)
|
||||
kfree(gc->label);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(of_mm_gpiochip_remove);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PINCTRL
|
||||
static int of_gpiochip_add_pin_range(struct gpio_chip *chip)
|
||||
|
@ -4,7 +4,6 @@
|
||||
#define GPIOLIB_OF_H
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <linux/notifier.h>
|
||||
|
@ -6,13 +6,14 @@
|
||||
*/
|
||||
#include <linux/err.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/printk.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
|
||||
#include "gpiolib.h"
|
||||
#include "gpiolib-swnode.h"
|
||||
|
||||
|
@ -1,18 +1,29 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <linux/idr.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/sysfs.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/idr.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/kdev_t.h>
|
||||
#include <linux/kstrtox.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/printk.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/sysfs.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
|
||||
#include "gpiolib.h"
|
||||
#include "gpiolib-sysfs.h"
|
||||
|
||||
struct kernfs_node;
|
||||
|
||||
#define GPIO_IRQF_TRIGGER_NONE 0
|
||||
#define GPIO_IRQF_TRIGGER_FALLING BIT(0)
|
||||
#define GPIO_IRQF_TRIGGER_RISING BIT(1)
|
||||
@ -491,7 +502,7 @@ static ssize_t unexport_store(struct class *class,
|
||||
goto done;
|
||||
|
||||
desc = gpio_to_desc(gpio);
|
||||
/* reject bogus commands (gpio_unexport ignores them) */
|
||||
/* reject bogus commands (gpiod_unexport() ignores them) */
|
||||
if (!desc) {
|
||||
pr_warn("%s: invalid GPIO %ld\n", __func__, gpio);
|
||||
return -EINVAL;
|
||||
@ -790,7 +801,7 @@ static int __init gpiolib_sysfs_init(void)
|
||||
* early (e.g. before the class_register above was called).
|
||||
*
|
||||
* We run before arch_initcall() so chip->dev nodes can have
|
||||
* registered, and so arch_initcall() can always gpio_export().
|
||||
* registered, and so arch_initcall() can always gpiod_export().
|
||||
*/
|
||||
spin_lock_irqsave(&gpio_lock, flags);
|
||||
list_for_each_entry(gdev, &gpio_devices, list) {
|
||||
|
@ -6,22 +6,25 @@
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/file.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/idr.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/pinctrl/consumer.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
|
||||
#include <uapi/linux/gpio.h>
|
||||
|
||||
#include "gpiolib-acpi.h"
|
||||
|
@ -6,14 +6,14 @@
|
||||
*/
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/hte.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/mod_devicetable.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
/*
|
||||
* This sample HTE GPIO test driver demonstrates HTE API usage by enabling
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/ads7846.h>
|
||||
@ -1012,8 +1013,8 @@ static int ads7846_setup_pendown(struct spi_device *spi,
|
||||
ts->gpio_pendown = pdata->gpio_pendown;
|
||||
|
||||
if (pdata->gpio_pendown_debounce)
|
||||
gpio_set_debounce(pdata->gpio_pendown,
|
||||
pdata->gpio_pendown_debounce);
|
||||
gpiod_set_debounce(gpio_to_desc(ts->gpio_pendown),
|
||||
pdata->gpio_pendown_debounce);
|
||||
} else {
|
||||
dev_err(&spi->dev, "no get_pendown_state nor gpio_pendown?\n");
|
||||
return -EINVAL;
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include <linux/pci.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/delay.h>
|
||||
@ -889,6 +890,7 @@ static int sta2x11_vip_init_controls(struct sta2x11_vip *vip)
|
||||
static int vip_gpio_reserve(struct device *dev, int pin, int dir,
|
||||
const char *name)
|
||||
{
|
||||
struct gpio_desc *desc = gpio_to_desc(pin);
|
||||
int ret = -ENODEV;
|
||||
|
||||
if (!gpio_is_valid(pin))
|
||||
@ -900,7 +902,7 @@ static int vip_gpio_reserve(struct device *dev, int pin, int dir,
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = gpio_direction_output(pin, dir);
|
||||
ret = gpiod_direction_output(desc, dir);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to set direction for pin %d (%s)\n",
|
||||
pin, name);
|
||||
@ -908,7 +910,7 @@ static int vip_gpio_reserve(struct device *dev, int pin, int dir,
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = gpio_export(pin, false);
|
||||
ret = gpiod_export(desc, false);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to export pin %d (%s)\n", pin, name);
|
||||
gpio_free(pin);
|
||||
@ -928,8 +930,10 @@ static int vip_gpio_reserve(struct device *dev, int pin, int dir,
|
||||
static void vip_gpio_release(struct device *dev, int pin, const char *name)
|
||||
{
|
||||
if (gpio_is_valid(pin)) {
|
||||
struct gpio_desc *desc = gpio_to_desc(pin);
|
||||
|
||||
dev_dbg(dev, "releasing pin %d (%s)\n", pin, name);
|
||||
gpio_unexport(pin);
|
||||
gpiod_unexport(desc);
|
||||
gpio_free(pin);
|
||||
}
|
||||
}
|
||||
|
@ -51,6 +51,7 @@
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/ieee802154.h>
|
||||
#include <linux/io.h>
|
||||
@ -2853,7 +2854,7 @@ static int ca8210_interrupt_init(struct spi_device *spi)
|
||||
);
|
||||
if (ret) {
|
||||
dev_crit(&spi->dev, "request_irq %d failed\n", pdata->irq_id);
|
||||
gpio_unexport(pdata->gpio_irq);
|
||||
gpiod_unexport(gpio_to_desc(pdata->gpio_irq));
|
||||
gpio_free(pdata->gpio_irq);
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <net/mac80211.h>
|
||||
#include <linux/bcma/bcma_driver_chipcommon.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/machine.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#ifdef CONFIG_GPIOLIB
|
||||
#include "../gpio/gpiolib.h"
|
||||
#include <asm-generic/gpio.h>
|
||||
#endif
|
||||
|
||||
#include "core.h"
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_gpio.h> /* for of_mm_gpio_chip */
|
||||
#include <linux/gpio/legacy-of-mm-gpiochip.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/slab.h>
|
||||
|
@ -1,147 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _ASM_GENERIC_GPIO_H
|
||||
#define _ASM_GENERIC_GPIO_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
|
||||
#ifdef CONFIG_GPIOLIB
|
||||
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
|
||||
/*
|
||||
* Platforms may implement their GPIO interface with library code,
|
||||
* at a small performance cost for non-inlined operations and some
|
||||
* extra memory (for code and for per-GPIO table entries).
|
||||
*/
|
||||
|
||||
/*
|
||||
* At the end we want all GPIOs to be dynamically allocated from 0.
|
||||
* However, some legacy drivers still perform fixed allocation.
|
||||
* Until they are all fixed, leave 0-512 space for them.
|
||||
*/
|
||||
#define GPIO_DYNAMIC_BASE 512
|
||||
|
||||
struct device;
|
||||
struct gpio;
|
||||
struct seq_file;
|
||||
struct module;
|
||||
struct device_node;
|
||||
struct gpio_desc;
|
||||
|
||||
/* Always use the library code for GPIO management calls,
|
||||
* or when sleeping may be involved.
|
||||
*/
|
||||
extern int gpio_request(unsigned gpio, const char *label);
|
||||
extern void gpio_free(unsigned gpio);
|
||||
|
||||
static inline int gpio_direction_input(unsigned gpio)
|
||||
{
|
||||
return gpiod_direction_input(gpio_to_desc(gpio));
|
||||
}
|
||||
static inline int gpio_direction_output(unsigned gpio, int value)
|
||||
{
|
||||
return gpiod_direction_output_raw(gpio_to_desc(gpio), value);
|
||||
}
|
||||
|
||||
static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
|
||||
{
|
||||
return gpiod_set_debounce(gpio_to_desc(gpio), debounce);
|
||||
}
|
||||
|
||||
static inline int gpio_get_value_cansleep(unsigned gpio)
|
||||
{
|
||||
return gpiod_get_raw_value_cansleep(gpio_to_desc(gpio));
|
||||
}
|
||||
static inline void gpio_set_value_cansleep(unsigned gpio, int value)
|
||||
{
|
||||
return gpiod_set_raw_value_cansleep(gpio_to_desc(gpio), value);
|
||||
}
|
||||
|
||||
|
||||
/* A platform's <asm/gpio.h> code may want to inline the I/O calls when
|
||||
* the GPIO is constant and refers to some always-present controller,
|
||||
* giving direct access to chip registers and tight bitbanging loops.
|
||||
*/
|
||||
static inline int __gpio_get_value(unsigned gpio)
|
||||
{
|
||||
return gpiod_get_raw_value(gpio_to_desc(gpio));
|
||||
}
|
||||
static inline void __gpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
return gpiod_set_raw_value(gpio_to_desc(gpio), value);
|
||||
}
|
||||
|
||||
static inline int __gpio_cansleep(unsigned gpio)
|
||||
{
|
||||
return gpiod_cansleep(gpio_to_desc(gpio));
|
||||
}
|
||||
|
||||
static inline int __gpio_to_irq(unsigned gpio)
|
||||
{
|
||||
return gpiod_to_irq(gpio_to_desc(gpio));
|
||||
}
|
||||
|
||||
extern int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
|
||||
extern int gpio_request_array(const struct gpio *array, size_t num);
|
||||
extern void gpio_free_array(const struct gpio *array, size_t num);
|
||||
|
||||
/*
|
||||
* A sysfs interface can be exported by individual drivers if they want,
|
||||
* but more typically is configured entirely from userspace.
|
||||
*/
|
||||
static inline int gpio_export(unsigned gpio, bool direction_may_change)
|
||||
{
|
||||
return gpiod_export(gpio_to_desc(gpio), direction_may_change);
|
||||
}
|
||||
|
||||
static inline void gpio_unexport(unsigned gpio)
|
||||
{
|
||||
gpiod_unexport(gpio_to_desc(gpio));
|
||||
}
|
||||
|
||||
#else /* !CONFIG_GPIOLIB */
|
||||
|
||||
#include <linux/kernel.h>
|
||||
|
||||
/* platforms that don't directly support access to GPIOs through I2C, SPI,
|
||||
* or other blocking infrastructure can use these wrappers.
|
||||
*/
|
||||
|
||||
static inline int gpio_cansleep(unsigned gpio)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int gpio_get_value_cansleep(unsigned gpio)
|
||||
{
|
||||
might_sleep();
|
||||
return __gpio_get_value(gpio);
|
||||
}
|
||||
|
||||
static inline void gpio_set_value_cansleep(unsigned gpio, int value)
|
||||
{
|
||||
might_sleep();
|
||||
__gpio_set_value(gpio, value);
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_GPIOLIB */
|
||||
|
||||
/*
|
||||
* "valid" GPIO numbers are nonnegative and may be passed to
|
||||
* setup routines like gpio_request(). only some valid numbers
|
||||
* can successfully be requested and used.
|
||||
*
|
||||
* Invalid GPIO numbers are useful for indicating no-such-GPIO in
|
||||
* platform data and other tables.
|
||||
*/
|
||||
|
||||
static inline bool gpio_is_valid(int number)
|
||||
{
|
||||
/* only non-negative numbers are valid */
|
||||
return number >= 0;
|
||||
}
|
||||
|
||||
#endif /* _ASM_GENERIC_GPIO_H */
|
@ -12,7 +12,9 @@
|
||||
#ifndef __LINUX_GPIO_H
|
||||
#define __LINUX_GPIO_H
|
||||
|
||||
#include <linux/errno.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
struct device;
|
||||
|
||||
/* see Documentation/driver-api/gpio/legacy.rst */
|
||||
|
||||
@ -55,50 +57,94 @@ struct gpio {
|
||||
|
||||
#ifdef CONFIG_GPIOLIB
|
||||
|
||||
#ifdef CONFIG_ARCH_HAVE_CUSTOM_GPIO_H
|
||||
#include <asm/gpio.h>
|
||||
#else
|
||||
#include <linux/gpio/consumer.h>
|
||||
|
||||
#include <asm-generic/gpio.h>
|
||||
|
||||
static inline int gpio_get_value(unsigned int gpio)
|
||||
/*
|
||||
* "valid" GPIO numbers are nonnegative and may be passed to
|
||||
* setup routines like gpio_request(). Only some valid numbers
|
||||
* can successfully be requested and used.
|
||||
*
|
||||
* Invalid GPIO numbers are useful for indicating no-such-GPIO in
|
||||
* platform data and other tables.
|
||||
*/
|
||||
static inline bool gpio_is_valid(int number)
|
||||
{
|
||||
return __gpio_get_value(gpio);
|
||||
/* only non-negative numbers are valid */
|
||||
return number >= 0;
|
||||
}
|
||||
|
||||
static inline void gpio_set_value(unsigned int gpio, int value)
|
||||
/*
|
||||
* Platforms may implement their GPIO interface with library code,
|
||||
* at a small performance cost for non-inlined operations and some
|
||||
* extra memory (for code and for per-GPIO table entries).
|
||||
*/
|
||||
|
||||
/*
|
||||
* At the end we want all GPIOs to be dynamically allocated from 0.
|
||||
* However, some legacy drivers still perform fixed allocation.
|
||||
* Until they are all fixed, leave 0-512 space for them.
|
||||
*/
|
||||
#define GPIO_DYNAMIC_BASE 512
|
||||
|
||||
/* Always use the library code for GPIO management calls,
|
||||
* or when sleeping may be involved.
|
||||
*/
|
||||
int gpio_request(unsigned gpio, const char *label);
|
||||
void gpio_free(unsigned gpio);
|
||||
|
||||
static inline int gpio_direction_input(unsigned gpio)
|
||||
{
|
||||
__gpio_set_value(gpio, value);
|
||||
return gpiod_direction_input(gpio_to_desc(gpio));
|
||||
}
|
||||
static inline int gpio_direction_output(unsigned gpio, int value)
|
||||
{
|
||||
return gpiod_direction_output_raw(gpio_to_desc(gpio), value);
|
||||
}
|
||||
|
||||
static inline int gpio_cansleep(unsigned int gpio)
|
||||
static inline int gpio_get_value_cansleep(unsigned gpio)
|
||||
{
|
||||
return __gpio_cansleep(gpio);
|
||||
return gpiod_get_raw_value_cansleep(gpio_to_desc(gpio));
|
||||
}
|
||||
static inline void gpio_set_value_cansleep(unsigned gpio, int value)
|
||||
{
|
||||
return gpiod_set_raw_value_cansleep(gpio_to_desc(gpio), value);
|
||||
}
|
||||
|
||||
static inline int gpio_to_irq(unsigned int gpio)
|
||||
static inline int gpio_get_value(unsigned gpio)
|
||||
{
|
||||
return __gpio_to_irq(gpio);
|
||||
return gpiod_get_raw_value(gpio_to_desc(gpio));
|
||||
}
|
||||
static inline void gpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
return gpiod_set_raw_value(gpio_to_desc(gpio), value);
|
||||
}
|
||||
|
||||
#endif /* ! CONFIG_ARCH_HAVE_CUSTOM_GPIO_H */
|
||||
static inline int gpio_cansleep(unsigned gpio)
|
||||
{
|
||||
return gpiod_cansleep(gpio_to_desc(gpio));
|
||||
}
|
||||
|
||||
static inline int gpio_to_irq(unsigned gpio)
|
||||
{
|
||||
return gpiod_to_irq(gpio_to_desc(gpio));
|
||||
}
|
||||
|
||||
int gpio_request_one(unsigned gpio, unsigned long flags, const char *label);
|
||||
int gpio_request_array(const struct gpio *array, size_t num);
|
||||
void gpio_free_array(const struct gpio *array, size_t num);
|
||||
|
||||
/* CONFIG_GPIOLIB: bindings for managed devices that want to request gpios */
|
||||
|
||||
struct device;
|
||||
|
||||
int devm_gpio_request(struct device *dev, unsigned gpio, const char *label);
|
||||
int devm_gpio_request_one(struct device *dev, unsigned gpio,
|
||||
unsigned long flags, const char *label);
|
||||
|
||||
#else /* ! CONFIG_GPIOLIB */
|
||||
|
||||
#include <linux/bug.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
struct device;
|
||||
struct gpio_chip;
|
||||
#include <asm/bug.h>
|
||||
#include <asm/errno.h>
|
||||
|
||||
static inline bool gpio_is_valid(int number)
|
||||
{
|
||||
@ -147,11 +193,6 @@ static inline int gpio_direction_output(unsigned gpio, int value)
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static inline int gpio_get_value(unsigned gpio)
|
||||
{
|
||||
/* GPIO can never have been requested or set as {in,out}put */
|
||||
@ -185,19 +226,6 @@ static inline void gpio_set_value_cansleep(unsigned gpio, int value)
|
||||
WARN_ON(1);
|
||||
}
|
||||
|
||||
static inline int gpio_export(unsigned gpio, bool direction_may_change)
|
||||
{
|
||||
/* GPIO can never have been requested or set as {in,out}put */
|
||||
WARN_ON(1);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline void gpio_unexport(unsigned gpio)
|
||||
{
|
||||
/* GPIO can never have been exported */
|
||||
WARN_ON(1);
|
||||
}
|
||||
|
||||
static inline int gpio_to_irq(unsigned gpio)
|
||||
{
|
||||
/* GPIO can never have been requested or set as input */
|
||||
|
@ -3,13 +3,14 @@
|
||||
#define __LINUX_GPIO_CONSUMER_H
|
||||
|
||||
#include <linux/bits.h>
|
||||
#include <linux/bug.h>
|
||||
#include <linux/compiler_types.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
struct acpi_device;
|
||||
struct device;
|
||||
struct gpio_desc;
|
||||
struct fwnode_handle;
|
||||
|
||||
struct gpio_array;
|
||||
struct gpio_desc;
|
||||
|
||||
/**
|
||||
* struct gpio_descs - Struct containing an array of descriptors that can be
|
||||
@ -171,9 +172,6 @@ int gpiod_set_consumer_name(struct gpio_desc *desc, const char *name);
|
||||
struct gpio_desc *gpio_to_desc(unsigned gpio);
|
||||
int desc_to_gpio(const struct gpio_desc *desc);
|
||||
|
||||
/* Child properties interface */
|
||||
struct fwnode_handle;
|
||||
|
||||
struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode,
|
||||
const char *con_id, int index,
|
||||
enum gpiod_flags flags,
|
||||
@ -186,8 +184,11 @@ struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev,
|
||||
|
||||
#else /* CONFIG_GPIOLIB */
|
||||
|
||||
#include <linux/err.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
#include <asm/bug.h>
|
||||
|
||||
static inline int gpiod_count(struct device *dev, const char *con_id)
|
||||
{
|
||||
return 0;
|
||||
@ -546,9 +547,6 @@ static inline int desc_to_gpio(const struct gpio_desc *desc)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* Child properties interface */
|
||||
struct fwnode_handle;
|
||||
|
||||
static inline
|
||||
struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode,
|
||||
const char *con_id, int index,
|
||||
@ -607,8 +605,6 @@ struct acpi_gpio_mapping {
|
||||
unsigned int quirks;
|
||||
};
|
||||
|
||||
struct acpi_device;
|
||||
|
||||
#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_ACPI)
|
||||
|
||||
int acpi_dev_add_driver_gpios(struct acpi_device *adev,
|
||||
@ -622,6 +618,8 @@ struct gpio_desc *acpi_get_and_request_gpiod(char *path, unsigned int pin, char
|
||||
|
||||
#else /* CONFIG_GPIOLIB && CONFIG_ACPI */
|
||||
|
||||
#include <linux/err.h>
|
||||
|
||||
static inline int acpi_dev_add_driver_gpios(struct acpi_device *adev,
|
||||
const struct acpi_gpio_mapping *gpios)
|
||||
{
|
||||
@ -653,6 +651,8 @@ void gpiod_unexport(struct gpio_desc *desc);
|
||||
|
||||
#else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */
|
||||
|
||||
#include <asm/errno.h>
|
||||
|
||||
static inline int gpiod_export(struct gpio_desc *desc,
|
||||
bool direction_may_change)
|
||||
{
|
||||
|
@ -2,28 +2,35 @@
|
||||
#ifndef __LINUX_GPIO_DRIVER_H
|
||||
#define __LINUX_GPIO_DRIVER_H
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/bits.h>
|
||||
#include <linux/irqchip/chained_irq.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/irqhandler.h>
|
||||
#include <linux/lockdep.h>
|
||||
#include <linux/pinctrl/pinconf-generic.h>
|
||||
#include <linux/pinctrl/pinctrl.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/spinlock_types.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
#ifdef CONFIG_GENERIC_MSI_IRQ
|
||||
#include <asm/msi.h>
|
||||
#endif
|
||||
|
||||
struct gpio_desc;
|
||||
struct of_phandle_args;
|
||||
struct device_node;
|
||||
struct seq_file;
|
||||
struct gpio_device;
|
||||
struct device;
|
||||
struct irq_chip;
|
||||
struct irq_data;
|
||||
struct module;
|
||||
enum gpiod_flags;
|
||||
enum gpio_lookup_flags;
|
||||
struct of_phandle_args;
|
||||
struct pinctrl_dev;
|
||||
struct seq_file;
|
||||
|
||||
struct gpio_chip;
|
||||
struct gpio_desc;
|
||||
struct gpio_device;
|
||||
|
||||
enum gpio_lookup_flags;
|
||||
enum gpiod_flags;
|
||||
|
||||
union gpio_irq_fwspec {
|
||||
struct irq_fwspec fwspec;
|
||||
@ -680,6 +687,10 @@ bool gpiochip_irqchip_irq_valid(const struct gpio_chip *gc,
|
||||
int gpiochip_irqchip_add_domain(struct gpio_chip *gc,
|
||||
struct irq_domain *domain);
|
||||
#else
|
||||
|
||||
#include <asm/bug.h>
|
||||
#include <asm/errno.h>
|
||||
|
||||
static inline int gpiochip_irqchip_add_domain(struct gpio_chip *gc,
|
||||
struct irq_domain *domain)
|
||||
{
|
||||
@ -757,6 +768,10 @@ struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc);
|
||||
|
||||
#else /* CONFIG_GPIOLIB */
|
||||
|
||||
#include <linux/err.h>
|
||||
|
||||
#include <asm/bug.h>
|
||||
|
||||
static inline struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
|
||||
{
|
||||
/* GPIO can never have been requested */
|
||||
|
36
include/linux/gpio/legacy-of-mm-gpiochip.h
Normal file
36
include/linux/gpio/legacy-of-mm-gpiochip.h
Normal file
@ -0,0 +1,36 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* OF helpers for the old of_mm_gpio_chip, used on ppc32 and nios2,
|
||||
* do not use in new code.
|
||||
*
|
||||
* Copyright (c) 2007-2008 MontaVista Software, Inc.
|
||||
*
|
||||
* Author: Anton Vorontsov <avorontsov@ru.mvista.com>
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_GPIO_LEGACY_OF_MM_GPIO_CHIP_H
|
||||
#define __LINUX_GPIO_LEGACY_OF_MM_GPIO_CHIP_H
|
||||
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/of.h>
|
||||
|
||||
/*
|
||||
* OF GPIO chip for memory mapped banks
|
||||
*/
|
||||
struct of_mm_gpio_chip {
|
||||
struct gpio_chip gc;
|
||||
void (*save_regs)(struct of_mm_gpio_chip *mm_gc);
|
||||
void __iomem *regs;
|
||||
};
|
||||
|
||||
static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc)
|
||||
{
|
||||
return container_of(gc, struct of_mm_gpio_chip, gc);
|
||||
}
|
||||
|
||||
extern int of_mm_gpiochip_add_data(struct device_node *np,
|
||||
struct of_mm_gpio_chip *mm_gc,
|
||||
void *data);
|
||||
extern void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc);
|
||||
|
||||
#endif /* __LINUX_GPIO_LEGACY_OF_MM_GPIO_CHIP_H */
|
@ -10,6 +10,7 @@
|
||||
#include <linux/device.h>
|
||||
#include <linux/mfd/mcp.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio/driver.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
#define UCB_IO_DATA 0x00
|
||||
|
@ -19,30 +19,9 @@ struct device_node;
|
||||
|
||||
#ifdef CONFIG_OF_GPIO
|
||||
|
||||
#include <linux/container_of.h>
|
||||
|
||||
/*
|
||||
* OF GPIO chip for memory mapped banks
|
||||
*/
|
||||
struct of_mm_gpio_chip {
|
||||
struct gpio_chip gc;
|
||||
void (*save_regs)(struct of_mm_gpio_chip *mm_gc);
|
||||
void __iomem *regs;
|
||||
};
|
||||
|
||||
static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc)
|
||||
{
|
||||
return container_of(gc, struct of_mm_gpio_chip, gc);
|
||||
}
|
||||
|
||||
extern int of_get_named_gpio(const struct device_node *np,
|
||||
const char *list_name, int index);
|
||||
|
||||
extern int of_mm_gpiochip_add_data(struct device_node *np,
|
||||
struct of_mm_gpio_chip *mm_gc,
|
||||
void *data);
|
||||
extern void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc);
|
||||
|
||||
#else /* CONFIG_OF_GPIO */
|
||||
|
||||
#include <linux/errno.h>
|
||||
|
Loading…
Reference in New Issue
Block a user