/*
 * Framework for ISA radio drivers.
 * This takes care of all the V4L2 scaffolding, allowing the ISA drivers
 * to concentrate on the actual hardware operation.
 *
 * Copyright (C) 2012 Hans Verkuil <hans.verkuil@cisco.com>
 *
 * 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.
 */

#ifndef _RADIO_ISA_H_
#define _RADIO_ISA_H_

#include <linux/isa.h>
#include <linux/pnp.h>
#include <linux/videodev2.h>
#include <media/v4l2-device.h>
#include <media/v4l2-ctrls.h>

struct radio_isa_driver;
struct radio_isa_ops;

/* Core structure for radio ISA cards */
struct radio_isa_card {
	const struct radio_isa_driver *drv;
	struct v4l2_device v4l2_dev;
	struct v4l2_ctrl_handler hdl;
	struct video_device vdev;
	struct mutex lock;
	const struct radio_isa_ops *ops;
	struct {	/* mute/volume cluster */
		struct v4l2_ctrl *mute;
		struct v4l2_ctrl *volume;
	};
	/* I/O port */
	int io;

	/* Card is in stereo audio mode */
	bool stereo;
	/* Current frequency */
	u32 freq;
};

struct radio_isa_ops {
	/* Allocate and initialize a radio_isa_card struct */
	struct radio_isa_card *(*alloc)(void);
	/* Probe whether a card is present at the given port */
	bool (*probe)(struct radio_isa_card *isa, int io);
	/* Special card initialization can be done here, this is called after
	 * the standard controls are registered, but before they are setup,
	 * thus allowing drivers to add their own controls here. */
	int (*init)(struct radio_isa_card *isa);
	/* Set mute and volume. */
	int (*s_mute_volume)(struct radio_isa_card *isa, bool mute, int volume);
	/* Set frequency */
	int (*s_frequency)(struct radio_isa_card *isa, u32 freq);
	/* Set stereo/mono audio mode */
	int (*s_stereo)(struct radio_isa_card *isa, bool stereo);
	/* Get rxsubchans value for VIDIOC_G_TUNER */
	u32 (*g_rxsubchans)(struct radio_isa_card *isa);
	/* Get the signal strength for VIDIOC_G_TUNER */
	u32 (*g_signal)(struct radio_isa_card *isa);
};

/* Top level structure needed to instantiate the cards */
struct radio_isa_driver {
	struct isa_driver driver;
#ifdef CONFIG_PNP
	struct pnp_driver pnp_driver;
#endif
	const struct radio_isa_ops *ops;
	/* The module_param_array with the specified I/O ports */
	int *io_params;
	/* The module_param_array with the radio_nr values */
	int *radio_nr_params;
	/* Whether we should probe for possible cards */
	bool probe;
	/* The list of possible I/O ports */
	const int *io_ports;
	/* The size of that list */
	int num_of_io_ports;
	/* The region size to request */
	unsigned region_size;
	/* The name of the card */
	const char *card;
	/* Card can capture stereo audio */
	bool has_stereo;
	/* The maximum volume for the volume control. If 0, then there
	   is no volume control possible. */
	int max_volume;
};

int radio_isa_match(struct device *pdev, unsigned int dev);
int radio_isa_probe(struct device *pdev, unsigned int dev);
int radio_isa_remove(struct device *pdev, unsigned int dev);
#ifdef CONFIG_PNP
int radio_isa_pnp_probe(struct pnp_dev *dev,
			const struct pnp_device_id *dev_id);
void radio_isa_pnp_remove(struct pnp_dev *dev);
#endif

#endif
