18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Sony CXD2820R demodulator driver 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2010 Antti Palosaari <crope@iki.fi> 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifndef CXD2820R_PRIV_H 108c2ecf20Sopenharmony_ci#define CXD2820R_PRIV_H 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <linux/dvb/version.h> 138c2ecf20Sopenharmony_ci#include <media/dvb_frontend.h> 148c2ecf20Sopenharmony_ci#include <media/dvb_math.h> 158c2ecf20Sopenharmony_ci#include "cxd2820r.h" 168c2ecf20Sopenharmony_ci#include <linux/gpio.h> 178c2ecf20Sopenharmony_ci#include <linux/math64.h> 188c2ecf20Sopenharmony_ci#include <linux/regmap.h> 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cistruct reg_val_mask { 218c2ecf20Sopenharmony_ci u32 reg; 228c2ecf20Sopenharmony_ci u8 val; 238c2ecf20Sopenharmony_ci u8 mask; 248c2ecf20Sopenharmony_ci}; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci#define CXD2820R_CLK 41000000 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_cistruct cxd2820r_priv { 298c2ecf20Sopenharmony_ci struct i2c_client *client[2]; 308c2ecf20Sopenharmony_ci struct regmap *regmap[2]; 318c2ecf20Sopenharmony_ci struct i2c_adapter *i2c; 328c2ecf20Sopenharmony_ci struct dvb_frontend fe; 338c2ecf20Sopenharmony_ci u8 ts_mode; 348c2ecf20Sopenharmony_ci bool ts_clk_inv; 358c2ecf20Sopenharmony_ci bool if_agc_polarity; 368c2ecf20Sopenharmony_ci bool spec_inv; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci u64 post_bit_error_prev_dvbv3; 398c2ecf20Sopenharmony_ci u64 post_bit_error; 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci bool ber_running; 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci#define GPIO_COUNT 3 448c2ecf20Sopenharmony_ci u8 gpio[GPIO_COUNT]; 458c2ecf20Sopenharmony_ci#ifdef CONFIG_GPIOLIB 468c2ecf20Sopenharmony_ci struct gpio_chip gpio_chip; 478c2ecf20Sopenharmony_ci#endif 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci enum fe_delivery_system delivery_system; 508c2ecf20Sopenharmony_ci bool last_tune_failed; /* for switch between T and T2 tune */ 518c2ecf20Sopenharmony_ci}; 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci/* cxd2820r_core.c */ 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ciextern int cxd2820r_debug; 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ciint cxd2820r_gpio(struct dvb_frontend *fe, u8 *gpio); 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ciint cxd2820r_wr_reg_val_mask_tab(struct cxd2820r_priv *priv, 608c2ecf20Sopenharmony_ci const struct reg_val_mask *tab, int tab_len); 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ciint cxd2820r_wr_reg_mask(struct cxd2820r_priv *priv, u32 reg, u8 val, 638c2ecf20Sopenharmony_ci u8 mask); 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ciint cxd2820r_wr_regs(struct cxd2820r_priv *priv, u32 reginfo, u8 *val, 668c2ecf20Sopenharmony_ci int len); 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ciint cxd2820r_wr_regs(struct cxd2820r_priv *priv, u32 reginfo, u8 *val, 698c2ecf20Sopenharmony_ci int len); 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ciint cxd2820r_rd_regs(struct cxd2820r_priv *priv, u32 reginfo, u8 *val, 728c2ecf20Sopenharmony_ci int len); 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ciint cxd2820r_wr_reg(struct cxd2820r_priv *priv, u32 reg, u8 val); 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ciint cxd2820r_rd_reg(struct cxd2820r_priv *priv, u32 reg, u8 *val); 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ci/* cxd2820r_c.c */ 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ciint cxd2820r_get_frontend_c(struct dvb_frontend *fe, 818c2ecf20Sopenharmony_ci struct dtv_frontend_properties *p); 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ciint cxd2820r_set_frontend_c(struct dvb_frontend *fe); 848c2ecf20Sopenharmony_ci 858c2ecf20Sopenharmony_ciint cxd2820r_read_status_c(struct dvb_frontend *fe, enum fe_status *status); 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ciint cxd2820r_init_c(struct dvb_frontend *fe); 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_ciint cxd2820r_sleep_c(struct dvb_frontend *fe); 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_ciint cxd2820r_get_tune_settings_c(struct dvb_frontend *fe, 928c2ecf20Sopenharmony_ci struct dvb_frontend_tune_settings *s); 938c2ecf20Sopenharmony_ci 948c2ecf20Sopenharmony_ci/* cxd2820r_t.c */ 958c2ecf20Sopenharmony_ci 968c2ecf20Sopenharmony_ciint cxd2820r_get_frontend_t(struct dvb_frontend *fe, 978c2ecf20Sopenharmony_ci struct dtv_frontend_properties *p); 988c2ecf20Sopenharmony_ci 998c2ecf20Sopenharmony_ciint cxd2820r_set_frontend_t(struct dvb_frontend *fe); 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ciint cxd2820r_read_status_t(struct dvb_frontend *fe, enum fe_status *status); 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_ciint cxd2820r_init_t(struct dvb_frontend *fe); 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ciint cxd2820r_sleep_t(struct dvb_frontend *fe); 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_ciint cxd2820r_get_tune_settings_t(struct dvb_frontend *fe, 1088c2ecf20Sopenharmony_ci struct dvb_frontend_tune_settings *s); 1098c2ecf20Sopenharmony_ci 1108c2ecf20Sopenharmony_ci/* cxd2820r_t2.c */ 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ciint cxd2820r_get_frontend_t2(struct dvb_frontend *fe, 1138c2ecf20Sopenharmony_ci struct dtv_frontend_properties *p); 1148c2ecf20Sopenharmony_ci 1158c2ecf20Sopenharmony_ciint cxd2820r_set_frontend_t2(struct dvb_frontend *fe); 1168c2ecf20Sopenharmony_ci 1178c2ecf20Sopenharmony_ciint cxd2820r_read_status_t2(struct dvb_frontend *fe, enum fe_status *status); 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_ciint cxd2820r_init_t2(struct dvb_frontend *fe); 1208c2ecf20Sopenharmony_ci 1218c2ecf20Sopenharmony_ciint cxd2820r_sleep_t2(struct dvb_frontend *fe); 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ciint cxd2820r_get_tune_settings_t2(struct dvb_frontend *fe, 1248c2ecf20Sopenharmony_ci struct dvb_frontend_tune_settings *s); 1258c2ecf20Sopenharmony_ci 1268c2ecf20Sopenharmony_ci#endif /* CXD2820R_PRIV_H */ 127