Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
64df5ea9
Commit
64df5ea9
authored
Mar 07, 2024
by
Linus Walleij
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'ib-nomadik-gpio' into devel
parents
52279c3d
a0c807b5
Changes
11
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
1104 additions
and
863 deletions
+1104
-863
Documentation/devicetree/bindings/gpio/gpio-nmk.txt
Documentation/devicetree/bindings/gpio/gpio-nmk.txt
+0
-31
Documentation/devicetree/bindings/gpio/st,nomadik-gpio.yaml
Documentation/devicetree/bindings/gpio/st,nomadik-gpio.yaml
+95
-0
MAINTAINERS
MAINTAINERS
+2
-0
drivers/gpio/Kconfig
drivers/gpio/Kconfig
+12
-0
drivers/gpio/Makefile
drivers/gpio/Makefile
+1
-0
drivers/gpio/gpio-nomadik.c
drivers/gpio/gpio-nomadik.c
+734
-0
drivers/pinctrl/nomadik/Kconfig
drivers/pinctrl/nomadik/Kconfig
+4
-4
drivers/pinctrl/nomadik/pinctrl-nomadik-db8500.c
drivers/pinctrl/nomadik/pinctrl-nomadik-db8500.c
+2
-1
drivers/pinctrl/nomadik/pinctrl-nomadik-stn8815.c
drivers/pinctrl/nomadik/pinctrl-nomadik-stn8815.c
+2
-1
drivers/pinctrl/nomadik/pinctrl-nomadik.c
drivers/pinctrl/nomadik/pinctrl-nomadik.c
+141
-814
include/linux/gpio/gpio-nomadik.h
include/linux/gpio/gpio-nomadik.h
+111
-12
No files found.
Documentation/devicetree/bindings/gpio/gpio-nmk.txt
deleted
100644 → 0
View file @
52279c3d
Nomadik GPIO controller
Required properties:
- compatible : Should be "st,nomadik-gpio".
- reg : Physical base address and length of the controller's registers.
- interrupts : The interrupt outputs from the controller.
- #gpio-cells : Should be two:
The first cell is the pin number.
The second cell is used to specify optional parameters:
- bits[3:0] trigger type and level flags:
1 = low-to-high edge triggered.
2 = high-to-low edge triggered.
4 = active high level-sensitive.
8 = active low level-sensitive.
- gpio-controller : Marks the device node as a GPIO controller.
- interrupt-controller : Marks the device node as an interrupt controller.
- gpio-bank : Specifies which bank a controller owns.
- st,supports-sleepmode : Specifies whether controller can sleep or not
Example:
gpio1: gpio@8012e080 {
compatible = "st,nomadik-gpio";
reg = <0x8012e080 0x80>;
interrupts = <0 120 0x4>;
#gpio-cells = <2>;
gpio-controller;
interrupt-controller;
st,supports-sleepmode;
gpio-bank = <1>;
};
Documentation/devicetree/bindings/gpio/st,nomadik-gpio.yaml
0 → 100644
View file @
64df5ea9
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML
1.2
---
$id
:
http://devicetree.org/schemas/gpio/st,nomadik-gpio.yaml#
$schema
:
http://devicetree.org/meta-schemas/core.yaml#
title
:
Nomadik GPIO controller
description
:
The Nomadik GPIO driver handles Nomadik SoC GPIO blocks. This block has also
been called ST STA2X11. On the Nomadik platform, this driver is intertwined
with pinctrl-nomadik.
maintainers
:
-
Linus Walleij <linus.walleij@linaro.org>
properties
:
$nodename
:
pattern
:
"
^gpio@[0-9a-f]+$"
compatible
:
enum
:
-
st,nomadik-gpio
-
mobileye,eyeq5-gpio
reg
:
maxItems
:
1
interrupts
:
maxItems
:
1
"
#gpio-cells"
:
const
:
2
gpio-controller
:
true
interrupt-controller
:
true
"
#interrupt-cells"
:
const
:
2
gpio-bank
:
description
:
System-wide GPIO bank index.
$ref
:
/schemas/types.yaml#/definitions/uint32
st,supports-sleepmode
:
description
:
Whether the controller can sleep or not.
$ref
:
/schemas/types.yaml#/definitions/flag
clocks
:
maxItems
:
1
gpio-ranges
:
maxItems
:
1
ngpios
:
minimum
:
0
maximum
:
32
resets
:
maxItems
:
1
required
:
-
compatible
-
reg
-
interrupts
-
"
#gpio-cells"
-
gpio-controller
-
interrupt-controller
-
gpio-bank
unevaluatedProperties
:
false
allOf
:
-
if
:
properties
:
compatible
:
contains
:
const
:
mobileye,eyeq5-gpio
then
:
properties
:
st,supports-sleepmode
:
false
examples
:
-
|
gpio@8012e080 {
compatible = "st,nomadik-gpio";
reg = <0x8012e080 0x80>;
interrupts = <0 120 0x4>;
#gpio-cells = <2>;
gpio-controller;
interrupt-controller;
st,supports-sleepmode;
gpio-bank = <1>;
};
MAINTAINERS
View file @
64df5ea9
...
...
@@ -2465,6 +2465,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-nomadik.git
F: Documentation/devicetree/bindings/arm/ste-*
F: Documentation/devicetree/bindings/arm/ux500.yaml
F: Documentation/devicetree/bindings/arm/ux500/
F: Documentation/devicetree/bindings/gpio/st,nomadik-gpio.yaml
F: Documentation/devicetree/bindings/i2c/st,nomadik-i2c.yaml
F: arch/arm/boot/dts/st/ste-*
F: arch/arm/mach-nomadik/
...
...
@@ -2473,6 +2474,7 @@ F: drivers/clk/clk-nomadik.c
F: drivers/clocksource/clksrc-dbx500-prcmu.c
F: drivers/dma/ste_dma40*
F: drivers/pmdomain/st/ste-ux500-pm-domain.c
F: drivers/gpio/gpio-nomadik.c
F: drivers/hwspinlock/u8500_hsem.c
F: drivers/i2c/busses/i2c-nomadik.c
F: drivers/iio/adc/ab8500-gpadc.c
...
...
drivers/gpio/Kconfig
View file @
64df5ea9
...
...
@@ -478,6 +478,18 @@ config GPIO_MXS
select GPIO_GENERIC
select GENERIC_IRQ_CHIP
config GPIO_NOMADIK
bool "Nomadik GPIO driver"
depends on ARCH_U8500 || ARCH_NOMADIK || MACH_EYEQ5 || COMPILE_TEST
select GPIOLIB_IRQCHIP
help
Say yes here to support the Nomadik SoC GPIO block. This block is also
used by the Mobileye EyeQ5 SoC.
It handles up to 32 GPIOs per bank, that can all be interrupt sources.
It is deeply interconnected with the associated pinctrl driver as GPIO
registers handle muxing ("alternate functions") as well.
config GPIO_NPCM_SGPIO
bool "Nuvoton SGPIO support"
depends on ARCH_NPCM || COMPILE_TEST
...
...
drivers/gpio/Makefile
View file @
64df5ea9
...
...
@@ -116,6 +116,7 @@ obj-$(CONFIG_GPIO_MT7621) += gpio-mt7621.o
obj-$(CONFIG_GPIO_MVEBU)
+=
gpio-mvebu.o
obj-$(CONFIG_GPIO_MXC)
+=
gpio-mxc.o
obj-$(CONFIG_GPIO_MXS)
+=
gpio-mxs.o
obj-$(CONFIG_GPIO_NOMADIK)
+=
gpio-nomadik.o
obj-$(CONFIG_GPIO_NPCM_SGPIO)
+=
gpio-npcm-sgpio.o
obj-$(CONFIG_GPIO_OCTEON)
+=
gpio-octeon.o
obj-$(CONFIG_GPIO_OMAP)
+=
gpio-omap.o
...
...
drivers/gpio/gpio-nomadik.c
0 → 100644
View file @
64df5ea9
This diff is collapsed.
Click to expand it.
drivers/pinctrl/nomadik/Kconfig
View file @
64df5ea9
...
...
@@ -18,15 +18,15 @@ config PINCTRL_AB8505
endif
if (ARCH_U8500 || ARCH_NOMADIK)
if (ARCH_U8500 || ARCH_NOMADIK
|| COMPILE_TEST
)
config PINCTRL_NOMADIK
bool "Nomadik pin controller driver"
depends on OF
&& GPIOLIB
depends on OF
select PINMUX
select PINCONF
select
OF_GPIO
select GPIO
LIB_IRQCHIP
select
GPIOLIB
select GPIO
_NOMADIK
config PINCTRL_STN8815
bool "STN8815 pin controller driver"
...
...
drivers/pinctrl/nomadik/pinctrl-nomadik-db8500.c
View file @
64df5ea9
...
...
@@ -3,8 +3,9 @@
#include <linux/types.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/gpio/driver.h>
#include
"pinctrl-nomadik.h"
#include
<linux/gpio/gpio-nomadik.h>
/* All the pins that can be used for GPIO and some other functions */
#define _GPIO(offset) (offset)
...
...
drivers/pinctrl/nomadik/pinctrl-nomadik-stn8815.c
View file @
64df5ea9
...
...
@@ -3,8 +3,9 @@
#include <linux/types.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/gpio/driver.h>
#include
"pinctrl-nomadik.h"
#include
<linux/gpio/gpio-nomadik.h>
/* All the pins that can be used for GPIO and some other functions */
#define _GPIO(offset) (offset)
...
...
drivers/pinctrl/nomadik/pinctrl-nomadik.c
View file @
64df5ea9
This diff is collapsed.
Click to expand it.
drivers/pinctrl/nomadik/pinctrl
-nomadik.h
→
include/linux/gpio/gpio
-nomadik.h
View file @
64df5ea9
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef
PINCTRL_PINCTRL
_NOMADIK_H
#define
PINCTRL_PINCTRL
_NOMADIK_H
#ifndef
__LINUX_GPIO
_NOMADIK_H
#define
__LINUX_GPIO
_NOMADIK_H
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/pinctrl/pinctrl.h>
struct
fwnode_handle
;
/* Package definitions */
#define PINCTRL_NMK_STN8815 0
#define PINCTRL_NMK_DB8500 1
#define GPIO_BLOCK_SHIFT 5
#define NMK_GPIO_PER_CHIP BIT(GPIO_BLOCK_SHIFT)
#define NMK_MAX_BANKS DIV_ROUND_UP(512, NMK_GPIO_PER_CHIP)
/* Register in the logic block */
#define NMK_GPIO_DAT 0x00
#define NMK_GPIO_DATS 0x04
#define NMK_GPIO_DATC 0x08
#define NMK_GPIO_PDIS 0x0c
#define NMK_GPIO_DIR 0x10
#define NMK_GPIO_DIRS 0x14
#define NMK_GPIO_DIRC 0x18
#define NMK_GPIO_SLPC 0x1c
#define NMK_GPIO_AFSLA 0x20
#define NMK_GPIO_AFSLB 0x24
#define NMK_GPIO_LOWEMI 0x28
#define NMK_GPIO_RIMSC 0x40
#define NMK_GPIO_FIMSC 0x44
#define NMK_GPIO_IS 0x48
#define NMK_GPIO_IC 0x4c
#define NMK_GPIO_RWIMSC 0x50
#define NMK_GPIO_FWIMSC 0x54
#define NMK_GPIO_WKS 0x58
/* These appear in DB8540 and later ASICs */
#define NMK_GPIO_EDGELEVEL 0x5C
#define NMK_GPIO_LEVEL 0x60
/* Pull up/down values */
enum
nmk_gpio_pull
{
NMK_GPIO_PULL_NONE
,
NMK_GPIO_PULL_UP
,
NMK_GPIO_PULL_DOWN
,
};
/* Sleep mode */
enum
nmk_gpio_slpm
{
NMK_GPIO_SLPM_INPUT
,
NMK_GPIO_SLPM_WAKEUP_ENABLE
=
NMK_GPIO_SLPM_INPUT
,
NMK_GPIO_SLPM_NOCHANGE
,
NMK_GPIO_SLPM_WAKEUP_DISABLE
=
NMK_GPIO_SLPM_NOCHANGE
,
};
struct
nmk_gpio_chip
{
struct
gpio_chip
chip
;
void
__iomem
*
addr
;
struct
clk
*
clk
;
unsigned
int
bank
;
void
(
*
set_ioforce
)(
bool
enable
);
spinlock_t
lock
;
bool
sleepmode
;
bool
is_mobileye_soc
;
/* Keep track of configured edges */
u32
edge_rising
;
u32
edge_falling
;
u32
real_wake
;
u32
rwimsc
;
u32
fwimsc
;
u32
rimsc
;
u32
fimsc
;
u32
pull_up
;
u32
lowemi
;
};
/* Alternate functions: function C is set in hw by setting both A and B */
#define NMK_GPIO_ALT_GPIO 0
#define NMK_GPIO_ALT_A 1
...
...
@@ -104,7 +165,7 @@ struct prcm_gpiocr_altcx_pin_desc {
struct
nmk_function
{
const
char
*
name
;
const
char
*
const
*
groups
;
unsigned
ngroups
;
unsigned
int
ngroups
;
};
/**
...
...
@@ -141,13 +202,13 @@ struct nmk_pingroup {
*/
struct
nmk_pinctrl_soc_data
{
const
struct
pinctrl_pin_desc
*
pins
;
unsigned
npins
;
unsigned
int
npins
;
const
struct
nmk_function
*
functions
;
unsigned
nfunctions
;
unsigned
int
nfunctions
;
const
struct
nmk_pingroup
*
groups
;
unsigned
ngroups
;
unsigned
int
ngroups
;
const
struct
prcm_gpiocr_altcx_pin_desc
*
altcx_pins
;
unsigned
npins_altcx
;
unsigned
int
npins_altcx
;
const
u16
*
prcm_gpiocr_registers
;
};
...
...
@@ -177,4 +238,42 @@ nmk_pinctrl_db8500_init(const struct nmk_pinctrl_soc_data **soc)
#endif
#endif
/* PINCTRL_PINCTRL_NOMADIK_H */
#ifdef CONFIG_PINCTRL_DB8540
void
nmk_pinctrl_db8540_init
(
const
struct
nmk_pinctrl_soc_data
**
soc
);
#else
static
inline
void
nmk_pinctrl_db8540_init
(
const
struct
nmk_pinctrl_soc_data
**
soc
)
{
}
#endif
struct
platform_device
;
/*
* Symbols declared in gpio-nomadik used by pinctrl-nomadik. If pinctrl-nomadik
* is enabled, then gpio-nomadik is enabled as well; the reverse if not always
* true.
*/
void
nmk_gpio_dbg_show_one
(
struct
seq_file
*
s
,
struct
pinctrl_dev
*
pctldev
,
struct
gpio_chip
*
chip
,
unsigned
int
offset
,
unsigned
int
gpio
);
void
__nmk_gpio_make_output
(
struct
nmk_gpio_chip
*
nmk_chip
,
unsigned
int
offset
,
int
val
);
void
__nmk_gpio_set_slpm
(
struct
nmk_gpio_chip
*
nmk_chip
,
unsigned
int
offset
,
enum
nmk_gpio_slpm
mode
);
struct
nmk_gpio_chip
*
nmk_gpio_populate_chip
(
struct
fwnode_handle
*
fwnode
,
struct
platform_device
*
pdev
);
/* Symbols declared in pinctrl-nomadik used by gpio-nomadik. */
#ifdef CONFIG_PINCTRL_NOMADIK
extern
struct
nmk_gpio_chip
*
nmk_gpio_chips
[
NMK_MAX_BANKS
];
extern
spinlock_t
nmk_gpio_slpm_lock
;
int
__maybe_unused
nmk_prcm_gpiocr_get_mode
(
struct
pinctrl_dev
*
pctldev
,
int
gpio
);
#endif
#endif
/* __LINUX_GPIO_NOMADIK_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment