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