All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
To: Linux Media Mailing List <linux-media@vger.kernel.org>
Cc: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Subject: [PATCH v4 10/33] media: ddbridge: copy the dvb_dummy_fe driver to ddbridge
Date: Tue, 31 Mar 2020 13:11:46 +0200	[thread overview]
Message-ID: <ba952f536445a6ac3ab243bc9689d0625f95a0fa.1585651678.git.mchehab+huawei@kernel.org> (raw)
In-Reply-To: <cover.1585651678.git.mchehab+huawei@kernel.org>

As we'll be transforming the dvb-dummy-fe driver soon into a
virtual driver, let's first copy the existing one to ddbridge
as-is, as it is needed there.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
---
 .../media/pci/ddbridge/ddbridge-dummy-fe.c    | 286 ++++++++++++++++++
 .../media/pci/ddbridge/ddbridge-dummy-fe.h    |  36 +++
 2 files changed, 322 insertions(+)
 create mode 100644 drivers/media/pci/ddbridge/ddbridge-dummy-fe.c
 create mode 100644 drivers/media/pci/ddbridge/ddbridge-dummy-fe.h

diff --git a/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c
new file mode 100644
index 000000000000..9ff1ebaa5e04
--- /dev/null
+++ b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c
@@ -0,0 +1,286 @@
+// 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 "dvb_dummy_fe.h"
+
+
+struct dvb_dummy_fe_state {
+	struct dvb_frontend frontend;
+};
+
+
+static int dvb_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 dvb_dummy_fe_read_ber(struct dvb_frontend *fe, u32 *ber)
+{
+	*ber = 0;
+	return 0;
+}
+
+static int dvb_dummy_fe_read_signal_strength(struct dvb_frontend *fe,
+					     u16 *strength)
+{
+	*strength = 0;
+	return 0;
+}
+
+static int dvb_dummy_fe_read_snr(struct dvb_frontend *fe, u16 *snr)
+{
+	*snr = 0;
+	return 0;
+}
+
+static int dvb_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 dvb_dummy_fe_get_frontend(struct dvb_frontend *fe,
+				     struct dtv_frontend_properties *p)
+{
+	return 0;
+}
+
+static int dvb_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 dvb_dummy_fe_sleep(struct dvb_frontend *fe)
+{
+	return 0;
+}
+
+static int dvb_dummy_fe_init(struct dvb_frontend *fe)
+{
+	return 0;
+}
+
+static int dvb_dummy_fe_set_tone(struct dvb_frontend *fe,
+				 enum fe_sec_tone_mode tone)
+{
+	return 0;
+}
+
+static int dvb_dummy_fe_set_voltage(struct dvb_frontend *fe,
+				    enum fe_sec_voltage voltage)
+{
+	return 0;
+}
+
+static void dvb_dummy_fe_release(struct dvb_frontend *fe)
+{
+	struct dvb_dummy_fe_state *state = fe->demodulator_priv;
+
+	kfree(state);
+}
+
+static const struct dvb_frontend_ops dvb_dummy_fe_ofdm_ops;
+
+struct dvb_frontend *dvb_dummy_fe_ofdm_attach(void)
+{
+	struct dvb_dummy_fe_state *state = NULL;
+
+	/* allocate memory for the internal state */
+	state = kzalloc(sizeof(struct dvb_dummy_fe_state), GFP_KERNEL);
+	if (!state)
+		return NULL;
+
+	/* create dvb_frontend */
+	memcpy(&state->frontend.ops,
+	       &dvb_dummy_fe_ofdm_ops,
+	       sizeof(struct dvb_frontend_ops));
+
+	state->frontend.demodulator_priv = state;
+	return &state->frontend;
+}
+EXPORT_SYMBOL(dvb_dummy_fe_ofdm_attach);
+
+static const struct dvb_frontend_ops dvb_dummy_fe_qpsk_ops;
+
+struct dvb_frontend *dvb_dummy_fe_qpsk_attach(void)
+{
+	struct dvb_dummy_fe_state *state = NULL;
+
+	/* allocate memory for the internal state */
+	state = kzalloc(sizeof(struct dvb_dummy_fe_state), GFP_KERNEL);
+	if (!state)
+		return NULL;
+
+	/* create dvb_frontend */
+	memcpy(&state->frontend.ops,
+	       &dvb_dummy_fe_qpsk_ops,
+	       sizeof(struct dvb_frontend_ops));
+
+	state->frontend.demodulator_priv = state;
+	return &state->frontend;
+}
+EXPORT_SYMBOL(dvb_dummy_fe_qpsk_attach);
+
+static const struct dvb_frontend_ops dvb_dummy_fe_qam_ops;
+
+struct dvb_frontend *dvb_dummy_fe_qam_attach(void)
+{
+	struct dvb_dummy_fe_state *state = NULL;
+
+	/* allocate memory for the internal state */
+	state = kzalloc(sizeof(struct dvb_dummy_fe_state), GFP_KERNEL);
+	if (!state)
+		return NULL;
+
+	/* create dvb_frontend */
+	memcpy(&state->frontend.ops,
+	       &dvb_dummy_fe_qam_ops,
+	       sizeof(struct dvb_frontend_ops));
+
+	state->frontend.demodulator_priv = state;
+	return &state->frontend;
+}
+EXPORT_SYMBOL(dvb_dummy_fe_qam_attach);
+
+static const struct dvb_frontend_ops dvb_dummy_fe_ofdm_ops = {
+	.delsys = { SYS_DVBT },
+	.info = {
+		.name			= "Dummy DVB-T",
+		.frequency_min_hz	= 0,
+		.frequency_max_hz	= 863250 * kHz,
+		.frequency_stepsize_hz	= 62500,
+		.caps = FE_CAN_FEC_1_2 |
+			FE_CAN_FEC_2_3 |
+			FE_CAN_FEC_3_4 |
+			FE_CAN_FEC_4_5 |
+			FE_CAN_FEC_5_6 |
+			FE_CAN_FEC_6_7 |
+			FE_CAN_FEC_7_8 |
+			FE_CAN_FEC_8_9 |
+			FE_CAN_FEC_AUTO |
+			FE_CAN_QAM_16 |
+			FE_CAN_QAM_64 |
+			FE_CAN_QAM_AUTO |
+			FE_CAN_TRANSMISSION_MODE_AUTO |
+			FE_CAN_GUARD_INTERVAL_AUTO |
+			FE_CAN_HIERARCHY_AUTO,
+	},
+
+	.release = dvb_dummy_fe_release,
+
+	.init = dvb_dummy_fe_init,
+	.sleep = dvb_dummy_fe_sleep,
+
+	.set_frontend = dvb_dummy_fe_set_frontend,
+	.get_frontend = dvb_dummy_fe_get_frontend,
+
+	.read_status = dvb_dummy_fe_read_status,
+	.read_ber = dvb_dummy_fe_read_ber,
+	.read_signal_strength = dvb_dummy_fe_read_signal_strength,
+	.read_snr = dvb_dummy_fe_read_snr,
+	.read_ucblocks = dvb_dummy_fe_read_ucblocks,
+};
+
+static const struct dvb_frontend_ops dvb_dummy_fe_qam_ops = {
+	.delsys = { SYS_DVBC_ANNEX_A },
+	.info = {
+		.name			= "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 = dvb_dummy_fe_release,
+
+	.init = dvb_dummy_fe_init,
+	.sleep = dvb_dummy_fe_sleep,
+
+	.set_frontend = dvb_dummy_fe_set_frontend,
+	.get_frontend = dvb_dummy_fe_get_frontend,
+
+	.read_status = dvb_dummy_fe_read_status,
+	.read_ber = dvb_dummy_fe_read_ber,
+	.read_signal_strength = dvb_dummy_fe_read_signal_strength,
+	.read_snr = dvb_dummy_fe_read_snr,
+	.read_ucblocks = dvb_dummy_fe_read_ucblocks,
+};
+
+static const struct dvb_frontend_ops dvb_dummy_fe_qpsk_ops = {
+	.delsys = { SYS_DVBS },
+	.info = {
+		.name			= "Dummy DVB-S",
+		.frequency_min_hz	=  950 * MHz,
+		.frequency_max_hz	= 2150 * MHz,
+		.frequency_stepsize_hz	= 250 * kHz,
+		.frequency_tolerance_hz	= 29500 * kHz,
+		.symbol_rate_min	= 1000000,
+		.symbol_rate_max	= 45000000,
+		.caps = FE_CAN_INVERSION_AUTO |
+			FE_CAN_FEC_1_2 |
+			FE_CAN_FEC_2_3 |
+			FE_CAN_FEC_3_4 |
+			FE_CAN_FEC_5_6 |
+			FE_CAN_FEC_7_8 |
+			FE_CAN_FEC_AUTO |
+			FE_CAN_QPSK
+	},
+
+	.release = dvb_dummy_fe_release,
+
+	.init = dvb_dummy_fe_init,
+	.sleep = dvb_dummy_fe_sleep,
+
+	.set_frontend = dvb_dummy_fe_set_frontend,
+	.get_frontend = dvb_dummy_fe_get_frontend,
+
+	.read_status = dvb_dummy_fe_read_status,
+	.read_ber = dvb_dummy_fe_read_ber,
+	.read_signal_strength = dvb_dummy_fe_read_signal_strength,
+	.read_snr = dvb_dummy_fe_read_snr,
+	.read_ucblocks = dvb_dummy_fe_read_ucblocks,
+
+	.set_voltage = dvb_dummy_fe_set_voltage,
+	.set_tone = dvb_dummy_fe_set_tone,
+};
+
+MODULE_DESCRIPTION("DVB DUMMY Frontend");
+MODULE_AUTHOR("Emard");
+MODULE_LICENSE("GPL");
diff --git a/drivers/media/pci/ddbridge/ddbridge-dummy-fe.h b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.h
new file mode 100644
index 000000000000..463abf5ebd56
--- /dev/null
+++ b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.h
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ *  Driver for Dummy Frontend
+ *
+ *  Written by Emard <emard@softhome.net>
+ */
+
+#ifndef DVB_DUMMY_FE_H
+#define DVB_DUMMY_FE_H
+
+#include <linux/dvb/frontend.h>
+#include <media/dvb_frontend.h>
+
+#if IS_REACHABLE(CONFIG_DVB_DUMMY_FE)
+struct dvb_frontend *dvb_dummy_fe_ofdm_attach(void);
+struct dvb_frontend *dvb_dummy_fe_qpsk_attach(void);
+struct dvb_frontend *dvb_dummy_fe_qam_attach(void);
+#else
+static inline struct dvb_frontend *dvb_dummy_fe_ofdm_attach(void)
+{
+	pr_warn("%s: driver disabled by Kconfig\n", __func__);
+	return NULL;
+}
+static inline struct dvb_frontend *dvb_dummy_fe_qpsk_attach(void)
+{
+	pr_warn("%s: driver disabled by Kconfig\n", __func__);
+	return NULL;
+}
+static inline struct dvb_frontend *dvb_dummy_fe_qam_attach(void)
+{
+	pr_warn("%s: driver disabled by Kconfig\n", __func__);
+	return NULL;
+}
+#endif /* CONFIG_DVB_DUMMY_FE */
+
+#endif // DVB_DUMMY_FE_H
-- 
2.25.1


  parent reply	other threads:[~2020-03-31 11:12 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-31 11:11 [PATCH v4 00/33] Media Kconfig menu reorg and improvements Mauro Carvalho Chehab
2020-03-31 11:11 ` Mauro Carvalho Chehab
2020-03-31 11:11 ` Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 01/33] media: dvb-usb: auto-select CYPRESS_FIRMWARE Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 02/33] media: Kconfig: add an option to filter in/out platform drivers Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 03/33] media: Kconfig: not all V4L2 platform drivers are for camera Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 04/33] media: pci: move VIDEO_PCI_SKELETON to a different Kconfig Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 05/33] media: Kconfig: update the MEDIA_SUPPORT help message Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 06/33] media: split test drivers from platform directory Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 07/33] media: Kconfig: move comment to siano include Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 08/33] media: Kconfig: move drivers-specific TTPCI_EEPROM Kconfig var Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 09/33] media: Kconfig: mode firewire comment to firewire/Kconfig Mauro Carvalho Chehab
2020-03-31 11:11 ` Mauro Carvalho Chehab [this message]
2020-03-31 11:11 ` [PATCH v4 11/33] media: ddbridge-dummy_fe: do some vars and function renames Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 12/33] media: ddbridge: use the ddbridge's own dummy fe driver Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 13/33] media: Kconfig: mark other drivers as test drivers Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 14/33] media: Kconfig: simplify some dependencies Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 15/33] media: Kconfig: better support hybrid TV devices Mauro Carvalho Chehab
2020-04-01  3:20   ` kbuild test robot
2020-04-01  3:20     ` kbuild test robot
2020-03-31 11:11 ` [PATCH v4 16/33] media: Kconfig: fix selection for test drivers Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 17/33] media: add SPDX headers on Kconfig and Makefile files Mauro Carvalho Chehab
2020-03-31 11:11   ` Mauro Carvalho Chehab
2020-03-31 11:11   ` Mauro Carvalho Chehab
2020-03-31 11:11   ` Mauro Carvalho Chehab
2020-03-31 12:06   ` Laurent Pinchart
2020-03-31 12:06     ` Laurent Pinchart
2020-03-31 12:06     ` Laurent Pinchart
2020-03-31 12:22     ` Greg Kroah-Hartman
2020-03-31 12:22       ` Greg Kroah-Hartman
2020-03-31 12:22       ` Greg Kroah-Hartman
2020-03-31 12:39       ` Laurent Pinchart
2020-03-31 12:39         ` Laurent Pinchart
2020-03-31 12:39         ` Laurent Pinchart
2020-03-31 12:47         ` Greg Kroah-Hartman
2020-03-31 12:47           ` Greg Kroah-Hartman
2020-03-31 12:47           ` Greg Kroah-Hartman
2020-03-31 12:52           ` Laurent Pinchart
2020-03-31 12:52             ` Laurent Pinchart
2020-03-31 12:52             ` Laurent Pinchart
2020-03-31 15:49     ` SPDX headers - Was: " Mauro Carvalho Chehab
2020-03-31 15:49       ` Mauro Carvalho Chehab
2020-03-31 15:49       ` Mauro Carvalho Chehab
2020-03-31 15:49       ` Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 18/33] media: dvb-core: Kconfig: default to use dynamic minors Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 19/33] media: Kconfig files: use select for V4L2 subdevs and MC Mauro Carvalho Chehab
2020-03-31 11:11   ` Mauro Carvalho Chehab
2020-03-31 11:11   ` Mauro Carvalho Chehab
2020-03-31 11:11   ` Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 20/33] media: Kconfig: reorganize the drivers menu options Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 21/33] media: Kconfig: use a sub-menu to select supported devices Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 22/33] media: Kconfig: make filtering devices optional Mauro Carvalho Chehab
2020-03-31 11:11 ` [PATCH v4 23/33] media: Kconfig: warn if drivers are filtered Mauro Carvalho Chehab
2020-03-31 11:12 ` [PATCH v4 24/33] media: Kconfig: move CEC-specific options to cec/Kconfig Mauro Carvalho Chehab
2020-03-31 11:12 ` [PATCH v4 25/33] media: Kconfig: move DVB-specific options to dvb-core/Kconfig Mauro Carvalho Chehab
2020-03-31 11:12 ` [PATCH v4 26/33] media: Kconfig: move V4L2 subdev API to v4l2-core/Kconfig Mauro Carvalho Chehab
2020-03-31 11:12 ` [PATCH v4 27/33] media: Kconfig: move media controller core select to main Kconfig Mauro Carvalho Chehab
2020-03-31 11:12 ` [PATCH v4 28/33] media: Kconfig: place all options under a sub-menu Mauro Carvalho Chehab
2020-03-31 11:12 ` [PATCH v4 29/33] media: Kconfig: move the position of sub-driver autoselection Mauro Carvalho Chehab
2020-03-31 11:12 ` [PATCH v4 30/33] media: Kconfig: on !EMBEDDED && !EXPERT, enable driver filtering Mauro Carvalho Chehab
2020-03-31 11:12 ` [PATCH v4 31/33] media: Kconfig: Better organize the per-API options Mauro Carvalho Chehab
2020-03-31 11:12 ` [PATCH v4 32/33] media: i2c/Kconfig: reorganize items there Mauro Carvalho Chehab
2020-03-31 11:12 ` [PATCH v4 33/33] media: Kconfig: don't use visible for device type select Mauro Carvalho Chehab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ba952f536445a6ac3ab243bc9689d0625f95a0fa.1585651678.git.mchehab+huawei@kernel.org \
    --to=mchehab+huawei@kernel.org \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.