/*
 * Elonics E4000 silicon tuner driver
 *
 * Copyright (C) 2012 Antti Palosaari <crope@iki.fi>
 *
 *    This program is free software; you can redistribute it and/or modify
 *    it under the terms of the GNU General Public License as published by
 *    the Free Software Foundation; either version 2 of the License, or
 *    (at your option) any later version.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU General Public License for more details.
 *
 *    You should have received a copy of the GNU General Public License along
 *    with this program; if not, write to the Free Software Foundation, Inc.,
 *    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

#ifndef E4000_PRIV_H
#define E4000_PRIV_H

#include "e4000.h"
#include <media/v4l2-ctrls.h>
#include <media/v4l2-subdev.h>
#include <linux/regmap.h>

struct e4000 {
	struct i2c_client *client;
	struct regmap *regmap;
	u32 clock;
	struct dvb_frontend *fe;
	struct v4l2_subdev sd;
	bool active;

	/* Controls */
	struct v4l2_ctrl_handler hdl;
	struct v4l2_ctrl *bandwidth_auto;
	struct v4l2_ctrl *bandwidth;
	struct v4l2_ctrl *lna_gain_auto;
	struct v4l2_ctrl *lna_gain;
	struct v4l2_ctrl *mixer_gain_auto;
	struct v4l2_ctrl *mixer_gain;
	struct v4l2_ctrl *if_gain_auto;
	struct v4l2_ctrl *if_gain;
	struct v4l2_ctrl *pll_lock;
};

struct e4000_pll {
	u32 freq;
	u8 div;
	u8 mul;
};

static const struct e4000_pll e4000_pll_lut[] = {
/*                                      VCO min    VCO max */
	{   72400000, 0x0f, 48 }, /* .......... 3475200000 */
	{   81200000, 0x0e, 40 }, /* 2896000000 3248000000 */
	{  108300000, 0x0d, 32 }, /* 2598400000 3465600000 */
	{  162500000, 0x0c, 24 }, /* 2599200000 3900000000 */
	{  216600000, 0x0b, 16 }, /* 2600000000 3465600000 */
	{  325000000, 0x0a, 12 }, /* 2599200000 3900000000 */
	{  350000000, 0x09,  8 }, /* 2600000000 2800000000 */
	{  432000000, 0x03,  8 }, /* 2800000000 3456000000 */
	{  667000000, 0x02,  6 }, /* 2592000000 4002000000 */
	{ 1200000000, 0x01,  4 }, /* 2668000000 4800000000 */
	{ 0xffffffff, 0x00,  2 }, /* 2400000000 .......... */
};

struct e4000_lna_filter {
	u32 freq;
	u8 val;
};

static const struct e4000_lna_filter e400_lna_filter_lut[] = {
	{  370000000,  0 },
	{  392500000,  1 },
	{  415000000,  2 },
	{  437500000,  3 },
	{  462500000,  4 },
	{  490000000,  5 },
	{  522500000,  6 },
	{  557500000,  7 },
	{  595000000,  8 },
	{  642500000,  9 },
	{  695000000, 10 },
	{  740000000, 11 },
	{  800000000, 12 },
	{  865000000, 13 },
	{  930000000, 14 },
	{ 1000000000, 15 },
	{ 1310000000,  0 },
	{ 1340000000,  1 },
	{ 1385000000,  2 },
	{ 1427500000,  3 },
	{ 1452500000,  4 },
	{ 1475000000,  5 },
	{ 1510000000,  6 },
	{ 1545000000,  7 },
	{ 1575000000,  8 },
	{ 1615000000,  9 },
	{ 1650000000, 10 },
	{ 1670000000, 11 },
	{ 1690000000, 12 },
	{ 1710000000, 13 },
	{ 1735000000, 14 },
	{ 0xffffffff, 15 },
};

struct e4000_band {
	u32 freq;
	u8 reg07_val;
	u8 reg78_val;
};

