mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-04 17:44:14 +08:00
9a33a27e7f
Cleanup the ddbridge's dummy driver by removing the parts that aren't needed by ddbridge, adding it to the building system and changing the binding at the driver to use the newer function name. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
154 lines
3.4 KiB
C
154 lines
3.4 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* Driver for Dummy Frontend
|
|
*
|
|
* Written by Emard <emard@softhome.net>
|
|
*/
|
|
|
|
#include <linux/module.h>
|
|
#include <linux/init.h>
|
|
#include <linux/string.h>
|
|
#include <linux/slab.h>
|
|
|
|
#include <media/dvb_frontend.h>
|
|
#include "ddbridge-dummy-fe.h"
|
|
|
|
struct ddbridge_dummy_fe_state {
|
|
struct dvb_frontend frontend;
|
|
};
|
|
|
|
static int ddbridge_dummy_fe_read_status(struct dvb_frontend *fe,
|
|
enum fe_status *status)
|
|
{
|
|
*status = FE_HAS_SIGNAL
|
|
| FE_HAS_CARRIER
|
|
| FE_HAS_VITERBI
|
|
| FE_HAS_SYNC
|
|
| FE_HAS_LOCK;
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int ddbridge_dummy_fe_read_ber(struct dvb_frontend *fe, u32 *ber)
|
|
{
|
|
*ber = 0;
|
|
return 0;
|
|
}
|
|
|
|
static int ddbridge_dummy_fe_read_signal_strength(struct dvb_frontend *fe,
|
|
u16 *strength)
|
|
{
|
|
*strength = 0;
|
|
return 0;
|
|
}
|
|
|
|
static int ddbridge_dummy_fe_read_snr(struct dvb_frontend *fe, u16 *snr)
|
|
{
|
|
*snr = 0;
|
|
return 0;
|
|
}
|
|
|
|
static int ddbridge_dummy_fe_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks)
|
|
{
|
|
*ucblocks = 0;
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
* Should only be implemented if it actually reads something from the hardware.
|
|
* Also, it should check for the locks, in order to avoid report wrong data
|
|
* to userspace.
|
|
*/
|
|
static int ddbridge_dummy_fe_get_frontend(struct dvb_frontend *fe,
|
|
struct dtv_frontend_properties *p)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int ddbridge_dummy_fe_set_frontend(struct dvb_frontend *fe)
|
|
{
|
|
if (fe->ops.tuner_ops.set_params) {
|
|
fe->ops.tuner_ops.set_params(fe);
|
|
if (fe->ops.i2c_gate_ctrl)
|
|
fe->ops.i2c_gate_ctrl(fe, 0);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int ddbridge_dummy_fe_sleep(struct dvb_frontend *fe)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static int ddbridge_dummy_fe_init(struct dvb_frontend *fe)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static void ddbridge_dummy_fe_release(struct dvb_frontend *fe)
|
|
{
|
|
struct ddbridge_dummy_fe_state *state = fe->demodulator_priv;
|
|
|
|
kfree(state);
|
|
}
|
|
|
|
static const struct dvb_frontend_ops ddbridge_dummy_fe_qam_ops;
|
|
|
|
struct dvb_frontend *ddbridge_dummy_fe_qam_attach(void)
|
|
{
|
|
struct ddbridge_dummy_fe_state *state = NULL;
|
|
|
|
/* allocate memory for the internal state */
|
|
state = kzalloc(sizeof(struct ddbridge_dummy_fe_state), GFP_KERNEL);
|
|
if (!state)
|
|
return NULL;
|
|
|
|
/* create dvb_frontend */
|
|
memcpy(&state->frontend.ops,
|
|
&ddbridge_dummy_fe_qam_ops,
|
|
sizeof(struct dvb_frontend_ops));
|
|
|
|
state->frontend.demodulator_priv = state;
|
|
return &state->frontend;
|
|
}
|
|
EXPORT_SYMBOL(ddbridge_dummy_fe_qam_attach);
|
|
|
|
static const struct dvb_frontend_ops ddbridge_dummy_fe_qam_ops = {
|
|
.delsys = { SYS_DVBC_ANNEX_A },
|
|
.info = {
|
|
.name = "ddbridge dummy DVB-C",
|
|
.frequency_min_hz = 51 * MHz,
|
|
.frequency_max_hz = 858 * MHz,
|
|
.frequency_stepsize_hz = 62500,
|
|
/* symbol_rate_min: SACLK/64 == (XIN/2)/64 */
|
|
.symbol_rate_min = (57840000 / 2) / 64,
|
|
.symbol_rate_max = (57840000 / 2) / 4, /* SACLK/4 */
|
|
.caps = FE_CAN_QAM_16 |
|
|
FE_CAN_QAM_32 |
|
|
FE_CAN_QAM_64 |
|
|
FE_CAN_QAM_128 |
|
|
FE_CAN_QAM_256 |
|
|
FE_CAN_FEC_AUTO |
|
|
FE_CAN_INVERSION_AUTO
|
|
},
|
|
|
|
.release = ddbridge_dummy_fe_release,
|
|
|
|
.init = ddbridge_dummy_fe_init,
|
|
.sleep = ddbridge_dummy_fe_sleep,
|
|
|
|
.set_frontend = ddbridge_dummy_fe_set_frontend,
|
|
.get_frontend = ddbridge_dummy_fe_get_frontend,
|
|
|
|
.read_status = ddbridge_dummy_fe_read_status,
|
|
.read_ber = ddbridge_dummy_fe_read_ber,
|
|
.read_signal_strength = ddbridge_dummy_fe_read_signal_strength,
|
|
.read_snr = ddbridge_dummy_fe_read_snr,
|
|
.read_ucblocks = ddbridge_dummy_fe_read_ucblocks,
|
|
};
|
|
|
|
MODULE_DESCRIPTION("ddbridge dummy Frontend");
|
|
MODULE_AUTHOR("Emard");
|
|
MODULE_LICENSE("GPL");
|