116216333SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 29a0bf528SMauro Carvalho Chehab /* 39a0bf528SMauro Carvalho Chehab * Sony CXD2820R demodulator driver 49a0bf528SMauro Carvalho Chehab * 59a0bf528SMauro Carvalho Chehab * Copyright (C) 2010 Antti Palosaari <crope@iki.fi> 69a0bf528SMauro Carvalho Chehab */ 79a0bf528SMauro Carvalho Chehab 89a0bf528SMauro Carvalho Chehab 99a0bf528SMauro Carvalho Chehab #ifndef CXD2820R_PRIV_H 109a0bf528SMauro Carvalho Chehab #define CXD2820R_PRIV_H 119a0bf528SMauro Carvalho Chehab 129a0bf528SMauro Carvalho Chehab #include <linux/dvb/version.h> 13fada1935SMauro Carvalho Chehab #include <media/dvb_frontend.h> 14*f97fa3dcSAndy Shevchenko #include <linux/int_log.h> 159a0bf528SMauro Carvalho Chehab #include "cxd2820r.h" 16d3bb03ecSLinus Walleij #include <linux/gpio/driver.h> /* For gpio_chip */ 172832fd31SAntti Palosaari #include <linux/math64.h> 1843e2ea63SAntti Palosaari #include <linux/regmap.h> 199a0bf528SMauro Carvalho Chehab 209a0bf528SMauro Carvalho Chehab struct reg_val_mask { 219a0bf528SMauro Carvalho Chehab u32 reg; 229a0bf528SMauro Carvalho Chehab u8 val; 239a0bf528SMauro Carvalho Chehab u8 mask; 249a0bf528SMauro Carvalho Chehab }; 259a0bf528SMauro Carvalho Chehab 26fcd09f65SAntti Palosaari #define CXD2820R_CLK 41000000 27fcd09f65SAntti Palosaari 289a0bf528SMauro Carvalho Chehab struct cxd2820r_priv { 2907fdf7d9SAntti Palosaari struct i2c_client *client[2]; 3043e2ea63SAntti Palosaari struct regmap *regmap[2]; 319a0bf528SMauro Carvalho Chehab struct i2c_adapter *i2c; 329a0bf528SMauro Carvalho Chehab struct dvb_frontend fe; 3307fdf7d9SAntti Palosaari u8 ts_mode; 3407fdf7d9SAntti Palosaari bool ts_clk_inv; 3507fdf7d9SAntti Palosaari bool if_agc_polarity; 3607fdf7d9SAntti Palosaari bool spec_inv; 3707fdf7d9SAntti Palosaari 384aa4fd86SAntti Palosaari u64 post_bit_error_prev_dvbv3; 392832fd31SAntti Palosaari u64 post_bit_error; 409a0bf528SMauro Carvalho Chehab 419a0bf528SMauro Carvalho Chehab bool ber_running; 429a0bf528SMauro Carvalho Chehab 431e8f31f3SAntti Palosaari #define GPIO_COUNT 3 441e8f31f3SAntti Palosaari u8 gpio[GPIO_COUNT]; 451e8f31f3SAntti Palosaari #ifdef CONFIG_GPIOLIB 461e8f31f3SAntti Palosaari struct gpio_chip gpio_chip; 471e8f31f3SAntti Palosaari #endif 489a0bf528SMauro Carvalho Chehab 490df289a2SMauro Carvalho Chehab enum fe_delivery_system delivery_system; 509a0bf528SMauro Carvalho Chehab bool last_tune_failed; /* for switch between T and T2 tune */ 519a0bf528SMauro Carvalho Chehab }; 529a0bf528SMauro Carvalho Chehab 539a0bf528SMauro Carvalho Chehab /* cxd2820r_core.c */ 549a0bf528SMauro Carvalho Chehab 551e8f31f3SAntti Palosaari int cxd2820r_gpio(struct dvb_frontend *fe, u8 *gpio); 569a0bf528SMauro Carvalho Chehab 5743e2ea63SAntti Palosaari int cxd2820r_wr_reg_val_mask_tab(struct cxd2820r_priv *priv, 5843e2ea63SAntti Palosaari const struct reg_val_mask *tab, int tab_len); 5943e2ea63SAntti Palosaari 609a0bf528SMauro Carvalho Chehab int cxd2820r_wr_reg_mask(struct cxd2820r_priv *priv, u32 reg, u8 val, 619a0bf528SMauro Carvalho Chehab u8 mask); 629a0bf528SMauro Carvalho Chehab 639a0bf528SMauro Carvalho Chehab int cxd2820r_wr_regs(struct cxd2820r_priv *priv, u32 reginfo, u8 *val, 649a0bf528SMauro Carvalho Chehab int len); 659a0bf528SMauro Carvalho Chehab 669a0bf528SMauro Carvalho Chehab int cxd2820r_wr_regs(struct cxd2820r_priv *priv, u32 reginfo, u8 *val, 679a0bf528SMauro Carvalho Chehab int len); 689a0bf528SMauro Carvalho Chehab 699a0bf528SMauro Carvalho Chehab int cxd2820r_rd_regs(struct cxd2820r_priv *priv, u32 reginfo, u8 *val, 709a0bf528SMauro Carvalho Chehab int len); 719a0bf528SMauro Carvalho Chehab 729a0bf528SMauro Carvalho Chehab int cxd2820r_wr_reg(struct cxd2820r_priv *priv, u32 reg, u8 val); 739a0bf528SMauro Carvalho Chehab 749a0bf528SMauro Carvalho Chehab int cxd2820r_rd_reg(struct cxd2820r_priv *priv, u32 reg, u8 *val); 759a0bf528SMauro Carvalho Chehab 769a0bf528SMauro Carvalho Chehab /* cxd2820r_c.c */ 779a0bf528SMauro Carvalho Chehab 787e3e68bcSMauro Carvalho Chehab int cxd2820r_get_frontend_c(struct dvb_frontend *fe, 797e3e68bcSMauro Carvalho Chehab struct dtv_frontend_properties *p); 809a0bf528SMauro Carvalho Chehab 819a0bf528SMauro Carvalho Chehab int cxd2820r_set_frontend_c(struct dvb_frontend *fe); 829a0bf528SMauro Carvalho Chehab 830df289a2SMauro Carvalho Chehab int cxd2820r_read_status_c(struct dvb_frontend *fe, enum fe_status *status); 849a0bf528SMauro Carvalho Chehab 859a0bf528SMauro Carvalho Chehab int cxd2820r_init_c(struct dvb_frontend *fe); 869a0bf528SMauro Carvalho Chehab 879a0bf528SMauro Carvalho Chehab int cxd2820r_sleep_c(struct dvb_frontend *fe); 889a0bf528SMauro Carvalho Chehab 899a0bf528SMauro Carvalho Chehab int cxd2820r_get_tune_settings_c(struct dvb_frontend *fe, 909a0bf528SMauro Carvalho Chehab struct dvb_frontend_tune_settings *s); 919a0bf528SMauro Carvalho Chehab 929a0bf528SMauro Carvalho Chehab /* cxd2820r_t.c */ 939a0bf528SMauro Carvalho Chehab 947e3e68bcSMauro Carvalho Chehab int cxd2820r_get_frontend_t(struct dvb_frontend *fe, 957e3e68bcSMauro Carvalho Chehab struct dtv_frontend_properties *p); 969a0bf528SMauro Carvalho Chehab 979a0bf528SMauro Carvalho Chehab int cxd2820r_set_frontend_t(struct dvb_frontend *fe); 989a0bf528SMauro Carvalho Chehab 990df289a2SMauro Carvalho Chehab int cxd2820r_read_status_t(struct dvb_frontend *fe, enum fe_status *status); 1009a0bf528SMauro Carvalho Chehab 1019a0bf528SMauro Carvalho Chehab int cxd2820r_init_t(struct dvb_frontend *fe); 1029a0bf528SMauro Carvalho Chehab 1039a0bf528SMauro Carvalho Chehab int cxd2820r_sleep_t(struct dvb_frontend *fe); 1049a0bf528SMauro Carvalho Chehab 1059a0bf528SMauro Carvalho Chehab int cxd2820r_get_tune_settings_t(struct dvb_frontend *fe, 1069a0bf528SMauro Carvalho Chehab struct dvb_frontend_tune_settings *s); 1079a0bf528SMauro Carvalho Chehab 1089a0bf528SMauro Carvalho Chehab /* cxd2820r_t2.c */ 1099a0bf528SMauro Carvalho Chehab 1107e3e68bcSMauro Carvalho Chehab int cxd2820r_get_frontend_t2(struct dvb_frontend *fe, 1117e3e68bcSMauro Carvalho Chehab struct dtv_frontend_properties *p); 1129a0bf528SMauro Carvalho Chehab 1139a0bf528SMauro Carvalho Chehab int cxd2820r_set_frontend_t2(struct dvb_frontend *fe); 1149a0bf528SMauro Carvalho Chehab 1150df289a2SMauro Carvalho Chehab int cxd2820r_read_status_t2(struct dvb_frontend *fe, enum fe_status *status); 1169a0bf528SMauro Carvalho Chehab 1179a0bf528SMauro Carvalho Chehab int cxd2820r_init_t2(struct dvb_frontend *fe); 1189a0bf528SMauro Carvalho Chehab 1199a0bf528SMauro Carvalho Chehab int cxd2820r_sleep_t2(struct dvb_frontend *fe); 1209a0bf528SMauro Carvalho Chehab 1219a0bf528SMauro Carvalho Chehab int cxd2820r_get_tune_settings_t2(struct dvb_frontend *fe, 1229a0bf528SMauro Carvalho Chehab struct dvb_frontend_tune_settings *s); 1239a0bf528SMauro Carvalho Chehab 1249a0bf528SMauro Carvalho Chehab #endif /* CXD2820R_PRIV_H */ 125