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
e4df1ebd
Commit
e4df1ebd
authored
Feb 05, 2017
by
Linus Walleij
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'ib-gpiod-flags' into devel
parents
e8e1a5b5
537b94da
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
58 additions
and
40 deletions
+58
-40
drivers/gpio/devres.c
drivers/gpio/devres.c
+11
-8
drivers/gpio/gpiolib.c
drivers/gpio/gpiolib.c
+5
-4
drivers/input/keyboard/gpio_keys.c
drivers/input/keyboard/gpio_keys.c
+4
-2
drivers/input/keyboard/gpio_keys_polled.c
drivers/input/keyboard/gpio_keys_polled.c
+4
-4
drivers/leds/leds-gpio.c
drivers/leds/leds-gpio.c
+3
-2
drivers/video/fbdev/amba-clcd-nomadik.c
drivers/video/fbdev/amba-clcd-nomadik.c
+8
-8
include/linux/gpio/consumer.h
include/linux/gpio/consumer.h
+23
-12
No files found.
drivers/gpio/devres.c
View file @
e4df1ebd
...
...
@@ -125,9 +125,11 @@ struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev,
EXPORT_SYMBOL
(
devm_gpiod_get_index
);
/**
* devm_get_gpiod_from_child - get a GPIO descriptor from a device's child node
* devm_fwnode_get_index_gpiod_from_child - get a GPIO descriptor from a
* device's child node
* @dev: GPIO consumer
* @con_id: function within the GPIO consumer
* @index: index of the GPIO to obtain in the consumer
* @child: firmware node (child of @dev)
* @flags: GPIO initialization flags
*
...
...
@@ -137,11 +139,11 @@ EXPORT_SYMBOL(devm_gpiod_get_index);
* On successfull request the GPIO pin is configured in accordance with
* provided @flags.
*/
struct
gpio_desc
*
devm_
get
_gpiod_from_child
(
struct
device
*
dev
,
const
char
*
con_id
,
struct
fwnode_handle
*
child
,
enum
gpiod_flags
flags
,
const
char
*
label
)
struct
gpio_desc
*
devm_
fwnode_get_index
_gpiod_from_child
(
struct
device
*
dev
,
const
char
*
con_id
,
int
index
,
struct
fwnode_handle
*
child
,
enum
gpiod_flags
flags
,
const
char
*
label
)
{
char
prop_name
[
32
];
/* 32 is max size of property name */
struct
gpio_desc
**
dr
;
...
...
@@ -161,7 +163,8 @@ struct gpio_desc *devm_get_gpiod_from_child(struct device *dev,
snprintf
(
prop_name
,
sizeof
(
prop_name
),
"%s"
,
gpio_suffixes
[
i
]);
desc
=
fwnode_get_named_gpiod
(
child
,
prop_name
,
flags
,
label
);
desc
=
fwnode_get_named_gpiod
(
child
,
prop_name
,
index
,
flags
,
label
);
if
(
!
IS_ERR
(
desc
)
||
(
PTR_ERR
(
desc
)
!=
-
ENOENT
))
break
;
}
...
...
@@ -175,7 +178,7 @@ struct gpio_desc *devm_get_gpiod_from_child(struct device *dev,
return
desc
;
}
EXPORT_SYMBOL
(
devm_
get
_gpiod_from_child
);
EXPORT_SYMBOL
(
devm_
fwnode_get_index
_gpiod_from_child
);
/**
* devm_gpiod_get_index_optional - Resource-managed gpiod_get_index_optional()
...
...
drivers/gpio/gpiolib.c
View file @
e4df1ebd
...
...
@@ -3316,6 +3316,7 @@ EXPORT_SYMBOL_GPL(gpiod_get_index);
* fwnode_get_named_gpiod - obtain a GPIO from firmware node
* @fwnode: handle of the firmware node
* @propname: name of the firmware property representing the GPIO
* @index: index of the GPIO to obtain in the consumer
* @dflags: GPIO initialization flags
*
* This function can be used for drivers that get their configuration
...
...
@@ -3331,7 +3332,7 @@ EXPORT_SYMBOL_GPL(gpiod_get_index);
* In case of error an ERR_PTR() is returned.
*/
struct
gpio_desc
*
fwnode_get_named_gpiod
(
struct
fwnode_handle
*
fwnode
,
const
char
*
propname
,
const
char
*
propname
,
int
index
,
enum
gpiod_flags
dflags
,
const
char
*
label
)
{
...
...
@@ -3347,8 +3348,8 @@ struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
if
(
is_of_node
(
fwnode
))
{
enum
of_gpio_flags
flags
;
desc
=
of_get_named_gpiod_flags
(
to_of_node
(
fwnode
),
propname
,
0
,
&
flags
);
desc
=
of_get_named_gpiod_flags
(
to_of_node
(
fwnode
),
propname
,
index
,
&
flags
);
if
(
!
IS_ERR
(
desc
))
{
active_low
=
flags
&
OF_GPIO_ACTIVE_LOW
;
single_ended
=
flags
&
OF_GPIO_SINGLE_ENDED
;
...
...
@@ -3356,7 +3357,7 @@ struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
}
else
if
(
is_acpi_node
(
fwnode
))
{
struct
acpi_gpio_info
info
;
desc
=
acpi_node_get_gpiod
(
fwnode
,
propname
,
0
,
&
info
);
desc
=
acpi_node_get_gpiod
(
fwnode
,
propname
,
index
,
&
info
);
if
(
!
IS_ERR
(
desc
))
active_low
=
info
.
polarity
==
GPIO_ACTIVE_LOW
;
}
...
...
drivers/input/keyboard/gpio_keys.c
View file @
e4df1ebd
...
...
@@ -481,8 +481,10 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
spin_lock_init
(
&
bdata
->
lock
);
if
(
child
)
{
bdata
->
gpiod
=
devm_get_gpiod_from_child
(
dev
,
NULL
,
child
,
GPIOD_IN
,
desc
);
bdata
->
gpiod
=
devm_fwnode_get_gpiod_from_child
(
dev
,
NULL
,
child
,
GPIOD_IN
,
desc
);
if
(
IS_ERR
(
bdata
->
gpiod
))
{
error
=
PTR_ERR
(
bdata
->
gpiod
);
if
(
error
==
-
ENOENT
)
{
...
...
drivers/input/keyboard/gpio_keys_polled.c
View file @
e4df1ebd
...
...
@@ -303,10 +303,10 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
return
-
EINVAL
;
}
bdata
->
gpiod
=
devm_
get_gpiod_from_child
(
dev
,
NULL
,
child
,
GPIOD_IN
,
button
->
desc
);
bdata
->
gpiod
=
devm_
fwnode_get_gpiod_from_child
(
dev
,
NULL
,
child
,
GPIOD_IN
,
button
->
desc
);
if
(
IS_ERR
(
bdata
->
gpiod
))
{
error
=
PTR_ERR
(
bdata
->
gpiod
);
if
(
error
!=
-
EPROBE_DEFER
)
...
...
drivers/leds/leds-gpio.c
View file @
e4df1ebd
...
...
@@ -182,8 +182,9 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
return
ERR_PTR
(
-
EINVAL
);
}
led
.
gpiod
=
devm_get_gpiod_from_child
(
dev
,
NULL
,
child
,
GPIOD_ASIS
,
led
.
name
);
led
.
gpiod
=
devm_fwnode_get_gpiod_from_child
(
dev
,
NULL
,
child
,
GPIOD_ASIS
,
led
.
name
);
if
(
IS_ERR
(
led
.
gpiod
))
{
fwnode_handle_put
(
child
);
return
ERR_CAST
(
led
.
gpiod
);
...
...
drivers/video/fbdev/amba-clcd-nomadik.c
View file @
e4df1ebd
...
...
@@ -185,26 +185,26 @@ static void tpg110_init(struct device *dev, struct device_node *np,
dev_info
(
dev
,
"TPG110 display init
\n
"
);
/* This asserts the GRESTB signal, putting the display into reset */
grestb
=
devm_get_gpiod_from_child
(
dev
,
"grestb"
,
&
np
->
fwnode
,
GPIOD_OUT_HIGH
,
"grestb"
);
grestb
=
devm_
fwnode_
get_gpiod_from_child
(
dev
,
"grestb"
,
&
np
->
fwnode
,
GPIOD_OUT_HIGH
,
"grestb"
);
if
(
IS_ERR
(
grestb
))
{
dev_err
(
dev
,
"no GRESTB GPIO
\n
"
);
return
;
}
scen
=
devm_get_gpiod_from_child
(
dev
,
"scen"
,
&
np
->
fwnode
,
GPIOD_OUT_LOW
,
"scen"
);
scen
=
devm_
fwnode_
get_gpiod_from_child
(
dev
,
"scen"
,
&
np
->
fwnode
,
GPIOD_OUT_LOW
,
"scen"
);
if
(
IS_ERR
(
scen
))
{
dev_err
(
dev
,
"no SCEN GPIO
\n
"
);
return
;
}
scl
=
devm_
get_gpiod_from_child
(
dev
,
"scl"
,
&
np
->
fwnode
,
GPIOD_OUT_LOW
,
"scl"
);
scl
=
devm_
fwnode_get_gpiod_from_child
(
dev
,
"scl"
,
&
np
->
fwnode
,
GPIOD_OUT_LOW
,
"scl"
);
if
(
IS_ERR
(
scl
))
{
dev_err
(
dev
,
"no SCL GPIO
\n
"
);
return
;
}
sda
=
devm_
get_gpiod_from_child
(
dev
,
"sda"
,
&
np
->
fwnode
,
GPIOD_OUT_LOW
,
"sda"
);
sda
=
devm_
fwnode_get_gpiod_from_child
(
dev
,
"sda"
,
&
np
->
fwnode
,
GPIOD_OUT_LOW
,
"sda"
);
if
(
IS_ERR
(
sda
))
{
dev_err
(
dev
,
"no SDA GPIO
\n
"
);
return
;
...
...
include/linux/gpio/consumer.h
View file @
e4df1ebd
...
...
@@ -135,14 +135,14 @@ int desc_to_gpio(const struct gpio_desc *desc);
struct
fwnode_handle
;
struct
gpio_desc
*
fwnode_get_named_gpiod
(
struct
fwnode_handle
*
fwnode
,
const
char
*
propname
,
const
char
*
propname
,
int
index
,
enum
gpiod_flags
dflags
,
const
char
*
label
);
struct
gpio_desc
*
devm_
get
_gpiod_from_child
(
struct
device
*
dev
,
const
char
*
con_id
,
struct
fwnode_handle
*
child
,
enum
gpiod_flags
flags
,
const
char
*
label
);
struct
gpio_desc
*
devm_
fwnode_get_index
_gpiod_from_child
(
struct
device
*
dev
,
const
char
*
con_id
,
int
index
,
struct
fwnode_handle
*
child
,
enum
gpiod_flags
flags
,
const
char
*
label
);
#else
/* CONFIG_GPIOLIB */
static
inline
int
gpiod_count
(
struct
device
*
dev
,
const
char
*
con_id
)
...
...
@@ -417,7 +417,7 @@ struct fwnode_handle;
static
inline
struct
gpio_desc
*
fwnode_get_named_gpiod
(
struct
fwnode_handle
*
fwnode
,
const
char
*
propname
,
const
char
*
propname
,
int
index
,
enum
gpiod_flags
dflags
,
const
char
*
label
)
{
...
...
@@ -425,17 +425,28 @@ struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
}
static
inline
struct
gpio_desc
*
devm_
get
_gpiod_from_child
(
struct
device
*
dev
,
const
char
*
con_id
,
struct
fwnode_handle
*
child
,
enum
gpiod_flags
flags
,
const
char
*
label
)
struct
gpio_desc
*
devm_
fwnode_get_index
_gpiod_from_child
(
struct
device
*
dev
,
const
char
*
con_id
,
int
index
,
struct
fwnode_handle
*
child
,
enum
gpiod_flags
flags
,
const
char
*
label
)
{
return
ERR_PTR
(
-
ENOSYS
);
}
#endif
/* CONFIG_GPIOLIB */
static
inline
struct
gpio_desc
*
devm_fwnode_get_gpiod_from_child
(
struct
device
*
dev
,
const
char
*
con_id
,
struct
fwnode_handle
*
child
,
enum
gpiod_flags
flags
,
const
char
*
label
)
{
return
devm_fwnode_get_index_gpiod_from_child
(
dev
,
con_id
,
0
,
child
,
flags
,
label
);
}
#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
int
gpiod_export
(
struct
gpio_desc
*
desc
,
bool
direction_may_change
);
...
...
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