/*
 * ZyDAS ZD1301 driver (demodulator)
 *
 * Copyright (C) 2015 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.
 */

#ifndef ZD1301_DEMOD_H
#define ZD1301_DEMOD_H

#include <linux/platform_device.h>
#include <linux/dvb/frontend.h>
#include <media/dvb_frontend.h>

/**
 * struct zd1301_demod_platform_data - Platform data for the zd1301_demod driver
 * @reg_priv: First argument of reg_read and reg_write callbacks.
 * @reg_read: Register read callback.
 * @reg_write: Register write callback.
 */
struct zd1301_demod_platform_data {
	void *reg_priv;
	int (*reg_read)(void *, u16, u8 *);
	int (*reg_write)(void *, u16, u8);
};

#if IS_REACHABLE(CONFIG_DVB_ZD1301_DEMOD)
/**
 * zd1301_demod_get_dvb_frontend() - Get pointer to DVB frontend
 * @pdev: Pointer to platform device
 *
 * Return: Pointer to DVB frontend which given platform device owns.
 */
struct dvb_frontend *zd1301_demod_get_dvb_frontend(struct platform_device *pdev);

/**
 * zd1301_demod_get_i2c_adapter() - Get pointer to I2C adapter
 * @pdev: Pointer to platform device
 *
 * Return: Pointer to I2C adapter which given platform device owns.
 */
struct i2c_adapter *zd1301_demod_get_i2c_adapter(struct platform_device *pdev);

#else

/**
 * zd1301_demod_get_dvb_frontend() - Attach a zd1301 frontend
 * @dev: Pointer to platform device
 *
 * Return: Pointer to %struct dvb_frontend or NULL if attach fails.
 */
static inline struct dvb_frontend *zd1301_demod_get_dvb_frontend(struct platform_device *dev)
{
	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);

	return NULL;
}
static inline struct i2c_adapter *zd1301_demod_get_i2c_adapter(struct platform_device *dev)
{
	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);

	return NULL;
}

#endif

#endif /* ZD1301_DEMOD_H */
