1*16216333SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 2ed85adaaSAntti Palosaari /* 3ed85adaaSAntti Palosaari * Elonics E4000 silicon tuner driver 4ed85adaaSAntti Palosaari * 5ed85adaaSAntti Palosaari * Copyright (C) 2012 Antti Palosaari <crope@iki.fi> 6ed85adaaSAntti Palosaari */ 7ed85adaaSAntti Palosaari 8ed85adaaSAntti Palosaari #ifndef E4000_PRIV_H 9ed85adaaSAntti Palosaari #define E4000_PRIV_H 10ed85adaaSAntti Palosaari 11ed85adaaSAntti Palosaari #include "e4000.h" 12f8b9b871SAntti Palosaari #include <linux/math64.h> 13adaa616fSAntti Palosaari #include <media/v4l2-ctrls.h> 14adaa616fSAntti Palosaari #include <media/v4l2-subdev.h> 15bd428bbcSAntti Palosaari #include <linux/regmap.h> 16ed85adaaSAntti Palosaari 17f8b9b871SAntti Palosaari struct e4000_dev { 1828fd31f8SAntti Palosaari struct i2c_client *client; 19bd428bbcSAntti Palosaari struct regmap *regmap; 20f8b9b871SAntti Palosaari u32 clk; 2128fd31f8SAntti Palosaari struct dvb_frontend *fe; 22adaa616fSAntti Palosaari struct v4l2_subdev sd; 23ecfb7ca3SAntti Palosaari bool active; 24c7861bb0SAntti Palosaari unsigned int f_frequency; 25c7861bb0SAntti Palosaari unsigned int f_bandwidth; 26adaa616fSAntti Palosaari 27adaa616fSAntti Palosaari /* Controls */ 28adaa616fSAntti Palosaari struct v4l2_ctrl_handler hdl; 29adaa616fSAntti Palosaari struct v4l2_ctrl *bandwidth_auto; 30adaa616fSAntti Palosaari struct v4l2_ctrl *bandwidth; 31adaa616fSAntti Palosaari struct v4l2_ctrl *lna_gain_auto; 32adaa616fSAntti Palosaari struct v4l2_ctrl *lna_gain; 33adaa616fSAntti Palosaari struct v4l2_ctrl *mixer_gain_auto; 34adaa616fSAntti Palosaari struct v4l2_ctrl *mixer_gain; 35adaa616fSAntti Palosaari struct v4l2_ctrl *if_gain_auto; 36adaa616fSAntti Palosaari struct v4l2_ctrl *if_gain; 37ecfb7ca3SAntti Palosaari struct v4l2_ctrl *pll_lock; 38ed85adaaSAntti Palosaari }; 39ed85adaaSAntti Palosaari 40ed85adaaSAntti Palosaari struct e4000_pll { 41ed85adaaSAntti Palosaari u32 freq; 420e3a71c3SAntti Palosaari u8 div_out_reg; 430e3a71c3SAntti Palosaari u8 div_out; 44ed85adaaSAntti Palosaari }; 45ed85adaaSAntti Palosaari 46ed85adaaSAntti Palosaari static const struct e4000_pll e4000_pll_lut[] = { 47ed85adaaSAntti Palosaari /* VCO min VCO max */ 48ed85adaaSAntti Palosaari { 72400000, 0x0f, 48 }, /* .......... 3475200000 */ 49ed85adaaSAntti Palosaari { 81200000, 0x0e, 40 }, /* 2896000000 3248000000 */ 50ed85adaaSAntti Palosaari { 108300000, 0x0d, 32 }, /* 2598400000 3465600000 */ 51ed85adaaSAntti Palosaari { 162500000, 0x0c, 24 }, /* 2599200000 3900000000 */ 52ed85adaaSAntti Palosaari { 216600000, 0x0b, 16 }, /* 2600000000 3465600000 */ 53ed85adaaSAntti Palosaari { 325000000, 0x0a, 12 }, /* 2599200000 3900000000 */ 54ed85adaaSAntti Palosaari { 350000000, 0x09, 8 }, /* 2600000000 2800000000 */ 55ed85adaaSAntti Palosaari { 432000000, 0x03, 8 }, /* 2800000000 3456000000 */ 56ed85adaaSAntti Palosaari { 667000000, 0x02, 6 }, /* 2592000000 4002000000 */ 57ed85adaaSAntti Palosaari { 1200000000, 0x01, 4 }, /* 2668000000 4800000000 */ 58ed85adaaSAntti Palosaari { 0xffffffff, 0x00, 2 }, /* 2400000000 .......... */ 59ed85adaaSAntti Palosaari }; 60ed85adaaSAntti Palosaari 61ed85adaaSAntti Palosaari struct e4000_lna_filter { 62ed85adaaSAntti Palosaari u32 freq; 63ed85adaaSAntti Palosaari u8 val; 64ed85adaaSAntti Palosaari }; 65ed85adaaSAntti Palosaari 66ed85adaaSAntti Palosaari static const struct e4000_lna_filter e400_lna_filter_lut[] = { 67ed85adaaSAntti Palosaari { 370000000, 0 }, 68ed85adaaSAntti Palosaari { 392500000, 1 }, 69ed85adaaSAntti Palosaari { 415000000, 2 }, 70ed85adaaSAntti Palosaari { 437500000, 3 }, 71ed85adaaSAntti Palosaari { 462500000, 4 }, 72ed85adaaSAntti Palosaari { 490000000, 5 }, 73ed85adaaSAntti Palosaari { 522500000, 6 }, 74ed85adaaSAntti Palosaari { 557500000, 7 }, 75ed85adaaSAntti Palosaari { 595000000, 8 }, 76ed85adaaSAntti Palosaari { 642500000, 9 }, 77ed85adaaSAntti Palosaari { 695000000, 10 }, 78ed85adaaSAntti Palosaari { 740000000, 11 }, 79ed85adaaSAntti Palosaari { 800000000, 12 }, 80ed85adaaSAntti Palosaari { 865000000, 13 }, 81ed85adaaSAntti Palosaari { 930000000, 14 }, 82ed85adaaSAntti Palosaari { 1000000000, 15 }, 83ed85adaaSAntti Palosaari { 1310000000, 0 }, 84ed85adaaSAntti Palosaari { 1340000000, 1 }, 85ed85adaaSAntti Palosaari { 1385000000, 2 }, 86ed85adaaSAntti Palosaari { 1427500000, 3 }, 87ed85adaaSAntti Palosaari { 1452500000, 4 }, 88ed85adaaSAntti Palosaari { 1475000000, 5 }, 89ed85adaaSAntti Palosaari { 1510000000, 6 }, 90ed85adaaSAntti Palosaari { 1545000000, 7 }, 91ed85adaaSAntti Palosaari { 1575000000, 8 }, 92ed85adaaSAntti Palosaari { 1615000000, 9 }, 93ed85adaaSAntti Palosaari { 1650000000, 10 }, 94ed85adaaSAntti Palosaari { 1670000000, 11 }, 95ed85adaaSAntti Palosaari { 1690000000, 12 }, 96ed85adaaSAntti Palosaari { 1710000000, 13 }, 97ed85adaaSAntti Palosaari { 1735000000, 14 }, 98ed85adaaSAntti Palosaari { 0xffffffff, 15 }, 99ed85adaaSAntti Palosaari }; 100ed85adaaSAntti Palosaari 101ed85adaaSAntti Palosaari struct e4000_band { 102ed85adaaSAntti Palosaari u32 freq; 103ed85adaaSAntti Palosaari u8 reg07_val; 104ed85adaaSAntti Palosaari u8 reg78_val; 105ed85adaaSAntti Palosaari }; 106ed85adaaSAntti Palosaari 107ed85adaaSAntti Palosaari static const struct e4000_band e4000_band_lut[] = { 108ed85adaaSAntti Palosaari { 140000000, 0x01, 0x03 }, 109ed85adaaSAntti Palosaari { 350000000, 0x03, 0x03 }, 110ed85adaaSAntti Palosaari { 1000000000, 0x05, 0x03 }, 111ed85adaaSAntti Palosaari { 0xffffffff, 0x07, 0x00 }, 112ed85adaaSAntti Palosaari }; 113ed85adaaSAntti Palosaari 114ed85adaaSAntti Palosaari struct e4000_if_filter { 115ed85adaaSAntti Palosaari u32 freq; 116ed85adaaSAntti Palosaari u8 reg11_val; 117ed85adaaSAntti Palosaari u8 reg12_val; 118ed85adaaSAntti Palosaari }; 119ed85adaaSAntti Palosaari 120ed85adaaSAntti Palosaari static const struct e4000_if_filter e4000_if_filter_lut[] = { 121ed85adaaSAntti Palosaari { 4300000, 0xfd, 0x1f }, 122ed85adaaSAntti Palosaari { 4400000, 0xfd, 0x1e }, 123ed85adaaSAntti Palosaari { 4480000, 0xfc, 0x1d }, 124ed85adaaSAntti Palosaari { 4560000, 0xfc, 0x1c }, 125ed85adaaSAntti Palosaari { 4600000, 0xfc, 0x1b }, 126ed85adaaSAntti Palosaari { 4800000, 0xfc, 0x1a }, 127ed85adaaSAntti Palosaari { 4900000, 0xfc, 0x19 }, 128ed85adaaSAntti Palosaari { 5000000, 0xfc, 0x18 }, 129ed85adaaSAntti Palosaari { 5100000, 0xfc, 0x17 }, 130ed85adaaSAntti Palosaari { 5200000, 0xfc, 0x16 }, 131ed85adaaSAntti Palosaari { 5400000, 0xfc, 0x15 }, 132ed85adaaSAntti Palosaari { 5500000, 0xfc, 0x14 }, 133ed85adaaSAntti Palosaari { 5600000, 0xfc, 0x13 }, 134ed85adaaSAntti Palosaari { 5800000, 0xfb, 0x12 }, 135ed85adaaSAntti Palosaari { 5900000, 0xfb, 0x11 }, 136ed85adaaSAntti Palosaari { 6000000, 0xfb, 0x10 }, 137ed85adaaSAntti Palosaari { 6200000, 0xfb, 0x0f }, 138ed85adaaSAntti Palosaari { 6400000, 0xfa, 0x0e }, 139ed85adaaSAntti Palosaari { 6600000, 0xfa, 0x0d }, 140ed85adaaSAntti Palosaari { 6800000, 0xf9, 0x0c }, 141ed85adaaSAntti Palosaari { 7200000, 0xf9, 0x0b }, 142ed85adaaSAntti Palosaari { 7400000, 0xf9, 0x0a }, 143ed85adaaSAntti Palosaari { 7600000, 0xf8, 0x09 }, 144ed85adaaSAntti Palosaari { 7800000, 0xf8, 0x08 }, 145ed85adaaSAntti Palosaari { 8200000, 0xf8, 0x07 }, 146ed85adaaSAntti Palosaari { 8600000, 0xf7, 0x06 }, 147ed85adaaSAntti Palosaari { 8800000, 0xf7, 0x05 }, 148ed85adaaSAntti Palosaari { 9200000, 0xf7, 0x04 }, 149ed85adaaSAntti Palosaari { 9600000, 0xf6, 0x03 }, 150ed85adaaSAntti Palosaari { 10000000, 0xf6, 0x02 }, 151ed85adaaSAntti Palosaari { 10600000, 0xf5, 0x01 }, 152ed85adaaSAntti Palosaari { 11000000, 0xf5, 0x00 }, 153ed85adaaSAntti Palosaari { 0xffffffff, 0x00, 0x20 }, 154ed85adaaSAntti Palosaari }; 155ed85adaaSAntti Palosaari 156adaa616fSAntti Palosaari struct e4000_if_gain { 157adaa616fSAntti Palosaari u8 reg16_val; 158adaa616fSAntti Palosaari u8 reg17_val; 159adaa616fSAntti Palosaari }; 160adaa616fSAntti Palosaari 161adaa616fSAntti Palosaari static const struct e4000_if_gain e4000_if_gain_lut[] = { 162adaa616fSAntti Palosaari {0x00, 0x00}, 163adaa616fSAntti Palosaari {0x20, 0x00}, 164adaa616fSAntti Palosaari {0x40, 0x00}, 165adaa616fSAntti Palosaari {0x02, 0x00}, 166adaa616fSAntti Palosaari {0x22, 0x00}, 167adaa616fSAntti Palosaari {0x42, 0x00}, 168adaa616fSAntti Palosaari {0x04, 0x00}, 169adaa616fSAntti Palosaari {0x24, 0x00}, 170adaa616fSAntti Palosaari {0x44, 0x00}, 171adaa616fSAntti Palosaari {0x01, 0x00}, 172adaa616fSAntti Palosaari {0x21, 0x00}, 173adaa616fSAntti Palosaari {0x41, 0x00}, 174adaa616fSAntti Palosaari {0x03, 0x00}, 175adaa616fSAntti Palosaari {0x23, 0x00}, 176adaa616fSAntti Palosaari {0x43, 0x00}, 177adaa616fSAntti Palosaari {0x05, 0x00}, 178adaa616fSAntti Palosaari {0x25, 0x00}, 179adaa616fSAntti Palosaari {0x45, 0x00}, 180adaa616fSAntti Palosaari {0x07, 0x00}, 181adaa616fSAntti Palosaari {0x27, 0x00}, 182adaa616fSAntti Palosaari {0x47, 0x00}, 183adaa616fSAntti Palosaari {0x0f, 0x00}, 184adaa616fSAntti Palosaari {0x2f, 0x00}, 185adaa616fSAntti Palosaari {0x4f, 0x00}, 186adaa616fSAntti Palosaari {0x17, 0x00}, 187adaa616fSAntti Palosaari {0x37, 0x00}, 188adaa616fSAntti Palosaari {0x57, 0x00}, 189adaa616fSAntti Palosaari {0x1f, 0x00}, 190adaa616fSAntti Palosaari {0x3f, 0x00}, 191adaa616fSAntti Palosaari {0x5f, 0x00}, 192adaa616fSAntti Palosaari {0x1f, 0x01}, 193adaa616fSAntti Palosaari {0x3f, 0x01}, 194adaa616fSAntti Palosaari {0x5f, 0x01}, 195adaa616fSAntti Palosaari {0x1f, 0x02}, 196adaa616fSAntti Palosaari {0x3f, 0x02}, 197adaa616fSAntti Palosaari {0x5f, 0x02}, 198adaa616fSAntti Palosaari {0x1f, 0x03}, 199adaa616fSAntti Palosaari {0x3f, 0x03}, 200adaa616fSAntti Palosaari {0x5f, 0x03}, 201adaa616fSAntti Palosaari {0x1f, 0x04}, 202adaa616fSAntti Palosaari {0x3f, 0x04}, 203adaa616fSAntti Palosaari {0x5f, 0x04}, 204adaa616fSAntti Palosaari {0x1f, 0x0c}, 205adaa616fSAntti Palosaari {0x3f, 0x0c}, 206adaa616fSAntti Palosaari {0x5f, 0x0c}, 207adaa616fSAntti Palosaari {0x1f, 0x14}, 208adaa616fSAntti Palosaari {0x3f, 0x14}, 209adaa616fSAntti Palosaari {0x5f, 0x14}, 210adaa616fSAntti Palosaari {0x1f, 0x1c}, 211adaa616fSAntti Palosaari {0x3f, 0x1c}, 212adaa616fSAntti Palosaari {0x5f, 0x1c}, 213adaa616fSAntti Palosaari {0x1f, 0x24}, 214adaa616fSAntti Palosaari {0x3f, 0x24}, 215adaa616fSAntti Palosaari {0x5f, 0x24}, 216adaa616fSAntti Palosaari {0x7f, 0x24}, 217adaa616fSAntti Palosaari }; 218adaa616fSAntti Palosaari 219ed85adaaSAntti Palosaari #endif 220