xref: /openbmc/linux/drivers/media/dvb-frontends/tda10071_priv.h (revision 58e16d792a6a8c6b750f637a4649967fcac853dc)
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