18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Abilis Systems Single DVB-T Receiver 48c2ecf20Sopenharmony_ci * Copyright (C) 2008 Pierrick Hascoet <pierrick.hascoet@abilis.com> 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#ifndef _AS102_DRV_H 88c2ecf20Sopenharmony_ci#define _AS102_DRV_H 98c2ecf20Sopenharmony_ci#include <linux/usb.h> 108c2ecf20Sopenharmony_ci#include <media/dvb_demux.h> 118c2ecf20Sopenharmony_ci#include <media/dvb_frontend.h> 128c2ecf20Sopenharmony_ci#include <media/dmxdev.h> 138c2ecf20Sopenharmony_ci#include "as10x_handle.h" 148c2ecf20Sopenharmony_ci#include "as10x_cmd.h" 158c2ecf20Sopenharmony_ci#include "as102_usb_drv.h" 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci#define DRIVER_FULL_NAME "Abilis Systems as10x usb driver" 188c2ecf20Sopenharmony_ci#define DRIVER_NAME "as10x_usb" 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci#define debug as102_debug 218c2ecf20Sopenharmony_ciextern struct usb_driver as102_usb_driver; 228c2ecf20Sopenharmony_ciextern int elna_enable; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci#define AS102_DEVICE_MAJOR 192 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci#define AS102_USB_BUF_SIZE 512 278c2ecf20Sopenharmony_ci#define MAX_STREAM_URB 32 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_cistruct as10x_bus_adapter_t { 308c2ecf20Sopenharmony_ci struct usb_device *usb_dev; 318c2ecf20Sopenharmony_ci /* bus token lock */ 328c2ecf20Sopenharmony_ci struct mutex lock; 338c2ecf20Sopenharmony_ci /* low level interface for bus adapter */ 348c2ecf20Sopenharmony_ci union as10x_bus_token_t { 358c2ecf20Sopenharmony_ci /* usb token */ 368c2ecf20Sopenharmony_ci struct as10x_usb_token_cmd_t usb; 378c2ecf20Sopenharmony_ci } token; 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci /* token cmd xfer id */ 408c2ecf20Sopenharmony_ci uint16_t cmd_xid; 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci /* as10x command and response for dvb interface*/ 438c2ecf20Sopenharmony_ci struct as10x_cmd_t *cmd, *rsp; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci /* bus adapter private ops callback */ 468c2ecf20Sopenharmony_ci const struct as102_priv_ops_t *ops; 478c2ecf20Sopenharmony_ci}; 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_cistruct as102_dev_t { 508c2ecf20Sopenharmony_ci const char *name; 518c2ecf20Sopenharmony_ci struct as10x_bus_adapter_t bus_adap; 528c2ecf20Sopenharmony_ci struct list_head device_entry; 538c2ecf20Sopenharmony_ci struct kref kref; 548c2ecf20Sopenharmony_ci uint8_t elna_cfg; 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci struct dvb_adapter dvb_adap; 578c2ecf20Sopenharmony_ci struct dvb_frontend *dvb_fe; 588c2ecf20Sopenharmony_ci struct dvb_demux dvb_dmx; 598c2ecf20Sopenharmony_ci struct dmxdev dvb_dmxdev; 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci /* timer handle to trig ts stream download */ 628c2ecf20Sopenharmony_ci struct timer_list timer_handle; 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci struct mutex sem; 658c2ecf20Sopenharmony_ci dma_addr_t dma_addr; 668c2ecf20Sopenharmony_ci void *stream; 678c2ecf20Sopenharmony_ci int streaming; 688c2ecf20Sopenharmony_ci struct urb *stream_urb[MAX_STREAM_URB]; 698c2ecf20Sopenharmony_ci}; 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ciint as102_dvb_register(struct as102_dev_t *dev); 728c2ecf20Sopenharmony_civoid as102_dvb_unregister(struct as102_dev_t *dev); 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci#endif 75