1776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/* Header file for all dibusb-based-receivers.
2776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *
3776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de)
4776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *
5776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *	This program is free software; you can redistribute it and/or modify it
6776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *	under the terms of the GNU General Public License as published by the Free
7776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *	Software Foundation, version 2.
8776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *
9776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * see Documentation/dvb/README.dvb-usb for more information
10776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach */
11776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#ifndef _DVB_USB_DIBUSB_H_
12776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define _DVB_USB_DIBUSB_H_
13776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
14f6f4b725461d1f3e2587993b22b0c6fe524d9259Patrick Boettcher#ifndef DVB_USB_LOG_PREFIX
15f6f4b725461d1f3e2587993b22b0c6fe524d9259Patrick Boettcher #define DVB_USB_LOG_PREFIX "dibusb"
16f6f4b725461d1f3e2587993b22b0c6fe524d9259Patrick Boettcher#endif
17776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#include "dvb-usb.h"
18776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
19776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#include "dib3000.h"
20b7571f8d7e12cd70048331e6a0199a42dc995d99Patrick Boettcher#include "dib3000mc.h"
21a16bf5d5603184dc1db88f37051881b2eeacfd17Olivier DANET#include "mt2060.h"
22776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
23776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/*
24776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * protocol of all dibusb related devices
25776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach */
26776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
27776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/*
28776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * bulk msg to/from endpoint 0x01
29776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *
30776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * general structure:
31776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * request_byte parameter_bytes
32776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach */
33776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
34776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_REQ_START_READ			0x00
35776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_REQ_START_DEMOD			0x01
36776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
37776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/*
38776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * i2c read
39ad86faada7d8dd4268ea8ad7b0b5dbc308a6994fRaimonds Cicans * bulk write: 0x02 ((7bit i2c_addr << 1) | 0x01) register_bytes length_word
40776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * bulk read:  byte_buffer (length_word bytes)
41776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach */
42776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_REQ_I2C_READ			0x02
43776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
44776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/*
45776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * i2c write
46776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * bulk write: 0x03 (7bit i2c_addr << 1) register_bytes value_bytes
47776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach */
48776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_REQ_I2C_WRITE			0x03
49776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
50776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/*
51776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * polling the value of the remote control
52776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * bulk write: 0x04
53776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * bulk read:  byte_buffer (5 bytes)
54776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach */
55776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_REQ_POLL_REMOTE       0x04
56776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
57776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/* additional status values for Hauppauge Remote Control Protocol */
58776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_RC_HAUPPAUGE_KEY_PRESSED	0x01
59776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_RC_HAUPPAUGE_KEY_EMPTY	0x03
60776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
61776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/* streaming mode:
62776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * bulk write: 0x05 mode_byte
63776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *
64776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * mode_byte is mostly 0x00
65776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach */
66776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_REQ_SET_STREAMING_MODE	0x05
67776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
68776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/* interrupt the internal read loop, when blocking */
69776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_REQ_INTR_READ			0x06
70776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
71776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/* io control
72776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * 0x07 cmd_byte param_bytes
73776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *
74776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * param_bytes can be up to 32 bytes
75776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *
76776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * cmd_byte function    parameter name
77776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * 0x00     power mode
78776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *                      0x00      sleep
79776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *                      0x01      wakeup
80776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *
81776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * 0x01     enable streaming
82776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach * 0x02     disable streaming
83776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *
84776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach *
85776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach */
86776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_REQ_SET_IOCTL			0x07
87776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
88776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/* IOCTL commands */
89776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
90776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/* change the power mode in firmware */
91776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_IOCTL_CMD_POWER_MODE		0x00
92776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_IOCTL_POWER_SLEEP			0x00
93776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_IOCTL_POWER_WAKEUP			0x01
94776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
95776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach/* modify streaming of the FX2 */
96776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_IOCTL_CMD_ENABLE_STREAM	0x01
97776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DIBUSB_IOCTL_CMD_DISABLE_STREAM	0x02
98776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
99776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbachstruct dibusb_state {
100776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach	struct dib_fe_xfer_ops ops;
101e4d6c1f74aaac1bbe5be50e7368e5ac99d54e5a2Patrick Boettcher	int mt2060_present;
1026c08d9290e2fc87b217d0f7c9cd67c9240ad7147Michael Krufky	u8 tuner_addr;
1036a74216c4590e4d322a45e1085f3553b1fb07f06Patrick Boettcher};
104776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
1056a74216c4590e4d322a45e1085f3553b1fb07f06Patrick Boettcherstruct dibusb_device_state {
106776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach	/* for RC5 remote control */
107776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach	int old_toggle;
108776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach	int last_repeat_count;
109776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach};
110776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
111776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbachextern struct i2c_algorithm dibusb_i2c_algo;
112776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
1134d43e13f723e12734257277cc38497fab1efc605Patrick Boettcherextern int dibusb_dib3000mc_frontend_attach(struct dvb_usb_adapter *);
1144d43e13f723e12734257277cc38497fab1efc605Patrick Boettcherextern int dibusb_dib3000mc_tuner_attach (struct dvb_usb_adapter *);
1154d43e13f723e12734257277cc38497fab1efc605Patrick Boettcher
1164d43e13f723e12734257277cc38497fab1efc605Patrick Boettcherextern int dibusb_streaming_ctrl(struct dvb_usb_adapter *, int);
1174d43e13f723e12734257277cc38497fab1efc605Patrick Boettcherextern int dibusb_pid_filter(struct dvb_usb_adapter *, int, u16, int);
1184d43e13f723e12734257277cc38497fab1efc605Patrick Boettcherextern int dibusb_pid_filter_ctrl(struct dvb_usb_adapter *, int);
1194d43e13f723e12734257277cc38497fab1efc605Patrick Boettcherextern int dibusb2_0_streaming_ctrl(struct dvb_usb_adapter *, int);
120776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
121776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbachextern int dibusb_power_ctrl(struct dvb_usb_device *, int);
122776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbachextern int dibusb2_0_power_ctrl(struct dvb_usb_device *, int);
123776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
124776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#define DEFAULT_RC_INTERVAL 150
125776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach//#define DEFAULT_RC_INTERVAL 100000
126776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
1272f4f58d689dd71dea67407b74405a3c43e797cb1Mauro Carvalho Chehabextern struct rc_map_table rc_map_dibusb_table[];
128776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbachextern int dibusb_rc_query(struct dvb_usb_device *, u32 *, int *);
129776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbachextern int dibusb_read_eeprom_byte(struct dvb_usb_device *, u8, u8 *);
130776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach
131776338e121b9db3156bfb4e21622a0219bbab9d4Johannes Stezenbach#endif
132