root/drivers/clk/sunxi/clk-factors.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef __MACH_SUNXI_CLK_FACTORS_H
   3 #define __MACH_SUNXI_CLK_FACTORS_H
   4 
   5 #include <linux/clk-provider.h>
   6 #include <linux/spinlock.h>
   7 
   8 #define SUNXI_FACTORS_NOT_APPLICABLE    (0)
   9 
  10 struct clk_factors_config {
  11         u8 nshift;
  12         u8 nwidth;
  13         u8 kshift;
  14         u8 kwidth;
  15         u8 mshift;
  16         u8 mwidth;
  17         u8 pshift;
  18         u8 pwidth;
  19         u8 n_start;
  20 };
  21 
  22 struct factors_request {
  23         unsigned long rate;
  24         unsigned long parent_rate;
  25         u8 parent_index;
  26         u8 n;
  27         u8 k;
  28         u8 m;
  29         u8 p;
  30 };
  31 
  32 struct factors_data {
  33         int enable;
  34         int mux;
  35         int muxmask;
  36         const struct clk_factors_config *table;
  37         void (*getter)(struct factors_request *req);
  38         void (*recalc)(struct factors_request *req);
  39         const char *name;
  40 };
  41 
  42 struct clk_factors {
  43         struct clk_hw hw;
  44         void __iomem *reg;
  45         const struct clk_factors_config *config;
  46         void (*get_factors)(struct factors_request *req);
  47         void (*recalc)(struct factors_request *req);
  48         spinlock_t *lock;
  49         /* for cleanup */
  50         struct clk_mux *mux;
  51         struct clk_gate *gate;
  52 };
  53 
  54 struct clk *sunxi_factors_register(struct device_node *node,
  55                                    const struct factors_data *data,
  56                                    spinlock_t *lock,
  57                                    void __iomem *reg);
  58 struct clk *sunxi_factors_register_critical(struct device_node *node,
  59                                             const struct factors_data *data,
  60                                             spinlock_t *lock,
  61                                             void __iomem *reg);
  62 
  63 void sunxi_factors_unregister(struct device_node *node, struct clk *clk);
  64 
  65 #endif

/* [<][>][^][v][top][bottom][index][help] */