clk-core.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Purna Chandra Mandal,<purna.mandal@microchip.com>
  4. * Copyright (C) 2015 Microchip Technology Inc. All rights reserved.
  5. */
  6. #ifndef __MICROCHIP_CLK_PIC32_H_
  7. #define __MICROCHIP_CLK_PIC32_H_
  8. #include <linux/clk-provider.h>
  9. /* PIC32 clock data */
  10. struct pic32_clk_common {
  11. struct device *dev;
  12. void __iomem *iobase;
  13. spinlock_t reg_lock; /* clock lock */
  14. };
  15. /* System PLL clock */
  16. struct pic32_sys_pll_data {
  17. struct clk_init_data init_data;
  18. const u32 ctrl_reg;
  19. const u32 status_reg;
  20. const u32 lock_mask;
  21. };
  22. /* System clock */
  23. struct pic32_sys_clk_data {
  24. struct clk_init_data init_data;
  25. const u32 mux_reg;
  26. const u32 slew_reg;
  27. const u32 *parent_map;
  28. const u32 slew_div;
  29. };
  30. /* Reference Oscillator clock */
  31. struct pic32_ref_osc_data {
  32. struct clk_init_data init_data;
  33. const u32 ctrl_reg;
  34. const u32 *parent_map;
  35. };
  36. /* Peripheral Bus clock */
  37. struct pic32_periph_clk_data {
  38. struct clk_init_data init_data;
  39. const u32 ctrl_reg;
  40. };
  41. /* External Secondary Oscillator clock */
  42. struct pic32_sec_osc_data {
  43. struct clk_init_data init_data;
  44. const u32 enable_reg;
  45. const u32 status_reg;
  46. const u32 enable_mask;
  47. const u32 status_mask;
  48. const unsigned long fixed_rate;
  49. };
  50. extern const struct clk_ops pic32_pbclk_ops;
  51. extern const struct clk_ops pic32_sclk_ops;
  52. extern const struct clk_ops pic32_sclk_no_div_ops;
  53. extern const struct clk_ops pic32_spll_ops;
  54. extern const struct clk_ops pic32_roclk_ops;
  55. extern const struct clk_ops pic32_sosc_ops;
  56. struct clk *pic32_periph_clk_register(const struct pic32_periph_clk_data *data,
  57. struct pic32_clk_common *core);
  58. struct clk *pic32_refo_clk_register(const struct pic32_ref_osc_data *data,
  59. struct pic32_clk_common *core);
  60. struct clk *pic32_sys_clk_register(const struct pic32_sys_clk_data *data,
  61. struct pic32_clk_common *core);
  62. struct clk *pic32_spll_clk_register(const struct pic32_sys_pll_data *data,
  63. struct pic32_clk_common *core);
  64. struct clk *pic32_sosc_clk_register(const struct pic32_sec_osc_data *data,
  65. struct pic32_clk_common *core);
  66. #endif /* __MICROCHIP_CLK_PIC32_H_*/