/*
 * FCI FC2580 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 FC2580_PRIV_H
#define FC2580_PRIV_H

#include "fc2580.h"

struct fc2580_reg_val {
	u8 reg;
	u8 val;
};

static const struct fc2580_reg_val fc2580_init_reg_vals[] = {
	{0x00, 0x00},
	{0x12, 0x86},
	{0x14, 0x5c},
	{0x16, 0x3c},
	{0x1f, 0xd2},
	{0x09, 0xd7},
	{0x0b, 0xd5},
	{0x0c, 0x32},
	{0x0e, 0x43},
	{0x21, 0x0a},
	{0x22, 0x82},
	{0x45, 0x10},
	{0x4c, 0x00},
	{0x3f, 0x88},
	{0x02, 0x0e},
	{0x58, 0x14},
};

struct fc2580_pll {
	u32 freq;
	u8 div;
	u8 band;
};

static const struct fc2580_pll fc2580_pll_lut[] = {
	/*                            VCO min    VCO max */
	{ 400000000, 12, 0x80}, /* .......... 4800000000 */
	{1000000000,  4, 0x00}, /* 1600000000 4000000000 */
	{0xffffffff,  2, 0x40}, /* 2000000000 .......... */
};

struct fc2580_if_filter {
	u32 freq;
	u16 mul;
	u8 r36_val;
	u8 r39_val;
};

static const struct fc2580_if_filter fc2580_if_filter_lut[] = {
	{   6000000, 4400, 0x18, 0x00},
	{   7000000, 3910, 0x18, 0x80},
	{   8000000, 3300, 0x18, 0x80},
	{0xffffffff, 3300, 0x18, 0x80},
};

struct fc2580_freq_regs {
	u32 freq;
	u8 r25_val;
	u8 r27_val;
	u8 r28_val;
	u8 r29_val;
	u8 r2b_val;
	u8 r2c_val;
	u8 r2d_val;
	u8 r30_val;
	u8 r44_val;
	u8 r50_val;
	u8 r53_val;
	u8 r5f_val;
	u8 r61_val;
	u8 r62_val;
	u8 r63_val;
	u8 r67_val;
	u8 r68_val;
	u8 r69_val;
	u8 r6a_val;
	u8 r6b_val;
	u8 r6c_val;
	u8 r6d_val;
	u8 r6e_val;
	u8 r6f_val;
};

/* XXX: 0xff is used for don't-care! */
static const struct fc2580_freq_regs fc2580_freq_regs_lut[] = {
	{ 400000000,
		0xff, 0x77, 0x33, 0x40, 0xff, 0xff, 0xff, 0x09, 0xff, 0x8c,
		0x50, 0x0f, 0x07, 0x00, 0x15, 0x03, 0x05, 0x10, 0x12, 0x08,
		0x0a, 0x78, 0x32, 0x54},
	{ 538000000,
		0xf0, 0x77, 0x53, 0x60, 0xff, 0xff, 0xff, 0x09, 0xff, 0x8c,
		0x50, 0x13, 0x07, 0x06, 0x15, 0x06, 0x08, 0x10, 0x12, 0x0b,
		0x0c, 0x78, 0x32, 0x14},
	{ 794000000,
		0xf0, 0x77, 0x53, 0x60, 0xff, 0xff, 0xff, 0x09, 0xff, 0x8c,
		0x50, 0x15, 0x03, 0x03, 0x15, 0x03, 0x05, 0x0c, 0x0e, 0x0b,
		0x0c, 0x78, 0x32, 0x14},
	{1000000000,
		0xf0, 0x77, 0x53, 0x60, 0xff, 0xff, 0xff, 0x09, 0xff, 0x8c,
		0x50, 0x15, 0x07, 0x06, 0x15, 0x07, 0x09, 0x10, 0x12, 0x0b,
		0x0c, 0x78, 0x32, 0x14},
	{0xffffffff,
		0xff, 0xff, 0xff, 0xff, 0x70, 0x37, 0xe7, 0x09, 0x20, 0x8c,
		0x50, 0x0f, 0x0f, 0x00, 0x13, 0x00, 0x02, 0x0c, 0x0e, 0x08,
		0x0a, 0xa0, 0x50, 0x14},
};

struct fc2580_priv {
	const struct fc2580_config *cfg;
	struct i2c_adapter *i2c;
};

#endif
