reset-simple.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Simple Reset Controller ops
  4. *
  5. * Based on Allwinner SoCs Reset Controller driver
  6. *
  7. * Copyright 2013 Maxime Ripard
  8. *
  9. * Maxime Ripard <[email protected]>
  10. */
  11. #ifndef __RESET_SIMPLE_H__
  12. #define __RESET_SIMPLE_H__
  13. #include <linux/io.h>
  14. #include <linux/reset-controller.h>
  15. #include <linux/spinlock.h>
  16. /**
  17. * struct reset_simple_data - driver data for simple reset controllers
  18. * @lock: spinlock to protect registers during read-modify-write cycles
  19. * @membase: memory mapped I/O register range
  20. * @rcdev: reset controller device base structure
  21. * @active_low: if true, bits are cleared to assert the reset. Otherwise, bits
  22. * are set to assert the reset. Note that this says nothing about
  23. * the voltage level of the actual reset line.
  24. * @status_active_low: if true, bits read back as cleared while the reset is
  25. * asserted. Otherwise, bits read back as set while the
  26. * reset is asserted.
  27. * @reset_us: Minimum delay in microseconds needed that needs to be
  28. * waited for between an assert and a deassert to reset the
  29. * device. If multiple consumers with different delay
  30. * requirements are connected to this controller, it must
  31. * be the largest minimum delay. 0 means that such a delay is
  32. * unknown and the reset operation is unsupported.
  33. */
  34. struct reset_simple_data {
  35. spinlock_t lock;
  36. void __iomem *membase;
  37. struct reset_controller_dev rcdev;
  38. bool active_low;
  39. bool status_active_low;
  40. unsigned int reset_us;
  41. };
  42. extern const struct reset_control_ops reset_simple_ops;
  43. #endif /* __RESET_SIMPLE_H__ */