66 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef __MACH_SUNXI_CLK_FACTORS_H3#define __MACH_SUNXI_CLK_FACTORS_H4 5#include <linux/clk-provider.h>6#include <linux/spinlock.h>7 8#define SUNXI_FACTORS_NOT_APPLICABLE (0)9 10struct 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 22struct 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 32struct 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 42struct 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 54struct clk *sunxi_factors_register(struct device_node *node,55 const struct factors_data *data,56 spinlock_t *lock,57 void __iomem *reg);58struct clk *sunxi_factors_register_critical(struct device_node *node,59 const struct factors_data *data,60 spinlock_t *lock,61 void __iomem *reg);62 63void sunxi_factors_unregister(struct device_node *node, struct clk *clk);64 65#endif66