brintos

brintos / linux-shallow public Read only

0
0
Text · 6.6 KiB · 594ad9c Raw
403 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * Montage Technology M88DS3103/M88RS6000 demodulator driver4 *5 * Copyright (C) 2013 Antti Palosaari <crope@iki.fi>6 */7 8#ifndef M88DS3103_PRIV_H9#define M88DS3103_PRIV_H10 11#include <media/dvb_frontend.h>12#include "m88ds3103.h"13#include <linux/int_log.h>14#include <linux/firmware.h>15#include <linux/i2c-mux.h>16#include <linux/regmap.h>17#include <linux/math64.h>18 19#define M88DS3103B_FIRMWARE "dvb-demod-m88ds3103b.fw"20#define M88DS3103_FIRMWARE  "dvb-demod-m88ds3103.fw"21#define M88RS6000_FIRMWARE  "dvb-demod-m88rs6000.fw"22 23#define M88RS6000_CHIP_ID 0x7424#define M88DS3103_CHIP_ID 0x7025 26#define M88DS3103_CHIPTYPE_3103   027#define M88DS3103_CHIPTYPE_RS6000 128#define M88DS3103_CHIPTYPE_3103B  229 30struct m88ds3103_dev {31	struct i2c_client *client;32	struct i2c_client *dt_client;33	struct regmap_config regmap_config;34	struct regmap *regmap;35	struct m88ds3103_config config;36	const struct m88ds3103_config *cfg;37	struct dvb_frontend fe;38	enum fe_delivery_system delivery_system;39	enum fe_status fe_status;40	u32 dvbv3_ber; /* for old DVBv3 API read_ber */41	bool warm; /* FW running */42	struct i2c_mux_core *muxc;43	/* auto detect chip id to do different config */44	u8 chip_id;45	/* chip type to differentiate m88rs6000 from m88ds3103b */46	u8 chiptype;47	/* main mclk is calculated for M88RS6000 dynamically */48	s32 mclk;49	u64 post_bit_error;50	u64 post_bit_count;51	u8 dt_addr;52};53 54struct m88ds3103_reg_val {55	u8 reg;56	u8 val;57};58 59static const struct m88ds3103_reg_val m88ds3103_dvbs_init_reg_vals[] = {60	{0x23, 0x07},61	{0x08, 0x03},62	{0x0c, 0x02},63	{0x21, 0x54},64	{0x25, 0x8a},65	{0x27, 0x31},66	{0x30, 0x08},67	{0x31, 0x40},68	{0x32, 0x32},69	{0x35, 0xff},70	{0x3a, 0x00},71	{0x37, 0x10},72	{0x38, 0x10},73	{0x39, 0x02},74	{0x42, 0x60},75	{0x4a, 0x80},76	{0x4b, 0x04},77	{0x4d, 0x91},78	{0x5d, 0xc8},79	{0x50, 0x36},80	{0x51, 0x36},81	{0x52, 0x36},82	{0x53, 0x36},83	{0x56, 0x01},84	{0x63, 0x0f},85	{0x64, 0x30},86	{0x65, 0x40},87	{0x68, 0x26},88	{0x69, 0x4c},89	{0x70, 0x20},90	{0x71, 0x70},91	{0x72, 0x04},92	{0x73, 0x00},93	{0x70, 0x40},94	{0x71, 0x70},95	{0x72, 0x04},96	{0x73, 0x00},97	{0x70, 0x60},98	{0x71, 0x70},99	{0x72, 0x04},100	{0x73, 0x00},101	{0x70, 0x80},102	{0x71, 0x70},103	{0x72, 0x04},104	{0x73, 0x00},105	{0x70, 0xa0},106	{0x71, 0x70},107	{0x72, 0x04},108	{0x73, 0x00},109	{0x70, 0x1f},110	{0x76, 0x38},111	{0x77, 0xa6},112	{0x78, 0x0c},113	{0x79, 0x80},114	{0x7f, 0x14},115	{0x7c, 0x00},116	{0xae, 0x82},117	{0x80, 0x64},118	{0x81, 0x66},119	{0x82, 0x44},120	{0x85, 0x04},121	{0xcd, 0xf4},122	{0x90, 0x33},123	{0xa0, 0x44},124	{0xc0, 0x08},125	{0xc3, 0x10},126	{0xc4, 0x08},127	{0xc5, 0xf0},128	{0xc6, 0xff},129	{0xc7, 0x00},130	{0xc8, 0x1a},131	{0xc9, 0x80},132	{0xe0, 0xf8},133	{0xe6, 0x8b},134	{0xd0, 0x40},135	{0xf8, 0x20},136	{0xfa, 0x0f},137	{0x00, 0x00},138	{0xbd, 0x01},139	{0xb8, 0x00},140};141 142static const struct m88ds3103_reg_val m88ds3103_dvbs2_init_reg_vals[] = {143	{0x23, 0x07},144	{0x08, 0x07},145	{0x0c, 0x02},146	{0x21, 0x54},147	{0x25, 0x8a},148	{0x27, 0x31},149	{0x30, 0x08},150	{0x32, 0x32},151	{0x35, 0xff},152	{0x3a, 0x00},153	{0x37, 0x10},154	{0x38, 0x10},155	{0x39, 0x02},156	{0x42, 0x60},157	{0x4a, 0x80},158	{0x4b, 0x04},159	{0x4d, 0x91},160	{0x5d, 0xc8},161	{0x50, 0x36},162	{0x51, 0x36},163	{0x52, 0x36},164	{0x53, 0x36},165	{0x56, 0x01},166	{0x63, 0x0f},167	{0x64, 0x10},168	{0x65, 0x20},169	{0x68, 0x46},170	{0x69, 0xcd},171	{0x70, 0x20},172	{0x71, 0x70},173	{0x72, 0x04},174	{0x73, 0x00},175	{0x70, 0x40},176	{0x71, 0x70},177	{0x72, 0x04},178	{0x73, 0x00},179	{0x70, 0x60},180	{0x71, 0x70},181	{0x72, 0x04},182	{0x73, 0x00},183	{0x70, 0x80},184	{0x71, 0x70},185	{0x72, 0x04},186	{0x73, 0x00},187	{0x70, 0xa0},188	{0x71, 0x70},189	{0x72, 0x04},190	{0x73, 0x00},191	{0x70, 0x1f},192	{0x76, 0x38},193	{0x77, 0xa6},194	{0x78, 0x0c},195	{0x79, 0x80},196	{0x7f, 0x14},197	{0x85, 0x08},198	{0xcd, 0xf4},199	{0x90, 0x33},200	{0x86, 0x00},201	{0x87, 0x0f},202	{0x89, 0x00},203	{0x8b, 0x44},204	{0x8c, 0x66},205	{0x9d, 0xc1},206	{0x8a, 0x10},207	{0xad, 0x40},208	{0xa0, 0x44},209	{0xc0, 0x08},210	{0xc1, 0x10},211	{0xc2, 0x08},212	{0xc3, 0x10},213	{0xc4, 0x08},214	{0xc5, 0xf0},215	{0xc6, 0xff},216	{0xc7, 0x00},217	{0xc8, 0x1a},218	{0xc9, 0x80},219	{0xca, 0x23},220	{0xcb, 0x24},221	{0xcc, 0xf4},222	{0xce, 0x74},223	{0x00, 0x00},224	{0xbd, 0x01},225	{0xb8, 0x00},226};227 228static const struct m88ds3103_reg_val m88rs6000_dvbs_init_reg_vals[] = {229	{0x23, 0x07},230	{0x08, 0x03},231	{0x0c, 0x02},232	{0x20, 0x00},233	{0x21, 0x54},234	{0x25, 0x82},235	{0x27, 0x31},236	{0x30, 0x08},237	{0x31, 0x40},238	{0x32, 0x32},239	{0x33, 0x35},240	{0x35, 0xff},241	{0x3a, 0x00},242	{0x37, 0x10},243	{0x38, 0x10},244	{0x39, 0x02},245	{0x42, 0x60},246	{0x4a, 0x80},247	{0x4b, 0x04},248	{0x4d, 0x91},249	{0x5d, 0xc8},250	{0x50, 0x36},251	{0x51, 0x36},252	{0x52, 0x36},253	{0x53, 0x36},254	{0x63, 0x0f},255	{0x64, 0x30},256	{0x65, 0x40},257	{0x68, 0x26},258	{0x69, 0x4c},259	{0x70, 0x20},260	{0x71, 0x70},261	{0x72, 0x04},262	{0x73, 0x00},263	{0x70, 0x40},264	{0x71, 0x70},265	{0x72, 0x04},266	{0x73, 0x00},267	{0x70, 0x60},268	{0x71, 0x70},269	{0x72, 0x04},270	{0x73, 0x00},271	{0x70, 0x80},272	{0x71, 0x70},273	{0x72, 0x04},274	{0x73, 0x00},275	{0x70, 0xa0},276	{0x71, 0x70},277	{0x72, 0x04},278	{0x73, 0x00},279	{0x70, 0x1f},280	{0x76, 0x38},281	{0x77, 0xa6},282	{0x78, 0x0c},283	{0x79, 0x80},284	{0x7f, 0x14},285	{0x7c, 0x00},286	{0xae, 0x82},287	{0x80, 0x64},288	{0x81, 0x66},289	{0x82, 0x44},290	{0x85, 0x04},291	{0xcd, 0xf4},292	{0x90, 0x33},293	{0xa0, 0x44},294	{0xbe, 0x00},295	{0xc0, 0x08},296	{0xc3, 0x10},297	{0xc4, 0x08},298	{0xc5, 0xf0},299	{0xc6, 0xff},300	{0xc7, 0x00},301	{0xc8, 0x1a},302	{0xc9, 0x80},303	{0xe0, 0xf8},304	{0xe6, 0x8b},305	{0xd0, 0x40},306	{0xf8, 0x20},307	{0xfa, 0x0f},308	{0x00, 0x00},309	{0xbd, 0x01},310	{0xb8, 0x00},311	{0x29, 0x11},312};313 314static const struct m88ds3103_reg_val m88rs6000_dvbs2_init_reg_vals[] = {315	{0x23, 0x07},316	{0x08, 0x07},317	{0x0c, 0x02},318	{0x20, 0x00},319	{0x21, 0x54},320	{0x25, 0x82},321	{0x27, 0x31},322	{0x30, 0x08},323	{0x32, 0x32},324	{0x33, 0x35},325	{0x35, 0xff},326	{0x3a, 0x00},327	{0x37, 0x10},328	{0x38, 0x10},329	{0x39, 0x02},330	{0x42, 0x60},331	{0x4a, 0x80},332	{0x4b, 0x04},333	{0x4d, 0x91},334	{0x5d, 0xc8},335	{0x50, 0x36},336	{0x51, 0x36},337	{0x52, 0x36},338	{0x53, 0x36},339	{0x63, 0x0f},340	{0x64, 0x10},341	{0x65, 0x20},342	{0x68, 0x46},343	{0x69, 0xcd},344	{0x70, 0x20},345	{0x71, 0x70},346	{0x72, 0x04},347	{0x73, 0x00},348	{0x70, 0x40},349	{0x71, 0x70},350	{0x72, 0x04},351	{0x73, 0x00},352	{0x70, 0x60},353	{0x71, 0x70},354	{0x72, 0x04},355	{0x73, 0x00},356	{0x70, 0x80},357	{0x71, 0x70},358	{0x72, 0x04},359	{0x73, 0x00},360	{0x70, 0xa0},361	{0x71, 0x70},362	{0x72, 0x04},363	{0x73, 0x00},364	{0x70, 0x1f},365	{0x76, 0x38},366	{0x77, 0xa6},367	{0x78, 0x0c},368	{0x79, 0x80},369	{0x7f, 0x14},370	{0x85, 0x08},371	{0xcd, 0xf4},372	{0x90, 0x33},373	{0x86, 0x00},374	{0x87, 0x0f},375	{0x89, 0x00},376	{0x8b, 0x44},377	{0x8c, 0x66},378	{0x9d, 0xc1},379	{0x8a, 0x10},380	{0xad, 0x40},381	{0xa0, 0x44},382	{0xbe, 0x00},383	{0xc0, 0x08},384	{0xc1, 0x10},385	{0xc2, 0x08},386	{0xc3, 0x10},387	{0xc4, 0x08},388	{0xc5, 0xf0},389	{0xc6, 0xff},390	{0xc7, 0x00},391	{0xc8, 0x1a},392	{0xc9, 0x80},393	{0xca, 0x23},394	{0xcb, 0x24},395	{0xcc, 0xf4},396	{0xce, 0x74},397	{0x00, 0x00},398	{0xbd, 0x01},399	{0xb8, 0x00},400	{0x29, 0x01},401};402#endif403