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