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