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
ee222c5d
Commit
ee222c5d
authored
Mar 22, 2019
by
Thierry Reding
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'reset/acquire' of
git://git.pengutronix.de/git/pza/linux
into drm/tegra/for-next
parents
9e98c678
22815f18
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
255 additions
and
41 deletions
+255
-41
drivers/reset/core.c
drivers/reset/core.c
+166
-14
drivers/usb/dwc3/dwc3-of-simple.c
drivers/usb/dwc3/dwc3-of-simple.c
+2
-1
include/linux/reset.h
include/linux/reset.h
+87
-26
No files found.
drivers/reset/core.c
View file @
ee222c5d
This diff is collapsed.
Click to expand it.
drivers/usb/dwc3/dwc3-of-simple.c
View file @
ee222c5d
...
...
@@ -107,7 +107,8 @@ static int dwc3_of_simple_probe(struct platform_device *pdev)
simple
->
pulse_resets
=
true
;
}
simple
->
resets
=
of_reset_control_array_get
(
np
,
shared_resets
,
true
);
simple
->
resets
=
of_reset_control_array_get
(
np
,
shared_resets
,
true
,
true
);
if
(
IS_ERR
(
simple
->
resets
))
{
ret
=
PTR_ERR
(
simple
->
resets
);
dev_err
(
dev
,
"failed to get device resets, err=%d
\n
"
,
ret
);
...
...
include/linux/reset.h
View file @
ee222c5d
...
...
@@ -14,23 +14,26 @@ int reset_control_reset(struct reset_control *rstc);
int
reset_control_assert
(
struct
reset_control
*
rstc
);
int
reset_control_deassert
(
struct
reset_control
*
rstc
);
int
reset_control_status
(
struct
reset_control
*
rstc
);
int
reset_control_acquire
(
struct
reset_control
*
rstc
);
void
reset_control_release
(
struct
reset_control
*
rstc
);
struct
reset_control
*
__of_reset_control_get
(
struct
device_node
*
node
,
const
char
*
id
,
int
index
,
bool
shared
,
bool
optional
);
bool
optional
,
bool
acquired
);
struct
reset_control
*
__reset_control_get
(
struct
device
*
dev
,
const
char
*
id
,
int
index
,
bool
shared
,
bool
optional
);
bool
optional
,
bool
acquired
);
void
reset_control_put
(
struct
reset_control
*
rstc
);
int
__device_reset
(
struct
device
*
dev
,
bool
optional
);
struct
reset_control
*
__devm_reset_control_get
(
struct
device
*
dev
,
const
char
*
id
,
int
index
,
bool
shared
,
bool
optional
);
bool
optional
,
bool
acquired
);
struct
reset_control
*
devm_reset_control_array_get
(
struct
device
*
dev
,
bool
shared
,
bool
optional
);
struct
reset_control
*
of_reset_control_array_get
(
struct
device_node
*
np
,
bool
shared
,
bool
optional
);
bool
shared
,
bool
optional
,
bool
acquired
);
int
reset_control_get_count
(
struct
device
*
dev
);
...
...
@@ -56,6 +59,15 @@ static inline int reset_control_status(struct reset_control *rstc)
return
0
;
}
static
inline
int
reset_control_acquire
(
struct
reset_control
*
rstc
)
{
return
0
;
}
static
inline
void
reset_control_release
(
struct
reset_control
*
rstc
)
{
}
static
inline
void
reset_control_put
(
struct
reset_control
*
rstc
)
{
}
...
...
@@ -68,21 +80,23 @@ static inline int __device_reset(struct device *dev, bool optional)
static
inline
struct
reset_control
*
__of_reset_control_get
(
struct
device_node
*
node
,
const
char
*
id
,
int
index
,
bool
shared
,
bool
optional
)
bool
optional
,
bool
acquired
)
{
return
optional
?
NULL
:
ERR_PTR
(
-
ENOTSUPP
);
}
static
inline
struct
reset_control
*
__reset_control_get
(
struct
device
*
dev
,
const
char
*
id
,
int
index
,
bool
shared
,
bool
optional
)
int
index
,
bool
shared
,
bool
optional
,
bool
acquired
)
{
return
optional
?
NULL
:
ERR_PTR
(
-
ENOTSUPP
);
}
static
inline
struct
reset_control
*
__devm_reset_control_get
(
struct
device
*
dev
,
const
char
*
id
,
int
index
,
bool
shared
,
bool
optional
)
int
index
,
bool
shared
,
bool
optional
,
bool
acquired
)
{
return
optional
?
NULL
:
ERR_PTR
(
-
ENOTSUPP
);
}
...
...
@@ -94,7 +108,8 @@ devm_reset_control_array_get(struct device *dev, bool shared, bool optional)
}
static
inline
struct
reset_control
*
of_reset_control_array_get
(
struct
device_node
*
np
,
bool
shared
,
bool
optional
)
of_reset_control_array_get
(
struct
device_node
*
np
,
bool
shared
,
bool
optional
,
bool
acquired
)
{
return
optional
?
NULL
:
ERR_PTR
(
-
ENOTSUPP
);
}
...
...
@@ -134,7 +149,28 @@ static inline int device_reset_optional(struct device *dev)
static
inline
struct
reset_control
*
__must_check
reset_control_get_exclusive
(
struct
device
*
dev
,
const
char
*
id
)
{
return
__reset_control_get
(
dev
,
id
,
0
,
false
,
false
);
return
__reset_control_get
(
dev
,
id
,
0
,
false
,
false
,
true
);
}
/**
* reset_control_get_exclusive_released - Lookup and obtain a temoprarily
* exclusive reference to a reset
* controller.
* @dev: device to be reset by the controller
* @id: reset line name
*
* Returns a struct reset_control or IS_ERR() condition containing errno.
* reset-controls returned by this function must be acquired via
* reset_control_acquire() before they can be used and should be released
* via reset_control_release() afterwards.
*
* Use of id names is optional.
*/
static
inline
struct
reset_control
*
__must_check
reset_control_get_exclusive_released
(
struct
device
*
dev
,
const
char
*
id
)
{
return
__reset_control_get
(
dev
,
id
,
0
,
false
,
false
,
false
);
}
/**
...
...
@@ -162,19 +198,19 @@ __must_check reset_control_get_exclusive(struct device *dev, const char *id)
static
inline
struct
reset_control
*
reset_control_get_shared
(
struct
device
*
dev
,
const
char
*
id
)
{
return
__reset_control_get
(
dev
,
id
,
0
,
true
,
false
);
return
__reset_control_get
(
dev
,
id
,
0
,
true
,
false
,
false
);
}
static
inline
struct
reset_control
*
reset_control_get_optional_exclusive
(
struct
device
*
dev
,
const
char
*
id
)
{
return
__reset_control_get
(
dev
,
id
,
0
,
false
,
true
);
return
__reset_control_get
(
dev
,
id
,
0
,
false
,
true
,
true
);
}
static
inline
struct
reset_control
*
reset_control_get_optional_shared
(
struct
device
*
dev
,
const
char
*
id
)
{
return
__reset_control_get
(
dev
,
id
,
0
,
true
,
true
);
return
__reset_control_get
(
dev
,
id
,
0
,
true
,
true
,
false
);
}
/**
...
...
@@ -190,7 +226,7 @@ static inline struct reset_control *reset_control_get_optional_shared(
static
inline
struct
reset_control
*
of_reset_control_get_exclusive
(
struct
device_node
*
node
,
const
char
*
id
)
{
return
__of_reset_control_get
(
node
,
id
,
0
,
false
,
false
);
return
__of_reset_control_get
(
node
,
id
,
0
,
false
,
false
,
true
);
}
/**
...
...
@@ -215,7 +251,7 @@ static inline struct reset_control *of_reset_control_get_exclusive(
static
inline
struct
reset_control
*
of_reset_control_get_shared
(
struct
device_node
*
node
,
const
char
*
id
)
{
return
__of_reset_control_get
(
node
,
id
,
0
,
true
,
false
);
return
__of_reset_control_get
(
node
,
id
,
0
,
true
,
false
,
false
);
}
/**
...
...
@@ -232,7 +268,7 @@ static inline struct reset_control *of_reset_control_get_shared(
static
inline
struct
reset_control
*
of_reset_control_get_exclusive_by_index
(
struct
device_node
*
node
,
int
index
)
{
return
__of_reset_control_get
(
node
,
NULL
,
index
,
false
,
false
);
return
__of_reset_control_get
(
node
,
NULL
,
index
,
false
,
false
,
true
);
}
/**
...
...
@@ -260,7 +296,7 @@ static inline struct reset_control *of_reset_control_get_exclusive_by_index(
static
inline
struct
reset_control
*
of_reset_control_get_shared_by_index
(
struct
device_node
*
node
,
int
index
)
{
return
__of_reset_control_get
(
node
,
NULL
,
index
,
true
,
false
);
return
__of_reset_control_get
(
node
,
NULL
,
index
,
true
,
false
,
false
);
}
/**
...
...
@@ -279,7 +315,26 @@ static inline struct reset_control *
__must_check
devm_reset_control_get_exclusive
(
struct
device
*
dev
,
const
char
*
id
)
{
return
__devm_reset_control_get
(
dev
,
id
,
0
,
false
,
false
);
return
__devm_reset_control_get
(
dev
,
id
,
0
,
false
,
false
,
true
);
}
/**
* devm_reset_control_get_exclusive_released - resource managed
* reset_control_get_exclusive_released()
* @dev: device to be reset by the controller
* @id: reset line name
*
* Managed reset_control_get_exclusive_released(). For reset controllers
* returned from this function, reset_control_put() is called automatically on
* driver detach.
*
* See reset_control_get_exclusive_released() for more information.
*/
static
inline
struct
reset_control
*
__must_check
devm_reset_control_get_exclusive_released
(
struct
device
*
dev
,
const
char
*
id
)
{
return
__devm_reset_control_get
(
dev
,
id
,
0
,
false
,
false
,
false
);
}
/**
...
...
@@ -294,19 +349,19 @@ __must_check devm_reset_control_get_exclusive(struct device *dev,
static
inline
struct
reset_control
*
devm_reset_control_get_shared
(
struct
device
*
dev
,
const
char
*
id
)
{
return
__devm_reset_control_get
(
dev
,
id
,
0
,
true
,
false
);
return
__devm_reset_control_get
(
dev
,
id
,
0
,
true
,
false
,
false
);
}
static
inline
struct
reset_control
*
devm_reset_control_get_optional_exclusive
(
struct
device
*
dev
,
const
char
*
id
)
{
return
__devm_reset_control_get
(
dev
,
id
,
0
,
false
,
true
);
return
__devm_reset_control_get
(
dev
,
id
,
0
,
false
,
true
,
true
);
}
static
inline
struct
reset_control
*
devm_reset_control_get_optional_shared
(
struct
device
*
dev
,
const
char
*
id
)
{
return
__devm_reset_control_get
(
dev
,
id
,
0
,
true
,
true
);
return
__devm_reset_control_get
(
dev
,
id
,
0
,
true
,
true
,
false
);
}
/**
...
...
@@ -324,7 +379,7 @@ static inline struct reset_control *devm_reset_control_get_optional_shared(
static
inline
struct
reset_control
*
devm_reset_control_get_exclusive_by_index
(
struct
device
*
dev
,
int
index
)
{
return
__devm_reset_control_get
(
dev
,
NULL
,
index
,
false
,
false
);
return
__devm_reset_control_get
(
dev
,
NULL
,
index
,
false
,
false
,
true
);
}
/**
...
...
@@ -340,7 +395,7 @@ devm_reset_control_get_exclusive_by_index(struct device *dev, int index)
static
inline
struct
reset_control
*
devm_reset_control_get_shared_by_index
(
struct
device
*
dev
,
int
index
)
{
return
__devm_reset_control_get
(
dev
,
NULL
,
index
,
true
,
false
);
return
__devm_reset_control_get
(
dev
,
NULL
,
index
,
true
,
false
,
false
);
}
/*
...
...
@@ -412,24 +467,30 @@ devm_reset_control_array_get_optional_shared(struct device *dev)
static
inline
struct
reset_control
*
of_reset_control_array_get_exclusive
(
struct
device_node
*
node
)
{
return
of_reset_control_array_get
(
node
,
false
,
false
);
return
of_reset_control_array_get
(
node
,
false
,
false
,
true
);
}
static
inline
struct
reset_control
*
of_reset_control_array_get_exclusive_released
(
struct
device_node
*
node
)
{
return
of_reset_control_array_get
(
node
,
false
,
false
,
false
);
}
static
inline
struct
reset_control
*
of_reset_control_array_get_shared
(
struct
device_node
*
node
)
{
return
of_reset_control_array_get
(
node
,
true
,
false
);
return
of_reset_control_array_get
(
node
,
true
,
false
,
true
);
}
static
inline
struct
reset_control
*
of_reset_control_array_get_optional_exclusive
(
struct
device_node
*
node
)
{
return
of_reset_control_array_get
(
node
,
false
,
true
);
return
of_reset_control_array_get
(
node
,
false
,
true
,
true
);
}
static
inline
struct
reset_control
*
of_reset_control_array_get_optional_shared
(
struct
device_node
*
node
)
{
return
of_reset_control_array_get
(
node
,
true
,
true
);
return
of_reset_control_array_get
(
node
,
true
,
true
,
true
);
}
#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