174ba9207SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
29a0bf528SMauro Carvalho Chehab /*
39a0bf528SMauro Carvalho Chehab 	STV6110(A) Silicon tuner driver
49a0bf528SMauro Carvalho Chehab 
59a0bf528SMauro Carvalho Chehab 	Copyright (C) Manu Abraham <abraham.manu@gmail.com>
69a0bf528SMauro Carvalho Chehab 
79a0bf528SMauro Carvalho Chehab 	Copyright (C) ST Microelectronics
89a0bf528SMauro Carvalho Chehab 
99a0bf528SMauro Carvalho Chehab */
109a0bf528SMauro Carvalho Chehab 
119a0bf528SMauro Carvalho Chehab #ifndef __STV6110x_PRIV_H
129a0bf528SMauro Carvalho Chehab #define __STV6110x_PRIV_H
139a0bf528SMauro Carvalho Chehab 
149a0bf528SMauro Carvalho Chehab #define FE_ERROR				0
159a0bf528SMauro Carvalho Chehab #define FE_NOTICE				1
169a0bf528SMauro Carvalho Chehab #define FE_INFO					2
179a0bf528SMauro Carvalho Chehab #define FE_DEBUG				3
189a0bf528SMauro Carvalho Chehab #define FE_DEBUGREG				4
199a0bf528SMauro Carvalho Chehab 
209a0bf528SMauro Carvalho Chehab #define dprintk(__y, __z, format, arg...) do {						\
219a0bf528SMauro Carvalho Chehab 	if (__z) {									\
229a0bf528SMauro Carvalho Chehab 		if	((verbose > FE_ERROR) && (verbose > __y))			\
239a0bf528SMauro Carvalho Chehab 			printk(KERN_ERR "%s: " format "\n", __func__ , ##arg);		\
249a0bf528SMauro Carvalho Chehab 		else if	((verbose > FE_NOTICE) && (verbose > __y))			\
259a0bf528SMauro Carvalho Chehab 			printk(KERN_NOTICE "%s: " format "\n", __func__ , ##arg);	\
269a0bf528SMauro Carvalho Chehab 		else if ((verbose > FE_INFO) && (verbose > __y))			\
279a0bf528SMauro Carvalho Chehab 			printk(KERN_INFO "%s: " format "\n", __func__ , ##arg);		\
289a0bf528SMauro Carvalho Chehab 		else if ((verbose > FE_DEBUG) && (verbose > __y))			\
299a0bf528SMauro Carvalho Chehab 			printk(KERN_DEBUG "%s: " format "\n", __func__ , ##arg);	\
309a0bf528SMauro Carvalho Chehab 	} else {									\
319a0bf528SMauro Carvalho Chehab 		if (verbose > __y)							\
329a0bf528SMauro Carvalho Chehab 			printk(format, ##arg);						\
339a0bf528SMauro Carvalho Chehab 	}										\
349a0bf528SMauro Carvalho Chehab } while (0)
359a0bf528SMauro Carvalho Chehab 
369a0bf528SMauro Carvalho Chehab 
379a0bf528SMauro Carvalho Chehab #define STV6110x_SETFIELD(mask, bitf, val)				\
389a0bf528SMauro Carvalho Chehab 	(mask = (mask & (~(((1 << STV6110x_WIDTH_##bitf) - 1) <<	\
399a0bf528SMauro Carvalho Chehab 				  STV6110x_OFFST_##bitf))) |		\
409a0bf528SMauro Carvalho Chehab 			  (val << STV6110x_OFFST_##bitf))
419a0bf528SMauro Carvalho Chehab 
429a0bf528SMauro Carvalho Chehab #define STV6110x_GETFIELD(bitf, val)					\
439a0bf528SMauro Carvalho Chehab 	((val >> STV6110x_OFFST_##bitf) &				\
449a0bf528SMauro Carvalho Chehab 	((1 << STV6110x_WIDTH_##bitf) - 1))
459a0bf528SMauro Carvalho Chehab 
469a0bf528SMauro Carvalho Chehab #define MAKEWORD16(a, b)			(((a) << 8) | (b))
479a0bf528SMauro Carvalho Chehab 
489a0bf528SMauro Carvalho Chehab #define LSB(x)					((x & 0xff))
499a0bf528SMauro Carvalho Chehab #define MSB(y)					((y >> 8) & 0xff)
509a0bf528SMauro Carvalho Chehab 
519a0bf528SMauro Carvalho Chehab #define TRIALS					10
529a0bf528SMauro Carvalho Chehab #define R_DIV(__div)				(1 << (__div + 1))
539a0bf528SMauro Carvalho Chehab #define REFCLOCK_kHz				(stv6110x->config->refclk /    1000)
549a0bf528SMauro Carvalho Chehab #define REFCLOCK_MHz				(stv6110x->config->refclk / 1000000)
559a0bf528SMauro Carvalho Chehab 
569a0bf528SMauro Carvalho Chehab struct stv6110x_state {
573c8f4cd2STobias Klausmann 	struct dvb_frontend		*frontend;
589a0bf528SMauro Carvalho Chehab 	struct i2c_adapter		*i2c;
599a0bf528SMauro Carvalho Chehab 	const struct stv6110x_config	*config;
609a0bf528SMauro Carvalho Chehab 	u8				regs[8];
619a0bf528SMauro Carvalho Chehab 
623c8f4cd2STobias Klausmann 	struct stv6110x_devctl	*devctl;
639a0bf528SMauro Carvalho Chehab };
649a0bf528SMauro Carvalho Chehab 
659a0bf528SMauro Carvalho Chehab #endif /* __STV6110x_PRIV_H */
66