/* SPDX-License-Identifier: GPL-2.0-only */ 
 | 
/* Header file for all dibusb-based-receivers. 
 | 
 * 
 | 
 * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de) 
 | 
 * 
 | 
 * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information 
 | 
 */ 
 | 
#ifndef _DVB_USB_DIBUSB_H_ 
 | 
#define _DVB_USB_DIBUSB_H_ 
 | 
  
 | 
#ifndef DVB_USB_LOG_PREFIX 
 | 
 #define DVB_USB_LOG_PREFIX "dibusb" 
 | 
#endif 
 | 
#include "dvb-usb.h" 
 | 
  
 | 
#include "dib3000.h" 
 | 
#include "dib3000mc.h" 
 | 
#include "mt2060.h" 
 | 
  
 | 
/* 
 | 
 * protocol of all dibusb related devices 
 | 
 */ 
 | 
  
 | 
/* 
 | 
 * bulk msg to/from endpoint 0x01 
 | 
 * 
 | 
 * general structure: 
 | 
 * request_byte parameter_bytes 
 | 
 */ 
 | 
  
 | 
#define DIBUSB_REQ_START_READ            0x00 
 | 
#define DIBUSB_REQ_START_DEMOD            0x01 
 | 
  
 | 
/* 
 | 
 * i2c read 
 | 
 * bulk write: 0x02 ((7bit i2c_addr << 1) | 0x01) register_bytes length_word 
 | 
 * bulk read:  byte_buffer (length_word bytes) 
 | 
 */ 
 | 
#define DIBUSB_REQ_I2C_READ            0x02 
 | 
  
 | 
/* 
 | 
 * i2c write 
 | 
 * bulk write: 0x03 (7bit i2c_addr << 1) register_bytes value_bytes 
 | 
 */ 
 | 
#define DIBUSB_REQ_I2C_WRITE            0x03 
 | 
  
 | 
/* 
 | 
 * polling the value of the remote control 
 | 
 * bulk write: 0x04 
 | 
 * bulk read:  byte_buffer (5 bytes) 
 | 
 */ 
 | 
#define DIBUSB_REQ_POLL_REMOTE       0x04 
 | 
  
 | 
/* additional status values for Hauppauge Remote Control Protocol */ 
 | 
#define DIBUSB_RC_HAUPPAUGE_KEY_PRESSED    0x01 
 | 
#define DIBUSB_RC_HAUPPAUGE_KEY_EMPTY    0x03 
 | 
  
 | 
/* streaming mode: 
 | 
 * bulk write: 0x05 mode_byte 
 | 
 * 
 | 
 * mode_byte is mostly 0x00 
 | 
 */ 
 | 
#define DIBUSB_REQ_SET_STREAMING_MODE    0x05 
 | 
  
 | 
/* interrupt the internal read loop, when blocking */ 
 | 
#define DIBUSB_REQ_INTR_READ            0x06 
 | 
  
 | 
/* io control 
 | 
 * 0x07 cmd_byte param_bytes 
 | 
 * 
 | 
 * param_bytes can be up to 32 bytes 
 | 
 * 
 | 
 * cmd_byte function    parameter name 
 | 
 * 0x00     power mode 
 | 
 *                      0x00      sleep 
 | 
 *                      0x01      wakeup 
 | 
 * 
 | 
 * 0x01     enable streaming 
 | 
 * 0x02     disable streaming 
 | 
 * 
 | 
 * 
 | 
 */ 
 | 
#define DIBUSB_REQ_SET_IOCTL            0x07 
 | 
  
 | 
/* IOCTL commands */ 
 | 
  
 | 
/* change the power mode in firmware */ 
 | 
#define DIBUSB_IOCTL_CMD_POWER_MODE        0x00 
 | 
#define DIBUSB_IOCTL_POWER_SLEEP            0x00 
 | 
#define DIBUSB_IOCTL_POWER_WAKEUP            0x01 
 | 
  
 | 
/* modify streaming of the FX2 */ 
 | 
#define DIBUSB_IOCTL_CMD_ENABLE_STREAM    0x01 
 | 
#define DIBUSB_IOCTL_CMD_DISABLE_STREAM    0x02 
 | 
  
 | 
/* Max transfer size done by I2C transfer functions */ 
 | 
#define MAX_XFER_SIZE  64 
 | 
  
 | 
struct dibusb_state { 
 | 
    struct dib_fe_xfer_ops ops; 
 | 
    int mt2060_present; 
 | 
    u8 tuner_addr; 
 | 
}; 
 | 
  
 | 
struct dibusb_device_state { 
 | 
    /* for RC5 remote control */ 
 | 
    int old_toggle; 
 | 
    int last_repeat_count; 
 | 
}; 
 | 
  
 | 
extern struct i2c_algorithm dibusb_i2c_algo; 
 | 
  
 | 
extern int dibusb_dib3000mc_frontend_attach(struct dvb_usb_adapter *); 
 | 
extern int dibusb_dib3000mc_tuner_attach (struct dvb_usb_adapter *); 
 | 
  
 | 
extern int dibusb_streaming_ctrl(struct dvb_usb_adapter *, int); 
 | 
extern int dibusb_pid_filter(struct dvb_usb_adapter *, int, u16, int); 
 | 
extern int dibusb_pid_filter_ctrl(struct dvb_usb_adapter *, int); 
 | 
extern int dibusb2_0_streaming_ctrl(struct dvb_usb_adapter *, int); 
 | 
  
 | 
extern int dibusb_power_ctrl(struct dvb_usb_device *, int); 
 | 
extern int dibusb2_0_power_ctrl(struct dvb_usb_device *, int); 
 | 
  
 | 
#define DEFAULT_RC_INTERVAL 150 
 | 
//#define DEFAULT_RC_INTERVAL 100000 
 | 
  
 | 
extern struct rc_map_table rc_map_dibusb_table[]; 
 | 
extern int dibusb_rc_query(struct dvb_usb_device *, u32 *, int *); 
 | 
extern int dibusb_read_eeprom_byte(struct dvb_usb_device *, u8, u8 *); 
 | 
  
 | 
#endif 
 |