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