162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* Header file for all dibusb-based-receivers. 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de) 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci#ifndef _DVB_USB_DIBUSB_H_ 962306a36Sopenharmony_ci#define _DVB_USB_DIBUSB_H_ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#ifndef DVB_USB_LOG_PREFIX 1262306a36Sopenharmony_ci #define DVB_USB_LOG_PREFIX "dibusb" 1362306a36Sopenharmony_ci#endif 1462306a36Sopenharmony_ci#include "dvb-usb.h" 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include "dib3000.h" 1762306a36Sopenharmony_ci#include "dib3000mc.h" 1862306a36Sopenharmony_ci#include "mt2060.h" 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci/* 2162306a36Sopenharmony_ci * protocol of all dibusb related devices 2262306a36Sopenharmony_ci */ 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/* 2562306a36Sopenharmony_ci * bulk msg to/from endpoint 0x01 2662306a36Sopenharmony_ci * 2762306a36Sopenharmony_ci * general structure: 2862306a36Sopenharmony_ci * request_byte parameter_bytes 2962306a36Sopenharmony_ci */ 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define DIBUSB_REQ_START_READ 0x00 3262306a36Sopenharmony_ci#define DIBUSB_REQ_START_DEMOD 0x01 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci/* 3562306a36Sopenharmony_ci * i2c read 3662306a36Sopenharmony_ci * bulk write: 0x02 ((7bit i2c_addr << 1) | 0x01) register_bytes length_word 3762306a36Sopenharmony_ci * bulk read: byte_buffer (length_word bytes) 3862306a36Sopenharmony_ci */ 3962306a36Sopenharmony_ci#define DIBUSB_REQ_I2C_READ 0x02 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci/* 4262306a36Sopenharmony_ci * i2c write 4362306a36Sopenharmony_ci * bulk write: 0x03 (7bit i2c_addr << 1) register_bytes value_bytes 4462306a36Sopenharmony_ci */ 4562306a36Sopenharmony_ci#define DIBUSB_REQ_I2C_WRITE 0x03 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci/* 4862306a36Sopenharmony_ci * polling the value of the remote control 4962306a36Sopenharmony_ci * bulk write: 0x04 5062306a36Sopenharmony_ci * bulk read: byte_buffer (5 bytes) 5162306a36Sopenharmony_ci */ 5262306a36Sopenharmony_ci#define DIBUSB_REQ_POLL_REMOTE 0x04 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci/* additional status values for Hauppauge Remote Control Protocol */ 5562306a36Sopenharmony_ci#define DIBUSB_RC_HAUPPAUGE_KEY_PRESSED 0x01 5662306a36Sopenharmony_ci#define DIBUSB_RC_HAUPPAUGE_KEY_EMPTY 0x03 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci/* streaming mode: 5962306a36Sopenharmony_ci * bulk write: 0x05 mode_byte 6062306a36Sopenharmony_ci * 6162306a36Sopenharmony_ci * mode_byte is mostly 0x00 6262306a36Sopenharmony_ci */ 6362306a36Sopenharmony_ci#define DIBUSB_REQ_SET_STREAMING_MODE 0x05 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci/* interrupt the internal read loop, when blocking */ 6662306a36Sopenharmony_ci#define DIBUSB_REQ_INTR_READ 0x06 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ci/* io control 6962306a36Sopenharmony_ci * 0x07 cmd_byte param_bytes 7062306a36Sopenharmony_ci * 7162306a36Sopenharmony_ci * param_bytes can be up to 32 bytes 7262306a36Sopenharmony_ci * 7362306a36Sopenharmony_ci * cmd_byte function parameter name 7462306a36Sopenharmony_ci * 0x00 power mode 7562306a36Sopenharmony_ci * 0x00 sleep 7662306a36Sopenharmony_ci * 0x01 wakeup 7762306a36Sopenharmony_ci * 7862306a36Sopenharmony_ci * 0x01 enable streaming 7962306a36Sopenharmony_ci * 0x02 disable streaming 8062306a36Sopenharmony_ci * 8162306a36Sopenharmony_ci * 8262306a36Sopenharmony_ci */ 8362306a36Sopenharmony_ci#define DIBUSB_REQ_SET_IOCTL 0x07 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci/* IOCTL commands */ 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci/* change the power mode in firmware */ 8862306a36Sopenharmony_ci#define DIBUSB_IOCTL_CMD_POWER_MODE 0x00 8962306a36Sopenharmony_ci#define DIBUSB_IOCTL_POWER_SLEEP 0x00 9062306a36Sopenharmony_ci#define DIBUSB_IOCTL_POWER_WAKEUP 0x01 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci/* modify streaming of the FX2 */ 9362306a36Sopenharmony_ci#define DIBUSB_IOCTL_CMD_ENABLE_STREAM 0x01 9462306a36Sopenharmony_ci#define DIBUSB_IOCTL_CMD_DISABLE_STREAM 0x02 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci/* Max transfer size done by I2C transfer functions */ 9762306a36Sopenharmony_ci#define MAX_XFER_SIZE 64 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_cistruct dibusb_state { 10062306a36Sopenharmony_ci struct dib_fe_xfer_ops ops; 10162306a36Sopenharmony_ci int mt2060_present; 10262306a36Sopenharmony_ci u8 tuner_addr; 10362306a36Sopenharmony_ci}; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_cistruct dibusb_device_state { 10662306a36Sopenharmony_ci /* for RC5 remote control */ 10762306a36Sopenharmony_ci int old_toggle; 10862306a36Sopenharmony_ci int last_repeat_count; 10962306a36Sopenharmony_ci}; 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ciextern struct i2c_algorithm dibusb_i2c_algo; 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ciextern int dibusb_dib3000mc_frontend_attach(struct dvb_usb_adapter *); 11462306a36Sopenharmony_ciextern int dibusb_dib3000mc_tuner_attach (struct dvb_usb_adapter *); 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ciextern int dibusb_streaming_ctrl(struct dvb_usb_adapter *, int); 11762306a36Sopenharmony_ciextern int dibusb_pid_filter(struct dvb_usb_adapter *, int, u16, int); 11862306a36Sopenharmony_ciextern int dibusb_pid_filter_ctrl(struct dvb_usb_adapter *, int); 11962306a36Sopenharmony_ciextern int dibusb2_0_streaming_ctrl(struct dvb_usb_adapter *, int); 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ciextern int dibusb_power_ctrl(struct dvb_usb_device *, int); 12262306a36Sopenharmony_ciextern int dibusb2_0_power_ctrl(struct dvb_usb_device *, int); 12362306a36Sopenharmony_ci 12462306a36Sopenharmony_ci#define DEFAULT_RC_INTERVAL 150 12562306a36Sopenharmony_ci//#define DEFAULT_RC_INTERVAL 100000 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ciextern struct rc_map_table rc_map_dibusb_table[]; 12862306a36Sopenharmony_ciextern int dibusb_rc_query(struct dvb_usb_device *, u32 *, int *); 12962306a36Sopenharmony_ciextern int dibusb_read_eeprom_byte(struct dvb_usb_device *, u8, u8 *); 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci#endif 132