1*16216333SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 29a0bf528SMauro Carvalho Chehab /* 39a0bf528SMauro Carvalho Chehab * NXP TDA10071 + Conexant CX24118A DVB-S/S2 demodulator + tuner driver 49a0bf528SMauro Carvalho Chehab * 59a0bf528SMauro Carvalho Chehab * Copyright (C) 2011 Antti Palosaari <crope@iki.fi> 69a0bf528SMauro Carvalho Chehab */ 79a0bf528SMauro Carvalho Chehab 89a0bf528SMauro Carvalho Chehab #ifndef TDA10071_PRIV 99a0bf528SMauro Carvalho Chehab #define TDA10071_PRIV 109a0bf528SMauro Carvalho Chehab 11fada1935SMauro Carvalho Chehab #include <media/dvb_frontend.h> 129a0bf528SMauro Carvalho Chehab #include "tda10071.h" 139a0bf528SMauro Carvalho Chehab #include <linux/firmware.h> 1454ab48edSAntti Palosaari #include <linux/regmap.h> 159a0bf528SMauro Carvalho Chehab 16fca3e007SAntti Palosaari struct tda10071_dev { 179a0bf528SMauro Carvalho Chehab struct dvb_frontend fe; 18d69abb79SAntti Palosaari struct i2c_client *client; 1954ab48edSAntti Palosaari struct regmap *regmap; 20e14432a5SAntti Palosaari struct mutex cmd_execute_mutex; 2159ca2ce1SAntti Palosaari u32 clk; 2259ca2ce1SAntti Palosaari u16 i2c_wr_max; 2359ca2ce1SAntti Palosaari u8 ts_mode; 2459ca2ce1SAntti Palosaari bool spec_inv; 2559ca2ce1SAntti Palosaari u8 pll_multiplier; 2659ca2ce1SAntti Palosaari u8 tuner_i2c_addr; 279a0bf528SMauro Carvalho Chehab 28267897a4SAntti Palosaari u8 meas_count; 29267897a4SAntti Palosaari u32 dvbv3_ber; 300df289a2SMauro Carvalho Chehab enum fe_status fe_status; 310df289a2SMauro Carvalho Chehab enum fe_delivery_system delivery_system; 329a0bf528SMauro Carvalho Chehab bool warm; /* FW running */ 33267897a4SAntti Palosaari u64 post_bit_error; 34267897a4SAntti Palosaari u64 block_error; 359a0bf528SMauro Carvalho Chehab }; 369a0bf528SMauro Carvalho Chehab 379a0bf528SMauro Carvalho Chehab static struct tda10071_modcod { 380df289a2SMauro Carvalho Chehab enum fe_delivery_system delivery_system; 390df289a2SMauro Carvalho Chehab enum fe_modulation modulation; 400df289a2SMauro Carvalho Chehab enum fe_code_rate fec; 419a0bf528SMauro Carvalho Chehab u8 val; 429a0bf528SMauro Carvalho Chehab } TDA10071_MODCOD[] = { 439a0bf528SMauro Carvalho Chehab /* NBC-QPSK */ 449a0bf528SMauro Carvalho Chehab { SYS_DVBS2, QPSK, FEC_AUTO, 0x00 }, 459a0bf528SMauro Carvalho Chehab { SYS_DVBS2, QPSK, FEC_1_2, 0x04 }, 469a0bf528SMauro Carvalho Chehab { SYS_DVBS2, QPSK, FEC_3_5, 0x05 }, 479a0bf528SMauro Carvalho Chehab { SYS_DVBS2, QPSK, FEC_2_3, 0x06 }, 489a0bf528SMauro Carvalho Chehab { SYS_DVBS2, QPSK, FEC_3_4, 0x07 }, 499a0bf528SMauro Carvalho Chehab { SYS_DVBS2, QPSK, FEC_4_5, 0x08 }, 509a0bf528SMauro Carvalho Chehab { SYS_DVBS2, QPSK, FEC_5_6, 0x09 }, 519a0bf528SMauro Carvalho Chehab { SYS_DVBS2, QPSK, FEC_8_9, 0x0a }, 529a0bf528SMauro Carvalho Chehab { SYS_DVBS2, QPSK, FEC_9_10, 0x0b }, 539a0bf528SMauro Carvalho Chehab /* 8PSK */ 54bc760cdaSAntti Palosaari { SYS_DVBS2, PSK_8, FEC_AUTO, 0x00 }, 559a0bf528SMauro Carvalho Chehab { SYS_DVBS2, PSK_8, FEC_3_5, 0x0c }, 569a0bf528SMauro Carvalho Chehab { SYS_DVBS2, PSK_8, FEC_2_3, 0x0d }, 579a0bf528SMauro Carvalho Chehab { SYS_DVBS2, PSK_8, FEC_3_4, 0x0e }, 589a0bf528SMauro Carvalho Chehab { SYS_DVBS2, PSK_8, FEC_5_6, 0x0f }, 599a0bf528SMauro Carvalho Chehab { SYS_DVBS2, PSK_8, FEC_8_9, 0x10 }, 609a0bf528SMauro Carvalho Chehab { SYS_DVBS2, PSK_8, FEC_9_10, 0x11 }, 619a0bf528SMauro Carvalho Chehab /* QPSK */ 629a0bf528SMauro Carvalho Chehab { SYS_DVBS, QPSK, FEC_AUTO, 0x2d }, 639a0bf528SMauro Carvalho Chehab { SYS_DVBS, QPSK, FEC_1_2, 0x2e }, 649a0bf528SMauro Carvalho Chehab { SYS_DVBS, QPSK, FEC_2_3, 0x2f }, 659a0bf528SMauro Carvalho Chehab { SYS_DVBS, QPSK, FEC_3_4, 0x30 }, 669a0bf528SMauro Carvalho Chehab { SYS_DVBS, QPSK, FEC_5_6, 0x31 }, 679a0bf528SMauro Carvalho Chehab { SYS_DVBS, QPSK, FEC_7_8, 0x32 }, 689a0bf528SMauro Carvalho Chehab }; 699a0bf528SMauro Carvalho Chehab 709a0bf528SMauro Carvalho Chehab struct tda10071_reg_val_mask { 719a0bf528SMauro Carvalho Chehab u8 reg; 729a0bf528SMauro Carvalho Chehab u8 val; 739a0bf528SMauro Carvalho Chehab u8 mask; 749a0bf528SMauro Carvalho Chehab }; 759a0bf528SMauro Carvalho Chehab 769a0bf528SMauro Carvalho Chehab /* firmware filename */ 7703f4efc3SAntti Palosaari #define TDA10071_FIRMWARE "dvb-fe-tda10071.fw" 789a0bf528SMauro Carvalho Chehab 799a0bf528SMauro Carvalho Chehab /* firmware commands */ 809a0bf528SMauro Carvalho Chehab #define CMD_DEMOD_INIT 0x10 819a0bf528SMauro Carvalho Chehab #define CMD_CHANGE_CHANNEL 0x11 829a0bf528SMauro Carvalho Chehab #define CMD_MPEG_CONFIG 0x13 839a0bf528SMauro Carvalho Chehab #define CMD_TUNER_INIT 0x15 849a0bf528SMauro Carvalho Chehab #define CMD_GET_AGCACC 0x1a 859a0bf528SMauro Carvalho Chehab 869a0bf528SMauro Carvalho Chehab #define CMD_LNB_CONFIG 0x20 879a0bf528SMauro Carvalho Chehab #define CMD_LNB_SEND_DISEQC 0x21 889a0bf528SMauro Carvalho Chehab #define CMD_LNB_SET_DC_LEVEL 0x22 899a0bf528SMauro Carvalho Chehab #define CMD_LNB_PCB_CONFIG 0x23 909a0bf528SMauro Carvalho Chehab #define CMD_LNB_SEND_TONEBURST 0x24 919a0bf528SMauro Carvalho Chehab #define CMD_LNB_UPDATE_REPLY 0x25 929a0bf528SMauro Carvalho Chehab 939a0bf528SMauro Carvalho Chehab #define CMD_GET_FW_VERSION 0x35 949a0bf528SMauro Carvalho Chehab #define CMD_SET_SLEEP_MODE 0x36 959a0bf528SMauro Carvalho Chehab #define CMD_BER_CONTROL 0x3e 969a0bf528SMauro Carvalho Chehab #define CMD_BER_UPDATE_COUNTERS 0x3f 979a0bf528SMauro Carvalho Chehab 98a87a4d34SYannick Guerrini /* firmware command struct */ 999a0bf528SMauro Carvalho Chehab #define TDA10071_ARGLEN 30 1009a0bf528SMauro Carvalho Chehab struct tda10071_cmd { 1019a0bf528SMauro Carvalho Chehab u8 args[TDA10071_ARGLEN]; 1029a0bf528SMauro Carvalho Chehab u8 len; 1039a0bf528SMauro Carvalho Chehab }; 1049a0bf528SMauro Carvalho Chehab 1059a0bf528SMauro Carvalho Chehab 1069a0bf528SMauro Carvalho Chehab #endif /* TDA10071_PRIV */ 107