Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
ae1cde8c
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
ae1cde8c
编写于
11月 11, 2012
作者:
L
Linus Walleij
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'nomadik' into devel
上级
e59d969f
9b472600
变更
15
隐藏空白更改
内联
并排
Showing
15 changed file
with
303 addition
and
165 deletion
+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
未找到文件。
arch/arm/mach-nomadik/board-nhk8815.c
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
已删除
100644 → 0
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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 */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录