1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2003 Deep Blue Solutions, Ltd, All Rights Reserved. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Support functions for calculating clocks/divisors for the ICST 6*4882a593Smuzhiyun * clock generators. See https://www.idt.com/ for more information 7*4882a593Smuzhiyun * on these devices. 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun #ifndef ICST_H 10*4882a593Smuzhiyun #define ICST_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun struct icst_params { 13*4882a593Smuzhiyun unsigned long ref; 14*4882a593Smuzhiyun unsigned long vco_max; /* inclusive */ 15*4882a593Smuzhiyun unsigned long vco_min; /* exclusive */ 16*4882a593Smuzhiyun unsigned short vd_min; /* inclusive */ 17*4882a593Smuzhiyun unsigned short vd_max; /* inclusive */ 18*4882a593Smuzhiyun unsigned char rd_min; /* inclusive */ 19*4882a593Smuzhiyun unsigned char rd_max; /* inclusive */ 20*4882a593Smuzhiyun const unsigned char *s2div; /* chip specific s2div array */ 21*4882a593Smuzhiyun const unsigned char *idx2s; /* chip specific idx2s array */ 22*4882a593Smuzhiyun }; 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun struct icst_vco { 25*4882a593Smuzhiyun unsigned short v; 26*4882a593Smuzhiyun unsigned char r; 27*4882a593Smuzhiyun unsigned char s; 28*4882a593Smuzhiyun }; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun unsigned long icst_hz(const struct icst_params *p, struct icst_vco vco); 31*4882a593Smuzhiyun struct icst_vco icst_hz_to_vco(const struct icst_params *p, unsigned long freq); 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun /* 34*4882a593Smuzhiyun * ICST307 VCO frequency must be between 6MHz and 200MHz (3.3 or 5V). 35*4882a593Smuzhiyun * This frequency is pre-output divider. 36*4882a593Smuzhiyun */ 37*4882a593Smuzhiyun #define ICST307_VCO_MIN 6000000 38*4882a593Smuzhiyun #define ICST307_VCO_MAX 200000000 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun extern const unsigned char icst307_s2div[]; 41*4882a593Smuzhiyun extern const unsigned char icst307_idx2s[]; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun /* 44*4882a593Smuzhiyun * ICST525 VCO frequency must be between 10MHz and 200MHz (3V) or 320MHz (5V). 45*4882a593Smuzhiyun * This frequency is pre-output divider. 46*4882a593Smuzhiyun */ 47*4882a593Smuzhiyun #define ICST525_VCO_MIN 10000000 48*4882a593Smuzhiyun #define ICST525_VCO_MAX_3V 200000000 49*4882a593Smuzhiyun #define ICST525_VCO_MAX_5V 320000000 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun extern const unsigned char icst525_s2div[]; 52*4882a593Smuzhiyun extern const unsigned char icst525_idx2s[]; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun #endif 55