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