brintos

brintos / linux-shallow public Read only

0
0
Text · 1.4 KiB · 7ad2ca9 Raw
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