Linux Audio

Check our new training course

Loading...
  1/* SPDX-License-Identifier: GPL-2.0-or-later */
  2/*
  3 * Sony CXD2820R demodulator driver
  4 *
  5 * Copyright (C) 2010 Antti Palosaari <crope@iki.fi>
  6 */
  7
  8
  9#ifndef CXD2820R_PRIV_H
 10#define CXD2820R_PRIV_H
 11
 12#include <linux/dvb/version.h>
 13#include <media/dvb_frontend.h>
 14#include <linux/int_log.h>
 15#include "cxd2820r.h"
 16#include <linux/gpio/driver.h> /* For gpio_chip */
 17#include <linux/math64.h>
 18#include <linux/regmap.h>
 19
 20struct reg_val_mask {
 21	u32 reg;
 22	u8  val;
 23	u8  mask;
 24};
 25
 26#define CXD2820R_CLK 41000000
 27
 28struct cxd2820r_priv {
 29	struct i2c_client *client[2];
 30	struct regmap *regmap[2];
 31	struct i2c_adapter *i2c;
 32	struct dvb_frontend fe;
 33	u8 ts_mode;
 34	bool ts_clk_inv;
 35	bool if_agc_polarity;
 36	bool spec_inv;
 37
 38	u64 post_bit_error_prev_dvbv3;
 39	u64 post_bit_error;
 40
 41	bool ber_running;
 42
 43#define GPIO_COUNT 3
 44	u8 gpio[GPIO_COUNT];
 45#ifdef CONFIG_GPIOLIB
 46	struct gpio_chip gpio_chip;
 47#endif
 48
 49	enum fe_delivery_system delivery_system;
 50	bool last_tune_failed; /* for switch between T and T2 tune */
 51};
 52
 53/* cxd2820r_core.c */
 54
 55int cxd2820r_gpio(struct dvb_frontend *fe, u8 *gpio);
 56
 57int cxd2820r_wr_reg_val_mask_tab(struct cxd2820r_priv *priv,
 58				 const struct reg_val_mask *tab, int tab_len);
 59
 60int cxd2820r_wr_reg_mask(struct cxd2820r_priv *priv, u32 reg, u8 val,
 61	u8 mask);
 62
 63int cxd2820r_wr_regs(struct cxd2820r_priv *priv, u32 reginfo, u8 *val,
 64	int len);
 65
 66int cxd2820r_wr_regs(struct cxd2820r_priv *priv, u32 reginfo, u8 *val,
 67	int len);
 68
 69int cxd2820r_rd_regs(struct cxd2820r_priv *priv, u32 reginfo, u8 *val,
 70	int len);
 71
 72int cxd2820r_wr_reg(struct cxd2820r_priv *priv, u32 reg, u8 val);
 73
 74int cxd2820r_rd_reg(struct cxd2820r_priv *priv, u32 reg, u8 *val);
 75
 76/* cxd2820r_c.c */
 77
 78int cxd2820r_get_frontend_c(struct dvb_frontend *fe,
 79			    struct dtv_frontend_properties *p);
 80
 81int cxd2820r_set_frontend_c(struct dvb_frontend *fe);
 82
 83int cxd2820r_read_status_c(struct dvb_frontend *fe, enum fe_status *status);
 84
 85int cxd2820r_init_c(struct dvb_frontend *fe);
 86
 87int cxd2820r_sleep_c(struct dvb_frontend *fe);
 88
 89int cxd2820r_get_tune_settings_c(struct dvb_frontend *fe,
 90	struct dvb_frontend_tune_settings *s);
 91
 92/* cxd2820r_t.c */
 93
 94int cxd2820r_get_frontend_t(struct dvb_frontend *fe,
 95			    struct dtv_frontend_properties *p);
 96
 97int cxd2820r_set_frontend_t(struct dvb_frontend *fe);
 98
 99int cxd2820r_read_status_t(struct dvb_frontend *fe, enum fe_status *status);
100
101int cxd2820r_init_t(struct dvb_frontend *fe);
102
103int cxd2820r_sleep_t(struct dvb_frontend *fe);
104
105int cxd2820r_get_tune_settings_t(struct dvb_frontend *fe,
106	struct dvb_frontend_tune_settings *s);
107
108/* cxd2820r_t2.c */
109
110int cxd2820r_get_frontend_t2(struct dvb_frontend *fe,
111			     struct dtv_frontend_properties *p);
112
113int cxd2820r_set_frontend_t2(struct dvb_frontend *fe);
114
115int cxd2820r_read_status_t2(struct dvb_frontend *fe, enum fe_status *status);
116
117int cxd2820r_init_t2(struct dvb_frontend *fe);
118
119int cxd2820r_sleep_t2(struct dvb_frontend *fe);
120
121int cxd2820r_get_tune_settings_t2(struct dvb_frontend *fe,
122	struct dvb_frontend_tune_settings *s);
123
124#endif /* CXD2820R_PRIV_H */