^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) STB6100 Silicon Tuner
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) Copyright (C) Manu Abraham (abraham.manu@gmail.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) Copyright (C) ST Microelectronics
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #ifndef __STB_6100_REG_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define __STB_6100_REG_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/dvb/frontend.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <media/dvb_frontend.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #define STB6100_LD 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define STB6100_LD_LOCK (1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define STB6100_VCO 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define STB6100_VCO_OSCH (0x01 << 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define STB6100_VCO_OSCH_SHIFT 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define STB6100_VCO_OCK (0x03 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define STB6100_VCO_OCK_SHIFT 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define STB6100_VCO_ODIV (0x01 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define STB6100_VCO_ODIV_SHIFT 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define STB6100_VCO_OSM (0x0f << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define STB6100_NI 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define STB6100_NF_LSB 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define STB6100_K 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define STB6100_K_PSD2 (0x01 << 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define STB6100_K_PSD2_SHIFT 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define STB6100_K_NF_MSB (0x03 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define STB6100_G 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define STB6100_G_G (0x0f << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define STB6100_G_GCT (0x07 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define STB6100_F 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define STB6100_F_F (0x1f << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define STB6100_DLB 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define STB6100_TEST1 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define STB6100_FCCK 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define STB6100_FCCK_FCCK (0x01 << 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define STB6100_LPEN 0x0a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define STB6100_LPEN_LPEN (0x01 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define STB6100_LPEN_SYNP (0x01 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define STB6100_LPEN_OSCP (0x01 << 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define STB6100_LPEN_BEN (0x01 << 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define STB6100_TEST3 0x0b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define STB6100_NUMREGS 0x0c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define INRANGE(val, x, y) (((x <= val) && (val <= y)) || \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) ((y <= val) && (val <= x)) ? 1 : 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define CHKRANGE(val, x, y) (((val >= x) && (val < y)) ? 1 : 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) struct stb6100_config {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) u8 tuner_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) u32 refclock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) struct stb6100_state {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) struct i2c_adapter *i2c;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) const struct stb6100_config *config;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) struct dvb_tuner_ops ops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) struct dvb_frontend *frontend;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) u32 frequency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) u32 srate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) u32 bandwidth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) u32 reference;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #if IS_REACHABLE(CONFIG_DVB_STB6100)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) extern struct dvb_frontend *stb6100_attach(struct dvb_frontend *fe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) const struct stb6100_config *config,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) struct i2c_adapter *i2c);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) static inline struct dvb_frontend *stb6100_attach(struct dvb_frontend *fe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) const struct stb6100_config *config,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) struct i2c_adapter *i2c)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) printk(KERN_WARNING "%s: Driver disabled by Kconfig\n", __func__);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #endif //CONFIG_DVB_STB6100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #endif