static const struct e4000_band e4000_band_lut[] = {
	{  140000000, 0x01, 0x03 },
	{  350000000, 0x03, 0x03 },
	{ 1000000000, 0x05, 0x03 },
	{ 0xffffffff, 0x07, 0x00 },
};

struct e4000_if_filter {
	u32 freq;
	u8 reg11_val;
	u8 reg12_val;
};

static const struct e4000_if_filter e4000_if_filter_lut[] = {
	{    4300000, 0xfd, 0x1f },
	{    4400000, 0xfd, 0x1e },
	{    4480000, 0xfc, 0x1d },
	{    4560000, 0xfc, 0x1c },
	{    4600000, 0xfc, 0x1b },
	{    4800000, 0xfc, 0x1a },
	{    4900000, 0xfc, 0x19 },
	{    5000000, 0xfc, 0x18 },
	{    5100000, 0xfc, 0x17 },
	{    5200000, 0xfc, 0x16 },
	{    5400000, 0xfc, 0x15 },
	{    5500000, 0xfc, 0x14 },
	{    5600000, 0xfc, 0x13 },
	{    5800000, 0xfb, 0x12 },
	{    5900000, 0xfb, 0x11 },
	{    6000000, 0xfb, 0x10 },
	{    6200000, 0xfb, 0x0f },
	{    6400000, 0xfa, 0x0e },
	{    6600000, 0xfa, 0x0d },
	{    6800000, 0xf9, 0x0c },
	{    7200000, 0xf9, 0x0b },
	{    7400000, 0xf9, 0x0a },
	{    7600000, 0xf8, 0x09 },
	{    7800000, 0xf8, 0x08 },
	{    8200000, 0xf8, 0x07 },
	{    8600000, 0xf7, 0x06 },
	{    8800000, 0xf7, 0x05 },
	{    9200000, 0xf7, 0x04 },
	{    9600000, 0xf6, 0x03 },
	{   10000000, 0xf6, 0x02 },
	{   10600000, 0xf5, 0x01 },
	{   11000000, 0xf5, 0x00 },
	{ 0xffffffff, 0x00, 0x20 },
};

struct e4000_if_gain {
	u8 reg16_val;
	u8 reg17_val;
};

static const struct e4000_if_gain e4000_if_gain_lut[] = {
	{0x00, 0x00},
	{0x20, 0x00},
	{0x40, 0x00},
	{0x02, 0x00},
	{0x22, 0x00},
	{0x42, 0x00},
	{0x04, 0x00},
	{0x24, 0x00},
	{0x44, 0x00},
	{0x01, 0x00},
	{0x21, 0x00},
	{0x41, 0x00},
	{0x03, 0x00},
	{0x23, 0x00},
	{0x43, 0x00},
	{0x05, 0x00},
	{0x25, 0x00},
	{0x45, 0x00},
	{0x07, 0x00},
	{0x27, 0x00},
	{0x47, 0x00},
	{0x0f, 0x00},
	{0x2f, 0x00},
	{0x4f, 0x00},
	{0x17, 0x00},
	{0x37, 0x00},
	{0x57, 0x00},
	{0x1f, 0x00},
	{0x3f, 0x00},
	{0x5f, 0x00},
	{0x1f, 0x01},
	{0x3f, 0x01},
	{0x5f, 0x01},
	{0x1f, 0x02},
	{0x3f, 0x02},
	{0x5f, 0x02},
	{0x1f, 0x03},
	{0x3f, 0x03},
	{0x5f, 0x03},
	{0x1f, 0x04},
	{0x3f, 0x04},
	{0x5f, 0x04},
	{0x1f, 0x0c},
	{0x3f, 0x0c},
	{0x5f, 0x0c},
	{0x1f, 0x14},
	{0x3f, 0x14},
	{0x5f, 0x14},
	{0x1f, 0x1c},
	{0x3f, 0x1c},
	{0x5f, 0x1c},
	{0x1f, 0x24},
	{0x3f, 0x24},
	{0x5f, 0x24},
	{0x7f, 0x24},
};

#endif
