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
cfa8b3f5
Commit
cfa8b3f5
authored
Sep 23, 2013
by
Linus Walleij
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'devel' into for-next
parents
81d36c4f
741ecef6
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
2482 additions
and
144 deletions
+2482
-144
arch/blackfin/Kconfig
arch/blackfin/Kconfig
+11
-0
arch/blackfin/include/asm/gpio.h
arch/blackfin/include/asm/gpio.h
+20
-137
arch/blackfin/include/asm/portmux.h
arch/blackfin/include/asm/portmux.h
+17
-2
arch/blackfin/kernel/Makefile
arch/blackfin/kernel/Makefile
+2
-1
arch/blackfin/mach-bf548/include/mach/portmux.h
arch/blackfin/mach-bf548/include/mach/portmux.h
+0
-2
arch/blackfin/mach-bf609/include/mach/portmux.h
arch/blackfin/mach-bf609/include/mach/portmux.h
+0
-2
drivers/pinctrl/Kconfig
drivers/pinctrl/Kconfig
+18
-0
drivers/pinctrl/Makefile
drivers/pinctrl/Makefile
+3
-0
drivers/pinctrl/pinctrl-adi2-bf54x.c
drivers/pinctrl/pinctrl-adi2-bf54x.c
+592
-0
drivers/pinctrl/pinctrl-adi2-bf60x.c
drivers/pinctrl/pinctrl-adi2-bf60x.c
+521
-0
drivers/pinctrl/pinctrl-adi2.c
drivers/pinctrl/pinctrl-adi2.c
+1183
-0
drivers/pinctrl/pinctrl-adi2.h
drivers/pinctrl/pinctrl-adi2.h
+75
-0
include/linux/platform_data/pinctrl-adi2.h
include/linux/platform_data/pinctrl-adi2.h
+40
-0
No files found.
arch/blackfin/Kconfig
View file @
cfa8b3f5
...
...
@@ -52,6 +52,9 @@ config GENERIC_BUG
config ZONE_DMA
def_bool y
config GENERIC_GPIO
def_bool y
config FORCE_MAX_ZONEORDER
int
default "14"
...
...
@@ -317,6 +320,14 @@ config BF53x
depends on (BF531 || BF532 || BF533 || BF534 || BF536 || BF537)
default y
config GPIO_ADI
def_bool y
depends on (BF51x || BF52x || BF53x || BF538 || BF539 || BF561)
config PINCTRL
def_bool y
depends on BF54x || BF60x
config MEM_MT48LC64M4A2FB_7E
bool
depends on (BFIN533_STAMP)
...
...
arch/blackfin/include/asm/gpio.h
View file @
cfa8b3f5
...
...
@@ -25,8 +25,12 @@
#ifndef __ASSEMBLY__
#ifndef CONFIG_PINCTRL
#include <linux/compiler.h>
#include <linux/gpio.h>
#include <asm/blackfin.h>
#include <asm/portmux.h>
#include <asm/irq_handler.h>
/***********************************************************
*
...
...
@@ -45,7 +49,6 @@
* MODIFICATION HISTORY :
**************************************************************/
#if !BFIN_GPIO_PINT
void
set_gpio_dir
(
unsigned
,
unsigned
short
);
void
set_gpio_inen
(
unsigned
,
unsigned
short
);
void
set_gpio_polar
(
unsigned
,
unsigned
short
);
...
...
@@ -115,7 +118,6 @@ struct gpio_port_t {
unsigned
short
dummy16
;
unsigned
short
inen
;
};
#endif
#ifdef BFIN_SPECIAL_GPIO_BANKS
void
bfin_special_gpio_free
(
unsigned
gpio
);
...
...
@@ -127,25 +129,21 @@ void bfin_special_gpio_pm_hibernate_suspend(void);
#endif
#ifdef CONFIG_PM
int
bfin_pm_standby_ctrl
(
unsigned
ctrl
);
void
bfin_gpio_pm_hibernate_restore
(
void
);
void
bfin_gpio_pm_hibernate_suspend
(
void
);
int
bfin_gpio_pm_wakeup_ctrl
(
unsigned
gpio
,
unsigned
ctrl
);
int
bfin_gpio_pm_standby_ctrl
(
unsigned
ctrl
);
static
inline
int
bfin_pm_standby_setup
(
void
)
{
return
bfin_pm_standby_ctrl
(
1
);
return
bfin_
gpio_
pm_standby_ctrl
(
1
);
}
static
inline
void
bfin_pm_standby_restore
(
void
)
{
bfin_pm_standby_ctrl
(
0
);
bfin_
gpio_
pm_standby_ctrl
(
0
);
}
void
bfin_gpio_pm_hibernate_restore
(
void
);
void
bfin_gpio_pm_hibernate_suspend
(
void
);
void
bfin_pint_suspend
(
void
);
void
bfin_pint_resume
(
void
);
# if !BFIN_GPIO_PINT
int
gpio_pm_wakeup_ctrl
(
unsigned
gpio
,
unsigned
ctrl
);
struct
gpio_port_s
{
unsigned
short
data
;
...
...
@@ -161,7 +159,6 @@ struct gpio_port_s {
unsigned
short
reserved
;
unsigned
short
mux
;
};
# endif
#endif
/*CONFIG_PM*/
/***********************************************************
...
...
@@ -178,36 +175,29 @@ struct gpio_port_s {
*************************************************************
* MODIFICATION HISTORY :
**************************************************************/
int
bfin_gpio_request
(
unsigned
gpio
,
const
char
*
label
);
void
bfin_gpio_free
(
unsigned
gpio
);
int
bfin_gpio_irq_request
(
unsigned
gpio
,
const
char
*
label
);
void
bfin_gpio_irq_free
(
unsigned
gpio
);
int
bfin_gpio_direction_input
(
unsigned
gpio
);
int
bfin_gpio_direction_output
(
unsigned
gpio
,
int
value
);
int
bfin_gpio_get_value
(
unsigned
gpio
);
void
bfin_gpio_set_value
(
unsigned
gpio
,
int
value
);
void
bfin_gpio_irq_prepare
(
unsigned
gpio
);
static
inline
int
irq_to_gpio
(
unsigned
irq
)
{
return
irq
-
GPIO_IRQ_BASE
;
}
#endif
/* CONFIG_PINCTRL */
#include <asm/irq.h>
#include <asm/errno.h>
#ifdef CONFIG_GPIOLIB
#include <asm-generic/gpio.h>
/* cansleep wrappers */
static
inline
int
gpio_get_value
(
unsigned
int
gpio
)
{
if
(
gpio
<
MAX_BLACKFIN_GPIOS
)
return
bfin_gpio_get_value
(
gpio
);
else
return
__gpio_get_value
(
gpio
);
return
__gpio_get_value
(
gpio
);
}
static
inline
void
gpio_set_value
(
unsigned
int
gpio
,
int
value
)
{
if
(
gpio
<
MAX_BLACKFIN_GPIOS
)
bfin_gpio_set_value
(
gpio
,
value
);
else
__gpio_set_value
(
gpio
,
value
);
__gpio_set_value
(
gpio
,
value
);
}
static
inline
int
gpio_cansleep
(
unsigned
int
gpio
)
...
...
@@ -219,113 +209,6 @@ static inline int gpio_to_irq(unsigned gpio)
{
return
__gpio_to_irq
(
gpio
);
}
#else
/* !CONFIG_GPIOLIB */
static
inline
int
gpio_request
(
unsigned
gpio
,
const
char
*
label
)
{
return
bfin_gpio_request
(
gpio
,
label
);
}
static
inline
void
gpio_free
(
unsigned
gpio
)
{
return
bfin_gpio_free
(
gpio
);
}
static
inline
int
gpio_direction_input
(
unsigned
gpio
)
{
return
bfin_gpio_direction_input
(
gpio
);
}
static
inline
int
gpio_direction_output
(
unsigned
gpio
,
int
value
)
{
return
bfin_gpio_direction_output
(
gpio
,
value
);
}
static
inline
int
gpio_set_debounce
(
unsigned
gpio
,
unsigned
debounce
)
{
return
-
EINVAL
;
}
static
inline
int
gpio_request_one
(
unsigned
gpio
,
unsigned
long
flags
,
const
char
*
label
)
{
int
err
;
err
=
bfin_gpio_request
(
gpio
,
label
);
if
(
err
)
return
err
;
if
(
flags
&
GPIOF_DIR_IN
)
err
=
bfin_gpio_direction_input
(
gpio
);
else
err
=
bfin_gpio_direction_output
(
gpio
,
(
flags
&
GPIOF_INIT_HIGH
)
?
1
:
0
);
if
(
err
)
bfin_gpio_free
(
gpio
);
return
err
;
}
static
inline
int
gpio_request_array
(
const
struct
gpio
*
array
,
size_t
num
)
{
int
i
,
err
;
for
(
i
=
0
;
i
<
num
;
i
++
,
array
++
)
{
err
=
gpio_request_one
(
array
->
gpio
,
array
->
flags
,
array
->
label
);
if
(
err
)
goto
err_free
;
}
return
0
;
err_free:
while
(
i
--
)
bfin_gpio_free
((
--
array
)
->
gpio
);
return
err
;
}
static
inline
void
gpio_free_array
(
const
struct
gpio
*
array
,
size_t
num
)
{
while
(
num
--
)
bfin_gpio_free
((
array
++
)
->
gpio
);
}
static
inline
int
__gpio_get_value
(
unsigned
gpio
)
{
return
bfin_gpio_get_value
(
gpio
);
}
static
inline
void
__gpio_set_value
(
unsigned
gpio
,
int
value
)
{
return
bfin_gpio_set_value
(
gpio
,
value
);
}
static
inline
int
gpio_get_value
(
unsigned
gpio
)
{
return
__gpio_get_value
(
gpio
);
}
static
inline
void
gpio_set_value
(
unsigned
gpio
,
int
value
)
{
return
__gpio_set_value
(
gpio
,
value
);
}
static
inline
int
gpio_to_irq
(
unsigned
gpio
)
{
if
(
likely
(
gpio
<
MAX_BLACKFIN_GPIOS
))
return
gpio
+
GPIO_IRQ_BASE
;
return
-
EINVAL
;
}
#include <asm-generic/gpio.h>
/* cansleep wrappers */
#endif
/* !CONFIG_GPIOLIB */
static
inline
int
irq_to_gpio
(
unsigned
irq
)
{
return
(
irq
-
GPIO_IRQ_BASE
);
}
#endif
/* __ASSEMBLY__ */
#endif
/* __ARCH_BLACKFIN_GPIO_H__ */
arch/blackfin/include/asm/portmux.h
View file @
cfa8b3f5
...
...
@@ -17,14 +17,29 @@
#define P_MAYSHARE 0x2000
#define P_DONTCARE 0x1000
#ifdef CONFIG_PINCTRL
#include <asm/irq_handler.h>
#define gpio_pint_regs bfin_pint_regs
#define adi_internal_set_wake bfin_internal_set_wake
#define peripheral_request(per, label) 0
#define peripheral_free(per)
#define peripheral_request_list(per, label) \
(pdev ? (IS_ERR(devm_pinctrl_get_select_default(&pdev->dev)) \
? -EINVAL : 0) : 0)
#define peripheral_free_list(per)
#else
int
peripheral_request
(
unsigned
short
per
,
const
char
*
label
);
void
peripheral_free
(
unsigned
short
per
);
int
peripheral_request_list
(
const
unsigned
short
per
[],
const
char
*
label
);
void
peripheral_free_list
(
const
unsigned
short
per
[]);
#endif
#include <asm/gpio.h>
#include <linux/err.h>
#include <linux/pinctrl/pinctrl.h>
#include <mach/portmux.h>
#include <linux/gpio.h>
#ifndef P_SPORT2_TFS
#define P_SPORT2_TFS P_UNDEF
...
...
arch/blackfin/kernel/Makefile
View file @
cfa8b3f5
...
...
@@ -7,7 +7,7 @@ extra-y := vmlinux.lds
obj-y
:=
\
entry.o process.o bfin_ksyms.o ptrace.o setup.o signal.o
\
sys_bfin.o traps.o irqchip.o dma-mapping.o flat.o
\
fixed_code.o reboot.o bfin_
gpio.o bfin_
dma.o
\
fixed_code.o reboot.o bfin_dma.o
\
exception.o dumpstack.o
ifeq
($(CONFIG_GENERIC_CLOCKEVENTS),y)
...
...
@@ -16,6 +16,7 @@ else
obj-y
+=
time.o
endif
obj-$(CONFIG_GPIO_ADI)
+=
bfin_gpio.o
obj-$(CONFIG_DYNAMIC_FTRACE)
+=
ftrace.o
obj-$(CONFIG_FUNCTION_TRACER)
+=
ftrace-entry.o
obj-$(CONFIG_FUNCTION_GRAPH_TRACER)
+=
ftrace.o
...
...
arch/blackfin/mach-bf548/include/mach/portmux.h
View file @
cfa8b3f5
...
...
@@ -7,8 +7,6 @@
#ifndef _MACH_PORTMUX_H_
#define _MACH_PORTMUX_H_
#define MAX_RESOURCES MAX_BLACKFIN_GPIOS
#define P_SPORT2_TFS (P_DEFINED | P_IDENT(GPIO_PA0) | P_FUNCT(0))
#define P_SPORT2_DTSEC (P_DEFINED | P_IDENT(GPIO_PA1) | P_FUNCT(0))
#define P_SPORT2_DTPRI (P_DEFINED | P_IDENT(GPIO_PA2) | P_FUNCT(0))
...
...
arch/blackfin/mach-bf609/include/mach/portmux.h
View file @
cfa8b3f5
...
...
@@ -7,8 +7,6 @@
#ifndef _MACH_PORTMUX_H_
#define _MACH_PORTMUX_H_
#define MAX_RESOURCES MAX_BLACKFIN_GPIOS
/* EMAC RMII Port Mux */
#define P_MII0_MDC (P_DEFINED | P_IDENT(GPIO_PC6) | P_FUNCT(0))
#define P_MII0_MDIO (P_DEFINED | P_IDENT(GPIO_PC7) | P_FUNCT(0))
...
...
drivers/pinctrl/Kconfig
View file @
cfa8b3f5
...
...
@@ -49,6 +49,24 @@ config PINCTRL_AB8505
bool "AB8505 pin controller driver"
depends on PINCTRL_ABX500 && ARCH_U8500
config PINCTRL_ADI2
bool "ADI pin controller driver"
depends on BLACKFIN
select PINMUX
select IRQ_DOMAIN
help
This is the pin controller and gpio driver for ADI BF54x, BF60x and
future processors. This option is selected automatically when specific
machine and arch are selected to build.
config PINCTRL_BF54x
def_bool y if BF54x
select PINCTRL_ADI2
config PINCTRL_BF60x
def_bool y if BF60x
select PINCTRL_ADI2
config PINCTRL_AT91
bool "AT91 pinctrl driver"
depends on OF
...
...
drivers/pinctrl/Makefile
View file @
cfa8b3f5
...
...
@@ -14,6 +14,9 @@ obj-$(CONFIG_PINCTRL_AB8500) += pinctrl-ab8500.o
obj-$(CONFIG_PINCTRL_AB8540)
+=
pinctrl-ab8540.o
obj-$(CONFIG_PINCTRL_AB9540)
+=
pinctrl-ab9540.o
obj-$(CONFIG_PINCTRL_AB8505)
+=
pinctrl-ab8505.o
obj-$(CONFIG_PINCTRL_ADI2)
+=
pinctrl-adi2.o
obj-$(CONFIG_PINCTRL_BF54x)
+=
pinctrl-adi2-bf54x.o
obj-$(CONFIG_PINCTRL_BF60x)
+=
pinctrl-adi2-bf60x.o
obj-$(CONFIG_PINCTRL_AT91)
+=
pinctrl-at91.o
obj-$(CONFIG_PINCTRL_BCM2835)
+=
pinctrl-bcm2835.o
obj-$(CONFIG_PINCTRL_BAYTRAIL)
+=
pinctrl-baytrail.o
...
...
drivers/pinctrl/pinctrl-adi2-bf54x.c
0 → 100644
View file @
cfa8b3f5
This diff is collapsed.
Click to expand it.
drivers/pinctrl/pinctrl-adi2-bf60x.c
0 → 100644
View file @
cfa8b3f5
This diff is collapsed.
Click to expand it.
drivers/pinctrl/pinctrl-adi2.c
0 → 100644
View file @
cfa8b3f5
This diff is collapsed.
Click to expand it.
drivers/pinctrl/pinctrl-adi2.h
0 → 100644
View file @
cfa8b3f5
/*
* Pinctrl Driver for ADI GPIO2 controller
*
* Copyright 2007-2013 Analog Devices Inc.
*
* Licensed under the GPLv2 or later
*/
#ifndef PINCTRL_PINCTRL_ADI2_H
#define PINCTRL_PINCTRL_ADI2_H
#include <linux/pinctrl/pinctrl.h>
/**
* struct adi_pin_group - describes a pin group
* @name: the name of this pin group
* @pins: an array of pins
* @num: the number of pins in this array
*/
struct
adi_pin_group
{
const
char
*
name
;
const
unsigned
*
pins
;
const
unsigned
num
;
};
#define ADI_PIN_GROUP(n, p) \
{ \
.name = n, \
.pins = p, \
.num = ARRAY_SIZE(p), \
}
/**
* struct adi_pmx_func - describes function mux setting of pin groups
* @name: the name of this function mux setting
* @groups: an array of pin groups
* @num_groups: the number of pin groups in this array
* @mux: the function mux setting array, end by zero
*/
struct
adi_pmx_func
{
const
char
*
name
;
const
char
*
const
*
groups
;
const
unsigned
num_groups
;
const
unsigned
short
*
mux
;
};
#define ADI_PMX_FUNCTION(n, g, m) \
{ \
.name = n, \
.groups = g, \
.num_groups = ARRAY_SIZE(g), \
.mux = m, \
}
/**
* struct adi_pinctrl_soc_data - ADI pin controller per-SoC configuration
* @functions: The functions supported on this SoC.
* @nfunction: The number of entries in @functions.
* @groups: An array describing all pin groups the pin SoC supports.
* @ngroups: The number of entries in @groups.
* @pins: An array describing all pins the pin controller affects.
* @npins: The number of entries in @pins.
*/
struct
adi_pinctrl_soc_data
{
const
struct
adi_pmx_func
*
functions
;
int
nfunctions
;
const
struct
adi_pin_group
*
groups
;
int
ngroups
;
const
struct
pinctrl_pin_desc
*
pins
;
int
npins
;
};
void
adi_pinctrl_soc_init
(
const
struct
adi_pinctrl_soc_data
**
soc
);
#endif
/* PINCTRL_PINCTRL_ADI2_H */
include/linux/platform_data/pinctrl-adi2.h
0 → 100644
View file @
cfa8b3f5
/*
* Pinctrl Driver for ADI GPIO2 controller
*
* Copyright 2007-2013 Analog Devices Inc.
*
* Licensed under the GPLv2 or later
*/
#ifndef PINCTRL_ADI2_H
#define PINCTRL_ADI2_H
#include <linux/io.h>
#include <linux/platform_device.h>
/**
* struct adi_pinctrl_gpio_platform_data - Pinctrl gpio platform data
* for ADI GPIO2 device.
*
* @port_gpio_base: Optional global GPIO index of the GPIO bank.
* 0 means driver decides.
* @port_pin_base: Pin index of the pin controller device.
* @port_width: PIN number of the GPIO bank device
* @pint_id: GPIO PINT device id that this GPIO bank should map to.
* @pint_assign: The 32-bit GPIO PINT registers can be divided into 2 parts. A
* GPIO bank can be mapped into either low 16 bits[0] or high 16
* bits[1] of each PINT register.
* @pint_map: GIOP bank mapping code in PINT device
*/
struct
adi_pinctrl_gpio_platform_data
{
unsigned
int
port_gpio_base
;
unsigned
int
port_pin_base
;
unsigned
int
port_width
;
u8
pinctrl_id
;
u8
pint_id
;
bool
pint_assign
;
u8
pint_map
;
};
#endif
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