1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* Header file for all dibusb-based-receivers. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de) 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun #ifndef _DVB_USB_DIBUSB_H_ 9*4882a593Smuzhiyun #define _DVB_USB_DIBUSB_H_ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #ifndef DVB_USB_LOG_PREFIX 12*4882a593Smuzhiyun #define DVB_USB_LOG_PREFIX "dibusb" 13*4882a593Smuzhiyun #endif 14*4882a593Smuzhiyun #include "dvb-usb.h" 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #include "dib3000.h" 17*4882a593Smuzhiyun #include "dib3000mc.h" 18*4882a593Smuzhiyun #include "mt2060.h" 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun /* 21*4882a593Smuzhiyun * protocol of all dibusb related devices 22*4882a593Smuzhiyun */ 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /* 25*4882a593Smuzhiyun * bulk msg to/from endpoint 0x01 26*4882a593Smuzhiyun * 27*4882a593Smuzhiyun * general structure: 28*4882a593Smuzhiyun * request_byte parameter_bytes 29*4882a593Smuzhiyun */ 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #define DIBUSB_REQ_START_READ 0x00 32*4882a593Smuzhiyun #define DIBUSB_REQ_START_DEMOD 0x01 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun /* 35*4882a593Smuzhiyun * i2c read 36*4882a593Smuzhiyun * bulk write: 0x02 ((7bit i2c_addr << 1) | 0x01) register_bytes length_word 37*4882a593Smuzhiyun * bulk read: byte_buffer (length_word bytes) 38*4882a593Smuzhiyun */ 39*4882a593Smuzhiyun #define DIBUSB_REQ_I2C_READ 0x02 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* 42*4882a593Smuzhiyun * i2c write 43*4882a593Smuzhiyun * bulk write: 0x03 (7bit i2c_addr << 1) register_bytes value_bytes 44*4882a593Smuzhiyun */ 45*4882a593Smuzhiyun #define DIBUSB_REQ_I2C_WRITE 0x03 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun /* 48*4882a593Smuzhiyun * polling the value of the remote control 49*4882a593Smuzhiyun * bulk write: 0x04 50*4882a593Smuzhiyun * bulk read: byte_buffer (5 bytes) 51*4882a593Smuzhiyun */ 52*4882a593Smuzhiyun #define DIBUSB_REQ_POLL_REMOTE 0x04 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /* additional status values for Hauppauge Remote Control Protocol */ 55*4882a593Smuzhiyun #define DIBUSB_RC_HAUPPAUGE_KEY_PRESSED 0x01 56*4882a593Smuzhiyun #define DIBUSB_RC_HAUPPAUGE_KEY_EMPTY 0x03 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun /* streaming mode: 59*4882a593Smuzhiyun * bulk write: 0x05 mode_byte 60*4882a593Smuzhiyun * 61*4882a593Smuzhiyun * mode_byte is mostly 0x00 62*4882a593Smuzhiyun */ 63*4882a593Smuzhiyun #define DIBUSB_REQ_SET_STREAMING_MODE 0x05 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /* interrupt the internal read loop, when blocking */ 66*4882a593Smuzhiyun #define DIBUSB_REQ_INTR_READ 0x06 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun /* io control 69*4882a593Smuzhiyun * 0x07 cmd_byte param_bytes 70*4882a593Smuzhiyun * 71*4882a593Smuzhiyun * param_bytes can be up to 32 bytes 72*4882a593Smuzhiyun * 73*4882a593Smuzhiyun * cmd_byte function parameter name 74*4882a593Smuzhiyun * 0x00 power mode 75*4882a593Smuzhiyun * 0x00 sleep 76*4882a593Smuzhiyun * 0x01 wakeup 77*4882a593Smuzhiyun * 78*4882a593Smuzhiyun * 0x01 enable streaming 79*4882a593Smuzhiyun * 0x02 disable streaming 80*4882a593Smuzhiyun * 81*4882a593Smuzhiyun * 82*4882a593Smuzhiyun */ 83*4882a593Smuzhiyun #define DIBUSB_REQ_SET_IOCTL 0x07 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun /* IOCTL commands */ 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun /* change the power mode in firmware */ 88*4882a593Smuzhiyun #define DIBUSB_IOCTL_CMD_POWER_MODE 0x00 89*4882a593Smuzhiyun #define DIBUSB_IOCTL_POWER_SLEEP 0x00 90*4882a593Smuzhiyun #define DIBUSB_IOCTL_POWER_WAKEUP 0x01 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun /* modify streaming of the FX2 */ 93*4882a593Smuzhiyun #define DIBUSB_IOCTL_CMD_ENABLE_STREAM 0x01 94*4882a593Smuzhiyun #define DIBUSB_IOCTL_CMD_DISABLE_STREAM 0x02 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun /* Max transfer size done by I2C transfer functions */ 97*4882a593Smuzhiyun #define MAX_XFER_SIZE 64 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun struct dibusb_state { 100*4882a593Smuzhiyun struct dib_fe_xfer_ops ops; 101*4882a593Smuzhiyun int mt2060_present; 102*4882a593Smuzhiyun u8 tuner_addr; 103*4882a593Smuzhiyun }; 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun struct dibusb_device_state { 106*4882a593Smuzhiyun /* for RC5 remote control */ 107*4882a593Smuzhiyun int old_toggle; 108*4882a593Smuzhiyun int last_repeat_count; 109*4882a593Smuzhiyun }; 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun extern struct i2c_algorithm dibusb_i2c_algo; 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun extern int dibusb_dib3000mc_frontend_attach(struct dvb_usb_adapter *); 114*4882a593Smuzhiyun extern int dibusb_dib3000mc_tuner_attach (struct dvb_usb_adapter *); 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun extern int dibusb_streaming_ctrl(struct dvb_usb_adapter *, int); 117*4882a593Smuzhiyun extern int dibusb_pid_filter(struct dvb_usb_adapter *, int, u16, int); 118*4882a593Smuzhiyun extern int dibusb_pid_filter_ctrl(struct dvb_usb_adapter *, int); 119*4882a593Smuzhiyun extern int dibusb2_0_streaming_ctrl(struct dvb_usb_adapter *, int); 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun extern int dibusb_power_ctrl(struct dvb_usb_device *, int); 122*4882a593Smuzhiyun extern int dibusb2_0_power_ctrl(struct dvb_usb_device *, int); 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun #define DEFAULT_RC_INTERVAL 150 125*4882a593Smuzhiyun //#define DEFAULT_RC_INTERVAL 100000 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun extern struct rc_map_table rc_map_dibusb_table[]; 128*4882a593Smuzhiyun extern int dibusb_rc_query(struct dvb_usb_device *, u32 *, int *); 129*4882a593Smuzhiyun extern int dibusb_read_eeprom_byte(struct dvb_usb_device *, u8, u8 *); 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun #endif 132