100 lines
3.3 KiB
C
100 lines
3.3 KiB
C
|
/* DVB USB compliant Linux driver for the Friio USB2.0 ISDB-T receiver.
|
||
|
*
|
||
|
* Copyright (C) 2009 Akihiro Tsukada <tskd2@yahoo.co.jp>
|
||
|
*
|
||
|
* This module is based off the the gl861 and vp702x modules.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify it
|
||
|
* under the terms of the GNU General Public License as published by the Free
|
||
|
* Software Foundation, version 2.
|
||
|
*
|
||
|
* see Documentation/media/dvb-drivers/dvb-usb.rst for more information
|
||
|
*/
|
||
|
#ifndef _DVB_USB_FRIIO_H_
|
||
|
#define _DVB_USB_FRIIO_H_
|
||
|
|
||
|
/**
|
||
|
* Friio Components
|
||
|
* USB hub: AU4254
|
||
|
* USB controller(+ TS dmx & streaming): GL861
|
||
|
* Frontend: comtech JDVBT-90502
|
||
|
* (tuner PLL: tua6034, I2C addr:(0xC0 >> 1))
|
||
|
* (OFDM demodulator: TC90502, I2C addr:(0x30 >> 1))
|
||
|
* LED x3 (+LNB) control: PIC 16F676
|
||
|
* EEPROM: 24C08
|
||
|
*
|
||
|
* (USB smart card reader: AU9522)
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#define DVB_USB_LOG_PREFIX "friio"
|
||
|
#include "dvb-usb.h"
|
||
|
|
||
|
extern int dvb_usb_friio_debug;
|
||
|
#define deb_info(args...) dprintk(dvb_usb_friio_debug, 0x01, args)
|
||
|
#define deb_xfer(args...) dprintk(dvb_usb_friio_debug, 0x02, args)
|
||
|
#define deb_rc(args...) dprintk(dvb_usb_friio_debug, 0x04, args)
|
||
|
#define deb_fe(args...) dprintk(dvb_usb_friio_debug, 0x08, args)
|
||
|
|
||
|
/* Vendor requests */
|
||
|
#define GL861_WRITE 0x40
|
||
|
#define GL861_READ 0xc0
|
||
|
|
||
|
/* command bytes */
|
||
|
#define GL861_REQ_I2C_WRITE 0x01
|
||
|
#define GL861_REQ_I2C_READ 0x02
|
||
|
/* For control msg with data argument */
|
||
|
/* Used for accessing the PLL on the secondary I2C bus of FE via GL861 */
|
||
|
#define GL861_REQ_I2C_DATA_CTRL_WRITE 0x03
|
||
|
|
||
|
#define GL861_ALTSETTING_COUNT 2
|
||
|
#define FRIIO_BULK_ALTSETTING 0
|
||
|
#define FRIIO_ISOC_ALTSETTING 1
|
||
|
|
||
|
/* LED & LNB control via PIC. */
|
||
|
/* basically, it's serial control with clock and strobe. */
|
||
|
/* write the below 4bit control data to the reg 0x00 at the I2C addr 0x00 */
|
||
|
/* when controlling the LEDs, 32bit(saturation, R, G, B) is sent on the bit3*/
|
||
|
#define FRIIO_CTL_LNB (1 << 0)
|
||
|
#define FRIIO_CTL_STROBE (1 << 1)
|
||
|
#define FRIIO_CTL_CLK (1 << 2)
|
||
|
#define FRIIO_CTL_LED (1 << 3)
|
||
|
|
||
|
/* Front End related */
|
||
|
|
||
|
#define FRIIO_DEMOD_ADDR (0x30 >> 1)
|
||
|
#define FRIIO_PLL_ADDR (0xC0 >> 1)
|
||
|
|
||
|
#define JDVBT90502_PLL_CLK 4000000
|
||
|
#define JDVBT90502_PLL_DIVIDER 28
|
||
|
|
||
|
#define JDVBT90502_2ND_I2C_REG 0xFE
|
||
|
|
||
|
/* byte index for pll i2c command data structure*/
|
||
|
/* see datasheet for tua6034 */
|
||
|
#define DEMOD_REDIRECT_REG 0
|
||
|
#define ADDRESS_BYTE 1
|
||
|
#define DIVIDER_BYTE1 2
|
||
|
#define DIVIDER_BYTE2 3
|
||
|
#define CONTROL_BYTE 4
|
||
|
#define BANDSWITCH_BYTE 5
|
||
|
#define AGC_CTRL_BYTE 5
|
||
|
#define PLL_CMD_LEN 6
|
||
|
|
||
|
/* bit masks for PLL STATUS response */
|
||
|
#define PLL_STATUS_POR_MODE 0x80 /* 1: Power on Reset (test) Mode */
|
||
|
#define PLL_STATUS_LOCKED 0x40 /* 1: locked */
|
||
|
#define PLL_STATUS_AGC_ACTIVE 0x08 /* 1:active */
|
||
|
#define PLL_STATUS_TESTMODE 0x07 /* digital output level (5 level) */
|
||
|
/* 0.15Vcc step 0x00: < 0.15Vcc, ..., 0x04: >= 0.6Vcc (<= 1Vcc) */
|
||
|
|
||
|
|
||
|
struct jdvbt90502_config {
|
||
|
u8 demod_address; /* i2c addr for demodulator IC */
|
||
|
u8 pll_address; /* PLL addr on the secondary i2c*/
|
||
|
};
|
||
|
extern struct jdvbt90502_config friio_fe_config;
|
||
|
|
||
|
extern struct dvb_frontend *jdvbt90502_attach(struct dvb_usb_device *d);
|
||
|
#endif
|