mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 21:02:19 +00:00
Merge branch 'reset/simple' of git://git.pengutronix.de/git/pza/linux into clk-bcm
Pull immutable reset branch to get reset-simple header. * 'reset/simple' of git://git.pengutronix.de/git/pza/linux: reset: simple: Add reset callback reset: Move reset-simple header out of drivers/reset
This commit is contained in:
commit
f93ac080f5
@ -11,6 +11,7 @@
|
|||||||
* Maxime Ripard <maxime.ripard@free-electrons.com>
|
* Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <linux/delay.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
@ -18,10 +19,9 @@
|
|||||||
#include <linux/of_device.h>
|
#include <linux/of_device.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/reset-controller.h>
|
#include <linux/reset-controller.h>
|
||||||
|
#include <linux/reset/reset-simple.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
|
|
||||||
#include "reset-simple.h"
|
|
||||||
|
|
||||||
static inline struct reset_simple_data *
|
static inline struct reset_simple_data *
|
||||||
to_reset_simple_data(struct reset_controller_dev *rcdev)
|
to_reset_simple_data(struct reset_controller_dev *rcdev)
|
||||||
{
|
{
|
||||||
@ -64,6 +64,24 @@ static int reset_simple_deassert(struct reset_controller_dev *rcdev,
|
|||||||
return reset_simple_update(rcdev, id, false);
|
return reset_simple_update(rcdev, id, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int reset_simple_reset(struct reset_controller_dev *rcdev,
|
||||||
|
unsigned long id)
|
||||||
|
{
|
||||||
|
struct reset_simple_data *data = to_reset_simple_data(rcdev);
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!data->reset_us)
|
||||||
|
return -ENOTSUPP;
|
||||||
|
|
||||||
|
ret = reset_simple_assert(rcdev, id);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
usleep_range(data->reset_us, data->reset_us * 2);
|
||||||
|
|
||||||
|
return reset_simple_deassert(rcdev, id);
|
||||||
|
}
|
||||||
|
|
||||||
static int reset_simple_status(struct reset_controller_dev *rcdev,
|
static int reset_simple_status(struct reset_controller_dev *rcdev,
|
||||||
unsigned long id)
|
unsigned long id)
|
||||||
{
|
{
|
||||||
@ -81,6 +99,7 @@ static int reset_simple_status(struct reset_controller_dev *rcdev,
|
|||||||
const struct reset_control_ops reset_simple_ops = {
|
const struct reset_control_ops reset_simple_ops = {
|
||||||
.assert = reset_simple_assert,
|
.assert = reset_simple_assert,
|
||||||
.deassert = reset_simple_deassert,
|
.deassert = reset_simple_deassert,
|
||||||
|
.reset = reset_simple_reset,
|
||||||
.status = reset_simple_status,
|
.status = reset_simple_status,
|
||||||
};
|
};
|
||||||
EXPORT_SYMBOL_GPL(reset_simple_ops);
|
EXPORT_SYMBOL_GPL(reset_simple_ops);
|
||||||
|
@ -11,13 +11,12 @@
|
|||||||
#include <linux/of_address.h>
|
#include <linux/of_address.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/reset-controller.h>
|
#include <linux/reset-controller.h>
|
||||||
|
#include <linux/reset/reset-simple.h>
|
||||||
#include <linux/reset/socfpga.h>
|
#include <linux/reset/socfpga.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
#include "reset-simple.h"
|
|
||||||
|
|
||||||
#define SOCFPGA_NR_BANKS 8
|
#define SOCFPGA_NR_BANKS 8
|
||||||
|
|
||||||
static int a10_reset_init(struct device_node *np)
|
static int a10_reset_init(struct device_node *np)
|
||||||
|
@ -14,13 +14,12 @@
|
|||||||
#include <linux/of_address.h>
|
#include <linux/of_address.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/reset-controller.h>
|
#include <linux/reset-controller.h>
|
||||||
|
#include <linux/reset/reset-simple.h>
|
||||||
#include <linux/reset/sunxi.h>
|
#include <linux/reset/sunxi.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
#include "reset-simple.h"
|
|
||||||
|
|
||||||
static int sunxi_reset_init(struct device_node *np)
|
static int sunxi_reset_init(struct device_node *np)
|
||||||
{
|
{
|
||||||
struct reset_simple_data *data;
|
struct reset_simple_data *data;
|
||||||
|
@ -9,8 +9,7 @@
|
|||||||
#include <linux/of_device.h>
|
#include <linux/of_device.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/reset.h>
|
#include <linux/reset.h>
|
||||||
|
#include <linux/reset/reset-simple.h>
|
||||||
#include "reset-simple.h"
|
|
||||||
|
|
||||||
#define MAX_CLKS 2
|
#define MAX_CLKS 2
|
||||||
#define MAX_RSTS 2
|
#define MAX_RSTS 2
|
||||||
|
@ -27,6 +27,12 @@
|
|||||||
* @status_active_low: if true, bits read back as cleared while the reset is
|
* @status_active_low: if true, bits read back as cleared while the reset is
|
||||||
* asserted. Otherwise, bits read back as set while the
|
* asserted. Otherwise, bits read back as set while the
|
||||||
* reset is asserted.
|
* reset is asserted.
|
||||||
|
* @reset_us: Minimum delay in microseconds needed that needs to be
|
||||||
|
* waited for between an assert and a deassert to reset the
|
||||||
|
* device. If multiple consumers with different delay
|
||||||
|
* requirements are connected to this controller, it must
|
||||||
|
* be the largest minimum delay. 0 means that such a delay is
|
||||||
|
* unknown and the reset operation is unsupported.
|
||||||
*/
|
*/
|
||||||
struct reset_simple_data {
|
struct reset_simple_data {
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
@ -34,6 +40,7 @@ struct reset_simple_data {
|
|||||||
struct reset_controller_dev rcdev;
|
struct reset_controller_dev rcdev;
|
||||||
bool active_low;
|
bool active_low;
|
||||||
bool status_active_low;
|
bool status_active_low;
|
||||||
|
unsigned int reset_us;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const struct reset_control_ops reset_simple_ops;
|
extern const struct reset_control_ops reset_simple_ops;
|
Loading…
Reference in New Issue
Block a user