File Index
Files and directories
Sign in
FILE

ddbridge-dummy-fe.c

File preview with syntax highlighting.

linux-6.19.14/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c C
  1// SPDX-License-Identifier: GPL-2.0-or-later
  2/*
  3 *  Driver for Dummy Frontend
  4 *
  5 *  Written by Emard <emard@softhome.net>
  6 */
  7
  8#include <linux/module.h>
  9#include <linux/init.h>
 10#include <linux/string.h>
 11#include <linux/slab.h>
 12
 13#include <media/dvb_frontend.h>
 14#include "ddbridge-dummy-fe.h"
 15
 16struct ddbridge_dummy_fe_state {
 17	struct dvb_frontend frontend;
 18};
 19
 20static int ddbridge_dummy_fe_read_status(struct dvb_frontend *fe,
 21				    enum fe_status *status)
 22{
 23	*status = FE_HAS_SIGNAL
 24		| FE_HAS_CARRIER
 25		| FE_HAS_VITERBI
 26		| FE_HAS_SYNC
 27		| FE_HAS_LOCK;
 28
 29	return 0;
 30}
 31
 32static int ddbridge_dummy_fe_read_ber(struct dvb_frontend *fe, u32 *ber)
 33{
 34	*ber = 0;
 35	return 0;
 36}
 37
 38static int ddbridge_dummy_fe_read_signal_strength(struct dvb_frontend *fe,
 39					     u16 *strength)
 40{
 41	*strength = 0;
 42	return 0;
 43}
 44
 45static int ddbridge_dummy_fe_read_snr(struct dvb_frontend *fe, u16 *snr)
 46{
 47	*snr = 0;
 48	return 0;
 49}
 50
 51static int ddbridge_dummy_fe_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
 52{
 53	*ucblocks = 0;
 54	return 0;
 55}
 56
 57/*
 58 * Should only be implemented if it actually reads something from the hardware.
 59 * Also, it should check for the locks, in order to avoid report wrong data
 60 * to userspace.
 61 */
 62static int ddbridge_dummy_fe_get_frontend(struct dvb_frontend *fe,
 63				     struct dtv_frontend_properties *p)
 64{
 65	return 0;
 66}
 67
 68static int ddbridge_dummy_fe_set_frontend(struct dvb_frontend *fe)
 69{
 70	if (fe->ops.tuner_ops.set_params) {
 71		fe->ops.tuner_ops.set_params(fe);
 72		if (fe->ops.i2c_gate_ctrl)
 73			fe->ops.i2c_gate_ctrl(fe, 0);
 74	}
 75
 76	return 0;
 77}
 78
 79static int ddbridge_dummy_fe_sleep(struct dvb_frontend *fe)
 80{
 81	return 0;
 82}
 83
 84static int ddbridge_dummy_fe_init(struct dvb_frontend *fe)
 85{
 86	return 0;
 87}
 88
 89static void ddbridge_dummy_fe_release(struct dvb_frontend *fe)
 90{
 91	struct ddbridge_dummy_fe_state *state = fe->demodulator_priv;
 92
 93	kfree(state);
 94}
 95
 96static const struct dvb_frontend_ops ddbridge_dummy_fe_qam_ops;
 97
 98struct dvb_frontend *ddbridge_dummy_fe_qam_attach(void)
 99{
100	struct ddbridge_dummy_fe_state *state = NULL;
101
102	/* allocate memory for the internal state */
103	state = kzalloc(sizeof(struct ddbridge_dummy_fe_state), GFP_KERNEL);
104	if (!state)
105		return NULL;
106
107	/* create dvb_frontend */
108	memcpy(&state->frontend.ops,
109	       &ddbridge_dummy_fe_qam_ops,
110	       sizeof(struct dvb_frontend_ops));
111
112	state->frontend.demodulator_priv = state;
113	return &state->frontend;
114}
115EXPORT_SYMBOL_GPL(ddbridge_dummy_fe_qam_attach);
116
117static const struct dvb_frontend_ops ddbridge_dummy_fe_qam_ops = {
118	.delsys = { SYS_DVBC_ANNEX_A },
119	.info = {
120		.name			= "ddbridge dummy DVB-C",
121		.frequency_min_hz	=  51 * MHz,
122		.frequency_max_hz	= 858 * MHz,
123		.frequency_stepsize_hz	= 62500,
124		/* symbol_rate_min: SACLK/64 == (XIN/2)/64 */
125		.symbol_rate_min	= (57840000 / 2) / 64,
126		.symbol_rate_max	= (57840000 / 2) / 4,   /* SACLK/4 */
127		.caps = FE_CAN_QAM_16 |
128			FE_CAN_QAM_32 |
129			FE_CAN_QAM_64 |
130			FE_CAN_QAM_128 |
131			FE_CAN_QAM_256 |
132			FE_CAN_FEC_AUTO |
133			FE_CAN_INVERSION_AUTO
134	},
135
136	.release = ddbridge_dummy_fe_release,
137
138	.init = ddbridge_dummy_fe_init,
139	.sleep = ddbridge_dummy_fe_sleep,
140
141	.set_frontend = ddbridge_dummy_fe_set_frontend,
142	.get_frontend = ddbridge_dummy_fe_get_frontend,
143
144	.read_status = ddbridge_dummy_fe_read_status,
145	.read_ber = ddbridge_dummy_fe_read_ber,
146	.read_signal_strength = ddbridge_dummy_fe_read_signal_strength,
147	.read_snr = ddbridge_dummy_fe_read_snr,
148	.read_ucblocks = ddbridge_dummy_fe_read_ucblocks,
149};
150
151MODULE_DESCRIPTION("ddbridge dummy Frontend");
152MODULE_AUTHOR("Emard");
153MODULE_LICENSE("GPL");
~/ Read-only file preview.