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
nexedi
linux
Commits
ae1cde8c
Commit
ae1cde8c
authored
Nov 11, 2012
by
Linus Walleij
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'nomadik' into devel
parents
e59d969f
9b472600
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
303 additions
and
165 deletions
+303
-165
arch/arm/mach-nomadik/board-nhk8815.c
arch/arm/mach-nomadik/board-nhk8815.c
+1
-2
arch/arm/mach-nomadik/cpu-8815.c
arch/arm/mach-nomadik/cpu-8815.c
+1
-1
arch/arm/mach-nomadik/i2c-8815nhk.c
arch/arm/mach-nomadik/i2c-8815nhk.c
+1
-2
arch/arm/mach-ux500/board-mop500-audio.c
arch/arm/mach-ux500/board-mop500-audio.c
+1
-2
arch/arm/mach-ux500/board-mop500-pins.c
arch/arm/mach-ux500/board-mop500-pins.c
+1
-2
arch/arm/mach-ux500/board-mop500.c
arch/arm/mach-ux500/board-mop500.c
+1
-1
arch/arm/mach-ux500/cpu-db8500.c
arch/arm/mach-ux500/cpu-db8500.c
+3
-3
arch/arm/mach-ux500/devices-common.c
arch/arm/mach-ux500/devices-common.c
+1
-2
arch/arm/mach-ux500/devices-common.h
arch/arm/mach-ux500/devices-common.h
+7
-1
arch/arm/plat-nomadik/include/plat/gpio-nomadik.h
arch/arm/plat-nomadik/include/plat/gpio-nomadik.h
+0
-102
drivers/pinctrl/pinctrl-nomadik-db8500.c
drivers/pinctrl/pinctrl-nomadik-db8500.c
+98
-6
drivers/pinctrl/pinctrl-nomadik-db8540.c
drivers/pinctrl/pinctrl-nomadik-db8540.c
+1
-0
drivers/pinctrl/pinctrl-nomadik.c
drivers/pinctrl/pinctrl-nomadik.c
+84
-31
drivers/pinctrl/pinctrl-nomadik.h
drivers/pinctrl/pinctrl-nomadik.h
+1
-1
include/linux/platform_data/pinctrl-nomadik.h
include/linux/platform_data/pinctrl-nomadik.h
+102
-9
No files found.
arch/arm/mach-nomadik/board-nhk8815.c
View file @
ae1cde8c
...
...
@@ -24,6 +24,7 @@
#include <linux/i2c.h>
#include <linux/io.h>
#include <linux/pinctrl/machine.h>
#include <linux/platform_data/pinctrl-nomadik.h>
#include <asm/hardware/vic.h>
#include <asm/sizes.h>
#include <asm/mach-types.h>
...
...
@@ -32,9 +33,7 @@
#include <asm/mach/flash.h>
#include <asm/mach/time.h>
#include <plat/gpio-nomadik.h>
#include <plat/mtu.h>
#include <plat/pincfg.h>
#include <linux/platform_data/mtd-nomadik-nand.h>
#include <mach/fsmc.h>
...
...
arch/arm/mach-nomadik/cpu-8815.c
View file @
ae1cde8c
...
...
@@ -26,8 +26,8 @@
#include <linux/irq.h>
#include <linux/dma-mapping.h>
#include <linux/platform_data/clk-nomadik.h>
#include <linux/platform_data/pinctrl-nomadik.h>
#include <plat/gpio-nomadik.h>
#include <mach/hardware.h>
#include <mach/irqs.h>
#include <asm/mach/map.h>
...
...
arch/arm/mach-nomadik/i2c-8815nhk.c
View file @
ae1cde8c
...
...
@@ -4,8 +4,7 @@
#include <linux/i2c-algo-bit.h>
#include <linux/i2c-gpio.h>
#include <linux/platform_device.h>
#include <plat/gpio-nomadik.h>
#include <plat/pincfg.h>
#include <linux/platform_data/pinctrl-nomadik.h>
/*
* There are two busses in the 8815NHK.
...
...
arch/arm/mach-ux500/board-mop500-audio.c
View file @
ae1cde8c
...
...
@@ -7,9 +7,8 @@
#include <linux/platform_device.h>
#include <linux/init.h>
#include <linux/gpio.h>
#include <linux/platform_data/pinctrl-nomadik.h>
#include <plat/gpio-nomadik.h>
#include <plat/pincfg.h>
#include <plat/ste_dma40.h>
#include <mach/devices.h>
...
...
arch/arm/mach-ux500/board-mop500-pins.c
View file @
ae1cde8c
...
...
@@ -9,10 +9,9 @@
#include <linux/bug.h>
#include <linux/string.h>
#include <linux/pinctrl/machine.h>
#include <linux/platform_data/pinctrl-nomadik.h>
#include <asm/mach-types.h>
#include <plat/pincfg.h>
#include <plat/gpio-nomadik.h>
#include <mach/hardware.h>
...
...
arch/arm/mach-ux500/board-mop500.c
View file @
ae1cde8c
...
...
@@ -37,13 +37,13 @@
#include <linux/of_platform.h>
#include <linux/leds.h>
#include <linux/pinctrl/consumer.h>
#include <linux/platform_data/pinctrl-nomadik.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/hardware/gic.h>
#include <plat/ste_dma40.h>
#include <plat/gpio-nomadik.h>
#include <mach/hardware.h>
#include <mach/setup.h>
...
...
arch/arm/mach-ux500/cpu-db8500.c
View file @
ae1cde8c
...
...
@@ -17,14 +17,14 @@
#include <linux/platform_device.h>
#include <linux/io.h>
#include <linux/mfd/abx500/ab8500.h>
#include <linux/platform_data/usb-musb-ux500.h>
#include <linux/platform_data/pinctrl-nomadik.h>
#include <asm/pmu.h>
#include <asm/mach/map.h>
#include <plat/gpio-nomadik.h>
#include <mach/hardware.h>
#include <mach/setup.h>
#include <mach/devices.h>
#include <linux/platform_data/usb-musb-ux500.h>
#include <mach/db8500-regs.h>
#include "devices-db8500.h"
...
...
@@ -158,7 +158,7 @@ static void __init db8500_add_gpios(struct device *parent)
dbx500_add_gpios
(
parent
,
ARRAY_AND_SIZE
(
db8500_gpio_base
),
IRQ_DB8500_GPIO0
,
&
pdata
);
dbx500_add_pinctrl
(
parent
,
"pinctrl-db8500"
);
dbx500_add_pinctrl
(
parent
,
"pinctrl-db8500"
,
U8500_PRCMU_BASE
);
}
static
int
usb_db8500_rx_dma_cfg
[]
=
{
...
...
arch/arm/mach-ux500/devices-common.c
View file @
ae1cde8c
...
...
@@ -11,8 +11,7 @@
#include <linux/irq.h>
#include <linux/slab.h>
#include <linux/platform_device.h>
#include <plat/gpio-nomadik.h>
#include <linux/platform_data/pinctrl-nomadik.h>
#include <mach/hardware.h>
...
...
arch/arm/mach-ux500/devices-common.h
View file @
ae1cde8c
...
...
@@ -129,12 +129,18 @@ void dbx500_add_gpios(struct device *parent, resource_size_t *base, int num,
int
irq
,
struct
nmk_gpio_platform_data
*
pdata
);
static
inline
void
dbx500_add_pinctrl
(
struct
device
*
parent
,
const
char
*
name
)
dbx500_add_pinctrl
(
struct
device
*
parent
,
const
char
*
name
,
resource_size_t
base
)
{
struct
resource
res
[]
=
{
DEFINE_RES_MEM
(
base
,
SZ_8K
),
};
struct
platform_device_info
pdevinfo
=
{
.
parent
=
parent
,
.
name
=
name
,
.
id
=
-
1
,
.
res
=
res
,
.
num_res
=
ARRAY_SIZE
(
res
),
};
platform_device_register_full
(
&
pdevinfo
);
...
...
arch/arm/plat-nomadik/include/plat/gpio-nomadik.h
deleted
100644 → 0
View file @
e59d969f
/*
* Structures and registers for GPIO access in the Nomadik SoC
*
* Copyright (C) 2008 STMicroelectronics
* Author: Prafulla WADASKAR <prafulla.wadaskar@st.com>
* Copyright (C) 2009 Alessandro Rubini <rubini@unipv.it>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef __PLAT_NOMADIK_GPIO
#define __PLAT_NOMADIK_GPIO
/*
* "nmk_gpio" and "NMK_GPIO" stand for "Nomadik GPIO", leaving
* the "gpio" namespace for generic and cross-machine functions
*/
/* 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
/* 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
#define NMK_GPIO_ALT_B 2
#define NMK_GPIO_ALT_C (NMK_GPIO_ALT_A | NMK_GPIO_ALT_B)
#define NMK_GPIO_ALT_CX_SHIFT 2
#define NMK_GPIO_ALT_C1 ((1<<NMK_GPIO_ALT_CX_SHIFT) | NMK_GPIO_ALT_C)
#define NMK_GPIO_ALT_C2 ((2<<NMK_GPIO_ALT_CX_SHIFT) | NMK_GPIO_ALT_C)
#define NMK_GPIO_ALT_C3 ((3<<NMK_GPIO_ALT_CX_SHIFT) | NMK_GPIO_ALT_C)
#define NMK_GPIO_ALT_C4 ((4<<NMK_GPIO_ALT_CX_SHIFT) | NMK_GPIO_ALT_C)
/* 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
,
};
extern
int
nmk_gpio_set_slpm
(
int
gpio
,
enum
nmk_gpio_slpm
mode
);
extern
int
nmk_gpio_set_pull
(
int
gpio
,
enum
nmk_gpio_pull
pull
);
#ifdef CONFIG_PINCTRL_NOMADIK
extern
int
nmk_gpio_set_mode
(
int
gpio
,
int
gpio_mode
);
#else
static
inline
int
nmk_gpio_set_mode
(
int
gpio
,
int
gpio_mode
)
{
return
-
ENODEV
;
}
#endif
extern
int
nmk_gpio_get_mode
(
int
gpio
);
extern
void
nmk_gpio_wakeups_suspend
(
void
);
extern
void
nmk_gpio_wakeups_resume
(
void
);
extern
void
nmk_gpio_clocks_enable
(
void
);
extern
void
nmk_gpio_clocks_disable
(
void
);
extern
void
nmk_gpio_read_pull
(
int
gpio_bank
,
u32
*
pull_up
);
/*
* Platform data to register a block: only the initial gpio/irq number.
*/
struct
nmk_gpio_platform_data
{
char
*
name
;
int
first_gpio
;
int
first_irq
;
int
num_gpio
;
u32
(
*
get_secondary_status
)(
unsigned
int
bank
);
void
(
*
set_ioforce
)(
bool
enable
);
bool
supports_sleepmode
;
};
#endif
/* __PLAT_NOMADIK_GPIO */
drivers/pinctrl/pinctrl-nomadik-db8500.c
View file @
ae1cde8c
...
...
@@ -600,14 +600,66 @@ static const unsigned usbsim_c_2_pins[] = { DB8500_PIN_AF8 };
static
const
unsigned
i2c3_c_2_pins
[]
=
{
DB8500_PIN_AG7
,
DB8500_PIN_AF7
};
/* Other C1 column */
static
const
unsigned
u2rx_oc1_1_pins
[]
=
{
DB8500_PIN_AB2
};
static
const
unsigned
stmape_oc1_1_pins
[]
=
{
DB8500_PIN_AA4
,
DB8500_PIN_Y4
,
DB8500_PIN_Y2
,
DB8500_PIN_AA2
,
DB8500_PIN_AA1
};
static
const
unsigned
remap0_oc1_1_pins
[]
=
{
DB8500_PIN_E1
};
static
const
unsigned
remap1_oc1_1_pins
[]
=
{
DB8500_PIN_E2
};
static
const
unsigned
ptma9_oc1_1_pins
[]
=
{
DB8500_PIN_G5
,
DB8500_PIN_G4
,
DB8500_PIN_H4
,
DB8500_PIN_H3
,
DB8500_PIN_J3
,
DB8500_PIN_H2
,
DB8500_PIN_J2
,
DB8500_PIN_H1
};
static
const
unsigned
kp_oc1_1_pins
[]
=
{
DB8500_PIN_C6
,
DB8500_PIN_B3
,
DB8500_PIN_C4
,
DB8500_PIN_E6
,
DB8500_PIN_A3
,
DB8500_PIN_B6
,
DB8500_PIN_D6
,
DB8500_PIN_B7
};
static
const
unsigned
rf_oc1_1_pins
[]
=
{
DB8500_PIN_D8
,
DB8500_PIN_D9
};
static
const
unsigned
hxclk_oc1_1_pins
[]
=
{
DB8500_PIN_D16
};
static
const
unsigned
uartmodrx_oc1_1_pins
[]
=
{
DB8500_PIN_B17
};
static
const
unsigned
uartmodtx_oc1_1_pins
[]
=
{
DB8500_PIN_C16
};
static
const
unsigned
stmmod_oc1_1_pins
[]
=
{
DB8500_PIN_C19
,
DB8500_PIN_C17
,
DB8500_PIN_A18
,
DB8500_PIN_C18
,
DB8500_PIN_B19
};
static
const
unsigned
hxgpio_oc1_1_pins
[]
=
{
DB8500_PIN_D21
,
DB8500_PIN_D20
,
DB8500_PIN_C20
,
DB8500_PIN_B21
,
DB8500_PIN_C21
,
DB8500_PIN_A22
,
DB8500_PIN_B24
,
DB8500_PIN_C22
};
static
const
unsigned
rf_oc1_2_pins
[]
=
{
DB8500_PIN_C23
,
DB8500_PIN_D23
};
static
const
unsigned
spi2_oc1_1_pins
[]
=
{
DB8500_PIN_AH13
,
DB8500_PIN_AG12
,
DB8500_PIN_AH12
,
DB8500_PIN_AH11
};
static
const
unsigned
spi2_oc1_2_pins
[]
=
{
DB8500_PIN_AH13
,
DB8500_PIN_AH12
,
DB8500_PIN_AH11
};
/* Other C2 column */
static
const
unsigned
sbag_oc2_1_pins
[]
=
{
DB8500_PIN_AA4
,
DB8500_PIN_AB2
,
DB8500_PIN_Y4
,
DB8500_PIN_Y2
,
DB8500_PIN_AA2
,
DB8500_PIN_AA1
};
static
const
unsigned
etmr4_oc2_1_pins
[]
=
{
DB8500_PIN_G5
,
DB8500_PIN_G4
,
DB8500_PIN_H4
,
DB8500_PIN_H3
,
DB8500_PIN_J3
,
DB8500_PIN_H2
,
DB8500_PIN_J2
,
DB8500_PIN_H1
};
static
const
unsigned
ptma9_oc2_1_pins
[]
=
{
DB8500_PIN_D17
,
DB8500_PIN_D16
,
DB8500_PIN_B17
,
DB8500_PIN_C16
,
DB8500_PIN_C19
,
DB8500_PIN_C17
,
DB8500_PIN_A18
,
DB8500_PIN_C18
,
DB8500_PIN_B19
,
DB8500_PIN_B20
,
DB8500_PIN_D21
,
DB8500_PIN_D20
,
DB8500_PIN_C20
,
DB8500_PIN_B21
,
DB8500_PIN_C21
,
DB8500_PIN_A22
,
DB8500_PIN_B24
,
DB8500_PIN_C22
};
/* Other C3 column */
static
const
unsigned
stmmod_oc3_1_pins
[]
=
{
DB8500_PIN_AB2
,
DB8500_PIN_W2
,
DB8500_PIN_W3
,
DB8500_PIN_V3
,
DB8500_PIN_V2
};
static
const
unsigned
stmmod_oc3_2_pins
[]
=
{
DB8500_PIN_G5
,
DB8500_PIN_G4
,
DB8500_PIN_H4
,
DB8500_PIN_H3
,
DB8500_PIN_J3
};
static
const
unsigned
uartmodrx_oc3_1_pins
[]
=
{
DB8500_PIN_H2
};
static
const
unsigned
uartmodtx_oc3_1_pins
[]
=
{
DB8500_PIN_J2
};
static
const
unsigned
etmr4_oc3_1_pins
[]
=
{
DB8500_PIN_D17
,
DB8500_PIN_D16
,
DB8500_PIN_B17
,
DB8500_PIN_C16
,
DB8500_PIN_C19
,
DB8500_PIN_C17
,
DB8500_PIN_A18
,
DB8500_PIN_C18
,
DB8500_PIN_B19
,
DB8500_PIN_B20
,
DB8500_PIN_D21
,
DB8500_PIN_D20
,
DB8500_PIN_C20
,
DB8500_PIN_B21
,
DB8500_PIN_C21
,
DB8500_PIN_A22
,
DB8500_PIN_B24
,
DB8500_PIN_C22
};
/* Other C4 column */
static
const
unsigned
sbag_oc4_1_pins
[]
=
{
DB8500_PIN_G5
,
DB8500_PIN_G4
,
DB8500_PIN_H4
,
DB8500_PIN_H3
,
DB8500_PIN_J3
,
DB8500_PIN_H1
};
static
const
unsigned
hwobs_oc4_1_pins
[]
=
{
DB8500_PIN_D17
,
DB8500_PIN_D16
,
DB8500_PIN_B17
,
DB8500_PIN_C16
,
DB8500_PIN_C19
,
DB8500_PIN_C17
,
DB8500_PIN_A18
,
DB8500_PIN_C18
,
DB8500_PIN_B19
,
DB8500_PIN_B20
,
DB8500_PIN_D21
,
DB8500_PIN_D20
,
DB8500_PIN_C20
,
DB8500_PIN_B21
,
DB8500_PIN_C21
,
DB8500_PIN_A22
,
DB8500_PIN_B24
,
DB8500_PIN_C22
};
#define DB8500_PIN_GROUP(a,b) { .name = #a, .pins = a##_pins, \
.npins = ARRAY_SIZE(a##_pins), .altsetting = b }
...
...
@@ -639,6 +691,7 @@ static const struct nmk_pingroup nmk_db8500_groups[] = {
DB8500_PIN_GROUP
(
i2c0_a_1
,
NMK_GPIO_ALT_A
),
DB8500_PIN_GROUP
(
ipgpio0_a_1
,
NMK_GPIO_ALT_A
),
DB8500_PIN_GROUP
(
ipgpio1_a_1
,
NMK_GPIO_ALT_A
),
DB8500_PIN_GROUP
(
kp_a_2
,
NMK_GPIO_ALT_A
),
DB8500_PIN_GROUP
(
msp2sck_a_1
,
NMK_GPIO_ALT_A
),
DB8500_PIN_GROUP
(
msp2_a_1
,
NMK_GPIO_ALT_A
),
DB8500_PIN_GROUP
(
mc4_a_1
,
NMK_GPIO_ALT_A
),
...
...
@@ -726,9 +779,34 @@ static const struct nmk_pingroup nmk_db8500_groups[] = {
DB8500_PIN_GROUP
(
usbsim_c_2
,
NMK_GPIO_ALT_C
),
DB8500_PIN_GROUP
(
i2c3_c_2
,
NMK_GPIO_ALT_C
),
/* Other alt C1 column */
DB8500_PIN_GROUP
(
u2rx_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
stmape_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
remap0_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
remap1_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
ptma9_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
kp_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
rf_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
hxclk_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
uartmodrx_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
uartmodtx_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
stmmod_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
hxgpio_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
rf_oc1_2
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
spi2_oc1_1
,
NMK_GPIO_ALT_C1
),
DB8500_PIN_GROUP
(
spi2_oc1_2
,
NMK_GPIO_ALT_C1
),
/* Other alt C2 column */
DB8500_PIN_GROUP
(
sbag_oc2_1
,
NMK_GPIO_ALT_C2
),
DB8500_PIN_GROUP
(
etmr4_oc2_1
,
NMK_GPIO_ALT_C2
),
DB8500_PIN_GROUP
(
ptma9_oc2_1
,
NMK_GPIO_ALT_C2
),
/* Other alt C3 column */
DB8500_PIN_GROUP
(
stmmod_oc3_1
,
NMK_GPIO_ALT_C3
),
DB8500_PIN_GROUP
(
stmmod_oc3_2
,
NMK_GPIO_ALT_C3
),
DB8500_PIN_GROUP
(
uartmodrx_oc3_1
,
NMK_GPIO_ALT_C3
),
DB8500_PIN_GROUP
(
uartmodtx_oc3_1
,
NMK_GPIO_ALT_C3
),
DB8500_PIN_GROUP
(
etmr4_oc3_1
,
NMK_GPIO_ALT_C3
),
/* Other alt C4 column */
DB8500_PIN_GROUP
(
sbag_oc4_1
,
NMK_GPIO_ALT_C4
),
DB8500_PIN_GROUP
(
hwobs_oc4_1
,
NMK_GPIO_ALT_C4
),
};
/* We use this macro to define the groups applicable to a function */
...
...
@@ -742,7 +820,7 @@ DB8500_FUNC_GROUPS(u1, "u1rxtx_a_1", "u1ctsrts_a_1");
* only available on two pins in alternative function C
*/
DB8500_FUNC_GROUPS
(
u2
,
"u2rxtx_b_1"
,
"u2rxtx_c_1"
,
"u2ctsrts_c_1"
,
"u2rxtx_c_2"
,
"u2rxtx_c_3"
);
"u2rxtx_c_2"
,
"u2rxtx_c_3"
,
"u2rx_oc1_1"
);
DB8500_FUNC_GROUPS
(
ipi2c
,
"ipi2c_a_1"
,
"ipi2c_a_2"
);
/*
* MSP0 can only be on a certain set of pins, but the TX/RX pins can be
...
...
@@ -757,7 +835,7 @@ DB8500_FUNC_GROUPS(msp1, "msp1txrx_a_1", "msp1_a_1", "msp1txrx_b_1");
DB8500_FUNC_GROUPS
(
lcdb
,
"lcdb_a_1"
);
DB8500_FUNC_GROUPS
(
lcd
,
"lcdvsi0_a_1"
,
"lcdvsi1_a_1"
,
"lcd_d0_d7_a_1"
,
"lcd_d8_d11_a_1"
,
"lcd_d12_d23_a_1"
,
"lcd_b_1"
);
DB8500_FUNC_GROUPS
(
kp
,
"kp_a_1"
,
"kp_b_1"
,
"kp_b_2"
,
"kp_c_1"
,
"kp_oc1_1"
);
DB8500_FUNC_GROUPS
(
kp
,
"kp_a_1"
,
"kp_
a_2"
,
"kp_
b_1"
,
"kp_b_2"
,
"kp_c_1"
,
"kp_oc1_1"
);
DB8500_FUNC_GROUPS
(
mc2
,
"mc2_a_1"
,
"mc2rstn_c_1"
);
DB8500_FUNC_GROUPS
(
ssp1
,
"ssp1_a_1"
);
DB8500_FUNC_GROUPS
(
ssp0
,
"ssp0_a_1"
);
...
...
@@ -784,8 +862,10 @@ DB8500_FUNC_GROUPS(i2c2, "i2c2_b_1", "i2c2_b_2");
* so select one of each.
*/
DB8500_FUNC_GROUPS
(
uartmod
,
"uartmodtx_b_1"
,
"uartmodrx_b_1"
,
"uartmodrx_b_2"
,
"uartmodrx_c_1"
,
"uartmod_tx_c_1"
);
DB8500_FUNC_GROUPS
(
stmmod
,
"stmmod_b_1"
,
"stmmod_c_1"
);
"uartmodrx_c_1"
,
"uartmod_tx_c_1"
,
"uartmodrx_oc1_1"
,
"uartmodtx_oc1_1"
,
"uartmodrx_oc3_1"
,
"uartmodtx_oc3_1"
);
DB8500_FUNC_GROUPS
(
stmmod
,
"stmmod_b_1"
,
"stmmod_c_1"
,
"stmmod_oc1_1"
,
"stmmod_oc3_1"
,
"stmmod_oc3_2"
);
DB8500_FUNC_GROUPS
(
spi3
,
"spi3_b_1"
);
/* Select between CS0 on alt B or PS1 on alt C */
DB8500_FUNC_GROUPS
(
sm
,
"sm_b_1"
,
"smcs0_b_1"
,
"smcs1_b_1"
,
"smcleale_c_1"
,
...
...
@@ -799,13 +879,19 @@ DB8500_FUNC_GROUPS(ipjtag, "ipjtag_c_1");
DB8500_FUNC_GROUPS
(
slim0
,
"slim0_c_1"
);
DB8500_FUNC_GROUPS
(
ms
,
"ms_c_1"
);
DB8500_FUNC_GROUPS
(
iptrigout
,
"iptrigout_c_1"
);
DB8500_FUNC_GROUPS
(
stmape
,
"stmape_c_1"
,
"stmape_c_2"
);
DB8500_FUNC_GROUPS
(
stmape
,
"stmape_c_1"
,
"stmape_c_2"
,
"stmape_oc1_1"
);
DB8500_FUNC_GROUPS
(
mc5
,
"mc5_c_1"
);
DB8500_FUNC_GROUPS
(
usbsim
,
"usbsim_c_1"
,
"usbsim_c_2"
);
DB8500_FUNC_GROUPS
(
i2c3
,
"i2c3_c_1"
,
"i2c3_c_2"
);
DB8500_FUNC_GROUPS
(
spi0
,
"spi0_c_1"
);
DB8500_FUNC_GROUPS
(
spi2
,
"spi2_oc1_1"
,
"spi2_oc1_2"
);
DB8500_FUNC_GROUPS
(
remap
,
"remap0_oc1_1"
,
"remap1_oc1_1"
);
DB8500_FUNC_GROUPS
(
sbag
,
"sbag_oc2_1"
,
"sbag_oc4_1"
);
DB8500_FUNC_GROUPS
(
ptm
,
"ptma9_oc1_1"
,
"ptma9_oc2_1"
);
DB8500_FUNC_GROUPS
(
rf
,
"rf_oc1_1"
,
"rf_oc1_2"
);
DB8500_FUNC_GROUPS
(
hx
,
"hxclk_oc1_1"
,
"hxgpio_oc1_1"
);
DB8500_FUNC_GROUPS
(
etm
,
"etmr4_oc2_1"
,
"etmr4_oc3_1"
);
DB8500_FUNC_GROUPS
(
hwobs
,
"hwobs_oc4_1"
);
#define FUNCTION(fname) \
{ \
.name = #fname, \
...
...
@@ -858,6 +944,12 @@ static const struct nmk_function nmk_db8500_functions[] = {
FUNCTION
(
i2c3
),
FUNCTION
(
spi0
),
FUNCTION
(
spi2
),
FUNCTION
(
remap
),
FUNCTION
(
ptm
),
FUNCTION
(
rf
),
FUNCTION
(
hx
),
FUNCTION
(
etm
),
FUNCTION
(
hwobs
),
};
static
const
struct
prcm_gpiocr_altcx_pin_desc
db8500_altcx_pins
[]
=
{
...
...
drivers/pinctrl/pinctrl-nomadik-db8540.c
View file @
ae1cde8c
...
...
@@ -822,6 +822,7 @@ static const struct nmk_pingroup nmk_db8540_groups[] = {
DB8540_PIN_GROUP
(
modaccuarttxrx_oc4_1
,
NMK_GPIO_ALT_C4
),
DB8540_PIN_GROUP
(
modaccuartrtscts_oc4_1
,
NMK_GPIO_ALT_C4
),
DB8540_PIN_GROUP
(
stmmod_oc4_1
,
NMK_GPIO_ALT_C4
),
DB8540_PIN_GROUP
(
moduartstmmux_oc4_1
,
NMK_GPIO_ALT_C4
),
};
...
...
drivers/pinctrl/pinctrl-nomadik.c
View file @
ae1cde8c
...
...
@@ -30,26 +30,10 @@
#include <linux/pinctrl/pinconf.h>
/* Since we request GPIOs from ourself */
#include <linux/pinctrl/consumer.h>
/*
* For the U8500 archs, use the PRCMU register interface, for the older
* Nomadik, provide some stubs. The functions using these will only be
* called on the U8500 series.
*/
#ifdef CONFIG_ARCH_U8500
#include <linux/mfd/dbx500-prcmu.h>
#else
static
inline
u32
prcmu_read
(
unsigned
int
reg
)
{
return
0
;
}
static
inline
void
prcmu_write
(
unsigned
int
reg
,
u32
value
)
{}
static
inline
void
prcmu_write_masked
(
unsigned
int
reg
,
u32
mask
,
u32
value
)
{}
#endif
#include <linux/platform_data/pinctrl-nomadik.h>
#include <asm/mach/irq.h>
#include <plat/pincfg.h>
#include <plat/gpio-nomadik.h>
#include "pinctrl-nomadik.h"
/*
...
...
@@ -60,8 +44,6 @@ static inline void prcmu_write_masked(unsigned int reg, u32 mask, u32 value) {}
* Symbols in this file are called "nmk_gpio" for "nomadik gpio"
*/
#define NMK_GPIO_PER_CHIP 32
struct
nmk_gpio_chip
{
struct
gpio_chip
chip
;
struct
irq_domain
*
domain
;
...
...
@@ -86,10 +68,18 @@ struct nmk_gpio_chip {
u32
lowemi
;
};
/**
* struct nmk_pinctrl - state container for the Nomadik pin controller
* @dev: containing device pointer
* @pctl: corresponding pin controller device
* @soc: SoC data for this specific chip
* @prcm_base: PRCM register range virtual base
*/
struct
nmk_pinctrl
{
struct
device
*
dev
;
struct
pinctrl_dev
*
pctl
;
const
struct
nmk_pinctrl_soc_data
*
soc
;
void
__iomem
*
prcm_base
;
};
static
struct
nmk_gpio_chip
*
...
...
@@ -251,6 +241,15 @@ nmk_gpio_disable_lazy_irq(struct nmk_gpio_chip *nmk_chip, unsigned offset)
dev_dbg
(
nmk_chip
->
chip
.
dev
,
"%d: clearing interrupt mask
\n
"
,
gpio
);
}
static
void
nmk_write_masked
(
void
__iomem
*
reg
,
u32
mask
,
u32
value
)
{
u32
val
;
val
=
readl
(
reg
);
val
=
((
val
&
~
mask
)
|
(
value
&
mask
));
writel
(
val
,
reg
);
}
static
void
nmk_prcm_altcx_set_mode
(
struct
nmk_pinctrl
*
npct
,
unsigned
offset
,
unsigned
alt_num
)
{
...
...
@@ -289,8 +288,8 @@ static void nmk_prcm_altcx_set_mode(struct nmk_pinctrl *npct,
if
(
pin_desc
->
altcx
[
i
].
used
==
true
)
{
reg
=
gpiocr_regs
[
pin_desc
->
altcx
[
i
].
reg_index
];
bit
=
pin_desc
->
altcx
[
i
].
control_bit
;
if
(
prcmu_read
(
reg
)
&
BIT
(
bit
))
{
prcmu_write_masked
(
reg
,
BIT
(
bit
),
0
);
if
(
readl
(
npct
->
prcm_base
+
reg
)
&
BIT
(
bit
))
{
nmk_write_masked
(
npct
->
prcm_base
+
reg
,
BIT
(
bit
),
0
);
dev_dbg
(
npct
->
dev
,
"PRCM GPIOCR: pin %i: alternate-C%i has been disabled
\n
"
,
offset
,
i
+
1
);
...
...
@@ -318,8 +317,8 @@ static void nmk_prcm_altcx_set_mode(struct nmk_pinctrl *npct,
if
(
pin_desc
->
altcx
[
i
].
used
==
true
)
{
reg
=
gpiocr_regs
[
pin_desc
->
altcx
[
i
].
reg_index
];
bit
=
pin_desc
->
altcx
[
i
].
control_bit
;
if
(
prcmu_read
(
reg
)
&
BIT
(
bit
))
{
prcmu_write_masked
(
reg
,
BIT
(
bit
),
0
);
if
(
readl
(
npct
->
prcm_base
+
reg
)
&
BIT
(
bit
))
{
nmk_write_masked
(
npct
->
prcm_base
+
reg
,
BIT
(
bit
),
0
);
dev_dbg
(
npct
->
dev
,
"PRCM GPIOCR: pin %i: alternate-C%i has been disabled
\n
"
,
offset
,
i
+
1
);
...
...
@@ -331,7 +330,7 @@ static void nmk_prcm_altcx_set_mode(struct nmk_pinctrl *npct,
bit
=
pin_desc
->
altcx
[
alt_index
].
control_bit
;
dev_dbg
(
npct
->
dev
,
"PRCM GPIOCR: pin %i: alternate-C%i has been selected
\n
"
,
offset
,
alt_index
+
1
);
prcmu_write_masked
(
reg
,
BIT
(
bit
),
BIT
(
bit
));
nmk_write_masked
(
npct
->
prcm_base
+
reg
,
BIT
(
bit
),
BIT
(
bit
));
}
static
void
__nmk_config_pin
(
struct
nmk_gpio_chip
*
nmk_chip
,
unsigned
offset
,
...
...
@@ -536,7 +535,7 @@ static int __nmk_config_pins(pin_cfg_t *cfgs, int num, bool sleep)
* and its sleep mode based on the specified configuration. The @cfg is
* usually one of the SoC specific macros defined in mach/<soc>-pins.h. These
* are constructed using, and can be further enhanced with, the macros in
*
plat/pincfg.h.
*
<linux/platform_data/pinctrl-nomadik.h>
*
* If a pin's mode is set to GPIO, it is configured as an input to avoid
* side-effects. The gpio can be manipulated later using standard GPIO API
...
...
@@ -675,6 +674,35 @@ int nmk_gpio_set_mode(int gpio, int gpio_mode)
}
EXPORT_SYMBOL
(
nmk_gpio_set_mode
);
static
int
nmk_prcm_gpiocr_get_mode
(
struct
pinctrl_dev
*
pctldev
,
int
gpio
)
{
int
i
;
u16
reg
;
u8
bit
;
struct
nmk_pinctrl
*
npct
=
pinctrl_dev_get_drvdata
(
pctldev
);
const
struct
prcm_gpiocr_altcx_pin_desc
*
pin_desc
;
const
u16
*
gpiocr_regs
;
for
(
i
=
0
;
i
<
npct
->
soc
->
npins_altcx
;
i
++
)
{
if
(
npct
->
soc
->
altcx_pins
[
i
].
pin
==
gpio
)
break
;
}
if
(
i
==
npct
->
soc
->
npins_altcx
)
return
NMK_GPIO_ALT_C
;
pin_desc
=
npct
->
soc
->
altcx_pins
+
i
;
gpiocr_regs
=
npct
->
soc
->
prcm_gpiocr_registers
;
for
(
i
=
0
;
i
<
PRCM_IDX_GPIOCR_ALTC_MAX
;
i
++
)
{
if
(
pin_desc
->
altcx
[
i
].
used
==
true
)
{
reg
=
gpiocr_regs
[
pin_desc
->
altcx
[
i
].
reg_index
];
bit
=
pin_desc
->
altcx
[
i
].
control_bit
;
if
(
readl
(
npct
->
prcm_base
+
reg
)
&
BIT
(
bit
))
return
NMK_GPIO_ALT_C
+
i
+
1
;
}
}
return
NMK_GPIO_ALT_C
;
}
int
nmk_gpio_get_mode
(
int
gpio
)
{
struct
nmk_gpio_chip
*
nmk_chip
;
...
...
@@ -1063,8 +1091,9 @@ static int nmk_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
#include <linux/seq_file.h>
static
void
nmk_gpio_dbg_show_one
(
struct
seq_file
*
s
,
struct
gpio_chip
*
chip
,
unsigned
offset
,
unsigned
gpio
)
static
void
nmk_gpio_dbg_show_one
(
struct
seq_file
*
s
,
struct
pinctrl_dev
*
pctldev
,
struct
gpio_chip
*
chip
,
unsigned
offset
,
unsigned
gpio
)
{
const
char
*
label
=
gpiochip_is_requested
(
chip
,
offset
);
struct
nmk_gpio_chip
*
nmk_chip
=
...
...
@@ -1078,12 +1107,18 @@ static void nmk_gpio_dbg_show_one(struct seq_file *s, struct gpio_chip *chip,
[
NMK_GPIO_ALT_A
]
=
"altA"
,
[
NMK_GPIO_ALT_B
]
=
"altB"
,
[
NMK_GPIO_ALT_C
]
=
"altC"
,
[
NMK_GPIO_ALT_C
+
1
]
=
"altC1"
,
[
NMK_GPIO_ALT_C
+
2
]
=
"altC2"
,
[
NMK_GPIO_ALT_C
+
3
]
=
"altC3"
,
[
NMK_GPIO_ALT_C
+
4
]
=
"altC4"
,
};
clk_enable
(
nmk_chip
->
clk
);
is_out
=
!!
(
readl
(
nmk_chip
->
addr
+
NMK_GPIO_DIR
)
&
bit
);
pull
=
!
(
readl
(
nmk_chip
->
addr
+
NMK_GPIO_PDIS
)
&
bit
);
mode
=
nmk_gpio_get_mode
(
gpio
);
if
((
mode
==
NMK_GPIO_ALT_C
)
&&
pctldev
)
mode
=
nmk_prcm_gpiocr_get_mode
(
pctldev
,
gpio
);
seq_printf
(
s
,
" gpio-%-3d (%-20.20s) %s %s %s %s"
,
gpio
,
label
?:
"(none)"
,
...
...
@@ -1127,13 +1162,14 @@ static void nmk_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
unsigned
gpio
=
chip
->
base
;
for
(
i
=
0
;
i
<
chip
->
ngpio
;
i
++
,
gpio
++
)
{
nmk_gpio_dbg_show_one
(
s
,
chip
,
i
,
gpio
);
nmk_gpio_dbg_show_one
(
s
,
NULL
,
chip
,
i
,
gpio
);
seq_printf
(
s
,
"
\n
"
);
}
}
#else
static
inline
void
nmk_gpio_dbg_show_one
(
struct
seq_file
*
s
,
struct
pinctrl_dev
*
pctldev
,
struct
gpio_chip
*
chip
,
unsigned
offset
,
unsigned
gpio
)
{
...
...
@@ -1464,7 +1500,7 @@ static void nmk_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
return
;
}
chip
=
range
->
gc
;
nmk_gpio_dbg_show_one
(
s
,
chip
,
offset
-
chip
->
base
,
offset
);
nmk_gpio_dbg_show_one
(
s
,
pctldev
,
chip
,
offset
-
chip
->
base
,
offset
);
}
static
struct
pinctrl_ops
nmk_pinctrl_ops
=
{
...
...
@@ -1818,6 +1854,7 @@ static int __devinit nmk_pinctrl_probe(struct platform_device *pdev)
const
struct
platform_device_id
*
platid
=
platform_get_device_id
(
pdev
);
struct
device_node
*
np
=
pdev
->
dev
.
of_node
;
struct
nmk_pinctrl
*
npct
;
struct
resource
*
res
;
unsigned
int
version
=
0
;
int
i
;
...
...
@@ -1839,22 +1876,37 @@ static int __devinit nmk_pinctrl_probe(struct platform_device *pdev)
if
(
version
==
PINCTRL_NMK_DB8540
)
nmk_pinctrl_db8540_init
(
&
npct
->
soc
);
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
if
(
res
)
{
npct
->
prcm_base
=
devm_ioremap
(
&
pdev
->
dev
,
res
->
start
,
resource_size
(
res
));
if
(
!
npct
->
prcm_base
)
{
dev_err
(
&
pdev
->
dev
,
"failed to ioremap PRCM registers
\n
"
);
return
-
ENOMEM
;
}
}
else
{
dev_info
(
&
pdev
->
dev
,
"No PRCM base, assume no ALT-Cx control is available
\n
"
);
}
/*
* We need all the GPIO drivers to probe FIRST, or we will not be able
* to obtain references to the struct gpio_chip * for them, and we
* need this to proceed.
*/
for
(
i
=
0
;
i
<
npct
->
soc
->
gpio_num_ranges
;
i
++
)
{
if
(
!
nmk_gpio_chips
[
i
])
{
if
(
!
nmk_gpio_chips
[
npct
->
soc
->
gpio_ranges
[
i
].
id
])
{
dev_warn
(
&
pdev
->
dev
,
"GPIO chip %d not registered yet
\n
"
,
i
);
return
-
EPROBE_DEFER
;
}
npct
->
soc
->
gpio_ranges
[
i
].
gc
=
&
nmk_gpio_chips
[
i
]
->
chip
;
npct
->
soc
->
gpio_ranges
[
i
].
gc
=
&
nmk_gpio_chips
[
npct
->
soc
->
gpio_ranges
[
i
].
id
]
->
chip
;
}
nmk_pinctrl_desc
.
pins
=
npct
->
soc
->
pins
;
nmk_pinctrl_desc
.
npins
=
npct
->
soc
->
npins
;
npct
->
dev
=
&
pdev
->
dev
;
npct
->
pctl
=
pinctrl_register
(
&
nmk_pinctrl_desc
,
&
pdev
->
dev
,
npct
);
if
(
!
npct
->
pctl
)
{
dev_err
(
&
pdev
->
dev
,
"could not register Nomadik pinctrl driver
\n
"
);
...
...
@@ -1889,6 +1941,7 @@ static const struct platform_device_id nmk_pinctrl_id[] = {
{
"pinctrl-stn8815"
,
PINCTRL_NMK_STN8815
},
{
"pinctrl-db8500"
,
PINCTRL_NMK_DB8500
},
{
"pinctrl-db8540"
,
PINCTRL_NMK_DB8540
},
{
}
};
static
struct
platform_driver
nmk_pinctrl_driver
=
{
...
...
drivers/pinctrl/pinctrl-nomadik.h
View file @
ae1cde8c
#ifndef PINCTRL_PINCTRL_NOMADIK_H
#define PINCTRL_PINCTRL_NOMADIK_H
#include <
plat/gpio
-nomadik.h>
#include <
linux/platform_data/pinctrl
-nomadik.h>
/* Package definitions */
#define PINCTRL_NMK_STN8815 0
...
...
arch/arm/plat-nomadik/include/plat/pincfg
.h
→
include/linux/platform_data/pinctrl-nomadik
.h
View file @
ae1cde8c
/*
*
Copyright (C) ST-Ericsson SA 2010
*
Structures and registers for GPIO access in the Nomadik SoC
*
* License terms: GNU General Public License, version 2
* Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
* Copyright (C) 2008 STMicroelectronics
* Author: Prafulla WADASKAR <prafulla.wadaskar@st.com>
* Copyright (C) 2009 Alessandro Rubini <rubini@unipv.it>
*
*
Based on arch/arm/mach-pxa/include/mach/mfp.h:
*
Copyright (C) 2007 Marvell International Ltd.
*
eric miao <eric.miao@marvell.com>
*
This program is free software; you can redistribute it and/or modify
*
it under the terms of the GNU General Public License version 2 as
*
published by the Free Software Foundation.
*/
#ifndef __PLAT_
PINCFG_H
#define __PLAT_
PINCFG_H
#ifndef __PLAT_
NOMADIK_GPIO
#define __PLAT_
NOMADIK_GPIO
/*
* pin configurations are represented by 32-bit integers:
...
...
@@ -166,8 +167,100 @@ typedef unsigned long pin_cfg_t;
(PIN_CFG_DEFAULT |\
(PIN_NUM(num) | PIN_##alt | PIN_OUTPUT_##val))
/*
* "nmk_gpio" and "NMK_GPIO" stand for "Nomadik GPIO", leaving
* the "gpio" namespace for generic and cross-machine functions
*/
#define GPIO_BLOCK_SHIFT 5
#define NMK_GPIO_PER_CHIP (1 << GPIO_BLOCK_SHIFT)
/* 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
/* 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
#define NMK_GPIO_ALT_B 2
#define NMK_GPIO_ALT_C (NMK_GPIO_ALT_A | NMK_GPIO_ALT_B)
#define NMK_GPIO_ALT_CX_SHIFT 2
#define NMK_GPIO_ALT_C1 ((1<<NMK_GPIO_ALT_CX_SHIFT) | NMK_GPIO_ALT_C)
#define NMK_GPIO_ALT_C2 ((2<<NMK_GPIO_ALT_CX_SHIFT) | NMK_GPIO_ALT_C)
#define NMK_GPIO_ALT_C3 ((3<<NMK_GPIO_ALT_CX_SHIFT) | NMK_GPIO_ALT_C)
#define NMK_GPIO_ALT_C4 ((4<<NMK_GPIO_ALT_CX_SHIFT) | NMK_GPIO_ALT_C)
/* 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
,
};
/* Older deprecated pin config API that should go away soon */
extern
int
nmk_config_pin
(
pin_cfg_t
cfg
,
bool
sleep
);
extern
int
nmk_config_pins
(
pin_cfg_t
*
cfgs
,
int
num
);
extern
int
nmk_config_pins_sleep
(
pin_cfg_t
*
cfgs
,
int
num
);
extern
int
nmk_gpio_set_slpm
(
int
gpio
,
enum
nmk_gpio_slpm
mode
);
extern
int
nmk_gpio_set_pull
(
int
gpio
,
enum
nmk_gpio_pull
pull
);
#ifdef CONFIG_PINCTRL_NOMADIK
extern
int
nmk_gpio_set_mode
(
int
gpio
,
int
gpio_mode
);
#else
static
inline
int
nmk_gpio_set_mode
(
int
gpio
,
int
gpio_mode
)
{
return
-
ENODEV
;
}
#endif
extern
int
nmk_gpio_get_mode
(
int
gpio
);
extern
void
nmk_gpio_wakeups_suspend
(
void
);
extern
void
nmk_gpio_wakeups_resume
(
void
);
extern
void
nmk_gpio_clocks_enable
(
void
);
extern
void
nmk_gpio_clocks_disable
(
void
);
extern
void
nmk_gpio_read_pull
(
int
gpio_bank
,
u32
*
pull_up
);
/*
* Platform data to register a block: only the initial gpio/irq number.
*/
struct
nmk_gpio_platform_data
{
char
*
name
;
int
first_gpio
;
int
first_irq
;
int
num_gpio
;
u32
(
*
get_secondary_status
)(
unsigned
int
bank
);
void
(
*
set_ioforce
)(
bool
enable
);
bool
supports_sleepmode
;
};
#endif
/* __PLAT_NOMADIK_GPIO */
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