1c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham/*
2c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	STB6100 Silicon Tuner
3c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	Copyright (C) Manu Abraham (abraham.manu@gmail.com)
4c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
5c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	Copyright (C) ST Microelectronics
6c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
7c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	This program is free software; you can redistribute it and/or modify
8c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	it under the terms of the GNU General Public License as published by
9c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	the Free Software Foundation; either version 2 of the License, or
10c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	(at your option) any later version.
11c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
12c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	This program is distributed in the hope that it will be useful,
13c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	but WITHOUT ANY WARRANTY; without even the implied warranty of
14c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	GNU General Public License for more details.
16c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
17c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	You should have received a copy of the GNU General Public License
18c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	along with this program; if not, write to the Free Software
19c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham*/
21c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
22c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#ifndef __STB_6100_REG_H
23c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define __STB_6100_REG_H
24c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
25c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#include <linux/dvb/frontend.h>
26c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#include "dvb_frontend.h"
27c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
28c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_LD			0x00
29c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_LD_LOCK			(1 << 0)
30c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
31c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_VCO			0x01
32c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_VCO_OSCH		(0x01 << 7)
33c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_VCO_OSCH_SHIFT		7
34c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_VCO_OCK			(0x03 << 5)
35c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_VCO_OCK_SHIFT		5
36c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_VCO_ODIV		(0x01 << 4)
37c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_VCO_ODIV_SHIFT		4
38c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_VCO_OSM			(0x0f << 0)
39c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
40c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_NI			0x02
41c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_NF_LSB			0x03
42c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
43c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_K			0x04
44c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_K_PSD2			(0x01 << 2)
45c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_K_PSD2_SHIFT            2
46c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_K_NF_MSB		(0x03 << 0)
47c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
48c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_G			0x05
49c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_G_G			(0x0f << 0)
50c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_G_GCT			(0x07 << 5)
51c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
52c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_F			0x06
53c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_F_F			(0x1f << 0)
54c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
55c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_DLB			0x07
56c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
57c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_TEST1			0x08
58c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
59c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_FCCK			0x09
60c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_FCCK_FCCK		(0x01 << 6)
61c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
62c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_LPEN			0x0a
63c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_LPEN_LPEN		(0x01 << 4)
64c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_LPEN_SYNP		(0x01 << 5)
65c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_LPEN_OSCP		(0x01 << 6)
66c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_LPEN_BEN		(0x01 << 7)
67c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
68c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_TEST3			0x0b
69c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
70c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define STB6100_NUMREGS                 0x0c
71c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
72c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
73c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define INRANGE(val, x, y)		(((x <= val) && (val <= y)) ||		\
74c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham					 ((y <= val) && (val <= x)) ? 1 : 0)
75c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
76c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#define CHKRANGE(val, x, y)		(((val >= x) && (val < y)) ? 1 : 0)
77c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
78c46b65621007a2ede49464d227f64dd3a909a109Manu Abrahamstruct stb6100_config {
79c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	u8	tuner_address;
80c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	u32	refclock;
81c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham};
82c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
83c46b65621007a2ede49464d227f64dd3a909a109Manu Abrahamstruct stb6100_state {
84c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	struct i2c_adapter *i2c;
85c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
86c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	const struct stb6100_config	*config;
87c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	struct dvb_tuner_ops		ops;
88c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	struct dvb_frontend		*frontend;
89c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	struct tuner_state		status;
90c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
91c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	u32 frequency;
92c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	u32 srate;
93c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	u32 bandwidth;
94c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham	u32 reference;
95c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham};
96c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
977b34be71db533f3e0cf93d53cf62d036cdb5418aPeter Senna Tschudin#if IS_ENABLED(CONFIG_DVB_STB6100)
98ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abraham
99ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abrahamextern struct dvb_frontend *stb6100_attach(struct dvb_frontend *fe,
1002e4e98e788d8fbe30892bee3375067a4937155dalawrence rust					   const struct stb6100_config *config,
101ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abraham					   struct i2c_adapter *i2c);
102ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abraham
103ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abraham#else
104ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abraham
105ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abrahamstatic inline struct dvb_frontend *stb6100_attach(struct dvb_frontend *fe,
1062e4e98e788d8fbe30892bee3375067a4937155dalawrence rust						  const struct stb6100_config *config,
107ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abraham						  struct i2c_adapter *i2c)
108ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abraham{
109ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abraham	printk(KERN_WARNING "%s: Driver disabled by Kconfig\n", __func__);
110ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abraham	return NULL;
111ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abraham}
112ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abraham
113ae9902da96b4d2d82707706c7fbc93a8e501dde8Manu Abraham#endif //CONFIG_DVB_STB6100
114c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham
115c46b65621007a2ede49464d227f64dd3a909a109Manu Abraham#endif
116