162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Silicon Labs Si2146/2147/2148/2157/2158 silicon tuner driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2014 Antti Palosaari <crope@iki.fi> 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef SI2157_PRIV_H 962306a36Sopenharmony_ci#define SI2157_PRIV_H 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/firmware.h> 1262306a36Sopenharmony_ci#include <media/v4l2-mc.h> 1362306a36Sopenharmony_ci#include "si2157.h" 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cienum si2157_pads { 1662306a36Sopenharmony_ci SI2157_PAD_RF_INPUT, 1762306a36Sopenharmony_ci SI2157_PAD_VID_OUT, 1862306a36Sopenharmony_ci SI2157_PAD_AUD_OUT, 1962306a36Sopenharmony_ci SI2157_NUM_PADS 2062306a36Sopenharmony_ci}; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci/* state struct */ 2362306a36Sopenharmony_cistruct si2157_dev { 2462306a36Sopenharmony_ci struct mutex i2c_mutex; 2562306a36Sopenharmony_ci struct dvb_frontend *fe; 2662306a36Sopenharmony_ci unsigned int active:1; 2762306a36Sopenharmony_ci unsigned int inversion:1; 2862306a36Sopenharmony_ci unsigned int dont_load_firmware:1; 2962306a36Sopenharmony_ci u8 part_id; 3062306a36Sopenharmony_ci u8 if_port; 3162306a36Sopenharmony_ci u32 if_frequency; 3262306a36Sopenharmony_ci u32 bandwidth; 3362306a36Sopenharmony_ci u32 frequency; 3462306a36Sopenharmony_ci struct delayed_work stat_work; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#if defined(CONFIG_MEDIA_CONTROLLER) 3762306a36Sopenharmony_ci struct media_device *mdev; 3862306a36Sopenharmony_ci struct media_entity ent; 3962306a36Sopenharmony_ci struct media_pad pad[SI2157_NUM_PADS]; 4062306a36Sopenharmony_ci#endif 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci}; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_cienum si2157_part_id { 4562306a36Sopenharmony_ci SI2141 = 41, 4662306a36Sopenharmony_ci SI2146 = 46, 4762306a36Sopenharmony_ci SI2147 = 47, 4862306a36Sopenharmony_ci SI2148 = 48, 4962306a36Sopenharmony_ci SI2157 = 57, 5062306a36Sopenharmony_ci SI2158 = 58, 5162306a36Sopenharmony_ci SI2177 = 77, 5262306a36Sopenharmony_ci}; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_cistruct si2157_tuner_info { 5562306a36Sopenharmony_ci enum si2157_part_id part_id; 5662306a36Sopenharmony_ci unsigned char rom_id; 5762306a36Sopenharmony_ci bool required; 5862306a36Sopenharmony_ci const char *fw_name, *fw_alt_name; 5962306a36Sopenharmony_ci}; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci/* firmware command struct */ 6262306a36Sopenharmony_ci#define SI2157_ARGLEN 30 6362306a36Sopenharmony_cistruct si2157_cmd { 6462306a36Sopenharmony_ci u8 args[SI2157_ARGLEN]; 6562306a36Sopenharmony_ci unsigned wlen; 6662306a36Sopenharmony_ci unsigned rlen; 6762306a36Sopenharmony_ci}; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci#define SUPPORTS_1700KHz(dev) (((dev)->part_id == SI2141) || \ 7062306a36Sopenharmony_ci ((dev)->part_id == SI2147) || \ 7162306a36Sopenharmony_ci ((dev)->part_id == SI2157) || \ 7262306a36Sopenharmony_ci ((dev)->part_id == SI2177)) 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci#define SUPPORTS_ATV_IF(dev) (((dev)->part_id == SI2157) || \ 7562306a36Sopenharmony_ci ((dev)->part_id == SI2158)) 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci/* Old firmware namespace */ 7862306a36Sopenharmony_ci#define SI2158_A20_FIRMWARE "dvb-tuner-si2158-a20-01.fw" 7962306a36Sopenharmony_ci#define SI2141_A10_FIRMWARE "dvb-tuner-si2141-a10-01.fw" 8062306a36Sopenharmony_ci#define SI2157_A30_FIRMWARE "dvb-tuner-si2157-a30-01.fw" 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci/* New firmware namespace */ 8362306a36Sopenharmony_ci#define SI2141_60_FIRMWARE "dvb_driver_si2141_rom60.fw" 8462306a36Sopenharmony_ci#define SI2141_61_FIRMWARE "dvb_driver_si2141_rom61.fw" 8562306a36Sopenharmony_ci#define SI2146_11_FIRMWARE "dvb_driver_si2146_rom11.fw" 8662306a36Sopenharmony_ci#define SI2147_50_FIRMWARE "dvb_driver_si2147_rom50.fw" 8762306a36Sopenharmony_ci#define SI2148_32_FIRMWARE "dvb_driver_si2148_rom32.fw" 8862306a36Sopenharmony_ci#define SI2148_33_FIRMWARE "dvb_driver_si2148_rom33.fw" 8962306a36Sopenharmony_ci#define SI2157_50_FIRMWARE "dvb_driver_si2157_rom50.fw" 9062306a36Sopenharmony_ci#define SI2158_50_FIRMWARE "dvb_driver_si2178_rom50.fw" 9162306a36Sopenharmony_ci#define SI2158_51_FIRMWARE "dvb_driver_si2158_rom51.fw" 9262306a36Sopenharmony_ci#define SI2177_50_FIRMWARE "dvb_driver_si2177_rom50.fw" 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci#endif 95