178977Sroam/* SPDX-License-Identifier: GPL-2.0-only */
278977Sroam/*
378977Sroam *
478977Sroam * Copyright (C) 2010 John Crispin <john@phrozen.org>
578977Sroam */
678977Sroam
778977Sroam#ifndef _LTQ_CLK_H__
878977Sroam#define _LTQ_CLK_H__
978977Sroam
1078977Sroam#include <linux/clkdev.h>
1178977Sroam
1278977Sroam/* clock speeds */
1378977Sroam#define CLOCK_33M	33333333
1478977Sroam#define CLOCK_60M	60000000
1578977Sroam#define CLOCK_62_5M	62500000
1678977Sroam#define CLOCK_83M	83333333
1778977Sroam#define CLOCK_83_5M	83500000
1878977Sroam#define CLOCK_98_304M	98304000
1978977Sroam#define CLOCK_100M	100000000
2078977Sroam#define CLOCK_111M	111111111
2178977Sroam#define CLOCK_125M	125000000
2278977Sroam#define CLOCK_133M	133333333
2378977Sroam#define CLOCK_150M	150000000
2478977Sroam#define CLOCK_166M	166666666
2578977Sroam#define CLOCK_167M	166666667
2678977Sroam#define CLOCK_196_608M	196608000
27114589Sobrien#define CLOCK_200M	200000000
28114589Sobrien#define CLOCK_222M	222000000
2978977Sroam#define CLOCK_240M	240000000
3078977Sroam#define CLOCK_250M	250000000
3178977Sroam#define CLOCK_266M	266666666
3278977Sroam#define CLOCK_288M	288888888
3378977Sroam#define CLOCK_300M	300000000
3478977Sroam#define CLOCK_333M	333333333
3578977Sroam#define CLOCK_360M	360000000
3678977Sroam#define CLOCK_393M	393215332
3778977Sroam#define CLOCK_400M	400000000
3878977Sroam#define CLOCK_432M	432000000
3978977Sroam#define CLOCK_450M	450000000
4078977Sroam#define CLOCK_500M	500000000
4178977Sroam#define CLOCK_600M	600000000
4278977Sroam#define CLOCK_666M	666666666
4378977Sroam#define CLOCK_720M	720000000
4478977Sroam
4578977Sroam/* clock out speeds */
4678977Sroam#define CLOCK_32_768K	32768
4778977Sroam#define CLOCK_1_536M	1536000
4878977Sroam#define CLOCK_2_5M	2500000
4978977Sroam#define CLOCK_12M	12000000
5078977Sroam#define CLOCK_24M	24000000
5178977Sroam#define CLOCK_25M	25000000
5278977Sroam#define CLOCK_30M	30000000
5378977Sroam#define CLOCK_40M	40000000
5478977Sroam#define CLOCK_48M	48000000
5578977Sroam#define CLOCK_50M	50000000
5678977Sroam#define CLOCK_60M	60000000
5778977Sroam
5878977Sroamstruct clk {
5978977Sroam	struct clk_lookup cl;
6078977Sroam	unsigned long rate;
6178977Sroam	unsigned long *rates;
6278977Sroam	unsigned int module;
6378977Sroam	unsigned int bits;
6478977Sroam	unsigned long (*get_rate) (void);
6578977Sroam	int (*enable) (struct clk *clk);
6678977Sroam	void (*disable) (struct clk *clk);
6778977Sroam	int (*activate) (struct clk *clk);
6878977Sroam	void (*deactivate) (struct clk *clk);
6978977Sroam	void (*reboot) (struct clk *clk);
7078977Sroam};
7178977Sroam
7278977Sroamextern void clkdev_add_static(unsigned long cpu, unsigned long fpi,
7378977Sroam				unsigned long io, unsigned long ppe);
7478977Sroam
7578977Sroamextern unsigned long ltq_danube_cpu_hz(void);
7678977Sroamextern unsigned long ltq_danube_fpi_hz(void);
7778977Sroamextern unsigned long ltq_danube_pp32_hz(void);
7878977Sroam
7978977Sroamextern unsigned long ltq_ar9_cpu_hz(void);
8078977Sroamextern unsigned long ltq_ar9_fpi_hz(void);
8178977Sroam
8278977Sroamextern unsigned long ltq_vr9_cpu_hz(void);
8378977Sroamextern unsigned long ltq_vr9_fpi_hz(void);
8478977Sroamextern unsigned long ltq_vr9_pp32_hz(void);
8578977Sroam
8678977Sroamextern unsigned long ltq_ar10_cpu_hz(void);
8778977Sroamextern unsigned long ltq_ar10_fpi_hz(void);
8878977Sroamextern unsigned long ltq_ar10_pp32_hz(void);
8978977Sroam
9078977Sroamextern unsigned long ltq_grx390_cpu_hz(void);
9178977Sroamextern unsigned long ltq_grx390_fpi_hz(void);
9278977Sroamextern unsigned long ltq_grx390_pp32_hz(void);
9378977Sroam
9478977Sroam#endif
9578977Sroam