alistair23-linux/drivers/media/radio/radio-isa.h
Thomas Gleixner 1802d0beec treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 174
Based on 1 normalized pattern(s):

  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

extracted by the scancode license scanner the SPDX license identifier

  GPL-2.0-only

has been chosen to replace the boilerplate/reference in 655 file(s).

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Allison Randal <allison@lohutok.net>
Reviewed-by: Kate Stewart <kstewart@linuxfoundation.org>
Reviewed-by: Richard Fontana <rfontana@redhat.com>
Cc: linux-spdx@vger.kernel.org
Link: https://lkml.kernel.org/r/20190527070034.575739538@linutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-05-30 11:26:41 -07:00

102 lines
3 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* 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>
*/
#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