162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *  Copyright (C) 2003 Deep Blue Solutions, Ltd, All Rights Reserved.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *  Support functions for calculating clocks/divisors for the ICST
662306a36Sopenharmony_ci *  clock generators.  See https://www.idt.com/ for more information
762306a36Sopenharmony_ci *  on these devices.
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci#ifndef ICST_H
1062306a36Sopenharmony_ci#define ICST_H
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistruct icst_params {
1362306a36Sopenharmony_ci	unsigned long	ref;
1462306a36Sopenharmony_ci	unsigned long	vco_max;	/* inclusive */
1562306a36Sopenharmony_ci	unsigned long	vco_min;	/* exclusive */
1662306a36Sopenharmony_ci	unsigned short	vd_min;		/* inclusive */
1762306a36Sopenharmony_ci	unsigned short	vd_max;		/* inclusive */
1862306a36Sopenharmony_ci	unsigned char	rd_min;		/* inclusive */
1962306a36Sopenharmony_ci	unsigned char	rd_max;		/* inclusive */
2062306a36Sopenharmony_ci	const unsigned char *s2div;	/* chip specific s2div array */
2162306a36Sopenharmony_ci	const unsigned char *idx2s;	/* chip specific idx2s array */
2262306a36Sopenharmony_ci};
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistruct icst_vco {
2562306a36Sopenharmony_ci	unsigned short	v;
2662306a36Sopenharmony_ci	unsigned char	r;
2762306a36Sopenharmony_ci	unsigned char	s;
2862306a36Sopenharmony_ci};
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciunsigned long icst_hz(const struct icst_params *p, struct icst_vco vco);
3162306a36Sopenharmony_cistruct icst_vco icst_hz_to_vco(const struct icst_params *p, unsigned long freq);
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci/*
3462306a36Sopenharmony_ci * ICST307 VCO frequency must be between 6MHz and 200MHz (3.3 or 5V).
3562306a36Sopenharmony_ci * This frequency is pre-output divider.
3662306a36Sopenharmony_ci */
3762306a36Sopenharmony_ci#define ICST307_VCO_MIN	6000000
3862306a36Sopenharmony_ci#define ICST307_VCO_MAX	200000000
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciextern const unsigned char icst307_s2div[];
4162306a36Sopenharmony_ciextern const unsigned char icst307_idx2s[];
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci/*
4462306a36Sopenharmony_ci * ICST525 VCO frequency must be between 10MHz and 200MHz (3V) or 320MHz (5V).
4562306a36Sopenharmony_ci * This frequency is pre-output divider.
4662306a36Sopenharmony_ci */
4762306a36Sopenharmony_ci#define ICST525_VCO_MIN		10000000
4862306a36Sopenharmony_ci#define ICST525_VCO_MAX_3V	200000000
4962306a36Sopenharmony_ci#define ICST525_VCO_MAX_5V	320000000
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ciextern const unsigned char icst525_s2div[];
5262306a36Sopenharmony_ciextern const unsigned char icst525_idx2s[];
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#endif
55