1*16216333SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 2d9cb41afSAntti Palosaari /* 3d9cb41afSAntti Palosaari * FCI FC2580 silicon tuner driver 4d9cb41afSAntti Palosaari * 5d9cb41afSAntti Palosaari * Copyright (C) 2012 Antti Palosaari <crope@iki.fi> 6d9cb41afSAntti Palosaari */ 7d9cb41afSAntti Palosaari 8d9cb41afSAntti Palosaari #ifndef FC2580_PRIV_H 9d9cb41afSAntti Palosaari #define FC2580_PRIV_H 10d9cb41afSAntti Palosaari 11d9cb41afSAntti Palosaari #include "fc2580.h" 12252fad1cSAntti Palosaari #include <media/v4l2-ctrls.h> 13252fad1cSAntti Palosaari #include <media/v4l2-subdev.h> 1435fe4c65SAntti Palosaari #include <linux/regmap.h> 158845cc64SAntti Palosaari #include <linux/math64.h> 16d9cb41afSAntti Palosaari 17d9cb41afSAntti Palosaari struct fc2580_reg_val { 18d9cb41afSAntti Palosaari u8 reg; 19d9cb41afSAntti Palosaari u8 val; 20d9cb41afSAntti Palosaari }; 21d9cb41afSAntti Palosaari 22d9cb41afSAntti Palosaari static const struct fc2580_reg_val fc2580_init_reg_vals[] = { 23d9cb41afSAntti Palosaari {0x00, 0x00}, 24d9cb41afSAntti Palosaari {0x12, 0x86}, 25d9cb41afSAntti Palosaari {0x14, 0x5c}, 26d9cb41afSAntti Palosaari {0x16, 0x3c}, 27d9cb41afSAntti Palosaari {0x1f, 0xd2}, 28d9cb41afSAntti Palosaari {0x09, 0xd7}, 29d9cb41afSAntti Palosaari {0x0b, 0xd5}, 30d9cb41afSAntti Palosaari {0x0c, 0x32}, 31d9cb41afSAntti Palosaari {0x0e, 0x43}, 32d9cb41afSAntti Palosaari {0x21, 0x0a}, 33d9cb41afSAntti Palosaari {0x22, 0x82}, 34d9cb41afSAntti Palosaari {0x45, 0x10}, 35d9cb41afSAntti Palosaari {0x4c, 0x00}, 36d9cb41afSAntti Palosaari {0x3f, 0x88}, 37d9cb41afSAntti Palosaari {0x02, 0x0e}, 38d9cb41afSAntti Palosaari {0x58, 0x14}, 39d9cb41afSAntti Palosaari }; 40d9cb41afSAntti Palosaari 41d9cb41afSAntti Palosaari struct fc2580_pll { 42d9cb41afSAntti Palosaari u32 freq; 4346de7615SAntti Palosaari u8 div_out; 44d9cb41afSAntti Palosaari u8 band; 45d9cb41afSAntti Palosaari }; 46d9cb41afSAntti Palosaari 47d9cb41afSAntti Palosaari static const struct fc2580_pll fc2580_pll_lut[] = { 48d9cb41afSAntti Palosaari /* VCO min VCO max */ 49d9cb41afSAntti Palosaari { 400000000, 12, 0x80}, /* .......... 4800000000 */ 50d9cb41afSAntti Palosaari {1000000000, 4, 0x00}, /* 1600000000 4000000000 */ 51d9cb41afSAntti Palosaari {0xffffffff, 2, 0x40}, /* 2000000000 .......... */ 52d9cb41afSAntti Palosaari }; 53d9cb41afSAntti Palosaari 54d9cb41afSAntti Palosaari struct fc2580_if_filter { 55d9cb41afSAntti Palosaari u32 freq; 56d9cb41afSAntti Palosaari u8 r36_val; 57d9cb41afSAntti Palosaari u8 r39_val; 58d9cb41afSAntti Palosaari }; 59d9cb41afSAntti Palosaari 60d9cb41afSAntti Palosaari static const struct fc2580_if_filter fc2580_if_filter_lut[] = { 618b302d43SAntti Palosaari { 6000000, 0x18, 0x00}, 628b302d43SAntti Palosaari { 7000000, 0x18, 0x80}, 638b302d43SAntti Palosaari { 8000000, 0x18, 0x80}, 648b302d43SAntti Palosaari {0xffffffff, 0x18, 0x80}, 65d9cb41afSAntti Palosaari }; 66d9cb41afSAntti Palosaari 67d9cb41afSAntti Palosaari struct fc2580_freq_regs { 68d9cb41afSAntti Palosaari u32 freq; 69d9cb41afSAntti Palosaari u8 r25_val; 70d9cb41afSAntti Palosaari u8 r27_val; 71d9cb41afSAntti Palosaari u8 r28_val; 72d9cb41afSAntti Palosaari u8 r29_val; 73d9cb41afSAntti Palosaari u8 r2b_val; 74d9cb41afSAntti Palosaari u8 r2c_val; 75d9cb41afSAntti Palosaari u8 r2d_val; 76d9cb41afSAntti Palosaari u8 r30_val; 77d9cb41afSAntti Palosaari u8 r44_val; 78d9cb41afSAntti Palosaari u8 r50_val; 79d9cb41afSAntti Palosaari u8 r53_val; 80d9cb41afSAntti Palosaari u8 r5f_val; 81d9cb41afSAntti Palosaari u8 r61_val; 82d9cb41afSAntti Palosaari u8 r62_val; 83d9cb41afSAntti Palosaari u8 r63_val; 84d9cb41afSAntti Palosaari u8 r67_val; 85d9cb41afSAntti Palosaari u8 r68_val; 86d9cb41afSAntti Palosaari u8 r69_val; 87d9cb41afSAntti Palosaari u8 r6a_val; 88d9cb41afSAntti Palosaari u8 r6b_val; 89d9cb41afSAntti Palosaari u8 r6c_val; 90d9cb41afSAntti Palosaari u8 r6d_val; 91d9cb41afSAntti Palosaari u8 r6e_val; 92d9cb41afSAntti Palosaari u8 r6f_val; 93d9cb41afSAntti Palosaari }; 94d9cb41afSAntti Palosaari 95d9cb41afSAntti Palosaari /* XXX: 0xff is used for don't-care! */ 96d9cb41afSAntti Palosaari static const struct fc2580_freq_regs fc2580_freq_regs_lut[] = { 97d9cb41afSAntti Palosaari { 400000000, 98d9cb41afSAntti Palosaari 0xff, 0x77, 0x33, 0x40, 0xff, 0xff, 0xff, 0x09, 0xff, 0x8c, 99d9cb41afSAntti Palosaari 0x50, 0x0f, 0x07, 0x00, 0x15, 0x03, 0x05, 0x10, 0x12, 0x08, 100d9cb41afSAntti Palosaari 0x0a, 0x78, 0x32, 0x54}, 101d9cb41afSAntti Palosaari { 538000000, 10246de7615SAntti Palosaari 0xf0, 0x77, 0x53, 0x60, 0xff, 0xff, 0x9f, 0x09, 0xff, 0x8c, 103d9cb41afSAntti Palosaari 0x50, 0x13, 0x07, 0x06, 0x15, 0x06, 0x08, 0x10, 0x12, 0x0b, 104d9cb41afSAntti Palosaari 0x0c, 0x78, 0x32, 0x14}, 105d9cb41afSAntti Palosaari { 794000000, 10646de7615SAntti Palosaari 0xf0, 0x77, 0x53, 0x60, 0xff, 0xff, 0x9f, 0x09, 0xff, 0x8c, 107d9cb41afSAntti Palosaari 0x50, 0x15, 0x03, 0x03, 0x15, 0x03, 0x05, 0x0c, 0x0e, 0x0b, 108d9cb41afSAntti Palosaari 0x0c, 0x78, 0x32, 0x14}, 109d9cb41afSAntti Palosaari {1000000000, 11046de7615SAntti Palosaari 0xf0, 0x77, 0x53, 0x60, 0xff, 0xff, 0x8f, 0x09, 0xff, 0x8c, 111d9cb41afSAntti Palosaari 0x50, 0x15, 0x07, 0x06, 0x15, 0x07, 0x09, 0x10, 0x12, 0x0b, 112d9cb41afSAntti Palosaari 0x0c, 0x78, 0x32, 0x14}, 113d9cb41afSAntti Palosaari {0xffffffff, 114d9cb41afSAntti Palosaari 0xff, 0xff, 0xff, 0xff, 0x70, 0x37, 0xe7, 0x09, 0x20, 0x8c, 115d9cb41afSAntti Palosaari 0x50, 0x0f, 0x0f, 0x00, 0x13, 0x00, 0x02, 0x0c, 0x0e, 0x08, 116d9cb41afSAntti Palosaari 0x0a, 0xa0, 0x50, 0x14}, 117d9cb41afSAntti Palosaari }; 118d9cb41afSAntti Palosaari 119154cdfb0SAntti Palosaari struct fc2580_dev { 1206802fc0bSAntti Palosaari u32 clk; 1216802fc0bSAntti Palosaari struct i2c_client *client; 12235fe4c65SAntti Palosaari struct regmap *regmap; 123252fad1cSAntti Palosaari struct v4l2_subdev subdev; 124252fad1cSAntti Palosaari bool active; 125252fad1cSAntti Palosaari unsigned int f_frequency; 126252fad1cSAntti Palosaari unsigned int f_bandwidth; 127252fad1cSAntti Palosaari 128252fad1cSAntti Palosaari /* Controls */ 129252fad1cSAntti Palosaari struct v4l2_ctrl_handler hdl; 130252fad1cSAntti Palosaari struct v4l2_ctrl *bandwidth_auto; 131252fad1cSAntti Palosaari struct v4l2_ctrl *bandwidth; 132d9cb41afSAntti Palosaari }; 133d9cb41afSAntti Palosaari 134d9cb41afSAntti Palosaari #endif 135