/**
 * Driver for Sharp IX2505V (marked B0017) DVB-S silicon tuner
 *
 * Copyright (C) 2010 Malcolm Priestley
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License Version 2, as
 * published by the Free Software Foundation.
 *
 * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#ifndef DVB_IX2505V_H
#define DVB_IX2505V_H

#include <linux/kconfig.h>
#include <linux/i2c.h>
#include "dvb_frontend.h"

/**
 * Attach a ix2505v tuner to the supplied frontend structure.
 *
 * @param fe Frontend to attach to.
 * @param config ix2505v_config structure
 * @return FE pointer on success, NULL on failure.
 */

struct ix2505v_config {
	u8 tuner_address;

	/*Baseband AMP gain control 0/1=0dB(default) 2=-2bB 3=-4dB */
	u8 tuner_gain;

	/*Charge pump output +/- 0=120 1=260 2=555 3=1200(default) */
	u8 tuner_chargepump;

	/* delay after tune */
	int min_delay_ms;

	/* disables reads*/
	u8 tuner_write_only;

};

#if IS_ENABLED(CONFIG_DVB_IX2505V)
extern struct dvb_frontend *ix2505v_attach(struct dvb_frontend *fe,
	const struct ix2505v_config *config, struct i2c_adapter *i2c);
#else
static inline struct dvb_frontend *ix2505v_attach(struct dvb_frontend *fe,
	const struct ix2505v_config *config, struct i2c_adapter *i2c)
{
	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
	return NULL;
}
#endif

#endif /* DVB_IX2505V_H */
