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
ee222c5d
Commit
ee222c5d
authored
5 years ago
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
Show 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
);
...
...
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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