From f11175daffad2c53e6e3ea020d0a6c3839a2fba7 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Tue, 24 Mar 2020 10:05:18 +0100 Subject: media: pci: move VIDEO_PCI_SKELETON to a different Kconfig The V4L2 PCI skeleton is not part of the V4L2 core. Move it to appear together with the other PCI drivers, at the end, as this is something that normal users don't even need to bother. Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/Kconfig | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'drivers/media/pci') diff --git a/drivers/media/pci/Kconfig b/drivers/media/pci/Kconfig index dcb3719f440e..9336f8446cf0 100644 --- a/drivers/media/pci/Kconfig +++ b/drivers/media/pci/Kconfig @@ -56,5 +56,15 @@ endif source "drivers/media/pci/intel/ipu3/Kconfig" +config VIDEO_PCI_SKELETON + tristate "Skeleton PCI V4L2 driver" + depends on PCI + depends on SAMPLES + depends on VIDEO_V4L2 && VIDEOBUF2_CORE + depends on VIDEOBUF2_MEMOPS && VIDEOBUF2_DMA_CONTIG + help + Enable build of the skeleton PCI driver, used as a reference + when developing new drivers. + endif #MEDIA_PCI_SUPPORT endif #PCI -- cgit v1.2.3 From 3a137f81f76850b3cc024360147b1c3fb4b12c03 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Thu, 26 Mar 2020 15:06:02 +0100 Subject: media: ddbridge: copy the dvb_dummy_fe driver to ddbridge 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 --- drivers/media/pci/ddbridge/ddbridge-dummy-fe.c | 286 +++++++++++++++++++++++++ drivers/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 (limited to 'drivers/media/pci') 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 + */ + +#include +#include +#include +#include + +#include +#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 + */ + +#ifndef DVB_DUMMY_FE_H +#define DVB_DUMMY_FE_H + +#include +#include + +#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 -- cgit v1.2.3 From 94ab24a2c886620fd3d0c0241d98b6c448cc8b38 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Thu, 26 Mar 2020 15:08:59 +0100 Subject: media: ddbridge-dummy_fe: do some vars and function renames As the name of this driver is now ddbridge-dummy, do some renames internally. No functional changes. Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/ddbridge/ddbridge-dummy-fe.c | 144 ++++++++++++------------- drivers/media/pci/ddbridge/ddbridge-dummy-fe.h | 22 ++-- 2 files changed, 83 insertions(+), 83 deletions(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c index 9ff1ebaa5e04..ebf4d9c30a55 100644 --- a/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c +++ b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c @@ -11,15 +11,15 @@ #include #include -#include "dvb_dummy_fe.h" +#include "ddbridge-dummy-fe.h" -struct dvb_dummy_fe_state { +struct ddbridge_dummy_fe_state { struct dvb_frontend frontend; }; -static int dvb_dummy_fe_read_status(struct dvb_frontend *fe, +static int ddbridge_dummy_fe_read_status(struct dvb_frontend *fe, enum fe_status *status) { *status = FE_HAS_SIGNAL @@ -31,26 +31,26 @@ static int dvb_dummy_fe_read_status(struct dvb_frontend *fe, return 0; } -static int dvb_dummy_fe_read_ber(struct dvb_frontend *fe, u32 *ber) +static int ddbridge_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, +static int ddbridge_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) +static int ddbridge_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) +static int ddbridge_dummy_fe_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks) { *ucblocks = 0; return 0; @@ -61,13 +61,13 @@ static int dvb_dummy_fe_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks) * 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, +static int ddbridge_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) +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); @@ -78,102 +78,102 @@ static int dvb_dummy_fe_set_frontend(struct dvb_frontend *fe) return 0; } -static int dvb_dummy_fe_sleep(struct dvb_frontend *fe) +static int ddbridge_dummy_fe_sleep(struct dvb_frontend *fe) { return 0; } -static int dvb_dummy_fe_init(struct dvb_frontend *fe) +static int ddbridge_dummy_fe_init(struct dvb_frontend *fe) { return 0; } -static int dvb_dummy_fe_set_tone(struct dvb_frontend *fe, +static int ddbridge_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, +static int ddbridge_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) +static void ddbridge_dummy_fe_release(struct dvb_frontend *fe) { - struct dvb_dummy_fe_state *state = fe->demodulator_priv; + struct ddbridge_dummy_fe_state *state = fe->demodulator_priv; kfree(state); } -static const struct dvb_frontend_ops dvb_dummy_fe_ofdm_ops; +static const struct dvb_frontend_ops ddbridge_dummy_fe_ofdm_ops; -struct dvb_frontend *dvb_dummy_fe_ofdm_attach(void) +struct dvb_frontend *ddbridge_dummy_fe_ofdm_attach(void) { - struct dvb_dummy_fe_state *state = NULL; + struct ddbridge_dummy_fe_state *state = NULL; /* allocate memory for the internal state */ - state = kzalloc(sizeof(struct dvb_dummy_fe_state), GFP_KERNEL); + state = kzalloc(sizeof(struct ddbridge_dummy_fe_state), GFP_KERNEL); if (!state) return NULL; /* create dvb_frontend */ memcpy(&state->frontend.ops, - &dvb_dummy_fe_ofdm_ops, + &ddbridge_dummy_fe_ofdm_ops, sizeof(struct dvb_frontend_ops)); state->frontend.demodulator_priv = state; return &state->frontend; } -EXPORT_SYMBOL(dvb_dummy_fe_ofdm_attach); +EXPORT_SYMBOL(ddbridge_dummy_fe_ofdm_attach); -static const struct dvb_frontend_ops dvb_dummy_fe_qpsk_ops; +static const struct dvb_frontend_ops ddbridge_dummy_fe_qpsk_ops; -struct dvb_frontend *dvb_dummy_fe_qpsk_attach(void) +struct dvb_frontend *ddbridge_dummy_fe_qpsk_attach(void) { - struct dvb_dummy_fe_state *state = NULL; + struct ddbridge_dummy_fe_state *state = NULL; /* allocate memory for the internal state */ - state = kzalloc(sizeof(struct dvb_dummy_fe_state), GFP_KERNEL); + state = kzalloc(sizeof(struct ddbridge_dummy_fe_state), GFP_KERNEL); if (!state) return NULL; /* create dvb_frontend */ memcpy(&state->frontend.ops, - &dvb_dummy_fe_qpsk_ops, + &ddbridge_dummy_fe_qpsk_ops, sizeof(struct dvb_frontend_ops)); state->frontend.demodulator_priv = state; return &state->frontend; } -EXPORT_SYMBOL(dvb_dummy_fe_qpsk_attach); +EXPORT_SYMBOL(ddbridge_dummy_fe_qpsk_attach); -static const struct dvb_frontend_ops dvb_dummy_fe_qam_ops; +static const struct dvb_frontend_ops ddbridge_dummy_fe_qam_ops; -struct dvb_frontend *dvb_dummy_fe_qam_attach(void) +struct dvb_frontend *ddbridge_dummy_fe_qam_attach(void) { - struct dvb_dummy_fe_state *state = NULL; + struct ddbridge_dummy_fe_state *state = NULL; /* allocate memory for the internal state */ - state = kzalloc(sizeof(struct dvb_dummy_fe_state), GFP_KERNEL); + state = kzalloc(sizeof(struct ddbridge_dummy_fe_state), GFP_KERNEL); if (!state) return NULL; /* create dvb_frontend */ memcpy(&state->frontend.ops, - &dvb_dummy_fe_qam_ops, + &ddbridge_dummy_fe_qam_ops, sizeof(struct dvb_frontend_ops)); state->frontend.demodulator_priv = state; return &state->frontend; } -EXPORT_SYMBOL(dvb_dummy_fe_qam_attach); +EXPORT_SYMBOL(ddbridge_dummy_fe_qam_attach); -static const struct dvb_frontend_ops dvb_dummy_fe_ofdm_ops = { +static const struct dvb_frontend_ops ddbridge_dummy_fe_ofdm_ops = { .delsys = { SYS_DVBT }, .info = { - .name = "Dummy DVB-T", + .name = "ddbridge dummy DVB-T", .frequency_min_hz = 0, .frequency_max_hz = 863250 * kHz, .frequency_stepsize_hz = 62500, @@ -194,25 +194,25 @@ static const struct dvb_frontend_ops dvb_dummy_fe_ofdm_ops = { FE_CAN_HIERARCHY_AUTO, }, - .release = dvb_dummy_fe_release, + .release = ddbridge_dummy_fe_release, - .init = dvb_dummy_fe_init, - .sleep = dvb_dummy_fe_sleep, + .init = ddbridge_dummy_fe_init, + .sleep = ddbridge_dummy_fe_sleep, - .set_frontend = dvb_dummy_fe_set_frontend, - .get_frontend = dvb_dummy_fe_get_frontend, + .set_frontend = ddbridge_dummy_fe_set_frontend, + .get_frontend = ddbridge_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, + .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, }; -static const struct dvb_frontend_ops dvb_dummy_fe_qam_ops = { +static const struct dvb_frontend_ops ddbridge_dummy_fe_qam_ops = { .delsys = { SYS_DVBC_ANNEX_A }, .info = { - .name = "Dummy DVB-C", + .name = "ddbridge dummy DVB-C", .frequency_min_hz = 51 * MHz, .frequency_max_hz = 858 * MHz, .frequency_stepsize_hz = 62500, @@ -228,25 +228,25 @@ static const struct dvb_frontend_ops dvb_dummy_fe_qam_ops = { FE_CAN_INVERSION_AUTO }, - .release = dvb_dummy_fe_release, + .release = ddbridge_dummy_fe_release, - .init = dvb_dummy_fe_init, - .sleep = dvb_dummy_fe_sleep, + .init = ddbridge_dummy_fe_init, + .sleep = ddbridge_dummy_fe_sleep, - .set_frontend = dvb_dummy_fe_set_frontend, - .get_frontend = dvb_dummy_fe_get_frontend, + .set_frontend = ddbridge_dummy_fe_set_frontend, + .get_frontend = ddbridge_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, + .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, }; -static const struct dvb_frontend_ops dvb_dummy_fe_qpsk_ops = { +static const struct dvb_frontend_ops ddbridge_dummy_fe_qpsk_ops = { .delsys = { SYS_DVBS }, .info = { - .name = "Dummy DVB-S", + .name = "ddbridge dummy DVB-S", .frequency_min_hz = 950 * MHz, .frequency_max_hz = 2150 * MHz, .frequency_stepsize_hz = 250 * kHz, @@ -263,24 +263,24 @@ static const struct dvb_frontend_ops dvb_dummy_fe_qpsk_ops = { FE_CAN_QPSK }, - .release = dvb_dummy_fe_release, + .release = ddbridge_dummy_fe_release, - .init = dvb_dummy_fe_init, - .sleep = dvb_dummy_fe_sleep, + .init = ddbridge_dummy_fe_init, + .sleep = ddbridge_dummy_fe_sleep, - .set_frontend = dvb_dummy_fe_set_frontend, - .get_frontend = dvb_dummy_fe_get_frontend, + .set_frontend = ddbridge_dummy_fe_set_frontend, + .get_frontend = ddbridge_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, + .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, - .set_voltage = dvb_dummy_fe_set_voltage, - .set_tone = dvb_dummy_fe_set_tone, + .set_voltage = ddbridge_dummy_fe_set_voltage, + .set_tone = ddbridge_dummy_fe_set_tone, }; -MODULE_DESCRIPTION("DVB DUMMY Frontend"); +MODULE_DESCRIPTION("ddbridge 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 index 463abf5ebd56..811c203539e2 100644 --- a/drivers/media/pci/ddbridge/ddbridge-dummy-fe.h +++ b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.h @@ -5,32 +5,32 @@ * Written by Emard */ -#ifndef DVB_DUMMY_FE_H -#define DVB_DUMMY_FE_H +#ifndef DDBRIDGE_DUMMY_FE_H +#define DDBRIDGE_DUMMY_FE_H #include #include -#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); +#if IS_REACHABLE(CONFIG_DDBRIDGE_DUMMY_FE) +struct dvb_frontend *ddbridge_dummy_fe_ofdm_attach(void); +struct dvb_frontend *ddbridge_dummy_fe_qpsk_attach(void); +struct dvb_frontend *ddbridge_dummy_fe_qam_attach(void); #else -static inline struct dvb_frontend *dvb_dummy_fe_ofdm_attach(void) +static inline struct dvb_frontend *ddbridge_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) +static inline struct dvb_frontend *ddbridge_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) +static inline struct dvb_frontend *ddbridge_dummy_fe_qam_attach(void) { pr_warn("%s: driver disabled by Kconfig\n", __func__); return NULL; } -#endif /* CONFIG_DVB_DUMMY_FE */ +#endif /* CONFIG_DDBRIDGE_DUMMY_FE */ -#endif // DVB_DUMMY_FE_H +#endif // DDBRIDGE_DUMMY_FE_H -- cgit v1.2.3 From 9a33a27e7fe5b1aebf045829f92fd11562ad0ac7 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Thu, 26 Mar 2020 15:23:34 +0100 Subject: media: ddbridge: use the ddbridge's own dummy fe driver 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 --- drivers/media/pci/ddbridge/Kconfig | 1 - drivers/media/pci/ddbridge/Makefile | 2 +- drivers/media/pci/ddbridge/ddbridge-core.c | 4 +- drivers/media/pci/ddbridge/ddbridge-dummy-fe.c | 133 ------------------------- drivers/media/pci/ddbridge/ddbridge-dummy-fe.h | 20 ---- 5 files changed, 3 insertions(+), 157 deletions(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/pci/ddbridge/Kconfig b/drivers/media/pci/ddbridge/Kconfig index dab34fb85c09..169efd558e45 100644 --- a/drivers/media/pci/ddbridge/Kconfig +++ b/drivers/media/pci/ddbridge/Kconfig @@ -15,7 +15,6 @@ config DVB_DDBRIDGE select MEDIA_TUNER_TDA18212 if MEDIA_SUBDRV_AUTOSELECT select DVB_MXL5XX if MEDIA_SUBDRV_AUTOSELECT select DVB_CXD2099 if MEDIA_SUBDRV_AUTOSELECT - select DVB_DUMMY_FE if MEDIA_SUBDRV_AUTOSELECT help Support for cards with the Digital Devices PCI express bridge: - Octopus PCIe Bridge diff --git a/drivers/media/pci/ddbridge/Makefile b/drivers/media/pci/ddbridge/Makefile index 2b77c8d0eb2e..5e7eab81173b 100644 --- a/drivers/media/pci/ddbridge/Makefile +++ b/drivers/media/pci/ddbridge/Makefile @@ -7,7 +7,7 @@ ddbridge-objs := ddbridge-main.o ddbridge-core.o ddbridge-ci.o \ ddbridge-hw.o ddbridge-i2c.o ddbridge-max.o ddbridge-mci.o \ ddbridge-sx8.o -obj-$(CONFIG_DVB_DDBRIDGE) += ddbridge.o +obj-$(CONFIG_DVB_DDBRIDGE) += ddbridge.o ddbridge-dummy-fe.o ccflags-y += -I $(srctree)/drivers/media/dvb-frontends/ ccflags-y += -I $(srctree)/drivers/media/tuners/ diff --git a/drivers/media/pci/ddbridge/ddbridge-core.c b/drivers/media/pci/ddbridge/ddbridge-core.c index 7a2d19682fe3..7cabb9e9ffe2 100644 --- a/drivers/media/pci/ddbridge/ddbridge-core.c +++ b/drivers/media/pci/ddbridge/ddbridge-core.c @@ -50,7 +50,7 @@ #include "stv6111.h" #include "lnbh25.h" #include "cxd2099.h" -#include "dvb_dummy_fe.h" +#include "ddbridge-dummy-fe.h" /****************************************************************************/ @@ -1265,7 +1265,7 @@ static int demod_attach_dummy(struct ddb_input *input) struct ddb_dvb *dvb = &input->port->dvb[input->nr & 1]; struct device *dev = input->port->dev->dev; - dvb->fe = dvb_attach(dvb_dummy_fe_qam_attach); + dvb->fe = dvb_attach(ddbridge_dummy_fe_qam_attach); if (!dvb->fe) { dev_err(dev, "QAM dummy attach failed!\n"); return -ENODEV; diff --git a/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c index ebf4d9c30a55..6868a0c4fc82 100644 --- a/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c +++ b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.c @@ -13,12 +13,10 @@ #include #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) { @@ -88,18 +86,6 @@ static int ddbridge_dummy_fe_init(struct dvb_frontend *fe) return 0; } -static int ddbridge_dummy_fe_set_tone(struct dvb_frontend *fe, - enum fe_sec_tone_mode tone) -{ - return 0; -} - -static int ddbridge_dummy_fe_set_voltage(struct dvb_frontend *fe, - enum fe_sec_voltage voltage) -{ - return 0; -} - static void ddbridge_dummy_fe_release(struct dvb_frontend *fe) { struct ddbridge_dummy_fe_state *state = fe->demodulator_priv; @@ -107,48 +93,6 @@ static void ddbridge_dummy_fe_release(struct dvb_frontend *fe) kfree(state); } -static const struct dvb_frontend_ops ddbridge_dummy_fe_ofdm_ops; - -struct dvb_frontend *ddbridge_dummy_fe_ofdm_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_ofdm_ops, - sizeof(struct dvb_frontend_ops)); - - state->frontend.demodulator_priv = state; - return &state->frontend; -} -EXPORT_SYMBOL(ddbridge_dummy_fe_ofdm_attach); - -static const struct dvb_frontend_ops ddbridge_dummy_fe_qpsk_ops; - -struct dvb_frontend *ddbridge_dummy_fe_qpsk_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_qpsk_ops, - sizeof(struct dvb_frontend_ops)); - - state->frontend.demodulator_priv = state; - return &state->frontend; -} -EXPORT_SYMBOL(ddbridge_dummy_fe_qpsk_attach); - static const struct dvb_frontend_ops ddbridge_dummy_fe_qam_ops; struct dvb_frontend *ddbridge_dummy_fe_qam_attach(void) @@ -170,45 +114,6 @@ struct dvb_frontend *ddbridge_dummy_fe_qam_attach(void) } EXPORT_SYMBOL(ddbridge_dummy_fe_qam_attach); -static const struct dvb_frontend_ops ddbridge_dummy_fe_ofdm_ops = { - .delsys = { SYS_DVBT }, - .info = { - .name = "ddbridge 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 = 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, -}; - static const struct dvb_frontend_ops ddbridge_dummy_fe_qam_ops = { .delsys = { SYS_DVBC_ANNEX_A }, .info = { @@ -243,44 +148,6 @@ static const struct dvb_frontend_ops ddbridge_dummy_fe_qam_ops = { .read_ucblocks = ddbridge_dummy_fe_read_ucblocks, }; -static const struct dvb_frontend_ops ddbridge_dummy_fe_qpsk_ops = { - .delsys = { SYS_DVBS }, - .info = { - .name = "ddbridge 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 = 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, - - .set_voltage = ddbridge_dummy_fe_set_voltage, - .set_tone = ddbridge_dummy_fe_set_tone, -}; - MODULE_DESCRIPTION("ddbridge 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 index 811c203539e2..ddf189c09524 100644 --- a/drivers/media/pci/ddbridge/ddbridge-dummy-fe.h +++ b/drivers/media/pci/ddbridge/ddbridge-dummy-fe.h @@ -11,26 +11,6 @@ #include #include -#if IS_REACHABLE(CONFIG_DDBRIDGE_DUMMY_FE) -struct dvb_frontend *ddbridge_dummy_fe_ofdm_attach(void); -struct dvb_frontend *ddbridge_dummy_fe_qpsk_attach(void); struct dvb_frontend *ddbridge_dummy_fe_qam_attach(void); -#else -static inline struct dvb_frontend *ddbridge_dummy_fe_ofdm_attach(void) -{ - pr_warn("%s: driver disabled by Kconfig\n", __func__); - return NULL; -} -static inline struct dvb_frontend *ddbridge_dummy_fe_qpsk_attach(void) -{ - pr_warn("%s: driver disabled by Kconfig\n", __func__); - return NULL; -} -static inline struct dvb_frontend *ddbridge_dummy_fe_qam_attach(void) -{ - pr_warn("%s: driver disabled by Kconfig\n", __func__); - return NULL; -} -#endif /* CONFIG_DDBRIDGE_DUMMY_FE */ #endif // DDBRIDGE_DUMMY_FE_H -- cgit v1.2.3 From 97b19498dc0250826f6c9f4921b1e4c553cb086c Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Thu, 26 Mar 2020 09:45:31 +0100 Subject: media: Kconfig: mark other drivers as test drivers Neither the PCI skeleton nor the DVB dummy driver are real drivers. They're there just as an example for a driver writter. Distros should not enable those drivers. So, hide them if MEDIA_TEST_SUPPORT is not selected. Signed-off-by: Mauro Carvalho Chehab --- drivers/media/dvb-frontends/Kconfig | 4 ++++ drivers/media/pci/Kconfig | 1 + 2 files changed, 5 insertions(+) (limited to 'drivers/media/pci') diff --git a/drivers/media/dvb-frontends/Kconfig b/drivers/media/dvb-frontends/Kconfig index a29e9ddf9c82..932fd88fdc12 100644 --- a/drivers/media/dvb-frontends/Kconfig +++ b/drivers/media/dvb-frontends/Kconfig @@ -944,8 +944,12 @@ config DVB_SP2 CIMaX SP2/SP2HF Common Interface module. comment "Tools to develop new frontends" + depends on MEDIA_TEST_SUPPORT config DVB_DUMMY_FE tristate "Dummy frontend driver" depends on DVB_CORE + depends on MEDIA_TEST_SUPPORT + help + Dummy skeleton frontend driver. endmenu diff --git a/drivers/media/pci/Kconfig b/drivers/media/pci/Kconfig index 9336f8446cf0..e576283ebbf5 100644 --- a/drivers/media/pci/Kconfig +++ b/drivers/media/pci/Kconfig @@ -58,6 +58,7 @@ source "drivers/media/pci/intel/ipu3/Kconfig" config VIDEO_PCI_SKELETON tristate "Skeleton PCI V4L2 driver" + depends on MEDIA_TEST_SUPPORT depends on PCI depends on SAMPLES depends on VIDEO_V4L2 && VIDEOBUF2_CORE -- cgit v1.2.3 From a3b91d8bd1e034c8ed89d3f55243478af97a0a52 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Wed, 25 Mar 2020 08:36:36 +0100 Subject: media: Kconfig: better support hybrid TV devices Right now, if one has an hybrid TV card, it has to select both analog and digital TV support, as otherwise the needed core support won't be selected. Change the logic to auto-select the core support for those drivers, as this is a way more intuitive. It should be noticed that, as now both DVB_CORE and VIDEO_DEV defaults depends on selecting a hybrid cards, we had to remove the explicit dependencies there, in order to avoid circular dependencies. That requires some tricks: 1) the prompt should not be not visible when an hybrid card is selected, as the user shold not change it. 2) When a media hybrid device is selected, the modular option for DVB_CORE and VIDEO_DEV will follow the MEDIA_SUPPORT dependency, as we can't have a core built with "y" with a driver built as module. Note: while here, moved two pure V4L2 PCI drivers out of the "hybrid" part of config and consider pvrusb2 as an hybrid device. Signed-off-by: Mauro Carvalho Chehab --- drivers/media/Kconfig | 24 +++++++++++------------- drivers/media/pci/Kconfig | 11 +++++++++-- drivers/media/pci/bt8xx/Kconfig | 5 ++--- drivers/media/pci/cx18/Kconfig | 2 +- drivers/media/pci/cx23885/Kconfig | 4 ++-- drivers/media/pci/cx88/Kconfig | 4 ++-- drivers/media/pci/saa7134/Kconfig | 4 ++-- drivers/media/pci/saa7164/Kconfig | 2 +- drivers/media/platform/Kconfig | 2 +- drivers/media/usb/Kconfig | 8 +++++++- drivers/media/usb/au0828/Kconfig | 6 ++---- drivers/media/usb/cx231xx/Kconfig | 4 ++-- drivers/media/usb/pvrusb2/Kconfig | 4 ++-- drivers/media/usb/tm6000/Kconfig | 4 ++-- 14 files changed, 46 insertions(+), 38 deletions(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig index f6763d02f1be..f400370b2928 100644 --- a/drivers/media/Kconfig +++ b/drivers/media/Kconfig @@ -44,20 +44,14 @@ config MEDIA_ANALOG_TV_SUPPORT help Enable analog TV support. - Say Y when you have a TV board with analog support or with a - hybrid analog/digital TV chipset. - - Note: There are several DVB cards that are based on chips that - support both analog and digital TV. Disabling this option - will disable support for them. + Say Y when you have a board with analog TV support. config MEDIA_DIGITAL_TV_SUPPORT bool "Digital TV support" help Enable digital TV support. - Say Y when you have a board with digital support or a board with - hybrid digital TV and analog TV. + Say Y when you have a board with digital TV support. config MEDIA_RADIO_SUPPORT bool "AM/FM radio receivers/transmitters support" @@ -69,10 +63,6 @@ config MEDIA_RADIO_SUPPORT Say Y when you have a board with radio support. - Note: There are several TV cards that are based on chips that - support radio reception. Disabling this option will - disable support for them. - config MEDIA_SDR_SUPPORT bool "Software defined radio support" help @@ -123,9 +113,13 @@ source "drivers/media/mc/Kconfig" # Only enables if one of the V4L2 types (ATV, webcam, radio) is selected # +comment "Video4Linux core enabled to support hybrid TV devices" + depends on MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI + config VIDEO_DEV tristate - default MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_RADIO_SUPPORT || MEDIA_SDR_SUPPORT || MEDIA_PLATFORM_SUPPORT + prompt "Video4Linux core" if !(MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI) + default MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_RADIO_SUPPORT || MEDIA_SDR_SUPPORT || MEDIA_PLATFORM_SUPPORT || MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI config VIDEO_V4L2_SUBDEV_API bool "V4L2 sub-device userspace API" @@ -143,8 +137,12 @@ source "drivers/media/v4l2-core/Kconfig" # Only enables if one of DTV is selected # +comment "Digital TV core enabled to support hybrid TV devices" + depends on MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI + config DVB_CORE tristate + prompt "Digital TV core" if !(MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI) depends on MEDIA_DIGITAL_TV_SUPPORT depends on (I2C || I2C=n) default y diff --git a/drivers/media/pci/Kconfig b/drivers/media/pci/Kconfig index e576283ebbf5..348da044ec78 100644 --- a/drivers/media/pci/Kconfig +++ b/drivers/media/pci/Kconfig @@ -1,4 +1,11 @@ # SPDX-License-Identifier: GPL-2.0-only + +# Should match the hybrid card list below +config MEDIA_HYBRID_PCI + bool + depends on VIDEO_CX18 || VIDEO_CX23885 || VIDEO_CX88 || VIDEO_BT848 || VIDEO_SAA7134 || VIDEO_SAA7164 + default y + if PCI && MEDIA_SUPPORT menuconfig MEDIA_PCI_SUPPORT @@ -24,18 +31,18 @@ if MEDIA_ANALOG_TV_SUPPORT source "drivers/media/pci/ivtv/Kconfig" source "drivers/media/pci/saa7146/Kconfig" source "drivers/media/pci/dt3155/Kconfig" +source "drivers/media/pci/cx25821/Kconfig" +source "drivers/media/pci/cobalt/Kconfig" endif if MEDIA_ANALOG_TV_SUPPORT || MEDIA_DIGITAL_TV_SUPPORT comment "Media capture/analog/hybrid TV support" source "drivers/media/pci/cx18/Kconfig" source "drivers/media/pci/cx23885/Kconfig" -source "drivers/media/pci/cx25821/Kconfig" source "drivers/media/pci/cx88/Kconfig" source "drivers/media/pci/bt8xx/Kconfig" source "drivers/media/pci/saa7134/Kconfig" source "drivers/media/pci/saa7164/Kconfig" -source "drivers/media/pci/cobalt/Kconfig" endif diff --git a/drivers/media/pci/bt8xx/Kconfig b/drivers/media/pci/bt8xx/Kconfig index 75d172a6f54c..c79c6175c262 100644 --- a/drivers/media/pci/bt8xx/Kconfig +++ b/drivers/media/pci/bt8xx/Kconfig @@ -1,11 +1,10 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_BT848 tristate "BT848 Video For Linux" - depends on VIDEO_DEV && PCI && I2C && VIDEO_V4L2 + depends on PCI && I2C select I2C_ALGOBIT select VIDEOBUF_DMA_SG depends on RC_CORE - depends on MEDIA_RADIO_SUPPORT select VIDEO_TUNER select VIDEO_TVEEPROM select VIDEO_MSP3400 if MEDIA_SUBDRV_AUTOSELECT @@ -24,7 +23,7 @@ config VIDEO_BT848 config DVB_BT8XX tristate "DVB/ATSC Support for bt878 based TV cards" - depends on DVB_CORE && PCI && I2C && VIDEO_BT848 + depends on PCI && I2C && VIDEO_BT848 select DVB_MT352 if MEDIA_SUBDRV_AUTOSELECT select DVB_SP887X if MEDIA_SUBDRV_AUTOSELECT select DVB_NXT6000 if MEDIA_SUBDRV_AUTOSELECT diff --git a/drivers/media/pci/cx18/Kconfig b/drivers/media/pci/cx18/Kconfig index 7074a1071302..110e072bd8ba 100644 --- a/drivers/media/pci/cx18/Kconfig +++ b/drivers/media/pci/cx18/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_CX18 tristate "Conexant cx23418 MPEG encoder support" - depends on VIDEO_V4L2 && DVB_CORE && PCI && I2C + depends on PCI && I2C select I2C_ALGOBIT select VIDEOBUF_VMALLOC depends on RC_CORE diff --git a/drivers/media/pci/cx23885/Kconfig b/drivers/media/pci/cx23885/Kconfig index 926da881929d..e8f4edf270c8 100644 --- a/drivers/media/pci/cx23885/Kconfig +++ b/drivers/media/pci/cx23885/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_CX23885 tristate "Conexant cx23885 (2388x successor) support" - depends on DVB_CORE && VIDEO_DEV && PCI && I2C && INPUT && SND + depends on PCI && I2C && INPUT && SND select SND_PCM select I2C_ALGOBIT select VIDEO_TUNER @@ -53,7 +53,7 @@ config VIDEO_CX23885 config MEDIA_ALTERA_CI tristate "Altera FPGA based CI module" - depends on VIDEO_CX23885 && DVB_CORE + depends on VIDEO_CX23885 select ALTERA_STAPL help An Altera FPGA CI module for NetUP Dual DVB-T/C RF CI card. diff --git a/drivers/media/pci/cx88/Kconfig b/drivers/media/pci/cx88/Kconfig index 24e1e7c41744..ab994b3049f4 100644 --- a/drivers/media/pci/cx88/Kconfig +++ b/drivers/media/pci/cx88/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_CX88 tristate "Conexant 2388x (bt878 successor) support" - depends on VIDEO_DEV && PCI && I2C && RC_CORE + depends on PCI && I2C && RC_CORE select I2C_ALGOBIT select VIDEOBUF2_DMA_SG select VIDEO_TUNER @@ -44,7 +44,7 @@ config VIDEO_CX88_BLACKBIRD config VIDEO_CX88_DVB tristate "DVB/ATSC Support for cx2388x based TV cards" - depends on VIDEO_CX88 && DVB_CORE + depends on VIDEO_CX88 select VIDEOBUF2_DVB select DVB_PLL if MEDIA_SUBDRV_AUTOSELECT select DVB_MT352 if MEDIA_SUBDRV_AUTOSELECT diff --git a/drivers/media/pci/saa7134/Kconfig b/drivers/media/pci/saa7134/Kconfig index 30c1759682a9..a2af02f6d593 100644 --- a/drivers/media/pci/saa7134/Kconfig +++ b/drivers/media/pci/saa7134/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_SAA7134 tristate "Philips SAA7134 support" - depends on VIDEO_DEV && PCI && I2C + depends on PCI && I2C select VIDEOBUF2_DMA_SG select VIDEO_TUNER select VIDEO_TVEEPROM @@ -37,7 +37,7 @@ config VIDEO_SAA7134_RC config VIDEO_SAA7134_DVB tristate "DVB/ATSC Support for saa7134 based TV cards" - depends on VIDEO_SAA7134 && DVB_CORE + depends on VIDEO_SAA7134 select VIDEOBUF2_DVB select DVB_PLL if MEDIA_SUBDRV_AUTOSELECT select DVB_MT352 if MEDIA_SUBDRV_AUTOSELECT diff --git a/drivers/media/pci/saa7164/Kconfig b/drivers/media/pci/saa7164/Kconfig index 6655c3e504cd..8df933a722a7 100644 --- a/drivers/media/pci/saa7164/Kconfig +++ b/drivers/media/pci/saa7164/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_SAA7164 tristate "NXP SAA7164 support" - depends on DVB_CORE && VIDEO_DEV && PCI && I2C + depends on PCI && I2C select I2C_ALGOBIT select FW_LOADER select VIDEO_TUNER diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig index 80028337bf00..6b693cd0576e 100644 --- a/drivers/media/platform/Kconfig +++ b/drivers/media/platform/Kconfig @@ -531,7 +531,7 @@ config VIDEO_TI_CSC menuconfig DVB_PLATFORM_DRIVERS bool "DVB platform devices" - depends on MEDIA_DIGITAL_TV_SUPPORT + select DVB_CORE help Say Y here to enable support for platform-specific Digital TV drivers. diff --git a/drivers/media/usb/Kconfig b/drivers/media/usb/Kconfig index bf08393e38d1..036aa4385fdc 100644 --- a/drivers/media/usb/Kconfig +++ b/drivers/media/usb/Kconfig @@ -5,6 +5,12 @@ config TTPCI_EEPROM tristate depends on I2C +# Should match the hybrid card list below +config MEDIA_HYBRID_USB + bool + depends on VIDEO_AU0828 || VIDEO_CX231XX || VIDEO_TM6000 || VIDEO_PVRUSB2 + default y + if USB && MEDIA_SUPPORT menuconfig MEDIA_USB_SUPPORT @@ -29,7 +35,6 @@ endif if MEDIA_ANALOG_TV_SUPPORT comment "Analog TV USB devices" -source "drivers/media/usb/pvrusb2/Kconfig" source "drivers/media/usb/hdpvr/Kconfig" source "drivers/media/usb/stk1160/Kconfig" source "drivers/media/usb/go7007/Kconfig" @@ -39,6 +44,7 @@ if (MEDIA_ANALOG_TV_SUPPORT || MEDIA_DIGITAL_TV_SUPPORT) comment "Analog/digital TV USB devices" source "drivers/media/usb/au0828/Kconfig" source "drivers/media/usb/cx231xx/Kconfig" +source "drivers/media/usb/pvrusb2/Kconfig" source "drivers/media/usb/tm6000/Kconfig" endif diff --git a/drivers/media/usb/au0828/Kconfig b/drivers/media/usb/au0828/Kconfig index 05cc6c48c26f..2f5ee684a278 100644 --- a/drivers/media/usb/au0828/Kconfig +++ b/drivers/media/usb/au0828/Kconfig @@ -2,12 +2,12 @@ config VIDEO_AU0828 tristate "Auvitek AU0828 support" - depends on I2C && INPUT && DVB_CORE && USB && VIDEO_V4L2 + depends on I2C && INPUT && USB select MEDIA_CONTROLLER select MEDIA_CONTROLLER_DVB select I2C_ALGOBIT select VIDEO_TVEEPROM - select VIDEOBUF2_VMALLOC if VIDEO_V4L2 + select VIDEOBUF2_VMALLOC select DVB_AU8522_DTV if MEDIA_SUBDRV_AUTOSELECT select MEDIA_TUNER_XC5000 if MEDIA_SUBDRV_AUTOSELECT select MEDIA_TUNER_MXL5007T if MEDIA_SUBDRV_AUTOSELECT @@ -22,8 +22,6 @@ config VIDEO_AU0828 config VIDEO_AU0828_V4L2 bool "Auvitek AU0828 v4l2 analog video support" depends on VIDEO_AU0828 - depends on VIDEO_V4L2=y || VIDEO_V4L2=VIDEO_AU0828 - select DVB_AU8522_V4L if MEDIA_SUBDRV_AUTOSELECT select VIDEO_TUNER default y help diff --git a/drivers/media/usb/cx231xx/Kconfig b/drivers/media/usb/cx231xx/Kconfig index 2fe2b2d335ba..7e3b189f9dca 100644 --- a/drivers/media/usb/cx231xx/Kconfig +++ b/drivers/media/usb/cx231xx/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_CX231XX tristate "Conexant cx231xx USB video capture support" - depends on VIDEO_DEV && I2C && I2C_MUX + depends on I2C && I2C_MUX select VIDEO_TUNER select VIDEO_TVEEPROM select VIDEOBUF2_VMALLOC @@ -40,7 +40,7 @@ config VIDEO_CX231XX_ALSA config VIDEO_CX231XX_DVB tristate "DVB/ATSC Support for Cx231xx based TV cards" - depends on VIDEO_CX231XX && DVB_CORE + depends on VIDEO_CX231XX select MEDIA_TUNER_XC5000 if MEDIA_SUBDRV_AUTOSELECT select MEDIA_TUNER_TDA18271 if MEDIA_SUBDRV_AUTOSELECT select DVB_MB86A20S if MEDIA_SUBDRV_AUTOSELECT diff --git a/drivers/media/usb/pvrusb2/Kconfig b/drivers/media/usb/pvrusb2/Kconfig index e6a4f730591b..5bf45f2b2517 100644 --- a/drivers/media/usb/pvrusb2/Kconfig +++ b/drivers/media/usb/pvrusb2/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_PVRUSB2 tristate "Hauppauge WinTV-PVR USB2 support" - depends on VIDEO_V4L2 && I2C + depends on I2C select VIDEO_TUNER select VIDEO_TVEEPROM select VIDEO_CX2341X @@ -36,7 +36,7 @@ config VIDEO_PVRUSB2_SYSFS config VIDEO_PVRUSB2_DVB bool "pvrusb2 ATSC/DVB support" default y - depends on VIDEO_PVRUSB2 && DVB_CORE + depends on VIDEO_PVRUSB2 select DVB_LGDT330X if MEDIA_SUBDRV_AUTOSELECT select DVB_S5H1409 if MEDIA_SUBDRV_AUTOSELECT select DVB_S5H1411 if MEDIA_SUBDRV_AUTOSELECT diff --git a/drivers/media/usb/tm6000/Kconfig b/drivers/media/usb/tm6000/Kconfig index 56e977deba81..ad9cfa855eac 100644 --- a/drivers/media/usb/tm6000/Kconfig +++ b/drivers/media/usb/tm6000/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_TM6000 tristate "TV Master TM5600/6000/6010 driver" - depends on VIDEO_DEV && I2C && INPUT && RC_CORE && USB + depends on I2C && INPUT && RC_CORE && USB select VIDEO_TUNER select MEDIA_TUNER_XC2028 select MEDIA_TUNER_XC5000 @@ -28,7 +28,7 @@ config VIDEO_TM6000_ALSA config VIDEO_TM6000_DVB tristate "DVB Support for tm6000 based TV cards" - depends on VIDEO_TM6000 && DVB_CORE && USB + depends on VIDEO_TM6000 && USB select DVB_ZL10353 help This adds support for DVB cards based on the tm5600/tm6000 chip. -- cgit v1.2.3 From 6268b351394450e9168a9281a9279f7cb420669f Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Thu, 26 Mar 2020 15:47:25 +0100 Subject: media: Kconfig: fix selection for test drivers There are some long-time mistakes related to build test drivers, with regards to depends on/select. Also, as we now want to build any test driver without needing to enable anything else, change the logic in order to properly filter them. Please notice that the PCI skeleton is somewhat an exception, as it requires to select *both* SAMPLES and MEDIA_TEST_SUPPORT. I almost changed it to be either one, but decided to keep it as-is, as this is something that we don't really need to be included on any distribution. The only reason for someone to build it is for COMPILE_TEST purposes. Signed-off-by: Mauro Carvalho Chehab --- drivers/media/Kconfig | 2 +- drivers/media/dvb-frontends/Kconfig | 9 +++++++-- drivers/media/pci/Kconfig | 10 +++++----- drivers/media/test_drivers/Kconfig | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig index f400370b2928..9c32616f863a 100644 --- a/drivers/media/Kconfig +++ b/drivers/media/Kconfig @@ -119,7 +119,7 @@ comment "Video4Linux core enabled to support hybrid TV devices" config VIDEO_DEV tristate prompt "Video4Linux core" if !(MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI) - default MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_RADIO_SUPPORT || MEDIA_SDR_SUPPORT || MEDIA_PLATFORM_SUPPORT || MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI + default MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_RADIO_SUPPORT || MEDIA_SDR_SUPPORT || MEDIA_PLATFORM_SUPPORT || MEDIA_TEST_SUPPORT || MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI config VIDEO_V4L2_SUBDEV_API bool "V4L2 sub-device userspace API" diff --git a/drivers/media/dvb-frontends/Kconfig b/drivers/media/dvb-frontends/Kconfig index 932fd88fdc12..1f45808d94da 100644 --- a/drivers/media/dvb-frontends/Kconfig +++ b/drivers/media/dvb-frontends/Kconfig @@ -1,3 +1,5 @@ +if MEDIA_DIGITAL_TV_SUPPORT + comment "DVB Frontend drivers hidden by 'Autoselect ancillary drivers'" depends on MEDIA_HIDE_ANCILLARY_SUBDRV @@ -943,13 +945,16 @@ config DVB_SP2 help CIMaX SP2/SP2HF Common Interface module. +endmenu # Customise DVB Frontends + +endif # MEDIA_DIGITAL_TV_SUPPORT + comment "Tools to develop new frontends" depends on MEDIA_TEST_SUPPORT config DVB_DUMMY_FE tristate "Dummy frontend driver" - depends on DVB_CORE depends on MEDIA_TEST_SUPPORT + select DVB_CORE help Dummy skeleton frontend driver. -endmenu diff --git a/drivers/media/pci/Kconfig b/drivers/media/pci/Kconfig index 348da044ec78..44f1efd21272 100644 --- a/drivers/media/pci/Kconfig +++ b/drivers/media/pci/Kconfig @@ -6,7 +6,7 @@ config MEDIA_HYBRID_PCI depends on VIDEO_CX18 || VIDEO_CX23885 || VIDEO_CX88 || VIDEO_BT848 || VIDEO_SAA7134 || VIDEO_SAA7164 default y -if PCI && MEDIA_SUPPORT +if PCI menuconfig MEDIA_PCI_SUPPORT bool "Media PCI Adapters" @@ -65,11 +65,11 @@ source "drivers/media/pci/intel/ipu3/Kconfig" config VIDEO_PCI_SKELETON tristate "Skeleton PCI V4L2 driver" - depends on MEDIA_TEST_SUPPORT - depends on PCI depends on SAMPLES - depends on VIDEO_V4L2 && VIDEOBUF2_CORE - depends on VIDEOBUF2_MEMOPS && VIDEOBUF2_DMA_CONTIG + depends on MEDIA_TEST_SUPPORT + depends on PCI && VIDEO_V4L2 + select VIDEOBUF2_MEMOPS + select VIDEOBUF2_DMA_CONTIG help Enable build of the skeleton PCI driver, used as a reference when developing new drivers. diff --git a/drivers/media/test_drivers/Kconfig b/drivers/media/test_drivers/Kconfig index 258a4d36c0d3..9f4a9cfbacc9 100644 --- a/drivers/media/test_drivers/Kconfig +++ b/drivers/media/test_drivers/Kconfig @@ -4,7 +4,7 @@ if MEDIA_TEST_SUPPORT menuconfig V4L_TEST_DRIVERS bool "V4L test drivers" - depends on MEDIA_CAMERA_SUPPORT + depends on VIDEO_DEV if V4L_TEST_DRIVERS -- cgit v1.2.3 From 32a363d0b0b142f35512848dc646ee53e0926723 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Wed, 25 Mar 2020 15:36:56 +0100 Subject: media: Kconfig files: use select for V4L2 subdevs and MC There are lots of drivers that only work when the media controller and/or the V4L2 subdev APIs are present. Right now, someone need to first enable those APIs before using those drivers. Well, ideally, drivers, should, instead *optionally* depend on it, in order for PC camera drivers to be able to use them, but nowadays most drivers are UVC cameras, with don't require a sensor driver. So, be it. Let's instead make them select the MEDIA_CONTROLLER and the SUBDEV API, in order to make easier for people to be able of enabling them. Signed-off-by: Mauro Carvalho Chehab --- drivers/media/i2c/Kconfig | 210 +++++++++++++++++-------- drivers/media/i2c/et8ek8/Kconfig | 4 +- drivers/media/i2c/m5mols/Kconfig | 5 +- drivers/media/i2c/smiapp/Kconfig | 5 +- drivers/media/mc/Kconfig | 2 +- drivers/media/pci/cobalt/Kconfig | 4 +- drivers/media/pci/intel/ipu3/Kconfig | 4 +- drivers/media/pci/sta2x11/Kconfig | 6 +- drivers/media/platform/Kconfig | 28 +++- drivers/media/platform/am437x/Kconfig | 4 +- drivers/media/platform/atmel/Kconfig | 4 +- drivers/media/platform/cadence/Kconfig | 8 +- drivers/media/platform/exynos4-is/Kconfig | 5 +- drivers/media/platform/rcar-vin/Kconfig | 8 +- drivers/media/platform/sunxi/sun4i-csi/Kconfig | 4 +- drivers/media/platform/sunxi/sun6i-csi/Kconfig | 4 +- drivers/media/platform/xilinx/Kconfig | 4 +- drivers/media/spi/Kconfig | 4 +- drivers/media/test_drivers/vimc/Kconfig | 4 +- drivers/staging/media/hantro/Kconfig | 5 +- drivers/staging/media/imx/Kconfig | 5 +- drivers/staging/media/ipu3/Kconfig | 3 +- drivers/staging/media/omap4iss/Kconfig | 4 +- drivers/staging/media/rkisp1/Kconfig | 4 +- drivers/staging/media/sunxi/cedrus/Kconfig | 5 +- 25 files changed, 237 insertions(+), 106 deletions(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index 125d596c13dd..4bc4cfea2f20 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -19,7 +19,7 @@ config VIDEO_IR_I2C In doubt, say Y. # -# Encoder / Decoder module configuration +# V4L2 I2C drivers that aren't related with Camera support # comment "I2C drivers hidden by 'Autoselect ancillary drivers'" @@ -28,6 +28,10 @@ comment "I2C drivers hidden by 'Autoselect ancillary drivers'" menu "I2C Encoders, decoders, sensors and other helper chips" visible if !MEDIA_HIDE_ANCILLARY_SUBDRV +# +# Encoder / Decoder module configuration +# + comment "Audio decoders, processors and mixers" config VIDEO_TVAUDIO @@ -62,11 +66,13 @@ config VIDEO_TDA9840 config VIDEO_TDA1997X tristate "NXP TDA1997x HDMI receiver" - depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 && I2C depends on SND_SOC select HDMI select SND_PCM select V4L2_FWNODE + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help V4L2 subdevice driver for the NXP TDA1997x HDMI receivers. @@ -204,7 +210,9 @@ comment "Video decoders" config VIDEO_ADV7180 tristate "Analog Devices ADV7180 decoder" - depends on GPIOLIB && VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API + depends on GPIOLIB && VIDEO_V4L2 && I2C + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help Support for the Analog Devices ADV7180 video decoder. @@ -223,8 +231,10 @@ config VIDEO_ADV7183 config VIDEO_ADV748X tristate "Analog Devices ADV748x decoder" - depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 && I2C depends on OF + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select REGMAP_I2C select V4L2_FWNODE help @@ -236,8 +246,10 @@ config VIDEO_ADV748X config VIDEO_ADV7604 tristate "Analog Devices ADV7604 decoder" - depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 && I2C depends on GPIOLIB || COMPILE_TEST + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select REGMAP_I2C select HDMI select V4L2_FWNODE @@ -260,7 +272,9 @@ config VIDEO_ADV7604_CEC config VIDEO_ADV7842 tristate "Analog Devices ADV7842 decoder" - depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 && I2C + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select HDMI help Support for the Analog Devices ADV7842 video decoder. @@ -347,7 +361,9 @@ config VIDEO_SAA711X config VIDEO_TC358743 tristate "Toshiba TC358743 decoder" - depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 && I2C + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select HDMI select V4L2_FWNODE help @@ -515,8 +531,10 @@ config VIDEO_ADV7393 config VIDEO_ADV7511 tristate "Analog Devices ADV7511 encoder" - depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 && I2C depends on DRM_I2C_ADV7511=n || COMPILE_TEST + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select HDMI help Support for the Analog Devices ADV7511 video encoder. @@ -536,7 +554,10 @@ config VIDEO_ADV7511_CEC config VIDEO_AD9389B tristate "Analog Devices AD9389B encoder" - depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 && I2C + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API + help Support for the Analog Devices AD9389B video encoder. @@ -568,12 +589,17 @@ config VIDEO_APTINA_PLL config VIDEO_SMIAPP_PLL tristate +# +# All drivers that are related to Media Camera Support should be here +# + if MEDIA_CAMERA_SUPPORT config VIDEO_HI556 tristate "Hynix Hi-556 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API - depends on MEDIA_CONTROLLER + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a Video4Linux2 sensor driver for the Hynix @@ -584,8 +610,10 @@ config VIDEO_HI556 config VIDEO_IMX214 tristate "Sony IMX214 sensor support" - depends on GPIOLIB && I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on GPIOLIB && I2C && VIDEO_V4L2 depends on V4L2_FWNODE + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select REGMAP_I2C help This is a Video4Linux2 sensor driver for the Sony @@ -596,7 +624,9 @@ config VIDEO_IMX214 config VIDEO_IMX219 tristate "Sony IMX219 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a Video4Linux2 sensor driver for the Sony @@ -607,7 +637,9 @@ config VIDEO_IMX219 config VIDEO_IMX258 tristate "Sony IMX258 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help This is a Video4Linux2 sensor driver for the Sony IMX258 camera. @@ -617,7 +649,9 @@ config VIDEO_IMX258 config VIDEO_IMX274 tristate "Sony IMX274 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select REGMAP_I2C help This is a V4L2 sensor driver for the Sony IMX274 @@ -625,7 +659,9 @@ config VIDEO_IMX274 config VIDEO_IMX290 tristate "Sony IMX290 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select REGMAP_I2C select V4L2_FWNODE help @@ -637,7 +673,9 @@ config VIDEO_IMX290 config VIDEO_IMX319 tristate "Sony IMX319 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help This is a Video4Linux2 sensor driver for the Sony IMX319 camera. @@ -647,7 +685,9 @@ config VIDEO_IMX319 config VIDEO_IMX355 tristate "Sony IMX355 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help This is a Video4Linux2 sensor driver for the Sony IMX355 camera. @@ -678,7 +718,8 @@ config VIDEO_OV2659 config VIDEO_OV2680 tristate "OmniVision OV2680 sensor support" - depends on VIDEO_V4L2 && I2C && MEDIA_CONTROLLER + depends on VIDEO_V4L2 && I2C + select MEDIA_CONTROLLER select V4L2_FWNODE help This is a Video4Linux2 sensor driver for the OmniVision @@ -689,7 +730,8 @@ config VIDEO_OV2680 config VIDEO_OV2685 tristate "OmniVision OV2685 sensor support" - depends on VIDEO_V4L2 && I2C && MEDIA_CONTROLLER + depends on VIDEO_V4L2 && I2C + select MEDIA_CONTROLLER select V4L2_FWNODE help This is a Video4Linux2 sensor driver for the OmniVision @@ -701,7 +743,9 @@ config VIDEO_OV2685 config VIDEO_OV5640 tristate "OmniVision OV5640 sensor support" depends on OF - depends on GPIOLIB && VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API + depends on GPIOLIB && VIDEO_V4L2 && I2C + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a Video4Linux2 sensor driver for the Omnivision @@ -710,7 +754,9 @@ config VIDEO_OV5640 config VIDEO_OV5645 tristate "OmniVision OV5645 sensor support" depends on OF - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a Video4Linux2 sensor driver for the OmniVision @@ -721,7 +767,9 @@ config VIDEO_OV5645 config VIDEO_OV5647 tristate "OmniVision OV5647 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a Video4Linux2 sensor driver for the OmniVision @@ -742,8 +790,9 @@ config VIDEO_OV6650 config VIDEO_OV5670 tristate "OmniVision OV5670 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API - depends on MEDIA_CONTROLLER + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a Video4Linux2 sensor driver for the OmniVision @@ -754,8 +803,9 @@ config VIDEO_OV5670 config VIDEO_OV5675 tristate "OmniVision OV5675 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API - depends on MEDIA_CONTROLLER + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a Video4Linux2 sensor driver for the OmniVision @@ -777,7 +827,9 @@ config VIDEO_OV5695 config VIDEO_OV7251 tristate "OmniVision OV7251 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a Video4Linux2 sensor driver for the OmniVision @@ -826,7 +878,9 @@ config VIDEO_OV7740 config VIDEO_OV8856 tristate "OmniVision OV8856 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a Video4Linux2 sensor driver for the OmniVision @@ -844,7 +898,9 @@ config VIDEO_OV9640 config VIDEO_OV9650 tristate "OmniVision OV9650/OV9652 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select REGMAP_SCCB help This is a V4L2 sensor driver for the Omnivision @@ -852,7 +908,9 @@ config VIDEO_OV9650 config VIDEO_OV13858 tristate "OmniVision OV13858 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a Video4Linux2 sensor driver for the OmniVision @@ -870,14 +928,18 @@ config VIDEO_VS6624 config VIDEO_MT9M001 tristate "mt9m001 support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help This driver supports MT9M001 cameras from Micron, monochrome and colour models. config VIDEO_MT9M032 tristate "MT9M032 camera sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEO_APTINA_PLL help This driver supports MT9M032 camera sensors from Aptina, monochrome @@ -893,7 +955,9 @@ config VIDEO_MT9M111 config VIDEO_MT9P031 tristate "Aptina MT9P031 support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEO_APTINA_PLL help This is a Video4Linux2 sensor driver for the Aptina @@ -901,7 +965,9 @@ config VIDEO_MT9P031 config VIDEO_MT9T001 tristate "Aptina MT9T001 support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help This is a Video4Linux2 sensor driver for the Aptina (Micron) mt0t001 3 Mpixel camera. @@ -926,7 +992,9 @@ config VIDEO_MT9V011 config VIDEO_MT9V032 tristate "Micron MT9V032 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select REGMAP_I2C select V4L2_FWNODE help @@ -951,7 +1019,9 @@ config VIDEO_SR030PC30 config VIDEO_NOON010PC30 tristate "Siliconfile NOON010PC30 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help This driver supports NOON010PC30 CIF camera from Siliconfile @@ -969,21 +1039,27 @@ config VIDEO_RJ54N1 config VIDEO_S5K6AA tristate "Samsung S5K6AAFX sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help This is a V4L2 sensor driver for Samsung S5K6AA(FX) 1.3M camera sensor with an embedded SoC image signal processor. config VIDEO_S5K6A3 tristate "Samsung S5K6A3 sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help This is a V4L2 sensor driver for Samsung S5K6A3 raw camera sensor. config VIDEO_S5K4ECGX tristate "Samsung S5K4ECGX sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select CRC32 help This is a V4L2 sensor driver for Samsung S5K4ECGX 5M @@ -991,7 +1067,9 @@ config VIDEO_S5K4ECGX config VIDEO_S5K5BAF tristate "Samsung S5K5BAF sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a V4L2 sensor driver for Samsung S5K5BAF 2M @@ -1002,28 +1080,29 @@ source "drivers/media/i2c/et8ek8/Kconfig" config VIDEO_S5C73M3 tristate "Samsung S5C73M3 sensor support" - depends on I2C && SPI && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && SPI && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a V4L2 sensor driver for Samsung S5C73M3 8 Mpixel camera. -endif comment "Lens drivers" -if MEDIA_CAMERA_SUPPORT - config VIDEO_AD5820 tristate "AD5820 lens voice coil support" - depends on GPIOLIB && I2C && VIDEO_V4L2 && MEDIA_CONTROLLER + depends on GPIOLIB && I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER help This is a driver for the AD5820 camera lens voice coil. It is used for example in Nokia N900 (RX-51). config VIDEO_AK7375 tristate "AK7375 lens voice coil support" - depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER - depends on VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help This is a driver for the AK7375 camera lens voice coil. AK7375 is a 12 bit DAC with 120mA output current sink @@ -1032,8 +1111,9 @@ config VIDEO_AK7375 config VIDEO_DW9714 tristate "DW9714 lens voice coil support" - depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER - depends on VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help This is a driver for the DW9714 camera lens voice coil. DW9714 is a 10 bit DAC with 120mA output current sink @@ -1042,30 +1122,30 @@ config VIDEO_DW9714 config VIDEO_DW9807_VCM tristate "DW9807 lens voice coil support" - depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER - depends on VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help This is a driver for the DW9807 camera lens voice coil. DW9807 is a 10 bit DAC with 100mA output current sink capability. This is designed for linear control of voice coil motors, controlled via I2C serial interface. -endif comment "Flash devices" -if MEDIA_CAMERA_SUPPORT - config VIDEO_ADP1653 tristate "ADP1653 flash support" - depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER help This is a driver for the ADP1653 flash controller. It is used for example in Nokia N900. config VIDEO_LM3560 tristate "LM3560 dual flash driver support" - depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER select REGMAP_I2C help This is a driver for the lm3560 dual flash controllers. It controls @@ -1073,13 +1153,18 @@ config VIDEO_LM3560 config VIDEO_LM3646 tristate "LM3646 dual flash driver support" - depends on I2C && VIDEO_V4L2 && MEDIA_CONTROLLER + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER select REGMAP_I2C help This is a driver for the lm3646 dual flash controllers. It controls flash, torch LEDs. -endif +endif # MEDIA_CAMERA_SUPPORT + +# +# Other V4L2 drivers that aren't related with Camera support +# comment "Video improvement chips" @@ -1168,8 +1253,9 @@ config VIDEO_I2C config VIDEO_ST_MIPID02 tristate "STMicroelectronics MIPID02 CSI-2 to PARALLEL bridge" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API - depends on MEDIA_CAMERA_SUPPORT + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help Support for STMicroelectronics MIPID02 CSI-2 to PARALLEL bridge. @@ -1181,4 +1267,4 @@ config VIDEO_ST_MIPID02 endmenu -endif +endif # VIDEO_V4L2 diff --git a/drivers/media/i2c/et8ek8/Kconfig b/drivers/media/i2c/et8ek8/Kconfig index 1c6909874d56..afcc4ea764f6 100644 --- a/drivers/media/i2c/et8ek8/Kconfig +++ b/drivers/media/i2c/et8ek8/Kconfig @@ -1,7 +1,9 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_ET8EK8 tristate "ET8EK8 camera sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help This is a driver for the Toshiba ET8EK8 5 MP camera sensor. diff --git a/drivers/media/i2c/m5mols/Kconfig b/drivers/media/i2c/m5mols/Kconfig index e573482f269f..6f0ef33b7ee1 100644 --- a/drivers/media/i2c/m5mols/Kconfig +++ b/drivers/media/i2c/m5mols/Kconfig @@ -1,7 +1,8 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_M5MOLS tristate "Fujitsu M-5MOLS 8MP sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API - depends on MEDIA_CAMERA_SUPPORT + depends on I2C && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help This driver supports Fujitsu M-5MOLS camera sensor with ISP diff --git a/drivers/media/i2c/smiapp/Kconfig b/drivers/media/i2c/smiapp/Kconfig index fcaa7f9494a8..6893b532824f 100644 --- a/drivers/media/i2c/smiapp/Kconfig +++ b/drivers/media/i2c/smiapp/Kconfig @@ -1,8 +1,9 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_SMIAPP tristate "SMIA++/SMIA sensor support" - depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && HAVE_CLK - depends on MEDIA_CAMERA_SUPPORT + depends on I2C && VIDEO_V4L2 && HAVE_CLK + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEO_SMIAPP_PLL select V4L2_FWNODE help diff --git a/drivers/media/mc/Kconfig b/drivers/media/mc/Kconfig index 0c5c52f14c64..e740ace54d7f 100644 --- a/drivers/media/mc/Kconfig +++ b/drivers/media/mc/Kconfig @@ -7,7 +7,7 @@ config MEDIA_CONTROLLER bool "Media Controller API" - depends on MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_DIGITAL_TV_SUPPORT + default MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_DIGITAL_TV_SUPPORT || MEDIA_PLATFORM_SUPPORT help Enable the media controller API used to query media devices internal topology and configure it dynamically. diff --git a/drivers/media/pci/cobalt/Kconfig b/drivers/media/pci/cobalt/Kconfig index e0e7df460a92..d8d9ea6b09bc 100644 --- a/drivers/media/pci/cobalt/Kconfig +++ b/drivers/media/pci/cobalt/Kconfig @@ -1,11 +1,13 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_COBALT tristate "Cisco Cobalt support" - depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 && I2C depends on PCI_MSI && MTD_COMPLEX_MAPPINGS depends on (GPIOLIB && DRM_I2C_ADV7511=n) || COMPILE_TEST depends on SND depends on MTD + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select I2C_ALGOBIT select SND_PCM select VIDEO_ADV7604 diff --git a/drivers/media/pci/intel/ipu3/Kconfig b/drivers/media/pci/intel/ipu3/Kconfig index f35bba16b60e..82d7f17e6a02 100644 --- a/drivers/media/pci/intel/ipu3/Kconfig +++ b/drivers/media/pci/intel/ipu3/Kconfig @@ -2,9 +2,9 @@ config VIDEO_IPU3_CIO2 tristate "Intel ipu3-cio2 driver" depends on VIDEO_V4L2 && PCI - depends on VIDEO_V4L2_SUBDEV_API depends on (X86 && ACPI) || COMPILE_TEST - depends on MEDIA_CONTROLLER + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE select VIDEOBUF2_DMA_SG diff --git a/drivers/media/pci/sta2x11/Kconfig b/drivers/media/pci/sta2x11/Kconfig index 011b766f0bff..4dd98f94a91e 100644 --- a/drivers/media/pci/sta2x11/Kconfig +++ b/drivers/media/pci/sta2x11/Kconfig @@ -1,12 +1,12 @@ # SPDX-License-Identifier: GPL-2.0-only config STA2X11_VIP tristate "STA2X11 VIP Video For Linux" + depends on PCI && VIDEO_V4L2 && VIRT_TO_BUS && I2C depends on STA2X11 || COMPILE_TEST select VIDEO_ADV7180 if MEDIA_SUBDRV_AUTOSELECT select VIDEOBUF2_DMA_CONTIG - depends on PCI && VIDEO_V4L2 && VIRT_TO_BUS - depends on VIDEO_V4L2_SUBDEV_API - depends on I2C + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help Say Y for support for STA2X11 VIP (Video Input Port) capture device. diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig index 6b693cd0576e..b8b2de5f1541 100644 --- a/drivers/media/platform/Kconfig +++ b/drivers/media/platform/Kconfig @@ -63,7 +63,9 @@ config VIDEO_VIU config VIDEO_MUX tristate "Video Multiplexer" select MULTIPLEXER - depends on VIDEO_V4L2 && OF && VIDEO_V4L2_SUBDEV_API && MEDIA_CONTROLLER + depends on VIDEO_V4L2 && OF + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select REGMAP select V4L2_FWNODE help @@ -71,10 +73,12 @@ config VIDEO_MUX config VIDEO_OMAP3 tristate "OMAP 3 Camera support" - depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 && I2C depends on (ARCH_OMAP3 && OMAP_IOMMU) || COMPILE_TEST depends on COMMON_CLK && OF select ARM_DMA_USE_IOMMU if OMAP_IOMMU + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEOBUF2_DMA_CONTIG select MFD_SYSCON select V4L2_FWNODE @@ -99,16 +103,19 @@ config VIDEO_PXA27x config VIDEO_QCOM_CAMSS tristate "Qualcomm V4L2 Camera Subsystem driver" - depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 depends on (ARCH_QCOM && IOMMU_DMA) || COMPILE_TEST + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEOBUF2_DMA_SG select V4L2_FWNODE config VIDEO_S3C_CAMIF tristate "Samsung S3C24XX/S3C64XX SoC Camera Interface driver" - depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API - depends on PM + depends on VIDEO_V4L2 && I2C && PM depends on ARCH_S3C64XX || PLAT_S3C24XX || COMPILE_TEST + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEOBUF2_DMA_CONTIG help This is a v4l2 driver for s3c24xx and s3c64xx SoC series camera @@ -119,9 +126,10 @@ config VIDEO_S3C_CAMIF config VIDEO_STM32_DCMI tristate "STM32 Digital Camera Memory Interface (DCMI) support" - depends on VIDEO_V4L2 && OF && MEDIA_CONTROLLER + depends on VIDEO_V4L2 && OF depends on ARCH_STM32 || COMPILE_TEST select VIDEOBUF2_DMA_CONTIG + select MEDIA_CONTROLLER select V4L2_FWNODE help This module makes the STM32 Digital Camera Memory Interface (DCMI) @@ -148,7 +156,9 @@ source "drivers/media/platform/sunxi/Kconfig" config VIDEO_TI_CAL tristate "TI CAL (Camera Adaptation Layer) driver" - depends on VIDEO_DEV && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_DEV && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API depends on SOC_DRA7XX || ARCH_K3 || COMPILE_TEST select VIDEOBUF2_DMA_CONTIG select V4L2_FWNODE @@ -432,9 +442,11 @@ config VIDEO_RENESAS_FCP config VIDEO_RENESAS_VSP1 tristate "Renesas VSP1 Video Processing Engine" - depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 depends on ARCH_RENESAS || COMPILE_TEST depends on (!ARM64 && !VIDEO_RENESAS_FCP) || VIDEO_RENESAS_FCP + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEOBUF2_DMA_CONTIG select VIDEOBUF2_VMALLOC help diff --git a/drivers/media/platform/am437x/Kconfig b/drivers/media/platform/am437x/Kconfig index d6f2e3d0cbef..9ef898f512de 100644 --- a/drivers/media/platform/am437x/Kconfig +++ b/drivers/media/platform/am437x/Kconfig @@ -1,8 +1,10 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_AM437X_VPFE tristate "TI AM437x VPFE video capture driver" - depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 depends on SOC_AM43XX || COMPILE_TEST + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEOBUF2_DMA_CONTIG select V4L2_FWNODE help diff --git a/drivers/media/platform/atmel/Kconfig b/drivers/media/platform/atmel/Kconfig index 5ae3f60b81b1..1850fe7f9360 100644 --- a/drivers/media/platform/atmel/Kconfig +++ b/drivers/media/platform/atmel/Kconfig @@ -1,8 +1,10 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_ATMEL_ISC tristate "ATMEL Image Sensor Controller (ISC) support" - depends on VIDEO_V4L2 && COMMON_CLK && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 && COMMON_CLK depends on ARCH_AT91 || COMPILE_TEST + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEOBUF2_DMA_CONTIG select REGMAP_MMIO select V4L2_FWNODE diff --git a/drivers/media/platform/cadence/Kconfig b/drivers/media/platform/cadence/Kconfig index c154e368d701..80cf601323ce 100644 --- a/drivers/media/platform/cadence/Kconfig +++ b/drivers/media/platform/cadence/Kconfig @@ -13,8 +13,8 @@ if VIDEO_CADENCE config VIDEO_CADENCE_CSI2RX tristate "Cadence MIPI-CSI2 RX Controller" depends on VIDEO_V4L2 - depends on MEDIA_CONTROLLER - depends on VIDEO_V4L2_SUBDEV_API + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help Support for the Cadence MIPI CSI2 Receiver controller. @@ -25,8 +25,8 @@ config VIDEO_CADENCE_CSI2RX config VIDEO_CADENCE_CSI2TX tristate "Cadence MIPI-CSI2 TX Controller" depends on VIDEO_V4L2 - depends on MEDIA_CONTROLLER - depends on VIDEO_V4L2_SUBDEV_API + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help Support for the Cadence MIPI CSI2 Transceiver controller. diff --git a/drivers/media/platform/exynos4-is/Kconfig b/drivers/media/platform/exynos4-is/Kconfig index be4effcbfe7b..136d3b2a0fbb 100644 --- a/drivers/media/platform/exynos4-is/Kconfig +++ b/drivers/media/platform/exynos4-is/Kconfig @@ -2,9 +2,10 @@ config VIDEO_SAMSUNG_EXYNOS4_IS tristate "Samsung S5P/EXYNOS4 SoC series Camera Subsystem driver" - depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 && OF && COMMON_CLK depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST - depends on OF && COMMON_CLK + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE help Say Y here to enable camera host interface devices for diff --git a/drivers/media/platform/rcar-vin/Kconfig b/drivers/media/platform/rcar-vin/Kconfig index 240ac3f3c941..ca0d906dce2f 100644 --- a/drivers/media/platform/rcar-vin/Kconfig +++ b/drivers/media/platform/rcar-vin/Kconfig @@ -1,8 +1,10 @@ # SPDX-License-Identifier: GPL-2.0 config VIDEO_RCAR_CSI2 tristate "R-Car MIPI CSI-2 Receiver" - depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF + depends on VIDEO_V4L2 && OF depends on ARCH_RENESAS || COMPILE_TEST + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select RESET_CONTROLLER select V4L2_FWNODE help @@ -14,8 +16,10 @@ config VIDEO_RCAR_CSI2 config VIDEO_RCAR_VIN tristate "R-Car Video Input (VIN) Driver" - depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF && MEDIA_CONTROLLER + depends on VIDEO_V4L2 && OF depends on ARCH_RENESAS || COMPILE_TEST + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEOBUF2_DMA_CONTIG select V4L2_FWNODE help diff --git a/drivers/media/platform/sunxi/sun4i-csi/Kconfig b/drivers/media/platform/sunxi/sun4i-csi/Kconfig index 93b4e82a2655..903c6152f6e8 100644 --- a/drivers/media/platform/sunxi/sun4i-csi/Kconfig +++ b/drivers/media/platform/sunxi/sun4i-csi/Kconfig @@ -2,8 +2,10 @@ config VIDEO_SUN4I_CSI tristate "Allwinner A10 CMOS Sensor Interface Support" - depends on VIDEO_V4L2 && COMMON_CLK && VIDEO_V4L2_SUBDEV_API && HAS_DMA + depends on VIDEO_V4L2 && COMMON_CLK && HAS_DMA depends on ARCH_SUNXI || COMPILE_TEST + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEOBUF2_DMA_CONTIG select V4L2_FWNODE help diff --git a/drivers/media/platform/sunxi/sun6i-csi/Kconfig b/drivers/media/platform/sunxi/sun6i-csi/Kconfig index 269b3ebf4f52..586e3fb3a80d 100644 --- a/drivers/media/platform/sunxi/sun6i-csi/Kconfig +++ b/drivers/media/platform/sunxi/sun6i-csi/Kconfig @@ -1,8 +1,10 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_SUN6I_CSI tristate "Allwinner V3s Camera Sensor Interface driver" - depends on VIDEO_V4L2 && COMMON_CLK && VIDEO_V4L2_SUBDEV_API && HAS_DMA + depends on VIDEO_V4L2 && COMMON_CLK && HAS_DMA depends on ARCH_SUNXI || COMPILE_TEST + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEOBUF2_DMA_CONTIG select REGMAP_MMIO select V4L2_FWNODE diff --git a/drivers/media/platform/xilinx/Kconfig b/drivers/media/platform/xilinx/Kconfig index a2773ad7c185..01c96fb66414 100644 --- a/drivers/media/platform/xilinx/Kconfig +++ b/drivers/media/platform/xilinx/Kconfig @@ -2,7 +2,9 @@ config VIDEO_XILINX tristate "Xilinx Video IP (EXPERIMENTAL)" - depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && OF && HAS_DMA + depends on VIDEO_V4L2 && OF && HAS_DMA + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEOBUF2_DMA_CONTIG select V4L2_FWNODE help diff --git a/drivers/media/spi/Kconfig b/drivers/media/spi/Kconfig index bcc49cb47de6..bf385d503cab 100644 --- a/drivers/media/spi/Kconfig +++ b/drivers/media/spi/Kconfig @@ -9,7 +9,9 @@ menu "SPI helper chips" config VIDEO_GS1662 tristate "Gennum Serializers video" - depends on SPI && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on SPI && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API help Enable the GS1662 driver which serializes video streams. diff --git a/drivers/media/test_drivers/vimc/Kconfig b/drivers/media/test_drivers/vimc/Kconfig index bd221d3e1a4a..4068a67585f9 100644 --- a/drivers/media/test_drivers/vimc/Kconfig +++ b/drivers/media/test_drivers/vimc/Kconfig @@ -1,7 +1,9 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_VIMC tristate "Virtual Media Controller Driver (VIMC)" - depends on VIDEO_DEV && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_DEV && VIDEO_V4L2 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEOBUF2_VMALLOC select VIDEO_V4L2_TPG help diff --git a/drivers/staging/media/hantro/Kconfig b/drivers/staging/media/hantro/Kconfig index 99aed9a5b0b9..68e5b06cdab7 100644 --- a/drivers/staging/media/hantro/Kconfig +++ b/drivers/staging/media/hantro/Kconfig @@ -2,8 +2,9 @@ config VIDEO_HANTRO tristate "Hantro VPU driver" depends on ARCH_MXC || ARCH_ROCKCHIP || COMPILE_TEST - depends on VIDEO_DEV && VIDEO_V4L2 && MEDIA_CONTROLLER - depends on MEDIA_CONTROLLER_REQUEST_API + depends on VIDEO_DEV && VIDEO_V4L2 + select MEDIA_CONTROLLER + select MEDIA_CONTROLLER_REQUEST_API select VIDEOBUF2_DMA_CONTIG select VIDEOBUF2_VMALLOC select V4L2_MEM2MEM_DEV diff --git a/drivers/staging/media/imx/Kconfig b/drivers/staging/media/imx/Kconfig index 8f1ae50a4abd..f555aac8a9d5 100644 --- a/drivers/staging/media/imx/Kconfig +++ b/drivers/staging/media/imx/Kconfig @@ -2,8 +2,9 @@ config VIDEO_IMX_MEDIA tristate "i.MX5/6 V4L2 media core driver" depends on ARCH_MXC || COMPILE_TEST - depends on MEDIA_CONTROLLER && VIDEO_V4L2 && IMX_IPUV3_CORE - depends on VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 && IMX_IPUV3_CORE + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API depends on HAS_DMA select VIDEOBUF2_DMA_CONTIG select V4L2_FWNODE diff --git a/drivers/staging/media/ipu3/Kconfig b/drivers/staging/media/ipu3/Kconfig index 4b51c67eac88..3e9640523e50 100644 --- a/drivers/staging/media/ipu3/Kconfig +++ b/drivers/staging/media/ipu3/Kconfig @@ -2,8 +2,9 @@ config VIDEO_IPU3_IMGU tristate "Intel ipu3-imgu driver" depends on PCI && VIDEO_V4L2 - depends on MEDIA_CONTROLLER && VIDEO_V4L2_SUBDEV_API depends on X86 + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select IOMMU_IOVA select VIDEOBUF2_DMA_SG help diff --git a/drivers/staging/media/omap4iss/Kconfig b/drivers/staging/media/omap4iss/Kconfig index 4dcbc5065821..6c254907a27b 100644 --- a/drivers/staging/media/omap4iss/Kconfig +++ b/drivers/staging/media/omap4iss/Kconfig @@ -2,8 +2,10 @@ config VIDEO_OMAP4 tristate "OMAP 4 Camera support" - depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && I2C + depends on VIDEO_V4L2 && I2C depends on ARCH_OMAP4 || COMPILE_TEST + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select MFD_SYSCON select VIDEOBUF2_DMA_CONTIG help diff --git a/drivers/staging/media/rkisp1/Kconfig b/drivers/staging/media/rkisp1/Kconfig index b859a493caba..5ecbefa0f5ec 100644 --- a/drivers/staging/media/rkisp1/Kconfig +++ b/drivers/staging/media/rkisp1/Kconfig @@ -2,8 +2,10 @@ config VIDEO_ROCKCHIP_ISP1 tristate "Rockchip Image Signal Processing v1 Unit driver" - depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API + depends on VIDEO_V4L2 depends on ARCH_ROCKCHIP || COMPILE_TEST + select MEDIA_CONTROLLER + select VIDEO_V4L2_SUBDEV_API select VIDEOBUF2_DMA_CONTIG select VIDEOBUF2_VMALLOC select V4L2_FWNODE diff --git a/drivers/staging/media/sunxi/cedrus/Kconfig b/drivers/staging/media/sunxi/cedrus/Kconfig index 17733e9a088f..da369950bbf2 100644 --- a/drivers/staging/media/sunxi/cedrus/Kconfig +++ b/drivers/staging/media/sunxi/cedrus/Kconfig @@ -1,10 +1,11 @@ # SPDX-License-Identifier: GPL-2.0 config VIDEO_SUNXI_CEDRUS tristate "Allwinner Cedrus VPU driver" - depends on VIDEO_DEV && VIDEO_V4L2 && MEDIA_CONTROLLER + depends on VIDEO_DEV && VIDEO_V4L2 depends on HAS_DMA depends on OF - depends on MEDIA_CONTROLLER_REQUEST_API + select MEDIA_CONTROLLER + select MEDIA_CONTROLLER_REQUEST_API select SUNXI_SRAM select VIDEOBUF2_DMA_CONTIG select V4L2_MEM2MEM_DEV -- cgit v1.2.3 From 087362d96356c213b1b1cfc835951c91a04ed433 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Fri, 6 Mar 2020 06:26:59 +0100 Subject: media: docs: cx18-streams.c: fix broken references to docs There are two places inside this file that points to the cx2341x documentation, with was split into two. Looking at changeset dcc0ef88209a ("V4L/DVB (10442): cx18: Fixes for enforcing when Encoder Raw VBI params can be set") with added those comments, it was originally pointing to: Documentation/video4linux/cx2341x/fw-encoder-api.txt Well, the firmware details went to Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/cx18/cx18-streams.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/pci/cx18/cx18-streams.c b/drivers/media/pci/cx18/cx18-streams.c index 3178df3c4922..0e2365c9f4ad 100644 --- a/drivers/media/pci/cx18/cx18-streams.c +++ b/drivers/media/pci/cx18/cx18-streams.c @@ -845,7 +845,7 @@ int cx18_start_v4l2_encode_stream(struct cx18_stream *s) /* * Audio related reset according to - * Documentation/media/v4l-drivers/cx2341x.rst + * Documentation/media/v4l-drivers/cx2341x-devel.rst */ if (atomic_read(&cx->ana_capturing) == 0) cx18_vapi(cx, CX18_CPU_SET_MISC_PARAMETERS, 2, @@ -853,7 +853,7 @@ int cx18_start_v4l2_encode_stream(struct cx18_stream *s) /* * Number of lines for Field 1 & Field 2 according to - * Documentation/media/v4l-drivers/cx2341x.rst + * Documentation/media/v4l-drivers/cx2341x-devel.rst * Field 1 is 312 for 625 line systems in BT.656 * Field 2 is 313 for 625 line systems in BT.656 */ -- cgit v1.2.3 From 32e2eae23f8fd1b90d86f4d04ca9790952d9d928 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Wed, 4 Mar 2020 13:08:03 +0100 Subject: media: docs: move user-facing docs to the admin guide Most of the driver-specific documentation is meant to help users of the media subsystem. Move them to the admin-guide. It should be noticed, however, that several of those files are outdated and will require further work in order to make them useful again. Signed-off-by: Mauro Carvalho Chehab --- Documentation/admin-guide/index.rst | 1 + Documentation/admin-guide/kernel-parameters.txt | 4 +- .../admin-guide/media/au0828-cardlist.rst | 39 + Documentation/admin-guide/media/avermedia.rst | 273 +++ Documentation/admin-guide/media/bt8xx.rst | 124 ++ Documentation/admin-guide/media/bttv-cardlist.rst | 683 ++++++++ Documentation/admin-guide/media/bttv.rst | 1806 ++++++++++++++++++++ Documentation/admin-guide/media/cafe_ccic.rst | 62 + Documentation/admin-guide/media/cardlist.rst | 20 + Documentation/admin-guide/media/cards.rst | 146 ++ Documentation/admin-guide/media/ci.rst | 77 + Documentation/admin-guide/media/cpia2.rst | 149 ++ .../admin-guide/media/cx23885-cardlist.rst | 263 +++ Documentation/admin-guide/media/cx88-cardlist.rst | 379 ++++ Documentation/admin-guide/media/cx88.rst | 58 + Documentation/admin-guide/media/davinci-vpbe.rst | 65 + .../admin-guide/media/em28xx-cardlist.rst | 428 +++++ Documentation/admin-guide/media/faq.rst | 169 ++ Documentation/admin-guide/media/fimc.rst | 153 ++ Documentation/admin-guide/media/gspca-cardlist.rst | 451 +++++ Documentation/admin-guide/media/imx.rst | 621 +++++++ Documentation/admin-guide/media/imx7.rst | 161 ++ Documentation/admin-guide/media/index.rst | 104 ++ Documentation/admin-guide/media/intro.rst | 23 + Documentation/admin-guide/media/ipu3.rst | 558 ++++++ Documentation/admin-guide/media/ipu3_rcb.svg | 331 ++++ Documentation/admin-guide/media/ivtv-cardlist.rst | 139 ++ Documentation/admin-guide/media/ivtv.rst | 218 +++ Documentation/admin-guide/media/lmedm04.rst | 107 ++ Documentation/admin-guide/media/meye.rst | 93 + Documentation/admin-guide/media/omap3isp.rst | 92 + Documentation/admin-guide/media/omap4_camera.rst | 62 + Documentation/admin-guide/media/opera-firmware.rst | 33 + Documentation/admin-guide/media/philips.rst | 247 +++ Documentation/admin-guide/media/pulse8-cec.rst | 13 + Documentation/admin-guide/media/qcom_camss.rst | 185 ++ .../admin-guide/media/qcom_camss_8x96_graph.dot | 106 ++ .../admin-guide/media/qcom_camss_graph.dot | 43 + Documentation/admin-guide/media/rcar-fdp1.rst | 39 + .../admin-guide/media/saa7134-cardlist.rst | 803 +++++++++ Documentation/admin-guide/media/saa7134.rst | 61 + .../admin-guide/media/saa7164-cardlist.rst | 71 + Documentation/admin-guide/media/si470x.rst | 167 ++ Documentation/admin-guide/media/si4713.rst | 192 +++ Documentation/admin-guide/media/si476x.rst | 160 ++ Documentation/admin-guide/media/technisat.rst | 100 ++ .../admin-guide/media/tm6000-cardlist.rst | 83 + Documentation/admin-guide/media/ttusb-dec.rst | 45 + Documentation/admin-guide/media/tuner-cardlist.rst | 100 ++ Documentation/admin-guide/media/udev.rst | 63 + .../admin-guide/media/usbvision-cardlist.rst | 283 +++ Documentation/admin-guide/media/v4l-with-ir.rst | 75 + Documentation/admin-guide/media/vimc.dot | 22 + Documentation/admin-guide/media/vimc.rst | 90 + Documentation/admin-guide/media/vivid.rst | 1393 +++++++++++++++ Documentation/admin-guide/media/zr364xx.rst | 110 ++ Documentation/media/cec-drivers/index.rst | 34 - Documentation/media/cec-drivers/pulse8-cec.rst | 13 - Documentation/media/dvb-drivers/avermedia.rst | 273 --- Documentation/media/dvb-drivers/bt8xx.rst | 124 -- Documentation/media/dvb-drivers/cards.rst | 146 -- Documentation/media/dvb-drivers/ci.rst | 77 - Documentation/media/dvb-drivers/faq.rst | 169 -- Documentation/media/dvb-drivers/index.rst | 11 - Documentation/media/dvb-drivers/intro.rst | 23 - Documentation/media/dvb-drivers/lmedm04.rst | 107 -- Documentation/media/dvb-drivers/opera-firmware.rst | 33 - Documentation/media/dvb-drivers/technisat.rst | 100 -- Documentation/media/dvb-drivers/ttusb-dec.rst | 45 - Documentation/media/dvb-drivers/udev.rst | 63 - Documentation/media/index.rst | 4 +- .../media/v4l-drivers/au0828-cardlist.rst | 39 - Documentation/media/v4l-drivers/bttv-cardlist.rst | 683 -------- Documentation/media/v4l-drivers/bttv.rst | 1806 -------------------- Documentation/media/v4l-drivers/cafe_ccic.rst | 62 - Documentation/media/v4l-drivers/cardlist.rst | 20 - Documentation/media/v4l-drivers/cpia2.rst | 149 -- .../media/v4l-drivers/cx23885-cardlist.rst | 263 --- Documentation/media/v4l-drivers/cx88-cardlist.rst | 379 ---- Documentation/media/v4l-drivers/cx88.rst | 58 - Documentation/media/v4l-drivers/davinci-vpbe.rst | 65 - .../media/v4l-drivers/em28xx-cardlist.rst | 428 ----- Documentation/media/v4l-drivers/fimc.rst | 153 -- Documentation/media/v4l-drivers/gspca-cardlist.rst | 451 ----- Documentation/media/v4l-drivers/imx.rst | 621 ------- Documentation/media/v4l-drivers/imx7.rst | 161 -- Documentation/media/v4l-drivers/index.rst | 25 - Documentation/media/v4l-drivers/ipu3.rst | 558 ------ Documentation/media/v4l-drivers/ipu3_rcb.svg | 331 ---- Documentation/media/v4l-drivers/ivtv-cardlist.rst | 139 -- Documentation/media/v4l-drivers/ivtv.rst | 218 --- Documentation/media/v4l-drivers/meye.rst | 93 - Documentation/media/v4l-drivers/omap3isp.rst | 92 - Documentation/media/v4l-drivers/omap4_camera.rst | 62 - Documentation/media/v4l-drivers/philips.rst | 247 --- Documentation/media/v4l-drivers/qcom_camss.rst | 185 -- .../media/v4l-drivers/qcom_camss_8x96_graph.dot | 106 -- .../media/v4l-drivers/qcom_camss_graph.dot | 43 - Documentation/media/v4l-drivers/rcar-fdp1.rst | 39 - .../media/v4l-drivers/saa7134-cardlist.rst | 803 --------- Documentation/media/v4l-drivers/saa7134.rst | 61 - .../media/v4l-drivers/saa7164-cardlist.rst | 71 - Documentation/media/v4l-drivers/si470x.rst | 167 -- Documentation/media/v4l-drivers/si4713.rst | 192 --- Documentation/media/v4l-drivers/si476x.rst | 160 -- .../media/v4l-drivers/tm6000-cardlist.rst | 83 - Documentation/media/v4l-drivers/tuner-cardlist.rst | 100 -- .../media/v4l-drivers/usbvision-cardlist.rst | 283 --- Documentation/media/v4l-drivers/v4l-with-ir.rst | 75 - Documentation/media/v4l-drivers/vimc.dot | 22 - Documentation/media/v4l-drivers/vimc.rst | 90 - Documentation/media/v4l-drivers/vivid.rst | 1393 --------------- Documentation/media/v4l-drivers/zr364xx.rst | 110 -- .../translations/zh_CN/video4linux/omap3isp.txt | 4 +- .../userspace-api/media/v4l/dev-sliced-vbi.rst | 2 +- .../userspace-api/media/v4l/ext-ctrls-codec.rst | 2 +- .../media/v4l/ext-ctrls-image-process.rst | 2 +- .../userspace-api/media/v4l/pixfmt-reserved.rst | 2 +- MAINTAINERS | 22 +- drivers/media/pci/bt8xx/Kconfig | 2 +- drivers/media/pci/meye/Kconfig | 2 +- drivers/media/radio/si470x/Kconfig | 2 +- drivers/media/usb/dvb-usb-v2/lmedm04.c | 2 +- drivers/media/usb/gspca/Kconfig | 2 +- drivers/media/usb/zr364xx/Kconfig | 2 +- 125 files changed, 12366 insertions(+), 12331 deletions(-) create mode 100644 Documentation/admin-guide/media/au0828-cardlist.rst create mode 100644 Documentation/admin-guide/media/avermedia.rst create mode 100644 Documentation/admin-guide/media/bt8xx.rst create mode 100644 Documentation/admin-guide/media/bttv-cardlist.rst create mode 100644 Documentation/admin-guide/media/bttv.rst create mode 100644 Documentation/admin-guide/media/cafe_ccic.rst create mode 100644 Documentation/admin-guide/media/cardlist.rst create mode 100644 Documentation/admin-guide/media/cards.rst create mode 100644 Documentation/admin-guide/media/ci.rst create mode 100644 Documentation/admin-guide/media/cpia2.rst create mode 100644 Documentation/admin-guide/media/cx23885-cardlist.rst create mode 100644 Documentation/admin-guide/media/cx88-cardlist.rst create mode 100644 Documentation/admin-guide/media/cx88.rst create mode 100644 Documentation/admin-guide/media/davinci-vpbe.rst create mode 100644 Documentation/admin-guide/media/em28xx-cardlist.rst create mode 100644 Documentation/admin-guide/media/faq.rst create mode 100644 Documentation/admin-guide/media/fimc.rst create mode 100644 Documentation/admin-guide/media/gspca-cardlist.rst create mode 100644 Documentation/admin-guide/media/imx.rst create mode 100644 Documentation/admin-guide/media/imx7.rst create mode 100644 Documentation/admin-guide/media/index.rst create mode 100644 Documentation/admin-guide/media/intro.rst create mode 100644 Documentation/admin-guide/media/ipu3.rst create mode 100644 Documentation/admin-guide/media/ipu3_rcb.svg create mode 100644 Documentation/admin-guide/media/ivtv-cardlist.rst create mode 100644 Documentation/admin-guide/media/ivtv.rst create mode 100644 Documentation/admin-guide/media/lmedm04.rst create mode 100644 Documentation/admin-guide/media/meye.rst create mode 100644 Documentation/admin-guide/media/omap3isp.rst create mode 100644 Documentation/admin-guide/media/omap4_camera.rst create mode 100644 Documentation/admin-guide/media/opera-firmware.rst create mode 100644 Documentation/admin-guide/media/philips.rst create mode 100644 Documentation/admin-guide/media/pulse8-cec.rst create mode 100644 Documentation/admin-guide/media/qcom_camss.rst create mode 100644 Documentation/admin-guide/media/qcom_camss_8x96_graph.dot create mode 100644 Documentation/admin-guide/media/qcom_camss_graph.dot create mode 100644 Documentation/admin-guide/media/rcar-fdp1.rst create mode 100644 Documentation/admin-guide/media/saa7134-cardlist.rst create mode 100644 Documentation/admin-guide/media/saa7134.rst create mode 100644 Documentation/admin-guide/media/saa7164-cardlist.rst create mode 100644 Documentation/admin-guide/media/si470x.rst create mode 100644 Documentation/admin-guide/media/si4713.rst create mode 100644 Documentation/admin-guide/media/si476x.rst create mode 100644 Documentation/admin-guide/media/technisat.rst create mode 100644 Documentation/admin-guide/media/tm6000-cardlist.rst create mode 100644 Documentation/admin-guide/media/ttusb-dec.rst create mode 100644 Documentation/admin-guide/media/tuner-cardlist.rst create mode 100644 Documentation/admin-guide/media/udev.rst create mode 100644 Documentation/admin-guide/media/usbvision-cardlist.rst create mode 100644 Documentation/admin-guide/media/v4l-with-ir.rst create mode 100644 Documentation/admin-guide/media/vimc.dot create mode 100644 Documentation/admin-guide/media/vimc.rst create mode 100644 Documentation/admin-guide/media/vivid.rst create mode 100644 Documentation/admin-guide/media/zr364xx.rst delete mode 100644 Documentation/media/cec-drivers/index.rst delete mode 100644 Documentation/media/cec-drivers/pulse8-cec.rst delete mode 100644 Documentation/media/dvb-drivers/avermedia.rst delete mode 100644 Documentation/media/dvb-drivers/bt8xx.rst delete mode 100644 Documentation/media/dvb-drivers/cards.rst delete mode 100644 Documentation/media/dvb-drivers/ci.rst delete mode 100644 Documentation/media/dvb-drivers/faq.rst delete mode 100644 Documentation/media/dvb-drivers/intro.rst delete mode 100644 Documentation/media/dvb-drivers/lmedm04.rst delete mode 100644 Documentation/media/dvb-drivers/opera-firmware.rst delete mode 100644 Documentation/media/dvb-drivers/technisat.rst delete mode 100644 Documentation/media/dvb-drivers/ttusb-dec.rst delete mode 100644 Documentation/media/dvb-drivers/udev.rst delete mode 100644 Documentation/media/v4l-drivers/au0828-cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/bttv-cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/bttv.rst delete mode 100644 Documentation/media/v4l-drivers/cafe_ccic.rst delete mode 100644 Documentation/media/v4l-drivers/cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/cpia2.rst delete mode 100644 Documentation/media/v4l-drivers/cx23885-cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/cx88-cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/cx88.rst delete mode 100644 Documentation/media/v4l-drivers/davinci-vpbe.rst delete mode 100644 Documentation/media/v4l-drivers/em28xx-cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/fimc.rst delete mode 100644 Documentation/media/v4l-drivers/gspca-cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/imx.rst delete mode 100644 Documentation/media/v4l-drivers/imx7.rst delete mode 100644 Documentation/media/v4l-drivers/ipu3.rst delete mode 100644 Documentation/media/v4l-drivers/ipu3_rcb.svg delete mode 100644 Documentation/media/v4l-drivers/ivtv-cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/ivtv.rst delete mode 100644 Documentation/media/v4l-drivers/meye.rst delete mode 100644 Documentation/media/v4l-drivers/omap3isp.rst delete mode 100644 Documentation/media/v4l-drivers/omap4_camera.rst delete mode 100644 Documentation/media/v4l-drivers/philips.rst delete mode 100644 Documentation/media/v4l-drivers/qcom_camss.rst delete mode 100644 Documentation/media/v4l-drivers/qcom_camss_8x96_graph.dot delete mode 100644 Documentation/media/v4l-drivers/qcom_camss_graph.dot delete mode 100644 Documentation/media/v4l-drivers/rcar-fdp1.rst delete mode 100644 Documentation/media/v4l-drivers/saa7134-cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/saa7134.rst delete mode 100644 Documentation/media/v4l-drivers/saa7164-cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/si470x.rst delete mode 100644 Documentation/media/v4l-drivers/si4713.rst delete mode 100644 Documentation/media/v4l-drivers/si476x.rst delete mode 100644 Documentation/media/v4l-drivers/tm6000-cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/tuner-cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/usbvision-cardlist.rst delete mode 100644 Documentation/media/v4l-drivers/v4l-with-ir.rst delete mode 100644 Documentation/media/v4l-drivers/vimc.dot delete mode 100644 Documentation/media/v4l-drivers/vimc.rst delete mode 100644 Documentation/media/v4l-drivers/vivid.rst delete mode 100644 Documentation/media/v4l-drivers/zr364xx.rst (limited to 'drivers/media/pci') diff --git a/Documentation/admin-guide/index.rst b/Documentation/admin-guide/index.rst index 5a6269fb8593..58c7f9fc2396 100644 --- a/Documentation/admin-guide/index.rst +++ b/Documentation/admin-guide/index.rst @@ -93,6 +93,7 @@ configure specific aspects of kernel behavior to your liking. lockup-watchdogs LSM/index md + media/index mm/index module-signing mono diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index f2a93c8679e8..3ed0b42ca6f0 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -458,7 +458,7 @@ bttv.card= [HW,V4L] bttv (bt848 + bt878 based grabber cards) bttv.radio= Most important insmod options are available as kernel args too. - bttv.pll= See Documentation/media/v4l-drivers/bttv.rst + bttv.pll= See Documentation/admin-guide/media/bttv.rst bttv.tuner= bulk_remove=off [PPC] This parameter disables the use of the pSeries @@ -2705,7 +2705,7 @@ See Documentation/admin-guide/pm/sleep-states.rst. meye.*= [HW] Set MotionEye Camera parameters - See Documentation/media/v4l-drivers/meye.rst. + See Documentation/admin-guide/media/meye.rst. mfgpt_irq= [IA-32] Specify the IRQ to use for the Multi-Function General Purpose Timers on AMD Geode diff --git a/Documentation/admin-guide/media/au0828-cardlist.rst b/Documentation/admin-guide/media/au0828-cardlist.rst new file mode 100644 index 000000000000..aaaadc934e7a --- /dev/null +++ b/Documentation/admin-guide/media/au0828-cardlist.rst @@ -0,0 +1,39 @@ +.. SPDX-License-Identifier: GPL-2.0 + +AU0828 cards list +================= + +.. tabularcolumns:: |p{1.4cm}|p{6.5cm}|p{10.0cm}| + +.. flat-table:: + :header-rows: 1 + :widths: 2 19 18 + :stub-columns: 0 + + * - Card number + - Card name + - USB IDs + + * - 0 + - Unknown board + - + + * - 1 + - Hauppauge HVR950Q + - 2040:7200, 2040:7210, 2040:7217, 2040:721b, 2040:721e, 2040:721f, 2040:7280, 0fd9:0008, 2040:7260, 2040:7213, 2040:7270 + + * - 2 + - Hauppauge HVR850 + - 2040:7240 + + * - 3 + - DViCO FusionHDTV USB + - 0fe9:d620 + + * - 4 + - Hauppauge HVR950Q rev xxF8 + - 2040:7201, 2040:7211, 2040:7281 + + * - 5 + - Hauppauge Woodbury + - 05e1:0480, 2040:8200 diff --git a/Documentation/admin-guide/media/avermedia.rst b/Documentation/admin-guide/media/avermedia.rst new file mode 100644 index 000000000000..bf35fd88e164 --- /dev/null +++ b/Documentation/admin-guide/media/avermedia.rst @@ -0,0 +1,273 @@ +.. SPDX-License-Identifier: GPL-2.0 + +HOWTO: Get An Avermedia DVB-T working under Linux +------------------------------------------------- + +February 14th 2006 + +.. note:: + + This documentation is outdated. Please check at the DVB wiki + at https://linuxtv.org/wiki for more updated info. + + There's a section there specific for Avermedia boards at: + https://linuxtv.org/wiki/index.php/AVerMedia + + +Assumptions and Introduction +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It is assumed that the reader understands the basic structure +of the Linux Kernel DVB drivers and the general principles of +Digital TV. + +One significant difference between Digital TV and Analogue TV +that the unwary (like myself) should consider is that, +although the component structure of budget DVB-T cards are +substantially similar to Analogue TV cards, they function in +substantially different ways. + +The purpose of an Analogue TV is to receive and display an +Analogue Television signal. An Analogue TV signal (otherwise +known as composite video) is an analogue encoding of a +sequence of image frames (25 per second) rasterised using an +interlacing technique. Interlacing takes two fields to +represent one frame. Computers today are at their best when +dealing with digital signals, not analogue signals and a +composite video signal is about as far removed from a digital +data stream as you can get. Therefore, an Analogue TV card for +a PC has the following purpose: + +* Tune the receiver to receive a broadcast signal +* demodulate the broadcast signal +* demultiplex the analogue video signal and analogue audio + signal. **NOTE:** some countries employ a digital audio signal + embedded within the modulated composite analogue signal - + NICAM.) +* digitize the analogue video signal and make the resulting + datastream available to the data bus. + +The digital datastream from an Analogue TV card is generated +by circuitry on the card and is often presented uncompressed. +For a PAL TV signal encoded at a resolution of 768x576 24-bit +color pixels over 25 frames per second - a fair amount of data +is generated and must be processed by the PC before it can be +displayed on the video monitor screen. Some Analogue TV cards +for PCs have onboard MPEG2 encoders which permit the raw +digital data stream to be presented to the PC in an encoded +and compressed form - similar to the form that is used in +Digital TV. + +The purpose of a simple budget digital TV card (DVB-T,C or S) +is to simply: + +* Tune the received to receive a broadcast signal. +* Extract the encoded digital datastream from the broadcast + signal. +* Make the encoded digital datastream (MPEG2) available to + the data bus. + +The significant difference between the two is that the tuner +on the analogue TV card spits out an Analogue signal, whereas +the tuner on the digital TV card spits out a compressed +encoded digital datastream. As the signal is already +digitised, it is trivial to pass this datastream to the PC +databus with minimal additional processing and then extract +the digital video and audio datastreams passing them to the +appropriate software or hardware for decoding and viewing. + +The Avermedia DVB-T +~~~~~~~~~~~~~~~~~~~ + +The Avermedia DVB-T is a budget PCI DVB card. It has 3 inputs: + +* RF Tuner Input +* Composite Video Input (RCA Jack) +* SVIDEO Input (Mini-DIN) + +The RF Tuner Input is the input to the tuner module of the +card. The Tuner is otherwise known as the "Frontend" . The +Frontend of the Avermedia DVB-T is a Microtune 7202D. A timely +post to the linux-dvb mailing list ascertained that the +Microtune 7202D is supported by the sp887x driver which is +found in the dvb-hw CVS module. + +The DVB-T card is based around the BT878 chip which is a very +common multimedia bridge and often found on Analogue TV cards. +There is no on-board MPEG2 decoder, which means that all MPEG2 +decoding must be done in software, or if you have one, on an +MPEG2 hardware decoding card or chipset. + + +Getting the card going +~~~~~~~~~~~~~~~~~~~~~~ + +In order to fire up the card, it is necessary to load a number +of modules from the DVB driver set. Prior to this it will have +been necessary to download these drivers from the linuxtv CVS +server and compile them successfully. + +Depending on the card's feature set, the Device Driver API for +DVB under Linux will expose some of the following device files +in the /dev tree: + +* /dev/dvb/adapter0/audio0 +* /dev/dvb/adapter0/ca0 +* /dev/dvb/adapter0/demux0 +* /dev/dvb/adapter0/dvr0 +* /dev/dvb/adapter0/frontend0 +* /dev/dvb/adapter0/net0 +* /dev/dvb/adapter0/osd0 +* /dev/dvb/adapter0/video0 + +The primary device nodes that we are interested in (at this +stage) for the Avermedia DVB-T are: + +* /dev/dvb/adapter0/dvr0 +* /dev/dvb/adapter0/frontend0 + +The dvr0 device node is used to read the MPEG2 Data Stream and +the frontend0 node is used to tune the frontend tuner module. + +At this stage, it has not been able to ascertain the +functionality of the remaining device nodes in respect of the +Avermedia DVBT. However, full functionality in respect of +tuning, receiving and supplying the MPEG2 data stream is +possible with the currently available versions of the driver. +It may be possible that additional functionality is available +from the card (i.e. viewing the additional analogue inputs +that the card presents), but this has not been tested yet. If +I get around to this, I'll update the document with whatever I +find. + +To power up the card, load the following modules in the +following order: + +* modprobe bttv (normally loaded automatically) +* modprobe dvb-bt8xx (or place dvb-bt8xx in /etc/modules) + +Insertion of these modules into the running kernel will +activate the appropriate DVB device nodes. It is then possible +to start accessing the card with utilities such as scan, tzap, +dvbstream etc. + +The frontend module sp887x.o, requires an external firmware. +Please use the command "get_dvb_firmware sp887x" to download +it. Then copy it to /usr/lib/hotplug/firmware or /lib/firmware/ +(depending on configuration of firmware hotplug). + +Receiving DVB-T in Australia +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +I have no experience of DVB-T in other countries other than +Australia, so I will attempt to explain how it works here in +Melbourne and how this affects the configuration of the DVB-T +card. + +The Digital Broadcasting Australia website has a Reception +locatortool which provides information on transponder channels +and frequencies. My local transmitter happens to be Mount +Dandenong. + +The frequencies broadcast by Mount Dandenong are: + +Table 1. Transponder Frequencies Mount Dandenong, Vic, Aus. + +=========== ======= =========== +Broadcaster Channel Frequency +=========== ======= =========== +ABC VHF 12 226.5 MHz +TEN VHF 11 219.5 MHz +NINE VHF 8 191.625 MHz +SEVEN VHF 6 177.5 MHz +SBS UHF 29 536.5 MHz +=========== ======= =========== + +The Scan utility has a set of compiled-in defaults for various +countries and regions, but if they do not suit, or if you have +a pre-compiled scan binary, you can specify a data file on the +command line which contains the transponder frequencies. Here +is a sample file for the above channel transponders: + +:: + + # Data file for DVB scan program + # + # C Frequency SymbolRate FEC QAM + # S Frequency Polarisation SymbolRate FEC + # T Frequency Bandwidth FEC FEC2 QAM Mode Guard Hier + T 226500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE + T 191625000 7MHz 2/3 NONE QAM64 8k 1/8 NONE + T 219500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE + T 177500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE + T 536500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE + +The defaults for the transponder frequency and other +modulation parameters were obtained from www.dba.org.au. + +When Scan runs, it will output channels.conf information for +any channel's transponders which the card's frontend can lock +onto. (i.e. any whose signal is strong enough at your +antenna). + +Here's my channels.conf file for anyone who's interested: + +:: + + ABC HDTV:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:2307:0:560 + ABC TV Melbourne:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:561 + ABC TV 2:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:562 + ABC TV 3:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:563 + ABC TV 4:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:564 + ABC DiG Radio:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:0:2311:566 + TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1585 + TEN Digital 1:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1586 + TEN Digital 2:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1587 + TEN Digital 3:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1588 + TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1589 + TEN Digital 4:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1590 + TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1591 + TEN HD:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:514:0:1592 + TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1593 + Nine Digital:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:513:660:1072 + Nine Digital HD:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:0:1073 + Nine Guide:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:514:670:1074 + 7 Digital:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1328 + 7 Digital 1:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1329 + 7 Digital 2:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1330 + 7 Digital 3:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1331 + 7 HD Digital:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:833:834:1332 + 7 Program Guide:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:865:866:1334 + SBS HD:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:102:103:784 + SBS DIGITAL 1:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:161:81:785 + SBS DIGITAL 2:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:162:83:786 + SBS EPG:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:163:85:787 + SBS RADIO 1:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:201:798 + SBS RADIO 2:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:202:799 + +Known Limitations +~~~~~~~~~~~~~~~~~ + +At present I can say with confidence that the frontend tunes +via /dev/dvb/adapter{x}/frontend0 and supplies an MPEG2 stream +via /dev/dvb/adapter{x}/dvr0. I have not tested the +functionality of any other part of the card yet. I will do so +over time and update this document. + +There are some limitations in the i2c layer due to a returned +error message inconsistency. Although this generates errors in +dmesg and the system logs, it does not appear to affect the +ability of the frontend to function correctly. + +Further Update +~~~~~~~~~~~~~~ + +dvbstream and VideoLAN Client on windows works a treat with +DVB, in fact this is currently serving as my main way of +viewing DVB-T at the moment. Additionally, VLC is happily +decoding HDTV signals, although the PC is dropping the odd +frame here and there - I assume due to processing capability - +as all the decoding is being done under windows in software. + +Many thanks to Nigel Pearson for the updates to this document +since the recent revision of the driver. diff --git a/Documentation/admin-guide/media/bt8xx.rst b/Documentation/admin-guide/media/bt8xx.rst new file mode 100644 index 000000000000..d800f7791ada --- /dev/null +++ b/Documentation/admin-guide/media/bt8xx.rst @@ -0,0 +1,124 @@ +.. SPDX-License-Identifier: GPL-2.0 + +How to get the bt8xx cards working +================================== + +Authors: Richard Walker, + Jamie Honan, + Michael Hunold, + Manu Abraham, + Uwe Bugla, + Michael Krufky + +.. note:: + + This documentation is outdated. Please check at the DVB wiki + at https://linuxtv.org/wiki for more updated info. + +General information +------------------- + +This class of cards has a bt878a as the PCI interface, and require the bttv driver +for accessing the i2c bus and the gpio pins of the bt8xx chipset. +Please see Documentation/admin-guide/media/cards.rst => o Cards based on the Conexant Bt8xx PCI bridge: + +Compiling kernel please enable: + +#) ``Device drivers`` => ``Multimedia devices`` => ``Video For Linux`` => ``Enable Video for Linux API 1 (DEPRECATED)`` +#) ``Device drivers`` => ``Multimedia devices`` => ``Video For Linux`` => ``Video Capture Adapters`` => ``BT848 Video For Linux`` +#) ``Device drivers`` => ``Multimedia devices`` => ``Digital Video Broadcasting Devices`` => ``DVB for Linux`` ``DVB Core Support`` ``Bt8xx based PCI Cards`` + + Please use the following options with care as deselection of drivers which are in fact necessary may result in DVB devices that cannot be tuned due to lack of driver support: + You can save RAM by deselecting every frontend module that your DVB card does not need. + + First please remove the static dependency of DVB card drivers on all frontend modules for all possible card variants by enabling: + +#) ``Device drivers`` => ``Multimedia devices`` => ``Digital Video Broadcasting Devices`` => ``DVB for Linux`` ``DVB Core Support`` ``Load and attach frontend modules as needed`` + + If you know the frontend driver that your card needs please enable: + +#) ``Device drivers`` => ``Multimedia devices`` => ``Digital Video Broadcasting Devices`` => ``DVB for Linux`` ``DVB Core Support`` ``Customise DVB Frontends`` => ``Customise the frontend modules to build`` + + Then please select your card-specific frontend module. + +Loading Modules +--------------- + +Regular case: If the bttv driver detects a bt8xx-based DVB card, all frontend and backend modules will be loaded automatically. +Exceptions are: +- Old TwinHan DST cards or clones with or without CA slot and not containing an Eeprom. +People running udev please see Documentation/admin-guide/media/udev.rst. + +In the following cases overriding the PCI type detection for dvb-bt8xx might be necessary: + +Running TwinHan and Clones +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: none + + $ modprobe bttv card=113 + $ modprobe dst + +Useful parameters for verbosity level and debugging the dst module: + +.. code-block:: none + + verbose=0: messages are disabled + 1: only error messages are displayed + 2: notifications are displayed + 3: other useful messages are displayed + 4: debug setting + dst_addons=0: card is a free to air (FTA) card only + 0x20: card has a conditional access slot for scrambled channels + +The autodetected values are determined by the cards' "response string". +In your logs see f. ex.: dst_get_device_id: Recognize [DSTMCI]. +For bug reports please send in a complete log with verbose=4 activated. +Please also see Documentation/admin-guide/media/ci.rst. + +Running multiple cards +~~~~~~~~~~~~~~~~~~~~~~ + +Examples of card ID's: + +.. code-block:: none + + Pinnacle PCTV Sat: 94 + Nebula Electronics Digi TV: 104 + pcHDTV HD-2000 TV: 112 + Twinhan DST and clones: 113 + Avermedia AverTV DVB-T 771: 123 + Avermedia AverTV DVB-T 761: 124 + DViCO FusionHDTV DVB-T Lite: 128 + DViCO FusionHDTV 5 Lite: 135 + +.. note:: + + The order of the card ID should be uprising: + + Example: + + .. code-block:: none + + $ modprobe bttv card=113 card=135 + +For a full list of card ID's please see Documentation/admin-guide/media/bttv-cardlist.rst. +In case of further problems please subscribe and send questions to the mailing list: linux-dvb@linuxtv.org. + +Probing the cards with broken PCI subsystem ID +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +There are some TwinHan cards that the EEPROM has become corrupted for some +reason. The cards do not have correct PCI subsystem ID. But we can force +probing the cards with broken PCI subsystem ID + +.. code-block:: none + + $ echo 109e 0878 $subvendor $subdevice > \ + /sys/bus/pci/drivers/bt878/new_id + +.. code-block:: none + + 109e: PCI_VENDOR_ID_BROOKTREE + 0878: PCI_DEVICE_ID_BROOKTREE_878 + diff --git a/Documentation/admin-guide/media/bttv-cardlist.rst b/Documentation/admin-guide/media/bttv-cardlist.rst new file mode 100644 index 000000000000..f5806856b5a1 --- /dev/null +++ b/Documentation/admin-guide/media/bttv-cardlist.rst @@ -0,0 +1,683 @@ +.. SPDX-License-Identifier: GPL-2.0 + +BTTV cards list +=============== + +.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| + +.. flat-table:: + :header-rows: 1 + :widths: 2 19 18 + :stub-columns: 0 + + * - Card number + - Card name + - PCI IDs + + * - 0 + - *** UNKNOWN/GENERIC *** + - + + * - 1 + - MIRO PCTV + - + + * - 2 + - Hauppauge (bt848) + - + + * - 3 + - STB, Gateway P/N 6000699 (bt848) + - + + * - 4 + - Intel Create and Share PCI/ Smart Video Recorder III + - + + * - 5 + - Diamond DTV2000 + - + + * - 6 + - AVerMedia TVPhone + - + + * - 7 + - MATRIX-Vision MV-Delta + - + + * - 8 + - Lifeview FlyVideo II (Bt848) LR26 / MAXI TV Video PCI2 LR26 + - + + * - 9 + - IMS/IXmicro TurboTV + - + + * - 10 + - Hauppauge (bt878) + - 0070:13eb, 0070:3900, 2636:10b4 + + * - 11 + - MIRO PCTV pro + - + + * - 12 + - ADS Technologies Channel Surfer TV (bt848) + - + + * - 13 + - AVerMedia TVCapture 98 + - 1461:0002, 1461:0004, 1461:0300 + + * - 14 + - Aimslab Video Highway Xtreme (VHX) + - + + * - 15 + - Zoltrix TV-Max + - a1a0:a0fc + + * - 16 + - Prolink Pixelview PlayTV (bt878) + - + + * - 17 + - Leadtek WinView 601 + - + + * - 18 + - AVEC Intercapture + - + + * - 19 + - Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only) + - + + * - 20 + - CEI Raffles Card + - + + * - 21 + - Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50 + - + + * - 22 + - Askey CPH050/ Phoebe Tv Master + FM + - 14ff:3002 + + * - 23 + - Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878 + - 14c7:0101 + + * - 24 + - Askey CPH05X/06X (bt878) [many vendors] + - 144f:3002, 144f:3005, 144f:5000, 14ff:3000 + + * - 25 + - Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar + - + + * - 26 + - Hauppauge WinCam newer (bt878) + - + + * - 27 + - Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50 + - + + * - 28 + - Terratec TerraTV+ Version 1.1 (bt878) + - 153b:1127, 1852:1852 + + * - 29 + - Imagenation PXC200 + - 1295:200a + + * - 30 + - Lifeview FlyVideo 98 LR50 + - 1f7f:1850 + + * - 31 + - Formac iProTV, Formac ProTV I (bt848) + - + + * - 32 + - Intel Create and Share PCI/ Smart Video Recorder III + - + + * - 33 + - Terratec TerraTValue Version Bt878 + - 153b:1117, 153b:1118, 153b:1119, 153b:111a, 153b:1134, 153b:5018 + + * - 34 + - Leadtek WinFast 2000/ WinFast 2000 XP + - 107d:6606, 107d:6609, 6606:217d, f6ff:fff6 + + * - 35 + - Lifeview FlyVideo 98 LR50 / Chronos Video Shuttle II + - 1851:1850, 1851:a050 + + * - 36 + - Lifeview FlyVideo 98FM LR50 / Typhoon TView TV/FM Tuner + - 1852:1852 + + * - 37 + - Prolink PixelView PlayTV pro + - + + * - 38 + - Askey CPH06X TView99 + - 144f:3000, 144f:a005, a04f:a0fc + + * - 39 + - Pinnacle PCTV Studio/Rave + - 11bd:0012, bd11:1200, bd11:ff00, 11bd:ff12 + + * - 40 + - STB TV PCI FM, Gateway P/N 6000704 (bt878), 3Dfx VoodooTV 100 + - 10b4:2636, 10b4:2645, 121a:3060 + + * - 41 + - AVerMedia TVPhone 98 + - 1461:0001, 1461:0003 + + * - 42 + - ProVideo PV951 + - aa0c:146c + + * - 43 + - Little OnAir TV + - + + * - 44 + - Sigma TVII-FM + - + + * - 45 + - MATRIX-Vision MV-Delta 2 + - + + * - 46 + - Zoltrix Genie TV/FM + - 15b0:4000, 15b0:400a, 15b0:400d, 15b0:4010, 15b0:4016 + + * - 47 + - Terratec TV/Radio+ + - 153b:1123 + + * - 48 + - Askey CPH03x/ Dynalink Magic TView + - + + * - 49 + - IODATA GV-BCTV3/PCI + - 10fc:4020 + + * - 50 + - Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP + - + + * - 51 + - Eagle Wireless Capricorn2 (bt878A) + - + + * - 52 + - Pinnacle PCTV Studio Pro + - + + * - 53 + - Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS + - + + * - 54 + - Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90] + - + + * - 55 + - Askey CPH031/ BESTBUY Easy TV + - + + * - 56 + - Lifeview FlyVideo 98FM LR50 + - a051:41a0 + + * - 57 + - GrandTec 'Grand Video Capture' (Bt848) + - 4344:4142 + + * - 58 + - Askey CPH060/ Phoebe TV Master Only (No FM) + - + + * - 59 + - Askey CPH03x TV Capturer + - + + * - 60 + - Modular Technology MM100PCTV + - + + * - 61 + - AG Electronics GMV1 + - 15cb:0101 + + * - 62 + - Askey CPH061/ BESTBUY Easy TV (bt878) + - + + * - 63 + - ATI TV-Wonder + - 1002:0001 + + * - 64 + - ATI TV-Wonder VE + - 1002:0003 + + * - 65 + - Lifeview FlyVideo 2000S LR90 + - + + * - 66 + - Terratec TValueRadio + - 153b:1135, 153b:ff3b + + * - 67 + - IODATA GV-BCTV4/PCI + - 10fc:4050 + + * - 68 + - 3Dfx VoodooTV FM (Euro) + - 10b4:2637 + + * - 69 + - Active Imaging AIMMS + - + + * - 70 + - Prolink Pixelview PV-BT878P+ (Rev.4C,8E) + - + + * - 71 + - Lifeview FlyVideo 98EZ (capture only) LR51 + - 1851:1851 + + * - 72 + - Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM) + - 1554:4011 + + * - 73 + - Sensoray 311/611 + - 6000:0311, 6000:0611 + + * - 74 + - RemoteVision MX (RV605) + - + + * - 75 + - Powercolor MTV878/ MTV878R/ MTV878F + - + + * - 76 + - Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP) + - 0e11:0079 + + * - 77 + - GrandTec Multi Capture Card (Bt878) + - + + * - 78 + - Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF + - 0a01:17de + + * - 79 + - DSP Design TCVIDEO + - + + * - 80 + - Hauppauge WinTV PVR + - 0070:4500 + + * - 81 + - IODATA GV-BCTV5/PCI + - 10fc:4070, 10fc:d018 + + * - 82 + - Osprey 100/150 (878) + - 0070:ff00 + + * - 83 + - Osprey 100/150 (848) + - + + * - 84 + - Osprey 101 (848) + - + + * - 85 + - Osprey 101/151 + - + + * - 86 + - Osprey 101/151 w/ svid + - + + * - 87 + - Osprey 200/201/250/251 + - + + * - 88 + - Osprey 200/250 + - 0070:ff01 + + * - 89 + - Osprey 210/220/230 + - + + * - 90 + - Osprey 500 + - 0070:ff02 + + * - 91 + - Osprey 540 + - 0070:ff04 + + * - 92 + - Osprey 2000 + - 0070:ff03 + + * - 93 + - IDS Eagle + - + + * - 94 + - Pinnacle PCTV Sat + - 11bd:001c + + * - 95 + - Formac ProTV II (bt878) + - + + * - 96 + - MachTV + - + + * - 97 + - Euresys Picolo + - + + * - 98 + - ProVideo PV150 + - aa00:1460, aa01:1461, aa02:1462, aa03:1463, aa04:1464, aa05:1465, aa06:1466, aa07:1467 + + * - 99 + - AD-TVK503 + - + + * - 100 + - Hercules Smart TV Stereo + - + + * - 101 + - Pace TV & Radio Card + - + + * - 102 + - IVC-200 + - 0000:a155, 0001:a155, 0002:a155, 0003:a155, 0100:a155, 0101:a155, 0102:a155, 0103:a155, 0800:a155, 0801:a155, 0802:a155, 0803:a155 + + * - 103 + - Grand X-Guard / Trust 814PCI + - 0304:0102 + + * - 104 + - Nebula Electronics DigiTV + - 0071:0101 + + * - 105 + - ProVideo PV143 + - aa00:1430, aa00:1431, aa00:1432, aa00:1433, aa03:1433 + + * - 106 + - PHYTEC VD-009-X1 VD-011 MiniDIN (bt878) + - + + * - 107 + - PHYTEC VD-009-X1 VD-011 Combi (bt878) + - + + * - 108 + - PHYTEC VD-009 MiniDIN (bt878) + - + + * - 109 + - PHYTEC VD-009 Combi (bt878) + - + + * - 110 + - IVC-100 + - ff00:a132 + + * - 111 + - IVC-120G + - ff00:a182, ff01:a182, ff02:a182, ff03:a182, ff04:a182, ff05:a182, ff06:a182, ff07:a182, ff08:a182, ff09:a182, ff0a:a182, ff0b:a182, ff0c:a182, ff0d:a182, ff0e:a182, ff0f:a182 + + * - 112 + - pcHDTV HD-2000 TV + - 7063:2000 + + * - 113 + - Twinhan DST + clones + - 11bd:0026, 1822:0001, 270f:fc00, 1822:0026 + + * - 114 + - Winfast VC100 + - 107d:6607 + + * - 115 + - Teppro TEV-560/InterVision IV-560 + - + + * - 116 + - SIMUS GVC1100 + - aa6a:82b2 + + * - 117 + - NGS NGSTV+ + - + + * - 118 + - LMLBT4 + - + + * - 119 + - Tekram M205 PRO + - + + * - 120 + - Conceptronic CONTVFMi + - + + * - 121 + - Euresys Picolo Tetra + - 1805:0105, 1805:0106, 1805:0107, 1805:0108 + + * - 122 + - Spirit TV Tuner + - + + * - 123 + - AVerMedia AVerTV DVB-T 771 + - 1461:0771 + + * - 124 + - AverMedia AverTV DVB-T 761 + - 1461:0761 + + * - 125 + - MATRIX Vision Sigma-SQ + - + + * - 126 + - MATRIX Vision Sigma-SLC + - + + * - 127 + - APAC Viewcomp 878(AMAX) + - + + * - 128 + - DViCO FusionHDTV DVB-T Lite + - 18ac:db10, 18ac:db11 + + * - 129 + - V-Gear MyVCD + - + + * - 130 + - Super TV Tuner + - + + * - 131 + - Tibet Systems 'Progress DVR' CS16 + - + + * - 132 + - Kodicom 4400R (master) + - + + * - 133 + - Kodicom 4400R (slave) + - + + * - 134 + - Adlink RTV24 + - + + * - 135 + - DViCO FusionHDTV 5 Lite + - 18ac:d500 + + * - 136 + - Acorp Y878F + - 9511:1540 + + * - 137 + - Conceptronic CTVFMi v2 + - 036e:109e + + * - 138 + - Prolink Pixelview PV-BT878P+ (Rev.2E) + - + + * - 139 + - Prolink PixelView PlayTV MPEG2 PV-M4900 + - + + * - 140 + - Osprey 440 + - 0070:ff07 + + * - 141 + - Asound Skyeye PCTV + - + + * - 142 + - Sabrent TV-FM (bttv version) + - + + * - 143 + - Hauppauge ImpactVCB (bt878) + - 0070:13eb + + * - 144 + - MagicTV + - + + * - 145 + - SSAI Security Video Interface + - 4149:5353 + + * - 146 + - SSAI Ultrasound Video Interface + - 414a:5353 + + * - 147 + - VoodooTV 200 (USA) + - 121a:3000 + + * - 148 + - DViCO FusionHDTV 2 + - dbc0:d200 + + * - 149 + - Typhoon TV-Tuner PCI (50684) + - + + * - 150 + - Geovision GV-600 + - 008a:763c + + * - 151 + - Kozumi KTV-01C + - + + * - 152 + - Encore ENL TV-FM-2 + - 1000:1801 + + * - 153 + - PHYTEC VD-012 (bt878) + - + + * - 154 + - PHYTEC VD-012-X1 (bt878) + - + + * - 155 + - PHYTEC VD-012-X2 (bt878) + - + + * - 156 + - IVCE-8784 + - 0000:f050, 0001:f050, 0002:f050, 0003:f050 + + * - 157 + - Geovision GV-800(S) (master) + - 800a:763d + + * - 158 + - Geovision GV-800(S) (slave) + - 800b:763d, 800c:763d, 800d:763d + + * - 159 + - ProVideo PV183 + - 1830:1540, 1831:1540, 1832:1540, 1833:1540, 1834:1540, 1835:1540, 1836:1540, 1837:1540 + + * - 160 + - Tongwei Video Technology TD-3116 + - f200:3116 + + * - 161 + - Aposonic W-DVR + - 0279:0228 + + * - 162 + - Adlink MPG24 + - + + * - 163 + - Bt848 Capture 14MHz + - + + * - 164 + - CyberVision CV06 (SV) + - + + * - 165 + - Kworld V-Stream Xpert TV PVR878 + - + + * - 166 + - PCI-8604PW + - diff --git a/Documentation/admin-guide/media/bttv.rst b/Documentation/admin-guide/media/bttv.rst new file mode 100644 index 000000000000..9b15a0cba283 --- /dev/null +++ b/Documentation/admin-guide/media/bttv.rst @@ -0,0 +1,1806 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The bttv driver +=============== + +Release notes for bttv +---------------------- + +You'll need at least these config options for bttv: + +.. code-block:: none + + CONFIG_I2C=m + CONFIG_I2C_ALGOBIT=m + CONFIG_VIDEO_DEV=m + +The latest bttv version is available from http://bytesex.org/bttv/ + + +Make bttv work with your card +----------------------------- + +Just try "modprobe bttv" and see if that works. + +If it doesn't bttv likely could not autodetect your card and needs some +insmod options. The most important insmod option for bttv is "card=n" +to select the correct card type. If you get video but no sound you've +very likely specified the wrong (or no) card type. A list of supported +cards is in CARDLIST.bttv + +If bttv takes very long to load (happens sometimes with the cheap +cards which have no tuner), try adding this to your modules.conf: + +.. code-block:: none + + options i2c-algo-bit bit_test=1 + +For the WinTV/PVR you need one firmware file from the driver CD: +hcwamc.rbf. The file is in the pvr45xxx.exe archive (self-extracting +zip file, unzip can unpack it). Put it into the /etc/pvr directory or +use the firm_altera= insmod option to point the driver to the +location of the file. + +If your card isn't listed in CARDLIST.bttv or if you have trouble making +audio work, you should read the Sound-FAQ. + + +Autodetecting cards +------------------- + +bttv uses the PCI Subsystem ID to autodetect the card type. lspci lists +the Subsystem ID in the second line, looks like this: + +.. code-block:: none + + 00:0a.0 Multimedia video controller: Brooktree Corporation Bt878 (rev 02) + Subsystem: Hauppauge computer works Inc. WinTV/GO + Flags: bus master, medium devsel, latency 32, IRQ 5 + Memory at e2000000 (32-bit, prefetchable) [size=4K] + +only bt878-based cards can have a subsystem ID (which does not mean +that every card really has one). bt848 cards can't have a Subsystem +ID and therefore can't be autodetected. There is a list with the ID's +in bttv-cards.c (in case you are intrested or want to mail patches +with updates). + + +Still doesn't work? +------------------- + +I do NOT have a lab with 30+ different grabber boards and a +PAL/NTSC/SECAM test signal generator at home, so I often can't +reproduce your problems. This makes debugging very difficult for me. +If you have some knowledge and spare time, please try to fix this +yourself (patches very welcome of course...) You know: The linux +slogan is "Do it yourself". + +There is a mailing list at +http://vger.kernel.org/vger-lists.html#linux-media + +If you have trouble with some specific TV card, try to ask there +instead of mailing me directly. The chance that someone with the +same card listens there is much higher... + +For problems with sound: There are a lot of different systems used +for TV sound all over the world. And there are also different chips +which decode the audio signal. Reports about sound problems ("stereo +doesn't work") are pretty useless unless you include some details +about your hardware and the TV sound scheme used in your country (or +at least the country you are living in). + +Modprobe options +---------------- + +Note: "modinfo " prints various information about a kernel +module, among them a complete and up-to-date list of insmod options. +This list tends to be outdated because it is updated manually ... + +========================================================================== + +bttv.o + +.. code-block:: none + + the bt848/878 (grabber chip) driver + + insmod args: + card=n card type, see CARDLIST for a list. + tuner=n tuner type, see CARDLIST for a list. + radio=0/1 card supports radio + pll=0/1/2 pll settings + 0: don't use PLL + 1: 28 MHz crystal installed + 2: 35 MHz crystal installed + + triton1=0/1 for Triton1 (+others) compatibility + vsfx=0/1 yet another chipset bug compatibility bit + see README.quirks for details on these two. + + bigendian=n Set the endianness of the gfx framebuffer. + Default is native endian. + fieldnr=0/1 Count fields. Some TV descrambling software + needs this, for others it only generates + 50 useless IRQs/sec. default is 0 (off). + autoload=0/1 autoload helper modules (tuner, audio). + default is 1 (on). + bttv_verbose=0/1/2 verbose level (at insmod time, while + looking at the hardware). default is 1. + bttv_debug=0/1 debug messages (for capture). + default is 0 (off). + irq_debug=0/1 irq handler debug messages. + default is 0 (off). + gbuffers=2-32 number of capture buffers for mmap'ed capture. + default is 4. + gbufsize= size of capture buffers. default and + maximum value is 0x208000 (~2MB) + no_overlay=0 Enable overlay on broken hardware. There + are some chipsets (SIS for example) which + are known to have problems with the PCI DMA + push used by bttv. bttv will disable overlay + by default on this hardware to avoid crashes. + With this insmod option you can override this. + no_overlay=1 Disable overlay. It should be used by broken + hardware that doesn't support PCI2PCI direct + transfers. + automute=0/1 Automatically mutes the sound if there is + no TV signal, on by default. You might try + to disable this if you have bad input signal + quality which leading to unwanted sound + dropouts. + chroma_agc=0/1 AGC of chroma signal, off by default. + adc_crush=0/1 Luminance ADC crush, on by default. + i2c_udelay= Allow reduce I2C speed. Default is 5 usecs + (meaning 66,67 Kbps). The default is the + maximum supported speed by kernel bitbang + algorithm. You may use lower numbers, if I2C + messages are lost (16 is known to work on + all supported cards). + + bttv_gpio=0/1 + gpiomask= + audioall= + audiomux= + See Sound-FAQ for a detailed description. + + remap, card, radio and pll accept up to four comma-separated arguments + (for multiple boards). + +tuner.o + +.. code-block:: none + + The tuner driver. You need this unless you want to use only + with a camera or external tuner ... + + insmod args: + debug=1 print some debug info to the syslog + type=n type of the tuner chip. n as follows: + see CARDLIST for a complete list. + pal=[bdgil] select PAL variant (used for some tuners + only, important for the audio carrier). + +tvaudio.o + +.. code-block:: none + + new, experimental module which is supported to provide a single + driver for all simple i2c audio control chips (tda/tea*). + + insmod args: + tda8425 = 1 enable/disable the support for the + tda9840 = 1 various chips. + tda9850 = 1 The tea6300 can't be autodetected and is + tda9855 = 1 therefore off by default, if you have + tda9873 = 1 this one on your card (STB uses these) + tda9874a = 1 you have to enable it explicitly. + tea6300 = 0 The two tda985x chips use the same i2c + tea6420 = 1 address and can't be disturgished from + pic16c54 = 1 each other, you might have to disable + the wrong one. + debug = 1 print debug messages + + insmod args for tda9874a: + tda9874a_SIF=1/2 select sound IF input pin (1 or 2) + (default is pin 1) + tda9874a_AMSEL=0/1 auto-mute select for NICAM (default=0) + Please read note 3 below! + tda9874a_STD=n select TV sound standard (0..8): + 0 - A2, B/G + 1 - A2, M (Korea) + 2 - A2, D/K (1) + 3 - A2, D/K (2) + 4 - A2, D/K (3) + 5 - NICAM, I + 6 - NICAM, B/G + 7 - NICAM, D/K (default) + 8 - NICAM, L + + Note 1: tda9874a supports both tda9874h (old) and tda9874a (new) chips. + Note 2: tda9874h/a and tda9875 (which is supported separately by + tda9875.o) use the same i2c address so both modules should not be + used at the same time. + Note 3: Using tda9874a_AMSEL option depends on your TV card design! + AMSEL=0: auto-mute will switch between NICAM sound + and the sound on 1st carrier (i.e. FM mono or AM). + AMSEL=1: auto-mute will switch between NICAM sound + and the analog mono input (MONOIN pin). + If tda9874a decoder on your card has MONOIN pin not connected, then + use only tda9874_AMSEL=0 or don't specify this option at all. + For example: + card=65 (FlyVideo 2000S) - set AMSEL=1 or AMSEL=0 + card=72 (Prolink PV-BT878P rev.9B) - set AMSEL=0 only + +msp3400.o + +.. code-block:: none + + The driver for the msp34xx sound processor chips. If you have a + stereo card, you probably want to insmod this one. + + insmod args: + debug=1/2 print some debug info to the syslog, + 2 is more verbose. + simple=1 Use the "short programming" method. Newer + msp34xx versions support this. You need this + for dbx stereo. Default is on if supported by + the chip. + once=1 Don't check the TV-stations Audio mode + every few seconds, but only once after + channel switches. + amsound=1 Audio carrier is AM/NICAM at 6.5 Mhz. This + should improve things for french people, the + carrier autoscan seems to work with FM only... + +tea6300.o - OBSOLETE (use tvaudio instead) + +.. code-block:: none + + The driver for the tea6300 fader chip. If you have a stereo + card and the msp3400.o doesn't work, you might want to try this + one. This chip is seen on most STB TV/FM cards (usually from + Gateway OEM sold surplus on auction sites). + + insmod args: + debug=1 print some debug info to the syslog. + +tda8425.o - OBSOLETE (use tvaudio instead) + +.. code-block:: none + + The driver for the tda8425 fader chip. This driver used to be + part of bttv.c, so if your sound used to work but does not + anymore, try loading this module. + + insmod args: + debug=1 print some debug info to the syslog. + +tda985x.o - OBSOLETE (use tvaudio instead) + +.. code-block:: none + + The driver for the tda9850/55 audio chips. + + insmod args: + debug=1 print some debug info to the syslog. + chip=9850/9855 set the chip type. + + +If the box freezes hard with bttv +--------------------------------- + +It might be a bttv driver bug. It also might be bad hardware. It also +might be something else ... + +Just mailing me "bttv freezes" isn't going to help much. This README +has a few hints how you can help to pin down the problem. + + +bttv bugs +~~~~~~~~~ + +If some version works and another doesn't it is likely to be a driver +bug. It is very helpful if you can tell where exactly it broke +(i.e. the last working and the first broken version). + +With a hard freeze you probably doesn't find anything in the logfiles. +The only way to capture any kernel messages is to hook up a serial +console and let some terminal application log the messages. /me uses +screen. See Documentation/admin-guide/serial-console.rst for details on setting +up a serial console. + +Read Documentation/admin-guide/bug-hunting.rst to learn how to get any useful +information out of a register+stack dump printed by the kernel on +protection faults (so-called "kernel oops"). + +If you run into some kind of deadlock, you can try to dump a call trace +for each process using sysrq-t (see Documentation/admin-guide/sysrq.rst). +This way it is possible to figure where *exactly* some process in "D" +state is stuck. + +I've seen reports that bttv 0.7.x crashes whereas 0.8.x works rock solid +for some people. Thus probably a small buglet left somewhere in bttv +0.7.x. I have no idea where exactly, it works stable for me and a lot of +other people. But in case you have problems with the 0.7.x versions you +can give 0.8.x a try ... + + +hardware bugs +~~~~~~~~~~~~~ + +Some hardware can't deal with PCI-PCI transfers (i.e. grabber => vga). +Sometimes problems show up with bttv just because of the high load on +the PCI bus. The bt848/878 chips have a few workarounds for known +incompatibilities, see README.quirks. + +Some folks report that increasing the pci latency helps too, +althrought I'm not sure whenever this really fixes the problems or +only makes it less likely to happen. Both bttv and btaudio have a +insmod option to set the PCI latency of the device. + +Some mainboard have problems to deal correctly with multiple devices +doing DMA at the same time. bttv + ide seems to cause this sometimes, +if this is the case you likely see freezes only with video and hard disk +access at the same time. Updating the IDE driver to get the latest and +greatest workarounds for hardware bugs might fix these problems. + + +other +~~~~~ + +If you use some binary-only yunk (like nvidia module) try to reproduce +the problem without. + +IRQ sharing is known to cause problems in some cases. It works just +fine in theory and many configurations. Neverless it might be worth a +try to shuffle around the PCI cards to give bttv another IRQ or make +it share the IRQ with some other piece of hardware. IRQ sharing with +VGA cards seems to cause trouble sometimes. I've also seen funny +effects with bttv sharing the IRQ with the ACPI bridge (and +apci-enabled kernel). + +Bttv quirks +----------- + +Below is what the bt878 data book says about the PCI bug compatibility +modes of the bt878 chip. + +The triton1 insmod option sets the EN_TBFX bit in the control register. +The vsfx insmod option does the same for EN_VSFX bit. If you have +stability problems you can try if one of these options makes your box +work solid. + +drivers/pci/quirks.c knows about these issues, this way these bits are +enabled automagically for known-buggy chipsets (look at the kernel +messages, bttv tells you). + +Normal PCI Mode +~~~~~~~~~~~~~~~ + +The PCI REQ signal is the logical-or of the incoming function requests. +The inter-nal GNT[0:1] signals are gated asynchronously with GNT and +demultiplexed by the audio request signal. Thus the arbiter defaults to +the video function at power-up and parks there during no requests for +bus access. This is desirable since the video will request the bus more +often. However, the audio will have highest bus access priority. Thus +the audio will have first access to the bus even when issuing a request +after the video request but before the PCI external arbiter has granted +access to the Bt879. Neither function can preempt the other once on the +bus. The duration to empty the entire video PCI FIFO onto the PCI bus is +very short compared to the bus access latency the audio PCI FIFO can +tolerate. + + +430FX Compatibility Mode +~~~~~~~~~~~~~~~~~~~~~~~~ + +When using the 430FX PCI, the following rules will ensure +compatibility: + + (1) Deassert REQ at the same time as asserting FRAME. + (2) Do not reassert REQ to request another bus transaction until after + finish-ing the previous transaction. + +Since the individual bus masters do not have direct control of REQ, a +simple logical-or of video and audio requests would violate the rules. +Thus, both the arbiter and the initiator contain 430FX compatibility +mode logic. To enable 430FX mode, set the EN_TBFX bit as indicated in +Device Control Register on page 104. + +When EN_TBFX is enabled, the arbiter ensures that the two compatibility +rules are satisfied. Before GNT is asserted by the PCI arbiter, this +internal arbiter may still logical-or the two requests. However, once +the GNT is issued, this arbiter must lock in its decision and now route +only the granted request to the REQ pin. The arbiter decision lock +happens regardless of the state of FRAME because it does not know when +FRAME will be asserted (typically - each initiator will assert FRAME on +the cycle following GNT). When FRAME is asserted, it is the initiator s +responsibility to remove its request at the same time. It is the +arbiters responsibility to allow this request to flow through to REQ and +not allow the other request to hold REQ asserted. The decision lock may +be removed at the end of the transaction: for example, when the bus is +idle (FRAME and IRDY). The arbiter decision may then continue +asynchronously until GNT is again asserted. + + +Interfacing with Non-PCI 2.1 Compliant Core Logic +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A small percentage of core logic devices may start a bus transaction +during the same cycle that GNT is de-asserted. This is non PCI 2.1 +compliant. To ensure compatibility when using PCs with these PCI +controllers, the EN_VSFX bit must be enabled (refer to Device Control +Register on page 104). When in this mode, the arbiter does not pass GNT +to the internal functions unless REQ is asserted. This prevents a bus +transaction from starting the same cycle as GNT is de-asserted. This +also has the side effect of not being able to take advantage of bus +parking, thus lowering arbitration performance. The Bt879 drivers must +query for these non-compliant devices, and set the EN_VSFX bit only if +required. + + +Other elements of the tvcards array +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you are trying to make a new card work you might find it useful to +know what the other elements in the tvcards array are good for: + +.. code-block:: none + + video_inputs - # of video inputs the card has + audio_inputs - historical cruft, not used any more. + tuner - which input is the tuner + svhs - which input is svhs (all others are labeled composite) + muxsel - video mux, input->registervalue mapping + pll - same as pll= insmod option + tuner_type - same as tuner= insmod option + *_modulename - hint whenever some card needs this or that audio + module loaded to work properly. + has_radio - whenever this TV card has a radio tuner. + no_msp34xx - "1" disables loading of msp3400.o module + no_tda9875 - "1" disables loading of tda9875.o module + needs_tvaudio - set to "1" to load tvaudio.o module + +If some config item is specified both from the tvcards array and as +insmod option, the insmod option takes precedence. + +Cards +----- + +.. note:: + + For a more updated list, please check + https://linuxtv.org/wiki/index.php/Hardware_Device_Information + +Supported cards: Bt848/Bt848a/Bt849/Bt878/Bt879 cards +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +All cards with Bt848/Bt848a/Bt849/Bt878/Bt879 and normal +Composite/S-VHS inputs are supported. Teletext and Intercast support +(PAL only) for ALL cards via VBI sample decoding in software. + +Some cards with additional multiplexing of inputs or other additional +fancy chips are only partially supported (unless specifications by the +card manufacturer are given). When a card is listed here it isn't +necessarily fully supported. + +All other cards only differ by additional components as tuners, sound +decoders, EEPROMs, teletext decoders ... + + +MATRIX Vision +~~~~~~~~~~~~~ + +MV-Delta +- Bt848A +- 4 Composite inputs, 1 S-VHS input (shared with 4th composite) +- EEPROM + +http://www.matrix-vision.de/ + +This card has no tuner but supports all 4 composite (1 shared with an +S-VHS input) of the Bt848A. +Very nice card if you only have satellite TV but several tuners connected +to the card via composite. + +Many thanks to Matrix-Vision for giving us 2 cards for free which made +Bt848a/Bt849 single crystal operation support possible!!! + + + +Miro/Pinnacle PCTV +~~~~~~~~~~~~~~~~~~ + +- Bt848 + some (all??) come with 2 crystals for PAL/SECAM and NTSC +- PAL, SECAM or NTSC TV tuner (Philips or TEMIC) +- MSP34xx sound decoder on add on board + decoder is supported but AFAIK does not yet work + (other sound MUX setting in GPIO port needed??? somebody who fixed this???) +- 1 tuner, 1 composite and 1 S-VHS input +- tuner type is autodetected + +http://www.miro.de/ +http://www.miro.com/ + + +Many thanks for the free card which made first NTSC support possible back +in 1997! + + +Hauppauge Win/TV pci +~~~~~~~~~~~~~~~~~~~~ + +There are many different versions of the Hauppauge cards with different +tuners (TV+Radio ...), teletext decoders. +Note that even cards with same model numbers have (depending on the revision) +different chips on it. + +- Bt848 (and others but always in 2 crystal operation???) + newer cards have a Bt878 + +- PAL, SECAM, NTSC or tuner with or without Radio support + +e.g.: + +- PAL: + + - TDA5737: VHF, hyperband and UHF mixer/oscillator for TV and VCR 3-band tuners + - TSA5522: 1.4 GHz I2C-bus controlled synthesizer, I2C 0xc2-0xc3 + +- NTSC: + + - TDA5731: VHF, hyperband and UHF mixer/oscillator for TV and VCR 3-band tuners + - TSA5518: no datasheet available on Philips site + +- Philips SAA5246 or SAA5284 ( or no) Teletext decoder chip + with buffer RAM (e.g. Winbond W24257AS-35: 32Kx8 CMOS static RAM) + SAA5246 (I2C 0x22) is supported + +- 256 bytes EEPROM: Microchip 24LC02B or Philips 8582E2Y + with configuration information + I2C address 0xa0 (24LC02B also responds to 0xa2-0xaf) + +- 1 tuner, 1 composite and (depending on model) 1 S-VHS input + +- 14052B: mux for selection of sound source + +- sound decoder: TDA9800, MSP34xx (stereo cards) + + +Askey CPH-Series +~~~~~~~~~~~~~~~~ +Developed by TelSignal(?), OEMed by many vendors (Typhoon, Anubis, Dynalink) + +- Card series: + - CPH01x: BT848 capture only + - CPH03x: BT848 + - CPH05x: BT878 with FM + - CPH06x: BT878 (w/o FM) + - CPH07x: BT878 capture only + +- TV standards: + - CPH0x0: NTSC-M/M + - CPH0x1: PAL-B/G + - CPH0x2: PAL-I/I + - CPH0x3: PAL-D/K + - CPH0x4: SECAM-L/L + - CPH0x5: SECAM-B/G + - CPH0x6: SECAM-D/K + - CPH0x7: PAL-N/N + - CPH0x8: PAL-B/H + - CPH0x9: PAL-M/M + +- CPH03x was often sold as "TV capturer". + +Identifying: + + #) 878 cards can be identified by PCI Subsystem-ID: + - 144f:3000 = CPH06x + - 144F:3002 = CPH05x w/ FM + - 144F:3005 = CPH06x_LC (w/o remote control) + #) The cards have a sticker with "CPH"-model on the back. + #) These cards have a number printed on the PCB just above the tuner metal box: + - "80-CP2000300-x" = CPH03X + - "80-CP2000500-x" = CPH05X + - "80-CP2000600-x" = CPH06X / CPH06x_LC + + Askey sells these cards as "Magic TView series", Brand "MagicXpress". + Other OEM often call these "Tview", "TView99" or else. + +Lifeview Flyvideo Series: +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The naming of these series differs in time and space. + +Identifying: + #) Some models can be identified by PCI subsystem ID: + + - 1852:1852 = Flyvideo 98 FM + - 1851:1850 = Flyvideo 98 + - 1851:1851 = Flyvideo 98 EZ (capture only) + + #) There is a print on the PCB: + + - LR25 = Flyvideo (Zoran ZR36120, SAA7110A) + - LR26 Rev.N = Flyvideo II (Bt848) + - LR26 Rev.O = Flyvideo II (Bt878) + - LR37 Rev.C = Flyvideo EZ (Capture only, ZR36120 + SAA7110) + - LR38 Rev.A1= Flyvideo II EZ (Bt848 capture only) + - LR50 Rev.Q = Flyvideo 98 (w/eeprom and PCI subsystem ID) + - LR50 Rev.W = Flyvideo 98 (no eeprom) + - LR51 Rev.E = Flyvideo 98 EZ (capture only) + - LR90 = Flyvideo 2000 (Bt878) + - LR90 Flyvideo 2000S (Bt878) w/Stereo TV (Package incl. LR91 daughterboard) + - LR91 = Stereo daughter card for LR90 + - LR97 = Flyvideo DVBS + - LR99 Rev.E = Low profile card for OEM integration (only internal audio!) bt878 + - LR136 = Flyvideo 2100/3100 (Low profile, SAA7130/SAA7134) + - LR137 = Flyvideo DV2000/DV3000 (SAA7130/SAA7134 + IEEE1394) + - LR138 Rev.C= Flyvideo 2000 (SAA7130) + - LR138 Flyvideo 3000 (SAA7134) w/Stereo TV + + - These exist in variations w/FM and w/Remote sometimes denoted + by suffixes "FM" and "R". + + #) You have a laptop (miniPCI card): + + - Product = FlyTV Platinum Mini + - Model/Chip = LR212/saa7135 + + - Lifeview.com.tw states (Feb. 2002): + "The FlyVideo2000 and FlyVideo2000s product name have renamed to FlyVideo98." + Their Bt8x8 cards are listed as discontinued. + - Flyvideo 2000S was probably sold as Flyvideo 3000 in some countries(Europe?). + The new Flyvideo 2000/3000 are SAA7130/SAA7134 based. + +"Flyvideo II" had been the name for the 848 cards, nowadays (in Germany) +this name is re-used for LR50 Rev.W. + +The Lifeview website mentioned Flyvideo III at some time, but such a card +has not yet been seen (perhaps it was the german name for LR90 [stereo]). +These cards are sold by many OEMs too. + +FlyVideo A2 (Elta 8680)= LR90 Rev.F (w/Remote, w/o FM, stereo TV by tda9821) {Germany} + +Lifeview 3000 (Elta 8681) as sold by Plus(April 2002), Germany = LR138 w/ saa7134 + +lifeview config coding on gpio pins 0-9 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +- LR50 rev. Q ("PARTS: 7031505116), Tuner wurde als Nr. 5 erkannt, Eingänge + SVideo, TV, Composite, Audio, Remote: + + - CP9..1=100001001 (1: 0-Ohm-Widerstand gegen GND unbestückt; 0: bestückt) + + +Typhoon TV card series: +~~~~~~~~~~~~~~~~~~~~~~~ + +These can be CPH, Flyvideo, Pixelview or KNC1 series. +Typhoon is the brand of Anubis. +Model 50680 got re-used, some model no. had different contents over time. + +Models: + + - 50680 "TV Tuner PCI Pal BG"(old,red package)=can be CPH03x(bt848) or CPH06x(bt878) + - 50680 "TV Tuner Pal BG" (blue package)= Pixelview PV-BT878P+ (Rev 9B) + - 50681 "TV Tuner PCI Pal I" (variant of 50680) + - 50682 "TView TV/FM Tuner Pal BG" = Flyvideo 98FM (LR50 Rev.Q) + + .. note:: + + The package has a picture of CPH05x (which would be a real TView) + + - 50683 "TV Tuner PCI SECAM" (variant of 50680) + - 50684 "TV Tuner Pal BG" = Pixelview 878TV(Rev.3D) + - 50686 "TV Tuner" = KNC1 TV Station + - 50687 "TV Tuner stereo" = KNC1 TV Station pro + - 50688 "TV Tuner RDS" (black package) = KNC1 TV Station RDS + - 50689 TV SAT DVB-S CARD CI PCI (SAA7146AH, SU1278?) = "KNC1 TV Station DVB-S" + - 50692 "TV/FM Tuner" (small PCB) + - 50694 TV TUNER CARD RDS (PHILIPS CHIPSET SAA7134HL) + - 50696 TV TUNER STEREO (PHILIPS CHIPSET SAA7134HL, MK3ME Tuner) + - 50804 PC-SAT TV/Audio Karte = Techni-PC-Sat (ZORAN 36120PQC, Tuner:Alps) + - 50866 TVIEW SAT RECEIVER+ADR + - 50868 "TV/FM Tuner Pal I" (variant of 50682) + - 50999 "TV/FM Tuner Secam" (variant of 50682) + +Guillemot +~~~~~~~~~ + +Models: + +- Maxi-TV PCI (ZR36120) +- Maxi TV Video 2 = LR50 Rev.Q (FI1216MF, PAL BG+SECAM) +- Maxi TV Video 3 = CPH064 (PAL BG + SECAM) + +Mentor +~~~~~~ + +Mentor TV card ("55-878TV-U1") = Pixelview 878TV(Rev.3F) (w/FM w/Remote) + +Prolink +~~~~~~~ + +- TV cards: + + - PixelView Play TV pro - (Model: PV-BT878P+ REV 8E) + - PixelView Play TV pro - (Model: PV-BT878P+ REV 9D) + - PixelView Play TV pro - (Model: PV-BT878P+ REV 4C / 8D / 10A ) + - PixelView Play TV - (Model: PV-BT848P+) + - 878TV - (Model: PV-BT878TV) + +- Multimedia TV packages (card + software pack): + + - PixelView Play TV Theater - (Model: PV-M4200) = PixelView Play TV pro + Software + - PixelView Play TV PAK - (Model: PV-BT878P+ REV 4E) + - PixelView Play TV/VCR - (Model: PV-M3200 REV 4C / 8D / 10A ) + - PixelView Studio PAK - (Model: M2200 REV 4C / 8D / 10A ) + - PixelView PowerStudio PAK - (Model: PV-M3600 REV 4E) + - PixelView DigitalVCR PAK - (Model: PV-M2400 REV 4C / 8D / 10A ) + - PixelView PlayTV PAK II (TV/FM card + usb camera) PV-M3800 + - PixelView PlayTV XP PV-M4700,PV-M4700(w/FM) + - PixelView PlayTV DVR PV-M4600 package contents:PixelView PlayTV pro, windvr & videoMail s/w + +- Further Cards: + + - PV-BT878P+rev.9B (Play TV Pro, opt. w/FM w/NICAM) + - PV-BT878P+rev.2F + - PV-BT878P Rev.1D (bt878, capture only) + + - XCapture PV-CX881P (cx23881) + - PlayTV HD PV-CX881PL+, PV-CX881PL+(w/FM) (cx23881) + + - DTV3000 PV-DTV3000P+ DVB-S CI = Twinhan VP-1030 + - DTV2000 DVB-S = Twinhan VP-1020 + +- Video Conferencing: + + - PixelView Meeting PAK - (Model: PV-BT878P) + - PixelView Meeting PAK Lite - (Model: PV-BT878P) + - PixelView Meeting PAK plus - (Model: PV-BT878P+rev 4C/8D/10A) + - PixelView Capture - (Model: PV-BT848P) + - PixelView PlayTV USB pro + - Model No. PV-NT1004+, PV-NT1004+ (w/FM) = NT1004 USB decoder chip + SAA7113 video decoder chip + +Dynalink +~~~~~~~~ + +These are CPH series. + +Phoebemicro +~~~~~~~~~~~ + +- TV Master = CPH030 or CPH060 +- TV Master FM = CPH050 + +Genius/Kye +~~~~~~~~~~ + +- Video Wonder/Genius Internet Video Kit = LR37 Rev.C +- Video Wonder Pro II (848 or 878) = LR26 + +Tekram +~~~~~~ + +- VideoCap C205 (Bt848) +- VideoCap C210 (zr36120 +Philips) +- CaptureTV M200 (ISA) +- CaptureTV M205 (Bt848) + +Lucky Star +~~~~~~~~~~ + +- Image World Conference TV = LR50 Rev. Q + +Leadtek +~~~~~~~ + +- WinView 601 (Bt848) +- WinView 610 (Zoran) +- WinFast2000 +- WinFast2000 XP + +Support for the Leadtek WinView 601 TV/FM +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Author of this section: Jon Tombs + +This card is basically the same as all the rest (Bt484A, Philips tuner), +the main difference is that they have attached a programmable attenuator to 3 +GPIO lines in order to give some volume control. They have also stuck an +infra-red remote control decoded on the board, I will add support for this +when I get time (it simple generates an interrupt for each key press, with +the key code is placed in the GPIO port). + +I don't yet have any application to test the radio support. The tuner +frequency setting should work but it is possible that the audio multiplexer +is wrong. If it doesn't work, send me email. + + +- No Thanks to Leadtek they refused to answer any questions about their + hardware. The driver was written by visual inspection of the card. If you + use this driver, send an email insult to them, and tell them you won't + continue buying their hardware unless they support Linux. + +- Little thanks to Princeton Technology Corp (http://www.princeton.com.tw) + who make the audio attenuator. Their publicly available data-sheet available + on their web site doesn't include the chip programming information! Hidden + on their server are the full data-sheets, but don't ask how I found it. + +To use the driver I use the following options, the tuner and pll settings might +be different in your country + +insmod videodev +insmod i2c scan=1 i2c_debug=0 verbose=0 +insmod tuner type=1 debug=0 +insmod bttv pll=1 radio=1 card=17 + + +KNC One +~~~~~~~ + +- TV-Station +- TV-Station SE (+Software Bundle) +- TV-Station pro (+TV stereo) +- TV-Station FM (+Radio) +- TV-Station RDS (+RDS) +- TV Station SAT (analog satellite) +- TV-Station DVB-S + +.. note:: newer Cards have saa7134, but model name stayed the same? + +Provideo +~~~~~~~~ + +- PV951 or PV-951 (also are sold as: + Boeder TV-FM Video Capture Card, + Titanmedia Supervision TV-2400, + Provideo PV951 TF, + 3DeMon PV951, + MediaForte TV-Vision PV951, + Yoko PV951, + Vivanco Tuner Card PCI Art.-Nr.: 68404, + ) now named PV-951T + +- Surveillance Series: + + - PV-141 + - PV-143 + - PV-147 + - PV-148 (capture only) + - PV-150 + - PV-151 + +- TV-FM Tuner Series: + + - PV-951TDV (tv tuner + 1394) + - PV-951T/TF + - PV-951PT/TF + - PV-956T/TF Low Profile + - PV-911 + +Highscreen +~~~~~~~~~~ + +Models: + +- TV Karte = LR50 Rev.S +- TV-Boostar = Terratec Terra TV+ Version 1.0 (Bt848, tda9821) "ceb105.pcb" + +Zoltrix +~~~~~~~ + +Models: + +- Face to Face Capture (Bt848 capture only) (PCB "VP-2848") +- Face To Face TV MAX (Bt848) (PCB "VP-8482 Rev1.3") +- Genie TV (Bt878) (PCB "VP-8790 Rev 2.1") +- Genie Wonder Pro + +AVerMedia +~~~~~~~~~ + +- AVer FunTV Lite (ISA, AV3001 chipset) "M101.C" +- AVerTV +- AVerTV Stereo +- AVerTV Studio (w/FM) +- AVerMedia TV98 with Remote +- AVerMedia TV/FM98 Stereo +- AVerMedia TVCAM98 +- TVCapture (Bt848) +- TVPhone (Bt848) +- TVCapture98 (="AVerMedia TV98" in USA) (Bt878) +- TVPhone98 (Bt878, w/FM) + +======== =========== =============== ======= ====== ======== ======================= +PCB PCI-ID Model-Name Eeprom Tuner Sound Country +======== =========== =============== ======= ====== ======== ======================= +M101.C ISA ! +M108-B Bt848 -- FR1236 US [#f2]_, [#f3]_ +M1A8-A Bt848 AVer TV-Phone FM1216 -- +M168-T 1461:0003 AVerTV Studio 48:17 FM1216 TDA9840T D [#f1]_ w/FM w/Remote +M168-U 1461:0004 TVCapture98 40:11 FI1216 -- D w/Remote +M168II-B 1461:0003 Medion MD9592 48:16 FM1216 TDA9873H D w/FM +======== =========== =============== ======= ====== ======== ======================= + +.. [#f1] Daughterboard MB68-A with TDA9820T and TDA9840T +.. [#f2] Sony NE41S soldered (stereo sound?) +.. [#f3] Daughterboard M118-A w/ pic 16c54 and 4 MHz quartz + +- US site has different drivers for (as of 09/2002): + + - EZ Capture/InterCam PCI (BT-848 chip) + - EZ Capture/InterCam PCI (BT-878 chip) + - TV-Phone (BT-848 chip) + - TV98 (BT-848 chip) + - TV98 With Remote (BT-848 chip) + - TV98 (BT-878 chip) + - TV98 With Remote (BT-878) + - TV/FM98 (BT-878 chip) + - AVerTV + - AverTV Stereo + - AVerTV Studio + +DE hat diverse Treiber fuer diese Modelle (Stand 09/2002): + + - TVPhone (848) mit Philips tuner FR12X6 (w/ FM radio) + - TVPhone (848) mit Philips tuner FM12X6 (w/ FM radio) + - TVCapture (848) w/Philips tuner FI12X6 + - TVCapture (848) non-Philips tuner + - TVCapture98 (Bt878) + - TVPhone98 (Bt878) + - AVerTV und TVCapture98 w/VCR (Bt 878) + - AVerTVStudio und TVPhone98 w/VCR (Bt878) + - AVerTV GO Serie (Kein SVideo Input) + - AVerTV98 (BT-878 chip) + - AVerTV98 mit Fernbedienung (BT-878 chip) + - AVerTV/FM98 (BT-878 chip) + + - VDOmate (www.averm.com.cn) = M168U ? + +Aimslab +~~~~~~~ + +Models: + +- Video Highway or "Video Highway TR200" (ISA) +- Video Highway Xtreme (aka "VHX") (Bt848, FM w/ TEA5757) + +IXMicro (former: IMS=Integrated Micro Solutions) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- IXTV BT848 (=TurboTV) +- IXTV BT878 +- IMS TurboTV (Bt848) + +Lifetec/Medion/Tevion/Aldi +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- LT9306/MD9306 = CPH061 +- LT9415/MD9415 = LR90 Rev.F or Rev.G +- MD9592 = Avermedia TVphone98 (PCI_ID=1461:0003), PCB-Rev=M168II-B (w/TDA9873H) +- MD9717 = KNC One (Rev D4, saa7134, FM1216 MK2 tuner) +- MD5044 = KNC One (Rev D4, saa7134, FM1216ME MK3 tuner) + +Modular Technologies (www.modulartech.com) UK +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- MM100 PCTV (Bt848) +- MM201 PCTV (Bt878, Bt832) w/ Quartzsight camera +- MM202 PCTV (Bt878, Bt832, tda9874) +- MM205 PCTV (Bt878) +- MM210 PCTV (Bt878) (Galaxy TV, Galaxymedia ?) + +Terratec +~~~~~~~~ + +Models: + +- Terra TV+ Version 1.0 (Bt848), "ceb105.PCB" printed on the PCB, TDA9821 +- Terra TV+ Version 1.1 (Bt878), "LR74 Rev.E" printed on the PCB, TDA9821 +- Terra TValueRadio, "LR102 Rev.C" printed on the PCB +- Terra TV/Radio+ Version 1.0, "80-CP2830100-0" TTTV3 printed on the PCB, + "CPH010-E83" on the back, SAA6588T, TDA9873H +- Terra TValue Version BT878, "80-CP2830110-0 TTTV4" printed on the PCB, + "CPH011-D83" on back +- Terra TValue Version 1.0 "ceb105.PCB" (really identical to Terra TV+ Version 1.0) +- Terra TValue New Revision "LR102 Rec.C" +- Terra Active Radio Upgrade (tea5757h, saa6588t) + +- LR74 is a newer PCB revision of ceb105 (both incl. connector for Active Radio Upgrade) + +- Cinergy 400 (saa7134), "E877 11(S)", "PM820092D" printed on PCB +- Cinergy 600 (saa7134) + +Technisat +~~~~~~~~~ + +Models: + +- Discos ADR PC-Karte ISA (no TV!) +- Discos ADR PC-Karte PCI (probably no TV?) +- Techni-PC-Sat (Sat. analog) + Rev 1.2 (zr36120, vpx3220, stv0030, saa5246, BSJE3-494A) +- Mediafocus I (zr36120/zr36125, drp3510, Sat. analog + ADR Radio) +- Mediafocus II (saa7146, Sat. analog) +- SatADR Rev 2.1 (saa7146a, saa7113h, stv0056a, msp3400c, drp3510a, BSKE3-307A) +- SkyStar 1 DVB (AV7110) = Technotrend Premium +- SkyStar 2 DVB (B2C2) (=Sky2PC) + +Siemens +~~~~~~~ + +Multimedia eXtension Board (MXB) (SAA7146, SAA7111) + +Powercolor +~~~~~~~~~~ + +Models: + +- MTV878 + Package comes with different contents: + + a) pcb "MTV878" (CARD=75) + b) Pixelview Rev. 4\_ + +- MTV878R w/Remote Control +- MTV878F w/Remote Control w/FM radio + +Pinnacle +~~~~~~~~ + +PCTV models: + +- Mirovideo PCTV (Bt848) +- Mirovideo PCTV SE (Bt848) +- Mirovideo PCTV Pro (Bt848 + Daughterboard for TV Stereo and FM) +- Studio PCTV Rave (Bt848 Version = Mirovideo PCTV) +- Studio PCTV Rave (Bt878 package w/o infrared) +- Studio PCTV (Bt878) +- Studio PCTV Pro (Bt878 stereo w/ FM) +- Pinnacle PCTV (Bt878, MT2032) +- Pinnacle PCTV Pro (Bt878, MT2032) +- Pinncale PCTV Sat (bt878a, HM1821/1221) ["Conexant CX24110 with CX24108 tuner, aka HM1221/HM1811"] +- Pinnacle PCTV Sat XE + +M(J)PEG capture and playback models: + +- DC1+ (ISA) +- DC10 (zr36057, zr36060, saa7110, adv7176) +- DC10+ (zr36067, zr36060, saa7110, adv7176) +- DC20 (ql16x24b,zr36050, zr36016, saa7110, saa7187 ...) +- DC30 (zr36057, zr36050, zr36016, vpx3220, adv7176, ad1843, tea6415, miro FST97A1) +- DC30+ (zr36067, zr36050, zr36016, vpx3220, adv7176) +- DC50 (zr36067, zr36050, zr36016, saa7112, adv7176 (2 pcs.?), ad1843, miro FST97A1, Lattice ???) + +Lenco +~~~~~ + +Models: + +- MXR-9565 (=Technisat Mediafocus?) +- MXR-9571 (Bt848) (=CPH031?) +- MXR-9575 +- MXR-9577 (Bt878) (=Prolink 878TV Rev.3x) +- MXTV-9578CP (Bt878) (= Prolink PV-BT878P+4E) + +Iomega +~~~~~~ + +Buz (zr36067, zr36060, saa7111, saa7185) + +LML +~~~ + LML33 (zr36067, zr36060, bt819, bt856) + +Grandtec +~~~~~~~~ + +Models: + +- Grand Video Capture (Bt848) +- Multi Capture Card (Bt878) + +Koutech +~~~~~~~ + +Models: + +- KW-606 (Bt848) +- KW-607 (Bt848 capture only) +- KW-606RSF +- KW-607A (capture only) +- KW-608 (Zoran capture only) + +IODATA (jp) +~~~~~~~~~~~ + +Models: + +- GV-BCTV/PCI +- GV-BCTV2/PCI +- GV-BCTV3/PCI +- GV-BCTV4/PCI +- GV-VCP/PCI (capture only) +- GV-VCP2/PCI (capture only) + +Canopus (jp) +~~~~~~~~~~~~ + +WinDVR = Kworld "KW-TVL878RF" + +www.sigmacom.co.kr +~~~~~~~~~~~~~~~~~~ + +Sigma Cyber TV II + +www.sasem.co.kr +~~~~~~~~~~~~~~~ + +Litte OnAir TV + +hama +~~~~ + +TV/Radio-Tuner Card, PCI (Model 44677) = CPH051 + +Sigma Designs +~~~~~~~~~~~~~ + +Hollywood plus (em8300, em9010, adv7175), (PCB "M340-10") MPEG DVD decoder + +Formac +~~~~~~ + +Models: + +- iProTV (Card for iMac Mezzanine slot, Bt848+SCSI) +- ProTV (Bt848) +- ProTV II = ProTV Stereo (Bt878) ["stereo" means FM stereo, tv is still mono] + +ATI +~~~ + +Models: + +- TV-Wonder +- TV-Wonder VE + +Diamond Multimedia +~~~~~~~~~~~~~~~~~~ + +DTV2000 (Bt848, tda9875) + +Aopen +~~~~~ + +- VA1000 Plus (w/ Stereo) +- VA1000 Lite +- VA1000 (=LR90) + +Intel +~~~~~ + +Models: + +- Smart Video Recorder (ISA full-length) +- Smart Video Recorder pro (ISA half-length) +- Smart Video Recorder III (Bt848) + +STB +~~~ + +Models: + +- STB Gateway 6000704 (bt878) +- STB Gateway 6000699 (bt848) +- STB Gateway 6000402 (bt848) +- STB TV130 PCI + +Videologic +~~~~~~~~~~ + +Models: + +- Captivator Pro/TV (ISA?) +- Captivator PCI/VC (Bt848 bundled with camera) (capture only) + +Technotrend +~~~~~~~~~~~~ + +Models: + +- TT-SAT PCI (PCB "Sat-PCI Rev.:1.3.1"; zr36125, vpx3225d, stc0056a, Tuner:BSKE6-155A +- TT-DVB-Sat + - revisions 1.1, 1.3, 1.5, 1.6 and 2.1 + - This card is sold as OEM from: + + - Siemens DVB-s Card + - Hauppauge WinTV DVB-S + - Technisat SkyStar 1 DVB + - Galaxis DVB Sat + + - Now this card is called TT-PCline Premium Family + - TT-Budget (saa7146, bsru6-701a) + This card is sold as OEM from: + + - Hauppauge WinTV Nova + - Satelco Standard PCI (DVB-S) + - TT-DVB-C PCI + +Teles +~~~~~ + + DVB-s (Rev. 2.2, BSRV2-301A, data only?) + +Remote Vision +~~~~~~~~~~~~~ + +MX RV605 (Bt848 capture only) + +Boeder +~~~~~~ + +Models: + +- PC ChatCam (Model 68252) (Bt848 capture only) +- Tv/Fm Capture Card (Model 68404) = PV951 + +Media-Surfer (esc-kathrein.de) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- Sat-Surfer (ISA) +- Sat-Surfer PCI = Techni-PC-Sat +- Cable-Surfer 1 +- Cable-Surfer 2 +- Cable-Surfer PCI (zr36120) +- Audio-Surfer (ISA Radio card) + +Jetway (www.jetway.com.tw) +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- JW-TV 878M +- JW-TV 878 = KWorld KW-TV878RF + +Galaxis +~~~~~~~ + +Models: + +- Galaxis DVB Card S CI +- Galaxis DVB Card C CI +- Galaxis DVB Card S +- Galaxis DVB Card C +- Galaxis plug.in S [neuer Name: Galaxis DVB Card S CI + +Hauppauge +~~~~~~~~~ + +Models: + +- many many WinTV models ... +- WinTV DVBs = Technotrend Premium 1.3 +- WinTV NOVA = Technotrend Budget 1.1 "S-DVB DATA" +- WinTV NOVA-CI "SDVBACI" +- WinTV Nova USB (=Technotrend USB 1.0) +- WinTV-Nexus-s (=Technotrend Premium 2.1 or 2.2) +- WinTV PVR +- WinTV PVR 250 +- WinTV PVR 450 + +US models + +-990 WinTV-PVR-350 (249USD) (iTVC15 chipset + radio) +-980 WinTV-PVR-250 (149USD) (iTVC15 chipset) +-880 WinTV-PVR-PCI (199USD) (KFIR chipset + bt878) +-881 WinTV-PVR-USB +-190 WinTV-GO +-191 WinTV-GO-FM +-404 WinTV +-401 WinTV-radio +-495 WinTV-Theater +-602 WinTV-USB +-621 WinTV-USB-FM +-600 USB-Live +-698 WinTV-HD +-697 WinTV-D +-564 WinTV-Nexus-S + +Deutsche Modelle: + +-603 WinTV GO +-719 WinTV Primio-FM +-718 WinTV PCI-FM +-497 WinTV Theater +-569 WinTV USB +-568 WinTV USB-FM +-882 WinTV PVR +-981 WinTV PVR 250 +-891 WinTV-PVR-USB +-541 WinTV Nova +-488 WinTV Nova-Ci +-564 WinTV-Nexus-s +-727 WinTV-DVB-c +-545 Common Interface +-898 WinTV-Nova-USB + +UK models: + +-607 WinTV Go +-693,793 WinTV Primio FM +-647,747 WinTV PCI FM +-498 WinTV Theater +-883 WinTV PVR +-893 WinTV PVR USB (Duplicate entry) +-566 WinTV USB (UK) +-573 WinTV USB FM +-429 Impact VCB (bt848) +-600 USB Live (Video-In 1x Comp, 1xSVHS) +-542 WinTV Nova +-717 WinTV DVB-S +-909 Nova-t PCI +-893 Nova-t USB (Duplicate entry) +-802 MyTV +-804 MyView +-809 MyVideo +-872 MyTV2Go FM +-546 WinTV Nova-S CI +-543 WinTV Nova +-907 Nova-S USB +-908 Nova-T USB +-717 WinTV Nexus-S +-157 DEC3000-s Standalone + USB + +Spain: + +-685 WinTV-Go +-690 WinTV-PrimioFM +-416 WinTV-PCI Nicam Estereo +-677 WinTV-PCI-FM +-699 WinTV-Theater +-683 WinTV-USB +-678 WinTV-USB-FM +-983 WinTV-PVR-250 +-883 WinTV-PVR-PCI +-993 WinTV-PVR-350 +-893 WinTV-PVR-USB +-728 WinTV-DVB-C PCI +-832 MyTV2Go +-869 MyTV2Go-FM +-805 MyVideo (USB) + + +Matrix-Vision +~~~~~~~~~~~~~ + +Models: + +- MATRIX-Vision MV-Delta +- MATRIX-Vision MV-Delta 2 +- MVsigma-SLC (Bt848) + +Conceptronic (.net) +~~~~~~~~~~~~~~~~~~~ + +Models: + +- TVCON FM, TV card w/ FM = CPH05x +- TVCON = CPH06x + +BestData +~~~~~~~~ + +Models: + +- HCC100 = VCC100rev1 + camera +- VCC100 rev1 (bt848) +- VCC100 rev2 (bt878) + +Gallant (www.gallantcom.com) www.minton.com.tw +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- Intervision IV-510 (capture only bt8x8) +- Intervision IV-550 (bt8x8) +- Intervision IV-100 (zoran) +- Intervision IV-1000 (bt8x8) + +Asonic (www.asonic.com.cn) (website down) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +SkyEye tv 878 + +Hoontech +~~~~~~~~ + +878TV/FM + +Teppro (www.itcteppro.com.tw) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- ITC PCITV (Card Ver 1.0) "Teppro TV1/TVFM1 Card" +- ITC PCITV (Card Ver 2.0) +- ITC PCITV (Card Ver 3.0) = "PV-BT878P+ (REV.9D)" +- ITC PCITV (Card Ver 4.0) +- TEPPRO IV-550 (For BT848 Main Chip) +- ITC DSTTV (bt878, satellite) +- ITC VideoMaker (saa7146, StreamMachine sm2110, tvtuner) "PV-SM2210P+ (REV:1C)" + +Kworld (www.kworld.com.tw) +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +PC TV Station: + +- KWORLD KW-TV878R TV (no radio) +- KWORLD KW-TV878RF TV (w/ radio) +- KWORLD KW-TVL878RF (low profile) +- KWORLD KW-TV713XRF (saa7134) + + + MPEG TV Station (same cards as above plus WinDVR Software MPEG en/decoder) + +- KWORLD KW-TV878R -Pro TV (no Radio) +- KWORLD KW-TV878RF-Pro TV (w/ Radio) +- KWORLD KW-TV878R -Ultra TV (no Radio) +- KWORLD KW-TV878RF-Ultra TV (w/ Radio) + +JTT/ Justy Corp.(http://www.jtt.ne.jp/) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +JTT-02 (JTT TV) "TV watchmate pro" (bt848) + +ADS www.adstech.com +~~~~~~~~~~~~~~~~~~~ + +Models: + +- Channel Surfer TV ( CHX-950 ) +- Channel Surfer TV+FM ( CHX-960FM ) + +AVEC www.prochips.com +~~~~~~~~~~~~~~~~~~~~~ + +AVEC Intercapture (bt848, tea6320) + +NoBrand +~~~~~~~ + +TV Excel = Australian Name for "PV-BT878P+ 8E" or "878TV Rev.3\_" + +Mach www.machspeed.com +~~~~~~~~~~~~~~~~~~~~~~ + +Mach TV 878 + +Eline www.eline-net.com/ +~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- Eline Vision TVMaster / TVMaster FM (ELV-TVM/ ELV-TVM-FM) = LR26 (bt878) +- Eline Vision TVMaster-2000 (ELV-TVM-2000, ELV-TVM-2000-FM)= LR138 (saa713x) + +Spirit +~~~~~~ + +- Spirit TV Tuner/Video Capture Card (bt848) + +Boser www.boser.com.tw +~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- HS-878 Mini PCI Capture Add-on Card +- HS-879 Mini PCI 3D Audio and Capture Add-on Card (w/ ES1938 Solo-1) + +Satelco www.citycom-gmbh.de, www.satelco.de +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- TV-FM =KNC1 saa7134 +- Standard PCI (DVB-S) = Technotrend Budget +- Standard PCI (DVB-S) w/ CI +- Satelco Highend PCI (DVB-S) = Technotrend Premium + + +Sensoray www.sensoray.com +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- Sensoray 311 (PC/104 bus) +- Sensoray 611 (PCI) + +CEI (Chartered Electronics Industries Pte Ltd [CEI] [FCC ID HBY]) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- TV Tuner - HBY-33A-RAFFLES Brooktree Bt848KPF + Philips +- TV Tuner MG9910 - HBY33A-TVO CEI + Philips SAA7110 + OKI M548262 + ST STV8438CV +- Primetime TV (ISA) + + - acquired by Singapore Technologies + - now operating as Chartered Semiconductor Manufacturing + - Manufacturer of video cards is listed as: + + - Cogent Electronics Industries [CEI] + +AITech +~~~~~~ + +Models: + +- Wavewatcher TV (ISA) +- AITech WaveWatcher TV-PCI = can be LR26 (Bt848) or LR50 (BT878) +- WaveWatcher TVR-202 TV/FM Radio Card (ISA) + +MAXRON +~~~~~~ + +Maxron MaxTV/FM Radio (KW-TV878-FNT) = Kworld or JW-TV878-FBK + +www.ids-imaging.de +~~~~~~~~~~~~~~~~~~ + +Models: + +- Falcon Series (capture only) + +In USA: http://www.theimagingsource.com/ +- DFG/LC1 + +www.sknet-web.co.jp +~~~~~~~~~~~~~~~~~~~ + +SKnet Monster TV (saa7134) + +A-Max www.amaxhk.com (Colormax, Amax, Napa) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +APAC Viewcomp 878 + +Cybertainment +~~~~~~~~~~~~~ + +Models: + +- CyberMail AV Video Email Kit w/ PCI Capture Card (capture only) +- CyberMail Xtreme + +These are Flyvideo + +VCR (http://www.vcrinc.com/) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Video Catcher 16 + +Twinhan +~~~~~~~ + +Models: + +- DST Card/DST-IP (bt878, twinhan asic) VP-1020 + - Sold as: + + - KWorld DVBS Satellite TV-Card + - Powercolor DSTV Satellite Tuner Card + - Prolink Pixelview DTV2000 + - Provideo PV-911 Digital Satellite TV Tuner Card With Common Interface ? + +- DST-CI Card (DVB Satellite) VP-1030 +- DCT Card (DVB cable) + +MSI +~~~ + +Models: + +- MSI TV@nywhere Tuner Card (MS-8876) (CX23881/883) Not Bt878 compatible. +- MS-8401 DVB-S + +Focus www.focusinfo.com +~~~~~~~~~~~~~~~~~~~~~~~ + +InVideo PCI (bt878) + +Sdisilk www.sdisilk.com/ +~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- SDI Silk 100 +- SDI Silk 200 SDI Input Card + +www.euresys.com +~~~~~~~~~~~~~~~ + +PICOLO series + +PMC/Pace +~~~~~~~~ + +www.pacecom.co.uk website closed + +Mercury www.kobian.com (UK and FR) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Models: + +- LR50 +- LR138RBG-Rx == LR138 + +TEC sound +~~~~~~~~~ + +TV-Mate = Zoltrix VP-8482 + +Though educated googling found: www.techmakers.com + +(package and manuals don't have any other manufacturer info) TecSound + +Lorenzen www.lorenzen.de +~~~~~~~~~~~~~~~~~~~~~~~~ + +SL DVB-S PCI = Technotrend Budget PCI (su1278 or bsru version) + +Origo (.uk) www.origo2000.com +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +PC TV Card = LR50 + +I/O Magic www.iomagic.com +~~~~~~~~~~~~~~~~~~~~~~~~~ + +PC PVR - Desktop TV Personal Video Recorder DR-PCTV100 = Pinnacle ROB2D-51009464 4.0 + Cyberlink PowerVCR II + +Arowana +~~~~~~~ + +TV-Karte / Poso Power TV (?) = Zoltrix VP-8482 (?) + +iTVC15 boards +~~~~~~~~~~~~~ + +kuroutoshikou.com ITVC15 +yuan.com MPG160 PCI TV (Internal PCI MPEG2 encoder card plus TV-tuner) + +Asus www.asuscom.com +~~~~~~~~~~~~~~~~~~~~ + +Models: + +- Asus TV Tuner Card 880 NTSC (low profile, cx23880) +- Asus TV (saa7134) + +Hoontech +~~~~~~~~ + +http://www.hoontech.de/ + +- HART Vision 848 (H-ART Vision 848) +- HART Vision 878 (H-Art Vision 878) + + + +Chips used at bttv devices +-------------------------- + +- all boards: + + - Brooktree Bt848/848A/849/878/879: video capture chip + +- Board specific + + - Miro PCTV: + + - Philips or Temic Tuner + + - Hauppauge Win/TV pci (version 405): + + - Microchip 24LC02B or Philips 8582E2Y: + + - 256 Byte EEPROM with configuration information + - I2C 0xa0-0xa1, (24LC02B also responds to 0xa2-0xaf) + + - Philips SAA5246AGP/E: Videotext decoder chip, I2C 0x22-0x23 + + - TDA9800: sound decoder + + - Winbond W24257AS-35: 32Kx8 CMOS static RAM (Videotext buffer mem) + + - 14052B: analog switch for selection of sound source + +- PAL: + + - TDA5737: VHF, hyperband and UHF mixer/oscillator for TV and VCR 3-band tuners + - TSA5522: 1.4 GHz I2C-bus controlled synthesizer, I2C 0xc2-0xc3 + +- NTSC: + + - TDA5731: VHF, hyperband and UHF mixer/oscillator for TV and VCR 3-band tuners + - TSA5518: no datasheet available on Philips site + +- STB TV pci: + + - ??? + - if you want better support for STB cards send me info! + Look at the board! What chips are on it? + + + + +Specs +----- + +Philips http://www.Semiconductors.COM/pip/ + +Conexant http://www.conexant.com/ + +Micronas http://www.micronas.com/en/home/index.html + +Thanks +------ + +Many thanks to: + +- Markus Schroeder for information on the Bt848 + and tuner programming and his control program xtvc. + +- Martin Buck for his great Videotext + package. + +- Gerd Hoffmann for the MSP3400 support and the modular + I2C, tuner, ... support. + + +- MATRIX Vision for giving us 2 cards for free, which made support of + single crystal operation possible. + +- MIRO for providing a free PCTV card and detailed information about the + components on their cards. (E.g. how the tuner type is detected) + Without their card I could not have debugged the NTSC mode. + +- Hauppauge for telling how the sound input is selected and what components + they do and will use on their radio cards. + Also many thanks for faxing me the FM1216 data sheet. + +Contributors +------------ + +Michael Chu + AverMedia fix and more flexible card recognition + +Alan Cox + Video4Linux interface and 2.1.x kernel adaptation + +Chris Kleitsch + Hardware I2C + +Gerd Hoffmann + Radio card (ITT sound processor) + +bigfoot + +Ragnar Hojland Espinosa + ConferenceTV card + + ++ many more (please mail me if you are missing in this list and would + like to be mentioned) diff --git a/Documentation/admin-guide/media/cafe_ccic.rst b/Documentation/admin-guide/media/cafe_ccic.rst new file mode 100644 index 000000000000..ff7fbce1342a --- /dev/null +++ b/Documentation/admin-guide/media/cafe_ccic.rst @@ -0,0 +1,62 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The cafe_ccic driver +==================== + +Author: Jonathan Corbet + +Introduction +------------ + +"cafe_ccic" is a driver for the Marvell 88ALP01 "cafe" CMOS camera +controller. This is the controller found in first-generation OLPC systems, +and this driver was written with support from the OLPC project. + +Current status: the core driver works. It can generate data in YUV422, +RGB565, and RGB444 formats. (Anybody looking at the code will see RGB32 as +well, but that is a debugging aid which will be removed shortly). VGA and +QVGA modes work; CIF is there but the colors remain funky. Only the OV7670 +sensor is known to work with this controller at this time. + +To try it out: either of these commands will work: + +.. code-block:: none + + $ mplayer tv:// -tv driver=v4l2:width=640:height=480 -nosound + $ mplayer tv:// -tv driver=v4l2:width=640:height=480:outfmt=bgr16 -nosound + +The "xawtv" utility also works; gqcam does not, for unknown reasons. + +Load time options +----------------- + +There are a few load-time options, most of which can be changed after +loading via sysfs as well: + + - alloc_bufs_at_load: Normally, the driver will not allocate any DMA + buffers until the time comes to transfer data. If this option is set, + then worst-case-sized buffers will be allocated at module load time. + This option nails down the memory for the life of the module, but + perhaps decreases the chances of an allocation failure later on. + + - dma_buf_size: The size of DMA buffers to allocate. Note that this + option is only consulted for load-time allocation; when buffers are + allocated at run time, they will be sized appropriately for the current + camera settings. + + - n_dma_bufs: The controller can cycle through either two or three DMA + buffers. Normally, the driver tries to use three buffers; on faster + systems, however, it will work well with only two. + + - min_buffers: The minimum number of streaming I/O buffers that the driver + will consent to work with. Default is one, but, on slower systems, + better behavior with mplayer can be achieved by setting to a higher + value (like six). + + - max_buffers: The maximum number of streaming I/O buffers; default is + ten. That number was carefully picked out of a hat and should not be + assumed to actually mean much of anything. + + - flip: If this boolean parameter is set, the sensor will be instructed to + invert the video image. Whether it makes sense is determined by how + your particular camera is mounted. diff --git a/Documentation/admin-guide/media/cardlist.rst b/Documentation/admin-guide/media/cardlist.rst new file mode 100644 index 000000000000..14249f47fbc2 --- /dev/null +++ b/Documentation/admin-guide/media/cardlist.rst @@ -0,0 +1,20 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Cards List +========== + +.. toctree:: + :maxdepth: 1 + + au0828-cardlist + bttv-cardlist + cx23885-cardlist + cx88-cardlist + em28xx-cardlist + ivtv-cardlist + saa7134-cardlist + saa7164-cardlist + tm6000-cardlist + tuner-cardlist + usbvision-cardlist + gspca-cardlist diff --git a/Documentation/admin-guide/media/cards.rst b/Documentation/admin-guide/media/cards.rst new file mode 100644 index 000000000000..e2e30a56b450 --- /dev/null +++ b/Documentation/admin-guide/media/cards.rst @@ -0,0 +1,146 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Hardware supported by the linuxtv.org DVB drivers +================================================= + +.. note:: + + This documentation is outdated. Please check at the DVB wiki + at https://linuxtv.org/wiki for more updated info. + + Please look at + https://linuxtv.org/wiki/index.php/Hardware_Device_Information + for an updated list of supported cards. + +Generally, the DVB hardware manufacturers frequently change the +frontends (i.e. tuner / demodulator units) used, usually without +changing the product name, revision number or specs. Some cards +are also available in versions with different frontends for +DVB-S/DVB-C/DVB-T. Thus the frontend drivers are listed separately. + +.. note:: + + #) There is no guarantee that every frontend driver works + out of the box with every card, because of different wiring. + + #) The demodulator chips can be used with a variety of + tuner/PLL chips, and not all combinations are supported. Often + the demodulator and tuner/PLL chip are inside a metal box for + shielding, and the whole metal box has its own part number. + + +- Frontends drivers: + + - dvb_dummy_fe: for testing... + + DVB-S: + - ves1x93 : Alps BSRV2 (ves1893 demodulator) and dbox2 (ves1993) + - cx24110 : Conexant HM1221/HM1811 (cx24110 or cx24106 demod, cx24108 PLL) + - grundig_29504-491 : Grundig 29504-491 (Philips TDA8083 demodulator), tsa5522 PLL + - mt312 : Zarlink mt312 or Mitel vp310 demodulator, sl1935 or tsa5059 PLLi, Technisat Sky2Pc with bios Rev. 2.3 + - stv0299 : Alps BSRU6 (tsa5059 PLL), LG TDQB-S00x (tsa5059 PLL), + LG TDQF-S001F (sl1935 PLL), Philips SU1278 (tua6100 PLL), + Philips SU1278SH (tsa5059 PLL), Samsung TBMU24112IMB, Technisat Sky2Pc with bios Rev. 2.6 + + DVB-C: + - ves1820 : various (ves1820 demodulator, sp5659c or spXXXX PLL) + - at76c651 : Atmel AT76c651(B) with DAT7021 PLL + + DVB-T: + - alps_tdlb7 : Alps TDLB7 (sp8870 demodulator, sp5659 PLL) + - alps_tdmb7 : Alps TDMB7 (cx22700 demodulator) + - grundig_29504-401 : Grundig 29504-401 (LSI L64781 demodulator), tsa5060 PLL + - tda1004x : Philips tda10045h (td1344 or tdm1316l PLL) + - nxt6000 : Alps TDME7 (MITEL SP5659 PLL), Alps TDED4 (TI ALP510 PLL), Comtech DVBT-6k07 (SP5730 PLL), (NxtWave Communications NXT6000 demodulator) + - sp887x : Microtune 7202D + - dib3000mb : DiBcom 3000-MB demodulator + + DVB-S/C/T: + - dst : TwinHan DST Frontend + + ATSC: + - nxt200x : Nxtwave NXT2002 & NXT2004 + - or51211 : or51211 based (pcHDTV HD2000 card) + - or51132 : or51132 based (pcHDTV HD3000 card) + - bcm3510 : Broadcom BCM3510 + - lgdt330x : LG Electronics DT3302 & DT3303 + + +- Cards based on the Phillips saa7146 multimedia PCI bridge chip: + + - TI AV7110 based cards (i.e. with hardware MPEG decoder): + - Siemens/Technotrend/Hauppauge PCI DVB card revision 1.1, 1.3, 1.5, 1.6, 2.1 (aka Hauppauge Nexus) + - "budget" cards (i.e. without hardware MPEG decoder): + - Technotrend Budget / Hauppauge WinTV-Nova PCI Cards + - SATELCO Multimedia PCI + - KNC1 DVB-S, Typhoon DVB-S, Terratec Cinergy 1200 DVB-S (no CI support) + - Typhoon DVB-S budget + - Fujitsu-Siemens Activy DVB-S budget card + +- Cards based on the B2C2 Inc. FlexCopII/IIb/III: + + - Technisat SkyStar2 PCI DVB card revision 2.3, 2.6B, 2.6C + +- Cards based on the Conexant Bt8xx PCI bridge: + + - Pinnacle PCTV Sat DVB + - Nebula Electronics DigiTV + - TwinHan DST + - Avermedia DVB-T + - ChainTech digitop DST-1000 DVB-S + - pcHDTV HD-2000 TV + - DViCO FusionHDTV DVB-T Lite + - DViCO FusionHDTV5 Lite + +- Technotrend / Hauppauge DVB USB devices: + + - Nova USB + - DEC 2000-T, 3000-S, 2540-T + +- DiBcom DVB-T USB based devices: + + - Twinhan VisionPlus VisionDTV USB-Ter DVB-T Device + - HAMA DVB-T USB device + - CTS Portable (Chinese Television System) + - KWorld V-Stream XPERT DTV DVB-T USB + - JetWay DTV DVB-T USB + - ADSTech Instant TV DVB-T USB + - Ultima Electronic/Artec T1 USB TVBOX (AN2135 and AN2235) + - Compro Videomate DVB-U2000 - DVB-T USB + - Grandtec USB DVB-T + - Avermedia AverTV DVBT USB + - DiBcom USB DVB-T reference device (non-public) + - Yakumo DVB-T mobile USB2.0 + - DiBcom USB2.0 DVB-T reference device (non-public) + +- Experimental support for the analog module of the Siemens DVB-C PCI card + +- Cards based on the Conexant cx2388x PCI bridge: + + - ADS Tech Instant TV DVB-T PCI + - ATI HDTV Wonder + - digitalnow DNTV Live! DVB-T + - DViCO FusionHDTV DVB-T1 + - DViCO FusionHDTV DVB-T Plus + - DViCO FusionHDTV3 Gold-Q + - DViCO FusionHDTV3 Gold-T + - DViCO FusionHDTV5 Gold + - Hauppauge Nova-T DVB-T + - KWorld/VStream XPert DVB-T + - pcHDTV HD3000 HDTV + - TerraTec Cinergy 1400 DVB-T + - WinFast DTV1000-T + +- Cards based on the Phillips saa7134 PCI bridge: + + - Medion 7134 + - Pinnacle PCTV 300i DVB-T + PAL + - LifeView FlyDVB-T DUO + - Typhoon DVB-T Duo Digital/Analog Cardbus + - Philips TOUGH DVB-T reference design + - Philips EUROPA V3 reference design + - Compro Videomate DVB-T300 + - Compro Videomate DVB-T200 + - AVerMedia AVerTVHD MCE A180 + - KWorld PC150-U ATSC Hybrid + diff --git a/Documentation/admin-guide/media/ci.rst b/Documentation/admin-guide/media/ci.rst new file mode 100644 index 000000000000..ded4d8fbbf92 --- /dev/null +++ b/Documentation/admin-guide/media/ci.rst @@ -0,0 +1,77 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Digital TV Conditional Access Interface +======================================= + + +.. note:: + + This documentation is outdated. + +This document describes the usage of the high level CI API as +in accordance to the Linux DVB API. This is a not a documentation for the, +existing low level CI API. + +.. note:: + + For the Twinhan/Twinhan clones, the dst_ca module handles the CI + hardware handling. This module is loaded automatically if a CI + (Common Interface, that holds the CAM (Conditional Access Module) + is detected. + +ca_zap +~~~~~~ + +A userspace application, like ``ca_zap`` is required to handle encrypted +MPEG-TS streams. + +The ``ca_zap`` userland application is in charge of sending the +descrambling related information to the Conditional Access Module (CAM). + +This application requires the following to function properly as of now. + +a) Tune to a valid channel, with szap. + + eg: $ szap -c channels.conf -r "TMC" -x + +b) a channels.conf containing a valid PMT PID + + eg: TMC:11996:h:0:27500:278:512:650:321 + + here 278 is a valid PMT PID. the rest of the values are the + same ones that szap uses. + +c) after running a szap, you have to run ca_zap, for the + descrambler to function, + + eg: $ ca_zap channels.conf "TMC" + +d) Hopefully enjoy your favourite subscribed channel as you do with + a FTA card. + +.. note:: + + Currently ca_zap, and dst_test, both are meant for demonstration + purposes only, they can become full fledged applications if necessary. + + +Cards that fall in this category +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +At present the cards that fall in this category are the Twinhan and its +clones, these cards are available as VVMER, Tomato, Hercules, Orange and +so on. + +CI modules that are supported +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The CI module support is largely dependent upon the firmware on the cards +Some cards do support almost all of the available CI modules. There is +nothing much that can be done in order to make additional CI modules +working with these cards. + +Modules that have been tested by this driver at present are + +(1) Irdeto 1 and 2 from SCM +(2) Viaccess from SCM +(3) Dragoncam diff --git a/Documentation/admin-guide/media/cpia2.rst b/Documentation/admin-guide/media/cpia2.rst new file mode 100644 index 000000000000..6f4258aebbfe --- /dev/null +++ b/Documentation/admin-guide/media/cpia2.rst @@ -0,0 +1,149 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The cpia2 driver +================ + +Authors: Peter Pregler , +Scott J. Bertin , and +Jarl Totland for the original cpia driver, which +this one was modelled from. + +Introduction +------------ + +This is a driver for STMicroelectronics's CPiA2 (second generation +Colour Processor Interface ASIC) based cameras. This camera outputs an MJPEG +stream at up to vga size. It implements the Video4Linux interface as much as +possible. Since the V4L interface does not support compressed formats, only +an mjpeg enabled application can be used with the camera. We have modified the +gqcam application to view this stream. + +The driver is implemented as two kernel modules. The cpia2 module +contains the camera functions and the V4L interface. The cpia2_usb module +contains usb specific functions. The main reason for this was the size of the +module was getting out of hand, so I separated them. It is not likely that +there will be a parallel port version. + +Features +-------- + +- Supports cameras with the Vision stv6410 (CIF) and stv6500 (VGA) cmos + sensors. I only have the vga sensor, so can't test the other. +- Image formats: VGA, QVGA, CIF, QCIF, and a number of sizes in between. + VGA and QVGA are the native image sizes for the VGA camera. CIF is done + in the coprocessor by scaling QVGA. All other sizes are done by clipping. +- Palette: YCrCb, compressed with MJPEG. +- Some compression parameters are settable. +- Sensor framerate is adjustable (up to 30 fps CIF, 15 fps VGA). +- Adjust brightness, color, contrast while streaming. +- Flicker control settable for 50 or 60 Hz mains frequency. + +Making and installing the stv672 driver modules +----------------------------------------------- + +Requirements +~~~~~~~~~~~~ + +Video4Linux must be either compiled into the kernel or +available as a module. Video4Linux2 is automatically detected and made +available at compile time. + +Setup +~~~~~ + +Use 'modprobe cpia2' to load and 'modprobe -r cpia2' to unload. This +may be done automatically by your distribution. + +Driver options +~~~~~~~~~~~~~~ + +.. tabularcolumns:: |p{13ex}|L| + + +============== ======================================================== +Option Description +============== ======================================================== +video_nr video device to register (0=/dev/video0, etc) + range -1 to 64. default is -1 (first available) + If you have more than 1 camera, this MUST be -1. +buffer_size Size for each frame buffer in bytes (default 68k) +num_buffers Number of frame buffers (1-32, default 3) +alternate USB Alternate (2-7, default 7) +flicker_freq Frequency for flicker reduction(50 or 60, default 60) +flicker_mode 0 to disable, or 1 to enable flicker reduction. + (default 0). This is only effective if the camera + uses a stv0672 coprocessor. +============== ======================================================== + +Setting the options +~~~~~~~~~~~~~~~~~~~ + +If you are using modules, edit /etc/modules.conf and add an options +line like this: + +.. code-block:: none + + options cpia2 num_buffers=3 buffer_size=65535 + +If the driver is compiled into the kernel, at boot time specify them +like this: + +.. code-block:: none + + cpia2.num_buffers=3 cpia2.buffer_size=65535 + +What buffer size should I use? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The maximum image size depends on the alternate you choose, and the +frame rate achieved by the camera. If the compression engine is able to +keep up with the frame rate, the maximum image size is given by the table +below. + +The compression engine starts out at maximum compression, and will +increase image quality until it is close to the size in the table. As long +as the compression engine can keep up with the frame rate, after a short time +the images will all be about the size in the table, regardless of resolution. + +At low alternate settings, the compression engine may not be able to +compress the image enough and will reduce the frame rate by producing larger +images. + +The default of 68k should be good for most users. This will handle +any alternate at frame rates down to 15fps. For lower frame rates, it may +be necessary to increase the buffer size to avoid having frames dropped due +to insufficient space. + +========== ========== ======== ===== +Alternate bytes/ms 15fps 30fps +========== ========== ======== ===== + 2 128 8533 4267 + 3 384 25600 12800 + 4 640 42667 21333 + 5 768 51200 25600 + 6 896 59733 29867 + 7 1023 68200 34100 +========== ========== ======== ===== + +Table: Image size(bytes) + + +How many buffers should I use? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For normal streaming, 3 should give the best results. With only 2, +it is possible for the camera to finish sending one image just after a +program has started reading the other. If this happens, the driver must drop +a frame. The exception to this is if you have a heavily loaded machine. In +this case use 2 buffers. You are probably not reading at the full frame rate. +If the camera can send multiple images before a read finishes, it could +overwrite the third buffer before the read finishes, leading to a corrupt +image. Single and double buffering have extra checks to avoid overwriting. + +Using the camera +~~~~~~~~~~~~~~~~ + +We are providing a modified gqcam application to view the output. In +order to avoid confusion, here it is called mview. There is also the qx5view +program which can also control the lights on the qx5 microscope. MJPEG Tools +(http://mjpeg.sourceforge.net) can also be used to record from the camera. diff --git a/Documentation/admin-guide/media/cx23885-cardlist.rst b/Documentation/admin-guide/media/cx23885-cardlist.rst new file mode 100644 index 000000000000..ddff8da98eeb --- /dev/null +++ b/Documentation/admin-guide/media/cx23885-cardlist.rst @@ -0,0 +1,263 @@ +.. SPDX-License-Identifier: GPL-2.0 + +cx23885 cards list +================== + +.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| + +.. flat-table:: + :header-rows: 1 + :widths: 2 19 18 + :stub-columns: 0 + + * - Card number + - Card name + - PCI IDs + + * - 0 + - UNKNOWN/GENERIC + - 0070:3400 + + * - 1 + - Hauppauge WinTV-HVR1800lp + - 0070:7600 + + * - 2 + - Hauppauge WinTV-HVR1800 + - 0070:7800, 0070:7801, 0070:7809 + + * - 3 + - Hauppauge WinTV-HVR1250 + - 0070:7911 + + * - 4 + - DViCO FusionHDTV5 Express + - 18ac:d500 + + * - 5 + - Hauppauge WinTV-HVR1500Q + - 0070:7790, 0070:7797 + + * - 6 + - Hauppauge WinTV-HVR1500 + - 0070:7710, 0070:7717 + + * - 7 + - Hauppauge WinTV-HVR1200 + - 0070:71d1, 0070:71d3 + + * - 8 + - Hauppauge WinTV-HVR1700 + - 0070:8101 + + * - 9 + - Hauppauge WinTV-HVR1400 + - 0070:8010 + + * - 10 + - DViCO FusionHDTV7 Dual Express + - 18ac:d618 + + * - 11 + - DViCO FusionHDTV DVB-T Dual Express + - 18ac:db78 + + * - 12 + - Leadtek Winfast PxDVR3200 H + - 107d:6681 + + * - 13 + - Compro VideoMate E650F + - 185b:e800 + + * - 14 + - TurboSight TBS 6920 + - 6920:8888 + + * - 15 + - TeVii S470 + - d470:9022 + + * - 16 + - DVBWorld DVB-S2 2005 + - 0001:2005 + + * - 17 + - NetUP Dual DVB-S2 CI + - 1b55:2a2c + + * - 18 + - Hauppauge WinTV-HVR1270 + - 0070:2211 + + * - 19 + - Hauppauge WinTV-HVR1275 + - 0070:2215, 0070:221d, 0070:22f2 + + * - 20 + - Hauppauge WinTV-HVR1255 + - 0070:2251, 0070:22f1 + + * - 21 + - Hauppauge WinTV-HVR1210 + - 0070:2291, 0070:2295, 0070:2299, 0070:229d, 0070:22f0, 0070:22f3, 0070:22f4, 0070:22f5 + + * - 22 + - Mygica X8506 DMB-TH + - 14f1:8651 + + * - 23 + - Magic-Pro ProHDTV Extreme 2 + - 14f1:8657 + + * - 24 + - Hauppauge WinTV-HVR1850 + - 0070:8541 + + * - 25 + - Compro VideoMate E800 + - 1858:e800 + + * - 26 + - Hauppauge WinTV-HVR1290 + - 0070:8551 + + * - 27 + - Mygica X8558 PRO DMB-TH + - 14f1:8578 + + * - 28 + - LEADTEK WinFast PxTV1200 + - 107d:6f22 + + * - 29 + - GoTView X5 3D Hybrid + - 5654:2390 + + * - 30 + - NetUP Dual DVB-T/C-CI RF + - 1b55:e2e4 + + * - 31 + - Leadtek Winfast PxDVR3200 H XC4000 + - 107d:6f39 + + * - 32 + - MPX-885 + - + + * - 33 + - Mygica X8502/X8507 ISDB-T + - 14f1:8502 + + * - 34 + - TerraTec Cinergy T PCIe Dual + - 153b:117e + + * - 35 + - TeVii S471 + - d471:9022 + + * - 36 + - Hauppauge WinTV-HVR1255 + - 0070:2259 + + * - 37 + - Prof Revolution DVB-S2 8000 + - 8000:3034 + + * - 38 + - Hauppauge WinTV-HVR4400/HVR5500 + - 0070:c108, 0070:c138, 0070:c1f8 + + * - 39 + - AVerTV Hybrid Express Slim HC81R + - 1461:d939 + + * - 40 + - TurboSight TBS 6981 + - 6981:8888 + + * - 41 + - TurboSight TBS 6980 + - 6980:8888 + + * - 42 + - Leadtek Winfast PxPVR2200 + - 107d:6f21 + + * - 43 + - Hauppauge ImpactVCB-e + - 0070:7133, 0070:7137 + + * - 44 + - DViCO FusionHDTV DVB-T Dual Express2 + - 18ac:db98 + + * - 45 + - DVBSky T9580 + - 4254:9580 + + * - 46 + - DVBSky T980C + - 4254:980c + + * - 47 + - DVBSky S950C + - 4254:950c + + * - 48 + - Technotrend TT-budget CT2-4500 CI + - 13c2:3013 + + * - 49 + - DVBSky S950 + - 4254:0950 + + * - 50 + - DVBSky S952 + - 4254:0952 + + * - 51 + - DVBSky T982 + - 4254:0982 + + * - 52 + - Hauppauge WinTV-HVR5525 + - 0070:f038 + + * - 53 + - Hauppauge WinTV Starburst + - 0070:c12a + + * - 54 + - ViewCast 260e + - 1576:0260 + + * - 55 + - ViewCast 460e + - 1576:0460 + + * - 56 + - Hauppauge WinTV-QuadHD-DVB + - 0070:6a28, 0070:6b28 + + * - 57 + - Hauppauge WinTV-QuadHD-ATSC + - 0070:6a18, 0070:6b18 + + * - 58 + - Hauppauge WinTV-HVR-1265(161111) + - 0070:2a18 + + * - 59 + - Hauppauge WinTV-Starburst2 + - 0070:f02a + + * - 60 + - Hauppauge WinTV-QuadHD-DVB(885) + - + + * - 61 + - Hauppauge WinTV-QuadHD-ATSC(885) + - diff --git a/Documentation/admin-guide/media/cx88-cardlist.rst b/Documentation/admin-guide/media/cx88-cardlist.rst new file mode 100644 index 000000000000..56ee08028106 --- /dev/null +++ b/Documentation/admin-guide/media/cx88-cardlist.rst @@ -0,0 +1,379 @@ +.. SPDX-License-Identifier: GPL-2.0 + +CX88 cards list +=============== + +.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| + +.. flat-table:: + :header-rows: 1 + :widths: 2 19 18 + :stub-columns: 0 + + * - Card number + - Card name + - PCI IDs + + * - 0 + - UNKNOWN/GENERIC + - + + * - 1 + - Hauppauge WinTV 34xxx models + - 0070:3400, 0070:3401 + + * - 2 + - GDI Black Gold + - 14c7:0106, 14c7:0107 + + * - 3 + - PixelView + - 1554:4811 + + * - 4 + - ATI TV Wonder Pro + - 1002:00f8, 1002:00f9 + + * - 5 + - Leadtek Winfast 2000XP Expert + - 107d:6611, 107d:6613 + + * - 6 + - AverTV Studio 303 (M126) + - 1461:000b + + * - 7 + - MSI TV-@nywhere Master + - 1462:8606 + + * - 8 + - Leadtek Winfast DV2000 + - 107d:6620, 107d:6621 + + * - 9 + - Leadtek PVR 2000 + - 107d:663b, 107d:663c, 107d:6632, 107d:6630, 107d:6638, 107d:6631, 107d:6637, 107d:663d + + * - 10 + - IODATA GV-VCP3/PCI + - 10fc:d003 + + * - 11 + - Prolink PlayTV PVR + - + + * - 12 + - ASUS PVR-416 + - 1043:4823, 1461:c111 + + * - 13 + - MSI TV-@nywhere + - + + * - 14 + - KWorld/VStream XPert DVB-T + - 17de:08a6 + + * - 15 + - DViCO FusionHDTV DVB-T1 + - 18ac:db00 + + * - 16 + - KWorld LTV883RF + - + + * - 17 + - DViCO FusionHDTV 3 Gold-Q + - 18ac:d810, 18ac:d800 + + * - 18 + - Hauppauge Nova-T DVB-T + - 0070:9002, 0070:9001, 0070:9000 + + * - 19 + - Conexant DVB-T reference design + - 14f1:0187 + + * - 20 + - Provideo PV259 + - 1540:2580 + + * - 21 + - DViCO FusionHDTV DVB-T Plus + - 18ac:db10, 18ac:db11 + + * - 22 + - pcHDTV HD3000 HDTV + - 7063:3000 + + * - 23 + - digitalnow DNTV Live! DVB-T + - 17de:a8a6 + + * - 24 + - Hauppauge WinTV 28xxx (Roslyn) models + - 0070:2801 + + * - 25 + - Digital-Logic MICROSPACE Entertainment Center (MEC) + - 14f1:0342 + + * - 26 + - IODATA GV/BCTV7E + - 10fc:d035 + + * - 27 + - PixelView PlayTV Ultra Pro (Stereo) + - + + * - 28 + - DViCO FusionHDTV 3 Gold-T + - 18ac:d820 + + * - 29 + - ADS Tech Instant TV DVB-T PCI + - 1421:0334 + + * - 30 + - TerraTec Cinergy 1400 DVB-T + - 153b:1166 + + * - 31 + - DViCO FusionHDTV 5 Gold + - 18ac:d500 + + * - 32 + - AverMedia UltraTV Media Center PCI 550 + - 1461:8011 + + * - 33 + - Kworld V-Stream Xpert DVD + - + + * - 34 + - ATI HDTV Wonder + - 1002:a101 + + * - 35 + - WinFast DTV1000-T + - 107d:665f + + * - 36 + - AVerTV 303 (M126) + - 1461:000a + + * - 37 + - Hauppauge Nova-S-Plus DVB-S + - 0070:9201, 0070:9202 + + * - 38 + - Hauppauge Nova-SE2 DVB-S + - 0070:9200 + + * - 39 + - KWorld DVB-S 100 + - 17de:08b2, 1421:0341 + + * - 40 + - Hauppauge WinTV-HVR1100 DVB-T/Hybrid + - 0070:9400, 0070:9402 + + * - 41 + - Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile) + - 0070:9800, 0070:9802 + + * - 42 + - digitalnow DNTV Live! DVB-T Pro + - 1822:0025, 1822:0019 + + * - 43 + - KWorld/VStream XPert DVB-T with cx22702 + - 17de:08a1, 12ab:2300 + + * - 44 + - DViCO FusionHDTV DVB-T Dual Digital + - 18ac:db50, 18ac:db54 + + * - 45 + - KWorld HardwareMpegTV XPert + - 17de:0840, 1421:0305 + + * - 46 + - DViCO FusionHDTV DVB-T Hybrid + - 18ac:db40, 18ac:db44 + + * - 47 + - pcHDTV HD5500 HDTV + - 7063:5500 + + * - 48 + - Kworld MCE 200 Deluxe + - 17de:0841 + + * - 49 + - PixelView PlayTV P7000 + - 1554:4813 + + * - 50 + - NPG Tech Real TV FM Top 10 + - 14f1:0842 + + * - 51 + - WinFast DTV2000 H + - 107d:665e + + * - 52 + - Geniatech DVB-S + - 14f1:0084 + + * - 53 + - Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T + - 0070:1404, 0070:1400, 0070:1401, 0070:1402 + + * - 54 + - Norwood Micro TV Tuner + - + + * - 55 + - Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM + - c180:c980 + + * - 56 + - Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder + - 0070:9600, 0070:9601, 0070:9602 + + * - 57 + - ADS Tech Instant Video PCI + - 1421:0390 + + * - 58 + - Pinnacle PCTV HD 800i + - 11bd:0051 + + * - 59 + - DViCO FusionHDTV 5 PCI nano + - 18ac:d530 + + * - 60 + - Pinnacle Hybrid PCTV + - 12ab:1788 + + * - 61 + - Leadtek TV2000 XP Global + - 107d:6f18, 107d:6618, 107d:6619 + + * - 62 + - PowerColor RA330 + - 14f1:ea3d + + * - 63 + - Geniatech X8000-MT DVBT + - 14f1:8852 + + * - 64 + - DViCO FusionHDTV DVB-T PRO + - 18ac:db30 + + * - 65 + - DViCO FusionHDTV 7 Gold + - 18ac:d610 + + * - 66 + - Prolink Pixelview MPEG 8000GT + - 1554:4935 + + * - 67 + - Kworld PlusTV HD PCI 120 (ATSC 120) + - 17de:08c1 + + * - 68 + - Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid + - 0070:6900, 0070:6904, 0070:6902 + + * - 69 + - Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 + - 0070:6905, 0070:6906 + + * - 70 + - TeVii S460 DVB-S/S2 + - d460:9022 + + * - 71 + - Omicom SS4 DVB-S/S2 PCI + - A044:2011 + + * - 72 + - TBS 8920 DVB-S/S2 + - 8920:8888 + + * - 73 + - TeVii S420 DVB-S + - d420:9022 + + * - 74 + - Prolink Pixelview Global Extreme + - 1554:4976 + + * - 75 + - PROF 7300 DVB-S/S2 + - B033:3033 + + * - 76 + - SATTRADE ST4200 DVB-S/S2 + - b200:4200 + + * - 77 + - TBS 8910 DVB-S + - 8910:8888 + + * - 78 + - Prof 6200 DVB-S + - b022:3022 + + * - 79 + - Terratec Cinergy HT PCI MKII + - 153b:1177 + + * - 80 + - Hauppauge WinTV-IR Only + - 0070:9290 + + * - 81 + - Leadtek WinFast DTV1800 Hybrid + - 107d:6654 + + * - 82 + - WinFast DTV2000 H rev. J + - 107d:6f2b + + * - 83 + - Prof 7301 DVB-S/S2 + - b034:3034 + + * - 84 + - Samsung SMT 7020 DVB-S + - 18ac:dc00, 18ac:dccd + + * - 85 + - Twinhan VP-1027 DVB-S + - 1822:0023 + + * - 86 + - TeVii S464 DVB-S/S2 + - d464:9022 + + * - 87 + - Leadtek WinFast DTV2000 H PLUS + - 107d:6f42 + + * - 88 + - Leadtek WinFast DTV1800 H (XC4000) + - 107d:6f38 + + * - 89 + - Leadtek TV2000 XP Global (SC4100) + - 107d:6f36 + + * - 90 + - Leadtek TV2000 XP Global (XC4100) + - 107d:6f43 diff --git a/Documentation/admin-guide/media/cx88.rst b/Documentation/admin-guide/media/cx88.rst new file mode 100644 index 000000000000..e4badb18199d --- /dev/null +++ b/Documentation/admin-guide/media/cx88.rst @@ -0,0 +1,58 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The cx88 driver +=============== + +Author: Gerd Hoffmann + +This is a v4l2 device driver for the cx2388x chip. + + +Current status +-------------- + +video + - Works. + - Overlay isn't supported. + +audio + - Works. The TV standard detection is made by the driver, as the + hardware has bugs to auto-detect. + - audio data dma (i.e. recording without loopback cable to the + sound card) is supported via cx88-alsa. + +vbi + - Works. + + +How to add support for new cards +-------------------------------- + +The driver needs some config info for the TV cards. This stuff is in +cx88-cards.c. If the driver doesn't work well you likely need a new +entry for your card in that file. Check the kernel log (using dmesg) +to see whenever the driver knows your card or not. There is a line +like this one: + +.. code-block:: none + + cx8800[0]: subsystem: 0070:3400, board: Hauppauge WinTV \ + 34xxx models [card=1,autodetected] + +If your card is listed as "board: UNKNOWN/GENERIC" it is unknown to +the driver. What to do then? + +1) Try upgrading to the latest snapshot, maybe it has been added + meanwhile. +2) You can try to create a new entry yourself, have a look at + cx88-cards.c. If that worked, mail me your changes as unified + diff ("diff -u"). +3) Or you can mail me the config information. We need at least the + following information to add the card: + + - the PCI Subsystem ID ("0070:3400" from the line above, + "lspci -v" output is fine too). + - the tuner type used by the card. You can try to find one by + trial-and-error using the tuner= insmod option. If you + know which one the card has you can also have a look at the + list in CARDLIST.tuner diff --git a/Documentation/admin-guide/media/davinci-vpbe.rst b/Documentation/admin-guide/media/davinci-vpbe.rst new file mode 100644 index 000000000000..9e6360fd02db --- /dev/null +++ b/Documentation/admin-guide/media/davinci-vpbe.rst @@ -0,0 +1,65 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The VPBE V4L2 driver design +=========================== + +Functional partitioning +----------------------- + +Consists of the following: + + 1. V4L2 display driver + + Implements creation of video2 and video3 device nodes and + provides v4l2 device interface to manage VID0 and VID1 layers. + + 2. Display controller + + Loads up VENC, OSD and external encoders such as ths8200. It provides + a set of API calls to V4L2 drivers to set the output/standards + in the VENC or external sub devices. It also provides + a device object to access the services from OSD subdevice + using sub device ops. The connection of external encoders to VENC LCD + controller port is done at init time based on default output and standard + selection or at run time when application change the output through + V4L2 IOCTLs. + + When connected to an external encoder, vpbe controller is also responsible + for setting up the interface between VENC and external encoders based on + board specific settings (specified in board-xxx-evm.c). This allows + interfacing external encoders such as ths8200. The setup_if_config() + is implemented for this as well as configure_venc() (part of the next patch) + API to set timings in VENC for a specific display resolution. As of this + patch series, the interconnection and enabling and setting of the external + encoders is not present, and would be a part of the next patch series. + + 3. VENC subdevice module + + Responsible for setting outputs provided through internal DACs and also + setting timings at LCD controller port when external encoders are connected + at the port or LCD panel timings required. When external encoder/LCD panel + is connected, the timings for a specific standard/preset is retrieved from + the board specific table and the values are used to set the timings in + venc using non-standard timing mode. + + Support LCD Panel displays using the VENC. For example to support a Logic + PD display, it requires setting up the LCD controller port with a set of + timings for the resolution supported and setting the dot clock. So we could + add the available outputs as a board specific entry (i.e add the "LogicPD" + output name to board-xxx-evm.c). A table of timings for various LCDs + supported can be maintained in the board specific setup file to support + various LCD displays.As of this patch a basic driver is present, and this + support for external encoders and displays forms a part of the next + patch series. + + 4. OSD module + + OSD module implements all OSD layer management and hardware specific + features. The VPBE module interacts with the OSD for enabling and + disabling appropriate features of the OSD. + +Current status +-------------- + +A fully functional working version of the V4L2 driver is available. This +driver has been tested with NTSC and PAL standards and buffer streaming. diff --git a/Documentation/admin-guide/media/em28xx-cardlist.rst b/Documentation/admin-guide/media/em28xx-cardlist.rst new file mode 100644 index 000000000000..2956cbdc28e0 --- /dev/null +++ b/Documentation/admin-guide/media/em28xx-cardlist.rst @@ -0,0 +1,428 @@ +.. SPDX-License-Identifier: GPL-2.0 + +EM28xx cards list +================= + +.. tabularcolumns:: |p{1.4cm}|p{10.0cm}|p{1.9cm}|p{4.2cm}| + +.. flat-table:: + :header-rows: 1 + :widths: 2 12 3 16 + :stub-columns: 0 + + * - Card number + - Card name + - Empia Chip + - USB IDs + * - 0 + - Unknown EM2800 video grabber + - em2800 + - eb1a:2800 + * - 1 + - Unknown EM2750/28xx video grabber + - em2820 or em2840 + - eb1a:2710, eb1a:2820, eb1a:2821, eb1a:2860, eb1a:2861, eb1a:2862, eb1a:2863, eb1a:2870, eb1a:2881, eb1a:2883, eb1a:2868, eb1a:2875 + * - 2 + - Terratec Cinergy 250 USB + - em2820 or em2840 + - 0ccd:0036 + * - 3 + - Pinnacle PCTV USB 2 + - em2820 or em2840 + - 2304:0208 + * - 4 + - Hauppauge WinTV USB 2 + - em2820 or em2840 + - 2040:4200, 2040:4201 + * - 5 + - MSI VOX USB 2.0 + - em2820 or em2840 + - + * - 6 + - Terratec Cinergy 200 USB + - em2800 + - + * - 7 + - Leadtek Winfast USB II + - em2800 + - 0413:6023 + * - 8 + - Kworld USB2800 + - em2800 + - + * - 9 + - Pinnacle Dazzle DVC 90/100/101/107 / Kaiser Baas Video to DVD maker / Kworld DVD Maker 2 / Plextor ConvertX PX-AV100U + - em2820 or em2840 + - 1b80:e302, 1b80:e304, 2304:0207, 2304:021a, 093b:a003 + * - 10 + - Hauppauge WinTV HVR 900 + - em2880 + - 2040:6500 + * - 11 + - Terratec Hybrid XS + - em2880 + - + * - 12 + - Kworld PVR TV 2800 RF + - em2820 or em2840 + - + * - 13 + - Terratec Prodigy XS + - em2880 + - + * - 14 + - SIIG AVTuner-PVR / Pixelview Prolink PlayTV USB 2.0 + - em2820 or em2840 + - + * - 15 + - V-Gear PocketTV + - em2800 + - + * - 16 + - Hauppauge WinTV HVR 950 + - em2883 + - 2040:6513, 2040:6517, 2040:651b + * - 17 + - Pinnacle PCTV HD Pro Stick + - em2880 + - 2304:0227 + * - 18 + - Hauppauge WinTV HVR 900 (R2) + - em2880 + - 2040:6502 + * - 19 + - EM2860/SAA711X Reference Design + - em2860 + - + * - 20 + - AMD ATI TV Wonder HD 600 + - em2880 + - 0438:b002 + * - 21 + - eMPIA Technology, Inc. GrabBeeX+ Video Encoder + - em2800 + - eb1a:2801 + * - 22 + - EM2710/EM2750/EM2751 webcam grabber + - em2750 + - eb1a:2750, eb1a:2751 + * - 23 + - Huaqi DLCW-130 + - em2750 + - + * - 24 + - D-Link DUB-T210 TV Tuner + - em2820 or em2840 + - 2001:f112 + * - 25 + - Gadmei UTV310 + - em2820 or em2840 + - + * - 26 + - Hercules Smart TV USB 2.0 + - em2820 or em2840 + - + * - 27 + - Pinnacle PCTV USB 2 (Philips FM1216ME) + - em2820 or em2840 + - + * - 28 + - Leadtek Winfast USB II Deluxe + - em2820 or em2840 + - + * - 29 + - EM2860/TVP5150 Reference Design + - em2860 + - eb1a:5051 + * - 30 + - Videology 20K14XUSB USB2.0 + - em2820 or em2840 + - + * - 31 + - Usbgear VD204v9 + - em2821 + - + * - 32 + - Supercomp USB 2.0 TV + - em2821 + - + * - 33 + - Elgato Video Capture + - em2860 + - 0fd9:0033 + * - 34 + - Terratec Cinergy A Hybrid XS + - em2860 + - 0ccd:004f + * - 35 + - Typhoon DVD Maker + - em2860 + - + * - 36 + - NetGMBH Cam + - em2860 + - + * - 37 + - Gadmei UTV330 + - em2860 + - eb1a:50a6 + * - 38 + - Yakumo MovieMixer + - em2861 + - + * - 39 + - KWorld PVRTV 300U + - em2861 + - eb1a:e300 + * - 40 + - Plextor ConvertX PX-TV100U + - em2861 + - 093b:a005 + * - 41 + - Kworld 350 U DVB-T + - em2870 + - eb1a:e350 + * - 42 + - Kworld 355 U DVB-T + - em2870 + - eb1a:e355, eb1a:e357, eb1a:e359 + * - 43 + - Terratec Cinergy T XS + - em2870 + - + * - 44 + - Terratec Cinergy T XS (MT2060) + - em2870 + - 0ccd:0043 + * - 45 + - Pinnacle PCTV DVB-T + - em2870 + - + * - 46 + - Compro, VideoMate U3 + - em2870 + - 185b:2870 + * - 47 + - KWorld DVB-T 305U + - em2880 + - eb1a:e305 + * - 48 + - KWorld DVB-T 310U + - em2880 + - + * - 49 + - MSI DigiVox A/D + - em2880 + - eb1a:e310 + * - 50 + - MSI DigiVox A/D II + - em2880 + - eb1a:e320 + * - 51 + - Terratec Hybrid XS Secam + - em2880 + - 0ccd:004c + * - 52 + - DNT DA2 Hybrid + - em2881 + - + * - 53 + - Pinnacle Hybrid Pro + - em2881 + - + * - 54 + - Kworld VS-DVB-T 323UR + - em2882 + - eb1a:e323 + * - 55 + - Terratec Cinergy Hybrid T USB XS (em2882) + - em2882 + - 0ccd:005e, 0ccd:0042 + * - 56 + - Pinnacle Hybrid Pro (330e) + - em2882 + - 2304:0226 + * - 57 + - Kworld PlusTV HD Hybrid 330 + - em2883 + - eb1a:a316 + * - 58 + - Compro VideoMate ForYou/Stereo + - em2820 or em2840 + - 185b:2041 + * - 59 + - Pinnacle PCTV HD Mini + - em2874 + - 2304:023f + * - 60 + - Hauppauge WinTV HVR 850 + - em2883 + - 2040:651f + * - 61 + - Pixelview PlayTV Box 4 USB 2.0 + - em2820 or em2840 + - + * - 62 + - Gadmei TVR200 + - em2820 or em2840 + - + * - 63 + - Kaiomy TVnPC U2 + - em2860 + - eb1a:e303 + * - 64 + - Easy Cap Capture DC-60 + - em2860 + - 1b80:e309 + * - 65 + - IO-DATA GV-MVP/SZ + - em2820 or em2840 + - 04bb:0515 + * - 66 + - Empire dual TV + - em2880 + - + * - 67 + - Terratec Grabby + - em2860 + - 0ccd:0096, 0ccd:10AF + * - 68 + - Terratec AV350 + - em2860 + - 0ccd:0084 + * - 69 + - KWorld ATSC 315U HDTV TV Box + - em2882 + - eb1a:a313 + * - 70 + - Evga inDtube + - em2882 + - + * - 71 + - Silvercrest Webcam 1.3mpix + - em2820 or em2840 + - + * - 72 + - Gadmei UTV330+ + - em2861 + - + * - 73 + - Reddo DVB-C USB TV Box + - em2870 + - + * - 74 + - Actionmaster/LinXcel/Digitus VC211A + - em2800 + - + * - 75 + - Dikom DK300 + - em2882 + - + * - 76 + - KWorld PlusTV 340U or UB435-Q (ATSC) + - em2870 + - 1b80:a340 + * - 77 + - EM2874 Leadership ISDBT + - em2874 + - + * - 78 + - PCTV nanoStick T2 290e + - em28174 + - 2013:024f + * - 79 + - Terratec Cinergy H5 + - em2884 + - eb1a:2885, 0ccd:10a2, 0ccd:10ad, 0ccd:10b6 + * - 80 + - PCTV DVB-S2 Stick (460e) + - em28174 + - 2013:024c + * - 81 + - Hauppauge WinTV HVR 930C + - em2884 + - 2040:1605 + * - 82 + - Terratec Cinergy HTC Stick + - em2884 + - 0ccd:00b2 + * - 83 + - Honestech Vidbox NW03 + - em2860 + - eb1a:5006 + * - 84 + - MaxMedia UB425-TC + - em2874 + - 1b80:e425 + * - 85 + - PCTV QuatroStick (510e) + - em2884 + - 2304:0242 + * - 86 + - PCTV QuatroStick nano (520e) + - em2884 + - 2013:0251 + * - 87 + - Terratec Cinergy HTC USB XS + - em2884 + - 0ccd:008e, 0ccd:00ac + * - 88 + - C3 Tech Digital Duo HDTV/SDTV USB + - em2884 + - 1b80:e755 + * - 89 + - Delock 61959 + - em2874 + - 1b80:e1cc + * - 90 + - KWorld USB ATSC TV Stick UB435-Q V2 + - em2874 + - 1b80:e346 + * - 91 + - SpeedLink Vicious And Devine Laplace webcam + - em2765 + - 1ae7:9003, 1ae7:9004 + * - 92 + - PCTV DVB-S2 Stick (461e) + - em28178 + - 2013:0258 + * - 93 + - KWorld USB ATSC TV Stick UB435-Q V3 + - em2874 + - 1b80:e34c + * - 94 + - PCTV tripleStick (292e) + - em28178 + - 2013:025f, 2013:0264, 2040:0264, 2040:8264, 2040:8268, 2040:8268 + * - 95 + - Leadtek VC100 + - em2861 + - 0413:6f07 + * - 96 + - Terratec Cinergy T2 Stick HD + - em28178 + - eb1a:8179 + * - 97 + - Elgato EyeTV Hybrid 2008 INT + - em2884 + - 0fd9:0018 + * - 98 + - PLEX PX-BCUD + - em28178 + - 3275:0085 + * - 99 + - Hauppauge WinTV-dualHD DVB + - em28174 + - 2040:0265, 2040:8265 + * - 100 + - Hauppauge WinTV-dualHD 01595 ATSC/QAM + - em28174 + - 2040:026d, 2040:826d + * - 101 + - Terratec Cinergy H6 rev. 2 + - em2884 + - 0ccd:10b2 + * - 102 + - :ZOLID HYBRID TV STICK + - em2882 + - diff --git a/Documentation/admin-guide/media/faq.rst b/Documentation/admin-guide/media/faq.rst new file mode 100644 index 000000000000..52f153d18278 --- /dev/null +++ b/Documentation/admin-guide/media/faq.rst @@ -0,0 +1,169 @@ +.. SPDX-License-Identifier: GPL-2.0 + +FAQ +=== + +.. note:: + + This documentation is outdated. Please check at the DVB wiki + at https://linuxtv.org/wiki for more updated info. + +Some very frequently asked questions about linuxtv-dvb + +1. The signal seems to die a few seconds after tuning. + + It's not a bug, it's a feature. Because the frontends have + significant power requirements (and hence get very hot), they + are powered down if they are unused (i.e. if the frontend device + is closed). The dvb-core.o module parameter "dvb_shutdown_timeout" + allow you to change the timeout (default 5 seconds). Setting the + timeout to 0 disables the timeout feature. + +2. How can I watch TV? + + The driver distribution includes some simple utilities which + are mainly intended for testing and to demonstrate how the + DVB API works. + + Depending on whether you have a DVB-S, DVB-C or DVB-T card, use + apps/szap/szap, czap or tzap. You must supply a channel list + in ~/.[sct]zap/channels.conf. If you are lucky you can just copy + one of the supplied channel lists, or you can create a new one + by running apps/scan/scan. If you run scan on an unknown network + you might have to supply some start data in apps/scan/initial.h. + + If you have a card with a built-in hardware MPEG-decoder the + drivers create a video4linux device (/dev/v4l/video0) which + you can use to watch TV with any v4l application. xawtv is known + to work. Note that you cannot change channels with xawtv, you + have to zap using [sct]zap. If you want a nice application for + TV watching and record/playback, have a look at VDR. + + If your card does not have a hardware MPEG decoder you need + a software MPEG decoder. Mplayer or xine are known to work. + Newsflash: MythTV also has DVB support now. + Note: Only very recent versions of Mplayer and xine can decode. + MPEG2 transport streams (TS) directly. Then, run + '[sct]zap channelname -r' in one xterm, and keep it running, + and start 'mplayer - < /dev/dvb/adapter0/dvr0' or + 'xine stdin://mpeg2 < /dev/dvb/adapter0/dvr0' in a second xterm. + That's all far from perfect, but it seems no one has written + a nice DVB application which includes a builtin software MPEG + decoder yet. + + Newsflash: Newest xine directly supports DVB. Just copy your + channels.conf to ~/.xine and start 'xine dvb://', or select + the DVB button in the xine GUI. Channel switching works using the + numpad pgup/pgdown (NP9 / NP3) keys to scroll through the channel osd + menu and pressing numpad-enter to switch to the selected channel. + + Note: Older versions of xine and mplayer understand MPEG program + streams (PS) only, and can be used in conjunction with the + ts2ps tool from the Metzler Brother's dvb-mpegtools package. + +3. Which other DVB applications exist? + + http://www.cadsoft.de/people/kls/vdr/ + Klaus Schmidinger's Video Disk Recorder + + http://www.metzlerbros.org/dvb/ + Metzler Bros. DVB development; alternate drivers and + DVB utilities, include dvb-mpegtools and tuxzap. + + http://sourceforge.net/projects/dvbtools/ + Dave Chapman's dvbtools package, including + dvbstream and dvbtune + + http://www.linuxdvb.tv/ + Henning Holtschneider's site with many interesting + links and docs + + http://www.dbox2.info/ + LinuxDVB on the dBox2 + + http://www.tuxbox.org/ and http://cvs.tuxbox.org/ + the TuxBox CVS many interesting DVB applications and the dBox2 + DVB source + + https://linuxtv.org/downloads + DVB Swiss Army Knife library and utilities + + http://www.nenie.org/misc/mpsys/ + MPSYS: a MPEG2 system library and tools + + http://mplayerhq.hu/ + mplayer + + http://xine.sourceforge.net/ and http://xinehq.de/ + xine + + http://www.mythtv.org/ + MythTV - analog TV PVR, but now with DVB support, too + (with software MPEG decode) + + http://dvbsnoop.sourceforge.net/ + DVB sniffer program to monitor, analyze, debug, dump + or view dvb/mpeg/dsm-cc/mhp stream information (TS, + PES, SECTION) + +4. Can't get a signal tuned correctly + + If you are using a Technotrend/Hauppauge DVB-C card *without* analog + module, you might have to use module parameter adac=-1 (dvb-ttpci.o). + +5. The dvb_net device doesn't give me any packets at all + + Run tcpdump on the dvb0_0 interface. This sets the interface + into promiscuous mode so it accepts any packets from the PID + you have configured with the dvbnet utility. Check if there + are any packets with the IP addr and MAC addr you have + configured with ifconfig. + + If tcpdump doesn't give you any output, check the statistics + which ifconfig outputs. (Note: If the MAC address is wrong, + dvb_net won't get any input; thus you have to run tcpdump + before checking the statistics.) If there are no packets at + all then maybe the PID is wrong. If there are error packets, + then either the PID is wrong or the stream does not conform to + the MPE standard (EN 301 192, http://www.etsi.org/). You can + use e.g. dvbsnoop for debugging. + +6. The dvb_net device doesn't give me any multicast packets + + Check your routes if they include the multicast address range. + Additionally make sure that "source validation by reversed path + lookup" is disabled: + +.. code-block:: none + + $ "echo 0 > /proc/sys/net/ipv4/conf/dvb0/rp_filter" + +7. What the hell are all those modules that need to be loaded? + + For a dvb-ttpci av7110 based full-featured card the following + modules are loaded: + + - videodev: Video4Linux core module. This is the base module that + gives you access to the "analog" tv picture of the av7110 mpeg2 + decoder. + + - v4l2-common: common functions for Video4Linux-2 drivers + + - v4l1-compat: backward compatibility layer for Video4Linux-1 legacy + applications + + - dvb-core: DVB core module. This provides you with the + /dev/dvb/adapter entries + + - saa7146: SAA7146 core driver. This is need to access any SAA7146 + based card in your system. + + - saa7146_vv: SAA7146 video and vbi functions. These are only needed + for full-featured cards. + + - videobuf-dma-sg: capture helper module for the saa7146_vv driver. This + one is responsible to handle capture buffers. + + - dvb-ttpci: The main driver for AV7110 based, full-featured + DVB-S/C/T cards + diff --git a/Documentation/admin-guide/media/fimc.rst b/Documentation/admin-guide/media/fimc.rst new file mode 100644 index 000000000000..0b8ddc4a3008 --- /dev/null +++ b/Documentation/admin-guide/media/fimc.rst @@ -0,0 +1,153 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: + +The Samsung S5P/EXYNOS4 FIMC driver +=================================== + +Copyright |copy| 2012 - 2013 Samsung Electronics Co., Ltd. + +The FIMC (Fully Interactive Mobile Camera) device available in Samsung +SoC Application Processors is an integrated camera host interface, color +space converter, image resizer and rotator. It's also capable of capturing +data from LCD controller (FIMD) through the SoC internal writeback data +path. There are multiple FIMC instances in the SoCs (up to 4), having +slightly different capabilities, like pixel alignment constraints, rotator +availability, LCD writeback support, etc. The driver is located at +drivers/media/platform/exynos4-is directory. + +Supported SoCs +-------------- + +S5PC100 (mem-to-mem only), S5PV210, EXYNOS4210 + +Supported features +------------------ + +- camera parallel interface capture (ITU-R.BT601/565); +- camera serial interface capture (MIPI-CSI2); +- memory-to-memory processing (color space conversion, scaling, mirror + and rotation); +- dynamic pipeline re-configuration at runtime (re-attachment of any FIMC + instance to any parallel video input or any MIPI-CSI front-end); +- runtime PM and system wide suspend/resume + +Not currently supported +----------------------- + +- LCD writeback input +- per frame clock gating (mem-to-mem) + +User space interfaces +--------------------- + +Media device interface +~~~~~~~~~~~~~~~~~~~~~~ + +The driver supports Media Controller API as defined at :ref:`media_controller`. +The media device driver name is "SAMSUNG S5P FIMC". + +The purpose of this interface is to allow changing assignment of FIMC instances +to the SoC peripheral camera input at runtime and optionally to control internal +connections of the MIPI-CSIS device(s) to the FIMC entities. + +The media device interface allows to configure the SoC for capturing image +data from the sensor through more than one FIMC instance (e.g. for simultaneous +viewfinder and still capture setup). + +Reconfiguration is done by enabling/disabling media links created by the driver +during initialization. The internal device topology can be easily discovered +through media entity and links enumeration. + +Memory-to-memory video node +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +V4L2 memory-to-memory interface at /dev/video? device node. This is standalone +video device, it has no media pads. However please note the mem-to-mem and +capture video node operation on same FIMC instance is not allowed. The driver +detects such cases but the applications should prevent them to avoid an +undefined behaviour. + +Capture video node +~~~~~~~~~~~~~~~~~~ + +The driver supports V4L2 Video Capture Interface as defined at +:ref:`devices`. + +At the capture and mem-to-mem video nodes only the multi-planar API is +supported. For more details see: :ref:`planar-apis`. + +Camera capture subdevs +~~~~~~~~~~~~~~~~~~~~~~ + +Each FIMC instance exports a sub-device node (/dev/v4l-subdev?), a sub-device +node is also created per each available and enabled at the platform level +MIPI-CSI receiver device (currently up to two). + +sysfs +~~~~~ + +In order to enable more precise camera pipeline control through the sub-device +API the driver creates a sysfs entry associated with "s5p-fimc-md" platform +device. The entry path is: /sys/platform/devices/s5p-fimc-md/subdev_conf_mode. + +In typical use case there could be a following capture pipeline configuration: +sensor subdev -> mipi-csi subdev -> fimc subdev -> video node + +When we configure these devices through sub-device API at user space, the +configuration flow must be from left to right, and the video node is +configured as last one. + +When we don't use sub-device user space API the whole configuration of all +devices belonging to the pipeline is done at the video node driver. +The sysfs entry allows to instruct the capture node driver not to configure +the sub-devices (format, crop), to avoid resetting the subdevs' configuration +when the last configuration steps at the video node is performed. + +For full sub-device control support (subdevs configured at user space before +starting streaming): + +.. code-block:: none + + # echo "sub-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode + +For V4L2 video node control only (subdevs configured internally by the host +driver): + +.. code-block:: none + + # echo "vid-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode + +This is a default option. + +5. Device mapping to video and subdev device nodes +-------------------------------------------------- + +There are associated two video device nodes with each device instance in +hardware - video capture and mem-to-mem and additionally a subdev node for +more precise FIMC capture subsystem control. In addition a separate v4l2 +sub-device node is created per each MIPI-CSIS device. + +How to find out which /dev/video? or /dev/v4l-subdev? is assigned to which +device? + +You can either grep through the kernel log to find relevant information, i.e. + +.. code-block:: none + + # dmesg | grep -i fimc + +(note that udev, if present, might still have rearranged the video nodes), + +or retrieve the information from /dev/media? with help of the media-ctl tool: + +.. code-block:: none + + # media-ctl -p + +7. Build +-------- + +If the driver is built as a loadable kernel module (CONFIG_VIDEO_SAMSUNG_S5P_FIMC=m) +two modules are created (in addition to the core v4l2 modules): s5p-fimc.ko and +optional s5p-csis.ko (MIPI-CSI receiver subdev). diff --git a/Documentation/admin-guide/media/gspca-cardlist.rst b/Documentation/admin-guide/media/gspca-cardlist.rst new file mode 100644 index 000000000000..adda933616f1 --- /dev/null +++ b/Documentation/admin-guide/media/gspca-cardlist.rst @@ -0,0 +1,451 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The gspca cards list +==================== + +The modules for the gspca webcam drivers are: + +- gspca_main: main driver +- gspca\_\ *driver*: subdriver module with *driver* as follows + +========= ========= =================================================================== +*driver* vend:prod Device +========= ========= =================================================================== +spca501 0000:0000 MystFromOri Unknown Camera +spca508 0130:0130 Clone Digital Webcam 11043 +se401 03e8:0004 Endpoints/AoxSE401 +zc3xx 03f0:1b07 HP Premium Starter Cam +m5602 0402:5602 ALi Video Camera Controller +spca501 040a:0002 Kodak DVC-325 +spca500 040a:0300 Kodak EZ200 +zc3xx 041e:041e Creative WebCam Live! +ov519 041e:4003 Video Blaster WebCam Go Plus +stv0680 041e:4007 Go Mini +spca500 041e:400a Creative PC-CAM 300 +sunplus 041e:400b Creative PC-CAM 600 +sunplus 041e:4012 PC-Cam350 +sunplus 041e:4013 Creative Pccam750 +zc3xx 041e:4017 Creative Webcam Mobile PD1090 +spca508 041e:4018 Creative Webcam Vista (PD1100) +spca561 041e:401a Creative Webcam Vista (PD1100) +zc3xx 041e:401c Creative NX +spca505 041e:401d Creative Webcam NX ULTRA +zc3xx 041e:401e Creative Nx Pro +zc3xx 041e:401f Creative Webcam Notebook PD1171 +zc3xx 041e:4022 Webcam NX Pro +pac207 041e:4028 Creative Webcam Vista Plus +zc3xx 041e:4029 Creative WebCam Vista Pro +zc3xx 041e:4034 Creative Instant P0620 +zc3xx 041e:4035 Creative Instant P0620D +zc3xx 041e:4036 Creative Live ! +sq930x 041e:4038 Creative Joy-IT +zc3xx 041e:403a Creative Nx Pro 2 +spca561 041e:403b Creative Webcam Vista (VF0010) +sq930x 041e:403c Creative Live! Ultra +sq930x 041e:403d Creative Live! Ultra for Notebooks +sq930x 041e:4041 Creative Live! Motion +zc3xx 041e:4051 Creative Live!Cam Notebook Pro (VF0250) +ov519 041e:4052 Creative Live! VISTA IM +zc3xx 041e:4053 Creative Live!Cam Video IM +vc032x 041e:405b Creative Live! Cam Notebook Ultra (VC0130) +ov519 041e:405f Creative Live! VISTA VF0330 +ov519 041e:4060 Creative Live! VISTA VF0350 +ov519 041e:4061 Creative Live! VISTA VF0400 +ov519 041e:4064 Creative Live! VISTA VF0420 +ov519 041e:4067 Creative Live! Cam Video IM (VF0350) +ov519 041e:4068 Creative Live! VISTA VF0470 +sn9c2028 0458:7003 GeniusVideocam Live v2 +spca561 0458:7004 Genius VideoCAM Express V2 +sn9c2028 0458:7005 Genius Smart 300, version 2 +sunplus 0458:7006 Genius Dsc 1.3 Smart +zc3xx 0458:7007 Genius VideoCam V2 +zc3xx 0458:700c Genius VideoCam V3 +zc3xx 0458:700f Genius VideoCam Web V2 +sonixj 0458:7025 Genius Eye 311Q +sn9c20x 0458:7029 Genius Look 320s +sonixj 0458:702e Genius Slim 310 NB +sn9c20x 0458:7045 Genius Look 1320 V2 +sn9c20x 0458:704a Genius Slim 1320 +sn9c20x 0458:704c Genius i-Look 1321 +sn9c20x 045e:00f4 LifeCam VX-6000 (SN9C20x + OV9650) +sonixj 045e:00f5 MicroSoft VX3000 +sonixj 045e:00f7 MicroSoft VX1000 +ov519 045e:028c Micro$oft xbox cam +kinect 045e:02ae Xbox NUI Camera +kinect 045e:02bf Kinect for Windows NUI Camera +spca561 0461:0815 Micro Innovations IC200 Webcam +sunplus 0461:0821 Fujifilm MV-1 +zc3xx 0461:0a00 MicroInnovation WebCam320 +stv06xx 046D:08F0 QuickCamMessenger +stv06xx 046D:08F5 QuickCamCommunicate +stv06xx 046D:08F6 QuickCamMessenger (new) +stv06xx 046d:0840 QuickCamExpress +stv06xx 046d:0850 LEGOcam / QuickCam Web +stv06xx 046d:0870 DexxaWebCam USB +spca500 046d:0890 Logitech QuickCam traveler +vc032x 046d:0892 Logitech Orbicam +vc032x 046d:0896 Logitech Orbicam +vc032x 046d:0897 Logitech QuickCam for Dell notebooks +zc3xx 046d:089d Logitech QuickCam E2500 +zc3xx 046d:08a0 Logitech QC IM +zc3xx 046d:08a1 Logitech QC IM 0x08A1 +sound +zc3xx 046d:08a2 Labtec Webcam Pro +zc3xx 046d:08a3 Logitech QC Chat +zc3xx 046d:08a6 Logitech QCim +zc3xx 046d:08a7 Logitech QuickCam Image +zc3xx 046d:08a9 Logitech Notebook Deluxe +zc3xx 046d:08aa Labtec Webcam Notebook +zc3xx 046d:08ac Logitech QuickCam Cool +zc3xx 046d:08ad Logitech QCCommunicate STX +zc3xx 046d:08ae Logitech QuickCam for Notebooks +zc3xx 046d:08af Logitech QuickCam Cool +zc3xx 046d:08b9 Logitech QuickCam Express +zc3xx 046d:08d7 Logitech QCam STX +zc3xx 046d:08d8 Logitech Notebook Deluxe +zc3xx 046d:08d9 Logitech QuickCam IM/Connect +zc3xx 046d:08da Logitech QuickCam Messenger +zc3xx 046d:08dd Logitech QuickCam for Notebooks +spca500 046d:0900 Logitech Inc. ClickSmart 310 +spca500 046d:0901 Logitech Inc. ClickSmart 510 +sunplus 046d:0905 Logitech ClickSmart 820 +tv8532 046d:0920 Logitech QuickCam Express +tv8532 046d:0921 Labtec Webcam +spca561 046d:0928 Logitech QC Express Etch2 +spca561 046d:0929 Labtec Webcam Elch2 +spca561 046d:092a Logitech QC for Notebook +spca561 046d:092b Labtec Webcam Plus +spca561 046d:092c Logitech QC chat Elch2 +spca561 046d:092d Logitech QC Elch2 +spca561 046d:092e Logitech QC Elch2 +spca561 046d:092f Logitech QuickCam Express Plus +sunplus 046d:0960 Logitech ClickSmart 420 +nw80x 046d:d001 Logitech QuickCam Pro (dark focus ring) +se401 0471:030b PhilipsPCVC665K +sunplus 0471:0322 Philips DMVC1300K +zc3xx 0471:0325 Philips SPC 200 NC +zc3xx 0471:0326 Philips SPC 300 NC +sonixj 0471:0327 Philips SPC 600 NC +sonixj 0471:0328 Philips SPC 700 NC +zc3xx 0471:032d Philips SPC 210 NC +zc3xx 0471:032e Philips SPC 315 NC +sonixj 0471:0330 Philips SPC 710 NC +se401 047d:5001 Kensington67014 +se401 047d:5002 Kensington6701(5/7) +se401 047d:5003 Kensington67016 +spca501 0497:c001 Smile International +sunplus 04a5:3003 Benq DC 1300 +sunplus 04a5:3008 Benq DC 1500 +sunplus 04a5:300a Benq DC 3410 +spca500 04a5:300c Benq DC 1016 +benq 04a5:3035 Benq DC E300 +vicam 04c1:009d HomeConnect Webcam [vicam] +konica 04c8:0720 IntelYC 76 +finepix 04cb:0104 Fujifilm FinePix 4800 +finepix 04cb:0109 Fujifilm FinePix A202 +finepix 04cb:010b Fujifilm FinePix A203 +finepix 04cb:010f Fujifilm FinePix A204 +finepix 04cb:0111 Fujifilm FinePix A205 +finepix 04cb:0113 Fujifilm FinePix A210 +finepix 04cb:0115 Fujifilm FinePix A303 +finepix 04cb:0117 Fujifilm FinePix A310 +finepix 04cb:0119 Fujifilm FinePix F401 +finepix 04cb:011b Fujifilm FinePix F402 +finepix 04cb:011d Fujifilm FinePix F410 +finepix 04cb:0121 Fujifilm FinePix F601 +finepix 04cb:0123 Fujifilm FinePix F700 +finepix 04cb:0125 Fujifilm FinePix M603 +finepix 04cb:0127 Fujifilm FinePix S300 +finepix 04cb:0129 Fujifilm FinePix S304 +finepix 04cb:012b Fujifilm FinePix S500 +finepix 04cb:012d Fujifilm FinePix S602 +finepix 04cb:012f Fujifilm FinePix S700 +finepix 04cb:0131 Fujifilm FinePix unknown model +finepix 04cb:013b Fujifilm FinePix unknown model +finepix 04cb:013d Fujifilm FinePix unknown model +finepix 04cb:013f Fujifilm FinePix F420 +sunplus 04f1:1001 JVC GC A50 +spca561 04fc:0561 Flexcam 100 +spca1528 04fc:1528 Sunplus MD80 clone +sunplus 04fc:500c Sunplus CA500C +sunplus 04fc:504a Aiptek Mini PenCam 1.3 +sunplus 04fc:504b Maxell MaxPocket LE 1.3 +sunplus 04fc:5330 Digitrex 2110 +sunplus 04fc:5360 Sunplus Generic +spca500 04fc:7333 PalmPixDC85 +sunplus 04fc:ffff Pure DigitalDakota +nw80x 0502:d001 DVC V6 +spca501 0506:00df 3Com HomeConnect Lite +sunplus 052b:1507 Megapixel 5 Pretec DC-1007 +sunplus 052b:1513 Megapix V4 +sunplus 052b:1803 MegaImage VI +nw80x 052b:d001 EZCam Pro p35u +tv8532 0545:808b Veo Stingray +tv8532 0545:8333 Veo Stingray +sunplus 0546:3155 Polaroid PDC3070 +sunplus 0546:3191 Polaroid Ion 80 +sunplus 0546:3273 Polaroid PDC2030 +touptek 0547:6801 TTUCMOS08000KPB, AS MU800 +dtcs033 0547:7303 Anchor Chips, Inc +ov519 054c:0154 Sonny toy4 +ov519 054c:0155 Sonny toy5 +cpia1 0553:0002 CPIA CPiA (version1) based cameras +stv0680 0553:0202 STV0680 Camera +zc3xx 055f:c005 Mustek Wcam300A +spca500 055f:c200 Mustek Gsmart 300 +sunplus 055f:c211 Kowa Bs888e Microcamera +spca500 055f:c220 Gsmart Mini +sunplus 055f:c230 Mustek Digicam 330K +sunplus 055f:c232 Mustek MDC3500 +sunplus 055f:c360 Mustek DV4000 Mpeg4 +sunplus 055f:c420 Mustek gSmart Mini 2 +sunplus 055f:c430 Mustek Gsmart LCD 2 +sunplus 055f:c440 Mustek DV 3000 +sunplus 055f:c520 Mustek gSmart Mini 3 +sunplus 055f:c530 Mustek Gsmart LCD 3 +sunplus 055f:c540 Gsmart D30 +sunplus 055f:c630 Mustek MDC4000 +sunplus 055f:c650 Mustek MDC5500Z +nw80x 055f:d001 Mustek Wcam 300 mini +zc3xx 055f:d003 Mustek WCam300A +zc3xx 055f:d004 Mustek WCam300 AN +conex 0572:0041 Creative Notebook cx11646 +ov519 05a9:0511 Video Blaster WebCam 3/WebCam Plus, D-Link USB Digital Video Camera +ov519 05a9:0518 Creative WebCam +ov519 05a9:0519 OV519 Microphone +ov519 05a9:0530 OmniVision +ov534_9 05a9:1550 OmniVision VEHO Filmscanner +ov519 05a9:2800 OmniVision SuperCAM +ov519 05a9:4519 Webcam Classic +ov534_9 05a9:8065 OmniVision test kit ov538+ov9712 +ov519 05a9:8519 OmniVision +ov519 05a9:a511 D-Link USB Digital Video Camera +ov519 05a9:a518 D-Link DSB-C310 Webcam +sunplus 05da:1018 Digital Dream Enigma 1.3 +stk014 05e1:0893 Syntek DV4000 +gl860 05e3:0503 Genesys Logic PC Camera +gl860 05e3:f191 Genesys Logic PC Camera +vicam 0602:1001 ViCam Webcam +spca561 060b:a001 Maxell Compact Pc PM3 +zc3xx 0698:2003 CTX M730V built in +topro 06a2:0003 TP6800 PC Camera, CmoX CX0342 webcam +topro 06a2:6810 Creative Qmax +nw80x 06a5:0000 Typhoon Webcam 100 USB +nw80x 06a5:d001 Divio based webcams +nw80x 06a5:d800 Divio Chicony TwinkleCam, Trust SpaceCam +spca500 06bd:0404 Agfa CL20 +spca500 06be:0800 Optimedia +nw80x 06be:d001 EZCam Pro p35u +sunplus 06d6:0031 Trust 610 LCD PowerC@m Zoom +sunplus 06d6:0041 Aashima Technology B.V. +spca506 06e1:a190 ADS Instant VCD +ov534 06f8:3002 Hercules Blog Webcam +ov534_9 06f8:3003 Hercules Dualpix HD Weblog +sonixj 06f8:3004 Hercules Classic Silver +sonixj 06f8:3008 Hercules Deluxe Optical Glass +pac7302 06f8:3009 Hercules Classic Link +pac7302 06f8:301b Hercules Link +nw80x 0728:d001 AVerMedia Camguard +spca508 0733:0110 ViewQuest VQ110 +spca501 0733:0401 Intel Create and Share +spca501 0733:0402 ViewQuest M318B +spca505 0733:0430 Intel PC Camera Pro +sunplus 0733:1311 Digital Dream Epsilon 1.3 +sunplus 0733:1314 Mercury 2.1MEG Deluxe Classic Cam +sunplus 0733:2211 Jenoptik jdc 21 LCD +sunplus 0733:2221 Mercury Digital Pro 3.1p +sunplus 0733:3261 Concord 3045 spca536a +sunplus 0733:3281 Cyberpix S550V +spca506 0734:043b 3DeMon USB Capture aka +cpia1 0813:0001 QX3 camera +ov519 0813:0002 Dual Mode USB Camera Plus +spca500 084d:0003 D-Link DSC-350 +spca500 08ca:0103 Aiptek PocketDV +sunplus 08ca:0104 Aiptek PocketDVII 1.3 +sunplus 08ca:0106 Aiptek Pocket DV3100+ +mr97310a 08ca:0110 Trust Spyc@m 100 +mr97310a 08ca:0111 Aiptek PenCam VGA+ +sunplus 08ca:2008 Aiptek Mini PenCam 2 M +sunplus 08ca:2010 Aiptek PocketCam 3M +sunplus 08ca:2016 Aiptek PocketCam 2 Mega +sunplus 08ca:2018 Aiptek Pencam SD 2M +sunplus 08ca:2020 Aiptek Slim 3000F +sunplus 08ca:2022 Aiptek Slim 3200 +sunplus 08ca:2024 Aiptek DV3500 Mpeg4 +sunplus 08ca:2028 Aiptek PocketCam4M +sunplus 08ca:2040 Aiptek PocketDV4100M +sunplus 08ca:2042 Aiptek PocketDV5100 +sunplus 08ca:2050 Medion MD 41437 +sunplus 08ca:2060 Aiptek PocketDV5300 +tv8532 0923:010f ICM532 cams +mr97310a 093a:010e All known CIF cams with this ID +mr97310a 093a:010f All known VGA cams with this ID +mars 093a:050f Mars-Semi Pc-Camera +pac207 093a:2460 Qtec Webcam 100 +pac207 093a:2461 HP Webcam +pac207 093a:2463 Philips SPC 220 NC +pac207 093a:2464 Labtec Webcam 1200 +pac207 093a:2468 Webcam WB-1400T +pac207 093a:2470 Genius GF112 +pac207 093a:2471 Genius VideoCam ge111 +pac207 093a:2472 Genius VideoCam ge110 +pac207 093a:2474 Genius iLook 111 +pac207 093a:2476 Genius e-Messenger 112 +pac7311 093a:2600 PAC7311 Typhoon +pac7311 093a:2601 Philips SPC 610 NC +pac7311 093a:2603 Philips SPC 500 NC +pac7311 093a:2608 Trust WB-3300p +pac7311 093a:260e Gigaware VGA PC Camera, Trust WB-3350p, SIGMA cam 2350 +pac7311 093a:260f SnakeCam +pac7302 093a:2620 Apollo AC-905 +pac7302 093a:2621 PAC731x +pac7302 093a:2622 Genius Eye 312 +pac7302 093a:2623 Pixart Imaging, Inc. +pac7302 093a:2624 PAC7302 +pac7302 093a:2625 Genius iSlim 310 +pac7302 093a:2626 Labtec 2200 +pac7302 093a:2627 Genius FaceCam 300 +pac7302 093a:2628 Genius iLook 300 +pac7302 093a:2629 Genious iSlim 300 +pac7302 093a:262a Webcam 300k +pac7302 093a:262c Philips SPC 230 NC +jl2005bcd 0979:0227 Various brands, 19 known cameras supported +jeilinj 0979:0270 Sakar 57379 +jeilinj 0979:0280 Sportscam DV15, Sakar 57379 +zc3xx 0ac8:0301 Web Camera +zc3xx 0ac8:0302 Z-star Vimicro zc0302 +vc032x 0ac8:0321 Vimicro generic vc0321 +vc032x 0ac8:0323 Vimicro Vc0323 +vc032x 0ac8:0328 A4Tech PK-130MG +zc3xx 0ac8:301b Z-Star zc301b +zc3xx 0ac8:303b Vimicro 0x303b +zc3xx 0ac8:305b Z-star Vimicro zc0305b +zc3xx 0ac8:307b PC Camera (ZS0211) +vc032x 0ac8:c001 Sony embedded vimicro +vc032x 0ac8:c002 Sony embedded vimicro +vc032x 0ac8:c301 Samsung Q1 Ultra Premium +spca508 0af9:0010 Hama USB Sightcam 100 +spca508 0af9:0011 Hama USB Sightcam 100 +ov519 0b62:0059 iBOT2 Webcam +sonixb 0c45:6001 Genius VideoCAM NB +sonixb 0c45:6005 Microdia Sweex Mini Webcam +sonixb 0c45:6007 Sonix sn9c101 + Tas5110D +sonixb 0c45:6009 spcaCam@120 +sonixb 0c45:600d spcaCam@120 +sonixb 0c45:6011 Microdia PC Camera (SN9C102) +sonixb 0c45:6019 Generic Sonix OV7630 +sonixb 0c45:6024 Generic Sonix Tas5130c +sonixb 0c45:6025 Xcam Shanga +sonixb 0c45:6027 GeniusEye 310 +sonixb 0c45:6028 Sonix Btc Pc380 +sonixb 0c45:6029 spcaCam@150 +sonixb 0c45:602a Meade ETX-105EC Camera +sonixb 0c45:602c Generic Sonix OV7630 +sonixb 0c45:602d LIC-200 LG +sonixb 0c45:602e Genius VideoCam Messenger +sonixj 0c45:6040 Speed NVC 350K +sonixj 0c45:607c Sonix sn9c102p Hv7131R +sonixb 0c45:6083 VideoCAM Look +sonixb 0c45:608c VideoCAM Look +sonixb 0c45:608f PC Camera (SN9C103 + OV7630) +sonixb 0c45:60a8 VideoCAM Look +sonixb 0c45:60aa VideoCAM Look +sonixb 0c45:60af VideoCAM Look +sonixb 0c45:60b0 Genius VideoCam Look +sonixj 0c45:60c0 Sangha Sn535 +sonixj 0c45:60ce USB-PC-Camera-168 (TALK-5067) +sonixj 0c45:60ec SN9C105+MO4000 +sonixj 0c45:60fb Surfer NoName +sonixj 0c45:60fc LG-LIC300 +sonixj 0c45:60fe Microdia Audio +sonixj 0c45:6100 PC Camera (SN9C128) +sonixj 0c45:6102 PC Camera (SN9C128) +sonixj 0c45:610a PC Camera (SN9C128) +sonixj 0c45:610b PC Camera (SN9C128) +sonixj 0c45:610c PC Camera (SN9C128) +sonixj 0c45:610e PC Camera (SN9C128) +sonixj 0c45:6128 Microdia/Sonix SNP325 +sonixj 0c45:612a Avant Camera +sonixj 0c45:612b Speed-Link REFLECT2 +sonixj 0c45:612c Typhoon Rasy Cam 1.3MPix +sonixj 0c45:612e PC Camera (SN9C110) +sonixj 0c45:6130 Sonix Pccam +sonixj 0c45:6138 Sn9c120 Mo4000 +sonixj 0c45:613a Microdia Sonix PC Camera +sonixj 0c45:613b Surfer SN-206 +sonixj 0c45:613c Sonix Pccam168 +sonixj 0c45:613e PC Camera (SN9C120) +sonixj 0c45:6142 Hama PC-Webcam AC-150 +sonixj 0c45:6143 Sonix Pccam168 +sonixj 0c45:6148 Digitus DA-70811/ZSMC USB PC Camera ZS211/Microdia +sonixj 0c45:614a Frontech E-Ccam (JIL-2225) +sn9c20x 0c45:6240 PC Camera (SN9C201 + MT9M001) +sn9c20x 0c45:6242 PC Camera (SN9C201 + MT9M111) +sn9c20x 0c45:6248 PC Camera (SN9C201 + OV9655) +sn9c20x 0c45:624c PC Camera (SN9C201 + MT9M112) +sn9c20x 0c45:624e PC Camera (SN9C201 + SOI968) +sn9c20x 0c45:624f PC Camera (SN9C201 + OV9650) +sn9c20x 0c45:6251 PC Camera (SN9C201 + OV9650) +sn9c20x 0c45:6253 PC Camera (SN9C201 + OV9650) +sn9c20x 0c45:6260 PC Camera (SN9C201 + OV7670) +sn9c20x 0c45:6270 PC Camera (SN9C201 + MT9V011/MT9V111/MT9V112) +sn9c20x 0c45:627b PC Camera (SN9C201 + OV7660) +sn9c20x 0c45:627c PC Camera (SN9C201 + HV7131R) +sn9c20x 0c45:627f PC Camera (SN9C201 + OV9650) +sn9c20x 0c45:6280 PC Camera (SN9C202 + MT9M001) +sn9c20x 0c45:6282 PC Camera (SN9C202 + MT9M111) +sn9c20x 0c45:6288 PC Camera (SN9C202 + OV9655) +sn9c20x 0c45:628c PC Camera (SN9C201 + MT9M112) +sn9c20x 0c45:628e PC Camera (SN9C202 + SOI968) +sn9c20x 0c45:628f PC Camera (SN9C202 + OV9650) +sn9c20x 0c45:62a0 PC Camera (SN9C202 + OV7670) +sn9c20x 0c45:62b0 PC Camera (SN9C202 + MT9V011/MT9V111/MT9V112) +sn9c20x 0c45:62b3 PC Camera (SN9C202 + OV9655) +sn9c20x 0c45:62bb PC Camera (SN9C202 + OV7660) +sn9c20x 0c45:62bc PC Camera (SN9C202 + HV7131R) +sn9c2028 0c45:8001 Wild Planet Digital Spy Camera +sn9c2028 0c45:8003 Sakar #11199, #6637x, #67480 keychain cams +sn9c2028 0c45:8008 Mini-Shotz ms-350 +sn9c2028 0c45:800a Vivitar Vivicam 3350B +sunplus 0d64:0303 Sunplus FashionCam DXG +ov519 0e96:c001 TRUST 380 USB2 SPACEC@M +etoms 102c:6151 Qcam Sangha CIF +etoms 102c:6251 Qcam xxxxxx VGA +ov519 1046:9967 W9967CF/W9968CF WebCam IC, Video Blaster WebCam Go +zc3xx 10fd:0128 Typhoon Webshot II USB 300k 0x0128 +spca561 10fd:7e50 FlyCam Usb 100 +zc3xx 10fd:804d Typhoon Webshot II Webcam [zc0301] +zc3xx 10fd:8050 Typhoon Webshot II USB 300k +ov534 1415:2000 Sony HD Eye for PS3 (SLEH 00201) +pac207 145f:013a Trust WB-1300N +pac7302 145f:013c Trust +sn9c20x 145f:013d Trust WB-3600R +vc032x 15b8:6001 HP 2.0 Megapixel +vc032x 15b8:6002 HP 2.0 Megapixel rz406aa +stk1135 174f:6a31 ASUSlaptop, MT9M112 sensor +spca501 1776:501c Arowana 300K CMOS Camera +t613 17a1:0128 TASCORP JPEG Webcam, NGS Cyclops +vc032x 17ef:4802 Lenovo Vc0323+MI1310_SOC +pac7302 1ae7:2001 SpeedLinkSnappy Mic SL-6825-SBK +pac207 2001:f115 D-Link DSB-C120 +sq905c 2770:9050 Disney pix micro (CIF) +sq905c 2770:9051 Lego Bionicle +sq905c 2770:9052 Disney pix micro 2 (VGA) +sq905c 2770:905c All 11 known cameras with this ID +sq905 2770:9120 All 24 known cameras with this ID +sq905c 2770:913d All 4 known cameras with this ID +sq930x 2770:930b Sweex Motion Tracking / I-Tec iCam Tracer +sq930x 2770:930c Trust WB-3500T / NSG Robbie 2.0 +spca500 2899:012c Toptro Industrial +ov519 8020:ef04 ov519 +spca508 8086:0110 Intel Easy PC Camera +spca500 8086:0630 Intel Pocket PC Camera +spca506 99fa:8988 Grandtec V.cap +sn9c20x a168:0610 Dino-Lite Digital Microscope (SN9C201 + HV7131R) +sn9c20x a168:0611 Dino-Lite Digital Microscope (SN9C201 + HV7131R) +sn9c20x a168:0613 Dino-Lite Digital Microscope (SN9C201 + HV7131R) +sn9c20x a168:0614 Dino-Lite Digital Microscope (SN9C201 + MT9M111) +sn9c20x a168:0615 Dino-Lite Digital Microscope (SN9C201 + MT9M111) +sn9c20x a168:0617 Dino-Lite Digital Microscope (SN9C201 + MT9M111) +sn9c20x a168:0618 Dino-Lite Digital Microscope (SN9C201 + HV7131R) +spca561 abcd:cdee Petcam +========= ========= =================================================================== diff --git a/Documentation/admin-guide/media/imx.rst b/Documentation/admin-guide/media/imx.rst new file mode 100644 index 000000000000..3182951c7651 --- /dev/null +++ b/Documentation/admin-guide/media/imx.rst @@ -0,0 +1,621 @@ +.. SPDX-License-Identifier: GPL-2.0 + +i.MX Video Capture Driver +========================= + +Introduction +------------ + +The Freescale i.MX5/6 contains an Image Processing Unit (IPU), which +handles the flow of image frames to and from capture devices and +display devices. + +For image capture, the IPU contains the following internal subunits: + +- Image DMA Controller (IDMAC) +- Camera Serial Interface (CSI) +- Image Converter (IC) +- Sensor Multi-FIFO Controller (SMFC) +- Image Rotator (IRT) +- Video De-Interlacing or Combining Block (VDIC) + +The IDMAC is the DMA controller for transfer of image frames to and from +memory. Various dedicated DMA channels exist for both video capture and +display paths. During transfer, the IDMAC is also capable of vertical +image flip, 8x8 block transfer (see IRT description), pixel component +re-ordering (for example UYVY to YUYV) within the same colorspace, and +packed <--> planar conversion. The IDMAC can also perform a simple +de-interlacing by interweaving even and odd lines during transfer +(without motion compensation which requires the VDIC). + +The CSI is the backend capture unit that interfaces directly with +camera sensors over Parallel, BT.656/1120, and MIPI CSI-2 buses. + +The IC handles color-space conversion, resizing (downscaling and +upscaling), horizontal flip, and 90/270 degree rotation operations. + +There are three independent "tasks" within the IC that can carry out +conversions concurrently: pre-process encoding, pre-process viewfinder, +and post-processing. Within each task, conversions are split into three +sections: downsizing section, main section (upsizing, flip, colorspace +conversion, and graphics plane combining), and rotation section. + +The IPU time-shares the IC task operations. The time-slice granularity +is one burst of eight pixels in the downsizing section, one image line +in the main processing section, one image frame in the rotation section. + +The SMFC is composed of four independent FIFOs that each can transfer +captured frames from sensors directly to memory concurrently via four +IDMAC channels. + +The IRT carries out 90 and 270 degree image rotation operations. The +rotation operation is carried out on 8x8 pixel blocks at a time. This +operation is supported by the IDMAC which handles the 8x8 block transfer +along with block reordering, in coordination with vertical flip. + +The VDIC handles the conversion of interlaced video to progressive, with +support for different motion compensation modes (low, medium, and high +motion). The deinterlaced output frames from the VDIC can be sent to the +IC pre-process viewfinder task for further conversions. The VDIC also +contains a Combiner that combines two image planes, with alpha blending +and color keying. + +In addition to the IPU internal subunits, there are also two units +outside the IPU that are also involved in video capture on i.MX: + +- MIPI CSI-2 Receiver for camera sensors with the MIPI CSI-2 bus + interface. This is a Synopsys DesignWare core. +- Two video multiplexers for selecting among multiple sensor inputs + to send to a CSI. + +For more info, refer to the latest versions of the i.MX5/6 reference +manuals [#f1]_ and [#f2]_. + + +Features +-------- + +Some of the features of this driver include: + +- Many different pipelines can be configured via media controller API, + that correspond to the hardware video capture pipelines supported in + the i.MX. + +- Supports parallel, BT.565, and MIPI CSI-2 interfaces. + +- Concurrent independent streams, by configuring pipelines to multiple + video capture interfaces using independent entities. + +- Scaling, color-space conversion, horizontal and vertical flip, and + image rotation via IC task subdevs. + +- Many pixel formats supported (RGB, packed and planar YUV, partial + planar YUV). + +- The VDIC subdev supports motion compensated de-interlacing, with three + motion compensation modes: low, medium, and high motion. Pipelines are + defined that allow sending frames to the VDIC subdev directly from the + CSI. There is also support in the future for sending frames to the + VDIC from memory buffers via a output/mem2mem devices. + +- Includes a Frame Interval Monitor (FIM) that can correct vertical sync + problems with the ADV718x video decoders. + + +Entities +-------- + +imx6-mipi-csi2 +-------------- + +This is the MIPI CSI-2 receiver entity. It has one sink pad to receive +the MIPI CSI-2 stream (usually from a MIPI CSI-2 camera sensor). It has +four source pads, corresponding to the four MIPI CSI-2 demuxed virtual +channel outputs. Multiple source pads can be enabled to independently +stream from multiple virtual channels. + +This entity actually consists of two sub-blocks. One is the MIPI CSI-2 +core. This is a Synopsys Designware MIPI CSI-2 core. The other sub-block +is a "CSI-2 to IPU gasket". The gasket acts as a demultiplexer of the +four virtual channels streams, providing four separate parallel buses +containing each virtual channel that are routed to CSIs or video +multiplexers as described below. + +On i.MX6 solo/dual-lite, all four virtual channel buses are routed to +two video multiplexers. Both CSI0 and CSI1 can receive any virtual +channel, as selected by the video multiplexers. + +On i.MX6 Quad, virtual channel 0 is routed to IPU1-CSI0 (after selected +by a video mux), virtual channels 1 and 2 are hard-wired to IPU1-CSI1 +and IPU2-CSI0, respectively, and virtual channel 3 is routed to +IPU2-CSI1 (again selected by a video mux). + +ipuX_csiY_mux +------------- + +These are the video multiplexers. They have two or more sink pads to +select from either camera sensors with a parallel interface, or from +MIPI CSI-2 virtual channels from imx6-mipi-csi2 entity. They have a +single source pad that routes to a CSI (ipuX_csiY entities). + +On i.MX6 solo/dual-lite, there are two video mux entities. One sits +in front of IPU1-CSI0 to select between a parallel sensor and any of +the four MIPI CSI-2 virtual channels (a total of five sink pads). The +other mux sits in front of IPU1-CSI1, and again has five sink pads to +select between a parallel sensor and any of the four MIPI CSI-2 virtual +channels. + +On i.MX6 Quad, there are two video mux entities. One sits in front of +IPU1-CSI0 to select between a parallel sensor and MIPI CSI-2 virtual +channel 0 (two sink pads). The other mux sits in front of IPU2-CSI1 to +select between a parallel sensor and MIPI CSI-2 virtual channel 3 (two +sink pads). + +ipuX_csiY +--------- + +These are the CSI entities. They have a single sink pad receiving from +either a video mux or from a MIPI CSI-2 virtual channel as described +above. + +This entity has two source pads. The first source pad can link directly +to the ipuX_vdic entity or the ipuX_ic_prp entity, using hardware links +that require no IDMAC memory buffer transfer. + +When the direct source pad is routed to the ipuX_ic_prp entity, frames +from the CSI can be processed by one or both of the IC pre-processing +tasks. + +When the direct source pad is routed to the ipuX_vdic entity, the VDIC +will carry out motion-compensated de-interlace using "high motion" mode +(see description of ipuX_vdic entity). + +The second source pad sends video frames directly to memory buffers +via the SMFC and an IDMAC channel, bypassing IC pre-processing. This +source pad is routed to a capture device node, with a node name of the +format "ipuX_csiY capture". + +Note that since the IDMAC source pad makes use of an IDMAC channel, +pixel reordering within the same colorspace can be carried out by the +IDMAC channel. For example, if the CSI sink pad is receiving in UYVY +order, the capture device linked to the IDMAC source pad can capture +in YUYV order. Also, if the CSI sink pad is receiving a packed YUV +format, the capture device can capture a planar YUV format such as +YUV420. + +The IDMAC channel at the IDMAC source pad also supports simple +interweave without motion compensation, which is activated if the source +pad's field type is sequential top-bottom or bottom-top, and the +requested capture interface field type is set to interlaced (t-b, b-t, +or unqualified interlaced). The capture interface will enforce the same +field order as the source pad field order (interlaced-bt if source pad +is seq-bt, interlaced-tb if source pad is seq-tb). + +For events produced by ipuX_csiY, see ref:`imx_api_ipuX_csiY`. + +Cropping in ipuX_csiY +--------------------- + +The CSI supports cropping the incoming raw sensor frames. This is +implemented in the ipuX_csiY entities at the sink pad, using the +crop selection subdev API. + +The CSI also supports fixed divide-by-two downscaling independently in +width and height. This is implemented in the ipuX_csiY entities at +the sink pad, using the compose selection subdev API. + +The output rectangle at the ipuX_csiY source pad is the same as +the compose rectangle at the sink pad. So the source pad rectangle +cannot be negotiated, it must be set using the compose selection +API at sink pad (if /2 downscale is desired, otherwise source pad +rectangle is equal to incoming rectangle). + +To give an example of crop and /2 downscale, this will crop a +1280x960 input frame to 640x480, and then /2 downscale in both +dimensions to 320x240 (assumes ipu1_csi0 is linked to ipu1_csi0_mux): + +.. code-block:: none + + media-ctl -V "'ipu1_csi0_mux':2[fmt:UYVY2X8/1280x960]" + media-ctl -V "'ipu1_csi0':0[crop:(0,0)/640x480]" + media-ctl -V "'ipu1_csi0':0[compose:(0,0)/320x240]" + +Frame Skipping in ipuX_csiY +--------------------------- + +The CSI supports frame rate decimation, via frame skipping. Frame +rate decimation is specified by setting the frame intervals at +sink and source pads. The ipuX_csiY entity then applies the best +frame skip setting to the CSI to achieve the desired frame rate +at the source pad. + +The following example reduces an assumed incoming 60 Hz frame +rate by half at the IDMAC output source pad: + +.. code-block:: none + + media-ctl -V "'ipu1_csi0':0[fmt:UYVY2X8/640x480@1/60]" + media-ctl -V "'ipu1_csi0':2[fmt:UYVY2X8/640x480@1/30]" + +Frame Interval Monitor in ipuX_csiY +----------------------------------- + +See ref:`imx_api_FIM`. + +ipuX_vdic +--------- + +The VDIC carries out motion compensated de-interlacing, with three +motion compensation modes: low, medium, and high motion. The mode is +specified with the menu control V4L2_CID_DEINTERLACING_MODE. The VDIC +has two sink pads and a single source pad. + +The direct sink pad receives from an ipuX_csiY direct pad. With this +link the VDIC can only operate in high motion mode. + +When the IDMAC sink pad is activated, it receives from an output +or mem2mem device node. With this pipeline, the VDIC can also operate +in low and medium modes, because these modes require receiving +frames from memory buffers. Note that an output or mem2mem device +is not implemented yet, so this sink pad currently has no links. + +The source pad routes to the IC pre-processing entity ipuX_ic_prp. + +ipuX_ic_prp +----------- + +This is the IC pre-processing entity. It acts as a router, routing +data from its sink pad to one or both of its source pads. + +This entity has a single sink pad. The sink pad can receive from the +ipuX_csiY direct pad, or from ipuX_vdic. + +This entity has two source pads. One source pad routes to the +pre-process encode task entity (ipuX_ic_prpenc), the other to the +pre-process viewfinder task entity (ipuX_ic_prpvf). Both source pads +can be activated at the same time if the sink pad is receiving from +ipuX_csiY. Only the source pad to the pre-process viewfinder task entity +can be activated if the sink pad is receiving from ipuX_vdic (frames +from the VDIC can only be processed by the pre-process viewfinder task). + +ipuX_ic_prpenc +-------------- + +This is the IC pre-processing encode entity. It has a single sink +pad from ipuX_ic_prp, and a single source pad. The source pad is +routed to a capture device node, with a node name of the format +"ipuX_ic_prpenc capture". + +This entity performs the IC pre-process encode task operations: +color-space conversion, resizing (downscaling and upscaling), +horizontal and vertical flip, and 90/270 degree rotation. Flip +and rotation are provided via standard V4L2 controls. + +Like the ipuX_csiY IDMAC source, this entity also supports simple +de-interlace without motion compensation, and pixel reordering. + +ipuX_ic_prpvf +------------- + +This is the IC pre-processing viewfinder entity. It has a single sink +pad from ipuX_ic_prp, and a single source pad. The source pad is routed +to a capture device node, with a node name of the format +"ipuX_ic_prpvf capture". + +This entity is identical in operation to ipuX_ic_prpenc, with the same +resizing and CSC operations and flip/rotation controls. It will receive +and process de-interlaced frames from the ipuX_vdic if ipuX_ic_prp is +receiving from ipuX_vdic. + +Like the ipuX_csiY IDMAC source, this entity supports simple +interweaving without motion compensation. However, note that if the +ipuX_vdic is included in the pipeline (ipuX_ic_prp is receiving from +ipuX_vdic), it's not possible to use interweave in ipuX_ic_prpvf, +since the ipuX_vdic has already carried out de-interlacing (with +motion compensation) and therefore the field type output from +ipuX_vdic can only be none (progressive). + +Capture Pipelines +----------------- + +The following describe the various use-cases supported by the pipelines. + +The links shown do not include the backend sensor, video mux, or mipi +csi-2 receiver links. This depends on the type of sensor interface +(parallel or mipi csi-2). So these pipelines begin with: + +sensor -> ipuX_csiY_mux -> ... + +for parallel sensors, or: + +sensor -> imx6-mipi-csi2 -> (ipuX_csiY_mux) -> ... + +for mipi csi-2 sensors. The imx6-mipi-csi2 receiver may need to route +to the video mux (ipuX_csiY_mux) before sending to the CSI, depending +on the mipi csi-2 virtual channel, hence ipuX_csiY_mux is shown in +parenthesis. + +Unprocessed Video Capture: +-------------------------- + +Send frames directly from sensor to camera device interface node, with +no conversions, via ipuX_csiY IDMAC source pad: + +-> ipuX_csiY:2 -> ipuX_csiY capture + +IC Direct Conversions: +---------------------- + +This pipeline uses the preprocess encode entity to route frames directly +from the CSI to the IC, to carry out scaling up to 1024x1024 resolution, +CSC, flipping, and image rotation: + +-> ipuX_csiY:1 -> 0:ipuX_ic_prp:1 -> 0:ipuX_ic_prpenc:1 -> ipuX_ic_prpenc capture + +Motion Compensated De-interlace: +-------------------------------- + +This pipeline routes frames from the CSI direct pad to the VDIC entity to +support motion-compensated de-interlacing (high motion mode only), +scaling up to 1024x1024, CSC, flip, and rotation: + +-> ipuX_csiY:1 -> 0:ipuX_vdic:2 -> 0:ipuX_ic_prp:2 -> 0:ipuX_ic_prpvf:1 -> ipuX_ic_prpvf capture + + +Usage Notes +----------- + +To aid in configuration and for backward compatibility with V4L2 +applications that access controls only from video device nodes, the +capture device interfaces inherit controls from the active entities +in the current pipeline, so controls can be accessed either directly +from the subdev or from the active capture device interface. For +example, the FIM controls are available either from the ipuX_csiY +subdevs or from the active capture device. + +The following are specific usage notes for the Sabre* reference +boards: + + +SabreLite with OV5642 and OV5640 +-------------------------------- + +This platform requires the OmniVision OV5642 module with a parallel +camera interface, and the OV5640 module with a MIPI CSI-2 +interface. Both modules are available from Boundary Devices: + +- https://boundarydevices.com/product/nit6x_5mp +- https://boundarydevices.com/product/nit6x_5mp_mipi + +Note that if only one camera module is available, the other sensor +node can be disabled in the device tree. + +The OV5642 module is connected to the parallel bus input on the i.MX +internal video mux to IPU1 CSI0. It's i2c bus connects to i2c bus 2. + +The MIPI CSI-2 OV5640 module is connected to the i.MX internal MIPI CSI-2 +receiver, and the four virtual channel outputs from the receiver are +routed as follows: vc0 to the IPU1 CSI0 mux, vc1 directly to IPU1 CSI1, +vc2 directly to IPU2 CSI0, and vc3 to the IPU2 CSI1 mux. The OV5640 is +also connected to i2c bus 2 on the SabreLite, therefore the OV5642 and +OV5640 must not share the same i2c slave address. + +The following basic example configures unprocessed video capture +pipelines for both sensors. The OV5642 is routed to ipu1_csi0, and +the OV5640, transmitting on MIPI CSI-2 virtual channel 1 (which is +imx6-mipi-csi2 pad 2), is routed to ipu1_csi1. Both sensors are +configured to output 640x480, and the OV5642 outputs YUYV2X8, the +OV5640 UYVY2X8: + +.. code-block:: none + + # Setup links for OV5642 + media-ctl -l "'ov5642 1-0042':0 -> 'ipu1_csi0_mux':1[1]" + media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]" + media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]" + # Setup links for OV5640 + media-ctl -l "'ov5640 1-0040':0 -> 'imx6-mipi-csi2':0[1]" + media-ctl -l "'imx6-mipi-csi2':2 -> 'ipu1_csi1':0[1]" + media-ctl -l "'ipu1_csi1':2 -> 'ipu1_csi1 capture':0[1]" + # Configure pads for OV5642 pipeline + media-ctl -V "'ov5642 1-0042':0 [fmt:YUYV2X8/640x480 field:none]" + media-ctl -V "'ipu1_csi0_mux':2 [fmt:YUYV2X8/640x480 field:none]" + media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/640x480 field:none]" + # Configure pads for OV5640 pipeline + media-ctl -V "'ov5640 1-0040':0 [fmt:UYVY2X8/640x480 field:none]" + media-ctl -V "'imx6-mipi-csi2':2 [fmt:UYVY2X8/640x480 field:none]" + media-ctl -V "'ipu1_csi1':2 [fmt:AYUV32/640x480 field:none]" + +Streaming can then begin independently on the capture device nodes +"ipu1_csi0 capture" and "ipu1_csi1 capture". The v4l2-ctl tool can +be used to select any supported YUV pixelformat on the capture device +nodes, including planar. + +i.MX6Q SabreAuto with ADV7180 decoder +------------------------------------- + +On the i.MX6Q SabreAuto, an on-board ADV7180 SD decoder is connected to the +parallel bus input on the internal video mux to IPU1 CSI0. + +The following example configures a pipeline to capture from the ADV7180 +video decoder, assuming NTSC 720x480 input signals, using simple +interweave (unconverted and without motion compensation). The adv7180 +must output sequential or alternating fields (field type 'seq-bt' for +NTSC, or 'alternate'): + +.. code-block:: none + + # Setup links + media-ctl -l "'adv7180 3-0021':0 -> 'ipu1_csi0_mux':1[1]" + media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]" + media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]" + # Configure pads + media-ctl -V "'adv7180 3-0021':0 [fmt:UYVY2X8/720x480 field:seq-bt]" + media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/720x480]" + media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/720x480]" + # Configure "ipu1_csi0 capture" interface (assumed at /dev/video4) + v4l2-ctl -d4 --set-fmt-video=field=interlaced_bt + +Streaming can then begin on /dev/video4. The v4l2-ctl tool can also be +used to select any supported YUV pixelformat on /dev/video4. + +This example configures a pipeline to capture from the ADV7180 +video decoder, assuming PAL 720x576 input signals, with Motion +Compensated de-interlacing. The adv7180 must output sequential or +alternating fields (field type 'seq-tb' for PAL, or 'alternate'). + +.. code-block:: none + + # Setup links + media-ctl -l "'adv7180 3-0021':0 -> 'ipu1_csi0_mux':1[1]" + media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]" + media-ctl -l "'ipu1_csi0':1 -> 'ipu1_vdic':0[1]" + media-ctl -l "'ipu1_vdic':2 -> 'ipu1_ic_prp':0[1]" + media-ctl -l "'ipu1_ic_prp':2 -> 'ipu1_ic_prpvf':0[1]" + media-ctl -l "'ipu1_ic_prpvf':1 -> 'ipu1_ic_prpvf capture':0[1]" + # Configure pads + media-ctl -V "'adv7180 3-0021':0 [fmt:UYVY2X8/720x576 field:seq-tb]" + media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/720x576]" + media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/720x576]" + media-ctl -V "'ipu1_vdic':2 [fmt:AYUV32/720x576 field:none]" + media-ctl -V "'ipu1_ic_prp':2 [fmt:AYUV32/720x576 field:none]" + media-ctl -V "'ipu1_ic_prpvf':1 [fmt:AYUV32/720x576 field:none]" + # Configure "ipu1_ic_prpvf capture" interface (assumed at /dev/video2) + v4l2-ctl -d2 --set-fmt-video=field=none + +Streaming can then begin on /dev/video2. The v4l2-ctl tool can also be +used to select any supported YUV pixelformat on /dev/video2. + +This platform accepts Composite Video analog inputs to the ADV7180 on +Ain1 (connector J42). + +i.MX6DL SabreAuto with ADV7180 decoder +-------------------------------------- + +On the i.MX6DL SabreAuto, an on-board ADV7180 SD decoder is connected to the +parallel bus input on the internal video mux to IPU1 CSI0. + +The following example configures a pipeline to capture from the ADV7180 +video decoder, assuming NTSC 720x480 input signals, using simple +interweave (unconverted and without motion compensation). The adv7180 +must output sequential or alternating fields (field type 'seq-bt' for +NTSC, or 'alternate'): + +.. code-block:: none + + # Setup links + media-ctl -l "'adv7180 4-0021':0 -> 'ipu1_csi0_mux':4[1]" + media-ctl -l "'ipu1_csi0_mux':5 -> 'ipu1_csi0':0[1]" + media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]" + # Configure pads + media-ctl -V "'adv7180 4-0021':0 [fmt:UYVY2X8/720x480 field:seq-bt]" + media-ctl -V "'ipu1_csi0_mux':5 [fmt:UYVY2X8/720x480]" + media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/720x480]" + # Configure "ipu1_csi0 capture" interface (assumed at /dev/video0) + v4l2-ctl -d0 --set-fmt-video=field=interlaced_bt + +Streaming can then begin on /dev/video0. The v4l2-ctl tool can also be +used to select any supported YUV pixelformat on /dev/video0. + +This example configures a pipeline to capture from the ADV7180 +video decoder, assuming PAL 720x576 input signals, with Motion +Compensated de-interlacing. The adv7180 must output sequential or +alternating fields (field type 'seq-tb' for PAL, or 'alternate'). + +.. code-block:: none + + # Setup links + media-ctl -l "'adv7180 4-0021':0 -> 'ipu1_csi0_mux':4[1]" + media-ctl -l "'ipu1_csi0_mux':5 -> 'ipu1_csi0':0[1]" + media-ctl -l "'ipu1_csi0':1 -> 'ipu1_vdic':0[1]" + media-ctl -l "'ipu1_vdic':2 -> 'ipu1_ic_prp':0[1]" + media-ctl -l "'ipu1_ic_prp':2 -> 'ipu1_ic_prpvf':0[1]" + media-ctl -l "'ipu1_ic_prpvf':1 -> 'ipu1_ic_prpvf capture':0[1]" + # Configure pads + media-ctl -V "'adv7180 4-0021':0 [fmt:UYVY2X8/720x576 field:seq-tb]" + media-ctl -V "'ipu1_csi0_mux':5 [fmt:UYVY2X8/720x576]" + media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/720x576]" + media-ctl -V "'ipu1_vdic':2 [fmt:AYUV32/720x576 field:none]" + media-ctl -V "'ipu1_ic_prp':2 [fmt:AYUV32/720x576 field:none]" + media-ctl -V "'ipu1_ic_prpvf':1 [fmt:AYUV32/720x576 field:none]" + # Configure "ipu1_ic_prpvf capture" interface (assumed at /dev/video2) + v4l2-ctl -d2 --set-fmt-video=field=none + +Streaming can then begin on /dev/video2. The v4l2-ctl tool can also be +used to select any supported YUV pixelformat on /dev/video2. + +This platform accepts Composite Video analog inputs to the ADV7180 on +Ain1 (connector J42). + +SabreSD with MIPI CSI-2 OV5640 +------------------------------ + +Similarly to SabreLite, the SabreSD supports a parallel interface +OV5642 module on IPU1 CSI0, and a MIPI CSI-2 OV5640 module. The OV5642 +connects to i2c bus 1 and the OV5640 to i2c bus 2. + +The device tree for SabreSD includes OF graphs for both the parallel +OV5642 and the MIPI CSI-2 OV5640, but as of this writing only the MIPI +CSI-2 OV5640 has been tested, so the OV5642 node is currently disabled. +The OV5640 module connects to MIPI connector J5 (sorry I don't have the +compatible module part number or URL). + +The following example configures a direct conversion pipeline to capture +from the OV5640, transmitting on MIPI CSI-2 virtual channel 1. $sensorfmt +can be any format supported by the OV5640. $sensordim is the frame +dimension part of $sensorfmt (minus the mbus pixel code). $outputfmt can +be any format supported by the ipu1_ic_prpenc entity at its output pad: + +.. code-block:: none + + # Setup links + media-ctl -l "'ov5640 1-003c':0 -> 'imx6-mipi-csi2':0[1]" + media-ctl -l "'imx6-mipi-csi2':2 -> 'ipu1_csi1':0[1]" + media-ctl -l "'ipu1_csi1':1 -> 'ipu1_ic_prp':0[1]" + media-ctl -l "'ipu1_ic_prp':1 -> 'ipu1_ic_prpenc':0[1]" + media-ctl -l "'ipu1_ic_prpenc':1 -> 'ipu1_ic_prpenc capture':0[1]" + # Configure pads + media-ctl -V "'ov5640 1-003c':0 [fmt:$sensorfmt field:none]" + media-ctl -V "'imx6-mipi-csi2':2 [fmt:$sensorfmt field:none]" + media-ctl -V "'ipu1_csi1':1 [fmt:AYUV32/$sensordim field:none]" + media-ctl -V "'ipu1_ic_prp':1 [fmt:AYUV32/$sensordim field:none]" + media-ctl -V "'ipu1_ic_prpenc':1 [fmt:$outputfmt field:none]" + +Streaming can then begin on "ipu1_ic_prpenc capture" node. The v4l2-ctl +tool can be used to select any supported YUV or RGB pixelformat on the +capture device node. + + +Known Issues +------------ + +1. When using 90 or 270 degree rotation control at capture resolutions + near the IC resizer limit of 1024x1024, and combined with planar + pixel formats (YUV420, YUV422p), frame capture will often fail with + no end-of-frame interrupts from the IDMAC channel. To work around + this, use lower resolution and/or packed formats (YUYV, RGB3, etc.) + when 90 or 270 rotations are needed. + + +File list +--------- + +drivers/staging/media/imx/ +include/media/imx.h +include/linux/imx-media.h + +References +---------- + +.. [#f1] http://www.nxp.com/assets/documents/data/en/reference-manuals/IMX6DQRM.pdf +.. [#f2] http://www.nxp.com/assets/documents/data/en/reference-manuals/IMX6SDLRM.pdf + + +Authors +------- + +- Steve Longerbeam +- Philipp Zabel +- Russell King + +Copyright (C) 2012-2017 Mentor Graphics Inc. diff --git a/Documentation/admin-guide/media/imx7.rst b/Documentation/admin-guide/media/imx7.rst new file mode 100644 index 000000000000..1e442c97da47 --- /dev/null +++ b/Documentation/admin-guide/media/imx7.rst @@ -0,0 +1,161 @@ +.. SPDX-License-Identifier: GPL-2.0 + +i.MX7 Video Capture Driver +========================== + +Introduction +------------ + +The i.MX7 contrary to the i.MX5/6 family does not contain an Image Processing +Unit (IPU); because of that the capabilities to perform operations or +manipulation of the capture frames are less feature rich. + +For image capture the i.MX7 has three units: +- CMOS Sensor Interface (CSI) +- Video Multiplexer +- MIPI CSI-2 Receiver + +.. code-block:: none + + MIPI Camera Input ---> MIPI CSI-2 --- > |\ + | \ + | \ + | M | + | U | ------> CSI ---> Capture + | X | + | / + Parallel Camera Input ----------------> | / + |/ + +For additional information, please refer to the latest versions of the i.MX7 +reference manual [#f1]_. + +Entities +-------- + +imx7-mipi-csi2 +-------------- + +This is the MIPI CSI-2 receiver entity. It has one sink pad to receive the pixel +data from MIPI CSI-2 camera sensor. It has one source pad, corresponding to the +virtual channel 0. This module is compliant to previous version of Samsung +D-phy, and supports two D-PHY Rx Data lanes. + +csi-mux +------- + +This is the video multiplexer. It has two sink pads to select from either camera +sensor with a parallel interface or from MIPI CSI-2 virtual channel 0. It has +a single source pad that routes to the CSI. + +csi +--- + +The CSI enables the chip to connect directly to external CMOS image sensor. CSI +can interface directly with Parallel and MIPI CSI-2 buses. It has 256 x 64 FIFO +to store received image pixel data and embedded DMA controllers to transfer data +from the FIFO through AHB bus. + +This entity has one sink pad that receives from the csi-mux entity and a single +source pad that routes video frames directly to memory buffers. This pad is +routed to a capture device node. + +Usage Notes +----------- + +To aid in configuration and for backward compatibility with V4L2 applications +that access controls only from video device nodes, the capture device interfaces +inherit controls from the active entities in the current pipeline, so controls +can be accessed either directly from the subdev or from the active capture +device interface. For example, the sensor controls are available either from the +sensor subdevs or from the active capture device. + +Warp7 with OV2680 +----------------- + +On this platform an OV2680 MIPI CSI-2 module is connected to the internal MIPI +CSI-2 receiver. The following example configures a video capture pipeline with +an output of 800x600, and BGGR 10 bit bayer format: + +.. code-block:: none + + # Setup links + media-ctl -l "'ov2680 1-0036':0 -> 'imx7-mipi-csis.0':0[1]" + media-ctl -l "'imx7-mipi-csis.0':1 -> 'csi-mux':1[1]" + media-ctl -l "'csi-mux':2 -> 'csi':0[1]" + media-ctl -l "'csi':1 -> 'csi capture':0[1]" + + # Configure pads for pipeline + media-ctl -V "'ov2680 1-0036':0 [fmt:SBGGR10_1X10/800x600 field:none]" + media-ctl -V "'csi-mux':1 [fmt:SBGGR10_1X10/800x600 field:none]" + media-ctl -V "'csi-mux':2 [fmt:SBGGR10_1X10/800x600 field:none]" + media-ctl -V "'imx7-mipi-csis.0':0 [fmt:SBGGR10_1X10/800x600 field:none]" + media-ctl -V "'csi':0 [fmt:SBGGR10_1X10/800x600 field:none]" + +After this streaming can start. The v4l2-ctl tool can be used to select any of +the resolutions supported by the sensor. + +.. code-block:: none + + # media-ctl -p + Media controller API version 5.2.0 + + Media device information + ------------------------ + driver imx7-csi + model imx-media + serial + bus info + hw revision 0x0 + driver version 5.2.0 + + Device topology + - entity 1: csi (2 pads, 2 links) + type V4L2 subdev subtype Unknown flags 0 + device node name /dev/v4l-subdev0 + pad0: Sink + [fmt:SBGGR10_1X10/800x600 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range] + <- "csi-mux":2 [ENABLED] + pad1: Source + [fmt:SBGGR10_1X10/800x600 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range] + -> "csi capture":0 [ENABLED] + + - entity 4: csi capture (1 pad, 1 link) + type Node subtype V4L flags 0 + device node name /dev/video0 + pad0: Sink + <- "csi":1 [ENABLED] + + - entity 10: csi-mux (3 pads, 2 links) + type V4L2 subdev subtype Unknown flags 0 + device node name /dev/v4l-subdev1 + pad0: Sink + [fmt:Y8_1X8/1x1 field:none] + pad1: Sink + [fmt:SBGGR10_1X10/800x600 field:none] + <- "imx7-mipi-csis.0":1 [ENABLED] + pad2: Source + [fmt:SBGGR10_1X10/800x600 field:none] + -> "csi":0 [ENABLED] + + - entity 14: imx7-mipi-csis.0 (2 pads, 2 links) + type V4L2 subdev subtype Unknown flags 0 + device node name /dev/v4l-subdev2 + pad0: Sink + [fmt:SBGGR10_1X10/800x600 field:none] + <- "ov2680 1-0036":0 [ENABLED] + pad1: Source + [fmt:SBGGR10_1X10/800x600 field:none] + -> "csi-mux":1 [ENABLED] + + - entity 17: ov2680 1-0036 (1 pad, 1 link) + type V4L2 subdev subtype Sensor flags 0 + device node name /dev/v4l-subdev3 + pad0: Source + [fmt:SBGGR10_1X10/800x600@1/30 field:none colorspace:srgb] + -> "imx7-mipi-csis.0":0 [ENABLED] + +References +---------- + +.. [#f1] https://www.nxp.com/docs/en/reference-manual/IMX7SRM.pdf diff --git a/Documentation/admin-guide/media/index.rst b/Documentation/admin-guide/media/index.rst new file mode 100644 index 000000000000..5b355c327be1 --- /dev/null +++ b/Documentation/admin-guide/media/index.rst @@ -0,0 +1,104 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: + +**Copyright** |copy| 1999-2020 : LinuxTV Developers + +This documentation is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +more details. + +For more details see the file COPYING in the source distribution of Linux. + +.. _uapi-v4l-drivers: + +################################################ +Video4Linux (V4L) driver-specific documentation +################################################ + +.. only:: html + + .. class:: toc-title + + Table of Contents + +.. toctree:: + :maxdepth: 5 + :numbered: + + cardlist + + v4l-with-ir + + bttv + cafe_ccic + cpia2 + cx88 + davinci-vpbe + fimc + imx + imx7 + ipu3 + ivtv + meye + omap3isp + omap4_camera + philips + qcom_camss + rcar-fdp1 + saa7134 + si470x + si4713 + si476x + vimc + vivid + +############################################## +Linux Digital TV driver-specific documentation +############################################## + +.. only:: html + + .. class:: toc-title + + Table of Contents + +.. toctree:: + :maxdepth: 5 + :numbered: + + intro + + cards + ci + faq + + avermedia + bt8xx + lmedm04 + opera-firmware + technisat + ttusb-dec + udev + zr364xx + +################################# +CEC driver-specific documentation +################################# + +.. only:: html + + .. class:: toc-title + + Table of Contents + +.. toctree:: + :maxdepth: 5 + :numbered: + + pulse8-cec diff --git a/Documentation/admin-guide/media/intro.rst b/Documentation/admin-guide/media/intro.rst new file mode 100644 index 000000000000..4e361bcc3ad4 --- /dev/null +++ b/Documentation/admin-guide/media/intro.rst @@ -0,0 +1,23 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Introduction +============ + +The main development site and GIT repository for these +drivers is https://linuxtv.org. + +The DVB mailing list linux-dvb is hosted at vger. Please see +http://vger.kernel.org/vger-lists.html#linux-media for details. + +There are also some other old lists hosted at https://linuxtv.org/lists.php. Please check the archive https://linuxtv.org/pipermail/linux-dvb/. + +The media subsystem Wiki is hosted at https://linuxtv.org/wiki/. +Please check it before asking newbie questions on the list. + +API documentation is documented at the Kernel. You'll also find useful +documentation at: https://linuxtv.org/docs.php. + +You may also find useful material at https://linuxtv.org/downloads/. + +In order to get firmware from proprietary drivers, there's a script at +the kernel tree, at scripts/get_dvb_firmware. diff --git a/Documentation/admin-guide/media/ipu3.rst b/Documentation/admin-guide/media/ipu3.rst new file mode 100644 index 000000000000..a694f49491f9 --- /dev/null +++ b/Documentation/admin-guide/media/ipu3.rst @@ -0,0 +1,558 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: + +=============================================================== +Intel Image Processing Unit 3 (IPU3) Imaging Unit (ImgU) driver +=============================================================== + +Copyright |copy| 2018 Intel Corporation + +Introduction +============ + +This file documents the Intel IPU3 (3rd generation Image Processing Unit) +Imaging Unit drivers located under drivers/media/pci/intel/ipu3 (CIO2) as well +as under drivers/staging/media/ipu3 (ImgU). + +The Intel IPU3 found in certain Kaby Lake (as well as certain Sky Lake) +platforms (U/Y processor lines) is made up of two parts namely the Imaging Unit +(ImgU) and the CIO2 device (MIPI CSI2 receiver). + +The CIO2 device receives the raw Bayer data from the sensors and outputs the +frames in a format that is specific to the IPU3 (for consumption by the IPU3 +ImgU). The CIO2 driver is available as drivers/media/pci/intel/ipu3/ipu3-cio2* +and is enabled through the CONFIG_VIDEO_IPU3_CIO2 config option. + +The Imaging Unit (ImgU) is responsible for processing images captured +by the IPU3 CIO2 device. The ImgU driver sources can be found under +drivers/staging/media/ipu3 directory. The driver is enabled through the +CONFIG_VIDEO_IPU3_IMGU config option. + +The two driver modules are named ipu3_csi2 and ipu3_imgu, respectively. + +The drivers has been tested on Kaby Lake platforms (U/Y processor lines). + +Both of the drivers implement V4L2, Media Controller and V4L2 sub-device +interfaces. The IPU3 CIO2 driver supports camera sensors connected to the CIO2 +MIPI CSI-2 interfaces through V4L2 sub-device sensor drivers. + +CIO2 +==== + +The CIO2 is represented as a single V4L2 subdev, which provides a V4L2 subdev +interface to the user space. There is a video node for each CSI-2 receiver, +with a single media controller interface for the entire device. + +The CIO2 contains four independent capture channel, each with its own MIPI CSI-2 +receiver and DMA engine. Each channel is modelled as a V4L2 sub-device exposed +to userspace as a V4L2 sub-device node and has two pads: + +.. tabularcolumns:: |p{0.8cm}|p{4.0cm}|p{4.0cm}| + +.. flat-table:: + + * - pad + - direction + - purpose + + * - 0 + - sink + - MIPI CSI-2 input, connected to the sensor subdev + + * - 1 + - source + - Raw video capture, connected to the V4L2 video interface + +The V4L2 video interfaces model the DMA engines. They are exposed to userspace +as V4L2 video device nodes. + +Capturing frames in raw Bayer format +------------------------------------ + +CIO2 MIPI CSI2 receiver is used to capture frames (in packed raw Bayer format) +from the raw sensors connected to the CSI2 ports. The captured frames are used +as input to the ImgU driver. + +Image processing using IPU3 ImgU requires tools such as raw2pnm [#f1]_, and +yavta [#f2]_ due to the following unique requirements and / or features specific +to IPU3. + +-- The IPU3 CSI2 receiver outputs the captured frames from the sensor in packed +raw Bayer format that is specific to IPU3. + +-- Multiple video nodes have to be operated simultaneously. + +Let us take the example of ov5670 sensor connected to CSI2 port 0, for a +2592x1944 image capture. + +Using the media contorller APIs, the ov5670 sensor is configured to send +frames in packed raw Bayer format to IPU3 CSI2 receiver. + +# This example assumes /dev/media0 as the CIO2 media device + +export MDEV=/dev/media0 + +# and that ov5670 sensor is connected to i2c bus 10 with address 0x36 + +export SDEV=$(media-ctl -d $MDEV -e "ov5670 10-0036") + +# Establish the link for the media devices using media-ctl [#f3]_ +media-ctl -d $MDEV -l "ov5670:0 -> ipu3-csi2 0:0[1]" + +# Set the format for the media devices +media-ctl -d $MDEV -V "ov5670:0 [fmt:SGRBG10/2592x1944]" + +media-ctl -d $MDEV -V "ipu3-csi2 0:0 [fmt:SGRBG10/2592x1944]" + +media-ctl -d $MDEV -V "ipu3-csi2 0:1 [fmt:SGRBG10/2592x1944]" + +Once the media pipeline is configured, desired sensor specific settings +(such as exposure and gain settings) can be set, using the yavta tool. + +e.g + +yavta -w 0x009e0903 444 $SDEV + +yavta -w 0x009e0913 1024 $SDEV + +yavta -w 0x009e0911 2046 $SDEV + +Once the desired sensor settings are set, frame captures can be done as below. + +e.g + +yavta --data-prefix -u -c10 -n5 -I -s2592x1944 --file=/tmp/frame-#.bin \ + -f IPU3_SGRBG10 $(media-ctl -d $MDEV -e "ipu3-cio2 0") + +With the above command, 10 frames are captured at 2592x1944 resolution, with +sGRBG10 format and output as IPU3_SGRBG10 format. + +The captured frames are available as /tmp/frame-#.bin files. + +ImgU +==== + +The ImgU is represented as two V4L2 subdevs, each of which provides a V4L2 +subdev interface to the user space. + +Each V4L2 subdev represents a pipe, which can support a maximum of 2 streams. +This helps to support advanced camera features like Continuous View Finder (CVF) +and Snapshot During Video(SDV). + +The ImgU contains two independent pipes, each modelled as a V4L2 sub-device +exposed to userspace as a V4L2 sub-device node. + +Each pipe has two sink pads and three source pads for the following purpose: + +.. tabularcolumns:: |p{0.8cm}|p{4.0cm}|p{4.0cm}| + +.. flat-table:: + + * - pad + - direction + - purpose + + * - 0 + - sink + - Input raw video stream + + * - 1 + - sink + - Processing parameters + + * - 2 + - source + - Output processed video stream + + * - 3 + - source + - Output viewfinder video stream + + * - 4 + - source + - 3A statistics + +Each pad is connected to a corresponding V4L2 video interface, exposed to +userspace as a V4L2 video device node. + +Device operation +---------------- + +With ImgU, once the input video node ("ipu3-imgu 0/1":0, in +: format) is queued with buffer (in packed raw Bayer +format), ImgU starts processing the buffer and produces the video output in YUV +format and statistics output on respective output nodes. The driver is expected +to have buffers ready for all of parameter, output and statistics nodes, when +input video node is queued with buffer. + +At a minimum, all of input, main output, 3A statistics and viewfinder +video nodes should be enabled for IPU3 to start image processing. + +Each ImgU V4L2 subdev has the following set of video nodes. + +input, output and viewfinder video nodes +---------------------------------------- + +The frames (in packed raw Bayer format specific to the IPU3) received by the +input video node is processed by the IPU3 Imaging Unit and are output to 2 video +nodes, with each targeting a different purpose (main output and viewfinder +output). + +Details onand the Bayer format specific to the IPU3 can be found in +:ref:`v4l2-pix-fmt-ipu3-sbggr10`. + +The driver supports V4L2 Video Capture Interface as defined at :ref:`devices`. + +Only the multi-planar API is supported. More details can be found at +:ref:`planar-apis`. + +Parameters video node +--------------------- + +The parameters video node receives the ImgU algorithm parameters that are used +to configure how the ImgU algorithms process the image. + +Details on processing parameters specific to the IPU3 can be found in +:ref:`v4l2-meta-fmt-params`. + +3A statistics video node +------------------------ + +3A statistics video node is used by the ImgU driver to output the 3A (auto +focus, auto exposure and auto white balance) statistics for the frames that are +being processed by the ImgU to user space applications. User space applications +can use this statistics data to compute the desired algorithm parameters for +the ImgU. + +Configuring the Intel IPU3 +========================== + +The IPU3 ImgU pipelines can be configured using the Media Controller, defined at +:ref:`media_controller`. + +Firmware binary selection +------------------------- + +The firmware binary is selected using the V4L2_CID_INTEL_IPU3_MODE, currently +defined in drivers/staging/media/ipu3/include/intel-ipu3.h . "VIDEO" and "STILL" +modes are available. + +Processing the image in raw Bayer format +---------------------------------------- + +Configuring ImgU V4L2 subdev for image processing +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ImgU V4L2 subdevs have to be configured with media controller APIs to have +all the video nodes setup correctly. + +Let us take "ipu3-imgu 0" subdev as an example. + +media-ctl -d $MDEV -r + +media-ctl -d $MDEV -l "ipu3-imgu 0 input":0 -> "ipu3-imgu 0":0[1] + +media-ctl -d $MDEV -l "ipu3-imgu 0":2 -> "ipu3-imgu 0 output":0[1] + +media-ctl -d $MDEV -l "ipu3-imgu 0":3 -> "ipu3-imgu 0 viewfinder":0[1] + +media-ctl -d $MDEV -l "ipu3-imgu 0":4 -> "ipu3-imgu 0 3a stat":0[1] + +Also the pipe mode of the corresponding V4L2 subdev should be set as desired +(e.g 0 for video mode or 1 for still mode) through the control id 0x009819a1 as +below. + +yavta -w "0x009819A1 1" /dev/v4l-subdev7 + +Certain hardware blocks in ImgU pipeline can change the frame resolution by +cropping or scaling, these hardware blocks include Input Feeder(IF), Bayer Down +Scaler (BDS) and Geometric Distortion Correction (GDC). +There is also a block which can change the frame resolution - YUV Scaler, it is +only applicable to the secondary output. + +RAW Bayer frames go through these ImgU pipeline hardware blocks and the final +processed image output to the DDR memory. + +.. kernel-figure:: ipu3_rcb.svg + :alt: ipu3 resolution blocks image + + IPU3 resolution change hardware blocks + +**Input Feeder** + +Input Feeder gets the Bayer frame data from the sensor, it can enable cropping +of lines and columns from the frame and then store pixels into device's internal +pixel buffer which are ready to readout by following blocks. + +**Bayer Down Scaler** + +Bayer Down Scaler is capable of performing image scaling in Bayer domain, the +downscale factor can be configured from 1X to 1/4X in each axis with +configuration steps of 0.03125 (1/32). + +**Geometric Distortion Correction** + +Geometric Distortion Correction is used to performe correction of distortions +and image filtering. It needs some extra filter and envelop padding pixels to +work, so the input resolution of GDC should be larger than the output +resolution. + +**YUV Scaler** + +YUV Scaler which similar with BDS, but it is mainly do image down scaling in +YUV domain, it can support up to 1/12X down scaling, but it can not be applied +to the main output. + +The ImgU V4L2 subdev has to be configured with the supported resolutions in all +the above hardware blocks, for a given input resolution. +For a given supported resolution for an input frame, the Input Feeder, Bayer +Down Scaler and GDC blocks should be configured with the supported resolutions +as each hardware block has its own alignment requirement. + +You must configure the output resolution of the hardware blocks smartly to meet +the hardware requirement along with keeping the maximum field of view. The +intermediate resolutions can be generated by specific tool - + +https://github.com/intel/intel-ipu3-pipecfg + +This tool can be used to generate intermediate resolutions. More information can +be obtained by looking at the following IPU3 ImgU configuration table. + +https://chromium.googlesource.com/chromiumos/overlays/board-overlays/+/master + +Under baseboard-poppy/media-libs/cros-camera-hal-configs-poppy/files/gcss +directory, graph_settings_ov5670.xml can be used as an example. + +The following steps prepare the ImgU pipeline for the image processing. + +1. The ImgU V4L2 subdev data format should be set by using the +VIDIOC_SUBDEV_S_FMT on pad 0, using the GDC width and height obtained above. + +2. The ImgU V4L2 subdev cropping should be set by using the +VIDIOC_SUBDEV_S_SELECTION on pad 0, with V4L2_SEL_TGT_CROP as the target, +using the input feeder height and width. + +3. The ImgU V4L2 subdev composing should be set by using the +VIDIOC_SUBDEV_S_SELECTION on pad 0, with V4L2_SEL_TGT_COMPOSE as the target, +using the BDS height and width. + +For the ov5670 example, for an input frame with a resolution of 2592x1944 +(which is input to the ImgU subdev pad 0), the corresponding resolutions +for input feeder, BDS and GDC are 2592x1944, 2592x1944 and 2560x1920 +respectively. + +Once this is done, the received raw Bayer frames can be input to the ImgU +V4L2 subdev as below, using the open source application v4l2n [#f1]_. + +For an image captured with 2592x1944 [#f4]_ resolution, with desired output +resolution as 2560x1920 and viewfinder resolution as 2560x1920, the following +v4l2n command can be used. This helps process the raw Bayer frames and produces +the desired results for the main output image and the viewfinder output, in NV12 +format. + +v4l2n --pipe=4 --load=/tmp/frame-#.bin --open=/dev/video4 +--fmt=type:VIDEO_OUTPUT_MPLANE,width=2592,height=1944,pixelformat=0X47337069 +--reqbufs=type:VIDEO_OUTPUT_MPLANE,count:1 --pipe=1 --output=/tmp/frames.out +--open=/dev/video5 +--fmt=type:VIDEO_CAPTURE_MPLANE,width=2560,height=1920,pixelformat=NV12 +--reqbufs=type:VIDEO_CAPTURE_MPLANE,count:1 --pipe=2 --output=/tmp/frames.vf +--open=/dev/video6 +--fmt=type:VIDEO_CAPTURE_MPLANE,width=2560,height=1920,pixelformat=NV12 +--reqbufs=type:VIDEO_CAPTURE_MPLANE,count:1 --pipe=3 --open=/dev/video7 +--output=/tmp/frames.3A --fmt=type:META_CAPTURE,? +--reqbufs=count:1,type:META_CAPTURE --pipe=1,2,3,4 --stream=5 + +where /dev/video4, /dev/video5, /dev/video6 and /dev/video7 devices point to +input, output, viewfinder and 3A statistics video nodes respectively. + +Converting the raw Bayer image into YUV domain +---------------------------------------------- + +The processed images after the above step, can be converted to YUV domain +as below. + +Main output frames +~~~~~~~~~~~~~~~~~~ + +raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.out /tmp/frames.out.ppm + +where 2560x1920 is output resolution, NV12 is the video format, followed +by input frame and output PNM file. + +Viewfinder output frames +~~~~~~~~~~~~~~~~~~~~~~~~ + +raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.vf /tmp/frames.vf.ppm + +where 2560x1920 is output resolution, NV12 is the video format, followed +by input frame and output PNM file. + +Example user space code for IPU3 +================================ + +User space code that configures and uses IPU3 is available here. + +https://chromium.googlesource.com/chromiumos/platform/arc-camera/+/master/ + +The source can be located under hal/intel directory. + +Overview of IPU3 pipeline +========================= + +IPU3 pipeline has a number of image processing stages, each of which takes a +set of parameters as input. The major stages of pipelines are shown here: + +.. kernel-render:: DOT + :alt: IPU3 ImgU Pipeline + :caption: IPU3 ImgU Pipeline Diagram + + digraph "IPU3 ImgU" { + node [shape=box] + splines="ortho" + rankdir="LR" + + a [label="Raw pixels"] + b [label="Bayer Downscaling"] + c [label="Optical Black Correction"] + d [label="Linearization"] + e [label="Lens Shading Correction"] + f [label="White Balance / Exposure / Focus Apply"] + g [label="Bayer Noise Reduction"] + h [label="ANR"] + i [label="Demosaicing"] + j [label="Color Correction Matrix"] + k [label="Gamma correction"] + l [label="Color Space Conversion"] + m [label="Chroma Down Scaling"] + n [label="Chromatic Noise Reduction"] + o [label="Total Color Correction"] + p [label="XNR3"] + q [label="TNR"] + r [label="DDR"] + + { rank=same; a -> b -> c -> d -> e -> f } + { rank=same; g -> h -> i -> j -> k -> l } + { rank=same; m -> n -> o -> p -> q -> r } + + a -> g -> m [style=invis, weight=10] + + f -> g + l -> m + } + +The table below presents a description of the above algorithms. + +======================== ======================================================= +Name Description +======================== ======================================================= +Optical Black Correction Optical Black Correction block subtracts a pre-defined + value from the respective pixel values to obtain better + image quality. + Defined in :c:type:`ipu3_uapi_obgrid_param`. +Linearization This algo block uses linearization parameters to + address non-linearity sensor effects. The Lookup table + table is defined in + :c:type:`ipu3_uapi_isp_lin_vmem_params`. +SHD Lens shading correction is used to correct spatial + non-uniformity of the pixel response due to optical + lens shading. This is done by applying a different gain + for each pixel. The gain, black level etc are + configured in :c:type:`ipu3_uapi_shd_config_static`. +BNR Bayer noise reduction block removes image noise by + applying a bilateral filter. + See :c:type:`ipu3_uapi_bnr_static_config` for details. +ANR Advanced Noise Reduction is a block based algorithm + that performs noise reduction in the Bayer domain. The + convolution matrix etc can be found in + :c:type:`ipu3_uapi_anr_config`. +DM Demosaicing converts raw sensor data in Bayer format + into RGB (Red, Green, Blue) presentation. Then add + outputs of estimation of Y channel for following stream + processing by Firmware. The struct is defined as + :c:type:`ipu3_uapi_dm_config`. +Color Correction Color Correction algo transforms sensor specific color + space to the standard "sRGB" color space. This is done + by applying 3x3 matrix defined in + :c:type:`ipu3_uapi_ccm_mat_config`. +Gamma correction Gamma correction :c:type:`ipu3_uapi_gamma_config` is a + basic non-linear tone mapping correction that is + applied per pixel for each pixel component. +CSC Color space conversion transforms each pixel from the + RGB primary presentation to YUV (Y: brightness, + UV: Luminance) presentation. This is done by applying + a 3x3 matrix defined in + :c:type:`ipu3_uapi_csc_mat_config` +CDS Chroma down sampling + After the CSC is performed, the Chroma Down Sampling + is applied for a UV plane down sampling by a factor + of 2 in each direction for YUV 4:2:0 using a 4x2 + configurable filter :c:type:`ipu3_uapi_cds_params`. +CHNR Chroma noise reduction + This block processes only the chrominance pixels and + performs noise reduction by cleaning the high + frequency noise. + See struct :c:type:`ipu3_uapi_yuvp1_chnr_config`. +TCC Total color correction as defined in struct + :c:type:`ipu3_uapi_yuvp2_tcc_static_config`. +XNR3 eXtreme Noise Reduction V3 is the third revision of + noise reduction algorithm used to improve image + quality. This removes the low frequency noise in the + captured image. Two related structs are being defined, + :c:type:`ipu3_uapi_isp_xnr3_params` for ISP data memory + and :c:type:`ipu3_uapi_isp_xnr3_vmem_params` for vector + memory. +TNR Temporal Noise Reduction block compares successive + frames in time to remove anomalies / noise in pixel + values. :c:type:`ipu3_uapi_isp_tnr3_vmem_params` and + :c:type:`ipu3_uapi_isp_tnr3_params` are defined for ISP + vector and data memory respectively. +======================== ======================================================= + +Other often encountered acronyms not listed in above table: + + ACC + Accelerator cluster + AWB_FR + Auto white balance filter response statistics + BDS + Bayer downscaler parameters + CCM + Color correction matrix coefficients + IEFd + Image enhancement filter directed + Obgrid + Optical black level compensation + OSYS + Output system configuration + ROI + Region of interest + YDS + Y down sampling + YTM + Y-tone mapping + +A few stages of the pipeline will be executed by firmware running on the ISP +processor, while many others will use a set of fixed hardware blocks also +called accelerator cluster (ACC) to crunch pixel data and produce statistics. + +ACC parameters of individual algorithms, as defined by +:c:type:`ipu3_uapi_acc_param`, can be chosen to be applied by the user +space through struct :c:type:`ipu3_uapi_flags` embedded in +:c:type:`ipu3_uapi_params` structure. For parameters that are configured as +not enabled by the user space, the corresponding structs are ignored by the +driver, in which case the existing configuration of the algorithm will be +preserved. + +References +========== + +.. [#f5] drivers/staging/media/ipu3/include/intel-ipu3.h + +.. [#f1] https://github.com/intel/nvt + +.. [#f2] http://git.ideasonboard.org/yavta.git + +.. [#f3] http://git.ideasonboard.org/?p=media-ctl.git;a=summary + +.. [#f4] ImgU limitation requires an additional 16x16 for all input resolutions diff --git a/Documentation/admin-guide/media/ipu3_rcb.svg b/Documentation/admin-guide/media/ipu3_rcb.svg new file mode 100644 index 000000000000..d878421b42a0 --- /dev/null +++ b/Documentation/admin-guide/media/ipu3_rcb.svg @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Documentation/admin-guide/media/ivtv-cardlist.rst b/Documentation/admin-guide/media/ivtv-cardlist.rst new file mode 100644 index 000000000000..c34a9ebc9ac2 --- /dev/null +++ b/Documentation/admin-guide/media/ivtv-cardlist.rst @@ -0,0 +1,139 @@ +.. SPDX-License-Identifier: GPL-2.0 + +IVTV cards list +=============== + +.. tabularcolumns:: |p{1.4cm}|p{12.7cm}|p{3.4cm}| + +.. flat-table:: + :header-rows: 1 + :widths: 2 19 18 + :stub-columns: 0 + + * - Card number + - Card name + - PCI IDs + + * - 0 + - Hauppauge WinTV PVR-250 + - IVTV16 104d:813d + + * - 1 + - Hauppauge WinTV PVR-350 + - IVTV16 104d:813d + + * - 2 + - Hauppauge WinTV PVR-150 + - IVTV16 104d:813d + + * - 3 + - AVerMedia M179 + - IVTV15 1461:a3cf, IVTV15 1461:a3ce + + * - 4 + - Yuan MPG600, Kuroutoshikou ITVC16-STVLP + - IVTV16 12ab:fff3, IVTV16 12ab:ffff + + * - 5 + - YUAN MPG160, Kuroutoshikou ITVC15-STVLP, I/O Data GV-M2TV/PCI + - IVTV15 10fc:40a0 + + * - 6 + - Yuan PG600, Diamond PVR-550 + - IVTV16 ff92:0070, IVTV16 ffab:0600 + + * - 7 + - Adaptec VideOh! AVC-2410 + - IVTV16 9005:0093 + + * - 8 + - Adaptec VideOh! AVC-2010 + - IVTV16 9005:0092 + + * - 9 + - Nagase Transgear 5000TV + - IVTV16 1461:bfff + + * - 10 + - AOpen VA2000MAX-SNT6 + - IVTV16 0000:ff5f + + * - 11 + - Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP + - IVTV16 12ab:0600, IVTV16 fbab:0600, IVTV16 1154:0523 + + * - 12 + - I/O Data GV-MVP/RX, GV-MVP/RX2W (dual tuner) + - IVTV16 10fc:d01e, IVTV16 10fc:d038, IVTV16 10fc:d039 + + * - 13 + - I/O Data GV-MVP/RX2E + - IVTV16 10fc:d025 + + * - 14 + - GotView PCI DVD + - IVTV16 12ab:0600 + + * - 15 + - GotView PCI DVD2 Deluxe + - IVTV16 ffac:0600 + + * - 16 + - Yuan MPC622 + - IVTV16 ff01:d998 + + * - 17 + - Digital Cowboy DCT-MTVP1 + - IVTV16 1461:bfff + + * - 18 + - Yuan PG600-2, GotView PCI DVD Lite + - IVTV16 ffab:0600, IVTV16 ffad:0600 + + * - 19 + - Club3D ZAP-TV1x01 + - IVTV16 ffab:0600 + + * - 20 + - AVerTV MCE 116 Plus + - IVTV16 1461:c439 + + * - 21 + - ASUS Falcon2 + - IVTV16 1043:4b66, IVTV16 1043:462e, IVTV16 1043:4b2e + + * - 22 + - AVerMedia PVR-150 Plus / AVerTV M113 Partsnic (Daewoo) Tuner + - IVTV16 1461:c034, IVTV16 1461:c035 + + * - 23 + - AVerMedia EZMaker PCI Deluxe + - IVTV16 1461:c03f + + * - 24 + - AVerMedia M104 + - IVTV16 1461:c136 + + * - 25 + - Buffalo PC-MV5L/PCI + - IVTV16 1154:052b + + * - 26 + - AVerMedia UltraTV 1500 MCE / AVerTV M113 Philips Tuner + - IVTV16 1461:c019, IVTV16 1461:c01b + + * - 27 + - Sony VAIO Giga Pocket (ENX Kikyou) + - IVTV16 104d:813d + + * - 28 + - Hauppauge WinTV PVR-350 (V1) + - IVTV16 104d:813d + + * - 29 + - Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR) + - IVTV16 104d:813d + + * - 30 + - Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR/YCS) + - IVTV16 104d:813d diff --git a/Documentation/admin-guide/media/ivtv.rst b/Documentation/admin-guide/media/ivtv.rst new file mode 100644 index 000000000000..7b8775d20214 --- /dev/null +++ b/Documentation/admin-guide/media/ivtv.rst @@ -0,0 +1,218 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The ivtv driver +=============== + +Author: Hans Verkuil + +This is a v4l2 device driver for the Conexant cx23415/6 MPEG encoder/decoder. +The cx23415 can do both encoding and decoding, the cx23416 can only do MPEG +encoding. Currently the only card featuring full decoding support is the +Hauppauge PVR-350. + +.. note:: + + #) This driver requires the latest encoder firmware (version 2.06.039, size + 376836 bytes). Get the firmware from here: + + https://linuxtv.org/downloads/firmware/#conexant + + #) 'normal' TV applications do not work with this driver, you need + an application that can handle MPEG input such as mplayer, xine, MythTV, + etc. + +The primary goal of the IVTV project is to provide a "clean room" Linux +Open Source driver implementation for video capture cards based on the +iCompression iTVC15 or Conexant CX23415/CX23416 MPEG Codec. + +Features +-------- + + * Hardware mpeg2 capture of broadcast video (and sound) via the tuner or + S-Video/Composite and audio line-in. + * Hardware mpeg2 capture of FM radio where hardware support exists + * Supports NTSC, PAL, SECAM with stereo sound + * Supports SAP and bilingual transmissions. + * Supports raw VBI (closed captions and teletext). + * Supports sliced VBI (closed captions and teletext) and is able to insert + this into the captured MPEG stream. + * Supports raw YUV and PCM input. + +Additional features for the PVR-350 (CX23415 based) +--------------------------------------------------- + + * Provides hardware mpeg2 playback + * Provides comprehensive OSD (On Screen Display: ie. graphics overlaying the + video signal) + * Provides a framebuffer (allowing X applications to appear on the video + device) + * Supports raw YUV output. + +IMPORTANT: In case of problems first read this page: + https://help.ubuntu.com/community/Install_IVTV_Troubleshooting + +See also +-------- + +https://linuxtv.org + +IRC +--- + +irc://irc.freenode.net/#v4l + +---------------------------------------------------------- + +Devices +------- + +A maximum of 12 ivtv boards are allowed at the moment. + +Cards that don't have a video output capability (i.e. non PVR350 cards) +lack the vbi8, vbi16, video16 and video48 devices. They also do not +support the framebuffer device /dev/fbx for OSD. + +The radio0 device may or may not be present, depending on whether the +card has a radio tuner or not. + +Here is a list of the base v4l devices: + +.. code-block:: none + + crw-rw---- 1 root video 81, 0 Jun 19 22:22 /dev/video0 + crw-rw---- 1 root video 81, 16 Jun 19 22:22 /dev/video16 + crw-rw---- 1 root video 81, 24 Jun 19 22:22 /dev/video24 + crw-rw---- 1 root video 81, 32 Jun 19 22:22 /dev/video32 + crw-rw---- 1 root video 81, 48 Jun 19 22:22 /dev/video48 + crw-rw---- 1 root video 81, 64 Jun 19 22:22 /dev/radio0 + crw-rw---- 1 root video 81, 224 Jun 19 22:22 /dev/vbi0 + crw-rw---- 1 root video 81, 228 Jun 19 22:22 /dev/vbi8 + crw-rw---- 1 root video 81, 232 Jun 19 22:22 /dev/vbi16 + +Base devices +------------ + +For every extra card you have the numbers increased by one. For example, +/dev/video0 is listed as the 'base' encoding capture device so we have: + +- /dev/video0 is the encoding capture device for the first card (card 0) +- /dev/video1 is the encoding capture device for the second card (card 1) +- /dev/video2 is the encoding capture device for the third card (card 2) + +Note that if the first card doesn't have a feature (eg no decoder, so no +video16, the second card will still use video17. The simple rule is 'add +the card number to the base device number'. If you have other capture +cards (e.g. WinTV PCI) that are detected first, then you have to tell +the ivtv module about it so that it will start counting at 1 (or 2, or +whatever). Otherwise the device numbers can get confusing. The ivtv +'ivtv_first_minor' module option can be used for that. + + +- /dev/video0 + + The encoding capture device(s). + + Read-only. + + Reading from this device gets you the MPEG1/2 program stream. + Example: + + .. code-block:: none + + cat /dev/video0 > my.mpg (you need to hit ctrl-c to exit) + + +- /dev/video16 + + The decoder output device(s) + + Write-only. Only present if the MPEG decoder (i.e. CX23415) exists. + + An mpeg2 stream sent to this device will appear on the selected video + display, audio will appear on the line-out/audio out. It is only + available for cards that support video out. Example: + + .. code-block:: none + + cat my.mpg >/dev/video16 + + +- /dev/video24 + + The raw audio capture device(s). + + Read-only + + The raw audio PCM stereo stream from the currently selected + tuner or audio line-in. Reading from this device results in a raw + (signed 16 bit Little Endian, 48000 Hz, stereo pcm) capture. + This device only captures audio. This should be replaced by an ALSA + device in the future. + Note that there is no corresponding raw audio output device, this is + not supported in the decoder firmware. + + +- /dev/video32 + + The raw video capture device(s) + + Read-only + + The raw YUV video output from the current video input. The YUV format + is non-standard (V4L2_PIX_FMT_HM12). + + Note that the YUV and PCM streams are not synchronized, so they are of + limited use. + + +- /dev/video48 + + The raw video display device(s) + + Write-only. Only present if the MPEG decoder (i.e. CX23415) exists. + + Writes a YUV stream to the decoder of the card. + + +- /dev/radio0 + + The radio tuner device(s) + + Cannot be read or written. + + Used to enable the radio tuner and tune to a frequency. You cannot + read or write audio streams with this device. Once you use this + device to tune the radio, use /dev/video24 to read the raw pcm stream + or /dev/video0 to get an mpeg2 stream with black video. + + +- /dev/vbi0 + + The 'vertical blank interval' (Teletext, CC, WSS etc) capture device(s) + + Read-only + + Captures the raw (or sliced) video data sent during the Vertical Blank + Interval. This data is used to encode teletext, closed captions, VPS, + widescreen signalling, electronic program guide information, and other + services. + + +- /dev/vbi8 + + Processed vbi feedback device(s) + + Read-only. Only present if the MPEG decoder (i.e. CX23415) exists. + + The sliced VBI data embedded in an MPEG stream is reproduced on this + device. So while playing back a recording on /dev/video16, you can + read the embedded VBI data from /dev/vbi8. + + +- /dev/vbi16 + + The vbi 'display' device(s) + + Write-only. Only present if the MPEG decoder (i.e. CX23415) exists. + + Can be used to send sliced VBI data to the video-out connector. diff --git a/Documentation/admin-guide/media/lmedm04.rst b/Documentation/admin-guide/media/lmedm04.rst new file mode 100644 index 000000000000..a6ee33413748 --- /dev/null +++ b/Documentation/admin-guide/media/lmedm04.rst @@ -0,0 +1,107 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Firmware files for lmedm04 cards +================================ + +To extract firmware for the DM04/QQBOX you need to copy the +following file(s) to this directory. + +For DM04+/QQBOX LME2510C (Sharp 7395 Tuner) +------------------------------------------- + +The Sharp 7395 driver can be found in windows/system32/drivers + +US2A0D.sys (dated 17 Mar 2009) + + +and run: + +.. code-block:: none + + scripts/get_dvb_firmware lme2510c_s7395 + +will produce dvb-usb-lme2510c-s7395.fw + +An alternative but older firmware can be found on the driver +disk DVB-S_EN_3.5A in BDADriver/driver + +LMEBDA_DVBS7395C.sys (dated 18 Jan 2008) + +and run: + +.. code-block:: none + + ./get_dvb_firmware lme2510c_s7395_old + +will produce dvb-usb-lme2510c-s7395.fw + +The LG firmware can be found on the driver +disk DM04+_5.1A[LG] in BDADriver/driver + +For DM04 LME2510 (LG Tuner) +--------------------------- + +LMEBDA_DVBS.sys (dated 13 Nov 2007) + +and run: + + +.. code-block:: none + + ./get_dvb_firmware lme2510_lg + +will produce dvb-usb-lme2510-lg.fw + + +Other LG firmware can be extracted manually from US280D.sys +only found in windows/system32/drivers + +dd if=US280D.sys ibs=1 skip=42360 count=3924 of=dvb-usb-lme2510-lg.fw + +For DM04 LME2510C (LG Tuner) +---------------------------- + +.. code-block:: none + + dd if=US280D.sys ibs=1 skip=35200 count=3850 of=dvb-usb-lme2510c-lg.fw + + +The Sharp 0194 tuner driver can be found in windows/system32/drivers + +US290D.sys (dated 09 Apr 2009) + +For LME2510 +----------- + +.. code-block:: none + + dd if=US290D.sys ibs=1 skip=36856 count=3976 of=dvb-usb-lme2510-s0194.fw + + +For LME2510C +------------ + + +.. code-block:: none + + dd if=US290D.sys ibs=1 skip=33152 count=3697 of=dvb-usb-lme2510c-s0194.fw + + +The m88rs2000 tuner driver can be found in windows/system32/drivers + +US2B0D.sys (dated 29 Jun 2010) + + +.. code-block:: none + + dd if=US2B0D.sys ibs=1 skip=34432 count=3871 of=dvb-usb-lme2510c-rs2000.fw + +We need to modify id of rs2000 firmware or it will warm boot id 3344:1120. + + +.. code-block:: none + + + echo -ne \\xF0\\x22 | dd conv=notrunc bs=1 count=2 seek=266 of=dvb-usb-lme2510c-rs2000.fw + +Copy the firmware file(s) to /lib/firmware diff --git a/Documentation/admin-guide/media/meye.rst b/Documentation/admin-guide/media/meye.rst new file mode 100644 index 000000000000..9098a1e65f8b --- /dev/null +++ b/Documentation/admin-guide/media/meye.rst @@ -0,0 +1,93 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: + +Vaio Picturebook Motion Eye Camera Driver +========================================= + +Copyright |copy| 2001-2004 Stelian Pop + +Copyright |copy| 2001-2002 Alcôve + +Copyright |copy| 2000 Andrew Tridgell + +This driver enable the use of video4linux compatible applications with the +Motion Eye camera. This driver requires the "Sony Laptop Extras" driver (which +can be found in the "Misc devices" section of the kernel configuration utility) +to be compiled and installed (using its "camera=1" parameter). + +It can do at maximum 30 fps @ 320x240 or 15 fps @ 640x480. + +Grabbing is supported in packed YUV colorspace only. + +MJPEG hardware grabbing is supported via a private API (see below). + +Hardware supported +------------------ + +This driver supports the 'second' version of the MotionEye camera :) + +The first version was connected directly on the video bus of the Neomagic +video card and is unsupported. + +The second one, made by Kawasaki Steel is fully supported by this +driver (PCI vendor/device is 0x136b/0xff01) + +The third one, present in recent (more or less last year) Picturebooks +(C1M* models), is not supported. The manufacturer has given the specs +to the developers under a NDA (which allows the development of a GPL +driver however), but things are not moving very fast (see +http://r-engine.sourceforge.net/) (PCI vendor/device is 0x10cf/0x2011). + +There is a forth model connected on the USB bus in TR1* Vaio laptops. +This camera is not supported at all by the current driver, in fact +little information if any is available for this camera +(USB vendor/device is 0x054c/0x0107). + +Driver options +-------------- + +Several options can be passed to the meye driver using the standard +module argument syntax (= when passing the option to the +module or meye.= on the kernel boot line when meye is +statically linked into the kernel). Those options are: + +.. code-block:: none + + gbuffers: number of capture buffers, default is 2 (32 max) + + gbufsize: size of each capture buffer, default is 614400 + + video_nr: video device to register (0 = /dev/video0, etc) + +Module use +---------- + +In order to automatically load the meye module on use, you can put those lines +in your /etc/modprobe.d/meye.conf file: + +.. code-block:: none + + alias char-major-81 videodev + alias char-major-81-0 meye + options meye gbuffers=32 + +Usage: +------ + +.. code-block:: none + + xawtv >= 3.49 () + for display and uncompressed video capture: + + xawtv -c /dev/video0 -geometry 640x480 + or + xawtv -c /dev/video0 -geometry 320x240 + + motioneye () + for getting ppm or jpg snapshots, mjpeg video + +Bugs / Todo +----------- + +- 'motioneye' still uses the meye private v4l1 API extensions. diff --git a/Documentation/admin-guide/media/omap3isp.rst b/Documentation/admin-guide/media/omap3isp.rst new file mode 100644 index 000000000000..bc447bbec7ce --- /dev/null +++ b/Documentation/admin-guide/media/omap3isp.rst @@ -0,0 +1,92 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: + +OMAP 3 Image Signal Processor (ISP) driver +========================================== + +Copyright |copy| 2010 Nokia Corporation + +Copyright |copy| 2009 Texas Instruments, Inc. + +Contacts: Laurent Pinchart , +Sakari Ailus , David Cohen + + +Introduction +------------ + +This file documents the Texas Instruments OMAP 3 Image Signal Processor (ISP) +driver located under drivers/media/platform/omap3isp. The original driver was +written by Texas Instruments but since that it has been rewritten (twice) at +Nokia. + +The driver has been successfully used on the following versions of OMAP 3: + +- 3430 +- 3530 +- 3630 + +The driver implements V4L2, Media controller and v4l2_subdev interfaces. +Sensor, lens and flash drivers using the v4l2_subdev interface in the kernel +are supported. + + +Split to subdevs +---------------- + +The OMAP 3 ISP is split into V4L2 subdevs, each of the blocks inside the ISP +having one subdev to represent it. Each of the subdevs provide a V4L2 subdev +interface to userspace. + +- OMAP3 ISP CCP2 +- OMAP3 ISP CSI2a +- OMAP3 ISP CCDC +- OMAP3 ISP preview +- OMAP3 ISP resizer +- OMAP3 ISP AEWB +- OMAP3 ISP AF +- OMAP3 ISP histogram + +Each possible link in the ISP is modelled by a link in the Media controller +interface. For an example program see [#]_. + + +Controlling the OMAP 3 ISP +-------------------------- + +In general, the settings given to the OMAP 3 ISP take effect at the beginning +of the following frame. This is done when the module becomes idle during the +vertical blanking period on the sensor. In memory-to-memory operation the pipe +is run one frame at a time. Applying the settings is done between the frames. + +All the blocks in the ISP, excluding the CSI-2 and possibly the CCP2 receiver, +insist on receiving complete frames. Sensors must thus never send the ISP +partial frames. + +Autoidle does have issues with some ISP blocks on the 3430, at least. +Autoidle is only enabled on 3630 when the omap3isp module parameter autoidle +is non-zero. + +Technical reference manuals (TRMs) and other documentation +---------------------------------------------------------- + +OMAP 3430 TRM: + +Referenced 2011-03-05. + +OMAP 35xx TRM: + Referenced 2011-03-05. + +OMAP 3630 TRM: + +Referenced 2011-03-05. + +DM 3730 TRM: + Referenced 2011-03-06. + + +References +---------- + +.. [#] http://git.ideasonboard.org/?p=media-ctl.git;a=summary diff --git a/Documentation/admin-guide/media/omap4_camera.rst b/Documentation/admin-guide/media/omap4_camera.rst new file mode 100644 index 000000000000..24db4222d36d --- /dev/null +++ b/Documentation/admin-guide/media/omap4_camera.rst @@ -0,0 +1,62 @@ +.. SPDX-License-Identifier: GPL-2.0 + +OMAP4 ISS Driver +================ + +Author: Sergio Aguirre + +Copyright (C) 2012, Texas Instruments + +Introduction +------------ + +The OMAP44XX family of chips contains the Imaging SubSystem (a.k.a. ISS), +Which contains several components that can be categorized in 3 big groups: + +- Interfaces (2 Interfaces: CSI2-A & CSI2-B/CCP2) +- ISP (Image Signal Processor) +- SIMCOP (Still Image Coprocessor) + +For more information, please look in [#f1]_ for latest version of: +"OMAP4430 Multimedia Device Silicon Revision 2.x" + +As of Revision AB, the ISS is described in detail in section 8. + +This driver is supporting **only** the CSI2-A/B interfaces for now. + +It makes use of the Media Controller framework [#f2]_, and inherited most of the +code from OMAP3 ISP driver (found under drivers/media/platform/omap3isp/\*), +except that it doesn't need an IOMMU now for ISS buffers memory mapping. + +Supports usage of MMAP buffers only (for now). + +Tested platforms +---------------- + +- OMAP4430SDP, w/ ES2.1 GP & SEVM4430-CAM-V1-0 (Contains IMX060 & OV5640, in + which only the last one is supported, outputting YUV422 frames). + +- TI Blaze MDP, w/ OMAP4430 ES2.2 EMU (Contains 1 IMX060 & 2 OV5650 sensors, in + which only the OV5650 are supported, outputting RAW10 frames). + +- PandaBoard, Rev. A2, w/ OMAP4430 ES2.1 GP & OV adapter board, tested with + following sensors: + * OV5640 + * OV5650 + +- Tested on mainline kernel: + + http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=summary + + Tag: v3.3 (commit c16fa4f2ad19908a47c63d8fa436a1178438c7e7) + +File list +--------- +drivers/staging/media/omap4iss/ +include/linux/platform_data/media/omap4iss.h + +References +---------- + +.. [#f1] http://focus.ti.com/general/docs/wtbu/wtbudocumentcenter.tsp?navigationId=12037&templateId=6123#62 +.. [#f2] http://lwn.net/Articles/420485/ diff --git a/Documentation/admin-guide/media/opera-firmware.rst b/Documentation/admin-guide/media/opera-firmware.rst new file mode 100644 index 000000000000..fab3581551de --- /dev/null +++ b/Documentation/admin-guide/media/opera-firmware.rst @@ -0,0 +1,33 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Opera firmware +============== + +Author: Marco Gittler + +To extract the firmware for the Opera DVB-S1 USB-Box +you need to copy the files: + +2830SCap2.sys +2830SLoad2.sys + +from the windriver disk into this directory. + +Then run: + +.. code-block:: none + + scripts/get_dvb_firmware opera1 + +and after that you have 2 files: + +dvb-usb-opera-01.fw +dvb-usb-opera1-fpga-01.fw + +in here. + +Copy them into /lib/firmware/ . + +After that the driver can load the firmware +(if you have enabled firmware loading +in kernel config and have hotplug running). diff --git a/Documentation/admin-guide/media/philips.rst b/Documentation/admin-guide/media/philips.rst new file mode 100644 index 000000000000..e2840be10d08 --- /dev/null +++ b/Documentation/admin-guide/media/philips.rst @@ -0,0 +1,247 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Philips webcams (pwc driver) +============================ + +This file contains some additional information for the Philips and OEM webcams. +E-mail: webcam@smcc.demon.nl Last updated: 2004-01-19 +Site: http://www.smcc.demon.nl/webcam/ + +As of this moment, the following cameras are supported: + + * Philips PCA645 + * Philips PCA646 + * Philips PCVC675 + * Philips PCVC680 + * Philips PCVC690 + * Philips PCVC720/40 + * Philips PCVC730 + * Philips PCVC740 + * Philips PCVC750 + * Askey VC010 + * Creative Labs Webcam 5 + * Creative Labs Webcam Pro Ex + * Logitech QuickCam 3000 Pro + * Logitech QuickCam 4000 Pro + * Logitech QuickCam Notebook Pro + * Logitech QuickCam Zoom + * Logitech QuickCam Orbit + * Logitech QuickCam Sphere + * Samsung MPC-C10 + * Samsung MPC-C30 + * Sotec Afina Eye + * AME CU-001 + * Visionite VCS-UM100 + * Visionite VCS-UC300 + +The main webpage for the Philips driver is at the address above. It contains +a lot of extra information, a FAQ, and the binary plugin 'PWCX'. This plugin +contains decompression routines that allow you to use higher image sizes and +framerates; in addition the webcam uses less bandwidth on the USB bus (handy +if you want to run more than 1 camera simultaneously). These routines fall +under a NDA, and may therefore not be distributed as source; however, its use +is completely optional. + +You can build this code either into your kernel, or as a module. I recommend +the latter, since it makes troubleshooting a lot easier. The built-in +microphone is supported through the USB Audio class. + +When you load the module you can set some default settings for the +camera; some programs depend on a particular image-size or -format and +don't know how to set it properly in the driver. The options are: + +size + Can be one of 'sqcif', 'qsif', 'qcif', 'sif', 'cif' or + 'vga', for an image size of resp. 128x96, 160x120, 176x144, + 320x240, 352x288 and 640x480 (of course, only for those cameras that + support these resolutions). + +fps + Specifies the desired framerate. Is an integer in the range of 4-30. + +fbufs + This parameter specifies the number of internal buffers to use for storing + frames from the cam. This will help if the process that reads images from + the cam is a bit slow or momentarily busy. However, on slow machines it + only introduces lag, so choose carefully. The default is 3, which is + reasonable. You can set it between 2 and 5. + +mbufs + This is an integer between 1 and 10. It will tell the module the number of + buffers to reserve for mmap(), VIDIOCCGMBUF, VIDIOCMCAPTURE and friends. + The default is 2, which is adequate for most applications (double + buffering). + + Should you experience a lot of 'Dumping frame...' messages during + grabbing with a tool that uses mmap(), you might want to increase if. + However, it doesn't really buffer images, it just gives you a bit more + slack when your program is behind. But you need a multi-threaded or + forked program to really take advantage of these buffers. + + The absolute maximum is 10, but don't set it too high! Every buffer takes + up 460 KB of RAM, so unless you have a lot of memory setting this to + something more than 4 is an absolute waste. This memory is only + allocated during open(), so nothing is wasted when the camera is not in + use. + +power_save + When power_save is enabled (set to 1), the module will try to shut down + the cam on close() and re-activate on open(). This will save power and + turn off the LED. Not all cameras support this though (the 645 and 646 + don't have power saving at all), and some models don't work either (they + will shut down, but never wake up). Consider this experimental. By + default this option is disabled. + +compression (only useful with the plugin) + With this option you can control the compression factor that the camera + uses to squeeze the image through the USB bus. You can set the + parameter between 0 and 3:: + + 0 = prefer uncompressed images; if the requested mode is not available + in an uncompressed format, the driver will silently switch to low + compression. + 1 = low compression. + 2 = medium compression. + 3 = high compression. + + High compression takes less bandwidth of course, but it could also + introduce some unwanted artefacts. The default is 2, medium compression. + See the FAQ on the website for an overview of which modes require + compression. + + The compression parameter does not apply to the 645 and 646 cameras + and OEM models derived from those (only a few). Most cams honour this + parameter. + +leds + This settings takes 2 integers, that define the on/off time for the LED + (in milliseconds). One of the interesting things that you can do with + this is let the LED blink while the camera is in use. This:: + + leds=500,500 + + will blink the LED once every second. But with:: + + leds=0,0 + + the LED never goes on, making it suitable for silent surveillance. + + By default the camera's LED is on solid while in use, and turned off + when the camera is not used anymore. + + This parameter works only with the ToUCam range of cameras (720, 730, 740, + 750) and OEMs. For other cameras this command is silently ignored, and + the LED cannot be controlled. + + Finally: this parameters does not take effect UNTIL the first time you + open the camera device. Until then, the LED remains on. + +dev_hint + A long standing problem with USB devices is their dynamic nature: you + never know what device a camera gets assigned; it depends on module load + order, the hub configuration, the order in which devices are plugged in, + and the phase of the moon (i.e. it can be random). With this option you + can give the driver a hint as to what video device node (/dev/videoX) it + should use with a specific camera. This is also handy if you have two + cameras of the same model. + + A camera is specified by its type (the number from the camera model, + like PCA645, PCVC750VC, etc) and optionally the serial number (visible + in /sys/kernel/debug/usb/devices). A hint consists of a string with the + following format:: + + [type[.serialnumber]:]node + + The square brackets mean that both the type and the serialnumber are + optional, but a serialnumber cannot be specified without a type (which + would be rather pointless). The serialnumber is separated from the type + by a '.'; the node number by a ':'. + + This somewhat cryptic syntax is best explained by a few examples:: + + dev_hint=3,5 The first detected cam gets assigned + /dev/video3, the second /dev/video5. Any + other cameras will get the first free + available slot (see below). + + dev_hint=645:1,680:2 The PCA645 camera will get /dev/video1, + and a PCVC680 /dev/video2. + + dev_hint=645.0123:3,645.4567:0 The PCA645 camera with serialnumber + 0123 goes to /dev/video3, the same + camera model with the 4567 serial + gets /dev/video0. + + dev_hint=750:1,4,5,6 The PCVC750 camera will get /dev/video1, the + next 3 Philips cams will use /dev/video4 + through /dev/video6. + + Some points worth knowing: + + - Serialnumbers are case sensitive and must be written full, including + leading zeroes (it's treated as a string). + - If a device node is already occupied, registration will fail and + the webcam is not available. + - You can have up to 64 video devices; be sure to make enough device + nodes in /dev if you want to spread the numbers. + After /dev/video9 comes /dev/video10 (not /dev/videoA). + - If a camera does not match any dev_hint, it will simply get assigned + the first available device node, just as it used to be. + +trace + In order to better detect problems, it is now possible to turn on a + 'trace' of some of the calls the module makes; it logs all items in your + kernel log at debug level. + + The trace variable is a bitmask; each bit represents a certain feature. + If you want to trace something, look up the bit value(s) in the table + below, add the values together and supply that to the trace variable. + + ====== ======= ================================================ ======= + Value Value Description Default + (dec) (hex) + ====== ======= ================================================ ======= + 1 0x1 Module initialization; this will log messages On + while loading and unloading the module + + 2 0x2 probe() and disconnect() traces On + + 4 0x4 Trace open() and close() calls Off + + 8 0x8 read(), mmap() and associated ioctl() calls Off + + 16 0x10 Memory allocation of buffers, etc. Off + + 32 0x20 Showing underflow, overflow and Dumping frame On + messages + + 64 0x40 Show viewport and image sizes Off + + 128 0x80 PWCX debugging Off + ====== ======= ================================================ ======= + + For example, to trace the open() & read() functions, sum 8 + 4 = 12, + so you would supply trace=12 during insmod or modprobe. If + you want to turn the initialization and probing tracing off, set trace=0. + The default value for trace is 35 (0x23). + + + +Example:: + + # modprobe pwc size=cif fps=15 power_save=1 + +The fbufs, mbufs and trace parameters are global and apply to all connected +cameras. Each camera has its own set of buffers. + +size and fps only specify defaults when you open() the device; this is to +accommodate some tools that don't set the size. You can change these +settings after open() with the Video4Linux ioctl() calls. The default of +defaults is QCIF size at 10 fps. + +The compression parameter is semiglobal; it sets the initial compression +preference for all camera's, but this parameter can be set per camera with +the VIDIOCPWCSCQUAL ioctl() call. + +All parameters are optional. + diff --git a/Documentation/admin-guide/media/pulse8-cec.rst b/Documentation/admin-guide/media/pulse8-cec.rst new file mode 100644 index 000000000000..356d08b519f3 --- /dev/null +++ b/Documentation/admin-guide/media/pulse8-cec.rst @@ -0,0 +1,13 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Pulse-Eight CEC Adapter driver +============================== + +The pulse8-cec driver implements the following module option: + +``persistent_config`` +--------------------- + +By default this is off, but when set to 1 the driver will store the current +settings to the device's internal eeprom and restore it the next time the +device is connected to the USB port. diff --git a/Documentation/admin-guide/media/qcom_camss.rst b/Documentation/admin-guide/media/qcom_camss.rst new file mode 100644 index 000000000000..a72e17d09cb7 --- /dev/null +++ b/Documentation/admin-guide/media/qcom_camss.rst @@ -0,0 +1,185 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: + +Qualcomm Camera Subsystem driver +================================ + +Introduction +------------ + +This file documents the Qualcomm Camera Subsystem driver located under +drivers/media/platform/qcom/camss. + +The current version of the driver supports the Camera Subsystem found on +Qualcomm MSM8916/APQ8016 and MSM8996/APQ8096 processors. + +The driver implements V4L2, Media controller and V4L2 subdev interfaces. +Camera sensor using V4L2 subdev interface in the kernel is supported. + +The driver is implemented using as a reference the Qualcomm Camera Subsystem +driver for Android as found in Code Aurora [#f1]_ [#f2]_. + + +Qualcomm Camera Subsystem hardware +---------------------------------- + +The Camera Subsystem hardware found on 8x16 / 8x96 processors and supported by +the driver consists of: + +- 2 / 3 CSIPHY modules. They handle the Physical layer of the CSI2 receivers. + A separate camera sensor can be connected to each of the CSIPHY module; +- 2 / 4 CSID (CSI Decoder) modules. They handle the Protocol and Application + layer of the CSI2 receivers. A CSID can decode data stream from any of the + CSIPHY. Each CSID also contains a TG (Test Generator) block which can generate + artificial input data for test purposes; +- ISPIF (ISP Interface) module. Handles the routing of the data streams from + the CSIDs to the inputs of the VFE; +- 1 / 2 VFE (Video Front End) module(s). Contain a pipeline of image processing + hardware blocks. The VFE has different input interfaces. The PIX (Pixel) input + interface feeds the input data to the image processing pipeline. The image + processing pipeline contains also a scale and crop module at the end. Three + RDI (Raw Dump Interface) input interfaces bypass the image processing + pipeline. The VFE also contains the AXI bus interface which writes the output + data to memory. + + +Supported functionality +----------------------- + +The current version of the driver supports: + +- Input from camera sensor via CSIPHY; +- Generation of test input data by the TG in CSID; +- RDI interface of VFE + + - Raw dump of the input data to memory. + + Supported formats: + + - YUYV/UYVY/YVYU/VYUY (packed YUV 4:2:2 - V4L2_PIX_FMT_YUYV / + V4L2_PIX_FMT_UYVY / V4L2_PIX_FMT_YVYU / V4L2_PIX_FMT_VYUY); + - MIPI RAW8 (8bit Bayer RAW - V4L2_PIX_FMT_SRGGB8 / + V4L2_PIX_FMT_SGRBG8 / V4L2_PIX_FMT_SGBRG8 / V4L2_PIX_FMT_SBGGR8); + - MIPI RAW10 (10bit packed Bayer RAW - V4L2_PIX_FMT_SBGGR10P / + V4L2_PIX_FMT_SGBRG10P / V4L2_PIX_FMT_SGRBG10P / V4L2_PIX_FMT_SRGGB10P / + V4L2_PIX_FMT_Y10P); + - MIPI RAW12 (12bit packed Bayer RAW - V4L2_PIX_FMT_SRGGB12P / + V4L2_PIX_FMT_SGBRG12P / V4L2_PIX_FMT_SGRBG12P / V4L2_PIX_FMT_SRGGB12P). + - (8x96 only) MIPI RAW14 (14bit packed Bayer RAW - V4L2_PIX_FMT_SRGGB14P / + V4L2_PIX_FMT_SGBRG14P / V4L2_PIX_FMT_SGRBG14P / V4L2_PIX_FMT_SRGGB14P). + + - (8x96 only) Format conversion of the input data. + + Supported input formats: + + - MIPI RAW10 (10bit packed Bayer RAW - V4L2_PIX_FMT_SBGGR10P / V4L2_PIX_FMT_Y10P). + + Supported output formats: + + - Plain16 RAW10 (10bit unpacked Bayer RAW - V4L2_PIX_FMT_SBGGR10 / V4L2_PIX_FMT_Y10). + +- PIX interface of VFE + + - Format conversion of the input data. + + Supported input formats: + + - YUYV/UYVY/YVYU/VYUY (packed YUV 4:2:2 - V4L2_PIX_FMT_YUYV / + V4L2_PIX_FMT_UYVY / V4L2_PIX_FMT_YVYU / V4L2_PIX_FMT_VYUY). + + Supported output formats: + + - NV12/NV21 (two plane YUV 4:2:0 - V4L2_PIX_FMT_NV12 / V4L2_PIX_FMT_NV21); + - NV16/NV61 (two plane YUV 4:2:2 - V4L2_PIX_FMT_NV16 / V4L2_PIX_FMT_NV61). + - (8x96 only) YUYV/UYVY/YVYU/VYUY (packed YUV 4:2:2 - V4L2_PIX_FMT_YUYV / + V4L2_PIX_FMT_UYVY / V4L2_PIX_FMT_YVYU / V4L2_PIX_FMT_VYUY). + + - Scaling support. Configuration of the VFE Encoder Scale module + for downscalling with ratio up to 16x. + + - Cropping support. Configuration of the VFE Encoder Crop module. + +- Concurrent and independent usage of two (8x96: three) data inputs - + could be camera sensors and/or TG. + + +Driver Architecture and Design +------------------------------ + +The driver implements the V4L2 subdev interface. With the goal to model the +hardware links between the modules and to expose a clean, logical and usable +interface, the driver is split into V4L2 sub-devices as follows (8x16 / 8x96): + +- 2 / 3 CSIPHY sub-devices - each CSIPHY is represented by a single sub-device; +- 2 / 4 CSID sub-devices - each CSID is represented by a single sub-device; +- 2 / 4 ISPIF sub-devices - ISPIF is represented by a number of sub-devices + equal to the number of CSID sub-devices; +- 4 / 8 VFE sub-devices - VFE is represented by a number of sub-devices equal to + the number of the input interfaces (3 RDI and 1 PIX for each VFE). + +The considerations to split the driver in this particular way are as follows: + +- representing CSIPHY and CSID modules by a separate sub-device for each module + allows to model the hardware links between these modules; +- representing VFE by a separate sub-devices for each input interface allows + to use the input interfaces concurrently and independently as this is + supported by the hardware; +- representing ISPIF by a number of sub-devices equal to the number of CSID + sub-devices allows to create linear media controller pipelines when using two + cameras simultaneously. This avoids branches in the pipelines which otherwise + will require a) userspace and b) media framework (e.g. power on/off + operations) to make assumptions about the data flow from a sink pad to a + source pad on a single media entity. + +Each VFE sub-device is linked to a separate video device node. + +The media controller pipeline graph is as follows (with connected two / three +OV5645 camera sensors): + +.. _qcom_camss_graph: + +.. kernel-figure:: qcom_camss_graph.dot + :alt: qcom_camss_graph.dot + :align: center + + Media pipeline graph 8x16 + +.. kernel-figure:: qcom_camss_8x96_graph.dot + :alt: qcom_camss_8x96_graph.dot + :align: center + + Media pipeline graph 8x96 + + +Implementation +-------------- + +Runtime configuration of the hardware (updating settings while streaming) is +not required to implement the currently supported functionality. The complete +configuration on each hardware module is applied on STREAMON ioctl based on +the current active media links, formats and controls set. + +The output size of the scaler module in the VFE is configured with the actual +compose selection rectangle on the sink pad of the 'msm_vfe0_pix' entity. + +The crop output area of the crop module in the VFE is configured with the actual +crop selection rectangle on the source pad of the 'msm_vfe0_pix' entity. + + +Documentation +------------- + +APQ8016 Specification: +https://developer.qualcomm.com/download/sd410/snapdragon-410-processor-device-specification.pdf +Referenced 2016-11-24. + +APQ8096 Specification: +https://developer.qualcomm.com/download/sd820e/qualcomm-snapdragon-820e-processor-apq8096sge-device-specification.pdf +Referenced 2018-06-22. + +References +---------- + +.. [#f1] https://source.codeaurora.org/quic/la/kernel/msm-3.10/ +.. [#f2] https://source.codeaurora.org/quic/la/kernel/msm-3.18/ diff --git a/Documentation/admin-guide/media/qcom_camss_8x96_graph.dot b/Documentation/admin-guide/media/qcom_camss_8x96_graph.dot new file mode 100644 index 000000000000..7ed243b41b67 --- /dev/null +++ b/Documentation/admin-guide/media/qcom_camss_8x96_graph.dot @@ -0,0 +1,106 @@ +# SPDX-License-Identifier: GPL-2.0 + +digraph board { + rankdir=TB + n00000001 [label="{{ 0} | msm_csiphy0\n/dev/v4l-subdev0 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000001:port1 -> n0000000a:port0 [style=dashed] + n00000001:port1 -> n0000000d:port0 [style=dashed] + n00000001:port1 -> n00000010:port0 [style=dashed] + n00000001:port1 -> n00000013:port0 [style=dashed] + n00000004 [label="{{ 0} | msm_csiphy1\n/dev/v4l-subdev1 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000004:port1 -> n0000000a:port0 [style=dashed] + n00000004:port1 -> n0000000d:port0 [style=dashed] + n00000004:port1 -> n00000010:port0 [style=dashed] + n00000004:port1 -> n00000013:port0 [style=dashed] + n00000007 [label="{{ 0} | msm_csiphy2\n/dev/v4l-subdev2 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000007:port1 -> n0000000a:port0 [style=dashed] + n00000007:port1 -> n0000000d:port0 [style=dashed] + n00000007:port1 -> n00000010:port0 [style=dashed] + n00000007:port1 -> n00000013:port0 [style=dashed] + n0000000a [label="{{ 0} | msm_csid0\n/dev/v4l-subdev3 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n0000000a:port1 -> n00000016:port0 [style=dashed] + n0000000a:port1 -> n00000019:port0 [style=dashed] + n0000000a:port1 -> n0000001c:port0 [style=dashed] + n0000000a:port1 -> n0000001f:port0 [style=dashed] + n0000000d [label="{{ 0} | msm_csid1\n/dev/v4l-subdev4 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n0000000d:port1 -> n00000016:port0 [style=dashed] + n0000000d:port1 -> n00000019:port0 [style=dashed] + n0000000d:port1 -> n0000001c:port0 [style=dashed] + n0000000d:port1 -> n0000001f:port0 [style=dashed] + n00000010 [label="{{ 0} | msm_csid2\n/dev/v4l-subdev5 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000010:port1 -> n00000016:port0 [style=dashed] + n00000010:port1 -> n00000019:port0 [style=dashed] + n00000010:port1 -> n0000001c:port0 [style=dashed] + n00000010:port1 -> n0000001f:port0 [style=dashed] + n00000013 [label="{{ 0} | msm_csid3\n/dev/v4l-subdev6 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000013:port1 -> n00000016:port0 [style=dashed] + n00000013:port1 -> n00000019:port0 [style=dashed] + n00000013:port1 -> n0000001c:port0 [style=dashed] + n00000013:port1 -> n0000001f:port0 [style=dashed] + n00000016 [label="{{ 0} | msm_ispif0\n/dev/v4l-subdev7 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000016:port1 -> n00000022:port0 [style=dashed] + n00000016:port1 -> n0000002b:port0 [style=dashed] + n00000016:port1 -> n00000034:port0 [style=dashed] + n00000016:port1 -> n0000003d:port0 [style=dashed] + n00000016:port1 -> n00000046:port0 [style=dashed] + n00000016:port1 -> n0000004f:port0 [style=dashed] + n00000016:port1 -> n00000058:port0 [style=dashed] + n00000016:port1 -> n00000061:port0 [style=dashed] + n00000019 [label="{{ 0} | msm_ispif1\n/dev/v4l-subdev8 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000019:port1 -> n00000022:port0 [style=dashed] + n00000019:port1 -> n0000002b:port0 [style=dashed] + n00000019:port1 -> n00000034:port0 [style=dashed] + n00000019:port1 -> n0000003d:port0 [style=dashed] + n00000019:port1 -> n00000046:port0 [style=dashed] + n00000019:port1 -> n0000004f:port0 [style=dashed] + n00000019:port1 -> n00000058:port0 [style=dashed] + n00000019:port1 -> n00000061:port0 [style=dashed] + n0000001c [label="{{ 0} | msm_ispif2\n/dev/v4l-subdev9 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n0000001c:port1 -> n00000022:port0 [style=dashed] + n0000001c:port1 -> n0000002b:port0 [style=dashed] + n0000001c:port1 -> n00000034:port0 [style=dashed] + n0000001c:port1 -> n0000003d:port0 [style=dashed] + n0000001c:port1 -> n00000046:port0 [style=dashed] + n0000001c:port1 -> n0000004f:port0 [style=dashed] + n0000001c:port1 -> n00000058:port0 [style=dashed] + n0000001c:port1 -> n00000061:port0 [style=dashed] + n0000001f [label="{{ 0} | msm_ispif3\n/dev/v4l-subdev10 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n0000001f:port1 -> n00000022:port0 [style=dashed] + n0000001f:port1 -> n0000002b:port0 [style=dashed] + n0000001f:port1 -> n00000034:port0 [style=dashed] + n0000001f:port1 -> n0000003d:port0 [style=dashed] + n0000001f:port1 -> n00000046:port0 [style=dashed] + n0000001f:port1 -> n0000004f:port0 [style=dashed] + n0000001f:port1 -> n00000058:port0 [style=dashed] + n0000001f:port1 -> n00000061:port0 [style=dashed] + n00000022 [label="{{ 0} | msm_vfe0_rdi0\n/dev/v4l-subdev11 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000022:port1 -> n00000025 [style=bold] + n00000025 [label="msm_vfe0_video0\n/dev/video0", shape=box, style=filled, fillcolor=yellow] + n0000002b [label="{{ 0} | msm_vfe0_rdi1\n/dev/v4l-subdev12 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n0000002b:port1 -> n0000002e [style=bold] + n0000002e [label="msm_vfe0_video1\n/dev/video1", shape=box, style=filled, fillcolor=yellow] + n00000034 [label="{{ 0} | msm_vfe0_rdi2\n/dev/v4l-subdev13 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000034:port1 -> n00000037 [style=bold] + n00000037 [label="msm_vfe0_video2\n/dev/video2", shape=box, style=filled, fillcolor=yellow] + n0000003d [label="{{ 0} | msm_vfe0_pix\n/dev/v4l-subdev14 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n0000003d:port1 -> n00000040 [style=bold] + n00000040 [label="msm_vfe0_video3\n/dev/video3", shape=box, style=filled, fillcolor=yellow] + n00000046 [label="{{ 0} | msm_vfe1_rdi0\n/dev/v4l-subdev15 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000046:port1 -> n00000049 [style=bold] + n00000049 [label="msm_vfe1_video0\n/dev/video4", shape=box, style=filled, fillcolor=yellow] + n0000004f [label="{{ 0} | msm_vfe1_rdi1\n/dev/v4l-subdev16 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n0000004f:port1 -> n00000052 [style=bold] + n00000052 [label="msm_vfe1_video1\n/dev/video5", shape=box, style=filled, fillcolor=yellow] + n00000058 [label="{{ 0} | msm_vfe1_rdi2\n/dev/v4l-subdev17 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000058:port1 -> n0000005b [style=bold] + n0000005b [label="msm_vfe1_video2\n/dev/video6", shape=box, style=filled, fillcolor=yellow] + n00000061 [label="{{ 0} | msm_vfe1_pix\n/dev/v4l-subdev18 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000061:port1 -> n00000064 [style=bold] + n00000064 [label="msm_vfe1_video3\n/dev/video7", shape=box, style=filled, fillcolor=yellow] + n000000e2 [label="{{} | ov5645 3-0039\n/dev/v4l-subdev19 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] + n000000e2:port0 -> n00000004:port0 [style=bold] + n000000e4 [label="{{} | ov5645 3-003a\n/dev/v4l-subdev20 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] + n000000e4:port0 -> n00000007:port0 [style=bold] + n000000e6 [label="{{} | ov5645 3-003b\n/dev/v4l-subdev21 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] + n000000e6:port0 -> n00000001:port0 [style=bold] +} diff --git a/Documentation/admin-guide/media/qcom_camss_graph.dot b/Documentation/admin-guide/media/qcom_camss_graph.dot new file mode 100644 index 000000000000..ef7dca92fd0b --- /dev/null +++ b/Documentation/admin-guide/media/qcom_camss_graph.dot @@ -0,0 +1,43 @@ +# SPDX-License-Identifier: GPL-2.0 + +digraph board { + rankdir=TB + n00000001 [label="{{ 0} | msm_csiphy0\n/dev/v4l-subdev0 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000001:port1 -> n00000007:port0 [style=dashed] + n00000001:port1 -> n0000000a:port0 [style=dashed] + n00000004 [label="{{ 0} | msm_csiphy1\n/dev/v4l-subdev1 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000004:port1 -> n00000007:port0 [style=dashed] + n00000004:port1 -> n0000000a:port0 [style=dashed] + n00000007 [label="{{ 0} | msm_csid0\n/dev/v4l-subdev2 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000007:port1 -> n0000000d:port0 [style=dashed] + n00000007:port1 -> n00000010:port0 [style=dashed] + n0000000a [label="{{ 0} | msm_csid1\n/dev/v4l-subdev3 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n0000000a:port1 -> n0000000d:port0 [style=dashed] + n0000000a:port1 -> n00000010:port0 [style=dashed] + n0000000d [label="{{ 0} | msm_ispif0\n/dev/v4l-subdev4 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n0000000d:port1 -> n00000013:port0 [style=dashed] + n0000000d:port1 -> n0000001c:port0 [style=dashed] + n0000000d:port1 -> n00000025:port0 [style=dashed] + n0000000d:port1 -> n0000002e:port0 [style=dashed] + n00000010 [label="{{ 0} | msm_ispif1\n/dev/v4l-subdev5 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000010:port1 -> n00000013:port0 [style=dashed] + n00000010:port1 -> n0000001c:port0 [style=dashed] + n00000010:port1 -> n00000025:port0 [style=dashed] + n00000010:port1 -> n0000002e:port0 [style=dashed] + n00000013 [label="{{ 0} | msm_vfe0_rdi0\n/dev/v4l-subdev6 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000013:port1 -> n00000016 [style=bold] + n00000016 [label="msm_vfe0_video0\n/dev/video0", shape=box, style=filled, fillcolor=yellow] + n0000001c [label="{{ 0} | msm_vfe0_rdi1\n/dev/v4l-subdev7 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n0000001c:port1 -> n0000001f [style=bold] + n0000001f [label="msm_vfe0_video1\n/dev/video1", shape=box, style=filled, fillcolor=yellow] + n00000025 [label="{{ 0} | msm_vfe0_rdi2\n/dev/v4l-subdev8 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000025:port1 -> n00000028 [style=bold] + n00000028 [label="msm_vfe0_video2\n/dev/video2", shape=box, style=filled, fillcolor=yellow] + n0000002e [label="{{ 0} | msm_vfe0_pix\n/dev/v4l-subdev9 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n0000002e:port1 -> n00000031 [style=bold] + n00000031 [label="msm_vfe0_video3\n/dev/video3", shape=box, style=filled, fillcolor=yellow] + n00000057 [label="{{} | ov5645 1-0076\n/dev/v4l-subdev10 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] + n00000057:port0 -> n00000001:port0 [style=bold] + n00000059 [label="{{} | ov5645 1-0074\n/dev/v4l-subdev11 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] + n00000059:port0 -> n00000004:port0 [style=bold] +} diff --git a/Documentation/admin-guide/media/rcar-fdp1.rst b/Documentation/admin-guide/media/rcar-fdp1.rst new file mode 100644 index 000000000000..88b0edcf9046 --- /dev/null +++ b/Documentation/admin-guide/media/rcar-fdp1.rst @@ -0,0 +1,39 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Renesas R-Car Fine Display Processor (FDP1) Driver +================================================== + +The R-Car FDP1 driver implements driver-specific controls as follows. + +``V4L2_CID_DEINTERLACING_MODE (menu)`` + The video deinterlacing mode (such as Bob, Weave, ...). The R-Car FDP1 + driver implements the following modes. + +.. flat-table:: + :header-rows: 0 + :stub-columns: 0 + :widths: 1 4 + + * - ``"Progressive" (0)`` + - The input image video stream is progressive (not interlaced). No + deinterlacing is performed. Apart from (optional) format and encoding + conversion output frames are identical to the input frames. + * - ``"Adaptive 2D/3D" (1)`` + - Motion adaptive version of 2D and 3D deinterlacing. Use 3D deinterlacing + in the presence of fast motion and 2D deinterlacing with diagonal + interpolation otherwise. + * - ``"Fixed 2D" (2)`` + - The current field is scaled vertically by averaging adjacent lines to + recover missing lines. This method is also known as blending or Line + Averaging (LAV). + * - ``"Fixed 3D" (3)`` + - The previous and next fields are averaged to recover lines missing from + the current field. This method is also known as Field Averaging (FAV). + * - ``"Previous field" (4)`` + - The current field is weaved with the previous field, i.e. the previous + field is used to fill missing lines from the current field. This method + is also known as weave deinterlacing. + * - ``"Next field" (5)`` + - The current field is weaved with the next field, i.e. the next field is + used to fill missing lines from the current field. This method is also + known as weave deinterlacing. diff --git a/Documentation/admin-guide/media/saa7134-cardlist.rst b/Documentation/admin-guide/media/saa7134-cardlist.rst new file mode 100644 index 000000000000..afb0e2fb52b0 --- /dev/null +++ b/Documentation/admin-guide/media/saa7134-cardlist.rst @@ -0,0 +1,803 @@ +.. SPDX-License-Identifier: GPL-2.0 + +SAA7134 cards list +================== + +.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| + +.. flat-table:: + :header-rows: 1 + :widths: 2 19 18 + :stub-columns: 0 + + * - Card number + - Card name + - PCI IDs + + * - 0 + - UNKNOWN/GENERIC + - + + * - 1 + - Proteus Pro [philips reference design] + - 1131:2001, 1131:2001 + + * - 2 + - LifeView FlyVIDEO3000 + - 5168:0138, 4e42:0138 + + * - 3 + - LifeView/Typhoon FlyVIDEO2000 + - 5168:0138, 4e42:0138 + + * - 4 + - EMPRESS + - 1131:6752 + + * - 5 + - SKNet Monster TV + - 1131:4e85 + + * - 6 + - Tevion MD 9717 + - + + * - 7 + - KNC One TV-Station RDS / Typhoon TV Tuner RDS + - 1131:fe01, 1894:fe01 + + * - 8 + - Terratec Cinergy 400 TV + - 153b:1142 + + * - 9 + - Medion 5044 + - + + * - 10 + - Kworld/KuroutoShikou SAA7130-TVPCI + - + + * - 11 + - Terratec Cinergy 600 TV + - 153b:1143 + + * - 12 + - Medion 7134 + - 16be:0003, 16be:5000 + + * - 13 + - Typhoon TV+Radio 90031 + - + + * - 14 + - ELSA EX-VISION 300TV + - 1048:226b + + * - 15 + - ELSA EX-VISION 500TV + - 1048:226a + + * - 16 + - ASUS TV-FM 7134 + - 1043:4842, 1043:4830, 1043:4840 + + * - 17 + - AOPEN VA1000 POWER + - 1131:7133 + + * - 18 + - BMK MPEX No Tuner + - + + * - 19 + - Compro VideoMate TV + - 185b:c100 + + * - 20 + - Matrox CronosPlus + - 102B:48d0 + + * - 21 + - 10MOONS PCI TV CAPTURE CARD + - 1131:2001 + + * - 22 + - AverMedia M156 / Medion 2819 + - 1461:a70b + + * - 23 + - BMK MPEX Tuner + - + + * - 24 + - KNC One TV-Station DVR + - 1894:a006 + + * - 25 + - ASUS TV-FM 7133 + - 1043:4843 + + * - 26 + - Pinnacle PCTV Stereo (saa7134) + - 11bd:002b + + * - 27 + - Manli MuchTV M-TV002 + - + + * - 28 + - Manli MuchTV M-TV001 + - + + * - 29 + - Nagase Sangyo TransGear 3000TV + - 1461:050c + + * - 30 + - Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) + - 1019:4cb4 + + * - 31 + - Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) + - 1019:4cb5 + + * - 32 + - AVACS SmartTV + - + + * - 33 + - AVerMedia DVD EZMaker + - 1461:10ff + + * - 34 + - Noval Prime TV 7133 + - + + * - 35 + - AverMedia AverTV Studio 305 + - 1461:2115 + + * - 36 + - UPMOST PURPLE TV + - 12ab:0800 + + * - 37 + - Items MuchTV Plus / IT-005 + - + + * - 38 + - Terratec Cinergy 200 TV + - 153b:1152 + + * - 39 + - LifeView FlyTV Platinum Mini + - 5168:0212, 4e42:0212, 5169:1502 + + * - 40 + - Compro VideoMate TV PVR/FM + - 185b:c100 + + * - 41 + - Compro VideoMate TV Gold+ + - 185b:c100 + + * - 42 + - Sabrent SBT-TVFM (saa7130) + - + + * - 43 + - :Zolid Xpert TV7134 + - + + * - 44 + - Empire PCI TV-Radio LE + - + + * - 45 + - Avermedia AVerTV Studio 307 + - 1461:9715 + + * - 46 + - AVerMedia Cardbus TV/Radio (E500) + - 1461:d6ee + + * - 47 + - Terratec Cinergy 400 mobile + - 153b:1162 + + * - 48 + - Terratec Cinergy 600 TV MK3 + - 153b:1158 + + * - 49 + - Compro VideoMate Gold+ Pal + - 185b:c200 + + * - 50 + - Pinnacle PCTV 300i DVB-T + PAL + - 11bd:002d + + * - 51 + - ProVideo PV952 + - 1540:9524 + + * - 52 + - AverMedia AverTV/305 + - 1461:2108 + + * - 53 + - ASUS TV-FM 7135 + - 1043:4845 + + * - 54 + - LifeView FlyTV Platinum FM / Gold + - 5168:0214, 5168:5214, 1489:0214, 5168:0304 + + * - 55 + - LifeView FlyDVB-T DUO / MSI TV@nywhere Duo + - 5168:0306, 4E42:0306 + + * - 56 + - Avermedia AVerTV 307 + - 1461:a70a + + * - 57 + - Avermedia AVerTV GO 007 FM + - 1461:f31f + + * - 58 + - ADS Tech Instant TV (saa7135) + - 1421:0350, 1421:0351, 1421:0370, 1421:1370 + + * - 59 + - Kworld/Tevion V-Stream Xpert TV PVR7134 + - + + * - 60 + - LifeView/Typhoon/Genius FlyDVB-T Duo Cardbus + - 5168:0502, 4e42:0502, 1489:0502 + + * - 61 + - Philips TOUGH DVB-T reference design + - 1131:2004 + + * - 62 + - Compro VideoMate TV Gold+II + - + + * - 63 + - Kworld Xpert TV PVR7134 + - + + * - 64 + - FlyTV mini Asus Digimatrix + - 1043:0210 + + * - 65 + - V-Stream Studio TV Terminator + - + + * - 66 + - Yuan TUN-900 (saa7135) + - + + * - 67 + - Beholder BeholdTV 409 FM + - 0000:4091 + + * - 68 + - GoTView 7135 PCI + - 5456:7135 + + * - 69 + - Philips EUROPA V3 reference design + - 1131:2004 + + * - 70 + - Compro Videomate DVB-T300 + - 185b:c900 + + * - 71 + - Compro Videomate DVB-T200 + - 185b:c901 + + * - 72 + - RTD Embedded Technologies VFG7350 + - 1435:7350 + + * - 73 + - RTD Embedded Technologies VFG7330 + - 1435:7330 + + * - 74 + - LifeView FlyTV Platinum Mini2 + - 14c0:1212 + + * - 75 + - AVerMedia AVerTVHD MCE A180 + - 1461:1044 + + * - 76 + - SKNet MonsterTV Mobile + - 1131:4ee9 + + * - 77 + - Pinnacle PCTV 40i/50i/110i (saa7133) + - 11bd:002e + + * - 78 + - ASUSTeK P7131 Dual + - 1043:4862 + + * - 79 + - Sedna/MuchTV PC TV Cardbus TV/Radio (ITO25 Rev:2B) + - + + * - 80 + - ASUS Digimatrix TV + - 1043:0210 + + * - 81 + - Philips Tiger reference design + - 1131:2018 + + * - 82 + - MSI TV@Anywhere plus + - 1462:6231, 1462:8624 + + * - 83 + - Terratec Cinergy 250 PCI TV + - 153b:1160 + + * - 84 + - LifeView FlyDVB Trio + - 5168:0319 + + * - 85 + - AverTV DVB-T 777 + - 1461:2c05, 1461:2c05 + + * - 86 + - LifeView FlyDVB-T / Genius VideoWonder DVB-T + - 5168:0301, 1489:0301 + + * - 87 + - ADS Instant TV Duo Cardbus PTV331 + - 0331:1421 + + * - 88 + - Tevion/KWorld DVB-T 220RF + - 17de:7201 + + * - 89 + - ELSA EX-VISION 700TV + - 1048:226c + + * - 90 + - Kworld ATSC110/115 + - 17de:7350, 17de:7352 + + * - 91 + - AVerMedia A169 B + - 1461:7360 + + * - 92 + - AVerMedia A169 B1 + - 1461:6360 + + * - 93 + - Medion 7134 Bridge #2 + - 16be:0005 + + * - 94 + - LifeView FlyDVB-T Hybrid Cardbus/MSI TV @nywhere A/D NB + - 5168:3306, 5168:3502, 5168:3307, 4e42:3502 + + * - 95 + - LifeView FlyVIDEO3000 (NTSC) + - 5169:0138 + + * - 96 + - Medion Md8800 Quadro + - 16be:0007, 16be:0008, 16be:000d + + * - 97 + - LifeView FlyDVB-S /Acorp TV134DS + - 5168:0300, 4e42:0300 + + * - 98 + - Proteus Pro 2309 + - 0919:2003 + + * - 99 + - AVerMedia TV Hybrid A16AR + - 1461:2c00 + + * - 100 + - Asus Europa2 OEM + - 1043:4860 + + * - 101 + - Pinnacle PCTV 310i + - 11bd:002f + + * - 102 + - Avermedia AVerTV Studio 507 + - 1461:9715 + + * - 103 + - Compro Videomate DVB-T200A + - + + * - 104 + - Hauppauge WinTV-HVR1110 DVB-T/Hybrid + - 0070:6700, 0070:6701, 0070:6702, 0070:6703, 0070:6704, 0070:6705 + + * - 105 + - Terratec Cinergy HT PCMCIA + - 153b:1172 + + * - 106 + - Encore ENLTV + - 1131:2342, 1131:2341, 3016:2344 + + * - 107 + - Encore ENLTV-FM + - 1131:230f + + * - 108 + - Terratec Cinergy HT PCI + - 153b:1175 + + * - 109 + - Philips Tiger - S Reference design + - + + * - 110 + - Avermedia M102 + - 1461:f31e + + * - 111 + - ASUS P7131 4871 + - 1043:4871 + + * - 112 + - ASUSTeK P7131 Hybrid + - 1043:4876 + + * - 113 + - Elitegroup ECS TVP3XP FM1246 Tuner Card (PAL,FM) + - 1019:4cb6 + + * - 114 + - KWorld DVB-T 210 + - 17de:7250 + + * - 115 + - Sabrent PCMCIA TV-PCB05 + - 0919:2003 + + * - 116 + - 10MOONS TM300 TV Card + - 1131:2304 + + * - 117 + - Avermedia Super 007 + - 1461:f01d + + * - 118 + - Beholder BeholdTV 401 + - 0000:4016 + + * - 119 + - Beholder BeholdTV 403 + - 0000:4036 + + * - 120 + - Beholder BeholdTV 403 FM + - 0000:4037 + + * - 121 + - Beholder BeholdTV 405 + - 0000:4050 + + * - 122 + - Beholder BeholdTV 405 FM + - 0000:4051 + + * - 123 + - Beholder BeholdTV 407 + - 0000:4070 + + * - 124 + - Beholder BeholdTV 407 FM + - 0000:4071 + + * - 125 + - Beholder BeholdTV 409 + - 0000:4090 + + * - 126 + - Beholder BeholdTV 505 FM + - 5ace:5050 + + * - 127 + - Beholder BeholdTV 507 FM / BeholdTV 509 FM + - 5ace:5070, 5ace:5090 + + * - 128 + - Beholder BeholdTV Columbus TV/FM + - 0000:5201 + + * - 129 + - Beholder BeholdTV 607 FM + - 5ace:6070 + + * - 130 + - Beholder BeholdTV M6 + - 5ace:6190 + + * - 131 + - Twinhan Hybrid DTV-DVB 3056 PCI + - 1822:0022 + + * - 132 + - Genius TVGO AM11MCE + - + + * - 133 + - NXP Snake DVB-S reference design + - + + * - 134 + - Medion/Creatix CTX953 Hybrid + - 16be:0010 + + * - 135 + - MSI TV@nywhere A/D v1.1 + - 1462:8625 + + * - 136 + - AVerMedia Cardbus TV/Radio (E506R) + - 1461:f436 + + * - 137 + - AVerMedia Hybrid TV/Radio (A16D) + - 1461:f936 + + * - 138 + - Avermedia M115 + - 1461:a836 + + * - 139 + - Compro VideoMate T750 + - 185b:c900 + + * - 140 + - Avermedia DVB-S Pro A700 + - 1461:a7a1 + + * - 141 + - Avermedia DVB-S Hybrid+FM A700 + - 1461:a7a2 + + * - 142 + - Beholder BeholdTV H6 + - 5ace:6290 + + * - 143 + - Beholder BeholdTV M63 + - 5ace:6191 + + * - 144 + - Beholder BeholdTV M6 Extra + - 5ace:6193 + + * - 145 + - AVerMedia MiniPCI DVB-T Hybrid M103 + - 1461:f636, 1461:f736 + + * - 146 + - ASUSTeK P7131 Analog + - + + * - 147 + - Asus Tiger 3in1 + - 1043:4878 + + * - 148 + - Encore ENLTV-FM v5.3 + - 1a7f:2008 + + * - 149 + - Avermedia PCI pure analog (M135A) + - 1461:f11d + + * - 150 + - Zogis Real Angel 220 + - + + * - 151 + - ADS Tech Instant HDTV + - 1421:0380 + + * - 152 + - Asus Tiger Rev:1.00 + - 1043:4857 + + * - 153 + - Kworld Plus TV Analog Lite PCI + - 17de:7128 + + * - 154 + - Avermedia AVerTV GO 007 FM Plus + - 1461:f31d + + * - 155 + - Hauppauge WinTV-HVR1150 ATSC/QAM-Hybrid + - 0070:6706, 0070:6708 + + * - 156 + - Hauppauge WinTV-HVR1120 DVB-T/Hybrid + - 0070:6707, 0070:6709, 0070:670a + + * - 157 + - Avermedia AVerTV Studio 507UA + - 1461:a11b + + * - 158 + - AVerMedia Cardbus TV/Radio (E501R) + - 1461:b7e9 + + * - 159 + - Beholder BeholdTV 505 RDS + - 0000:505B + + * - 160 + - Beholder BeholdTV 507 RDS + - 0000:5071 + + * - 161 + - Beholder BeholdTV 507 RDS + - 0000:507B + + * - 162 + - Beholder BeholdTV 607 FM + - 5ace:6071 + + * - 163 + - Beholder BeholdTV 609 FM + - 5ace:6090 + + * - 164 + - Beholder BeholdTV 609 FM + - 5ace:6091 + + * - 165 + - Beholder BeholdTV 607 RDS + - 5ace:6072 + + * - 166 + - Beholder BeholdTV 607 RDS + - 5ace:6073 + + * - 167 + - Beholder BeholdTV 609 RDS + - 5ace:6092 + + * - 168 + - Beholder BeholdTV 609 RDS + - 5ace:6093 + + * - 169 + - Compro VideoMate S350/S300 + - 185b:c900 + + * - 170 + - AverMedia AverTV Studio 505 + - 1461:a115 + + * - 171 + - Beholder BeholdTV X7 + - 5ace:7595 + + * - 172 + - RoverMedia TV Link Pro FM + - 19d1:0138 + + * - 173 + - Zolid Hybrid TV Tuner PCI + - 1131:2004 + + * - 174 + - Asus Europa Hybrid OEM + - 1043:4847 + + * - 175 + - Leadtek Winfast DTV1000S + - 107d:6655 + + * - 176 + - Beholder BeholdTV 505 RDS + - 0000:5051 + + * - 177 + - Hawell HW-404M7 + - + + * - 178 + - Beholder BeholdTV H7 + - 5ace:7190 + + * - 179 + - Beholder BeholdTV A7 + - 5ace:7090 + + * - 180 + - Avermedia PCI M733A + - 1461:4155, 1461:4255 + + * - 181 + - TechoTrend TT-budget T-3000 + - 13c2:2804 + + * - 182 + - Kworld PCI SBTVD/ISDB-T Full-Seg Hybrid + - 17de:b136 + + * - 183 + - Compro VideoMate Vista M1F + - 185b:c900 + + * - 184 + - Encore ENLTV-FM 3 + - 1a7f:2108 + + * - 185 + - MagicPro ProHDTV Pro2 DMB-TH/Hybrid + - 17de:d136 + + * - 186 + - Beholder BeholdTV 501 + - 5ace:5010 + + * - 187 + - Beholder BeholdTV 503 FM + - 5ace:5030 + + * - 188 + - Sensoray 811/911 + - 6000:0811, 6000:0911 + + * - 189 + - Kworld PC150-U + - 17de:a134 + + * - 190 + - Asus My Cinema PS3-100 + - 1043:48cd + + * - 191 + - Hawell HW-9004V1 + - + + * - 192 + - AverMedia AverTV Satellite Hybrid+FM A706 + - 1461:2055 + + * - 193 + - WIS Voyager or compatible + - 1905:7007 + + * - 194 + - AverMedia AverTV/505 + - 1461:a10a + + * - 195 + - Leadtek Winfast TV2100 FM + - 107d:6f3a + + * - 196 + - SnaZio* TVPVR PRO + - 1779:13cf diff --git a/Documentation/admin-guide/media/saa7134.rst b/Documentation/admin-guide/media/saa7134.rst new file mode 100644 index 000000000000..c84246dd81c0 --- /dev/null +++ b/Documentation/admin-guide/media/saa7134.rst @@ -0,0 +1,61 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The saa7134 driver +================== + +Author Gerd Hoffmann + + +This is a v4l2/oss device driver for saa7130/33/34/35 based capture / TV +boards. See http://www.semiconductors.philips.com/pip/saa7134hl for a +description. + + +Status +------ + +Almost everything is working. video, sound, tuner, radio, mpeg ts, ... + +As with bttv, card-specific tweaks are needed. Check CARDLIST for a +list of known TV cards and saa7134-cards.c for the drivers card +configuration info. + + +Build +----- + +Pick up videodev + v4l2 patches from http://bytesex.org/patches/. +Configure, build, install + boot the new kernel. You'll need at least +these config options: + +.. code-block:: none + + CONFIG_I2C=m + CONFIG_VIDEO_DEV=m + +Type "make" to build the driver now. "make install" installs the +driver. "modprobe saa7134" should load it. Depending on the card you +might have to pass card= as insmod option, check CARDLIST for +valid choices. + + +Changes / Fixes +--------------- + +Please mail me unified diffs ("diff -u") with your changes, and don't +forget to tell me what it changes / which problem it fixes / whatever +it is good for ... + + +Known Problems +-------------- + +* The tuner for the flyvideos isn't detected automatically and the + default might not work for you depending on which version you have. + There is a tuner= insmod option to override the driver's default. + +Credits +------- + +andrew.stevens@philips.com + werner.leeb@philips.com for providing +saa7134 hardware specs and sample board. diff --git a/Documentation/admin-guide/media/saa7164-cardlist.rst b/Documentation/admin-guide/media/saa7164-cardlist.rst new file mode 100644 index 000000000000..e8f36e084537 --- /dev/null +++ b/Documentation/admin-guide/media/saa7164-cardlist.rst @@ -0,0 +1,71 @@ +.. SPDX-License-Identifier: GPL-2.0 + +SAA7164 cards list +================== + +.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| + +.. flat-table:: + :header-rows: 1 + :widths: 2 19 18 + :stub-columns: 0 + + * - Card number + - Card name + - PCI IDs + + * - 0 + - Unknown + - + + * - 1 + - Generic Rev2 + - + + * - 2 + - Generic Rev3 + - + + * - 3 + - Hauppauge WinTV-HVR2250 + - 0070:8880, 0070:8810 + + * - 4 + - Hauppauge WinTV-HVR2200 + - 0070:8980 + + * - 5 + - Hauppauge WinTV-HVR2200 + - 0070:8900 + + * - 6 + - Hauppauge WinTV-HVR2200 + - 0070:8901 + + * - 7 + - Hauppauge WinTV-HVR2250 + - 0070:8891, 0070:8851 + + * - 8 + - Hauppauge WinTV-HVR2250 + - 0070:88A1 + + * - 9 + - Hauppauge WinTV-HVR2200 + - 0070:8940 + + * - 10 + - Hauppauge WinTV-HVR2200 + - 0070:8953 + + * - 11 + - Hauppauge WinTV-HVR2255(proto) + - 0070:f111 + + * - 12 + - Hauppauge WinTV-HVR2255 + - 0070:f111 + + * - 13 + - Hauppauge WinTV-HVR2205 + - 0070:f123, 0070:f120 diff --git a/Documentation/admin-guide/media/si470x.rst b/Documentation/admin-guide/media/si470x.rst new file mode 100644 index 000000000000..d53bf5f95200 --- /dev/null +++ b/Documentation/admin-guide/media/si470x.rst @@ -0,0 +1,167 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: + +The Silicon Labs Si470x FM Radio Receivers driver +================================================= + +Copyright |copy| 2009 Tobias Lorenz + + +Information from Silicon Labs +----------------------------- + +Silicon Laboratories is the manufacturer of the radio ICs, that nowadays are the +most often used radio receivers in cell phones. Usually they are connected with +I2C. But SiLabs also provides a reference design, which integrates this IC, +together with a small microcontroller C8051F321, to form a USB radio. +Part of this reference design is also a radio application in binary and source +code. The software also contains an automatic firmware upgrade to the most +current version. Information on these can be downloaded here: +http://www.silabs.com/usbradio + + +Supported ICs +------------- + +The following ICs have a very similar register set, so that they are or will be +supported somewhen by the driver: + +- Si4700: FM radio receiver +- Si4701: FM radio receiver, RDS Support +- Si4702: FM radio receiver +- Si4703: FM radio receiver, RDS Support +- Si4704: FM radio receiver, no external antenna required +- Si4705: FM radio receiver, no external antenna required, RDS support, Dig I/O +- Si4706: Enhanced FM RDS/TMC radio receiver, no external antenna required, RDS + Support +- Si4707: Dedicated weather band radio receiver with SAME decoder, RDS Support +- Si4708: Smallest FM receivers +- Si4709: Smallest FM receivers, RDS Support + +More information on these can be downloaded here: +http://www.silabs.com/products/mcu/Pages/USBFMRadioRD.aspx + + +Supported USB devices +--------------------- + +Currently the following USB radios (vendor:product) with the Silicon Labs si470x +chips are known to work: + +- 10c4:818a: Silicon Labs USB FM Radio Reference Design +- 06e1:a155: ADS/Tech FM Radio Receiver (formerly Instant FM Music) (RDX-155-EF) +- 1b80:d700: KWorld USB FM Radio SnapMusic Mobile 700 (FM700) +- 10c5:819a: Sanei Electric, Inc. FM USB Radio (sold as DealExtreme.com PCear) + + +Software +-------- + +Testing is usually done with most application under Debian/testing: + +- fmtools - Utility for managing FM tuner cards +- gnomeradio - FM-radio tuner for the GNOME desktop +- gradio - GTK FM radio tuner +- kradio - Comfortable Radio Application for KDE +- radio - ncurses-based radio application +- mplayer - The Ultimate Movie Player For Linux +- v4l2-ctl - Collection of command line video4linux utilities + +For example, you can use: + +.. code-block:: none + + v4l2-ctl -d /dev/radio0 --set-ctrl=volume=10,mute=0 --set-freq=95.21 --all + +There is also a library libv4l, which can be used. It's going to have a function +for frequency seeking, either by using hardware functionality as in radio-si470x +or by implementing a function as we currently have in every of the mentioned +programs. Somewhen the radio programs should make use of libv4l. + +For processing RDS information, there is a project ongoing at: +http://rdsd.berlios.de/ + +There is currently no project for making TMC sentences human readable. + + +Audio Listing +------------- + +USB Audio is provided by the ALSA snd_usb_audio module. It is recommended to +also select SND_USB_AUDIO, as this is required to get sound from the radio. For +listing you have to redirect the sound, for example using one of the following +commands. Please adjust the audio devices to your needs (/dev/dsp* and hw:x,x). + +If you just want to test audio (very poor quality): + +.. code-block:: none + + cat /dev/dsp1 > /dev/dsp + +If you use sox + OSS try: + +.. code-block:: none + + sox -2 --endian little -r 96000 -t oss /dev/dsp1 -t oss /dev/dsp + +or using sox + alsa: + +.. code-block:: none + + sox --endian little -c 2 -S -r 96000 -t alsa hw:1 -t alsa -r 96000 hw:0 + +If you use arts try: + +.. code-block:: none + + arecord -D hw:1,0 -r96000 -c2 -f S16_LE | artsdsp aplay -B - + +If you use mplayer try: + +.. code-block:: none + + mplayer -radio adevice=hw=1.0:arate=96000 \ + -rawaudio rate=96000 \ + radio:///capture + +Module Parameters +----------------- + +After loading the module, you still have access to some of them in the sysfs +mount under /sys/module/radio_si470x/parameters. The contents of read-only files +(0444) are not updated, even if space, band and de are changed using private +video controls. The others are runtime changeable. + + +Errors +------ + +Increase tune_timeout, if you often get -EIO errors. + +When timed out or band limit is reached, hw_freq_seek returns -EAGAIN. + +If you get any errors from snd_usb_audio, please report them to the ALSA people. + + +Open Issues +----------- + +V4L minor device allocation and parameter setting is not perfect. A solution is +currently under discussion. + +There is an USB interface for downloading/uploading new firmware images. Support +for it can be implemented using the request_firmware interface. + +There is a RDS interrupt mode. The driver is already using the same interface +for polling RDS information, but is currently not using the interrupt mode. + +There is a LED interface, which can be used to override the LED control +programmed in the firmware. This can be made available using the LED support +functions in the kernel. + + +Other useful information and links +---------------------------------- + +http://www.silabs.com/usbradio diff --git a/Documentation/admin-guide/media/si4713.rst b/Documentation/admin-guide/media/si4713.rst new file mode 100644 index 000000000000..be8e6b49b7b4 --- /dev/null +++ b/Documentation/admin-guide/media/si4713.rst @@ -0,0 +1,192 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: + +The Silicon Labs Si4713 FM Radio Transmitter Driver +=================================================== + +Copyright |copy| 2009 Nokia Corporation + +Contact: Eduardo Valentin + + +Information about the Device +---------------------------- + +This chip is a Silicon Labs product. It is a I2C device, currently on 0x63 address. +Basically, it has transmission and signal noise level measurement features. + +The Si4713 integrates transmit functions for FM broadcast stereo transmission. +The chip also allows integrated receive power scanning to identify low signal +power FM channels. + +The chip is programmed using commands and responses. There are also several +properties which can change the behavior of this chip. + +Users must comply with local regulations on radio frequency (RF) transmission. + +Device driver description +------------------------- + +There are two modules to handle this device. One is a I2C device driver +and the other is a platform driver. + +The I2C device driver exports a v4l2-subdev interface to the kernel. +All properties can also be accessed by v4l2 extended controls interface, by +using the v4l2-subdev calls (g_ext_ctrls, s_ext_ctrls). + +The platform device driver exports a v4l2 radio device interface to user land. +So, it uses the I2C device driver as a sub device in order to send the user +commands to the actual device. Basically it is a wrapper to the I2C device driver. + +Applications can use v4l2 radio API to specify frequency of operation, mute state, +etc. But mostly of its properties will be present in the extended controls. + +When the v4l2 mute property is set to 1 (true), the driver will turn the chip off. + +Properties description +---------------------- + +The properties can be accessed using v4l2 extended controls. +Here is an output from v4l2-ctl util: + +.. code-block:: none + + / # v4l2-ctl -d /dev/radio0 --all -L + Driver Info: + Driver name : radio-si4713 + Card type : Silicon Labs Si4713 Modulator + Bus info : + Driver version: 0 + Capabilities : 0x00080800 + RDS Output + Modulator + Audio output: 0 (FM Modulator Audio Out) + Frequency: 1408000 (88.000000 MHz) + Video Standard = 0x00000000 + Modulator: + Name : FM Modulator + Capabilities : 62.5 Hz stereo rds + Frequency range : 76.0 MHz - 108.0 MHz + Subchannel modulation: stereo+rds + + User Controls + + mute (bool) : default=1 value=0 + + FM Radio Modulator Controls + + rds_signal_deviation (int) : min=0 max=90000 step=10 default=200 value=200 flags=slider + rds_program_id (int) : min=0 max=65535 step=1 default=0 value=0 + rds_program_type (int) : min=0 max=31 step=1 default=0 value=0 + rds_ps_name (str) : min=0 max=96 step=8 value='si4713 ' + rds_radio_text (str) : min=0 max=384 step=32 value='' + audio_limiter_feature_enabled (bool) : default=1 value=1 + audio_limiter_release_time (int) : min=250 max=102390 step=50 default=5010 value=5010 flags=slider + audio_limiter_deviation (int) : min=0 max=90000 step=10 default=66250 value=66250 flags=slider + audio_compression_feature_enabl (bool) : default=1 value=1 + audio_compression_gain (int) : min=0 max=20 step=1 default=15 value=15 flags=slider + audio_compression_threshold (int) : min=-40 max=0 step=1 default=-40 value=-40 flags=slider + audio_compression_attack_time (int) : min=0 max=5000 step=500 default=0 value=0 flags=slider + audio_compression_release_time (int) : min=100000 max=1000000 step=100000 default=1000000 value=1000000 flags=slider + pilot_tone_feature_enabled (bool) : default=1 value=1 + pilot_tone_deviation (int) : min=0 max=90000 step=10 default=6750 value=6750 flags=slider + pilot_tone_frequency (int) : min=0 max=19000 step=1 default=19000 value=19000 flags=slider + pre_emphasis_settings (menu) : min=0 max=2 default=1 value=1 + tune_power_level (int) : min=0 max=120 step=1 default=88 value=88 flags=slider + tune_antenna_capacitor (int) : min=0 max=191 step=1 default=0 value=110 flags=slider + +Here is a summary of them: + +* Pilot is an audible tone sent by the device. + +- pilot_frequency - Configures the frequency of the stereo pilot tone. +- pilot_deviation - Configures pilot tone frequency deviation level. +- pilot_enabled - Enables or disables the pilot tone feature. + +* The si4713 device is capable of applying audio compression to the + transmitted signal. + +- acomp_enabled - Enables or disables the audio dynamic range control feature. +- acomp_gain - Sets the gain for audio dynamic range control. +- acomp_threshold - Sets the threshold level for audio dynamic range control. +- acomp_attack_time - Sets the attack time for audio dynamic range control. +- acomp_release_time - Sets the release time for audio dynamic range control. + +* Limiter setups audio deviation limiter feature. Once a over deviation occurs, + it is possible to adjust the front-end gain of the audio input and always + prevent over deviation. + +- limiter_enabled - Enables or disables the limiter feature. +- limiter_deviation - Configures audio frequency deviation level. +- limiter_release_time - Sets the limiter release time. + +* Tuning power + +- power_level - Sets the output power level for signal transmission. + antenna_capacitor - This selects the value of antenna tuning capacitor + manually or automatically if set to zero. + +* RDS related + +- rds_ps_name - Sets the RDS ps name field for transmission. +- rds_radio_text - Sets the RDS radio text for transmission. +- rds_pi - Sets the RDS PI field for transmission. +- rds_pty - Sets the RDS PTY field for transmission. + +* Region related + +- preemphasis - sets the preemphasis to be applied for transmission. + +RNL +--- + +This device also has an interface to measure received noise level. To do that, you should +ioctl the device node. Here is an code of example: + +.. code-block:: none + + int main (int argc, char *argv[]) + { + struct si4713_rnl rnl; + int fd = open("/dev/radio0", O_RDWR); + int rval; + + if (argc < 2) + return -EINVAL; + + if (fd < 0) + return fd; + + sscanf(argv[1], "%d", &rnl.frequency); + + rval = ioctl(fd, SI4713_IOC_MEASURE_RNL, &rnl); + if (rval < 0) + return rval; + + printf("received noise level: %d\n", rnl.rnl); + + close(fd); + } + +The struct si4713_rnl and SI4713_IOC_MEASURE_RNL are defined under +include/linux/platform_data/media/si4713.h. + +Stereo/Mono and RDS subchannels +------------------------------- + +The device can also be configured using the available sub channels for +transmission. To do that use S/G_MODULATOR ioctl and configure txsubchans properly. +Refer to the V4L2 API specification for proper use of this ioctl. + +Testing +------- +Testing is usually done with v4l2-ctl utility for managing FM tuner cards. +The tool can be found in v4l-dvb repository under v4l2-apps/util directory. + +Example for setting rds ps name: + +.. code-block:: none + + # v4l2-ctl -d /dev/radio0 --set-ctrl=rds_ps_name="Dummy" + diff --git a/Documentation/admin-guide/media/si476x.rst b/Documentation/admin-guide/media/si476x.rst new file mode 100644 index 000000000000..87062301d6a1 --- /dev/null +++ b/Documentation/admin-guide/media/si476x.rst @@ -0,0 +1,160 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: + + +The SI476x Driver +================= + +Copyright |copy| 2013 Andrey Smirnov + +TODO for the driver +------------------- + +- According to the SiLabs' datasheet it is possible to update the + firmware of the radio chip in the run-time, thus bringing it to the + most recent version. Unfortunately I couldn't find any mentioning of + the said firmware update for the old chips that I tested the driver + against, so for chips like that the driver only exposes the old + functionality. + + +Parameters exposed over debugfs +------------------------------- +SI476x allow user to get multiple characteristics that can be very +useful for EoL testing/RF performance estimation, parameters that have +very little to do with V4L2 subsystem. Such parameters are exposed via +debugfs and can be accessed via regular file I/O operations. + +The drivers exposes following files: + +* /sys/kernel/debug//acf + This file contains ACF(Automatically Controlled Features) status + information. The contents of the file is binary data of the + following layout: + + .. tabularcolumns:: |p{7ex}|p{12ex}|L| + + ============= ============== ==================================== + Offset Name Description + ============= ============== ==================================== + 0x00 blend_int Flag, set when stereo separation has + crossed below the blend threshold + 0x01 hblend_int Flag, set when HiBlend cutoff + frequency is lower than threshold + 0x02 hicut_int Flag, set when HiCut cutoff + frequency is lower than threshold + 0x03 chbw_int Flag, set when channel filter + bandwidth is less than threshold + 0x04 softmute_int Flag indicating that softmute + attenuation has increased above + softmute threshold + 0x05 smute 0 - Audio is not soft muted + 1 - Audio is soft muted + 0x06 smattn Soft mute attenuation level in dB + 0x07 chbw Channel filter bandwidth in kHz + 0x08 hicut HiCut cutoff frequency in units of + 100Hz + 0x09 hiblend HiBlend cutoff frequency in units + of 100 Hz + 0x10 pilot 0 - Stereo pilot is not present + 1 - Stereo pilot is present + 0x11 stblend Stereo blend in % + ============= ============== ==================================== + + +* /sys/kernel/debug//rds_blckcnt + This file contains statistics about RDS receptions. It's binary data + has the following layout: + + .. tabularcolumns:: |p{7ex}|p{12ex}|L| + + ============= ============== ==================================== + Offset Name Description + ============= ============== ==================================== + 0x00 expected Number of expected RDS blocks + 0x02 received Number of received RDS blocks + 0x04 uncorrectable Number of uncorrectable RDS blocks + ============= ============== ==================================== + +* /sys/kernel/debug//agc + This file contains information about parameters pertaining to + AGC(Automatic Gain Control) + + The layout is: + + .. tabularcolumns:: |p{7ex}|p{12ex}|L| + + ============= ============== ==================================== + Offset Name Description + ============= ============== ==================================== + 0x00 mxhi 0 - FM Mixer PD high threshold is + not tripped + 1 - FM Mixer PD high threshold is + tripped + 0x01 mxlo ditto for FM Mixer PD low + 0x02 lnahi ditto for FM LNA PD high + 0x03 lnalo ditto for FM LNA PD low + 0x04 fmagc1 FMAGC1 attenuator resistance + (see datasheet for more detail) + 0x05 fmagc2 ditto for FMAGC2 + 0x06 pgagain PGA gain in dB + 0x07 fmwblang FM/WB LNA Gain in dB + ============= ============== ==================================== + +* /sys/kernel/debug//rsq + This file contains information about parameters pertaining to + RSQ(Received Signal Quality) + + The layout is: + + .. tabularcolumns:: |p{7ex}|p{12ex}|p{60ex}| + + ============= ============== ==================================== + Offset Name Description + ============= ============== ==================================== + 0x00 multhint 0 - multipath value has not crossed + the Multipath high threshold + 1 - multipath value has crossed + the Multipath high threshold + 0x01 multlint ditto for Multipath low threshold + 0x02 snrhint 0 - received signal's SNR has not + crossed high threshold + 1 - received signal's SNR has + crossed high threshold + 0x03 snrlint ditto for low threshold + 0x04 rssihint ditto for RSSI high threshold + 0x05 rssilint ditto for RSSI low threshold + 0x06 bltf Flag indicating if seek command + reached/wrapped seek band limit + 0x07 snr_ready Indicates that SNR metrics is ready + 0x08 rssiready ditto for RSSI metrics + 0x09 injside 0 - Low-side injection is being used + 1 - High-side injection is used + 0x10 afcrl Flag indicating if AFC rails + 0x11 valid Flag indicating if channel is valid + 0x12 readfreq Current tuned frequency + 0x14 freqoff Signed frequency offset in units of + 2ppm + 0x15 rssi Signed value of RSSI in dBuV + 0x16 snr Signed RF SNR in dB + 0x17 issi Signed Image Strength Signal + indicator + 0x18 lassi Signed Low side adjacent Channel + Strength indicator + 0x19 hassi ditto fpr High side + 0x20 mult Multipath indicator + 0x21 dev Frequency deviation + 0x24 assi Adjacent channel SSI + 0x25 usn Ultrasonic noise indicator + 0x26 pilotdev Pilot deviation in units of 100 Hz + 0x27 rdsdev ditto for RDS + 0x28 assidev ditto for ASSI + 0x29 strongdev Frequency deviation + 0x30 rdspi RDS PI code + ============= ============== ==================================== + +* /sys/kernel/debug//rsq_primary + This file contains information about parameters pertaining to + RSQ(Received Signal Quality) for primary tuner only. Layout is as + the one above. diff --git a/Documentation/admin-guide/media/technisat.rst b/Documentation/admin-guide/media/technisat.rst new file mode 100644 index 000000000000..9eaa12366bbf --- /dev/null +++ b/Documentation/admin-guide/media/technisat.rst @@ -0,0 +1,100 @@ +.. SPDX-License-Identifier: GPL-2.0 + +How to set up the Technisat/B2C2 Flexcop devices +================================================ + +.. note:: + + This documentation is outdated. + +Author: Uwe Bugla August 2009 + +Find out what device you have +----------------------------- + +Important Notice: The driver does NOT support Technisat USB 2 devices! + +First start your linux box with a shipped kernel: + +.. code-block:: none + + lspci -vvv for a PCI device (lsusb -vvv for an USB device) will show you for example: + 02:0b.0 Network controller: Techsan Electronics Co Ltd B2C2 FlexCopII DVB chip / + Technisat SkyStar2 DVB card (rev 02) + + dmesg | grep frontend may show you for example: + DVB: registering frontend 0 (Conexant CX24123/CX24109)... + +Kernel compilation: +------------------- + +If the Flexcop / Technisat is the only DVB / TV / Radio device in your box +get rid of unnecessary modules and check this one: + +``Multimedia support`` => ``Customise analog and hybrid tuner modules to build`` + +In this directory uncheck every driver which is activated there +(except ``Simple tuner support`` for ATSC 3rd generation only -> see case 9 please). + +Then please activate: + +- Main module part: + + ``Multimedia support`` => ``DVB/ATSC adapters`` => ``Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters`` + + #) => ``Technisat/B2C2 Air/Sky/Cable2PC PCI`` (PCI card) or + #) => ``Technisat/B2C2 Air/Sky/Cable2PC USB`` (USB 1.1 adapter) + and for troubleshooting purposes: + #) => ``Enable debug for the B2C2 FlexCop drivers`` + +- Frontend / Tuner / Demodulator module part: + + ``Multimedia support`` => ``DVB/ATSC adapters`` + => ``Customise the frontend modules to build`` ``Customise DVB frontends`` => + + - SkyStar DVB-S Revision 2.3: + + #) => ``Zarlink VP310/MT312/ZL10313 based`` + #) => ``Generic I2C PLL based tuners`` + + - SkyStar DVB-S Revision 2.6: + + #) => ``ST STV0299 based`` + #) => ``Generic I2C PLL based tuners`` + + - SkyStar DVB-S Revision 2.7: + + #) => ``Samsung S5H1420 based`` + #) => ``Integrant ITD1000 Zero IF tuner for DVB-S/DSS`` + #) => ``ISL6421 SEC controller`` + + - SkyStar DVB-S Revision 2.8: + + #) => ``Conexant CX24123 based`` + #) => ``Conexant CX24113/CX24128 tuner for DVB-S/DSS`` + #) => ``ISL6421 SEC controller`` + + - AirStar DVB-T card: + + #) => ``Zarlink MT352 based`` + #) => ``Generic I2C PLL based tuners`` + + - CableStar DVB-C card: + + #) => ``ST STV0297 based`` + #) => ``Generic I2C PLL based tuners`` + + - AirStar ATSC card 1st generation: + + #) => ``Broadcom BCM3510`` + + - AirStar ATSC card 2nd generation: + + #) => ``NxtWave Communications NXT2002/NXT2004 based`` + #) => ``Generic I2C PLL based tuners`` + + - AirStar ATSC card 3rd generation: + + #) => ``LG Electronics LGDT3302/LGDT3303 based`` + #) ``Multimedia support`` => ``Customise analog and hybrid tuner modules to build`` => ``Simple tuner support`` + diff --git a/Documentation/admin-guide/media/tm6000-cardlist.rst b/Documentation/admin-guide/media/tm6000-cardlist.rst new file mode 100644 index 000000000000..6d2769c0f4d8 --- /dev/null +++ b/Documentation/admin-guide/media/tm6000-cardlist.rst @@ -0,0 +1,83 @@ +.. SPDX-License-Identifier: GPL-2.0 + +TM6000 cards list +================= + +.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| + +.. flat-table:: + :header-rows: 1 + :widths: 2 19 18 + :stub-columns: 0 + + * - Card number + - Card name + - USB IDs + + * - 0 + - Unknown tm6000 video grabber + - + + * - 1 + - Generic tm5600 board + - 6000:0001 + + * - 2 + - Generic tm6000 board + - + + * - 3 + - Generic tm6010 board + - 6000:0002 + + * - 4 + - 10Moons UT 821 + - + + * - 5 + - 10Moons UT 330 + - + + * - 6 + - ADSTECH Dual TV USB + - 06e1:f332 + + * - 7 + - Freecom Hybrid Stick / Moka DVB-T Receiver Dual + - 14aa:0620 + + * - 8 + - ADSTECH Mini Dual TV USB + - 06e1:b339 + + * - 9 + - Hauppauge WinTV HVR-900H / WinTV USB2-Stick + - 2040:6600, 2040:6601, 2040:6610, 2040:6611 + + * - 10 + - Beholder Wander DVB-T/TV/FM USB2.0 + - 6000:dec0 + + * - 11 + - Beholder Voyager TV/FM USB2.0 + - 6000:dec1 + + * - 12 + - Terratec Cinergy Hybrid XE / Cinergy Hybrid-Stick + - 0ccd:0086, 0ccd:00A5 + + * - 13 + - Twinhan TU501(704D1) + - 13d3:3240, 13d3:3241, 13d3:3243, 13d3:3264 + + * - 14 + - Beholder Wander Lite DVB-T/TV/FM USB2.0 + - 6000:dec2 + + * - 15 + - Beholder Voyager Lite TV/FM USB2.0 + - 6000:dec3 + + * - 16 + - Terratec Grabster AV 150/250 MX + - 0ccd:0079 diff --git a/Documentation/admin-guide/media/ttusb-dec.rst b/Documentation/admin-guide/media/ttusb-dec.rst new file mode 100644 index 000000000000..516bbab8a872 --- /dev/null +++ b/Documentation/admin-guide/media/ttusb-dec.rst @@ -0,0 +1,45 @@ +.. SPDX-License-Identifier: GPL-2.0 + +TechnoTrend/Hauppauge DEC USB Driver +==================================== + +Driver Status +------------- + +Supported: + + - DEC2000-t + - DEC2450-t + - DEC3000-s + - Video Streaming + - Audio Streaming + - Section Filters + - Channel Zapping + - Hotplug firmware loader + +To Do: + + - Tuner status information + - DVB network interface + - Streaming video PC->DEC + - Conax support for 2450-t + +Getting the Firmware +-------------------- +To download the firmware, use the following commands: + +.. code-block:: none + + scripts/get_dvb_firmware dec2000t + scripts/get_dvb_firmware dec2540t + scripts/get_dvb_firmware dec3000s + + +Hotplug Firmware Loading +------------------------ + +Since 2.6 kernels, the firmware is loaded at the point that the driver module +is loaded. + +Copy the three files downloaded above into the /usr/lib/hotplug/firmware or +/lib/firmware directory (depending on configuration of firmware hotplug). diff --git a/Documentation/admin-guide/media/tuner-cardlist.rst b/Documentation/admin-guide/media/tuner-cardlist.rst new file mode 100644 index 000000000000..362617c59c5d --- /dev/null +++ b/Documentation/admin-guide/media/tuner-cardlist.rst @@ -0,0 +1,100 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Tuner cards list +================ + +============ ===================================================== +Tuner number Card name +============ ===================================================== +0 Temic PAL (4002 FH5) +1 Philips PAL_I (FI1246 and compatibles) +2 Philips NTSC (FI1236,FM1236 and compatibles) +3 Philips (SECAM+PAL_BG) (FI1216MF, FM1216MF, FR1216MF) +4 NoTuner +5 Philips PAL_BG (FI1216 and compatibles) +6 Temic NTSC (4032 FY5) +7 Temic PAL_I (4062 FY5) +8 Temic NTSC (4036 FY5) +9 Alps HSBH1 +10 Alps TSBE1 +11 Alps TSBB5 +12 Alps TSBE5 +13 Alps TSBC5 +14 Temic PAL_BG (4006FH5) +15 Alps TSCH6 +16 Temic PAL_DK (4016 FY5) +17 Philips NTSC_M (MK2) +18 Temic PAL_I (4066 FY5) +19 Temic PAL* auto (4006 FN5) +20 Temic PAL_BG (4009 FR5) or PAL_I (4069 FR5) +21 Temic NTSC (4039 FR5) +22 Temic PAL/SECAM multi (4046 FM5) +23 Philips PAL_DK (FI1256 and compatibles) +24 Philips PAL/SECAM multi (FQ1216ME) +25 LG PAL_I+FM (TAPC-I001D) +26 LG PAL_I (TAPC-I701D) +27 LG NTSC+FM (TPI8NSR01F) +28 LG PAL_BG+FM (TPI8PSB01D) +29 LG PAL_BG (TPI8PSB11D) +30 Temic PAL* auto + FM (4009 FN5) +31 SHARP NTSC_JP (2U5JF5540) +32 Samsung PAL TCPM9091PD27 +33 MT20xx universal +34 Temic PAL_BG (4106 FH5) +35 Temic PAL_DK/SECAM_L (4012 FY5) +36 Temic NTSC (4136 FY5) +37 LG PAL (newer TAPC series) +38 Philips PAL/SECAM multi (FM1216ME MK3) +39 LG NTSC (newer TAPC series) +40 HITACHI V7-J180AT +41 Philips PAL_MK (FI1216 MK) +42 Philips FCV1236D ATSC/NTSC dual in +43 Philips NTSC MK3 (FM1236MK3 or FM1236/F) +44 Philips 4 in 1 (ATI TV Wonder Pro/Conexant) +45 Microtune 4049 FM5 +46 Panasonic VP27s/ENGE4324D +47 LG NTSC (TAPE series) +48 Tenna TNF 8831 BGFF) +49 Microtune 4042 FI5 ATSC/NTSC dual in +50 TCL 2002N +51 Philips PAL/SECAM_D (FM 1256 I-H3) +52 Thomson DTT 7610 (ATSC/NTSC) +53 Philips FQ1286 +54 Philips/NXP TDA 8290/8295 + 8275/8275A/18271 +55 TCL 2002MB +56 Philips PAL/SECAM multi (FQ1216AME MK4) +57 Philips FQ1236A MK4 +58 Ymec TVision TVF-8531MF/8831MF/8731MF +59 Ymec TVision TVF-5533MF +60 Thomson DTT 761X (ATSC/NTSC) +61 Tena TNF9533-D/IF/TNF9533-B/DF +62 Philips TEA5767HN FM Radio +63 Philips FMD1216ME MK3 Hybrid Tuner +64 LG TDVS-H06xF +65 Ymec TVF66T5-B/DFF +66 LG TALN series +67 Philips TD1316 Hybrid Tuner +68 Philips TUV1236D ATSC/NTSC dual in +69 Tena TNF 5335 and similar models +70 Samsung TCPN 2121P30A +71 Xceive xc2028/xc3028 tuner +72 Thomson FE6600 +73 Samsung TCPG 6121P30A +75 Philips TEA5761 FM Radio +76 Xceive 5000 tuner +77 TCL tuner MF02GIP-5N-E +78 Philips FMD1216MEX MK3 Hybrid Tuner +79 Philips PAL/SECAM multi (FM1216 MK5) +80 Philips FQ1216LME MK3 PAL/SECAM w/active loopthrough +81 Partsnic (Daewoo) PTI-5NF05 +82 Philips CU1216L +83 NXP TDA18271 +84 Sony BTF-Pxn01Z +85 Philips FQ1236 MK5 +86 Tena TNF5337 MFD +87 Xceive 4000 tuner +88 Xceive 5000C tuner +89 Sony BTF-PG472Z PAL/SECAM +90 Sony BTF-PK467Z NTSC-M-JP +91 Sony BTF-PB463Z NTSC-M +============ ===================================================== diff --git a/Documentation/admin-guide/media/udev.rst b/Documentation/admin-guide/media/udev.rst new file mode 100644 index 000000000000..ca6c9c226902 --- /dev/null +++ b/Documentation/admin-guide/media/udev.rst @@ -0,0 +1,63 @@ +.. SPDX-License-Identifier: GPL-2.0 + +UDEV rules for DVB +================== + +.. note:: + + #) This documentation is outdated. Udev on modern distributions auto-detect + the DVB devices. + + #) **TODO:** change this document to explain how to make DVB devices + persistent, as, when a machine has multiple devices, they may be detected + on different orders, which could cause apps that relies on the device + numbers to fail. + +The DVB subsystem currently registers to the sysfs subsystem using the +"class_simple" interface. + +This means that only the basic information like module loading parameters +are presented through sysfs. Other things that might be interesting are +currently **not** available. + +Nevertheless it's now possible to add proper udev rules so that the +DVB device nodes are created automatically. + +We assume that you have udev already up and running and that have been +creating the DVB device nodes manually up to now due to the missing sysfs +support. + +0. Don't forget to disable your current method of creating the +device nodes manually. + +1. Unfortunately, you'll need a helper script to transform the kernel +sysfs device name into the well known dvb adapter / device naming scheme. +The script should be called "dvb.sh" and should be placed into a script +dir where udev can execute it, most likely /etc/udev/scripts/ + +So, create a new file /etc/udev/scripts/dvb.sh and add the following: + +.. code-block:: none + + #!/bin/sh + /bin/echo $1 | /bin/sed -e 's,dvb\([0-9]\)\.\([^0-9]*\)\([0-9]\),dvb/adapter\1/\2\3,' + +Don't forget to make the script executable with "chmod". + +1. You need to create a proper udev rule that will create the device nodes +like you know them. All real distributions out there scan the /etc/udev/rules.d +directory for rule files. The main udev configuration file /etc/udev/udev.conf +will tell you the directory where the rules are, most likely it's /etc/udev/rules.d/ + +Create a new rule file in that directory called "dvb.rule" and add the following line: + +.. code-block:: none + + KERNEL="dvb*", PROGRAM="/etc/udev/scripts/dvb.sh %k", NAME="%c" + +If you want more control over the device nodes (for example a special group membership) +have a look at "man udev". + +For every device that registers to the sysfs subsystem with a "dvb" prefix, +the helper script /etc/udev/scripts/dvb.sh is invoked, which will then +create the proper device node in your /dev/ directory. diff --git a/Documentation/admin-guide/media/usbvision-cardlist.rst b/Documentation/admin-guide/media/usbvision-cardlist.rst new file mode 100644 index 000000000000..6aee115ee6e2 --- /dev/null +++ b/Documentation/admin-guide/media/usbvision-cardlist.rst @@ -0,0 +1,283 @@ +.. SPDX-License-Identifier: GPL-2.0 + +USBvision cards list +==================== + +.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| + +.. flat-table:: + :header-rows: 1 + :widths: 2 19 18 + :stub-columns: 0 + + * - Card number + - Card name + - USB IDs + + * - 0 + - Xanboo + - 0a6f:0400 + + * - 1 + - Belkin USB VideoBus II Adapter + - 050d:0106 + + * - 2 + - Belkin Components USB VideoBus + - 050d:0207 + + * - 3 + - Belkin USB VideoBus II + - 050d:0208 + + * - 4 + - echoFX InterView Lite + - 0571:0002 + + * - 5 + - USBGear USBG-V1 resp. HAMA USB + - 0573:0003 + + * - 6 + - D-Link V100 + - 0573:0400 + + * - 7 + - X10 USB Camera + - 0573:2000 + + * - 8 + - Hauppauge WinTV USB Live (PAL B/G) + - 0573:2d00 + + * - 9 + - Hauppauge WinTV USB Live Pro (NTSC M/N) + - 0573:2d01 + + * - 10 + - Zoran Co. PMD (Nogatech) AV-grabber Manhattan + - 0573:2101 + + * - 11 + - Nogatech USB-TV (NTSC) FM + - 0573:4100 + + * - 12 + - PNY USB-TV (NTSC) FM + - 0573:4110 + + * - 13 + - PixelView PlayTv-USB PRO (PAL) FM + - 0573:4450 + + * - 14 + - ZTV ZT-721 2.4GHz USB A/V Receiver + - 0573:4550 + + * - 15 + - Hauppauge WinTV USB (NTSC M/N) + - 0573:4d00 + + * - 16 + - Hauppauge WinTV USB (PAL B/G) + - 0573:4d01 + + * - 17 + - Hauppauge WinTV USB (PAL I) + - 0573:4d02 + + * - 18 + - Hauppauge WinTV USB (PAL/SECAM L) + - 0573:4d03 + + * - 19 + - Hauppauge WinTV USB (PAL D/K) + - 0573:4d04 + + * - 20 + - Hauppauge WinTV USB (NTSC FM) + - 0573:4d10 + + * - 21 + - Hauppauge WinTV USB (PAL B/G FM) + - 0573:4d11 + + * - 22 + - Hauppauge WinTV USB (PAL I FM) + - 0573:4d12 + + * - 23 + - Hauppauge WinTV USB (PAL D/K FM) + - 0573:4d14 + + * - 24 + - Hauppauge WinTV USB Pro (NTSC M/N) + - 0573:4d2a + + * - 25 + - Hauppauge WinTV USB Pro (NTSC M/N) V2 + - 0573:4d2b + + * - 26 + - Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L) + - 0573:4d2c + + * - 27 + - Hauppauge WinTV USB Pro (NTSC M/N) V3 + - 0573:4d20 + + * - 28 + - Hauppauge WinTV USB Pro (PAL B/G) + - 0573:4d21 + + * - 29 + - Hauppauge WinTV USB Pro (PAL I) + - 0573:4d22 + + * - 30 + - Hauppauge WinTV USB Pro (PAL/SECAM L) + - 0573:4d23 + + * - 31 + - Hauppauge WinTV USB Pro (PAL D/K) + - 0573:4d24 + + * - 32 + - Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) + - 0573:4d25 + + * - 33 + - Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) V2 + - 0573:4d26 + + * - 34 + - Hauppauge WinTV USB Pro (PAL B/G) V2 + - 0573:4d27 + + * - 35 + - Hauppauge WinTV USB Pro (PAL B/G,D/K) + - 0573:4d28 + + * - 36 + - Hauppauge WinTV USB Pro (PAL I,D/K) + - 0573:4d29 + + * - 37 + - Hauppauge WinTV USB Pro (NTSC M/N FM) + - 0573:4d30 + + * - 38 + - Hauppauge WinTV USB Pro (PAL B/G FM) + - 0573:4d31 + + * - 39 + - Hauppauge WinTV USB Pro (PAL I FM) + - 0573:4d32 + + * - 40 + - Hauppauge WinTV USB Pro (PAL D/K FM) + - 0573:4d34 + + * - 41 + - Hauppauge WinTV USB Pro (Temic PAL/SECAM B/G/I/D/K/L FM) + - 0573:4d35 + + * - 42 + - Hauppauge WinTV USB Pro (Temic PAL B/G FM) + - 0573:4d36 + + * - 43 + - Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L FM) + - 0573:4d37 + + * - 44 + - Hauppauge WinTV USB Pro (NTSC M/N FM) V2 + - 0573:4d38 + + * - 45 + - Camtel Technology USB TV Genie Pro FM Model TVB330 + - 0768:0006 + + * - 46 + - Digital Video Creator I + - 07d0:0001 + + * - 47 + - Global Village GV-007 (NTSC) + - 07d0:0002 + + * - 48 + - Dazzle Fusion Model DVC-50 Rev 1 (NTSC) + - 07d0:0003 + + * - 49 + - Dazzle Fusion Model DVC-80 Rev 1 (PAL) + - 07d0:0004 + + * - 50 + - Dazzle Fusion Model DVC-90 Rev 1 (SECAM) + - 07d0:0005 + + * - 51 + - Eskape Labs MyTV2Go + - 07f8:9104 + + * - 52 + - Pinnacle Studio PCTV USB (PAL) + - 2304:010d + + * - 53 + - Pinnacle Studio PCTV USB (SECAM) + - 2304:0109 + + * - 54 + - Pinnacle Studio PCTV USB (PAL) FM + - 2304:0110 + + * - 55 + - Miro PCTV USB + - 2304:0111 + + * - 56 + - Pinnacle Studio PCTV USB (NTSC) FM + - 2304:0112 + + * - 57 + - Pinnacle Studio PCTV USB (PAL) FM V2 + - 2304:0210 + + * - 58 + - Pinnacle Studio PCTV USB (NTSC) FM V2 + - 2304:0212 + + * - 59 + - Pinnacle Studio PCTV USB (PAL) FM V3 + - 2304:0214 + + * - 60 + - Pinnacle Studio Linx Video input cable (NTSC) + - 2304:0300 + + * - 61 + - Pinnacle Studio Linx Video input cable (PAL) + - 2304:0301 + + * - 62 + - Pinnacle PCTV Bungee USB (PAL) FM + - 2304:0419 + + * - 63 + - Hauppauge WinTv-USB + - 2400:4200 + + * - 64 + - Pinnacle Studio PCTV USB (NTSC) FM V3 + - 2304:0113 + + * - 65 + - Nogatech USB MicroCam NTSC (NV3000N) + - 0573:3000 + + * - 66 + - Nogatech USB MicroCam PAL (NV3001P) + - 0573:3001 diff --git a/Documentation/admin-guide/media/v4l-with-ir.rst b/Documentation/admin-guide/media/v4l-with-ir.rst new file mode 100644 index 000000000000..ce23c8a7bc93 --- /dev/null +++ b/Documentation/admin-guide/media/v4l-with-ir.rst @@ -0,0 +1,75 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Infrared remote control support in video4linux drivers +====================================================== + +Authors: Gerd Hoffmann, Mauro Carvalho Chehab + +Basics +------ + +Most analog and digital TV boards support remote controllers. Several of +them have a microprocessor that receives the IR carriers, convert into +pulse/space sequences and then to scan codes, returning such codes to +userspace ("scancode mode"). Other boards return just the pulse/space +sequences ("raw mode"). + +The support for remote controller in scancode mode is provided by the +standard Linux input layer. The support for raw mode is provided via LIRC. + +In order to check the support and test it, it is suggested to download +the `v4l-utils `_. It provides +two tools to handle remote controllers: + +- ir-keytable: provides a way to query the remote controller, list the + protocols it supports, enable in-kernel support for IR decoder or + switch the protocol and to test the reception of scan codes; + +- ir-ctl: provide tools to handle remote controllers that support raw mode + via LIRC interface. + +Usually, the remote controller module is auto-loaded when the TV card is +detected. However, for a few devices, you need to manually load the +ir-kbd-i2c module. + +How it works +------------ + +The modules register the remote as keyboard within the linux input +layer, i.e. you'll see the keys of the remote as normal key strokes +(if CONFIG_INPUT_KEYBOARD is enabled). + +Using the event devices (CONFIG_INPUT_EVDEV) it is possible for +applications to access the remote via /dev/input/event devices. +The udev/systemd will automatically create the devices. If you install +the `v4l-utils `_, it may also +automatically load a different keytable than the default one. Please see +`v4l-utils `_ ir-keytable.1 +man page for details. + +The ir-keytable tool is nice for trouble shooting, i.e. to check +whenever the input device is really present, which of the devices it +is, check whenever pressing keys on the remote actually generates +events and the like. You can also use any other input utility that changes +the keymaps, like the input kbd utility. + + +Using with lircd +================ + +The latest versions of the lircd daemon supports reading events from the +linux input layer (via event device). It also supports receiving IR codes +in lirc mode. + + +Using without lircd +=================== + +Xorg recognizes several IR keycodes that have its numerical value lower +than 247. With the advent of Wayland, the input driver got updated too, +and should now accept all keycodes. Yet, you may want to just reasign +the keycodes to something that your favorite media application likes. + +This can be done by setting +`v4l-utils `_ to load your own +keytable in runtime. Please read ir-keytable.1 man page for details. diff --git a/Documentation/admin-guide/media/vimc.dot b/Documentation/admin-guide/media/vimc.dot new file mode 100644 index 000000000000..57863a13fa39 --- /dev/null +++ b/Documentation/admin-guide/media/vimc.dot @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: GPL-2.0 + +digraph board { + rankdir=TB + n00000001 [label="{{} | Sensor A\n/dev/v4l-subdev0 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] + n00000001:port0 -> n00000005:port0 [style=bold] + n00000001:port0 -> n0000000b [style=bold] + n00000003 [label="{{} | Sensor B\n/dev/v4l-subdev1 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] + n00000003:port0 -> n00000008:port0 [style=bold] + n00000003:port0 -> n0000000f [style=bold] + n00000005 [label="{{ 0} | Debayer A\n/dev/v4l-subdev2 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000005:port1 -> n00000017:port0 + n00000008 [label="{{ 0} | Debayer B\n/dev/v4l-subdev3 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000008:port1 -> n00000017:port0 [style=dashed] + n0000000b [label="Raw Capture 0\n/dev/video0", shape=box, style=filled, fillcolor=yellow] + n0000000f [label="Raw Capture 1\n/dev/video1", shape=box, style=filled, fillcolor=yellow] + n00000013 [label="RGB/YUV Input\n/dev/video2", shape=box, style=filled, fillcolor=yellow] + n00000013 -> n00000017:port0 [style=dashed] + n00000017 [label="{{ 0} | Scaler\n/dev/v4l-subdev4 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] + n00000017:port1 -> n0000001a [style=bold] + n0000001a [label="RGB/YUV Capture\n/dev/video3", shape=box, style=filled, fillcolor=yellow] +} diff --git a/Documentation/admin-guide/media/vimc.rst b/Documentation/admin-guide/media/vimc.rst new file mode 100644 index 000000000000..211cc8972410 --- /dev/null +++ b/Documentation/admin-guide/media/vimc.rst @@ -0,0 +1,90 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The Virtual Media Controller Driver (vimc) +========================================== + +The vimc driver emulates complex video hardware using the V4L2 API and the Media +API. It has a capture device and three subdevices: sensor, debayer and scaler. + +Topology +-------- + +The topology is hardcoded, although you could modify it in vimc-core and +recompile the driver to achieve your own topology. This is the default topology: + +.. _vimc_topology_graph: + +.. kernel-figure:: vimc.dot + :alt: Diagram of the default media pipeline topology + :align: center + + Media pipeline graph on vimc + +Configuring the topology +~~~~~~~~~~~~~~~~~~~~~~~~ + +Each subdevice will come with its default configuration (pixelformat, height, +width, ...). One needs to configure the topology in order to match the +configuration on each linked subdevice to stream frames through the pipeline. +If the configuration doesn't match, the stream will fail. The ``v4l-utils`` +package is a bundle of user-space applications, that comes with ``media-ctl`` and +``v4l2-ctl`` that can be used to configure the vimc configuration. This sequence +of commands fits for the default topology: + +.. code-block:: bash + + media-ctl -d platform:vimc -V '"Sensor A":0[fmt:SBGGR8_1X8/640x480]' + media-ctl -d platform:vimc -V '"Debayer A":0[fmt:SBGGR8_1X8/640x480]' + media-ctl -d platform:vimc -V '"Sensor B":0[fmt:SBGGR8_1X8/640x480]' + media-ctl -d platform:vimc -V '"Debayer B":0[fmt:SBGGR8_1X8/640x480]' + v4l2-ctl -z platform:vimc -d "RGB/YUV Capture" -v width=1920,height=1440 + v4l2-ctl -z platform:vimc -d "Raw Capture 0" -v pixelformat=BA81 + v4l2-ctl -z platform:vimc -d "Raw Capture 1" -v pixelformat=BA81 + +Subdevices +---------- + +Subdevices define the behavior of an entity in the topology. Depending on the +subdevice, the entity can have multiple pads of type source or sink. + +vimc-sensor: + Generates images in several formats using video test pattern generator. + Exposes: + + * 1 Pad source + +vimc-debayer: + Transforms images in bayer format into a non-bayer format. + Exposes: + + * 1 Pad sink + * 1 Pad source + +vimc-scaler: + Scale up the image by a factor of 3. E.g.: a 640x480 image becomes a + 1920x1440 image. (this value can be configured, see at + `Module options`_). + Exposes: + + * 1 Pad sink + * 1 Pad source + +vimc-capture: + Exposes node /dev/videoX to allow userspace to capture the stream. + Exposes: + + * 1 Pad sink + * 1 Pad source + + +Module options +-------------- + +Vimc has a module parameter to configure the driver. + +* ``sca_mult=`` + + Image size multiplier factor to be used to multiply both width and + height, so the image size will be ``sca_mult^2`` bigger than the + original one. Currently, only supports scaling up (the default value + is 3). diff --git a/Documentation/admin-guide/media/vivid.rst b/Documentation/admin-guide/media/vivid.rst new file mode 100644 index 000000000000..52e57b773f07 --- /dev/null +++ b/Documentation/admin-guide/media/vivid.rst @@ -0,0 +1,1393 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The Virtual Video Test Driver (vivid) +===================================== + +This driver emulates video4linux hardware of various types: video capture, video +output, vbi capture and output, metadata capture and output, radio receivers and +transmitters, touch capture and a software defined radio receiver. In addition a +simple framebuffer device is available for testing capture and output overlays. + +Up to 64 vivid instances can be created, each with up to 16 inputs and 16 outputs. + +Each input can be a webcam, TV capture device, S-Video capture device or an HDMI +capture device. Each output can be an S-Video output device or an HDMI output +device. + +These inputs and outputs act exactly as a real hardware device would behave. This +allows you to use this driver as a test input for application development, since +you can test the various features without requiring special hardware. + +This document describes the features implemented by this driver: + +- Support for read()/write(), MMAP, USERPTR and DMABUF streaming I/O. +- A large list of test patterns and variations thereof +- Working brightness, contrast, saturation and hue controls +- Support for the alpha color component +- Full colorspace support, including limited/full RGB range +- All possible control types are present +- Support for various pixel aspect ratios and video aspect ratios +- Error injection to test what happens if errors occur +- Supports crop/compose/scale in any combination for both input and output +- Can emulate up to 4K resolutions +- All Field settings are supported for testing interlaced capturing +- Supports all standard YUV and RGB formats, including two multiplanar YUV formats +- Raw and Sliced VBI capture and output support +- Radio receiver and transmitter support, including RDS support +- Software defined radio (SDR) support +- Capture and output overlay support +- Metadata capture and output support +- Touch capture support + +These features will be described in more detail below. + +Configuring the driver +---------------------- + +By default the driver will create a single instance that has a video capture +device with webcam, TV, S-Video and HDMI inputs, a video output device with +S-Video and HDMI outputs, one vbi capture device, one vbi output device, one +radio receiver device, one radio transmitter device and one SDR device. + +The number of instances, devices, video inputs and outputs and their types are +all configurable using the following module options: + +- n_devs: + + number of driver instances to create. By default set to 1. Up to 64 + instances can be created. + +- node_types: + + which devices should each driver instance create. An array of + hexadecimal values, one for each instance. The default is 0x1d3d. + Each value is a bitmask with the following meaning: + + - bit 0: Video Capture node + - bit 2-3: VBI Capture node: 0 = none, 1 = raw vbi, 2 = sliced vbi, 3 = both + - bit 4: Radio Receiver node + - bit 5: Software Defined Radio Receiver node + - bit 8: Video Output node + - bit 10-11: VBI Output node: 0 = none, 1 = raw vbi, 2 = sliced vbi, 3 = both + - bit 12: Radio Transmitter node + - bit 16: Framebuffer for testing overlays + - bit 17: Metadata Capture node + - bit 18: Metadata Output node + - bit 19: Touch Capture node + + So to create four instances, the first two with just one video capture + device, the second two with just one video output device you would pass + these module options to vivid: + + .. code-block:: none + + n_devs=4 node_types=0x1,0x1,0x100,0x100 + +- num_inputs: + + the number of inputs, one for each instance. By default 4 inputs + are created for each video capture device. At most 16 inputs can be created, + and there must be at least one. + +- input_types: + + the input types for each instance, the default is 0xe4. This defines + what the type of each input is when the inputs are created for each driver + instance. This is a hexadecimal value with up to 16 pairs of bits, each + pair gives the type and bits 0-1 map to input 0, bits 2-3 map to input 1, + 30-31 map to input 15. Each pair of bits has the following meaning: + + - 00: this is a webcam input + - 01: this is a TV tuner input + - 10: this is an S-Video input + - 11: this is an HDMI input + + So to create a video capture device with 8 inputs where input 0 is a TV + tuner, inputs 1-3 are S-Video inputs and inputs 4-7 are HDMI inputs you + would use the following module options: + + .. code-block:: none + + num_inputs=8 input_types=0xffa9 + +- num_outputs: + + the number of outputs, one for each instance. By default 2 outputs + are created for each video output device. At most 16 outputs can be + created, and there must be at least one. + +- output_types: + + the output types for each instance, the default is 0x02. This defines + what the type of each output is when the outputs are created for each + driver instance. This is a hexadecimal value with up to 16 bits, each bit + gives the type and bit 0 maps to output 0, bit 1 maps to output 1, bit + 15 maps to output 15. The meaning of each bit is as follows: + + - 0: this is an S-Video output + - 1: this is an HDMI output + + So to create a video output device with 8 outputs where outputs 0-3 are + S-Video outputs and outputs 4-7 are HDMI outputs you would use the + following module options: + + .. code-block:: none + + num_outputs=8 output_types=0xf0 + +- vid_cap_nr: + + give the desired videoX start number for each video capture device. + The default is -1 which will just take the first free number. This allows + you to map capture video nodes to specific videoX device nodes. Example: + + .. code-block:: none + + n_devs=4 vid_cap_nr=2,4,6,8 + + This will attempt to assign /dev/video2 for the video capture device of + the first vivid instance, video4 for the next up to video8 for the last + instance. If it can't succeed, then it will just take the next free + number. + +- vid_out_nr: + + give the desired videoX start number for each video output device. + The default is -1 which will just take the first free number. + +- vbi_cap_nr: + + give the desired vbiX start number for each vbi capture device. + The default is -1 which will just take the first free number. + +- vbi_out_nr: + + give the desired vbiX start number for each vbi output device. + The default is -1 which will just take the first free number. + +- radio_rx_nr: + + give the desired radioX start number for each radio receiver device. + The default is -1 which will just take the first free number. + +- radio_tx_nr: + + give the desired radioX start number for each radio transmitter + device. The default is -1 which will just take the first free number. + +- sdr_cap_nr: + + give the desired swradioX start number for each SDR capture device. + The default is -1 which will just take the first free number. + +- meta_cap_nr: + + give the desired videoX start number for each metadata capture device. + The default is -1 which will just take the first free number. + +- meta_out_nr: + + give the desired videoX start number for each metadata output device. + The default is -1 which will just take the first free number. + +- touch_cap_nr: + + give the desired v4l-touchX start number for each touch capture device. + The default is -1 which will just take the first free number. + +- ccs_cap_mode: + + specify the allowed video capture crop/compose/scaling combination + for each driver instance. Video capture devices can have any combination + of cropping, composing and scaling capabilities and this will tell the + vivid driver which of those is should emulate. By default the user can + select this through controls. + + The value is either -1 (controlled by the user) or a set of three bits, + each enabling (1) or disabling (0) one of the features: + + - bit 0: + + Enable crop support. Cropping will take only part of the + incoming picture. + - bit 1: + + Enable compose support. Composing will copy the incoming + picture into a larger buffer. + + - bit 2: + + Enable scaling support. Scaling can scale the incoming + picture. The scaler of the vivid driver can enlarge up + or down to four times the original size. The scaler is + very simple and low-quality. Simplicity and speed were + key, not quality. + + Note that this value is ignored by webcam inputs: those enumerate + discrete framesizes and that is incompatible with cropping, composing + or scaling. + +- ccs_out_mode: + + specify the allowed video output crop/compose/scaling combination + for each driver instance. Video output devices can have any combination + of cropping, composing and scaling capabilities and this will tell the + vivid driver which of those is should emulate. By default the user can + select this through controls. + + The value is either -1 (controlled by the user) or a set of three bits, + each enabling (1) or disabling (0) one of the features: + + - bit 0: + + Enable crop support. Cropping will take only part of the + outgoing buffer. + + - bit 1: + + Enable compose support. Composing will copy the incoming + buffer into a larger picture frame. + + - bit 2: + + Enable scaling support. Scaling can scale the incoming + buffer. The scaler of the vivid driver can enlarge up + or down to four times the original size. The scaler is + very simple and low-quality. Simplicity and speed were + key, not quality. + +- multiplanar: + + select whether each device instance supports multi-planar formats, + and thus the V4L2 multi-planar API. By default device instances are + single-planar. + + This module option can override that for each instance. Values are: + + - 1: this is a single-planar instance. + - 2: this is a multi-planar instance. + +- vivid_debug: + + enable driver debugging info + +- no_error_inj: + + if set disable the error injecting controls. This option is + needed in order to run a tool like v4l2-compliance. Tools like that + exercise all controls including a control like 'Disconnect' which + emulates a USB disconnect, making the device inaccessible and so + all tests that v4l2-compliance is doing will fail afterwards. + + There may be other situations as well where you want to disable the + error injection support of vivid. When this option is set, then the + controls that select crop, compose and scale behavior are also + removed. Unless overridden by ccs_cap_mode and/or ccs_out_mode the + will default to enabling crop, compose and scaling. + +- allocators: + + memory allocator selection, default is 0. It specifies the way buffers + will be allocated. + + - 0: vmalloc + - 1: dma-contig + +Taken together, all these module options allow you to precisely customize +the driver behavior and test your application with all sorts of permutations. +It is also very suitable to emulate hardware that is not yet available, e.g. +when developing software for a new upcoming device. + + +Video Capture +------------- + +This is probably the most frequently used feature. The video capture device +can be configured by using the module options num_inputs, input_types and +ccs_cap_mode (see section 1 for more detailed information), but by default +four inputs are configured: a webcam, a TV tuner, an S-Video and an HDMI +input, one input for each input type. Those are described in more detail +below. + +Special attention has been given to the rate at which new frames become +available. The jitter will be around 1 jiffie (that depends on the HZ +configuration of your kernel, so usually 1/100, 1/250 or 1/1000 of a second), +but the long-term behavior is exactly following the framerate. So a +framerate of 59.94 Hz is really different from 60 Hz. If the framerate +exceeds your kernel's HZ value, then you will get dropped frames, but the +frame/field sequence counting will keep track of that so the sequence +count will skip whenever frames are dropped. + + +Webcam Input +~~~~~~~~~~~~ + +The webcam input supports three framesizes: 320x180, 640x360 and 1280x720. It +supports frames per second settings of 10, 15, 25, 30, 50 and 60 fps. Which ones +are available depends on the chosen framesize: the larger the framesize, the +lower the maximum frames per second. + +The initially selected colorspace when you switch to the webcam input will be +sRGB. + + +TV and S-Video Inputs +~~~~~~~~~~~~~~~~~~~~~ + +The only difference between the TV and S-Video input is that the TV has a +tuner. Otherwise they behave identically. + +These inputs support audio inputs as well: one TV and one Line-In. They +both support all TV standards. If the standard is queried, then the Vivid +controls 'Standard Signal Mode' and 'Standard' determine what +the result will be. + +These inputs support all combinations of the field setting. Special care has +been taken to faithfully reproduce how fields are handled for the different +TV standards. This is particularly noticeable when generating a horizontally +moving image so the temporal effect of using interlaced formats becomes clearly +visible. For 50 Hz standards the top field is the oldest and the bottom field +is the newest in time. For 60 Hz standards that is reversed: the bottom field +is the oldest and the top field is the newest in time. + +When you start capturing in V4L2_FIELD_ALTERNATE mode the first buffer will +contain the top field for 50 Hz standards and the bottom field for 60 Hz +standards. This is what capture hardware does as well. + +Finally, for PAL/SECAM standards the first half of the top line contains noise. +This simulates the Wide Screen Signal that is commonly placed there. + +The initially selected colorspace when you switch to the TV or S-Video input +will be SMPTE-170M. + +The pixel aspect ratio will depend on the TV standard. The video aspect ratio +can be selected through the 'Standard Aspect Ratio' Vivid control. +Choices are '4x3', '16x9' which will give letterboxed widescreen video and +'16x9 Anamorphic' which will give full screen squashed anamorphic widescreen +video that will need to be scaled accordingly. + +The TV 'tuner' supports a frequency range of 44-958 MHz. Channels are available +every 6 MHz, starting from 49.25 MHz. For each channel the generated image +will be in color for the +/- 0.25 MHz around it, and in grayscale for ++/- 1 MHz around the channel. Beyond that it is just noise. The VIDIOC_G_TUNER +ioctl will return 100% signal strength for +/- 0.25 MHz and 50% for +/- 1 MHz. +It will also return correct afc values to show whether the frequency is too +low or too high. + +The audio subchannels that are returned are MONO for the +/- 1 MHz range around +a valid channel frequency. When the frequency is within +/- 0.25 MHz of the +channel it will return either MONO, STEREO, either MONO | SAP (for NTSC) or +LANG1 | LANG2 (for others), or STEREO | SAP. + +Which one is returned depends on the chosen channel, each next valid channel +will cycle through the possible audio subchannel combinations. This allows +you to test the various combinations by just switching channels.. + +Finally, for these inputs the v4l2_timecode struct is filled in in the +dequeued v4l2_buffer struct. + + +HDMI Input +~~~~~~~~~~ + +The HDMI inputs supports all CEA-861 and DMT timings, both progressive and +interlaced, for pixelclock frequencies between 25 and 600 MHz. The field +mode for interlaced formats is always V4L2_FIELD_ALTERNATE. For HDMI the +field order is always top field first, and when you start capturing an +interlaced format you will receive the top field first. + +The initially selected colorspace when you switch to the HDMI input or +select an HDMI timing is based on the format resolution: for resolutions +less than or equal to 720x576 the colorspace is set to SMPTE-170M, for +others it is set to REC-709 (CEA-861 timings) or sRGB (VESA DMT timings). + +The pixel aspect ratio will depend on the HDMI timing: for 720x480 is it +set as for the NTSC TV standard, for 720x576 it is set as for the PAL TV +standard, and for all others a 1:1 pixel aspect ratio is returned. + +The video aspect ratio can be selected through the 'DV Timings Aspect Ratio' +Vivid control. Choices are 'Source Width x Height' (just use the +same ratio as the chosen format), '4x3' or '16x9', either of which can +result in pillarboxed or letterboxed video. + +For HDMI inputs it is possible to set the EDID. By default a simple EDID +is provided. You can only set the EDID for HDMI inputs. Internally, however, +the EDID is shared between all HDMI inputs. + +No interpretation is done of the EDID data with the exception of the +physical address. See the CEC section for more details. + +There is a maximum of 15 HDMI inputs (if there are more, then they will be +reduced to 15) since that's the limitation of the EDID physical address. + + +Video Output +------------ + +The video output device can be configured by using the module options +num_outputs, output_types and ccs_out_mode (see section 1 for more detailed +information), but by default two outputs are configured: an S-Video and an +HDMI input, one output for each output type. Those are described in more detail +below. + +Like with video capture the framerate is also exact in the long term. + + +S-Video Output +~~~~~~~~~~~~~~ + +This output supports audio outputs as well: "Line-Out 1" and "Line-Out 2". +The S-Video output supports all TV standards. + +This output supports all combinations of the field setting. + +The initially selected colorspace when you switch to the TV or S-Video input +will be SMPTE-170M. + + +HDMI Output +~~~~~~~~~~~ + +The HDMI output supports all CEA-861 and DMT timings, both progressive and +interlaced, for pixelclock frequencies between 25 and 600 MHz. The field +mode for interlaced formats is always V4L2_FIELD_ALTERNATE. + +The initially selected colorspace when you switch to the HDMI output or +select an HDMI timing is based on the format resolution: for resolutions +less than or equal to 720x576 the colorspace is set to SMPTE-170M, for +others it is set to REC-709 (CEA-861 timings) or sRGB (VESA DMT timings). + +The pixel aspect ratio will depend on the HDMI timing: for 720x480 is it +set as for the NTSC TV standard, for 720x576 it is set as for the PAL TV +standard, and for all others a 1:1 pixel aspect ratio is returned. + +An HDMI output has a valid EDID which can be obtained through VIDIOC_G_EDID. + +There is a maximum of 15 HDMI outputs (if there are more, then they will be +reduced to 15) since that's the limitation of the EDID physical address. See +also the CEC section for more details. + +VBI Capture +----------- + +There are three types of VBI capture devices: those that only support raw +(undecoded) VBI, those that only support sliced (decoded) VBI and those that +support both. This is determined by the node_types module option. In all +cases the driver will generate valid VBI data: for 60 Hz standards it will +generate Closed Caption and XDS data. The closed caption stream will +alternate between "Hello world!" and "Closed captions test" every second. +The XDS stream will give the current time once a minute. For 50 Hz standards +it will generate the Wide Screen Signal which is based on the actual Video +Aspect Ratio control setting and teletext pages 100-159, one page per frame. + +The VBI device will only work for the S-Video and TV inputs, it will give +back an error if the current input is a webcam or HDMI. + + +VBI Output +---------- + +There are three types of VBI output devices: those that only support raw +(undecoded) VBI, those that only support sliced (decoded) VBI and those that +support both. This is determined by the node_types module option. + +The sliced VBI output supports the Wide Screen Signal and the teletext signal +for 50 Hz standards and Closed Captioning + XDS for 60 Hz standards. + +The VBI device will only work for the S-Video output, it will give +back an error if the current output is HDMI. + + +Radio Receiver +-------------- + +The radio receiver emulates an FM/AM/SW receiver. The FM band also supports RDS. +The frequency ranges are: + + - FM: 64 MHz - 108 MHz + - AM: 520 kHz - 1710 kHz + - SW: 2300 kHz - 26.1 MHz + +Valid channels are emulated every 1 MHz for FM and every 100 kHz for AM and SW. +The signal strength decreases the further the frequency is from the valid +frequency until it becomes 0% at +/- 50 kHz (FM) or 5 kHz (AM/SW) from the +ideal frequency. The initial frequency when the driver is loaded is set to +95 MHz. + +The FM receiver supports RDS as well, both using 'Block I/O' and 'Controls' +modes. In the 'Controls' mode the RDS information is stored in read-only +controls. These controls are updated every time the frequency is changed, +or when the tuner status is requested. The Block I/O method uses the read() +interface to pass the RDS blocks on to the application for decoding. + +The RDS signal is 'detected' for +/- 12.5 kHz around the channel frequency, +and the further the frequency is away from the valid frequency the more RDS +errors are randomly introduced into the block I/O stream, up to 50% of all +blocks if you are +/- 12.5 kHz from the channel frequency. All four errors +can occur in equal proportions: blocks marked 'CORRECTED', blocks marked +'ERROR', blocks marked 'INVALID' and dropped blocks. + +The generated RDS stream contains all the standard fields contained in a +0B group, and also radio text and the current time. + +The receiver supports HW frequency seek, either in Bounded mode, Wrap Around +mode or both, which is configurable with the "Radio HW Seek Mode" control. + + +Radio Transmitter +----------------- + +The radio transmitter emulates an FM/AM/SW transmitter. The FM band also supports RDS. +The frequency ranges are: + + - FM: 64 MHz - 108 MHz + - AM: 520 kHz - 1710 kHz + - SW: 2300 kHz - 26.1 MHz + +The initial frequency when the driver is loaded is 95.5 MHz. + +The FM transmitter supports RDS as well, both using 'Block I/O' and 'Controls' +modes. In the 'Controls' mode the transmitted RDS information is configured +using controls, and in 'Block I/O' mode the blocks are passed to the driver +using write(). + + +Software Defined Radio Receiver +------------------------------- + +The SDR receiver has three frequency bands for the ADC tuner: + + - 300 kHz + - 900 kHz - 2800 kHz + - 3200 kHz + +The RF tuner supports 50 MHz - 2000 MHz. + +The generated data contains the In-phase and Quadrature components of a +1 kHz tone that has an amplitude of sqrt(2). + + +Metadata Capture +---------------- + +The Metadata capture generates UVC format metadata. The PTS and SCR are +transmitted based on the values set in vivid contols. + +The Metadata device will only work for the Webcam input, it will give +back an error for all other inputs. + + +Metadata Output +--------------- + +The Metadata output can be used to set brightness, contrast, saturation and hue. + +The Metadata device will only work for the Webcam output, it will give +back an error for all other outputs. + + +Touch Capture +------------- + +The Touch capture generates touch patterns simulating single tap, double tap, +triple tap, move from left to right, zoom in, zoom out, palm press (simulating +a large area being pressed on a touchpad), and simulating 16 simultaneous +touch points. + +Controls +-------- + +Different devices support different controls. The sections below will describe +each control and which devices support them. + + +User Controls - Test Controls +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The Button, Boolean, Integer 32 Bits, Integer 64 Bits, Menu, String, Bitmask and +Integer Menu are controls that represent all possible control types. The Menu +control and the Integer Menu control both have 'holes' in their menu list, +meaning that one or more menu items return EINVAL when VIDIOC_QUERYMENU is called. +Both menu controls also have a non-zero minimum control value. These features +allow you to check if your application can handle such things correctly. +These controls are supported for every device type. + + +User Controls - Video Capture +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The following controls are specific to video capture. + +The Brightness, Contrast, Saturation and Hue controls actually work and are +standard. There is one special feature with the Brightness control: each +video input has its own brightness value, so changing input will restore +the brightness for that input. In addition, each video input uses a different +brightness range (minimum and maximum control values). Switching inputs will +cause a control event to be sent with the V4L2_EVENT_CTRL_CH_RANGE flag set. +This allows you to test controls that can change their range. + +The 'Gain, Automatic' and Gain controls can be used to test volatile controls: +if 'Gain, Automatic' is set, then the Gain control is volatile and changes +constantly. If 'Gain, Automatic' is cleared, then the Gain control is a normal +control. + +The 'Horizontal Flip' and 'Vertical Flip' controls can be used to flip the +image. These combine with the 'Sensor Flipped Horizontally/Vertically' Vivid +controls. + +The 'Alpha Component' control can be used to set the alpha component for +formats containing an alpha channel. + + +User Controls - Audio +~~~~~~~~~~~~~~~~~~~~~ + +The following controls are specific to video capture and output and radio +receivers and transmitters. + +The 'Volume' and 'Mute' audio controls are typical for such devices to +control the volume and mute the audio. They don't actually do anything in +the vivid driver. + + +Vivid Controls +~~~~~~~~~~~~~~ + +These vivid custom controls control the image generation, error injection, etc. + + +Test Pattern Controls +^^^^^^^^^^^^^^^^^^^^^ + +The Test Pattern Controls are all specific to video capture. + +- Test Pattern: + + selects which test pattern to use. Use the CSC Colorbar for + testing colorspace conversions: the colors used in that test pattern + map to valid colors in all colorspaces. The colorspace conversion + is disabled for the other test patterns. + +- OSD Text Mode: + + selects whether the text superimposed on the + test pattern should be shown, and if so, whether only counters should + be displayed or the full text. + +- Horizontal Movement: + + selects whether the test pattern should + move to the left or right and at what speed. + +- Vertical Movement: + + does the same for the vertical direction. + +- Show Border: + + show a two-pixel wide border at the edge of the actual image, + excluding letter or pillarboxing. + +- Show Square: + + show a square in the middle of the image. If the image is + displayed with the correct pixel and image aspect ratio corrections, + then the width and height of the square on the monitor should be + the same. + +- Insert SAV Code in Image: + + adds a SAV (Start of Active Video) code to the image. + This can be used to check if such codes in the image are inadvertently + interpreted instead of being ignored. + +- Insert EAV Code in Image: + + does the same for the EAV (End of Active Video) code. + + +Capture Feature Selection Controls +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +These controls are all specific to video capture. + +- Sensor Flipped Horizontally: + + the image is flipped horizontally and the + V4L2_IN_ST_HFLIP input status flag is set. This emulates the case where + a sensor is for example mounted upside down. + +- Sensor Flipped Vertically: + + the image is flipped vertically and the + V4L2_IN_ST_VFLIP input status flag is set. This emulates the case where + a sensor is for example mounted upside down. + +- Standard Aspect Ratio: + + selects if the image aspect ratio as used for the TV or + S-Video input should be 4x3, 16x9 or anamorphic widescreen. This may + introduce letterboxing. + +- DV Timings Aspect Ratio: + + selects if the image aspect ratio as used for the HDMI + input should be the same as the source width and height ratio, or if + it should be 4x3 or 16x9. This may introduce letter or pillarboxing. + +- Timestamp Source: + + selects when the timestamp for each buffer is taken. + +- Colorspace: + + selects which colorspace should be used when generating the image. + This only applies if the CSC Colorbar test pattern is selected, + otherwise the test pattern will go through unconverted. + This behavior is also what you want, since a 75% Colorbar + should really have 75% signal intensity and should not be affected + by colorspace conversions. + + Changing the colorspace will result in the V4L2_EVENT_SOURCE_CHANGE + to be sent since it emulates a detected colorspace change. + +- Transfer Function: + + selects which colorspace transfer function should be used when + generating an image. This only applies if the CSC Colorbar test pattern is + selected, otherwise the test pattern will go through unconverted. + This behavior is also what you want, since a 75% Colorbar + should really have 75% signal intensity and should not be affected + by colorspace conversions. + + Changing the transfer function will result in the V4L2_EVENT_SOURCE_CHANGE + to be sent since it emulates a detected colorspace change. + +- Y'CbCr Encoding: + + selects which Y'CbCr encoding should be used when generating + a Y'CbCr image. This only applies if the format is set to a Y'CbCr format + as opposed to an RGB format. + + Changing the Y'CbCr encoding will result in the V4L2_EVENT_SOURCE_CHANGE + to be sent since it emulates a detected colorspace change. + +- Quantization: + + selects which quantization should be used for the RGB or Y'CbCr + encoding when generating the test pattern. + + Changing the quantization will result in the V4L2_EVENT_SOURCE_CHANGE + to be sent since it emulates a detected colorspace change. + +- Limited RGB Range (16-235): + + selects if the RGB range of the HDMI source should + be limited or full range. This combines with the Digital Video 'Rx RGB + Quantization Range' control and can be used to test what happens if + a source provides you with the wrong quantization range information. + See the description of that control for more details. + +- Apply Alpha To Red Only: + + apply the alpha channel as set by the 'Alpha Component' + user control to the red color of the test pattern only. + +- Enable Capture Cropping: + + enables crop support. This control is only present if + the ccs_cap_mode module option is set to the default value of -1 and if + the no_error_inj module option is set to 0 (the default). + +- Enable Capture Composing: + + enables composing support. This control is only + present if the ccs_cap_mode module option is set to the default value of + -1 and if the no_error_inj module option is set to 0 (the default). + +- Enable Capture Scaler: + + enables support for a scaler (maximum 4 times upscaling + and downscaling). This control is only present if the ccs_cap_mode + module option is set to the default value of -1 and if the no_error_inj + module option is set to 0 (the default). + +- Maximum EDID Blocks: + + determines how many EDID blocks the driver supports. + Note that the vivid driver does not actually interpret new EDID + data, it just stores it. It allows for up to 256 EDID blocks + which is the maximum supported by the standard. + +- Fill Percentage of Frame: + + can be used to draw only the top X percent + of the image. Since each frame has to be drawn by the driver, this + demands a lot of the CPU. For large resolutions this becomes + problematic. By drawing only part of the image this CPU load can + be reduced. + + +Output Feature Selection Controls +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +These controls are all specific to video output. + +- Enable Output Cropping: + + enables crop support. This control is only present if + the ccs_out_mode module option is set to the default value of -1 and if + the no_error_inj module option is set to 0 (the default). + +- Enable Output Composing: + + enables composing support. This control is only + present if the ccs_out_mode module option is set to the default value of + -1 and if the no_error_inj module option is set to 0 (the default). + +- Enable Output Scaler: + + enables support for a scaler (maximum 4 times upscaling + and downscaling). This control is only present if the ccs_out_mode + module option is set to the default value of -1 and if the no_error_inj + module option is set to 0 (the default). + + +Error Injection Controls +^^^^^^^^^^^^^^^^^^^^^^^^ + +The following two controls are only valid for video and vbi capture. + +- Standard Signal Mode: + + selects the behavior of VIDIOC_QUERYSTD: what should it return? + + Changing this control will result in the V4L2_EVENT_SOURCE_CHANGE + to be sent since it emulates a changed input condition (e.g. a cable + was plugged in or out). + +- Standard: + + selects the standard that VIDIOC_QUERYSTD should return if the + previous control is set to "Selected Standard". + + Changing this control will result in the V4L2_EVENT_SOURCE_CHANGE + to be sent since it emulates a changed input standard. + + +The following two controls are only valid for video capture. + +- DV Timings Signal Mode: + + selects the behavior of VIDIOC_QUERY_DV_TIMINGS: what + should it return? + + Changing this control will result in the V4L2_EVENT_SOURCE_CHANGE + to be sent since it emulates a changed input condition (e.g. a cable + was plugged in or out). + +- DV Timings: + + selects the timings the VIDIOC_QUERY_DV_TIMINGS should return + if the previous control is set to "Selected DV Timings". + + Changing this control will result in the V4L2_EVENT_SOURCE_CHANGE + to be sent since it emulates changed input timings. + + +The following controls are only present if the no_error_inj module option +is set to 0 (the default). These controls are valid for video and vbi +capture and output streams and for the SDR capture device except for the +Disconnect control which is valid for all devices. + +- Wrap Sequence Number: + + test what happens when you wrap the sequence number in + struct v4l2_buffer around. + +- Wrap Timestamp: + + test what happens when you wrap the timestamp in struct + v4l2_buffer around. + +- Percentage of Dropped Buffers: + + sets the percentage of buffers that + are never returned by the driver (i.e., they are dropped). + +- Disconnect: + + emulates a USB disconnect. The device will act as if it has + been disconnected. Only after all open filehandles to the device + node have been closed will the device become 'connected' again. + +- Inject V4L2_BUF_FLAG_ERROR: + + when pressed, the next frame returned by + the driver will have the error flag set (i.e. the frame is marked + corrupt). + +- Inject VIDIOC_REQBUFS Error: + + when pressed, the next REQBUFS or CREATE_BUFS + ioctl call will fail with an error. To be precise: the videobuf2 + queue_setup() op will return -EINVAL. + +- Inject VIDIOC_QBUF Error: + + when pressed, the next VIDIOC_QBUF or + VIDIOC_PREPARE_BUFFER ioctl call will fail with an error. To be + precise: the videobuf2 buf_prepare() op will return -EINVAL. + +- Inject VIDIOC_STREAMON Error: + + when pressed, the next VIDIOC_STREAMON ioctl + call will fail with an error. To be precise: the videobuf2 + start_streaming() op will return -EINVAL. + +- Inject Fatal Streaming Error: + + when pressed, the streaming core will be + marked as having suffered a fatal error, the only way to recover + from that is to stop streaming. To be precise: the videobuf2 + vb2_queue_error() function is called. + + +VBI Raw Capture Controls +^^^^^^^^^^^^^^^^^^^^^^^^ + +- Interlaced VBI Format: + + if set, then the raw VBI data will be interlaced instead + of providing it grouped by field. + + +Digital Video Controls +~~~~~~~~~~~~~~~~~~~~~~ + +- Rx RGB Quantization Range: + + sets the RGB quantization detection of the HDMI + input. This combines with the Vivid 'Limited RGB Range (16-235)' + control and can be used to test what happens if a source provides + you with the wrong quantization range information. This can be tested + by selecting an HDMI input, setting this control to Full or Limited + range and selecting the opposite in the 'Limited RGB Range (16-235)' + control. The effect is easy to see if the 'Gray Ramp' test pattern + is selected. + +- Tx RGB Quantization Range: + + sets the RGB quantization detection of the HDMI + output. It is currently not used for anything in vivid, but most HDMI + transmitters would typically have this control. + +- Transmit Mode: + + sets the transmit mode of the HDMI output to HDMI or DVI-D. This + affects the reported colorspace since DVI_D outputs will always use + sRGB. + +- Display Present: + + sets the presence of a "display" on the HDMI output. This affects + the tx_edid_present, tx_hotplug and tx_rxsense controls. + + +FM Radio Receiver Controls +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- RDS Reception: + + set if the RDS receiver should be enabled. + +- RDS Program Type: + + +- RDS PS Name: + + +- RDS Radio Text: + + +- RDS Traffic Announcement: + + +- RDS Traffic Program: + + +- RDS Music: + + these are all read-only controls. If RDS Rx I/O Mode is set to + "Block I/O", then they are inactive as well. If RDS Rx I/O Mode is set + to "Controls", then these controls report the received RDS data. + +.. note:: + The vivid implementation of this is pretty basic: they are only + updated when you set a new frequency or when you get the tuner status + (VIDIOC_G_TUNER). + +- Radio HW Seek Mode: + + can be one of "Bounded", "Wrap Around" or "Both". This + determines if VIDIOC_S_HW_FREQ_SEEK will be bounded by the frequency + range or wrap-around or if it is selectable by the user. + +- Radio Programmable HW Seek: + + if set, then the user can provide the lower and + upper bound of the HW Seek. Otherwise the frequency range boundaries + will be used. + +- Generate RBDS Instead of RDS: + + if set, then generate RBDS (the US variant of + RDS) data instead of RDS (European-style RDS). This affects only the + PICODE and PTY codes. + +- RDS Rx I/O Mode: + + this can be "Block I/O" where the RDS blocks have to be read() + by the application, or "Controls" where the RDS data is provided by + the RDS controls mentioned above. + + +FM Radio Modulator Controls +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- RDS Program ID: + + +- RDS Program Type: + + +- RDS PS Name: + + +- RDS Radio Text: + + +- RDS Stereo: + + +- RDS Artificial Head: + + +- RDS Compressed: + + +- RDS Dynamic PTY: + + +- RDS Traffic Announcement: + + +- RDS Traffic Program: + + +- RDS Music: + + these are all controls that set the RDS data that is transmitted by + the FM modulator. + +- RDS Tx I/O Mode: + + this can be "Block I/O" where the application has to use write() + to pass the RDS blocks to the driver, or "Controls" where the RDS data + is Provided by the RDS controls mentioned above. + +Metadata Capture Controls +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Generate PTS + + if set, then the generated metadata stream contains Presentation timestamp. + +- Generate SCR + + if set, then the generated metadata stream contains Source Clock information. + +Video, VBI and RDS Looping +-------------------------- + +The vivid driver supports looping of video output to video input, VBI output +to VBI input and RDS output to RDS input. For video/VBI looping this emulates +as if a cable was hooked up between the output and input connector. So video +and VBI looping is only supported between S-Video and HDMI inputs and outputs. +VBI is only valid for S-Video as it makes no sense for HDMI. + +Since radio is wireless this looping always happens if the radio receiver +frequency is close to the radio transmitter frequency. In that case the radio +transmitter will 'override' the emulated radio stations. + +Looping is currently supported only between devices created by the same +vivid driver instance. + + +Video and Sliced VBI looping +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The way to enable video/VBI looping is currently fairly crude. A 'Loop Video' +control is available in the "Vivid" control class of the video +capture and VBI capture devices. When checked the video looping will be enabled. +Once enabled any video S-Video or HDMI input will show a static test pattern +until the video output has started. At that time the video output will be +looped to the video input provided that: + +- the input type matches the output type. So the HDMI input cannot receive + video from the S-Video output. + +- the video resolution of the video input must match that of the video output. + So it is not possible to loop a 50 Hz (720x576) S-Video output to a 60 Hz + (720x480) S-Video input, or a 720p60 HDMI output to a 1080p30 input. + +- the pixel formats must be identical on both sides. Otherwise the driver would + have to do pixel format conversion as well, and that's taking things too far. + +- the field settings must be identical on both sides. Same reason as above: + requiring the driver to convert from one field format to another complicated + matters too much. This also prohibits capturing with 'Field Top' or 'Field + Bottom' when the output video is set to 'Field Alternate'. This combination, + while legal, became too complicated to support. Both sides have to be 'Field + Alternate' for this to work. Also note that for this specific case the + sequence and field counting in struct v4l2_buffer on the capture side may not + be 100% accurate. + +- field settings V4L2_FIELD_SEQ_TB/BT are not supported. While it is possible to + implement this, it would mean a lot of work to get this right. Since these + field values are rarely used the decision was made not to implement this for + now. + +- on the input side the "Standard Signal Mode" for the S-Video input or the + "DV Timings Signal Mode" for the HDMI input should be configured so that a + valid signal is passed to the video input. + +The framerates do not have to match, although this might change in the future. + +By default you will see the OSD text superimposed on top of the looped video. +This can be turned off by changing the "OSD Text Mode" control of the video +capture device. + +For VBI looping to work all of the above must be valid and in addition the vbi +output must be configured for sliced VBI. The VBI capture side can be configured +for either raw or sliced VBI. Note that at the moment only CC/XDS (60 Hz formats) +and WSS (50 Hz formats) VBI data is looped. Teletext VBI data is not looped. + + +Radio & RDS Looping +~~~~~~~~~~~~~~~~~~~ + +As mentioned in section 6 the radio receiver emulates stations are regular +frequency intervals. Depending on the frequency of the radio receiver a +signal strength value is calculated (this is returned by VIDIOC_G_TUNER). +However, it will also look at the frequency set by the radio transmitter and +if that results in a higher signal strength than the settings of the radio +transmitter will be used as if it was a valid station. This also includes +the RDS data (if any) that the transmitter 'transmits'. This is received +faithfully on the receiver side. Note that when the driver is loaded the +frequencies of the radio receiver and transmitter are not identical, so +initially no looping takes place. + + +Cropping, Composing, Scaling +---------------------------- + +This driver supports cropping, composing and scaling in any combination. Normally +which features are supported can be selected through the Vivid controls, +but it is also possible to hardcode it when the module is loaded through the +ccs_cap_mode and ccs_out_mode module options. See section 1 on the details of +these module options. + +This allows you to test your application for all these variations. + +Note that the webcam input never supports cropping, composing or scaling. That +only applies to the TV/S-Video/HDMI inputs and outputs. The reason is that +webcams, including this virtual implementation, normally use +VIDIOC_ENUM_FRAMESIZES to list a set of discrete framesizes that it supports. +And that does not combine with cropping, composing or scaling. This is +primarily a limitation of the V4L2 API which is carefully reproduced here. + +The minimum and maximum resolutions that the scaler can achieve are 16x16 and +(4096 * 4) x (2160 x 4), but it can only scale up or down by a factor of 4 or +less. So for a source resolution of 1280x720 the minimum the scaler can do is +320x180 and the maximum is 5120x2880. You can play around with this using the +qv4l2 test tool and you will see these dependencies. + +This driver also supports larger 'bytesperline' settings, something that +VIDIOC_S_FMT allows but that few drivers implement. + +The scaler is a simple scaler that uses the Coarse Bresenham algorithm. It's +designed for speed and simplicity, not quality. + +If the combination of crop, compose and scaling allows it, then it is possible +to change crop and compose rectangles on the fly. + + +Formats +------- + +The driver supports all the regular packed and planar 4:4:4, 4:2:2 and 4:2:0 +YUYV formats, 8, 16, 24 and 32 RGB packed formats and various multiplanar +formats. + +The alpha component can be set through the 'Alpha Component' User control +for those formats that support it. If the 'Apply Alpha To Red Only' control +is set, then the alpha component is only used for the color red and set to +0 otherwise. + +The driver has to be configured to support the multiplanar formats. By default +the driver instances are single-planar. This can be changed by setting the +multiplanar module option, see section 1 for more details on that option. + +If the driver instance is using the multiplanar formats/API, then the first +single planar format (YUYV) and the multiplanar NV16M and NV61M formats the +will have a plane that has a non-zero data_offset of 128 bytes. It is rare for +data_offset to be non-zero, so this is a useful feature for testing applications. + +Video output will also honor any data_offset that the application set. + + +Capture Overlay +--------------- + +Note: capture overlay support is implemented primarily to test the existing +V4L2 capture overlay API. In practice few if any GPUs support such overlays +anymore, and neither are they generally needed anymore since modern hardware +is so much more capable. By setting flag 0x10000 in the node_types module +option the vivid driver will create a simple framebuffer device that can be +used for testing this API. Whether this API should be used for new drivers is +questionable. + +This driver has support for a destructive capture overlay with bitmap clipping +and list clipping (up to 16 rectangles) capabilities. Overlays are not +supported for multiplanar formats. It also honors the struct v4l2_window field +setting: if it is set to FIELD_TOP or FIELD_BOTTOM and the capture setting is +FIELD_ALTERNATE, then only the top or bottom fields will be copied to the overlay. + +The overlay only works if you are also capturing at that same time. This is a +vivid limitation since it copies from a buffer to the overlay instead of +filling the overlay directly. And if you are not capturing, then no buffers +are available to fill. + +In addition, the pixelformat of the capture format and that of the framebuffer +must be the same for the overlay to work. Otherwise VIDIOC_OVERLAY will return +an error. + +In order to really see what it going on you will need to create two vivid +instances: the first with a framebuffer enabled. You configure the capture +overlay of the second instance to use the framebuffer of the first, then +you start capturing in the second instance. For the first instance you setup +the output overlay for the video output, turn on video looping and capture +to see the blended framebuffer overlay that's being written to by the second +instance. This setup would require the following commands: + +.. code-block:: none + + $ sudo modprobe vivid n_devs=2 node_types=0x10101,0x1 + $ v4l2-ctl -d1 --find-fb + /dev/fb1 is the framebuffer associated with base address 0x12800000 + $ sudo v4l2-ctl -d2 --set-fbuf fb=1 + $ v4l2-ctl -d1 --set-fbuf fb=1 + $ v4l2-ctl -d0 --set-fmt-video=pixelformat='AR15' + $ v4l2-ctl -d1 --set-fmt-video-out=pixelformat='AR15' + $ v4l2-ctl -d2 --set-fmt-video=pixelformat='AR15' + $ v4l2-ctl -d0 -i2 + $ v4l2-ctl -d2 -i2 + $ v4l2-ctl -d2 -c horizontal_movement=4 + $ v4l2-ctl -d1 --overlay=1 + $ v4l2-ctl -d1 -c loop_video=1 + $ v4l2-ctl -d2 --stream-mmap --overlay=1 + +And from another console: + +.. code-block:: none + + $ v4l2-ctl -d1 --stream-out-mmap + +And yet another console: + +.. code-block:: none + + $ qv4l2 + +and start streaming. + +As you can see, this is not for the faint of heart... + + +Output Overlay +-------------- + +Note: output overlays are primarily implemented in order to test the existing +V4L2 output overlay API. Whether this API should be used for new drivers is +questionable. + +This driver has support for an output overlay and is capable of: + + - bitmap clipping, + - list clipping (up to 16 rectangles) + - chromakey + - source chromakey + - global alpha + - local alpha + - local inverse alpha + +Output overlays are not supported for multiplanar formats. In addition, the +pixelformat of the capture format and that of the framebuffer must be the +same for the overlay to work. Otherwise VIDIOC_OVERLAY will return an error. + +Output overlays only work if the driver has been configured to create a +framebuffer by setting flag 0x10000 in the node_types module option. The +created framebuffer has a size of 720x576 and supports ARGB 1:5:5:5 and +RGB 5:6:5. + +In order to see the effects of the various clipping, chromakeying or alpha +processing capabilities you need to turn on video looping and see the results +on the capture side. The use of the clipping, chromakeying or alpha processing +capabilities will slow down the video loop considerably as a lot of checks have +to be done per pixel. + + +CEC (Consumer Electronics Control) +---------------------------------- + +If there are HDMI inputs then a CEC adapter will be created that has +the same number of input ports. This is the equivalent of e.g. a TV that +has that number of inputs. Each HDMI output will also create a +CEC adapter that is hooked up to the corresponding input port, or (if there +are more outputs than inputs) is not hooked up at all. In other words, +this is the equivalent of hooking up each output device to an input port of +the TV. Any remaining output devices remain unconnected. + +The EDID that each output reads reports a unique CEC physical address that is +based on the physical address of the EDID of the input. So if the EDID of the +receiver has physical address A.B.0.0, then each output will see an EDID +containing physical address A.B.C.0 where C is 1 to the number of inputs. If +there are more outputs than inputs then the remaining outputs have a CEC adapter +that is disabled and reports an invalid physical address. + + +Some Future Improvements +------------------------ + +Just as a reminder and in no particular order: + +- Add a virtual alsa driver to test audio +- Add virtual sub-devices and media controller support +- Some support for testing compressed video +- Add support to loop raw VBI output to raw VBI input +- Add support to loop teletext sliced VBI output to VBI input +- Fix sequence/field numbering when looping of video with alternate fields +- Add support for V4L2_CID_BG_COLOR for video outputs +- Add ARGB888 overlay support: better testing of the alpha channel +- Improve pixel aspect support in the tpg code by passing a real v4l2_fract +- Use per-queue locks and/or per-device locks to improve throughput +- Add support to loop from a specific output to a specific input across + vivid instances +- The SDR radio should use the same 'frequencies' for stations as the normal + radio receiver, and give back noise if the frequency doesn't match up with + a station frequency +- Make a thread for the RDS generation, that would help in particular for the + "Controls" RDS Rx I/O Mode as the read-only RDS controls could be updated + in real-time. +- Changing the EDID should cause hotplug detect emulation to happen. diff --git a/Documentation/admin-guide/media/zr364xx.rst b/Documentation/admin-guide/media/zr364xx.rst new file mode 100644 index 000000000000..ec8acb3e98fc --- /dev/null +++ b/Documentation/admin-guide/media/zr364xx.rst @@ -0,0 +1,110 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Zoran 364xx based USB webcam module +=================================== + +site: http://royale.zerezo.com/zr364xx/ + +mail: royale@zerezo.com + +.. note:: + + This documentation is outdated + +Introduction +------------ + + +This brings support under Linux for the Aiptek PocketDV 3300 in webcam +mode. If you just want to get on your PC the pictures and movies on the +camera, you should use the usb-storage module instead. + +The driver works with several other cameras in webcam mode (see the list +below). + +Maybe this code can work for other JPEG/USB cams based on the Coach +chips from Zoran? + +Possible chipsets are : ZR36430 (ZR36430BGC) and +maybe ZR36431, ZR36440, ZR36442... + +You can try the experience changing the vendor/product ID values (look +at the source code). + +You can get these values by looking at /var/log/messages when you plug +your camera, or by typing : cat /sys/kernel/debug/usb/devices. + +If you manage to use your cam with this code, you can send me a mail +(royale@zerezo.com) with the name of your cam and a patch if needed. + +This is a beta release of the driver. Since version 0.70, this driver is +only compatible with V4L2 API and 2.6.x kernels. If you need V4L1 or +2.4x kernels support, please use an older version, but the code is not +maintained anymore. Good luck! + +Install +------- + +In order to use this driver, you must compile it with your kernel. + +Location: Device Drivers -> Multimedia devices -> Video For Linux -> Video Capture Adapters -> V4L USB devices + +Usage +----- + +modprobe zr364xx debug=X mode=Y + +- debug : set to 1 to enable verbose debug messages +- mode : 0 = 320x240, 1 = 160x120, 2 = 640x480 + +You can then use the camera with V4L2 compatible applications, for +example Ekiga. + +To capture a single image, try this: dd if=/dev/video0 of=test.jpg bs=1M +count=1 + +links +----- + +http://mxhaard.free.fr/ (support for many others cams including some Aiptek PocketDV) +http://www.harmwal.nl/pccam880/ (this project also supports cameras based on this chipset) + +Supported devices +----------------- + +====== ======= ============== ==================== +Vendor Product Distributor Model +====== ======= ============== ==================== +0x08ca 0x0109 Aiptek PocketDV 3300 +0x08ca 0x0109 Maxell Maxcam PRO DV3 +0x041e 0x4024 Creative PC-CAM 880 +0x0d64 0x0108 Aiptek Fidelity 3200 +0x0d64 0x0108 Praktica DCZ 1.3 S +0x0d64 0x0108 Genius Digital Camera (?) +0x0d64 0x0108 DXG Technology Fashion Cam +0x0546 0x3187 Polaroid iON 230 +0x0d64 0x3108 Praktica Exakta DC 2200 +0x0d64 0x3108 Genius G-Shot D211 +0x0595 0x4343 Concord Eye-Q Duo 1300 +0x0595 0x4343 Concord Eye-Q Duo 2000 +0x0595 0x4343 Fujifilm EX-10 +0x0595 0x4343 Ricoh RDC-6000 +0x0595 0x4343 Digitrex DSC 1300 +0x0595 0x4343 Firstline FDC 2000 +0x0bb0 0x500d Concord EyeQ Go Wireless +0x0feb 0x2004 CRS Electronic 3.3 Digital Camera +0x0feb 0x2004 Packard Bell DSC-300 +0x055f 0xb500 Mustek MDC 3000 +0x08ca 0x2062 Aiptek PocketDV 5700 +0x052b 0x1a18 Chiphead Megapix V12 +0x04c8 0x0729 Konica Revio 2 +0x04f2 0xa208 Creative PC-CAM 850 +0x0784 0x0040 Traveler Slimline X5 +0x06d6 0x0034 Trust Powerc@m 750 +0x0a17 0x0062 Pentax Optio 50L +0x06d6 0x003b Trust Powerc@m 970Z +0x0a17 0x004e Pentax Optio 50 +0x041e 0x405d Creative DiVi CAM 516 +0x08ca 0x2102 Aiptek DV T300 +0x06d6 0x003d Trust Powerc@m 910Z +====== ======= ============== ==================== diff --git a/Documentation/media/cec-drivers/index.rst b/Documentation/media/cec-drivers/index.rst deleted file mode 100644 index 2b7fcaa4311b..000000000000 --- a/Documentation/media/cec-drivers/index.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -.. include:: - -.. _cec-drivers: - -################################# -CEC driver-specific documentation -################################# - -**Copyright** |copy| 2017 : LinuxTV Developers - -This documentation is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation version 2 of the License. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details. - -For more details see the file COPYING in the source distribution of Linux. - -.. only:: html - - .. class:: toc-title - - Table of Contents - -.. toctree:: - :maxdepth: 5 - :numbered: - - pulse8-cec diff --git a/Documentation/media/cec-drivers/pulse8-cec.rst b/Documentation/media/cec-drivers/pulse8-cec.rst deleted file mode 100644 index 356d08b519f3..000000000000 --- a/Documentation/media/cec-drivers/pulse8-cec.rst +++ /dev/null @@ -1,13 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Pulse-Eight CEC Adapter driver -============================== - -The pulse8-cec driver implements the following module option: - -``persistent_config`` ---------------------- - -By default this is off, but when set to 1 the driver will store the current -settings to the device's internal eeprom and restore it the next time the -device is connected to the USB port. diff --git a/Documentation/media/dvb-drivers/avermedia.rst b/Documentation/media/dvb-drivers/avermedia.rst deleted file mode 100644 index bf35fd88e164..000000000000 --- a/Documentation/media/dvb-drivers/avermedia.rst +++ /dev/null @@ -1,273 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -HOWTO: Get An Avermedia DVB-T working under Linux -------------------------------------------------- - -February 14th 2006 - -.. note:: - - This documentation is outdated. Please check at the DVB wiki - at https://linuxtv.org/wiki for more updated info. - - There's a section there specific for Avermedia boards at: - https://linuxtv.org/wiki/index.php/AVerMedia - - -Assumptions and Introduction -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -It is assumed that the reader understands the basic structure -of the Linux Kernel DVB drivers and the general principles of -Digital TV. - -One significant difference between Digital TV and Analogue TV -that the unwary (like myself) should consider is that, -although the component structure of budget DVB-T cards are -substantially similar to Analogue TV cards, they function in -substantially different ways. - -The purpose of an Analogue TV is to receive and display an -Analogue Television signal. An Analogue TV signal (otherwise -known as composite video) is an analogue encoding of a -sequence of image frames (25 per second) rasterised using an -interlacing technique. Interlacing takes two fields to -represent one frame. Computers today are at their best when -dealing with digital signals, not analogue signals and a -composite video signal is about as far removed from a digital -data stream as you can get. Therefore, an Analogue TV card for -a PC has the following purpose: - -* Tune the receiver to receive a broadcast signal -* demodulate the broadcast signal -* demultiplex the analogue video signal and analogue audio - signal. **NOTE:** some countries employ a digital audio signal - embedded within the modulated composite analogue signal - - NICAM.) -* digitize the analogue video signal and make the resulting - datastream available to the data bus. - -The digital datastream from an Analogue TV card is generated -by circuitry on the card and is often presented uncompressed. -For a PAL TV signal encoded at a resolution of 768x576 24-bit -color pixels over 25 frames per second - a fair amount of data -is generated and must be processed by the PC before it can be -displayed on the video monitor screen. Some Analogue TV cards -for PCs have onboard MPEG2 encoders which permit the raw -digital data stream to be presented to the PC in an encoded -and compressed form - similar to the form that is used in -Digital TV. - -The purpose of a simple budget digital TV card (DVB-T,C or S) -is to simply: - -* Tune the received to receive a broadcast signal. -* Extract the encoded digital datastream from the broadcast - signal. -* Make the encoded digital datastream (MPEG2) available to - the data bus. - -The significant difference between the two is that the tuner -on the analogue TV card spits out an Analogue signal, whereas -the tuner on the digital TV card spits out a compressed -encoded digital datastream. As the signal is already -digitised, it is trivial to pass this datastream to the PC -databus with minimal additional processing and then extract -the digital video and audio datastreams passing them to the -appropriate software or hardware for decoding and viewing. - -The Avermedia DVB-T -~~~~~~~~~~~~~~~~~~~ - -The Avermedia DVB-T is a budget PCI DVB card. It has 3 inputs: - -* RF Tuner Input -* Composite Video Input (RCA Jack) -* SVIDEO Input (Mini-DIN) - -The RF Tuner Input is the input to the tuner module of the -card. The Tuner is otherwise known as the "Frontend" . The -Frontend of the Avermedia DVB-T is a Microtune 7202D. A timely -post to the linux-dvb mailing list ascertained that the -Microtune 7202D is supported by the sp887x driver which is -found in the dvb-hw CVS module. - -The DVB-T card is based around the BT878 chip which is a very -common multimedia bridge and often found on Analogue TV cards. -There is no on-board MPEG2 decoder, which means that all MPEG2 -decoding must be done in software, or if you have one, on an -MPEG2 hardware decoding card or chipset. - - -Getting the card going -~~~~~~~~~~~~~~~~~~~~~~ - -In order to fire up the card, it is necessary to load a number -of modules from the DVB driver set. Prior to this it will have -been necessary to download these drivers from the linuxtv CVS -server and compile them successfully. - -Depending on the card's feature set, the Device Driver API for -DVB under Linux will expose some of the following device files -in the /dev tree: - -* /dev/dvb/adapter0/audio0 -* /dev/dvb/adapter0/ca0 -* /dev/dvb/adapter0/demux0 -* /dev/dvb/adapter0/dvr0 -* /dev/dvb/adapter0/frontend0 -* /dev/dvb/adapter0/net0 -* /dev/dvb/adapter0/osd0 -* /dev/dvb/adapter0/video0 - -The primary device nodes that we are interested in (at this -stage) for the Avermedia DVB-T are: - -* /dev/dvb/adapter0/dvr0 -* /dev/dvb/adapter0/frontend0 - -The dvr0 device node is used to read the MPEG2 Data Stream and -the frontend0 node is used to tune the frontend tuner module. - -At this stage, it has not been able to ascertain the -functionality of the remaining device nodes in respect of the -Avermedia DVBT. However, full functionality in respect of -tuning, receiving and supplying the MPEG2 data stream is -possible with the currently available versions of the driver. -It may be possible that additional functionality is available -from the card (i.e. viewing the additional analogue inputs -that the card presents), but this has not been tested yet. If -I get around to this, I'll update the document with whatever I -find. - -To power up the card, load the following modules in the -following order: - -* modprobe bttv (normally loaded automatically) -* modprobe dvb-bt8xx (or place dvb-bt8xx in /etc/modules) - -Insertion of these modules into the running kernel will -activate the appropriate DVB device nodes. It is then possible -to start accessing the card with utilities such as scan, tzap, -dvbstream etc. - -The frontend module sp887x.o, requires an external firmware. -Please use the command "get_dvb_firmware sp887x" to download -it. Then copy it to /usr/lib/hotplug/firmware or /lib/firmware/ -(depending on configuration of firmware hotplug). - -Receiving DVB-T in Australia -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -I have no experience of DVB-T in other countries other than -Australia, so I will attempt to explain how it works here in -Melbourne and how this affects the configuration of the DVB-T -card. - -The Digital Broadcasting Australia website has a Reception -locatortool which provides information on transponder channels -and frequencies. My local transmitter happens to be Mount -Dandenong. - -The frequencies broadcast by Mount Dandenong are: - -Table 1. Transponder Frequencies Mount Dandenong, Vic, Aus. - -=========== ======= =========== -Broadcaster Channel Frequency -=========== ======= =========== -ABC VHF 12 226.5 MHz -TEN VHF 11 219.5 MHz -NINE VHF 8 191.625 MHz -SEVEN VHF 6 177.5 MHz -SBS UHF 29 536.5 MHz -=========== ======= =========== - -The Scan utility has a set of compiled-in defaults for various -countries and regions, but if they do not suit, or if you have -a pre-compiled scan binary, you can specify a data file on the -command line which contains the transponder frequencies. Here -is a sample file for the above channel transponders: - -:: - - # Data file for DVB scan program - # - # C Frequency SymbolRate FEC QAM - # S Frequency Polarisation SymbolRate FEC - # T Frequency Bandwidth FEC FEC2 QAM Mode Guard Hier - T 226500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE - T 191625000 7MHz 2/3 NONE QAM64 8k 1/8 NONE - T 219500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE - T 177500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE - T 536500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE - -The defaults for the transponder frequency and other -modulation parameters were obtained from www.dba.org.au. - -When Scan runs, it will output channels.conf information for -any channel's transponders which the card's frontend can lock -onto. (i.e. any whose signal is strong enough at your -antenna). - -Here's my channels.conf file for anyone who's interested: - -:: - - ABC HDTV:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:2307:0:560 - ABC TV Melbourne:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:561 - ABC TV 2:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:562 - ABC TV 3:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:563 - ABC TV 4:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:564 - ABC DiG Radio:226500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:0:2311:566 - TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1585 - TEN Digital 1:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1586 - TEN Digital 2:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1587 - TEN Digital 3:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1588 - TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1589 - TEN Digital 4:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1590 - TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1591 - TEN HD:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:514:0:1592 - TEN Digital:219500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:650:1593 - Nine Digital:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:513:660:1072 - Nine Digital HD:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:0:1073 - Nine Guide:191625000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_3_4:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:514:670:1074 - 7 Digital:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1328 - 7 Digital 1:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1329 - 7 Digital 2:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1330 - 7 Digital 3:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:769:770:1331 - 7 HD Digital:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:833:834:1332 - 7 Program Guide:177500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:865:866:1334 - SBS HD:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:102:103:784 - SBS DIGITAL 1:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:161:81:785 - SBS DIGITAL 2:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:162:83:786 - SBS EPG:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:163:85:787 - SBS RADIO 1:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:201:798 - SBS RADIO 2:536500000:INVERSION_OFF:BANDWIDTH_7_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:0:202:799 - -Known Limitations -~~~~~~~~~~~~~~~~~ - -At present I can say with confidence that the frontend tunes -via /dev/dvb/adapter{x}/frontend0 and supplies an MPEG2 stream -via /dev/dvb/adapter{x}/dvr0. I have not tested the -functionality of any other part of the card yet. I will do so -over time and update this document. - -There are some limitations in the i2c layer due to a returned -error message inconsistency. Although this generates errors in -dmesg and the system logs, it does not appear to affect the -ability of the frontend to function correctly. - -Further Update -~~~~~~~~~~~~~~ - -dvbstream and VideoLAN Client on windows works a treat with -DVB, in fact this is currently serving as my main way of -viewing DVB-T at the moment. Additionally, VLC is happily -decoding HDTV signals, although the PC is dropping the odd -frame here and there - I assume due to processing capability - -as all the decoding is being done under windows in software. - -Many thanks to Nigel Pearson for the updates to this document -since the recent revision of the driver. diff --git a/Documentation/media/dvb-drivers/bt8xx.rst b/Documentation/media/dvb-drivers/bt8xx.rst deleted file mode 100644 index 7936cd96fc8f..000000000000 --- a/Documentation/media/dvb-drivers/bt8xx.rst +++ /dev/null @@ -1,124 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -How to get the bt8xx cards working -================================== - -Authors: Richard Walker, - Jamie Honan, - Michael Hunold, - Manu Abraham, - Uwe Bugla, - Michael Krufky - -.. note:: - - This documentation is outdated. Please check at the DVB wiki - at https://linuxtv.org/wiki for more updated info. - -General information -------------------- - -This class of cards has a bt878a as the PCI interface, and require the bttv driver -for accessing the i2c bus and the gpio pins of the bt8xx chipset. -Please see Documentation/media/dvb-drivers/cards.rst => o Cards based on the Conexant Bt8xx PCI bridge: - -Compiling kernel please enable: - -#) ``Device drivers`` => ``Multimedia devices`` => ``Video For Linux`` => ``Enable Video for Linux API 1 (DEPRECATED)`` -#) ``Device drivers`` => ``Multimedia devices`` => ``Video For Linux`` => ``Video Capture Adapters`` => ``BT848 Video For Linux`` -#) ``Device drivers`` => ``Multimedia devices`` => ``Digital Video Broadcasting Devices`` => ``DVB for Linux`` ``DVB Core Support`` ``Bt8xx based PCI Cards`` - - Please use the following options with care as deselection of drivers which are in fact necessary may result in DVB devices that cannot be tuned due to lack of driver support: - You can save RAM by deselecting every frontend module that your DVB card does not need. - - First please remove the static dependency of DVB card drivers on all frontend modules for all possible card variants by enabling: - -#) ``Device drivers`` => ``Multimedia devices`` => ``Digital Video Broadcasting Devices`` => ``DVB for Linux`` ``DVB Core Support`` ``Load and attach frontend modules as needed`` - - If you know the frontend driver that your card needs please enable: - -#) ``Device drivers`` => ``Multimedia devices`` => ``Digital Video Broadcasting Devices`` => ``DVB for Linux`` ``DVB Core Support`` ``Customise DVB Frontends`` => ``Customise the frontend modules to build`` - - Then please select your card-specific frontend module. - -Loading Modules ---------------- - -Regular case: If the bttv driver detects a bt8xx-based DVB card, all frontend and backend modules will be loaded automatically. -Exceptions are: -- Old TwinHan DST cards or clones with or without CA slot and not containing an Eeprom. -People running udev please see Documentation/media/dvb-drivers/udev.rst. - -In the following cases overriding the PCI type detection for dvb-bt8xx might be necessary: - -Running TwinHan and Clones -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -.. code-block:: none - - $ modprobe bttv card=113 - $ modprobe dst - -Useful parameters for verbosity level and debugging the dst module: - -.. code-block:: none - - verbose=0: messages are disabled - 1: only error messages are displayed - 2: notifications are displayed - 3: other useful messages are displayed - 4: debug setting - dst_addons=0: card is a free to air (FTA) card only - 0x20: card has a conditional access slot for scrambled channels - -The autodetected values are determined by the cards' "response string". -In your logs see f. ex.: dst_get_device_id: Recognize [DSTMCI]. -For bug reports please send in a complete log with verbose=4 activated. -Please also see Documentation/media/dvb-drivers/ci.rst. - -Running multiple cards -~~~~~~~~~~~~~~~~~~~~~~ - -Examples of card ID's: - -.. code-block:: none - - Pinnacle PCTV Sat: 94 - Nebula Electronics Digi TV: 104 - pcHDTV HD-2000 TV: 112 - Twinhan DST and clones: 113 - Avermedia AverTV DVB-T 771: 123 - Avermedia AverTV DVB-T 761: 124 - DViCO FusionHDTV DVB-T Lite: 128 - DViCO FusionHDTV 5 Lite: 135 - -.. note:: - - The order of the card ID should be uprising: - - Example: - - .. code-block:: none - - $ modprobe bttv card=113 card=135 - -For a full list of card ID's please see Documentation/media/v4l-drivers/bttv-cardlist.rst. -In case of further problems please subscribe and send questions to the mailing list: linux-dvb@linuxtv.org. - -Probing the cards with broken PCI subsystem ID -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -There are some TwinHan cards that the EEPROM has become corrupted for some -reason. The cards do not have correct PCI subsystem ID. But we can force -probing the cards with broken PCI subsystem ID - -.. code-block:: none - - $ echo 109e 0878 $subvendor $subdevice > \ - /sys/bus/pci/drivers/bt878/new_id - -.. code-block:: none - - 109e: PCI_VENDOR_ID_BROOKTREE - 0878: PCI_DEVICE_ID_BROOKTREE_878 - diff --git a/Documentation/media/dvb-drivers/cards.rst b/Documentation/media/dvb-drivers/cards.rst deleted file mode 100644 index e2e30a56b450..000000000000 --- a/Documentation/media/dvb-drivers/cards.rst +++ /dev/null @@ -1,146 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Hardware supported by the linuxtv.org DVB drivers -================================================= - -.. note:: - - This documentation is outdated. Please check at the DVB wiki - at https://linuxtv.org/wiki for more updated info. - - Please look at - https://linuxtv.org/wiki/index.php/Hardware_Device_Information - for an updated list of supported cards. - -Generally, the DVB hardware manufacturers frequently change the -frontends (i.e. tuner / demodulator units) used, usually without -changing the product name, revision number or specs. Some cards -are also available in versions with different frontends for -DVB-S/DVB-C/DVB-T. Thus the frontend drivers are listed separately. - -.. note:: - - #) There is no guarantee that every frontend driver works - out of the box with every card, because of different wiring. - - #) The demodulator chips can be used with a variety of - tuner/PLL chips, and not all combinations are supported. Often - the demodulator and tuner/PLL chip are inside a metal box for - shielding, and the whole metal box has its own part number. - - -- Frontends drivers: - - - dvb_dummy_fe: for testing... - - DVB-S: - - ves1x93 : Alps BSRV2 (ves1893 demodulator) and dbox2 (ves1993) - - cx24110 : Conexant HM1221/HM1811 (cx24110 or cx24106 demod, cx24108 PLL) - - grundig_29504-491 : Grundig 29504-491 (Philips TDA8083 demodulator), tsa5522 PLL - - mt312 : Zarlink mt312 or Mitel vp310 demodulator, sl1935 or tsa5059 PLLi, Technisat Sky2Pc with bios Rev. 2.3 - - stv0299 : Alps BSRU6 (tsa5059 PLL), LG TDQB-S00x (tsa5059 PLL), - LG TDQF-S001F (sl1935 PLL), Philips SU1278 (tua6100 PLL), - Philips SU1278SH (tsa5059 PLL), Samsung TBMU24112IMB, Technisat Sky2Pc with bios Rev. 2.6 - - DVB-C: - - ves1820 : various (ves1820 demodulator, sp5659c or spXXXX PLL) - - at76c651 : Atmel AT76c651(B) with DAT7021 PLL - - DVB-T: - - alps_tdlb7 : Alps TDLB7 (sp8870 demodulator, sp5659 PLL) - - alps_tdmb7 : Alps TDMB7 (cx22700 demodulator) - - grundig_29504-401 : Grundig 29504-401 (LSI L64781 demodulator), tsa5060 PLL - - tda1004x : Philips tda10045h (td1344 or tdm1316l PLL) - - nxt6000 : Alps TDME7 (MITEL SP5659 PLL), Alps TDED4 (TI ALP510 PLL), Comtech DVBT-6k07 (SP5730 PLL), (NxtWave Communications NXT6000 demodulator) - - sp887x : Microtune 7202D - - dib3000mb : DiBcom 3000-MB demodulator - - DVB-S/C/T: - - dst : TwinHan DST Frontend - - ATSC: - - nxt200x : Nxtwave NXT2002 & NXT2004 - - or51211 : or51211 based (pcHDTV HD2000 card) - - or51132 : or51132 based (pcHDTV HD3000 card) - - bcm3510 : Broadcom BCM3510 - - lgdt330x : LG Electronics DT3302 & DT3303 - - -- Cards based on the Phillips saa7146 multimedia PCI bridge chip: - - - TI AV7110 based cards (i.e. with hardware MPEG decoder): - - Siemens/Technotrend/Hauppauge PCI DVB card revision 1.1, 1.3, 1.5, 1.6, 2.1 (aka Hauppauge Nexus) - - "budget" cards (i.e. without hardware MPEG decoder): - - Technotrend Budget / Hauppauge WinTV-Nova PCI Cards - - SATELCO Multimedia PCI - - KNC1 DVB-S, Typhoon DVB-S, Terratec Cinergy 1200 DVB-S (no CI support) - - Typhoon DVB-S budget - - Fujitsu-Siemens Activy DVB-S budget card - -- Cards based on the B2C2 Inc. FlexCopII/IIb/III: - - - Technisat SkyStar2 PCI DVB card revision 2.3, 2.6B, 2.6C - -- Cards based on the Conexant Bt8xx PCI bridge: - - - Pinnacle PCTV Sat DVB - - Nebula Electronics DigiTV - - TwinHan DST - - Avermedia DVB-T - - ChainTech digitop DST-1000 DVB-S - - pcHDTV HD-2000 TV - - DViCO FusionHDTV DVB-T Lite - - DViCO FusionHDTV5 Lite - -- Technotrend / Hauppauge DVB USB devices: - - - Nova USB - - DEC 2000-T, 3000-S, 2540-T - -- DiBcom DVB-T USB based devices: - - - Twinhan VisionPlus VisionDTV USB-Ter DVB-T Device - - HAMA DVB-T USB device - - CTS Portable (Chinese Television System) - - KWorld V-Stream XPERT DTV DVB-T USB - - JetWay DTV DVB-T USB - - ADSTech Instant TV DVB-T USB - - Ultima Electronic/Artec T1 USB TVBOX (AN2135 and AN2235) - - Compro Videomate DVB-U2000 - DVB-T USB - - Grandtec USB DVB-T - - Avermedia AverTV DVBT USB - - DiBcom USB DVB-T reference device (non-public) - - Yakumo DVB-T mobile USB2.0 - - DiBcom USB2.0 DVB-T reference device (non-public) - -- Experimental support for the analog module of the Siemens DVB-C PCI card - -- Cards based on the Conexant cx2388x PCI bridge: - - - ADS Tech Instant TV DVB-T PCI - - ATI HDTV Wonder - - digitalnow DNTV Live! DVB-T - - DViCO FusionHDTV DVB-T1 - - DViCO FusionHDTV DVB-T Plus - - DViCO FusionHDTV3 Gold-Q - - DViCO FusionHDTV3 Gold-T - - DViCO FusionHDTV5 Gold - - Hauppauge Nova-T DVB-T - - KWorld/VStream XPert DVB-T - - pcHDTV HD3000 HDTV - - TerraTec Cinergy 1400 DVB-T - - WinFast DTV1000-T - -- Cards based on the Phillips saa7134 PCI bridge: - - - Medion 7134 - - Pinnacle PCTV 300i DVB-T + PAL - - LifeView FlyDVB-T DUO - - Typhoon DVB-T Duo Digital/Analog Cardbus - - Philips TOUGH DVB-T reference design - - Philips EUROPA V3 reference design - - Compro Videomate DVB-T300 - - Compro Videomate DVB-T200 - - AVerMedia AVerTVHD MCE A180 - - KWorld PC150-U ATSC Hybrid - diff --git a/Documentation/media/dvb-drivers/ci.rst b/Documentation/media/dvb-drivers/ci.rst deleted file mode 100644 index ded4d8fbbf92..000000000000 --- a/Documentation/media/dvb-drivers/ci.rst +++ /dev/null @@ -1,77 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Digital TV Conditional Access Interface -======================================= - - -.. note:: - - This documentation is outdated. - -This document describes the usage of the high level CI API as -in accordance to the Linux DVB API. This is a not a documentation for the, -existing low level CI API. - -.. note:: - - For the Twinhan/Twinhan clones, the dst_ca module handles the CI - hardware handling. This module is loaded automatically if a CI - (Common Interface, that holds the CAM (Conditional Access Module) - is detected. - -ca_zap -~~~~~~ - -A userspace application, like ``ca_zap`` is required to handle encrypted -MPEG-TS streams. - -The ``ca_zap`` userland application is in charge of sending the -descrambling related information to the Conditional Access Module (CAM). - -This application requires the following to function properly as of now. - -a) Tune to a valid channel, with szap. - - eg: $ szap -c channels.conf -r "TMC" -x - -b) a channels.conf containing a valid PMT PID - - eg: TMC:11996:h:0:27500:278:512:650:321 - - here 278 is a valid PMT PID. the rest of the values are the - same ones that szap uses. - -c) after running a szap, you have to run ca_zap, for the - descrambler to function, - - eg: $ ca_zap channels.conf "TMC" - -d) Hopefully enjoy your favourite subscribed channel as you do with - a FTA card. - -.. note:: - - Currently ca_zap, and dst_test, both are meant for demonstration - purposes only, they can become full fledged applications if necessary. - - -Cards that fall in this category -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -At present the cards that fall in this category are the Twinhan and its -clones, these cards are available as VVMER, Tomato, Hercules, Orange and -so on. - -CI modules that are supported -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The CI module support is largely dependent upon the firmware on the cards -Some cards do support almost all of the available CI modules. There is -nothing much that can be done in order to make additional CI modules -working with these cards. - -Modules that have been tested by this driver at present are - -(1) Irdeto 1 and 2 from SCM -(2) Viaccess from SCM -(3) Dragoncam diff --git a/Documentation/media/dvb-drivers/faq.rst b/Documentation/media/dvb-drivers/faq.rst deleted file mode 100644 index 52f153d18278..000000000000 --- a/Documentation/media/dvb-drivers/faq.rst +++ /dev/null @@ -1,169 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -FAQ -=== - -.. note:: - - This documentation is outdated. Please check at the DVB wiki - at https://linuxtv.org/wiki for more updated info. - -Some very frequently asked questions about linuxtv-dvb - -1. The signal seems to die a few seconds after tuning. - - It's not a bug, it's a feature. Because the frontends have - significant power requirements (and hence get very hot), they - are powered down if they are unused (i.e. if the frontend device - is closed). The dvb-core.o module parameter "dvb_shutdown_timeout" - allow you to change the timeout (default 5 seconds). Setting the - timeout to 0 disables the timeout feature. - -2. How can I watch TV? - - The driver distribution includes some simple utilities which - are mainly intended for testing and to demonstrate how the - DVB API works. - - Depending on whether you have a DVB-S, DVB-C or DVB-T card, use - apps/szap/szap, czap or tzap. You must supply a channel list - in ~/.[sct]zap/channels.conf. If you are lucky you can just copy - one of the supplied channel lists, or you can create a new one - by running apps/scan/scan. If you run scan on an unknown network - you might have to supply some start data in apps/scan/initial.h. - - If you have a card with a built-in hardware MPEG-decoder the - drivers create a video4linux device (/dev/v4l/video0) which - you can use to watch TV with any v4l application. xawtv is known - to work. Note that you cannot change channels with xawtv, you - have to zap using [sct]zap. If you want a nice application for - TV watching and record/playback, have a look at VDR. - - If your card does not have a hardware MPEG decoder you need - a software MPEG decoder. Mplayer or xine are known to work. - Newsflash: MythTV also has DVB support now. - Note: Only very recent versions of Mplayer and xine can decode. - MPEG2 transport streams (TS) directly. Then, run - '[sct]zap channelname -r' in one xterm, and keep it running, - and start 'mplayer - < /dev/dvb/adapter0/dvr0' or - 'xine stdin://mpeg2 < /dev/dvb/adapter0/dvr0' in a second xterm. - That's all far from perfect, but it seems no one has written - a nice DVB application which includes a builtin software MPEG - decoder yet. - - Newsflash: Newest xine directly supports DVB. Just copy your - channels.conf to ~/.xine and start 'xine dvb://', or select - the DVB button in the xine GUI. Channel switching works using the - numpad pgup/pgdown (NP9 / NP3) keys to scroll through the channel osd - menu and pressing numpad-enter to switch to the selected channel. - - Note: Older versions of xine and mplayer understand MPEG program - streams (PS) only, and can be used in conjunction with the - ts2ps tool from the Metzler Brother's dvb-mpegtools package. - -3. Which other DVB applications exist? - - http://www.cadsoft.de/people/kls/vdr/ - Klaus Schmidinger's Video Disk Recorder - - http://www.metzlerbros.org/dvb/ - Metzler Bros. DVB development; alternate drivers and - DVB utilities, include dvb-mpegtools and tuxzap. - - http://sourceforge.net/projects/dvbtools/ - Dave Chapman's dvbtools package, including - dvbstream and dvbtune - - http://www.linuxdvb.tv/ - Henning Holtschneider's site with many interesting - links and docs - - http://www.dbox2.info/ - LinuxDVB on the dBox2 - - http://www.tuxbox.org/ and http://cvs.tuxbox.org/ - the TuxBox CVS many interesting DVB applications and the dBox2 - DVB source - - https://linuxtv.org/downloads - DVB Swiss Army Knife library and utilities - - http://www.nenie.org/misc/mpsys/ - MPSYS: a MPEG2 system library and tools - - http://mplayerhq.hu/ - mplayer - - http://xine.sourceforge.net/ and http://xinehq.de/ - xine - - http://www.mythtv.org/ - MythTV - analog TV PVR, but now with DVB support, too - (with software MPEG decode) - - http://dvbsnoop.sourceforge.net/ - DVB sniffer program to monitor, analyze, debug, dump - or view dvb/mpeg/dsm-cc/mhp stream information (TS, - PES, SECTION) - -4. Can't get a signal tuned correctly - - If you are using a Technotrend/Hauppauge DVB-C card *without* analog - module, you might have to use module parameter adac=-1 (dvb-ttpci.o). - -5. The dvb_net device doesn't give me any packets at all - - Run tcpdump on the dvb0_0 interface. This sets the interface - into promiscuous mode so it accepts any packets from the PID - you have configured with the dvbnet utility. Check if there - are any packets with the IP addr and MAC addr you have - configured with ifconfig. - - If tcpdump doesn't give you any output, check the statistics - which ifconfig outputs. (Note: If the MAC address is wrong, - dvb_net won't get any input; thus you have to run tcpdump - before checking the statistics.) If there are no packets at - all then maybe the PID is wrong. If there are error packets, - then either the PID is wrong or the stream does not conform to - the MPE standard (EN 301 192, http://www.etsi.org/). You can - use e.g. dvbsnoop for debugging. - -6. The dvb_net device doesn't give me any multicast packets - - Check your routes if they include the multicast address range. - Additionally make sure that "source validation by reversed path - lookup" is disabled: - -.. code-block:: none - - $ "echo 0 > /proc/sys/net/ipv4/conf/dvb0/rp_filter" - -7. What the hell are all those modules that need to be loaded? - - For a dvb-ttpci av7110 based full-featured card the following - modules are loaded: - - - videodev: Video4Linux core module. This is the base module that - gives you access to the "analog" tv picture of the av7110 mpeg2 - decoder. - - - v4l2-common: common functions for Video4Linux-2 drivers - - - v4l1-compat: backward compatibility layer for Video4Linux-1 legacy - applications - - - dvb-core: DVB core module. This provides you with the - /dev/dvb/adapter entries - - - saa7146: SAA7146 core driver. This is need to access any SAA7146 - based card in your system. - - - saa7146_vv: SAA7146 video and vbi functions. These are only needed - for full-featured cards. - - - videobuf-dma-sg: capture helper module for the saa7146_vv driver. This - one is responsible to handle capture buffers. - - - dvb-ttpci: The main driver for AV7110 based, full-featured - DVB-S/C/T cards - diff --git a/Documentation/media/dvb-drivers/index.rst b/Documentation/media/dvb-drivers/index.rst index 9d3fce544f85..7a870ee7ac7d 100644 --- a/Documentation/media/dvb-drivers/index.rst +++ b/Documentation/media/dvb-drivers/index.rst @@ -29,17 +29,6 @@ For more details see the file COPYING in the source distribution of Linux. :maxdepth: 5 :numbered: - intro - avermedia - bt8xx - cards - ci dvb-usb - faq - lmedm04 - opera-firmware - technisat - ttusb-dec - udev frontends contributors diff --git a/Documentation/media/dvb-drivers/intro.rst b/Documentation/media/dvb-drivers/intro.rst deleted file mode 100644 index 4e361bcc3ad4..000000000000 --- a/Documentation/media/dvb-drivers/intro.rst +++ /dev/null @@ -1,23 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Introduction -============ - -The main development site and GIT repository for these -drivers is https://linuxtv.org. - -The DVB mailing list linux-dvb is hosted at vger. Please see -http://vger.kernel.org/vger-lists.html#linux-media for details. - -There are also some other old lists hosted at https://linuxtv.org/lists.php. Please check the archive https://linuxtv.org/pipermail/linux-dvb/. - -The media subsystem Wiki is hosted at https://linuxtv.org/wiki/. -Please check it before asking newbie questions on the list. - -API documentation is documented at the Kernel. You'll also find useful -documentation at: https://linuxtv.org/docs.php. - -You may also find useful material at https://linuxtv.org/downloads/. - -In order to get firmware from proprietary drivers, there's a script at -the kernel tree, at scripts/get_dvb_firmware. diff --git a/Documentation/media/dvb-drivers/lmedm04.rst b/Documentation/media/dvb-drivers/lmedm04.rst deleted file mode 100644 index a6ee33413748..000000000000 --- a/Documentation/media/dvb-drivers/lmedm04.rst +++ /dev/null @@ -1,107 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Firmware files for lmedm04 cards -================================ - -To extract firmware for the DM04/QQBOX you need to copy the -following file(s) to this directory. - -For DM04+/QQBOX LME2510C (Sharp 7395 Tuner) -------------------------------------------- - -The Sharp 7395 driver can be found in windows/system32/drivers - -US2A0D.sys (dated 17 Mar 2009) - - -and run: - -.. code-block:: none - - scripts/get_dvb_firmware lme2510c_s7395 - -will produce dvb-usb-lme2510c-s7395.fw - -An alternative but older firmware can be found on the driver -disk DVB-S_EN_3.5A in BDADriver/driver - -LMEBDA_DVBS7395C.sys (dated 18 Jan 2008) - -and run: - -.. code-block:: none - - ./get_dvb_firmware lme2510c_s7395_old - -will produce dvb-usb-lme2510c-s7395.fw - -The LG firmware can be found on the driver -disk DM04+_5.1A[LG] in BDADriver/driver - -For DM04 LME2510 (LG Tuner) ---------------------------- - -LMEBDA_DVBS.sys (dated 13 Nov 2007) - -and run: - - -.. code-block:: none - - ./get_dvb_firmware lme2510_lg - -will produce dvb-usb-lme2510-lg.fw - - -Other LG firmware can be extracted manually from US280D.sys -only found in windows/system32/drivers - -dd if=US280D.sys ibs=1 skip=42360 count=3924 of=dvb-usb-lme2510-lg.fw - -For DM04 LME2510C (LG Tuner) ----------------------------- - -.. code-block:: none - - dd if=US280D.sys ibs=1 skip=35200 count=3850 of=dvb-usb-lme2510c-lg.fw - - -The Sharp 0194 tuner driver can be found in windows/system32/drivers - -US290D.sys (dated 09 Apr 2009) - -For LME2510 ------------ - -.. code-block:: none - - dd if=US290D.sys ibs=1 skip=36856 count=3976 of=dvb-usb-lme2510-s0194.fw - - -For LME2510C ------------- - - -.. code-block:: none - - dd if=US290D.sys ibs=1 skip=33152 count=3697 of=dvb-usb-lme2510c-s0194.fw - - -The m88rs2000 tuner driver can be found in windows/system32/drivers - -US2B0D.sys (dated 29 Jun 2010) - - -.. code-block:: none - - dd if=US2B0D.sys ibs=1 skip=34432 count=3871 of=dvb-usb-lme2510c-rs2000.fw - -We need to modify id of rs2000 firmware or it will warm boot id 3344:1120. - - -.. code-block:: none - - - echo -ne \\xF0\\x22 | dd conv=notrunc bs=1 count=2 seek=266 of=dvb-usb-lme2510c-rs2000.fw - -Copy the firmware file(s) to /lib/firmware diff --git a/Documentation/media/dvb-drivers/opera-firmware.rst b/Documentation/media/dvb-drivers/opera-firmware.rst deleted file mode 100644 index fab3581551de..000000000000 --- a/Documentation/media/dvb-drivers/opera-firmware.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Opera firmware -============== - -Author: Marco Gittler - -To extract the firmware for the Opera DVB-S1 USB-Box -you need to copy the files: - -2830SCap2.sys -2830SLoad2.sys - -from the windriver disk into this directory. - -Then run: - -.. code-block:: none - - scripts/get_dvb_firmware opera1 - -and after that you have 2 files: - -dvb-usb-opera-01.fw -dvb-usb-opera1-fpga-01.fw - -in here. - -Copy them into /lib/firmware/ . - -After that the driver can load the firmware -(if you have enabled firmware loading -in kernel config and have hotplug running). diff --git a/Documentation/media/dvb-drivers/technisat.rst b/Documentation/media/dvb-drivers/technisat.rst deleted file mode 100644 index 9eaa12366bbf..000000000000 --- a/Documentation/media/dvb-drivers/technisat.rst +++ /dev/null @@ -1,100 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -How to set up the Technisat/B2C2 Flexcop devices -================================================ - -.. note:: - - This documentation is outdated. - -Author: Uwe Bugla August 2009 - -Find out what device you have ------------------------------ - -Important Notice: The driver does NOT support Technisat USB 2 devices! - -First start your linux box with a shipped kernel: - -.. code-block:: none - - lspci -vvv for a PCI device (lsusb -vvv for an USB device) will show you for example: - 02:0b.0 Network controller: Techsan Electronics Co Ltd B2C2 FlexCopII DVB chip / - Technisat SkyStar2 DVB card (rev 02) - - dmesg | grep frontend may show you for example: - DVB: registering frontend 0 (Conexant CX24123/CX24109)... - -Kernel compilation: -------------------- - -If the Flexcop / Technisat is the only DVB / TV / Radio device in your box -get rid of unnecessary modules and check this one: - -``Multimedia support`` => ``Customise analog and hybrid tuner modules to build`` - -In this directory uncheck every driver which is activated there -(except ``Simple tuner support`` for ATSC 3rd generation only -> see case 9 please). - -Then please activate: - -- Main module part: - - ``Multimedia support`` => ``DVB/ATSC adapters`` => ``Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters`` - - #) => ``Technisat/B2C2 Air/Sky/Cable2PC PCI`` (PCI card) or - #) => ``Technisat/B2C2 Air/Sky/Cable2PC USB`` (USB 1.1 adapter) - and for troubleshooting purposes: - #) => ``Enable debug for the B2C2 FlexCop drivers`` - -- Frontend / Tuner / Demodulator module part: - - ``Multimedia support`` => ``DVB/ATSC adapters`` - => ``Customise the frontend modules to build`` ``Customise DVB frontends`` => - - - SkyStar DVB-S Revision 2.3: - - #) => ``Zarlink VP310/MT312/ZL10313 based`` - #) => ``Generic I2C PLL based tuners`` - - - SkyStar DVB-S Revision 2.6: - - #) => ``ST STV0299 based`` - #) => ``Generic I2C PLL based tuners`` - - - SkyStar DVB-S Revision 2.7: - - #) => ``Samsung S5H1420 based`` - #) => ``Integrant ITD1000 Zero IF tuner for DVB-S/DSS`` - #) => ``ISL6421 SEC controller`` - - - SkyStar DVB-S Revision 2.8: - - #) => ``Conexant CX24123 based`` - #) => ``Conexant CX24113/CX24128 tuner for DVB-S/DSS`` - #) => ``ISL6421 SEC controller`` - - - AirStar DVB-T card: - - #) => ``Zarlink MT352 based`` - #) => ``Generic I2C PLL based tuners`` - - - CableStar DVB-C card: - - #) => ``ST STV0297 based`` - #) => ``Generic I2C PLL based tuners`` - - - AirStar ATSC card 1st generation: - - #) => ``Broadcom BCM3510`` - - - AirStar ATSC card 2nd generation: - - #) => ``NxtWave Communications NXT2002/NXT2004 based`` - #) => ``Generic I2C PLL based tuners`` - - - AirStar ATSC card 3rd generation: - - #) => ``LG Electronics LGDT3302/LGDT3303 based`` - #) ``Multimedia support`` => ``Customise analog and hybrid tuner modules to build`` => ``Simple tuner support`` - diff --git a/Documentation/media/dvb-drivers/ttusb-dec.rst b/Documentation/media/dvb-drivers/ttusb-dec.rst deleted file mode 100644 index 516bbab8a872..000000000000 --- a/Documentation/media/dvb-drivers/ttusb-dec.rst +++ /dev/null @@ -1,45 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -TechnoTrend/Hauppauge DEC USB Driver -==================================== - -Driver Status -------------- - -Supported: - - - DEC2000-t - - DEC2450-t - - DEC3000-s - - Video Streaming - - Audio Streaming - - Section Filters - - Channel Zapping - - Hotplug firmware loader - -To Do: - - - Tuner status information - - DVB network interface - - Streaming video PC->DEC - - Conax support for 2450-t - -Getting the Firmware --------------------- -To download the firmware, use the following commands: - -.. code-block:: none - - scripts/get_dvb_firmware dec2000t - scripts/get_dvb_firmware dec2540t - scripts/get_dvb_firmware dec3000s - - -Hotplug Firmware Loading ------------------------- - -Since 2.6 kernels, the firmware is loaded at the point that the driver module -is loaded. - -Copy the three files downloaded above into the /usr/lib/hotplug/firmware or -/lib/firmware directory (depending on configuration of firmware hotplug). diff --git a/Documentation/media/dvb-drivers/udev.rst b/Documentation/media/dvb-drivers/udev.rst deleted file mode 100644 index ca6c9c226902..000000000000 --- a/Documentation/media/dvb-drivers/udev.rst +++ /dev/null @@ -1,63 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -UDEV rules for DVB -================== - -.. note:: - - #) This documentation is outdated. Udev on modern distributions auto-detect - the DVB devices. - - #) **TODO:** change this document to explain how to make DVB devices - persistent, as, when a machine has multiple devices, they may be detected - on different orders, which could cause apps that relies on the device - numbers to fail. - -The DVB subsystem currently registers to the sysfs subsystem using the -"class_simple" interface. - -This means that only the basic information like module loading parameters -are presented through sysfs. Other things that might be interesting are -currently **not** available. - -Nevertheless it's now possible to add proper udev rules so that the -DVB device nodes are created automatically. - -We assume that you have udev already up and running and that have been -creating the DVB device nodes manually up to now due to the missing sysfs -support. - -0. Don't forget to disable your current method of creating the -device nodes manually. - -1. Unfortunately, you'll need a helper script to transform the kernel -sysfs device name into the well known dvb adapter / device naming scheme. -The script should be called "dvb.sh" and should be placed into a script -dir where udev can execute it, most likely /etc/udev/scripts/ - -So, create a new file /etc/udev/scripts/dvb.sh and add the following: - -.. code-block:: none - - #!/bin/sh - /bin/echo $1 | /bin/sed -e 's,dvb\([0-9]\)\.\([^0-9]*\)\([0-9]\),dvb/adapter\1/\2\3,' - -Don't forget to make the script executable with "chmod". - -1. You need to create a proper udev rule that will create the device nodes -like you know them. All real distributions out there scan the /etc/udev/rules.d -directory for rule files. The main udev configuration file /etc/udev/udev.conf -will tell you the directory where the rules are, most likely it's /etc/udev/rules.d/ - -Create a new rule file in that directory called "dvb.rule" and add the following line: - -.. code-block:: none - - KERNEL="dvb*", PROGRAM="/etc/udev/scripts/dvb.sh %k", NAME="%c" - -If you want more control over the device nodes (for example a special group membership) -have a look at "man udev". - -For every device that registers to the sysfs subsystem with a "dvb" prefix, -the helper script /etc/udev/scripts/dvb.sh is invoked, which will then -create the proper device node in your /dev/ directory. diff --git a/Documentation/media/index.rst b/Documentation/media/index.rst index 308f6a396d1c..0f75280b8c43 100644 --- a/Documentation/media/index.rst +++ b/Documentation/media/index.rst @@ -14,9 +14,9 @@ Linux Media Subsystem Documentation ../userspace-api/media/index ../driver-api/media/index - dvb-drivers/index + v4l-drivers/index - cec-drivers/index + dvb-drivers/index .. only:: html and subproject diff --git a/Documentation/media/v4l-drivers/au0828-cardlist.rst b/Documentation/media/v4l-drivers/au0828-cardlist.rst deleted file mode 100644 index aaaadc934e7a..000000000000 --- a/Documentation/media/v4l-drivers/au0828-cardlist.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -AU0828 cards list -================= - -.. tabularcolumns:: |p{1.4cm}|p{6.5cm}|p{10.0cm}| - -.. flat-table:: - :header-rows: 1 - :widths: 2 19 18 - :stub-columns: 0 - - * - Card number - - Card name - - USB IDs - - * - 0 - - Unknown board - - - - * - 1 - - Hauppauge HVR950Q - - 2040:7200, 2040:7210, 2040:7217, 2040:721b, 2040:721e, 2040:721f, 2040:7280, 0fd9:0008, 2040:7260, 2040:7213, 2040:7270 - - * - 2 - - Hauppauge HVR850 - - 2040:7240 - - * - 3 - - DViCO FusionHDTV USB - - 0fe9:d620 - - * - 4 - - Hauppauge HVR950Q rev xxF8 - - 2040:7201, 2040:7211, 2040:7281 - - * - 5 - - Hauppauge Woodbury - - 05e1:0480, 2040:8200 diff --git a/Documentation/media/v4l-drivers/bttv-cardlist.rst b/Documentation/media/v4l-drivers/bttv-cardlist.rst deleted file mode 100644 index f5806856b5a1..000000000000 --- a/Documentation/media/v4l-drivers/bttv-cardlist.rst +++ /dev/null @@ -1,683 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -BTTV cards list -=============== - -.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| - -.. flat-table:: - :header-rows: 1 - :widths: 2 19 18 - :stub-columns: 0 - - * - Card number - - Card name - - PCI IDs - - * - 0 - - *** UNKNOWN/GENERIC *** - - - - * - 1 - - MIRO PCTV - - - - * - 2 - - Hauppauge (bt848) - - - - * - 3 - - STB, Gateway P/N 6000699 (bt848) - - - - * - 4 - - Intel Create and Share PCI/ Smart Video Recorder III - - - - * - 5 - - Diamond DTV2000 - - - - * - 6 - - AVerMedia TVPhone - - - - * - 7 - - MATRIX-Vision MV-Delta - - - - * - 8 - - Lifeview FlyVideo II (Bt848) LR26 / MAXI TV Video PCI2 LR26 - - - - * - 9 - - IMS/IXmicro TurboTV - - - - * - 10 - - Hauppauge (bt878) - - 0070:13eb, 0070:3900, 2636:10b4 - - * - 11 - - MIRO PCTV pro - - - - * - 12 - - ADS Technologies Channel Surfer TV (bt848) - - - - * - 13 - - AVerMedia TVCapture 98 - - 1461:0002, 1461:0004, 1461:0300 - - * - 14 - - Aimslab Video Highway Xtreme (VHX) - - - - * - 15 - - Zoltrix TV-Max - - a1a0:a0fc - - * - 16 - - Prolink Pixelview PlayTV (bt878) - - - - * - 17 - - Leadtek WinView 601 - - - - * - 18 - - AVEC Intercapture - - - - * - 19 - - Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only) - - - - * - 20 - - CEI Raffles Card - - - - * - 21 - - Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50 - - - - * - 22 - - Askey CPH050/ Phoebe Tv Master + FM - - 14ff:3002 - - * - 23 - - Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878 - - 14c7:0101 - - * - 24 - - Askey CPH05X/06X (bt878) [many vendors] - - 144f:3002, 144f:3005, 144f:5000, 14ff:3000 - - * - 25 - - Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar - - - - * - 26 - - Hauppauge WinCam newer (bt878) - - - - * - 27 - - Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50 - - - - * - 28 - - Terratec TerraTV+ Version 1.1 (bt878) - - 153b:1127, 1852:1852 - - * - 29 - - Imagenation PXC200 - - 1295:200a - - * - 30 - - Lifeview FlyVideo 98 LR50 - - 1f7f:1850 - - * - 31 - - Formac iProTV, Formac ProTV I (bt848) - - - - * - 32 - - Intel Create and Share PCI/ Smart Video Recorder III - - - - * - 33 - - Terratec TerraTValue Version Bt878 - - 153b:1117, 153b:1118, 153b:1119, 153b:111a, 153b:1134, 153b:5018 - - * - 34 - - Leadtek WinFast 2000/ WinFast 2000 XP - - 107d:6606, 107d:6609, 6606:217d, f6ff:fff6 - - * - 35 - - Lifeview FlyVideo 98 LR50 / Chronos Video Shuttle II - - 1851:1850, 1851:a050 - - * - 36 - - Lifeview FlyVideo 98FM LR50 / Typhoon TView TV/FM Tuner - - 1852:1852 - - * - 37 - - Prolink PixelView PlayTV pro - - - - * - 38 - - Askey CPH06X TView99 - - 144f:3000, 144f:a005, a04f:a0fc - - * - 39 - - Pinnacle PCTV Studio/Rave - - 11bd:0012, bd11:1200, bd11:ff00, 11bd:ff12 - - * - 40 - - STB TV PCI FM, Gateway P/N 6000704 (bt878), 3Dfx VoodooTV 100 - - 10b4:2636, 10b4:2645, 121a:3060 - - * - 41 - - AVerMedia TVPhone 98 - - 1461:0001, 1461:0003 - - * - 42 - - ProVideo PV951 - - aa0c:146c - - * - 43 - - Little OnAir TV - - - - * - 44 - - Sigma TVII-FM - - - - * - 45 - - MATRIX-Vision MV-Delta 2 - - - - * - 46 - - Zoltrix Genie TV/FM - - 15b0:4000, 15b0:400a, 15b0:400d, 15b0:4010, 15b0:4016 - - * - 47 - - Terratec TV/Radio+ - - 153b:1123 - - * - 48 - - Askey CPH03x/ Dynalink Magic TView - - - - * - 49 - - IODATA GV-BCTV3/PCI - - 10fc:4020 - - * - 50 - - Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP - - - - * - 51 - - Eagle Wireless Capricorn2 (bt878A) - - - - * - 52 - - Pinnacle PCTV Studio Pro - - - - * - 53 - - Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS - - - - * - 54 - - Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90] - - - - * - 55 - - Askey CPH031/ BESTBUY Easy TV - - - - * - 56 - - Lifeview FlyVideo 98FM LR50 - - a051:41a0 - - * - 57 - - GrandTec 'Grand Video Capture' (Bt848) - - 4344:4142 - - * - 58 - - Askey CPH060/ Phoebe TV Master Only (No FM) - - - - * - 59 - - Askey CPH03x TV Capturer - - - - * - 60 - - Modular Technology MM100PCTV - - - - * - 61 - - AG Electronics GMV1 - - 15cb:0101 - - * - 62 - - Askey CPH061/ BESTBUY Easy TV (bt878) - - - - * - 63 - - ATI TV-Wonder - - 1002:0001 - - * - 64 - - ATI TV-Wonder VE - - 1002:0003 - - * - 65 - - Lifeview FlyVideo 2000S LR90 - - - - * - 66 - - Terratec TValueRadio - - 153b:1135, 153b:ff3b - - * - 67 - - IODATA GV-BCTV4/PCI - - 10fc:4050 - - * - 68 - - 3Dfx VoodooTV FM (Euro) - - 10b4:2637 - - * - 69 - - Active Imaging AIMMS - - - - * - 70 - - Prolink Pixelview PV-BT878P+ (Rev.4C,8E) - - - - * - 71 - - Lifeview FlyVideo 98EZ (capture only) LR51 - - 1851:1851 - - * - 72 - - Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM) - - 1554:4011 - - * - 73 - - Sensoray 311/611 - - 6000:0311, 6000:0611 - - * - 74 - - RemoteVision MX (RV605) - - - - * - 75 - - Powercolor MTV878/ MTV878R/ MTV878F - - - - * - 76 - - Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP) - - 0e11:0079 - - * - 77 - - GrandTec Multi Capture Card (Bt878) - - - - * - 78 - - Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF - - 0a01:17de - - * - 79 - - DSP Design TCVIDEO - - - - * - 80 - - Hauppauge WinTV PVR - - 0070:4500 - - * - 81 - - IODATA GV-BCTV5/PCI - - 10fc:4070, 10fc:d018 - - * - 82 - - Osprey 100/150 (878) - - 0070:ff00 - - * - 83 - - Osprey 100/150 (848) - - - - * - 84 - - Osprey 101 (848) - - - - * - 85 - - Osprey 101/151 - - - - * - 86 - - Osprey 101/151 w/ svid - - - - * - 87 - - Osprey 200/201/250/251 - - - - * - 88 - - Osprey 200/250 - - 0070:ff01 - - * - 89 - - Osprey 210/220/230 - - - - * - 90 - - Osprey 500 - - 0070:ff02 - - * - 91 - - Osprey 540 - - 0070:ff04 - - * - 92 - - Osprey 2000 - - 0070:ff03 - - * - 93 - - IDS Eagle - - - - * - 94 - - Pinnacle PCTV Sat - - 11bd:001c - - * - 95 - - Formac ProTV II (bt878) - - - - * - 96 - - MachTV - - - - * - 97 - - Euresys Picolo - - - - * - 98 - - ProVideo PV150 - - aa00:1460, aa01:1461, aa02:1462, aa03:1463, aa04:1464, aa05:1465, aa06:1466, aa07:1467 - - * - 99 - - AD-TVK503 - - - - * - 100 - - Hercules Smart TV Stereo - - - - * - 101 - - Pace TV & Radio Card - - - - * - 102 - - IVC-200 - - 0000:a155, 0001:a155, 0002:a155, 0003:a155, 0100:a155, 0101:a155, 0102:a155, 0103:a155, 0800:a155, 0801:a155, 0802:a155, 0803:a155 - - * - 103 - - Grand X-Guard / Trust 814PCI - - 0304:0102 - - * - 104 - - Nebula Electronics DigiTV - - 0071:0101 - - * - 105 - - ProVideo PV143 - - aa00:1430, aa00:1431, aa00:1432, aa00:1433, aa03:1433 - - * - 106 - - PHYTEC VD-009-X1 VD-011 MiniDIN (bt878) - - - - * - 107 - - PHYTEC VD-009-X1 VD-011 Combi (bt878) - - - - * - 108 - - PHYTEC VD-009 MiniDIN (bt878) - - - - * - 109 - - PHYTEC VD-009 Combi (bt878) - - - - * - 110 - - IVC-100 - - ff00:a132 - - * - 111 - - IVC-120G - - ff00:a182, ff01:a182, ff02:a182, ff03:a182, ff04:a182, ff05:a182, ff06:a182, ff07:a182, ff08:a182, ff09:a182, ff0a:a182, ff0b:a182, ff0c:a182, ff0d:a182, ff0e:a182, ff0f:a182 - - * - 112 - - pcHDTV HD-2000 TV - - 7063:2000 - - * - 113 - - Twinhan DST + clones - - 11bd:0026, 1822:0001, 270f:fc00, 1822:0026 - - * - 114 - - Winfast VC100 - - 107d:6607 - - * - 115 - - Teppro TEV-560/InterVision IV-560 - - - - * - 116 - - SIMUS GVC1100 - - aa6a:82b2 - - * - 117 - - NGS NGSTV+ - - - - * - 118 - - LMLBT4 - - - - * - 119 - - Tekram M205 PRO - - - - * - 120 - - Conceptronic CONTVFMi - - - - * - 121 - - Euresys Picolo Tetra - - 1805:0105, 1805:0106, 1805:0107, 1805:0108 - - * - 122 - - Spirit TV Tuner - - - - * - 123 - - AVerMedia AVerTV DVB-T 771 - - 1461:0771 - - * - 124 - - AverMedia AverTV DVB-T 761 - - 1461:0761 - - * - 125 - - MATRIX Vision Sigma-SQ - - - - * - 126 - - MATRIX Vision Sigma-SLC - - - - * - 127 - - APAC Viewcomp 878(AMAX) - - - - * - 128 - - DViCO FusionHDTV DVB-T Lite - - 18ac:db10, 18ac:db11 - - * - 129 - - V-Gear MyVCD - - - - * - 130 - - Super TV Tuner - - - - * - 131 - - Tibet Systems 'Progress DVR' CS16 - - - - * - 132 - - Kodicom 4400R (master) - - - - * - 133 - - Kodicom 4400R (slave) - - - - * - 134 - - Adlink RTV24 - - - - * - 135 - - DViCO FusionHDTV 5 Lite - - 18ac:d500 - - * - 136 - - Acorp Y878F - - 9511:1540 - - * - 137 - - Conceptronic CTVFMi v2 - - 036e:109e - - * - 138 - - Prolink Pixelview PV-BT878P+ (Rev.2E) - - - - * - 139 - - Prolink PixelView PlayTV MPEG2 PV-M4900 - - - - * - 140 - - Osprey 440 - - 0070:ff07 - - * - 141 - - Asound Skyeye PCTV - - - - * - 142 - - Sabrent TV-FM (bttv version) - - - - * - 143 - - Hauppauge ImpactVCB (bt878) - - 0070:13eb - - * - 144 - - MagicTV - - - - * - 145 - - SSAI Security Video Interface - - 4149:5353 - - * - 146 - - SSAI Ultrasound Video Interface - - 414a:5353 - - * - 147 - - VoodooTV 200 (USA) - - 121a:3000 - - * - 148 - - DViCO FusionHDTV 2 - - dbc0:d200 - - * - 149 - - Typhoon TV-Tuner PCI (50684) - - - - * - 150 - - Geovision GV-600 - - 008a:763c - - * - 151 - - Kozumi KTV-01C - - - - * - 152 - - Encore ENL TV-FM-2 - - 1000:1801 - - * - 153 - - PHYTEC VD-012 (bt878) - - - - * - 154 - - PHYTEC VD-012-X1 (bt878) - - - - * - 155 - - PHYTEC VD-012-X2 (bt878) - - - - * - 156 - - IVCE-8784 - - 0000:f050, 0001:f050, 0002:f050, 0003:f050 - - * - 157 - - Geovision GV-800(S) (master) - - 800a:763d - - * - 158 - - Geovision GV-800(S) (slave) - - 800b:763d, 800c:763d, 800d:763d - - * - 159 - - ProVideo PV183 - - 1830:1540, 1831:1540, 1832:1540, 1833:1540, 1834:1540, 1835:1540, 1836:1540, 1837:1540 - - * - 160 - - Tongwei Video Technology TD-3116 - - f200:3116 - - * - 161 - - Aposonic W-DVR - - 0279:0228 - - * - 162 - - Adlink MPG24 - - - - * - 163 - - Bt848 Capture 14MHz - - - - * - 164 - - CyberVision CV06 (SV) - - - - * - 165 - - Kworld V-Stream Xpert TV PVR878 - - - - * - 166 - - PCI-8604PW - - diff --git a/Documentation/media/v4l-drivers/bttv.rst b/Documentation/media/v4l-drivers/bttv.rst deleted file mode 100644 index 9b15a0cba283..000000000000 --- a/Documentation/media/v4l-drivers/bttv.rst +++ /dev/null @@ -1,1806 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The bttv driver -=============== - -Release notes for bttv ----------------------- - -You'll need at least these config options for bttv: - -.. code-block:: none - - CONFIG_I2C=m - CONFIG_I2C_ALGOBIT=m - CONFIG_VIDEO_DEV=m - -The latest bttv version is available from http://bytesex.org/bttv/ - - -Make bttv work with your card ------------------------------ - -Just try "modprobe bttv" and see if that works. - -If it doesn't bttv likely could not autodetect your card and needs some -insmod options. The most important insmod option for bttv is "card=n" -to select the correct card type. If you get video but no sound you've -very likely specified the wrong (or no) card type. A list of supported -cards is in CARDLIST.bttv - -If bttv takes very long to load (happens sometimes with the cheap -cards which have no tuner), try adding this to your modules.conf: - -.. code-block:: none - - options i2c-algo-bit bit_test=1 - -For the WinTV/PVR you need one firmware file from the driver CD: -hcwamc.rbf. The file is in the pvr45xxx.exe archive (self-extracting -zip file, unzip can unpack it). Put it into the /etc/pvr directory or -use the firm_altera= insmod option to point the driver to the -location of the file. - -If your card isn't listed in CARDLIST.bttv or if you have trouble making -audio work, you should read the Sound-FAQ. - - -Autodetecting cards -------------------- - -bttv uses the PCI Subsystem ID to autodetect the card type. lspci lists -the Subsystem ID in the second line, looks like this: - -.. code-block:: none - - 00:0a.0 Multimedia video controller: Brooktree Corporation Bt878 (rev 02) - Subsystem: Hauppauge computer works Inc. WinTV/GO - Flags: bus master, medium devsel, latency 32, IRQ 5 - Memory at e2000000 (32-bit, prefetchable) [size=4K] - -only bt878-based cards can have a subsystem ID (which does not mean -that every card really has one). bt848 cards can't have a Subsystem -ID and therefore can't be autodetected. There is a list with the ID's -in bttv-cards.c (in case you are intrested or want to mail patches -with updates). - - -Still doesn't work? -------------------- - -I do NOT have a lab with 30+ different grabber boards and a -PAL/NTSC/SECAM test signal generator at home, so I often can't -reproduce your problems. This makes debugging very difficult for me. -If you have some knowledge and spare time, please try to fix this -yourself (patches very welcome of course...) You know: The linux -slogan is "Do it yourself". - -There is a mailing list at -http://vger.kernel.org/vger-lists.html#linux-media - -If you have trouble with some specific TV card, try to ask there -instead of mailing me directly. The chance that someone with the -same card listens there is much higher... - -For problems with sound: There are a lot of different systems used -for TV sound all over the world. And there are also different chips -which decode the audio signal. Reports about sound problems ("stereo -doesn't work") are pretty useless unless you include some details -about your hardware and the TV sound scheme used in your country (or -at least the country you are living in). - -Modprobe options ----------------- - -Note: "modinfo " prints various information about a kernel -module, among them a complete and up-to-date list of insmod options. -This list tends to be outdated because it is updated manually ... - -========================================================================== - -bttv.o - -.. code-block:: none - - the bt848/878 (grabber chip) driver - - insmod args: - card=n card type, see CARDLIST for a list. - tuner=n tuner type, see CARDLIST for a list. - radio=0/1 card supports radio - pll=0/1/2 pll settings - 0: don't use PLL - 1: 28 MHz crystal installed - 2: 35 MHz crystal installed - - triton1=0/1 for Triton1 (+others) compatibility - vsfx=0/1 yet another chipset bug compatibility bit - see README.quirks for details on these two. - - bigendian=n Set the endianness of the gfx framebuffer. - Default is native endian. - fieldnr=0/1 Count fields. Some TV descrambling software - needs this, for others it only generates - 50 useless IRQs/sec. default is 0 (off). - autoload=0/1 autoload helper modules (tuner, audio). - default is 1 (on). - bttv_verbose=0/1/2 verbose level (at insmod time, while - looking at the hardware). default is 1. - bttv_debug=0/1 debug messages (for capture). - default is 0 (off). - irq_debug=0/1 irq handler debug messages. - default is 0 (off). - gbuffers=2-32 number of capture buffers for mmap'ed capture. - default is 4. - gbufsize= size of capture buffers. default and - maximum value is 0x208000 (~2MB) - no_overlay=0 Enable overlay on broken hardware. There - are some chipsets (SIS for example) which - are known to have problems with the PCI DMA - push used by bttv. bttv will disable overlay - by default on this hardware to avoid crashes. - With this insmod option you can override this. - no_overlay=1 Disable overlay. It should be used by broken - hardware that doesn't support PCI2PCI direct - transfers. - automute=0/1 Automatically mutes the sound if there is - no TV signal, on by default. You might try - to disable this if you have bad input signal - quality which leading to unwanted sound - dropouts. - chroma_agc=0/1 AGC of chroma signal, off by default. - adc_crush=0/1 Luminance ADC crush, on by default. - i2c_udelay= Allow reduce I2C speed. Default is 5 usecs - (meaning 66,67 Kbps). The default is the - maximum supported speed by kernel bitbang - algorithm. You may use lower numbers, if I2C - messages are lost (16 is known to work on - all supported cards). - - bttv_gpio=0/1 - gpiomask= - audioall= - audiomux= - See Sound-FAQ for a detailed description. - - remap, card, radio and pll accept up to four comma-separated arguments - (for multiple boards). - -tuner.o - -.. code-block:: none - - The tuner driver. You need this unless you want to use only - with a camera or external tuner ... - - insmod args: - debug=1 print some debug info to the syslog - type=n type of the tuner chip. n as follows: - see CARDLIST for a complete list. - pal=[bdgil] select PAL variant (used for some tuners - only, important for the audio carrier). - -tvaudio.o - -.. code-block:: none - - new, experimental module which is supported to provide a single - driver for all simple i2c audio control chips (tda/tea*). - - insmod args: - tda8425 = 1 enable/disable the support for the - tda9840 = 1 various chips. - tda9850 = 1 The tea6300 can't be autodetected and is - tda9855 = 1 therefore off by default, if you have - tda9873 = 1 this one on your card (STB uses these) - tda9874a = 1 you have to enable it explicitly. - tea6300 = 0 The two tda985x chips use the same i2c - tea6420 = 1 address and can't be disturgished from - pic16c54 = 1 each other, you might have to disable - the wrong one. - debug = 1 print debug messages - - insmod args for tda9874a: - tda9874a_SIF=1/2 select sound IF input pin (1 or 2) - (default is pin 1) - tda9874a_AMSEL=0/1 auto-mute select for NICAM (default=0) - Please read note 3 below! - tda9874a_STD=n select TV sound standard (0..8): - 0 - A2, B/G - 1 - A2, M (Korea) - 2 - A2, D/K (1) - 3 - A2, D/K (2) - 4 - A2, D/K (3) - 5 - NICAM, I - 6 - NICAM, B/G - 7 - NICAM, D/K (default) - 8 - NICAM, L - - Note 1: tda9874a supports both tda9874h (old) and tda9874a (new) chips. - Note 2: tda9874h/a and tda9875 (which is supported separately by - tda9875.o) use the same i2c address so both modules should not be - used at the same time. - Note 3: Using tda9874a_AMSEL option depends on your TV card design! - AMSEL=0: auto-mute will switch between NICAM sound - and the sound on 1st carrier (i.e. FM mono or AM). - AMSEL=1: auto-mute will switch between NICAM sound - and the analog mono input (MONOIN pin). - If tda9874a decoder on your card has MONOIN pin not connected, then - use only tda9874_AMSEL=0 or don't specify this option at all. - For example: - card=65 (FlyVideo 2000S) - set AMSEL=1 or AMSEL=0 - card=72 (Prolink PV-BT878P rev.9B) - set AMSEL=0 only - -msp3400.o - -.. code-block:: none - - The driver for the msp34xx sound processor chips. If you have a - stereo card, you probably want to insmod this one. - - insmod args: - debug=1/2 print some debug info to the syslog, - 2 is more verbose. - simple=1 Use the "short programming" method. Newer - msp34xx versions support this. You need this - for dbx stereo. Default is on if supported by - the chip. - once=1 Don't check the TV-stations Audio mode - every few seconds, but only once after - channel switches. - amsound=1 Audio carrier is AM/NICAM at 6.5 Mhz. This - should improve things for french people, the - carrier autoscan seems to work with FM only... - -tea6300.o - OBSOLETE (use tvaudio instead) - -.. code-block:: none - - The driver for the tea6300 fader chip. If you have a stereo - card and the msp3400.o doesn't work, you might want to try this - one. This chip is seen on most STB TV/FM cards (usually from - Gateway OEM sold surplus on auction sites). - - insmod args: - debug=1 print some debug info to the syslog. - -tda8425.o - OBSOLETE (use tvaudio instead) - -.. code-block:: none - - The driver for the tda8425 fader chip. This driver used to be - part of bttv.c, so if your sound used to work but does not - anymore, try loading this module. - - insmod args: - debug=1 print some debug info to the syslog. - -tda985x.o - OBSOLETE (use tvaudio instead) - -.. code-block:: none - - The driver for the tda9850/55 audio chips. - - insmod args: - debug=1 print some debug info to the syslog. - chip=9850/9855 set the chip type. - - -If the box freezes hard with bttv ---------------------------------- - -It might be a bttv driver bug. It also might be bad hardware. It also -might be something else ... - -Just mailing me "bttv freezes" isn't going to help much. This README -has a few hints how you can help to pin down the problem. - - -bttv bugs -~~~~~~~~~ - -If some version works and another doesn't it is likely to be a driver -bug. It is very helpful if you can tell where exactly it broke -(i.e. the last working and the first broken version). - -With a hard freeze you probably doesn't find anything in the logfiles. -The only way to capture any kernel messages is to hook up a serial -console and let some terminal application log the messages. /me uses -screen. See Documentation/admin-guide/serial-console.rst for details on setting -up a serial console. - -Read Documentation/admin-guide/bug-hunting.rst to learn how to get any useful -information out of a register+stack dump printed by the kernel on -protection faults (so-called "kernel oops"). - -If you run into some kind of deadlock, you can try to dump a call trace -for each process using sysrq-t (see Documentation/admin-guide/sysrq.rst). -This way it is possible to figure where *exactly* some process in "D" -state is stuck. - -I've seen reports that bttv 0.7.x crashes whereas 0.8.x works rock solid -for some people. Thus probably a small buglet left somewhere in bttv -0.7.x. I have no idea where exactly, it works stable for me and a lot of -other people. But in case you have problems with the 0.7.x versions you -can give 0.8.x a try ... - - -hardware bugs -~~~~~~~~~~~~~ - -Some hardware can't deal with PCI-PCI transfers (i.e. grabber => vga). -Sometimes problems show up with bttv just because of the high load on -the PCI bus. The bt848/878 chips have a few workarounds for known -incompatibilities, see README.quirks. - -Some folks report that increasing the pci latency helps too, -althrought I'm not sure whenever this really fixes the problems or -only makes it less likely to happen. Both bttv and btaudio have a -insmod option to set the PCI latency of the device. - -Some mainboard have problems to deal correctly with multiple devices -doing DMA at the same time. bttv + ide seems to cause this sometimes, -if this is the case you likely see freezes only with video and hard disk -access at the same time. Updating the IDE driver to get the latest and -greatest workarounds for hardware bugs might fix these problems. - - -other -~~~~~ - -If you use some binary-only yunk (like nvidia module) try to reproduce -the problem without. - -IRQ sharing is known to cause problems in some cases. It works just -fine in theory and many configurations. Neverless it might be worth a -try to shuffle around the PCI cards to give bttv another IRQ or make -it share the IRQ with some other piece of hardware. IRQ sharing with -VGA cards seems to cause trouble sometimes. I've also seen funny -effects with bttv sharing the IRQ with the ACPI bridge (and -apci-enabled kernel). - -Bttv quirks ------------ - -Below is what the bt878 data book says about the PCI bug compatibility -modes of the bt878 chip. - -The triton1 insmod option sets the EN_TBFX bit in the control register. -The vsfx insmod option does the same for EN_VSFX bit. If you have -stability problems you can try if one of these options makes your box -work solid. - -drivers/pci/quirks.c knows about these issues, this way these bits are -enabled automagically for known-buggy chipsets (look at the kernel -messages, bttv tells you). - -Normal PCI Mode -~~~~~~~~~~~~~~~ - -The PCI REQ signal is the logical-or of the incoming function requests. -The inter-nal GNT[0:1] signals are gated asynchronously with GNT and -demultiplexed by the audio request signal. Thus the arbiter defaults to -the video function at power-up and parks there during no requests for -bus access. This is desirable since the video will request the bus more -often. However, the audio will have highest bus access priority. Thus -the audio will have first access to the bus even when issuing a request -after the video request but before the PCI external arbiter has granted -access to the Bt879. Neither function can preempt the other once on the -bus. The duration to empty the entire video PCI FIFO onto the PCI bus is -very short compared to the bus access latency the audio PCI FIFO can -tolerate. - - -430FX Compatibility Mode -~~~~~~~~~~~~~~~~~~~~~~~~ - -When using the 430FX PCI, the following rules will ensure -compatibility: - - (1) Deassert REQ at the same time as asserting FRAME. - (2) Do not reassert REQ to request another bus transaction until after - finish-ing the previous transaction. - -Since the individual bus masters do not have direct control of REQ, a -simple logical-or of video and audio requests would violate the rules. -Thus, both the arbiter and the initiator contain 430FX compatibility -mode logic. To enable 430FX mode, set the EN_TBFX bit as indicated in -Device Control Register on page 104. - -When EN_TBFX is enabled, the arbiter ensures that the two compatibility -rules are satisfied. Before GNT is asserted by the PCI arbiter, this -internal arbiter may still logical-or the two requests. However, once -the GNT is issued, this arbiter must lock in its decision and now route -only the granted request to the REQ pin. The arbiter decision lock -happens regardless of the state of FRAME because it does not know when -FRAME will be asserted (typically - each initiator will assert FRAME on -the cycle following GNT). When FRAME is asserted, it is the initiator s -responsibility to remove its request at the same time. It is the -arbiters responsibility to allow this request to flow through to REQ and -not allow the other request to hold REQ asserted. The decision lock may -be removed at the end of the transaction: for example, when the bus is -idle (FRAME and IRDY). The arbiter decision may then continue -asynchronously until GNT is again asserted. - - -Interfacing with Non-PCI 2.1 Compliant Core Logic -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A small percentage of core logic devices may start a bus transaction -during the same cycle that GNT is de-asserted. This is non PCI 2.1 -compliant. To ensure compatibility when using PCs with these PCI -controllers, the EN_VSFX bit must be enabled (refer to Device Control -Register on page 104). When in this mode, the arbiter does not pass GNT -to the internal functions unless REQ is asserted. This prevents a bus -transaction from starting the same cycle as GNT is de-asserted. This -also has the side effect of not being able to take advantage of bus -parking, thus lowering arbitration performance. The Bt879 drivers must -query for these non-compliant devices, and set the EN_VSFX bit only if -required. - - -Other elements of the tvcards array -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -If you are trying to make a new card work you might find it useful to -know what the other elements in the tvcards array are good for: - -.. code-block:: none - - video_inputs - # of video inputs the card has - audio_inputs - historical cruft, not used any more. - tuner - which input is the tuner - svhs - which input is svhs (all others are labeled composite) - muxsel - video mux, input->registervalue mapping - pll - same as pll= insmod option - tuner_type - same as tuner= insmod option - *_modulename - hint whenever some card needs this or that audio - module loaded to work properly. - has_radio - whenever this TV card has a radio tuner. - no_msp34xx - "1" disables loading of msp3400.o module - no_tda9875 - "1" disables loading of tda9875.o module - needs_tvaudio - set to "1" to load tvaudio.o module - -If some config item is specified both from the tvcards array and as -insmod option, the insmod option takes precedence. - -Cards ------ - -.. note:: - - For a more updated list, please check - https://linuxtv.org/wiki/index.php/Hardware_Device_Information - -Supported cards: Bt848/Bt848a/Bt849/Bt878/Bt879 cards -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -All cards with Bt848/Bt848a/Bt849/Bt878/Bt879 and normal -Composite/S-VHS inputs are supported. Teletext and Intercast support -(PAL only) for ALL cards via VBI sample decoding in software. - -Some cards with additional multiplexing of inputs or other additional -fancy chips are only partially supported (unless specifications by the -card manufacturer are given). When a card is listed here it isn't -necessarily fully supported. - -All other cards only differ by additional components as tuners, sound -decoders, EEPROMs, teletext decoders ... - - -MATRIX Vision -~~~~~~~~~~~~~ - -MV-Delta -- Bt848A -- 4 Composite inputs, 1 S-VHS input (shared with 4th composite) -- EEPROM - -http://www.matrix-vision.de/ - -This card has no tuner but supports all 4 composite (1 shared with an -S-VHS input) of the Bt848A. -Very nice card if you only have satellite TV but several tuners connected -to the card via composite. - -Many thanks to Matrix-Vision for giving us 2 cards for free which made -Bt848a/Bt849 single crystal operation support possible!!! - - - -Miro/Pinnacle PCTV -~~~~~~~~~~~~~~~~~~ - -- Bt848 - some (all??) come with 2 crystals for PAL/SECAM and NTSC -- PAL, SECAM or NTSC TV tuner (Philips or TEMIC) -- MSP34xx sound decoder on add on board - decoder is supported but AFAIK does not yet work - (other sound MUX setting in GPIO port needed??? somebody who fixed this???) -- 1 tuner, 1 composite and 1 S-VHS input -- tuner type is autodetected - -http://www.miro.de/ -http://www.miro.com/ - - -Many thanks for the free card which made first NTSC support possible back -in 1997! - - -Hauppauge Win/TV pci -~~~~~~~~~~~~~~~~~~~~ - -There are many different versions of the Hauppauge cards with different -tuners (TV+Radio ...), teletext decoders. -Note that even cards with same model numbers have (depending on the revision) -different chips on it. - -- Bt848 (and others but always in 2 crystal operation???) - newer cards have a Bt878 - -- PAL, SECAM, NTSC or tuner with or without Radio support - -e.g.: - -- PAL: - - - TDA5737: VHF, hyperband and UHF mixer/oscillator for TV and VCR 3-band tuners - - TSA5522: 1.4 GHz I2C-bus controlled synthesizer, I2C 0xc2-0xc3 - -- NTSC: - - - TDA5731: VHF, hyperband and UHF mixer/oscillator for TV and VCR 3-band tuners - - TSA5518: no datasheet available on Philips site - -- Philips SAA5246 or SAA5284 ( or no) Teletext decoder chip - with buffer RAM (e.g. Winbond W24257AS-35: 32Kx8 CMOS static RAM) - SAA5246 (I2C 0x22) is supported - -- 256 bytes EEPROM: Microchip 24LC02B or Philips 8582E2Y - with configuration information - I2C address 0xa0 (24LC02B also responds to 0xa2-0xaf) - -- 1 tuner, 1 composite and (depending on model) 1 S-VHS input - -- 14052B: mux for selection of sound source - -- sound decoder: TDA9800, MSP34xx (stereo cards) - - -Askey CPH-Series -~~~~~~~~~~~~~~~~ -Developed by TelSignal(?), OEMed by many vendors (Typhoon, Anubis, Dynalink) - -- Card series: - - CPH01x: BT848 capture only - - CPH03x: BT848 - - CPH05x: BT878 with FM - - CPH06x: BT878 (w/o FM) - - CPH07x: BT878 capture only - -- TV standards: - - CPH0x0: NTSC-M/M - - CPH0x1: PAL-B/G - - CPH0x2: PAL-I/I - - CPH0x3: PAL-D/K - - CPH0x4: SECAM-L/L - - CPH0x5: SECAM-B/G - - CPH0x6: SECAM-D/K - - CPH0x7: PAL-N/N - - CPH0x8: PAL-B/H - - CPH0x9: PAL-M/M - -- CPH03x was often sold as "TV capturer". - -Identifying: - - #) 878 cards can be identified by PCI Subsystem-ID: - - 144f:3000 = CPH06x - - 144F:3002 = CPH05x w/ FM - - 144F:3005 = CPH06x_LC (w/o remote control) - #) The cards have a sticker with "CPH"-model on the back. - #) These cards have a number printed on the PCB just above the tuner metal box: - - "80-CP2000300-x" = CPH03X - - "80-CP2000500-x" = CPH05X - - "80-CP2000600-x" = CPH06X / CPH06x_LC - - Askey sells these cards as "Magic TView series", Brand "MagicXpress". - Other OEM often call these "Tview", "TView99" or else. - -Lifeview Flyvideo Series: -~~~~~~~~~~~~~~~~~~~~~~~~~ - -The naming of these series differs in time and space. - -Identifying: - #) Some models can be identified by PCI subsystem ID: - - - 1852:1852 = Flyvideo 98 FM - - 1851:1850 = Flyvideo 98 - - 1851:1851 = Flyvideo 98 EZ (capture only) - - #) There is a print on the PCB: - - - LR25 = Flyvideo (Zoran ZR36120, SAA7110A) - - LR26 Rev.N = Flyvideo II (Bt848) - - LR26 Rev.O = Flyvideo II (Bt878) - - LR37 Rev.C = Flyvideo EZ (Capture only, ZR36120 + SAA7110) - - LR38 Rev.A1= Flyvideo II EZ (Bt848 capture only) - - LR50 Rev.Q = Flyvideo 98 (w/eeprom and PCI subsystem ID) - - LR50 Rev.W = Flyvideo 98 (no eeprom) - - LR51 Rev.E = Flyvideo 98 EZ (capture only) - - LR90 = Flyvideo 2000 (Bt878) - - LR90 Flyvideo 2000S (Bt878) w/Stereo TV (Package incl. LR91 daughterboard) - - LR91 = Stereo daughter card for LR90 - - LR97 = Flyvideo DVBS - - LR99 Rev.E = Low profile card for OEM integration (only internal audio!) bt878 - - LR136 = Flyvideo 2100/3100 (Low profile, SAA7130/SAA7134) - - LR137 = Flyvideo DV2000/DV3000 (SAA7130/SAA7134 + IEEE1394) - - LR138 Rev.C= Flyvideo 2000 (SAA7130) - - LR138 Flyvideo 3000 (SAA7134) w/Stereo TV - - - These exist in variations w/FM and w/Remote sometimes denoted - by suffixes "FM" and "R". - - #) You have a laptop (miniPCI card): - - - Product = FlyTV Platinum Mini - - Model/Chip = LR212/saa7135 - - - Lifeview.com.tw states (Feb. 2002): - "The FlyVideo2000 and FlyVideo2000s product name have renamed to FlyVideo98." - Their Bt8x8 cards are listed as discontinued. - - Flyvideo 2000S was probably sold as Flyvideo 3000 in some countries(Europe?). - The new Flyvideo 2000/3000 are SAA7130/SAA7134 based. - -"Flyvideo II" had been the name for the 848 cards, nowadays (in Germany) -this name is re-used for LR50 Rev.W. - -The Lifeview website mentioned Flyvideo III at some time, but such a card -has not yet been seen (perhaps it was the german name for LR90 [stereo]). -These cards are sold by many OEMs too. - -FlyVideo A2 (Elta 8680)= LR90 Rev.F (w/Remote, w/o FM, stereo TV by tda9821) {Germany} - -Lifeview 3000 (Elta 8681) as sold by Plus(April 2002), Germany = LR138 w/ saa7134 - -lifeview config coding on gpio pins 0-9 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -- LR50 rev. Q ("PARTS: 7031505116), Tuner wurde als Nr. 5 erkannt, Eingänge - SVideo, TV, Composite, Audio, Remote: - - - CP9..1=100001001 (1: 0-Ohm-Widerstand gegen GND unbestückt; 0: bestückt) - - -Typhoon TV card series: -~~~~~~~~~~~~~~~~~~~~~~~ - -These can be CPH, Flyvideo, Pixelview or KNC1 series. -Typhoon is the brand of Anubis. -Model 50680 got re-used, some model no. had different contents over time. - -Models: - - - 50680 "TV Tuner PCI Pal BG"(old,red package)=can be CPH03x(bt848) or CPH06x(bt878) - - 50680 "TV Tuner Pal BG" (blue package)= Pixelview PV-BT878P+ (Rev 9B) - - 50681 "TV Tuner PCI Pal I" (variant of 50680) - - 50682 "TView TV/FM Tuner Pal BG" = Flyvideo 98FM (LR50 Rev.Q) - - .. note:: - - The package has a picture of CPH05x (which would be a real TView) - - - 50683 "TV Tuner PCI SECAM" (variant of 50680) - - 50684 "TV Tuner Pal BG" = Pixelview 878TV(Rev.3D) - - 50686 "TV Tuner" = KNC1 TV Station - - 50687 "TV Tuner stereo" = KNC1 TV Station pro - - 50688 "TV Tuner RDS" (black package) = KNC1 TV Station RDS - - 50689 TV SAT DVB-S CARD CI PCI (SAA7146AH, SU1278?) = "KNC1 TV Station DVB-S" - - 50692 "TV/FM Tuner" (small PCB) - - 50694 TV TUNER CARD RDS (PHILIPS CHIPSET SAA7134HL) - - 50696 TV TUNER STEREO (PHILIPS CHIPSET SAA7134HL, MK3ME Tuner) - - 50804 PC-SAT TV/Audio Karte = Techni-PC-Sat (ZORAN 36120PQC, Tuner:Alps) - - 50866 TVIEW SAT RECEIVER+ADR - - 50868 "TV/FM Tuner Pal I" (variant of 50682) - - 50999 "TV/FM Tuner Secam" (variant of 50682) - -Guillemot -~~~~~~~~~ - -Models: - -- Maxi-TV PCI (ZR36120) -- Maxi TV Video 2 = LR50 Rev.Q (FI1216MF, PAL BG+SECAM) -- Maxi TV Video 3 = CPH064 (PAL BG + SECAM) - -Mentor -~~~~~~ - -Mentor TV card ("55-878TV-U1") = Pixelview 878TV(Rev.3F) (w/FM w/Remote) - -Prolink -~~~~~~~ - -- TV cards: - - - PixelView Play TV pro - (Model: PV-BT878P+ REV 8E) - - PixelView Play TV pro - (Model: PV-BT878P+ REV 9D) - - PixelView Play TV pro - (Model: PV-BT878P+ REV 4C / 8D / 10A ) - - PixelView Play TV - (Model: PV-BT848P+) - - 878TV - (Model: PV-BT878TV) - -- Multimedia TV packages (card + software pack): - - - PixelView Play TV Theater - (Model: PV-M4200) = PixelView Play TV pro + Software - - PixelView Play TV PAK - (Model: PV-BT878P+ REV 4E) - - PixelView Play TV/VCR - (Model: PV-M3200 REV 4C / 8D / 10A ) - - PixelView Studio PAK - (Model: M2200 REV 4C / 8D / 10A ) - - PixelView PowerStudio PAK - (Model: PV-M3600 REV 4E) - - PixelView DigitalVCR PAK - (Model: PV-M2400 REV 4C / 8D / 10A ) - - PixelView PlayTV PAK II (TV/FM card + usb camera) PV-M3800 - - PixelView PlayTV XP PV-M4700,PV-M4700(w/FM) - - PixelView PlayTV DVR PV-M4600 package contents:PixelView PlayTV pro, windvr & videoMail s/w - -- Further Cards: - - - PV-BT878P+rev.9B (Play TV Pro, opt. w/FM w/NICAM) - - PV-BT878P+rev.2F - - PV-BT878P Rev.1D (bt878, capture only) - - - XCapture PV-CX881P (cx23881) - - PlayTV HD PV-CX881PL+, PV-CX881PL+(w/FM) (cx23881) - - - DTV3000 PV-DTV3000P+ DVB-S CI = Twinhan VP-1030 - - DTV2000 DVB-S = Twinhan VP-1020 - -- Video Conferencing: - - - PixelView Meeting PAK - (Model: PV-BT878P) - - PixelView Meeting PAK Lite - (Model: PV-BT878P) - - PixelView Meeting PAK plus - (Model: PV-BT878P+rev 4C/8D/10A) - - PixelView Capture - (Model: PV-BT848P) - - PixelView PlayTV USB pro - - Model No. PV-NT1004+, PV-NT1004+ (w/FM) = NT1004 USB decoder chip + SAA7113 video decoder chip - -Dynalink -~~~~~~~~ - -These are CPH series. - -Phoebemicro -~~~~~~~~~~~ - -- TV Master = CPH030 or CPH060 -- TV Master FM = CPH050 - -Genius/Kye -~~~~~~~~~~ - -- Video Wonder/Genius Internet Video Kit = LR37 Rev.C -- Video Wonder Pro II (848 or 878) = LR26 - -Tekram -~~~~~~ - -- VideoCap C205 (Bt848) -- VideoCap C210 (zr36120 +Philips) -- CaptureTV M200 (ISA) -- CaptureTV M205 (Bt848) - -Lucky Star -~~~~~~~~~~ - -- Image World Conference TV = LR50 Rev. Q - -Leadtek -~~~~~~~ - -- WinView 601 (Bt848) -- WinView 610 (Zoran) -- WinFast2000 -- WinFast2000 XP - -Support for the Leadtek WinView 601 TV/FM -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Author of this section: Jon Tombs - -This card is basically the same as all the rest (Bt484A, Philips tuner), -the main difference is that they have attached a programmable attenuator to 3 -GPIO lines in order to give some volume control. They have also stuck an -infra-red remote control decoded on the board, I will add support for this -when I get time (it simple generates an interrupt for each key press, with -the key code is placed in the GPIO port). - -I don't yet have any application to test the radio support. The tuner -frequency setting should work but it is possible that the audio multiplexer -is wrong. If it doesn't work, send me email. - - -- No Thanks to Leadtek they refused to answer any questions about their - hardware. The driver was written by visual inspection of the card. If you - use this driver, send an email insult to them, and tell them you won't - continue buying their hardware unless they support Linux. - -- Little thanks to Princeton Technology Corp (http://www.princeton.com.tw) - who make the audio attenuator. Their publicly available data-sheet available - on their web site doesn't include the chip programming information! Hidden - on their server are the full data-sheets, but don't ask how I found it. - -To use the driver I use the following options, the tuner and pll settings might -be different in your country - -insmod videodev -insmod i2c scan=1 i2c_debug=0 verbose=0 -insmod tuner type=1 debug=0 -insmod bttv pll=1 radio=1 card=17 - - -KNC One -~~~~~~~ - -- TV-Station -- TV-Station SE (+Software Bundle) -- TV-Station pro (+TV stereo) -- TV-Station FM (+Radio) -- TV-Station RDS (+RDS) -- TV Station SAT (analog satellite) -- TV-Station DVB-S - -.. note:: newer Cards have saa7134, but model name stayed the same? - -Provideo -~~~~~~~~ - -- PV951 or PV-951 (also are sold as: - Boeder TV-FM Video Capture Card, - Titanmedia Supervision TV-2400, - Provideo PV951 TF, - 3DeMon PV951, - MediaForte TV-Vision PV951, - Yoko PV951, - Vivanco Tuner Card PCI Art.-Nr.: 68404, - ) now named PV-951T - -- Surveillance Series: - - - PV-141 - - PV-143 - - PV-147 - - PV-148 (capture only) - - PV-150 - - PV-151 - -- TV-FM Tuner Series: - - - PV-951TDV (tv tuner + 1394) - - PV-951T/TF - - PV-951PT/TF - - PV-956T/TF Low Profile - - PV-911 - -Highscreen -~~~~~~~~~~ - -Models: - -- TV Karte = LR50 Rev.S -- TV-Boostar = Terratec Terra TV+ Version 1.0 (Bt848, tda9821) "ceb105.pcb" - -Zoltrix -~~~~~~~ - -Models: - -- Face to Face Capture (Bt848 capture only) (PCB "VP-2848") -- Face To Face TV MAX (Bt848) (PCB "VP-8482 Rev1.3") -- Genie TV (Bt878) (PCB "VP-8790 Rev 2.1") -- Genie Wonder Pro - -AVerMedia -~~~~~~~~~ - -- AVer FunTV Lite (ISA, AV3001 chipset) "M101.C" -- AVerTV -- AVerTV Stereo -- AVerTV Studio (w/FM) -- AVerMedia TV98 with Remote -- AVerMedia TV/FM98 Stereo -- AVerMedia TVCAM98 -- TVCapture (Bt848) -- TVPhone (Bt848) -- TVCapture98 (="AVerMedia TV98" in USA) (Bt878) -- TVPhone98 (Bt878, w/FM) - -======== =========== =============== ======= ====== ======== ======================= -PCB PCI-ID Model-Name Eeprom Tuner Sound Country -======== =========== =============== ======= ====== ======== ======================= -M101.C ISA ! -M108-B Bt848 -- FR1236 US [#f2]_, [#f3]_ -M1A8-A Bt848 AVer TV-Phone FM1216 -- -M168-T 1461:0003 AVerTV Studio 48:17 FM1216 TDA9840T D [#f1]_ w/FM w/Remote -M168-U 1461:0004 TVCapture98 40:11 FI1216 -- D w/Remote -M168II-B 1461:0003 Medion MD9592 48:16 FM1216 TDA9873H D w/FM -======== =========== =============== ======= ====== ======== ======================= - -.. [#f1] Daughterboard MB68-A with TDA9820T and TDA9840T -.. [#f2] Sony NE41S soldered (stereo sound?) -.. [#f3] Daughterboard M118-A w/ pic 16c54 and 4 MHz quartz - -- US site has different drivers for (as of 09/2002): - - - EZ Capture/InterCam PCI (BT-848 chip) - - EZ Capture/InterCam PCI (BT-878 chip) - - TV-Phone (BT-848 chip) - - TV98 (BT-848 chip) - - TV98 With Remote (BT-848 chip) - - TV98 (BT-878 chip) - - TV98 With Remote (BT-878) - - TV/FM98 (BT-878 chip) - - AVerTV - - AverTV Stereo - - AVerTV Studio - -DE hat diverse Treiber fuer diese Modelle (Stand 09/2002): - - - TVPhone (848) mit Philips tuner FR12X6 (w/ FM radio) - - TVPhone (848) mit Philips tuner FM12X6 (w/ FM radio) - - TVCapture (848) w/Philips tuner FI12X6 - - TVCapture (848) non-Philips tuner - - TVCapture98 (Bt878) - - TVPhone98 (Bt878) - - AVerTV und TVCapture98 w/VCR (Bt 878) - - AVerTVStudio und TVPhone98 w/VCR (Bt878) - - AVerTV GO Serie (Kein SVideo Input) - - AVerTV98 (BT-878 chip) - - AVerTV98 mit Fernbedienung (BT-878 chip) - - AVerTV/FM98 (BT-878 chip) - - - VDOmate (www.averm.com.cn) = M168U ? - -Aimslab -~~~~~~~ - -Models: - -- Video Highway or "Video Highway TR200" (ISA) -- Video Highway Xtreme (aka "VHX") (Bt848, FM w/ TEA5757) - -IXMicro (former: IMS=Integrated Micro Solutions) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- IXTV BT848 (=TurboTV) -- IXTV BT878 -- IMS TurboTV (Bt848) - -Lifetec/Medion/Tevion/Aldi -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- LT9306/MD9306 = CPH061 -- LT9415/MD9415 = LR90 Rev.F or Rev.G -- MD9592 = Avermedia TVphone98 (PCI_ID=1461:0003), PCB-Rev=M168II-B (w/TDA9873H) -- MD9717 = KNC One (Rev D4, saa7134, FM1216 MK2 tuner) -- MD5044 = KNC One (Rev D4, saa7134, FM1216ME MK3 tuner) - -Modular Technologies (www.modulartech.com) UK -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- MM100 PCTV (Bt848) -- MM201 PCTV (Bt878, Bt832) w/ Quartzsight camera -- MM202 PCTV (Bt878, Bt832, tda9874) -- MM205 PCTV (Bt878) -- MM210 PCTV (Bt878) (Galaxy TV, Galaxymedia ?) - -Terratec -~~~~~~~~ - -Models: - -- Terra TV+ Version 1.0 (Bt848), "ceb105.PCB" printed on the PCB, TDA9821 -- Terra TV+ Version 1.1 (Bt878), "LR74 Rev.E" printed on the PCB, TDA9821 -- Terra TValueRadio, "LR102 Rev.C" printed on the PCB -- Terra TV/Radio+ Version 1.0, "80-CP2830100-0" TTTV3 printed on the PCB, - "CPH010-E83" on the back, SAA6588T, TDA9873H -- Terra TValue Version BT878, "80-CP2830110-0 TTTV4" printed on the PCB, - "CPH011-D83" on back -- Terra TValue Version 1.0 "ceb105.PCB" (really identical to Terra TV+ Version 1.0) -- Terra TValue New Revision "LR102 Rec.C" -- Terra Active Radio Upgrade (tea5757h, saa6588t) - -- LR74 is a newer PCB revision of ceb105 (both incl. connector for Active Radio Upgrade) - -- Cinergy 400 (saa7134), "E877 11(S)", "PM820092D" printed on PCB -- Cinergy 600 (saa7134) - -Technisat -~~~~~~~~~ - -Models: - -- Discos ADR PC-Karte ISA (no TV!) -- Discos ADR PC-Karte PCI (probably no TV?) -- Techni-PC-Sat (Sat. analog) - Rev 1.2 (zr36120, vpx3220, stv0030, saa5246, BSJE3-494A) -- Mediafocus I (zr36120/zr36125, drp3510, Sat. analog + ADR Radio) -- Mediafocus II (saa7146, Sat. analog) -- SatADR Rev 2.1 (saa7146a, saa7113h, stv0056a, msp3400c, drp3510a, BSKE3-307A) -- SkyStar 1 DVB (AV7110) = Technotrend Premium -- SkyStar 2 DVB (B2C2) (=Sky2PC) - -Siemens -~~~~~~~ - -Multimedia eXtension Board (MXB) (SAA7146, SAA7111) - -Powercolor -~~~~~~~~~~ - -Models: - -- MTV878 - Package comes with different contents: - - a) pcb "MTV878" (CARD=75) - b) Pixelview Rev. 4\_ - -- MTV878R w/Remote Control -- MTV878F w/Remote Control w/FM radio - -Pinnacle -~~~~~~~~ - -PCTV models: - -- Mirovideo PCTV (Bt848) -- Mirovideo PCTV SE (Bt848) -- Mirovideo PCTV Pro (Bt848 + Daughterboard for TV Stereo and FM) -- Studio PCTV Rave (Bt848 Version = Mirovideo PCTV) -- Studio PCTV Rave (Bt878 package w/o infrared) -- Studio PCTV (Bt878) -- Studio PCTV Pro (Bt878 stereo w/ FM) -- Pinnacle PCTV (Bt878, MT2032) -- Pinnacle PCTV Pro (Bt878, MT2032) -- Pinncale PCTV Sat (bt878a, HM1821/1221) ["Conexant CX24110 with CX24108 tuner, aka HM1221/HM1811"] -- Pinnacle PCTV Sat XE - -M(J)PEG capture and playback models: - -- DC1+ (ISA) -- DC10 (zr36057, zr36060, saa7110, adv7176) -- DC10+ (zr36067, zr36060, saa7110, adv7176) -- DC20 (ql16x24b,zr36050, zr36016, saa7110, saa7187 ...) -- DC30 (zr36057, zr36050, zr36016, vpx3220, adv7176, ad1843, tea6415, miro FST97A1) -- DC30+ (zr36067, zr36050, zr36016, vpx3220, adv7176) -- DC50 (zr36067, zr36050, zr36016, saa7112, adv7176 (2 pcs.?), ad1843, miro FST97A1, Lattice ???) - -Lenco -~~~~~ - -Models: - -- MXR-9565 (=Technisat Mediafocus?) -- MXR-9571 (Bt848) (=CPH031?) -- MXR-9575 -- MXR-9577 (Bt878) (=Prolink 878TV Rev.3x) -- MXTV-9578CP (Bt878) (= Prolink PV-BT878P+4E) - -Iomega -~~~~~~ - -Buz (zr36067, zr36060, saa7111, saa7185) - -LML -~~~ - LML33 (zr36067, zr36060, bt819, bt856) - -Grandtec -~~~~~~~~ - -Models: - -- Grand Video Capture (Bt848) -- Multi Capture Card (Bt878) - -Koutech -~~~~~~~ - -Models: - -- KW-606 (Bt848) -- KW-607 (Bt848 capture only) -- KW-606RSF -- KW-607A (capture only) -- KW-608 (Zoran capture only) - -IODATA (jp) -~~~~~~~~~~~ - -Models: - -- GV-BCTV/PCI -- GV-BCTV2/PCI -- GV-BCTV3/PCI -- GV-BCTV4/PCI -- GV-VCP/PCI (capture only) -- GV-VCP2/PCI (capture only) - -Canopus (jp) -~~~~~~~~~~~~ - -WinDVR = Kworld "KW-TVL878RF" - -www.sigmacom.co.kr -~~~~~~~~~~~~~~~~~~ - -Sigma Cyber TV II - -www.sasem.co.kr -~~~~~~~~~~~~~~~ - -Litte OnAir TV - -hama -~~~~ - -TV/Radio-Tuner Card, PCI (Model 44677) = CPH051 - -Sigma Designs -~~~~~~~~~~~~~ - -Hollywood plus (em8300, em9010, adv7175), (PCB "M340-10") MPEG DVD decoder - -Formac -~~~~~~ - -Models: - -- iProTV (Card for iMac Mezzanine slot, Bt848+SCSI) -- ProTV (Bt848) -- ProTV II = ProTV Stereo (Bt878) ["stereo" means FM stereo, tv is still mono] - -ATI -~~~ - -Models: - -- TV-Wonder -- TV-Wonder VE - -Diamond Multimedia -~~~~~~~~~~~~~~~~~~ - -DTV2000 (Bt848, tda9875) - -Aopen -~~~~~ - -- VA1000 Plus (w/ Stereo) -- VA1000 Lite -- VA1000 (=LR90) - -Intel -~~~~~ - -Models: - -- Smart Video Recorder (ISA full-length) -- Smart Video Recorder pro (ISA half-length) -- Smart Video Recorder III (Bt848) - -STB -~~~ - -Models: - -- STB Gateway 6000704 (bt878) -- STB Gateway 6000699 (bt848) -- STB Gateway 6000402 (bt848) -- STB TV130 PCI - -Videologic -~~~~~~~~~~ - -Models: - -- Captivator Pro/TV (ISA?) -- Captivator PCI/VC (Bt848 bundled with camera) (capture only) - -Technotrend -~~~~~~~~~~~~ - -Models: - -- TT-SAT PCI (PCB "Sat-PCI Rev.:1.3.1"; zr36125, vpx3225d, stc0056a, Tuner:BSKE6-155A -- TT-DVB-Sat - - revisions 1.1, 1.3, 1.5, 1.6 and 2.1 - - This card is sold as OEM from: - - - Siemens DVB-s Card - - Hauppauge WinTV DVB-S - - Technisat SkyStar 1 DVB - - Galaxis DVB Sat - - - Now this card is called TT-PCline Premium Family - - TT-Budget (saa7146, bsru6-701a) - This card is sold as OEM from: - - - Hauppauge WinTV Nova - - Satelco Standard PCI (DVB-S) - - TT-DVB-C PCI - -Teles -~~~~~ - - DVB-s (Rev. 2.2, BSRV2-301A, data only?) - -Remote Vision -~~~~~~~~~~~~~ - -MX RV605 (Bt848 capture only) - -Boeder -~~~~~~ - -Models: - -- PC ChatCam (Model 68252) (Bt848 capture only) -- Tv/Fm Capture Card (Model 68404) = PV951 - -Media-Surfer (esc-kathrein.de) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- Sat-Surfer (ISA) -- Sat-Surfer PCI = Techni-PC-Sat -- Cable-Surfer 1 -- Cable-Surfer 2 -- Cable-Surfer PCI (zr36120) -- Audio-Surfer (ISA Radio card) - -Jetway (www.jetway.com.tw) -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- JW-TV 878M -- JW-TV 878 = KWorld KW-TV878RF - -Galaxis -~~~~~~~ - -Models: - -- Galaxis DVB Card S CI -- Galaxis DVB Card C CI -- Galaxis DVB Card S -- Galaxis DVB Card C -- Galaxis plug.in S [neuer Name: Galaxis DVB Card S CI - -Hauppauge -~~~~~~~~~ - -Models: - -- many many WinTV models ... -- WinTV DVBs = Technotrend Premium 1.3 -- WinTV NOVA = Technotrend Budget 1.1 "S-DVB DATA" -- WinTV NOVA-CI "SDVBACI" -- WinTV Nova USB (=Technotrend USB 1.0) -- WinTV-Nexus-s (=Technotrend Premium 2.1 or 2.2) -- WinTV PVR -- WinTV PVR 250 -- WinTV PVR 450 - -US models - --990 WinTV-PVR-350 (249USD) (iTVC15 chipset + radio) --980 WinTV-PVR-250 (149USD) (iTVC15 chipset) --880 WinTV-PVR-PCI (199USD) (KFIR chipset + bt878) --881 WinTV-PVR-USB --190 WinTV-GO --191 WinTV-GO-FM --404 WinTV --401 WinTV-radio --495 WinTV-Theater --602 WinTV-USB --621 WinTV-USB-FM --600 USB-Live --698 WinTV-HD --697 WinTV-D --564 WinTV-Nexus-S - -Deutsche Modelle: - --603 WinTV GO --719 WinTV Primio-FM --718 WinTV PCI-FM --497 WinTV Theater --569 WinTV USB --568 WinTV USB-FM --882 WinTV PVR --981 WinTV PVR 250 --891 WinTV-PVR-USB --541 WinTV Nova --488 WinTV Nova-Ci --564 WinTV-Nexus-s --727 WinTV-DVB-c --545 Common Interface --898 WinTV-Nova-USB - -UK models: - --607 WinTV Go --693,793 WinTV Primio FM --647,747 WinTV PCI FM --498 WinTV Theater --883 WinTV PVR --893 WinTV PVR USB (Duplicate entry) --566 WinTV USB (UK) --573 WinTV USB FM --429 Impact VCB (bt848) --600 USB Live (Video-In 1x Comp, 1xSVHS) --542 WinTV Nova --717 WinTV DVB-S --909 Nova-t PCI --893 Nova-t USB (Duplicate entry) --802 MyTV --804 MyView --809 MyVideo --872 MyTV2Go FM --546 WinTV Nova-S CI --543 WinTV Nova --907 Nova-S USB --908 Nova-T USB --717 WinTV Nexus-S --157 DEC3000-s Standalone + USB - -Spain: - --685 WinTV-Go --690 WinTV-PrimioFM --416 WinTV-PCI Nicam Estereo --677 WinTV-PCI-FM --699 WinTV-Theater --683 WinTV-USB --678 WinTV-USB-FM --983 WinTV-PVR-250 --883 WinTV-PVR-PCI --993 WinTV-PVR-350 --893 WinTV-PVR-USB --728 WinTV-DVB-C PCI --832 MyTV2Go --869 MyTV2Go-FM --805 MyVideo (USB) - - -Matrix-Vision -~~~~~~~~~~~~~ - -Models: - -- MATRIX-Vision MV-Delta -- MATRIX-Vision MV-Delta 2 -- MVsigma-SLC (Bt848) - -Conceptronic (.net) -~~~~~~~~~~~~~~~~~~~ - -Models: - -- TVCON FM, TV card w/ FM = CPH05x -- TVCON = CPH06x - -BestData -~~~~~~~~ - -Models: - -- HCC100 = VCC100rev1 + camera -- VCC100 rev1 (bt848) -- VCC100 rev2 (bt878) - -Gallant (www.gallantcom.com) www.minton.com.tw -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- Intervision IV-510 (capture only bt8x8) -- Intervision IV-550 (bt8x8) -- Intervision IV-100 (zoran) -- Intervision IV-1000 (bt8x8) - -Asonic (www.asonic.com.cn) (website down) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -SkyEye tv 878 - -Hoontech -~~~~~~~~ - -878TV/FM - -Teppro (www.itcteppro.com.tw) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- ITC PCITV (Card Ver 1.0) "Teppro TV1/TVFM1 Card" -- ITC PCITV (Card Ver 2.0) -- ITC PCITV (Card Ver 3.0) = "PV-BT878P+ (REV.9D)" -- ITC PCITV (Card Ver 4.0) -- TEPPRO IV-550 (For BT848 Main Chip) -- ITC DSTTV (bt878, satellite) -- ITC VideoMaker (saa7146, StreamMachine sm2110, tvtuner) "PV-SM2210P+ (REV:1C)" - -Kworld (www.kworld.com.tw) -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -PC TV Station: - -- KWORLD KW-TV878R TV (no radio) -- KWORLD KW-TV878RF TV (w/ radio) -- KWORLD KW-TVL878RF (low profile) -- KWORLD KW-TV713XRF (saa7134) - - - MPEG TV Station (same cards as above plus WinDVR Software MPEG en/decoder) - -- KWORLD KW-TV878R -Pro TV (no Radio) -- KWORLD KW-TV878RF-Pro TV (w/ Radio) -- KWORLD KW-TV878R -Ultra TV (no Radio) -- KWORLD KW-TV878RF-Ultra TV (w/ Radio) - -JTT/ Justy Corp.(http://www.jtt.ne.jp/) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -JTT-02 (JTT TV) "TV watchmate pro" (bt848) - -ADS www.adstech.com -~~~~~~~~~~~~~~~~~~~ - -Models: - -- Channel Surfer TV ( CHX-950 ) -- Channel Surfer TV+FM ( CHX-960FM ) - -AVEC www.prochips.com -~~~~~~~~~~~~~~~~~~~~~ - -AVEC Intercapture (bt848, tea6320) - -NoBrand -~~~~~~~ - -TV Excel = Australian Name for "PV-BT878P+ 8E" or "878TV Rev.3\_" - -Mach www.machspeed.com -~~~~~~~~~~~~~~~~~~~~~~ - -Mach TV 878 - -Eline www.eline-net.com/ -~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- Eline Vision TVMaster / TVMaster FM (ELV-TVM/ ELV-TVM-FM) = LR26 (bt878) -- Eline Vision TVMaster-2000 (ELV-TVM-2000, ELV-TVM-2000-FM)= LR138 (saa713x) - -Spirit -~~~~~~ - -- Spirit TV Tuner/Video Capture Card (bt848) - -Boser www.boser.com.tw -~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- HS-878 Mini PCI Capture Add-on Card -- HS-879 Mini PCI 3D Audio and Capture Add-on Card (w/ ES1938 Solo-1) - -Satelco www.citycom-gmbh.de, www.satelco.de -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- TV-FM =KNC1 saa7134 -- Standard PCI (DVB-S) = Technotrend Budget -- Standard PCI (DVB-S) w/ CI -- Satelco Highend PCI (DVB-S) = Technotrend Premium - - -Sensoray www.sensoray.com -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- Sensoray 311 (PC/104 bus) -- Sensoray 611 (PCI) - -CEI (Chartered Electronics Industries Pte Ltd [CEI] [FCC ID HBY]) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- TV Tuner - HBY-33A-RAFFLES Brooktree Bt848KPF + Philips -- TV Tuner MG9910 - HBY33A-TVO CEI + Philips SAA7110 + OKI M548262 + ST STV8438CV -- Primetime TV (ISA) - - - acquired by Singapore Technologies - - now operating as Chartered Semiconductor Manufacturing - - Manufacturer of video cards is listed as: - - - Cogent Electronics Industries [CEI] - -AITech -~~~~~~ - -Models: - -- Wavewatcher TV (ISA) -- AITech WaveWatcher TV-PCI = can be LR26 (Bt848) or LR50 (BT878) -- WaveWatcher TVR-202 TV/FM Radio Card (ISA) - -MAXRON -~~~~~~ - -Maxron MaxTV/FM Radio (KW-TV878-FNT) = Kworld or JW-TV878-FBK - -www.ids-imaging.de -~~~~~~~~~~~~~~~~~~ - -Models: - -- Falcon Series (capture only) - -In USA: http://www.theimagingsource.com/ -- DFG/LC1 - -www.sknet-web.co.jp -~~~~~~~~~~~~~~~~~~~ - -SKnet Monster TV (saa7134) - -A-Max www.amaxhk.com (Colormax, Amax, Napa) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -APAC Viewcomp 878 - -Cybertainment -~~~~~~~~~~~~~ - -Models: - -- CyberMail AV Video Email Kit w/ PCI Capture Card (capture only) -- CyberMail Xtreme - -These are Flyvideo - -VCR (http://www.vcrinc.com/) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Video Catcher 16 - -Twinhan -~~~~~~~ - -Models: - -- DST Card/DST-IP (bt878, twinhan asic) VP-1020 - - Sold as: - - - KWorld DVBS Satellite TV-Card - - Powercolor DSTV Satellite Tuner Card - - Prolink Pixelview DTV2000 - - Provideo PV-911 Digital Satellite TV Tuner Card With Common Interface ? - -- DST-CI Card (DVB Satellite) VP-1030 -- DCT Card (DVB cable) - -MSI -~~~ - -Models: - -- MSI TV@nywhere Tuner Card (MS-8876) (CX23881/883) Not Bt878 compatible. -- MS-8401 DVB-S - -Focus www.focusinfo.com -~~~~~~~~~~~~~~~~~~~~~~~ - -InVideo PCI (bt878) - -Sdisilk www.sdisilk.com/ -~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- SDI Silk 100 -- SDI Silk 200 SDI Input Card - -www.euresys.com -~~~~~~~~~~~~~~~ - -PICOLO series - -PMC/Pace -~~~~~~~~ - -www.pacecom.co.uk website closed - -Mercury www.kobian.com (UK and FR) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Models: - -- LR50 -- LR138RBG-Rx == LR138 - -TEC sound -~~~~~~~~~ - -TV-Mate = Zoltrix VP-8482 - -Though educated googling found: www.techmakers.com - -(package and manuals don't have any other manufacturer info) TecSound - -Lorenzen www.lorenzen.de -~~~~~~~~~~~~~~~~~~~~~~~~ - -SL DVB-S PCI = Technotrend Budget PCI (su1278 or bsru version) - -Origo (.uk) www.origo2000.com -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -PC TV Card = LR50 - -I/O Magic www.iomagic.com -~~~~~~~~~~~~~~~~~~~~~~~~~ - -PC PVR - Desktop TV Personal Video Recorder DR-PCTV100 = Pinnacle ROB2D-51009464 4.0 + Cyberlink PowerVCR II - -Arowana -~~~~~~~ - -TV-Karte / Poso Power TV (?) = Zoltrix VP-8482 (?) - -iTVC15 boards -~~~~~~~~~~~~~ - -kuroutoshikou.com ITVC15 -yuan.com MPG160 PCI TV (Internal PCI MPEG2 encoder card plus TV-tuner) - -Asus www.asuscom.com -~~~~~~~~~~~~~~~~~~~~ - -Models: - -- Asus TV Tuner Card 880 NTSC (low profile, cx23880) -- Asus TV (saa7134) - -Hoontech -~~~~~~~~ - -http://www.hoontech.de/ - -- HART Vision 848 (H-ART Vision 848) -- HART Vision 878 (H-Art Vision 878) - - - -Chips used at bttv devices --------------------------- - -- all boards: - - - Brooktree Bt848/848A/849/878/879: video capture chip - -- Board specific - - - Miro PCTV: - - - Philips or Temic Tuner - - - Hauppauge Win/TV pci (version 405): - - - Microchip 24LC02B or Philips 8582E2Y: - - - 256 Byte EEPROM with configuration information - - I2C 0xa0-0xa1, (24LC02B also responds to 0xa2-0xaf) - - - Philips SAA5246AGP/E: Videotext decoder chip, I2C 0x22-0x23 - - - TDA9800: sound decoder - - - Winbond W24257AS-35: 32Kx8 CMOS static RAM (Videotext buffer mem) - - - 14052B: analog switch for selection of sound source - -- PAL: - - - TDA5737: VHF, hyperband and UHF mixer/oscillator for TV and VCR 3-band tuners - - TSA5522: 1.4 GHz I2C-bus controlled synthesizer, I2C 0xc2-0xc3 - -- NTSC: - - - TDA5731: VHF, hyperband and UHF mixer/oscillator for TV and VCR 3-band tuners - - TSA5518: no datasheet available on Philips site - -- STB TV pci: - - - ??? - - if you want better support for STB cards send me info! - Look at the board! What chips are on it? - - - - -Specs ------ - -Philips http://www.Semiconductors.COM/pip/ - -Conexant http://www.conexant.com/ - -Micronas http://www.micronas.com/en/home/index.html - -Thanks ------- - -Many thanks to: - -- Markus Schroeder for information on the Bt848 - and tuner programming and his control program xtvc. - -- Martin Buck for his great Videotext - package. - -- Gerd Hoffmann for the MSP3400 support and the modular - I2C, tuner, ... support. - - -- MATRIX Vision for giving us 2 cards for free, which made support of - single crystal operation possible. - -- MIRO for providing a free PCTV card and detailed information about the - components on their cards. (E.g. how the tuner type is detected) - Without their card I could not have debugged the NTSC mode. - -- Hauppauge for telling how the sound input is selected and what components - they do and will use on their radio cards. - Also many thanks for faxing me the FM1216 data sheet. - -Contributors ------------- - -Michael Chu - AverMedia fix and more flexible card recognition - -Alan Cox - Video4Linux interface and 2.1.x kernel adaptation - -Chris Kleitsch - Hardware I2C - -Gerd Hoffmann - Radio card (ITT sound processor) - -bigfoot - -Ragnar Hojland Espinosa - ConferenceTV card - - -+ many more (please mail me if you are missing in this list and would - like to be mentioned) diff --git a/Documentation/media/v4l-drivers/cafe_ccic.rst b/Documentation/media/v4l-drivers/cafe_ccic.rst deleted file mode 100644 index ff7fbce1342a..000000000000 --- a/Documentation/media/v4l-drivers/cafe_ccic.rst +++ /dev/null @@ -1,62 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The cafe_ccic driver -==================== - -Author: Jonathan Corbet - -Introduction ------------- - -"cafe_ccic" is a driver for the Marvell 88ALP01 "cafe" CMOS camera -controller. This is the controller found in first-generation OLPC systems, -and this driver was written with support from the OLPC project. - -Current status: the core driver works. It can generate data in YUV422, -RGB565, and RGB444 formats. (Anybody looking at the code will see RGB32 as -well, but that is a debugging aid which will be removed shortly). VGA and -QVGA modes work; CIF is there but the colors remain funky. Only the OV7670 -sensor is known to work with this controller at this time. - -To try it out: either of these commands will work: - -.. code-block:: none - - $ mplayer tv:// -tv driver=v4l2:width=640:height=480 -nosound - $ mplayer tv:// -tv driver=v4l2:width=640:height=480:outfmt=bgr16 -nosound - -The "xawtv" utility also works; gqcam does not, for unknown reasons. - -Load time options ------------------ - -There are a few load-time options, most of which can be changed after -loading via sysfs as well: - - - alloc_bufs_at_load: Normally, the driver will not allocate any DMA - buffers until the time comes to transfer data. If this option is set, - then worst-case-sized buffers will be allocated at module load time. - This option nails down the memory for the life of the module, but - perhaps decreases the chances of an allocation failure later on. - - - dma_buf_size: The size of DMA buffers to allocate. Note that this - option is only consulted for load-time allocation; when buffers are - allocated at run time, they will be sized appropriately for the current - camera settings. - - - n_dma_bufs: The controller can cycle through either two or three DMA - buffers. Normally, the driver tries to use three buffers; on faster - systems, however, it will work well with only two. - - - min_buffers: The minimum number of streaming I/O buffers that the driver - will consent to work with. Default is one, but, on slower systems, - better behavior with mplayer can be achieved by setting to a higher - value (like six). - - - max_buffers: The maximum number of streaming I/O buffers; default is - ten. That number was carefully picked out of a hat and should not be - assumed to actually mean much of anything. - - - flip: If this boolean parameter is set, the sensor will be instructed to - invert the video image. Whether it makes sense is determined by how - your particular camera is mounted. diff --git a/Documentation/media/v4l-drivers/cardlist.rst b/Documentation/media/v4l-drivers/cardlist.rst deleted file mode 100644 index 14249f47fbc2..000000000000 --- a/Documentation/media/v4l-drivers/cardlist.rst +++ /dev/null @@ -1,20 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Cards List -========== - -.. toctree:: - :maxdepth: 1 - - au0828-cardlist - bttv-cardlist - cx23885-cardlist - cx88-cardlist - em28xx-cardlist - ivtv-cardlist - saa7134-cardlist - saa7164-cardlist - tm6000-cardlist - tuner-cardlist - usbvision-cardlist - gspca-cardlist diff --git a/Documentation/media/v4l-drivers/cpia2.rst b/Documentation/media/v4l-drivers/cpia2.rst deleted file mode 100644 index 6f4258aebbfe..000000000000 --- a/Documentation/media/v4l-drivers/cpia2.rst +++ /dev/null @@ -1,149 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The cpia2 driver -================ - -Authors: Peter Pregler , -Scott J. Bertin , and -Jarl Totland for the original cpia driver, which -this one was modelled from. - -Introduction ------------- - -This is a driver for STMicroelectronics's CPiA2 (second generation -Colour Processor Interface ASIC) based cameras. This camera outputs an MJPEG -stream at up to vga size. It implements the Video4Linux interface as much as -possible. Since the V4L interface does not support compressed formats, only -an mjpeg enabled application can be used with the camera. We have modified the -gqcam application to view this stream. - -The driver is implemented as two kernel modules. The cpia2 module -contains the camera functions and the V4L interface. The cpia2_usb module -contains usb specific functions. The main reason for this was the size of the -module was getting out of hand, so I separated them. It is not likely that -there will be a parallel port version. - -Features --------- - -- Supports cameras with the Vision stv6410 (CIF) and stv6500 (VGA) cmos - sensors. I only have the vga sensor, so can't test the other. -- Image formats: VGA, QVGA, CIF, QCIF, and a number of sizes in between. - VGA and QVGA are the native image sizes for the VGA camera. CIF is done - in the coprocessor by scaling QVGA. All other sizes are done by clipping. -- Palette: YCrCb, compressed with MJPEG. -- Some compression parameters are settable. -- Sensor framerate is adjustable (up to 30 fps CIF, 15 fps VGA). -- Adjust brightness, color, contrast while streaming. -- Flicker control settable for 50 or 60 Hz mains frequency. - -Making and installing the stv672 driver modules ------------------------------------------------ - -Requirements -~~~~~~~~~~~~ - -Video4Linux must be either compiled into the kernel or -available as a module. Video4Linux2 is automatically detected and made -available at compile time. - -Setup -~~~~~ - -Use 'modprobe cpia2' to load and 'modprobe -r cpia2' to unload. This -may be done automatically by your distribution. - -Driver options -~~~~~~~~~~~~~~ - -.. tabularcolumns:: |p{13ex}|L| - - -============== ======================================================== -Option Description -============== ======================================================== -video_nr video device to register (0=/dev/video0, etc) - range -1 to 64. default is -1 (first available) - If you have more than 1 camera, this MUST be -1. -buffer_size Size for each frame buffer in bytes (default 68k) -num_buffers Number of frame buffers (1-32, default 3) -alternate USB Alternate (2-7, default 7) -flicker_freq Frequency for flicker reduction(50 or 60, default 60) -flicker_mode 0 to disable, or 1 to enable flicker reduction. - (default 0). This is only effective if the camera - uses a stv0672 coprocessor. -============== ======================================================== - -Setting the options -~~~~~~~~~~~~~~~~~~~ - -If you are using modules, edit /etc/modules.conf and add an options -line like this: - -.. code-block:: none - - options cpia2 num_buffers=3 buffer_size=65535 - -If the driver is compiled into the kernel, at boot time specify them -like this: - -.. code-block:: none - - cpia2.num_buffers=3 cpia2.buffer_size=65535 - -What buffer size should I use? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The maximum image size depends on the alternate you choose, and the -frame rate achieved by the camera. If the compression engine is able to -keep up with the frame rate, the maximum image size is given by the table -below. - -The compression engine starts out at maximum compression, and will -increase image quality until it is close to the size in the table. As long -as the compression engine can keep up with the frame rate, after a short time -the images will all be about the size in the table, regardless of resolution. - -At low alternate settings, the compression engine may not be able to -compress the image enough and will reduce the frame rate by producing larger -images. - -The default of 68k should be good for most users. This will handle -any alternate at frame rates down to 15fps. For lower frame rates, it may -be necessary to increase the buffer size to avoid having frames dropped due -to insufficient space. - -========== ========== ======== ===== -Alternate bytes/ms 15fps 30fps -========== ========== ======== ===== - 2 128 8533 4267 - 3 384 25600 12800 - 4 640 42667 21333 - 5 768 51200 25600 - 6 896 59733 29867 - 7 1023 68200 34100 -========== ========== ======== ===== - -Table: Image size(bytes) - - -How many buffers should I use? -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -For normal streaming, 3 should give the best results. With only 2, -it is possible for the camera to finish sending one image just after a -program has started reading the other. If this happens, the driver must drop -a frame. The exception to this is if you have a heavily loaded machine. In -this case use 2 buffers. You are probably not reading at the full frame rate. -If the camera can send multiple images before a read finishes, it could -overwrite the third buffer before the read finishes, leading to a corrupt -image. Single and double buffering have extra checks to avoid overwriting. - -Using the camera -~~~~~~~~~~~~~~~~ - -We are providing a modified gqcam application to view the output. In -order to avoid confusion, here it is called mview. There is also the qx5view -program which can also control the lights on the qx5 microscope. MJPEG Tools -(http://mjpeg.sourceforge.net) can also be used to record from the camera. diff --git a/Documentation/media/v4l-drivers/cx23885-cardlist.rst b/Documentation/media/v4l-drivers/cx23885-cardlist.rst deleted file mode 100644 index ddff8da98eeb..000000000000 --- a/Documentation/media/v4l-drivers/cx23885-cardlist.rst +++ /dev/null @@ -1,263 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -cx23885 cards list -================== - -.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| - -.. flat-table:: - :header-rows: 1 - :widths: 2 19 18 - :stub-columns: 0 - - * - Card number - - Card name - - PCI IDs - - * - 0 - - UNKNOWN/GENERIC - - 0070:3400 - - * - 1 - - Hauppauge WinTV-HVR1800lp - - 0070:7600 - - * - 2 - - Hauppauge WinTV-HVR1800 - - 0070:7800, 0070:7801, 0070:7809 - - * - 3 - - Hauppauge WinTV-HVR1250 - - 0070:7911 - - * - 4 - - DViCO FusionHDTV5 Express - - 18ac:d500 - - * - 5 - - Hauppauge WinTV-HVR1500Q - - 0070:7790, 0070:7797 - - * - 6 - - Hauppauge WinTV-HVR1500 - - 0070:7710, 0070:7717 - - * - 7 - - Hauppauge WinTV-HVR1200 - - 0070:71d1, 0070:71d3 - - * - 8 - - Hauppauge WinTV-HVR1700 - - 0070:8101 - - * - 9 - - Hauppauge WinTV-HVR1400 - - 0070:8010 - - * - 10 - - DViCO FusionHDTV7 Dual Express - - 18ac:d618 - - * - 11 - - DViCO FusionHDTV DVB-T Dual Express - - 18ac:db78 - - * - 12 - - Leadtek Winfast PxDVR3200 H - - 107d:6681 - - * - 13 - - Compro VideoMate E650F - - 185b:e800 - - * - 14 - - TurboSight TBS 6920 - - 6920:8888 - - * - 15 - - TeVii S470 - - d470:9022 - - * - 16 - - DVBWorld DVB-S2 2005 - - 0001:2005 - - * - 17 - - NetUP Dual DVB-S2 CI - - 1b55:2a2c - - * - 18 - - Hauppauge WinTV-HVR1270 - - 0070:2211 - - * - 19 - - Hauppauge WinTV-HVR1275 - - 0070:2215, 0070:221d, 0070:22f2 - - * - 20 - - Hauppauge WinTV-HVR1255 - - 0070:2251, 0070:22f1 - - * - 21 - - Hauppauge WinTV-HVR1210 - - 0070:2291, 0070:2295, 0070:2299, 0070:229d, 0070:22f0, 0070:22f3, 0070:22f4, 0070:22f5 - - * - 22 - - Mygica X8506 DMB-TH - - 14f1:8651 - - * - 23 - - Magic-Pro ProHDTV Extreme 2 - - 14f1:8657 - - * - 24 - - Hauppauge WinTV-HVR1850 - - 0070:8541 - - * - 25 - - Compro VideoMate E800 - - 1858:e800 - - * - 26 - - Hauppauge WinTV-HVR1290 - - 0070:8551 - - * - 27 - - Mygica X8558 PRO DMB-TH - - 14f1:8578 - - * - 28 - - LEADTEK WinFast PxTV1200 - - 107d:6f22 - - * - 29 - - GoTView X5 3D Hybrid - - 5654:2390 - - * - 30 - - NetUP Dual DVB-T/C-CI RF - - 1b55:e2e4 - - * - 31 - - Leadtek Winfast PxDVR3200 H XC4000 - - 107d:6f39 - - * - 32 - - MPX-885 - - - - * - 33 - - Mygica X8502/X8507 ISDB-T - - 14f1:8502 - - * - 34 - - TerraTec Cinergy T PCIe Dual - - 153b:117e - - * - 35 - - TeVii S471 - - d471:9022 - - * - 36 - - Hauppauge WinTV-HVR1255 - - 0070:2259 - - * - 37 - - Prof Revolution DVB-S2 8000 - - 8000:3034 - - * - 38 - - Hauppauge WinTV-HVR4400/HVR5500 - - 0070:c108, 0070:c138, 0070:c1f8 - - * - 39 - - AVerTV Hybrid Express Slim HC81R - - 1461:d939 - - * - 40 - - TurboSight TBS 6981 - - 6981:8888 - - * - 41 - - TurboSight TBS 6980 - - 6980:8888 - - * - 42 - - Leadtek Winfast PxPVR2200 - - 107d:6f21 - - * - 43 - - Hauppauge ImpactVCB-e - - 0070:7133, 0070:7137 - - * - 44 - - DViCO FusionHDTV DVB-T Dual Express2 - - 18ac:db98 - - * - 45 - - DVBSky T9580 - - 4254:9580 - - * - 46 - - DVBSky T980C - - 4254:980c - - * - 47 - - DVBSky S950C - - 4254:950c - - * - 48 - - Technotrend TT-budget CT2-4500 CI - - 13c2:3013 - - * - 49 - - DVBSky S950 - - 4254:0950 - - * - 50 - - DVBSky S952 - - 4254:0952 - - * - 51 - - DVBSky T982 - - 4254:0982 - - * - 52 - - Hauppauge WinTV-HVR5525 - - 0070:f038 - - * - 53 - - Hauppauge WinTV Starburst - - 0070:c12a - - * - 54 - - ViewCast 260e - - 1576:0260 - - * - 55 - - ViewCast 460e - - 1576:0460 - - * - 56 - - Hauppauge WinTV-QuadHD-DVB - - 0070:6a28, 0070:6b28 - - * - 57 - - Hauppauge WinTV-QuadHD-ATSC - - 0070:6a18, 0070:6b18 - - * - 58 - - Hauppauge WinTV-HVR-1265(161111) - - 0070:2a18 - - * - 59 - - Hauppauge WinTV-Starburst2 - - 0070:f02a - - * - 60 - - Hauppauge WinTV-QuadHD-DVB(885) - - - - * - 61 - - Hauppauge WinTV-QuadHD-ATSC(885) - - diff --git a/Documentation/media/v4l-drivers/cx88-cardlist.rst b/Documentation/media/v4l-drivers/cx88-cardlist.rst deleted file mode 100644 index 56ee08028106..000000000000 --- a/Documentation/media/v4l-drivers/cx88-cardlist.rst +++ /dev/null @@ -1,379 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -CX88 cards list -=============== - -.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| - -.. flat-table:: - :header-rows: 1 - :widths: 2 19 18 - :stub-columns: 0 - - * - Card number - - Card name - - PCI IDs - - * - 0 - - UNKNOWN/GENERIC - - - - * - 1 - - Hauppauge WinTV 34xxx models - - 0070:3400, 0070:3401 - - * - 2 - - GDI Black Gold - - 14c7:0106, 14c7:0107 - - * - 3 - - PixelView - - 1554:4811 - - * - 4 - - ATI TV Wonder Pro - - 1002:00f8, 1002:00f9 - - * - 5 - - Leadtek Winfast 2000XP Expert - - 107d:6611, 107d:6613 - - * - 6 - - AverTV Studio 303 (M126) - - 1461:000b - - * - 7 - - MSI TV-@nywhere Master - - 1462:8606 - - * - 8 - - Leadtek Winfast DV2000 - - 107d:6620, 107d:6621 - - * - 9 - - Leadtek PVR 2000 - - 107d:663b, 107d:663c, 107d:6632, 107d:6630, 107d:6638, 107d:6631, 107d:6637, 107d:663d - - * - 10 - - IODATA GV-VCP3/PCI - - 10fc:d003 - - * - 11 - - Prolink PlayTV PVR - - - - * - 12 - - ASUS PVR-416 - - 1043:4823, 1461:c111 - - * - 13 - - MSI TV-@nywhere - - - - * - 14 - - KWorld/VStream XPert DVB-T - - 17de:08a6 - - * - 15 - - DViCO FusionHDTV DVB-T1 - - 18ac:db00 - - * - 16 - - KWorld LTV883RF - - - - * - 17 - - DViCO FusionHDTV 3 Gold-Q - - 18ac:d810, 18ac:d800 - - * - 18 - - Hauppauge Nova-T DVB-T - - 0070:9002, 0070:9001, 0070:9000 - - * - 19 - - Conexant DVB-T reference design - - 14f1:0187 - - * - 20 - - Provideo PV259 - - 1540:2580 - - * - 21 - - DViCO FusionHDTV DVB-T Plus - - 18ac:db10, 18ac:db11 - - * - 22 - - pcHDTV HD3000 HDTV - - 7063:3000 - - * - 23 - - digitalnow DNTV Live! DVB-T - - 17de:a8a6 - - * - 24 - - Hauppauge WinTV 28xxx (Roslyn) models - - 0070:2801 - - * - 25 - - Digital-Logic MICROSPACE Entertainment Center (MEC) - - 14f1:0342 - - * - 26 - - IODATA GV/BCTV7E - - 10fc:d035 - - * - 27 - - PixelView PlayTV Ultra Pro (Stereo) - - - - * - 28 - - DViCO FusionHDTV 3 Gold-T - - 18ac:d820 - - * - 29 - - ADS Tech Instant TV DVB-T PCI - - 1421:0334 - - * - 30 - - TerraTec Cinergy 1400 DVB-T - - 153b:1166 - - * - 31 - - DViCO FusionHDTV 5 Gold - - 18ac:d500 - - * - 32 - - AverMedia UltraTV Media Center PCI 550 - - 1461:8011 - - * - 33 - - Kworld V-Stream Xpert DVD - - - - * - 34 - - ATI HDTV Wonder - - 1002:a101 - - * - 35 - - WinFast DTV1000-T - - 107d:665f - - * - 36 - - AVerTV 303 (M126) - - 1461:000a - - * - 37 - - Hauppauge Nova-S-Plus DVB-S - - 0070:9201, 0070:9202 - - * - 38 - - Hauppauge Nova-SE2 DVB-S - - 0070:9200 - - * - 39 - - KWorld DVB-S 100 - - 17de:08b2, 1421:0341 - - * - 40 - - Hauppauge WinTV-HVR1100 DVB-T/Hybrid - - 0070:9400, 0070:9402 - - * - 41 - - Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile) - - 0070:9800, 0070:9802 - - * - 42 - - digitalnow DNTV Live! DVB-T Pro - - 1822:0025, 1822:0019 - - * - 43 - - KWorld/VStream XPert DVB-T with cx22702 - - 17de:08a1, 12ab:2300 - - * - 44 - - DViCO FusionHDTV DVB-T Dual Digital - - 18ac:db50, 18ac:db54 - - * - 45 - - KWorld HardwareMpegTV XPert - - 17de:0840, 1421:0305 - - * - 46 - - DViCO FusionHDTV DVB-T Hybrid - - 18ac:db40, 18ac:db44 - - * - 47 - - pcHDTV HD5500 HDTV - - 7063:5500 - - * - 48 - - Kworld MCE 200 Deluxe - - 17de:0841 - - * - 49 - - PixelView PlayTV P7000 - - 1554:4813 - - * - 50 - - NPG Tech Real TV FM Top 10 - - 14f1:0842 - - * - 51 - - WinFast DTV2000 H - - 107d:665e - - * - 52 - - Geniatech DVB-S - - 14f1:0084 - - * - 53 - - Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T - - 0070:1404, 0070:1400, 0070:1401, 0070:1402 - - * - 54 - - Norwood Micro TV Tuner - - - - * - 55 - - Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM - - c180:c980 - - * - 56 - - Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder - - 0070:9600, 0070:9601, 0070:9602 - - * - 57 - - ADS Tech Instant Video PCI - - 1421:0390 - - * - 58 - - Pinnacle PCTV HD 800i - - 11bd:0051 - - * - 59 - - DViCO FusionHDTV 5 PCI nano - - 18ac:d530 - - * - 60 - - Pinnacle Hybrid PCTV - - 12ab:1788 - - * - 61 - - Leadtek TV2000 XP Global - - 107d:6f18, 107d:6618, 107d:6619 - - * - 62 - - PowerColor RA330 - - 14f1:ea3d - - * - 63 - - Geniatech X8000-MT DVBT - - 14f1:8852 - - * - 64 - - DViCO FusionHDTV DVB-T PRO - - 18ac:db30 - - * - 65 - - DViCO FusionHDTV 7 Gold - - 18ac:d610 - - * - 66 - - Prolink Pixelview MPEG 8000GT - - 1554:4935 - - * - 67 - - Kworld PlusTV HD PCI 120 (ATSC 120) - - 17de:08c1 - - * - 68 - - Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid - - 0070:6900, 0070:6904, 0070:6902 - - * - 69 - - Hauppauge WinTV-HVR4000(Lite) DVB-S/S2 - - 0070:6905, 0070:6906 - - * - 70 - - TeVii S460 DVB-S/S2 - - d460:9022 - - * - 71 - - Omicom SS4 DVB-S/S2 PCI - - A044:2011 - - * - 72 - - TBS 8920 DVB-S/S2 - - 8920:8888 - - * - 73 - - TeVii S420 DVB-S - - d420:9022 - - * - 74 - - Prolink Pixelview Global Extreme - - 1554:4976 - - * - 75 - - PROF 7300 DVB-S/S2 - - B033:3033 - - * - 76 - - SATTRADE ST4200 DVB-S/S2 - - b200:4200 - - * - 77 - - TBS 8910 DVB-S - - 8910:8888 - - * - 78 - - Prof 6200 DVB-S - - b022:3022 - - * - 79 - - Terratec Cinergy HT PCI MKII - - 153b:1177 - - * - 80 - - Hauppauge WinTV-IR Only - - 0070:9290 - - * - 81 - - Leadtek WinFast DTV1800 Hybrid - - 107d:6654 - - * - 82 - - WinFast DTV2000 H rev. J - - 107d:6f2b - - * - 83 - - Prof 7301 DVB-S/S2 - - b034:3034 - - * - 84 - - Samsung SMT 7020 DVB-S - - 18ac:dc00, 18ac:dccd - - * - 85 - - Twinhan VP-1027 DVB-S - - 1822:0023 - - * - 86 - - TeVii S464 DVB-S/S2 - - d464:9022 - - * - 87 - - Leadtek WinFast DTV2000 H PLUS - - 107d:6f42 - - * - 88 - - Leadtek WinFast DTV1800 H (XC4000) - - 107d:6f38 - - * - 89 - - Leadtek TV2000 XP Global (SC4100) - - 107d:6f36 - - * - 90 - - Leadtek TV2000 XP Global (XC4100) - - 107d:6f43 diff --git a/Documentation/media/v4l-drivers/cx88.rst b/Documentation/media/v4l-drivers/cx88.rst deleted file mode 100644 index e4badb18199d..000000000000 --- a/Documentation/media/v4l-drivers/cx88.rst +++ /dev/null @@ -1,58 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The cx88 driver -=============== - -Author: Gerd Hoffmann - -This is a v4l2 device driver for the cx2388x chip. - - -Current status --------------- - -video - - Works. - - Overlay isn't supported. - -audio - - Works. The TV standard detection is made by the driver, as the - hardware has bugs to auto-detect. - - audio data dma (i.e. recording without loopback cable to the - sound card) is supported via cx88-alsa. - -vbi - - Works. - - -How to add support for new cards --------------------------------- - -The driver needs some config info for the TV cards. This stuff is in -cx88-cards.c. If the driver doesn't work well you likely need a new -entry for your card in that file. Check the kernel log (using dmesg) -to see whenever the driver knows your card or not. There is a line -like this one: - -.. code-block:: none - - cx8800[0]: subsystem: 0070:3400, board: Hauppauge WinTV \ - 34xxx models [card=1,autodetected] - -If your card is listed as "board: UNKNOWN/GENERIC" it is unknown to -the driver. What to do then? - -1) Try upgrading to the latest snapshot, maybe it has been added - meanwhile. -2) You can try to create a new entry yourself, have a look at - cx88-cards.c. If that worked, mail me your changes as unified - diff ("diff -u"). -3) Or you can mail me the config information. We need at least the - following information to add the card: - - - the PCI Subsystem ID ("0070:3400" from the line above, - "lspci -v" output is fine too). - - the tuner type used by the card. You can try to find one by - trial-and-error using the tuner= insmod option. If you - know which one the card has you can also have a look at the - list in CARDLIST.tuner diff --git a/Documentation/media/v4l-drivers/davinci-vpbe.rst b/Documentation/media/v4l-drivers/davinci-vpbe.rst deleted file mode 100644 index 9e6360fd02db..000000000000 --- a/Documentation/media/v4l-drivers/davinci-vpbe.rst +++ /dev/null @@ -1,65 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The VPBE V4L2 driver design -=========================== - -Functional partitioning ------------------------ - -Consists of the following: - - 1. V4L2 display driver - - Implements creation of video2 and video3 device nodes and - provides v4l2 device interface to manage VID0 and VID1 layers. - - 2. Display controller - - Loads up VENC, OSD and external encoders such as ths8200. It provides - a set of API calls to V4L2 drivers to set the output/standards - in the VENC or external sub devices. It also provides - a device object to access the services from OSD subdevice - using sub device ops. The connection of external encoders to VENC LCD - controller port is done at init time based on default output and standard - selection or at run time when application change the output through - V4L2 IOCTLs. - - When connected to an external encoder, vpbe controller is also responsible - for setting up the interface between VENC and external encoders based on - board specific settings (specified in board-xxx-evm.c). This allows - interfacing external encoders such as ths8200. The setup_if_config() - is implemented for this as well as configure_venc() (part of the next patch) - API to set timings in VENC for a specific display resolution. As of this - patch series, the interconnection and enabling and setting of the external - encoders is not present, and would be a part of the next patch series. - - 3. VENC subdevice module - - Responsible for setting outputs provided through internal DACs and also - setting timings at LCD controller port when external encoders are connected - at the port or LCD panel timings required. When external encoder/LCD panel - is connected, the timings for a specific standard/preset is retrieved from - the board specific table and the values are used to set the timings in - venc using non-standard timing mode. - - Support LCD Panel displays using the VENC. For example to support a Logic - PD display, it requires setting up the LCD controller port with a set of - timings for the resolution supported and setting the dot clock. So we could - add the available outputs as a board specific entry (i.e add the "LogicPD" - output name to board-xxx-evm.c). A table of timings for various LCDs - supported can be maintained in the board specific setup file to support - various LCD displays.As of this patch a basic driver is present, and this - support for external encoders and displays forms a part of the next - patch series. - - 4. OSD module - - OSD module implements all OSD layer management and hardware specific - features. The VPBE module interacts with the OSD for enabling and - disabling appropriate features of the OSD. - -Current status --------------- - -A fully functional working version of the V4L2 driver is available. This -driver has been tested with NTSC and PAL standards and buffer streaming. diff --git a/Documentation/media/v4l-drivers/em28xx-cardlist.rst b/Documentation/media/v4l-drivers/em28xx-cardlist.rst deleted file mode 100644 index 2956cbdc28e0..000000000000 --- a/Documentation/media/v4l-drivers/em28xx-cardlist.rst +++ /dev/null @@ -1,428 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -EM28xx cards list -================= - -.. tabularcolumns:: |p{1.4cm}|p{10.0cm}|p{1.9cm}|p{4.2cm}| - -.. flat-table:: - :header-rows: 1 - :widths: 2 12 3 16 - :stub-columns: 0 - - * - Card number - - Card name - - Empia Chip - - USB IDs - * - 0 - - Unknown EM2800 video grabber - - em2800 - - eb1a:2800 - * - 1 - - Unknown EM2750/28xx video grabber - - em2820 or em2840 - - eb1a:2710, eb1a:2820, eb1a:2821, eb1a:2860, eb1a:2861, eb1a:2862, eb1a:2863, eb1a:2870, eb1a:2881, eb1a:2883, eb1a:2868, eb1a:2875 - * - 2 - - Terratec Cinergy 250 USB - - em2820 or em2840 - - 0ccd:0036 - * - 3 - - Pinnacle PCTV USB 2 - - em2820 or em2840 - - 2304:0208 - * - 4 - - Hauppauge WinTV USB 2 - - em2820 or em2840 - - 2040:4200, 2040:4201 - * - 5 - - MSI VOX USB 2.0 - - em2820 or em2840 - - - * - 6 - - Terratec Cinergy 200 USB - - em2800 - - - * - 7 - - Leadtek Winfast USB II - - em2800 - - 0413:6023 - * - 8 - - Kworld USB2800 - - em2800 - - - * - 9 - - Pinnacle Dazzle DVC 90/100/101/107 / Kaiser Baas Video to DVD maker / Kworld DVD Maker 2 / Plextor ConvertX PX-AV100U - - em2820 or em2840 - - 1b80:e302, 1b80:e304, 2304:0207, 2304:021a, 093b:a003 - * - 10 - - Hauppauge WinTV HVR 900 - - em2880 - - 2040:6500 - * - 11 - - Terratec Hybrid XS - - em2880 - - - * - 12 - - Kworld PVR TV 2800 RF - - em2820 or em2840 - - - * - 13 - - Terratec Prodigy XS - - em2880 - - - * - 14 - - SIIG AVTuner-PVR / Pixelview Prolink PlayTV USB 2.0 - - em2820 or em2840 - - - * - 15 - - V-Gear PocketTV - - em2800 - - - * - 16 - - Hauppauge WinTV HVR 950 - - em2883 - - 2040:6513, 2040:6517, 2040:651b - * - 17 - - Pinnacle PCTV HD Pro Stick - - em2880 - - 2304:0227 - * - 18 - - Hauppauge WinTV HVR 900 (R2) - - em2880 - - 2040:6502 - * - 19 - - EM2860/SAA711X Reference Design - - em2860 - - - * - 20 - - AMD ATI TV Wonder HD 600 - - em2880 - - 0438:b002 - * - 21 - - eMPIA Technology, Inc. GrabBeeX+ Video Encoder - - em2800 - - eb1a:2801 - * - 22 - - EM2710/EM2750/EM2751 webcam grabber - - em2750 - - eb1a:2750, eb1a:2751 - * - 23 - - Huaqi DLCW-130 - - em2750 - - - * - 24 - - D-Link DUB-T210 TV Tuner - - em2820 or em2840 - - 2001:f112 - * - 25 - - Gadmei UTV310 - - em2820 or em2840 - - - * - 26 - - Hercules Smart TV USB 2.0 - - em2820 or em2840 - - - * - 27 - - Pinnacle PCTV USB 2 (Philips FM1216ME) - - em2820 or em2840 - - - * - 28 - - Leadtek Winfast USB II Deluxe - - em2820 or em2840 - - - * - 29 - - EM2860/TVP5150 Reference Design - - em2860 - - eb1a:5051 - * - 30 - - Videology 20K14XUSB USB2.0 - - em2820 or em2840 - - - * - 31 - - Usbgear VD204v9 - - em2821 - - - * - 32 - - Supercomp USB 2.0 TV - - em2821 - - - * - 33 - - Elgato Video Capture - - em2860 - - 0fd9:0033 - * - 34 - - Terratec Cinergy A Hybrid XS - - em2860 - - 0ccd:004f - * - 35 - - Typhoon DVD Maker - - em2860 - - - * - 36 - - NetGMBH Cam - - em2860 - - - * - 37 - - Gadmei UTV330 - - em2860 - - eb1a:50a6 - * - 38 - - Yakumo MovieMixer - - em2861 - - - * - 39 - - KWorld PVRTV 300U - - em2861 - - eb1a:e300 - * - 40 - - Plextor ConvertX PX-TV100U - - em2861 - - 093b:a005 - * - 41 - - Kworld 350 U DVB-T - - em2870 - - eb1a:e350 - * - 42 - - Kworld 355 U DVB-T - - em2870 - - eb1a:e355, eb1a:e357, eb1a:e359 - * - 43 - - Terratec Cinergy T XS - - em2870 - - - * - 44 - - Terratec Cinergy T XS (MT2060) - - em2870 - - 0ccd:0043 - * - 45 - - Pinnacle PCTV DVB-T - - em2870 - - - * - 46 - - Compro, VideoMate U3 - - em2870 - - 185b:2870 - * - 47 - - KWorld DVB-T 305U - - em2880 - - eb1a:e305 - * - 48 - - KWorld DVB-T 310U - - em2880 - - - * - 49 - - MSI DigiVox A/D - - em2880 - - eb1a:e310 - * - 50 - - MSI DigiVox A/D II - - em2880 - - eb1a:e320 - * - 51 - - Terratec Hybrid XS Secam - - em2880 - - 0ccd:004c - * - 52 - - DNT DA2 Hybrid - - em2881 - - - * - 53 - - Pinnacle Hybrid Pro - - em2881 - - - * - 54 - - Kworld VS-DVB-T 323UR - - em2882 - - eb1a:e323 - * - 55 - - Terratec Cinergy Hybrid T USB XS (em2882) - - em2882 - - 0ccd:005e, 0ccd:0042 - * - 56 - - Pinnacle Hybrid Pro (330e) - - em2882 - - 2304:0226 - * - 57 - - Kworld PlusTV HD Hybrid 330 - - em2883 - - eb1a:a316 - * - 58 - - Compro VideoMate ForYou/Stereo - - em2820 or em2840 - - 185b:2041 - * - 59 - - Pinnacle PCTV HD Mini - - em2874 - - 2304:023f - * - 60 - - Hauppauge WinTV HVR 850 - - em2883 - - 2040:651f - * - 61 - - Pixelview PlayTV Box 4 USB 2.0 - - em2820 or em2840 - - - * - 62 - - Gadmei TVR200 - - em2820 or em2840 - - - * - 63 - - Kaiomy TVnPC U2 - - em2860 - - eb1a:e303 - * - 64 - - Easy Cap Capture DC-60 - - em2860 - - 1b80:e309 - * - 65 - - IO-DATA GV-MVP/SZ - - em2820 or em2840 - - 04bb:0515 - * - 66 - - Empire dual TV - - em2880 - - - * - 67 - - Terratec Grabby - - em2860 - - 0ccd:0096, 0ccd:10AF - * - 68 - - Terratec AV350 - - em2860 - - 0ccd:0084 - * - 69 - - KWorld ATSC 315U HDTV TV Box - - em2882 - - eb1a:a313 - * - 70 - - Evga inDtube - - em2882 - - - * - 71 - - Silvercrest Webcam 1.3mpix - - em2820 or em2840 - - - * - 72 - - Gadmei UTV330+ - - em2861 - - - * - 73 - - Reddo DVB-C USB TV Box - - em2870 - - - * - 74 - - Actionmaster/LinXcel/Digitus VC211A - - em2800 - - - * - 75 - - Dikom DK300 - - em2882 - - - * - 76 - - KWorld PlusTV 340U or UB435-Q (ATSC) - - em2870 - - 1b80:a340 - * - 77 - - EM2874 Leadership ISDBT - - em2874 - - - * - 78 - - PCTV nanoStick T2 290e - - em28174 - - 2013:024f - * - 79 - - Terratec Cinergy H5 - - em2884 - - eb1a:2885, 0ccd:10a2, 0ccd:10ad, 0ccd:10b6 - * - 80 - - PCTV DVB-S2 Stick (460e) - - em28174 - - 2013:024c - * - 81 - - Hauppauge WinTV HVR 930C - - em2884 - - 2040:1605 - * - 82 - - Terratec Cinergy HTC Stick - - em2884 - - 0ccd:00b2 - * - 83 - - Honestech Vidbox NW03 - - em2860 - - eb1a:5006 - * - 84 - - MaxMedia UB425-TC - - em2874 - - 1b80:e425 - * - 85 - - PCTV QuatroStick (510e) - - em2884 - - 2304:0242 - * - 86 - - PCTV QuatroStick nano (520e) - - em2884 - - 2013:0251 - * - 87 - - Terratec Cinergy HTC USB XS - - em2884 - - 0ccd:008e, 0ccd:00ac - * - 88 - - C3 Tech Digital Duo HDTV/SDTV USB - - em2884 - - 1b80:e755 - * - 89 - - Delock 61959 - - em2874 - - 1b80:e1cc - * - 90 - - KWorld USB ATSC TV Stick UB435-Q V2 - - em2874 - - 1b80:e346 - * - 91 - - SpeedLink Vicious And Devine Laplace webcam - - em2765 - - 1ae7:9003, 1ae7:9004 - * - 92 - - PCTV DVB-S2 Stick (461e) - - em28178 - - 2013:0258 - * - 93 - - KWorld USB ATSC TV Stick UB435-Q V3 - - em2874 - - 1b80:e34c - * - 94 - - PCTV tripleStick (292e) - - em28178 - - 2013:025f, 2013:0264, 2040:0264, 2040:8264, 2040:8268, 2040:8268 - * - 95 - - Leadtek VC100 - - em2861 - - 0413:6f07 - * - 96 - - Terratec Cinergy T2 Stick HD - - em28178 - - eb1a:8179 - * - 97 - - Elgato EyeTV Hybrid 2008 INT - - em2884 - - 0fd9:0018 - * - 98 - - PLEX PX-BCUD - - em28178 - - 3275:0085 - * - 99 - - Hauppauge WinTV-dualHD DVB - - em28174 - - 2040:0265, 2040:8265 - * - 100 - - Hauppauge WinTV-dualHD 01595 ATSC/QAM - - em28174 - - 2040:026d, 2040:826d - * - 101 - - Terratec Cinergy H6 rev. 2 - - em2884 - - 0ccd:10b2 - * - 102 - - :ZOLID HYBRID TV STICK - - em2882 - - diff --git a/Documentation/media/v4l-drivers/fimc.rst b/Documentation/media/v4l-drivers/fimc.rst deleted file mode 100644 index 0b8ddc4a3008..000000000000 --- a/Documentation/media/v4l-drivers/fimc.rst +++ /dev/null @@ -1,153 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -.. include:: - -The Samsung S5P/EXYNOS4 FIMC driver -=================================== - -Copyright |copy| 2012 - 2013 Samsung Electronics Co., Ltd. - -The FIMC (Fully Interactive Mobile Camera) device available in Samsung -SoC Application Processors is an integrated camera host interface, color -space converter, image resizer and rotator. It's also capable of capturing -data from LCD controller (FIMD) through the SoC internal writeback data -path. There are multiple FIMC instances in the SoCs (up to 4), having -slightly different capabilities, like pixel alignment constraints, rotator -availability, LCD writeback support, etc. The driver is located at -drivers/media/platform/exynos4-is directory. - -Supported SoCs --------------- - -S5PC100 (mem-to-mem only), S5PV210, EXYNOS4210 - -Supported features ------------------- - -- camera parallel interface capture (ITU-R.BT601/565); -- camera serial interface capture (MIPI-CSI2); -- memory-to-memory processing (color space conversion, scaling, mirror - and rotation); -- dynamic pipeline re-configuration at runtime (re-attachment of any FIMC - instance to any parallel video input or any MIPI-CSI front-end); -- runtime PM and system wide suspend/resume - -Not currently supported ------------------------ - -- LCD writeback input -- per frame clock gating (mem-to-mem) - -User space interfaces ---------------------- - -Media device interface -~~~~~~~~~~~~~~~~~~~~~~ - -The driver supports Media Controller API as defined at :ref:`media_controller`. -The media device driver name is "SAMSUNG S5P FIMC". - -The purpose of this interface is to allow changing assignment of FIMC instances -to the SoC peripheral camera input at runtime and optionally to control internal -connections of the MIPI-CSIS device(s) to the FIMC entities. - -The media device interface allows to configure the SoC for capturing image -data from the sensor through more than one FIMC instance (e.g. for simultaneous -viewfinder and still capture setup). - -Reconfiguration is done by enabling/disabling media links created by the driver -during initialization. The internal device topology can be easily discovered -through media entity and links enumeration. - -Memory-to-memory video node -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -V4L2 memory-to-memory interface at /dev/video? device node. This is standalone -video device, it has no media pads. However please note the mem-to-mem and -capture video node operation on same FIMC instance is not allowed. The driver -detects such cases but the applications should prevent them to avoid an -undefined behaviour. - -Capture video node -~~~~~~~~~~~~~~~~~~ - -The driver supports V4L2 Video Capture Interface as defined at -:ref:`devices`. - -At the capture and mem-to-mem video nodes only the multi-planar API is -supported. For more details see: :ref:`planar-apis`. - -Camera capture subdevs -~~~~~~~~~~~~~~~~~~~~~~ - -Each FIMC instance exports a sub-device node (/dev/v4l-subdev?), a sub-device -node is also created per each available and enabled at the platform level -MIPI-CSI receiver device (currently up to two). - -sysfs -~~~~~ - -In order to enable more precise camera pipeline control through the sub-device -API the driver creates a sysfs entry associated with "s5p-fimc-md" platform -device. The entry path is: /sys/platform/devices/s5p-fimc-md/subdev_conf_mode. - -In typical use case there could be a following capture pipeline configuration: -sensor subdev -> mipi-csi subdev -> fimc subdev -> video node - -When we configure these devices through sub-device API at user space, the -configuration flow must be from left to right, and the video node is -configured as last one. - -When we don't use sub-device user space API the whole configuration of all -devices belonging to the pipeline is done at the video node driver. -The sysfs entry allows to instruct the capture node driver not to configure -the sub-devices (format, crop), to avoid resetting the subdevs' configuration -when the last configuration steps at the video node is performed. - -For full sub-device control support (subdevs configured at user space before -starting streaming): - -.. code-block:: none - - # echo "sub-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode - -For V4L2 video node control only (subdevs configured internally by the host -driver): - -.. code-block:: none - - # echo "vid-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode - -This is a default option. - -5. Device mapping to video and subdev device nodes --------------------------------------------------- - -There are associated two video device nodes with each device instance in -hardware - video capture and mem-to-mem and additionally a subdev node for -more precise FIMC capture subsystem control. In addition a separate v4l2 -sub-device node is created per each MIPI-CSIS device. - -How to find out which /dev/video? or /dev/v4l-subdev? is assigned to which -device? - -You can either grep through the kernel log to find relevant information, i.e. - -.. code-block:: none - - # dmesg | grep -i fimc - -(note that udev, if present, might still have rearranged the video nodes), - -or retrieve the information from /dev/media? with help of the media-ctl tool: - -.. code-block:: none - - # media-ctl -p - -7. Build --------- - -If the driver is built as a loadable kernel module (CONFIG_VIDEO_SAMSUNG_S5P_FIMC=m) -two modules are created (in addition to the core v4l2 modules): s5p-fimc.ko and -optional s5p-csis.ko (MIPI-CSI receiver subdev). diff --git a/Documentation/media/v4l-drivers/gspca-cardlist.rst b/Documentation/media/v4l-drivers/gspca-cardlist.rst deleted file mode 100644 index adda933616f1..000000000000 --- a/Documentation/media/v4l-drivers/gspca-cardlist.rst +++ /dev/null @@ -1,451 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The gspca cards list -==================== - -The modules for the gspca webcam drivers are: - -- gspca_main: main driver -- gspca\_\ *driver*: subdriver module with *driver* as follows - -========= ========= =================================================================== -*driver* vend:prod Device -========= ========= =================================================================== -spca501 0000:0000 MystFromOri Unknown Camera -spca508 0130:0130 Clone Digital Webcam 11043 -se401 03e8:0004 Endpoints/AoxSE401 -zc3xx 03f0:1b07 HP Premium Starter Cam -m5602 0402:5602 ALi Video Camera Controller -spca501 040a:0002 Kodak DVC-325 -spca500 040a:0300 Kodak EZ200 -zc3xx 041e:041e Creative WebCam Live! -ov519 041e:4003 Video Blaster WebCam Go Plus -stv0680 041e:4007 Go Mini -spca500 041e:400a Creative PC-CAM 300 -sunplus 041e:400b Creative PC-CAM 600 -sunplus 041e:4012 PC-Cam350 -sunplus 041e:4013 Creative Pccam750 -zc3xx 041e:4017 Creative Webcam Mobile PD1090 -spca508 041e:4018 Creative Webcam Vista (PD1100) -spca561 041e:401a Creative Webcam Vista (PD1100) -zc3xx 041e:401c Creative NX -spca505 041e:401d Creative Webcam NX ULTRA -zc3xx 041e:401e Creative Nx Pro -zc3xx 041e:401f Creative Webcam Notebook PD1171 -zc3xx 041e:4022 Webcam NX Pro -pac207 041e:4028 Creative Webcam Vista Plus -zc3xx 041e:4029 Creative WebCam Vista Pro -zc3xx 041e:4034 Creative Instant P0620 -zc3xx 041e:4035 Creative Instant P0620D -zc3xx 041e:4036 Creative Live ! -sq930x 041e:4038 Creative Joy-IT -zc3xx 041e:403a Creative Nx Pro 2 -spca561 041e:403b Creative Webcam Vista (VF0010) -sq930x 041e:403c Creative Live! Ultra -sq930x 041e:403d Creative Live! Ultra for Notebooks -sq930x 041e:4041 Creative Live! Motion -zc3xx 041e:4051 Creative Live!Cam Notebook Pro (VF0250) -ov519 041e:4052 Creative Live! VISTA IM -zc3xx 041e:4053 Creative Live!Cam Video IM -vc032x 041e:405b Creative Live! Cam Notebook Ultra (VC0130) -ov519 041e:405f Creative Live! VISTA VF0330 -ov519 041e:4060 Creative Live! VISTA VF0350 -ov519 041e:4061 Creative Live! VISTA VF0400 -ov519 041e:4064 Creative Live! VISTA VF0420 -ov519 041e:4067 Creative Live! Cam Video IM (VF0350) -ov519 041e:4068 Creative Live! VISTA VF0470 -sn9c2028 0458:7003 GeniusVideocam Live v2 -spca561 0458:7004 Genius VideoCAM Express V2 -sn9c2028 0458:7005 Genius Smart 300, version 2 -sunplus 0458:7006 Genius Dsc 1.3 Smart -zc3xx 0458:7007 Genius VideoCam V2 -zc3xx 0458:700c Genius VideoCam V3 -zc3xx 0458:700f Genius VideoCam Web V2 -sonixj 0458:7025 Genius Eye 311Q -sn9c20x 0458:7029 Genius Look 320s -sonixj 0458:702e Genius Slim 310 NB -sn9c20x 0458:7045 Genius Look 1320 V2 -sn9c20x 0458:704a Genius Slim 1320 -sn9c20x 0458:704c Genius i-Look 1321 -sn9c20x 045e:00f4 LifeCam VX-6000 (SN9C20x + OV9650) -sonixj 045e:00f5 MicroSoft VX3000 -sonixj 045e:00f7 MicroSoft VX1000 -ov519 045e:028c Micro$oft xbox cam -kinect 045e:02ae Xbox NUI Camera -kinect 045e:02bf Kinect for Windows NUI Camera -spca561 0461:0815 Micro Innovations IC200 Webcam -sunplus 0461:0821 Fujifilm MV-1 -zc3xx 0461:0a00 MicroInnovation WebCam320 -stv06xx 046D:08F0 QuickCamMessenger -stv06xx 046D:08F5 QuickCamCommunicate -stv06xx 046D:08F6 QuickCamMessenger (new) -stv06xx 046d:0840 QuickCamExpress -stv06xx 046d:0850 LEGOcam / QuickCam Web -stv06xx 046d:0870 DexxaWebCam USB -spca500 046d:0890 Logitech QuickCam traveler -vc032x 046d:0892 Logitech Orbicam -vc032x 046d:0896 Logitech Orbicam -vc032x 046d:0897 Logitech QuickCam for Dell notebooks -zc3xx 046d:089d Logitech QuickCam E2500 -zc3xx 046d:08a0 Logitech QC IM -zc3xx 046d:08a1 Logitech QC IM 0x08A1 +sound -zc3xx 046d:08a2 Labtec Webcam Pro -zc3xx 046d:08a3 Logitech QC Chat -zc3xx 046d:08a6 Logitech QCim -zc3xx 046d:08a7 Logitech QuickCam Image -zc3xx 046d:08a9 Logitech Notebook Deluxe -zc3xx 046d:08aa Labtec Webcam Notebook -zc3xx 046d:08ac Logitech QuickCam Cool -zc3xx 046d:08ad Logitech QCCommunicate STX -zc3xx 046d:08ae Logitech QuickCam for Notebooks -zc3xx 046d:08af Logitech QuickCam Cool -zc3xx 046d:08b9 Logitech QuickCam Express -zc3xx 046d:08d7 Logitech QCam STX -zc3xx 046d:08d8 Logitech Notebook Deluxe -zc3xx 046d:08d9 Logitech QuickCam IM/Connect -zc3xx 046d:08da Logitech QuickCam Messenger -zc3xx 046d:08dd Logitech QuickCam for Notebooks -spca500 046d:0900 Logitech Inc. ClickSmart 310 -spca500 046d:0901 Logitech Inc. ClickSmart 510 -sunplus 046d:0905 Logitech ClickSmart 820 -tv8532 046d:0920 Logitech QuickCam Express -tv8532 046d:0921 Labtec Webcam -spca561 046d:0928 Logitech QC Express Etch2 -spca561 046d:0929 Labtec Webcam Elch2 -spca561 046d:092a Logitech QC for Notebook -spca561 046d:092b Labtec Webcam Plus -spca561 046d:092c Logitech QC chat Elch2 -spca561 046d:092d Logitech QC Elch2 -spca561 046d:092e Logitech QC Elch2 -spca561 046d:092f Logitech QuickCam Express Plus -sunplus 046d:0960 Logitech ClickSmart 420 -nw80x 046d:d001 Logitech QuickCam Pro (dark focus ring) -se401 0471:030b PhilipsPCVC665K -sunplus 0471:0322 Philips DMVC1300K -zc3xx 0471:0325 Philips SPC 200 NC -zc3xx 0471:0326 Philips SPC 300 NC -sonixj 0471:0327 Philips SPC 600 NC -sonixj 0471:0328 Philips SPC 700 NC -zc3xx 0471:032d Philips SPC 210 NC -zc3xx 0471:032e Philips SPC 315 NC -sonixj 0471:0330 Philips SPC 710 NC -se401 047d:5001 Kensington67014 -se401 047d:5002 Kensington6701(5/7) -se401 047d:5003 Kensington67016 -spca501 0497:c001 Smile International -sunplus 04a5:3003 Benq DC 1300 -sunplus 04a5:3008 Benq DC 1500 -sunplus 04a5:300a Benq DC 3410 -spca500 04a5:300c Benq DC 1016 -benq 04a5:3035 Benq DC E300 -vicam 04c1:009d HomeConnect Webcam [vicam] -konica 04c8:0720 IntelYC 76 -finepix 04cb:0104 Fujifilm FinePix 4800 -finepix 04cb:0109 Fujifilm FinePix A202 -finepix 04cb:010b Fujifilm FinePix A203 -finepix 04cb:010f Fujifilm FinePix A204 -finepix 04cb:0111 Fujifilm FinePix A205 -finepix 04cb:0113 Fujifilm FinePix A210 -finepix 04cb:0115 Fujifilm FinePix A303 -finepix 04cb:0117 Fujifilm FinePix A310 -finepix 04cb:0119 Fujifilm FinePix F401 -finepix 04cb:011b Fujifilm FinePix F402 -finepix 04cb:011d Fujifilm FinePix F410 -finepix 04cb:0121 Fujifilm FinePix F601 -finepix 04cb:0123 Fujifilm FinePix F700 -finepix 04cb:0125 Fujifilm FinePix M603 -finepix 04cb:0127 Fujifilm FinePix S300 -finepix 04cb:0129 Fujifilm FinePix S304 -finepix 04cb:012b Fujifilm FinePix S500 -finepix 04cb:012d Fujifilm FinePix S602 -finepix 04cb:012f Fujifilm FinePix S700 -finepix 04cb:0131 Fujifilm FinePix unknown model -finepix 04cb:013b Fujifilm FinePix unknown model -finepix 04cb:013d Fujifilm FinePix unknown model -finepix 04cb:013f Fujifilm FinePix F420 -sunplus 04f1:1001 JVC GC A50 -spca561 04fc:0561 Flexcam 100 -spca1528 04fc:1528 Sunplus MD80 clone -sunplus 04fc:500c Sunplus CA500C -sunplus 04fc:504a Aiptek Mini PenCam 1.3 -sunplus 04fc:504b Maxell MaxPocket LE 1.3 -sunplus 04fc:5330 Digitrex 2110 -sunplus 04fc:5360 Sunplus Generic -spca500 04fc:7333 PalmPixDC85 -sunplus 04fc:ffff Pure DigitalDakota -nw80x 0502:d001 DVC V6 -spca501 0506:00df 3Com HomeConnect Lite -sunplus 052b:1507 Megapixel 5 Pretec DC-1007 -sunplus 052b:1513 Megapix V4 -sunplus 052b:1803 MegaImage VI -nw80x 052b:d001 EZCam Pro p35u -tv8532 0545:808b Veo Stingray -tv8532 0545:8333 Veo Stingray -sunplus 0546:3155 Polaroid PDC3070 -sunplus 0546:3191 Polaroid Ion 80 -sunplus 0546:3273 Polaroid PDC2030 -touptek 0547:6801 TTUCMOS08000KPB, AS MU800 -dtcs033 0547:7303 Anchor Chips, Inc -ov519 054c:0154 Sonny toy4 -ov519 054c:0155 Sonny toy5 -cpia1 0553:0002 CPIA CPiA (version1) based cameras -stv0680 0553:0202 STV0680 Camera -zc3xx 055f:c005 Mustek Wcam300A -spca500 055f:c200 Mustek Gsmart 300 -sunplus 055f:c211 Kowa Bs888e Microcamera -spca500 055f:c220 Gsmart Mini -sunplus 055f:c230 Mustek Digicam 330K -sunplus 055f:c232 Mustek MDC3500 -sunplus 055f:c360 Mustek DV4000 Mpeg4 -sunplus 055f:c420 Mustek gSmart Mini 2 -sunplus 055f:c430 Mustek Gsmart LCD 2 -sunplus 055f:c440 Mustek DV 3000 -sunplus 055f:c520 Mustek gSmart Mini 3 -sunplus 055f:c530 Mustek Gsmart LCD 3 -sunplus 055f:c540 Gsmart D30 -sunplus 055f:c630 Mustek MDC4000 -sunplus 055f:c650 Mustek MDC5500Z -nw80x 055f:d001 Mustek Wcam 300 mini -zc3xx 055f:d003 Mustek WCam300A -zc3xx 055f:d004 Mustek WCam300 AN -conex 0572:0041 Creative Notebook cx11646 -ov519 05a9:0511 Video Blaster WebCam 3/WebCam Plus, D-Link USB Digital Video Camera -ov519 05a9:0518 Creative WebCam -ov519 05a9:0519 OV519 Microphone -ov519 05a9:0530 OmniVision -ov534_9 05a9:1550 OmniVision VEHO Filmscanner -ov519 05a9:2800 OmniVision SuperCAM -ov519 05a9:4519 Webcam Classic -ov534_9 05a9:8065 OmniVision test kit ov538+ov9712 -ov519 05a9:8519 OmniVision -ov519 05a9:a511 D-Link USB Digital Video Camera -ov519 05a9:a518 D-Link DSB-C310 Webcam -sunplus 05da:1018 Digital Dream Enigma 1.3 -stk014 05e1:0893 Syntek DV4000 -gl860 05e3:0503 Genesys Logic PC Camera -gl860 05e3:f191 Genesys Logic PC Camera -vicam 0602:1001 ViCam Webcam -spca561 060b:a001 Maxell Compact Pc PM3 -zc3xx 0698:2003 CTX M730V built in -topro 06a2:0003 TP6800 PC Camera, CmoX CX0342 webcam -topro 06a2:6810 Creative Qmax -nw80x 06a5:0000 Typhoon Webcam 100 USB -nw80x 06a5:d001 Divio based webcams -nw80x 06a5:d800 Divio Chicony TwinkleCam, Trust SpaceCam -spca500 06bd:0404 Agfa CL20 -spca500 06be:0800 Optimedia -nw80x 06be:d001 EZCam Pro p35u -sunplus 06d6:0031 Trust 610 LCD PowerC@m Zoom -sunplus 06d6:0041 Aashima Technology B.V. -spca506 06e1:a190 ADS Instant VCD -ov534 06f8:3002 Hercules Blog Webcam -ov534_9 06f8:3003 Hercules Dualpix HD Weblog -sonixj 06f8:3004 Hercules Classic Silver -sonixj 06f8:3008 Hercules Deluxe Optical Glass -pac7302 06f8:3009 Hercules Classic Link -pac7302 06f8:301b Hercules Link -nw80x 0728:d001 AVerMedia Camguard -spca508 0733:0110 ViewQuest VQ110 -spca501 0733:0401 Intel Create and Share -spca501 0733:0402 ViewQuest M318B -spca505 0733:0430 Intel PC Camera Pro -sunplus 0733:1311 Digital Dream Epsilon 1.3 -sunplus 0733:1314 Mercury 2.1MEG Deluxe Classic Cam -sunplus 0733:2211 Jenoptik jdc 21 LCD -sunplus 0733:2221 Mercury Digital Pro 3.1p -sunplus 0733:3261 Concord 3045 spca536a -sunplus 0733:3281 Cyberpix S550V -spca506 0734:043b 3DeMon USB Capture aka -cpia1 0813:0001 QX3 camera -ov519 0813:0002 Dual Mode USB Camera Plus -spca500 084d:0003 D-Link DSC-350 -spca500 08ca:0103 Aiptek PocketDV -sunplus 08ca:0104 Aiptek PocketDVII 1.3 -sunplus 08ca:0106 Aiptek Pocket DV3100+ -mr97310a 08ca:0110 Trust Spyc@m 100 -mr97310a 08ca:0111 Aiptek PenCam VGA+ -sunplus 08ca:2008 Aiptek Mini PenCam 2 M -sunplus 08ca:2010 Aiptek PocketCam 3M -sunplus 08ca:2016 Aiptek PocketCam 2 Mega -sunplus 08ca:2018 Aiptek Pencam SD 2M -sunplus 08ca:2020 Aiptek Slim 3000F -sunplus 08ca:2022 Aiptek Slim 3200 -sunplus 08ca:2024 Aiptek DV3500 Mpeg4 -sunplus 08ca:2028 Aiptek PocketCam4M -sunplus 08ca:2040 Aiptek PocketDV4100M -sunplus 08ca:2042 Aiptek PocketDV5100 -sunplus 08ca:2050 Medion MD 41437 -sunplus 08ca:2060 Aiptek PocketDV5300 -tv8532 0923:010f ICM532 cams -mr97310a 093a:010e All known CIF cams with this ID -mr97310a 093a:010f All known VGA cams with this ID -mars 093a:050f Mars-Semi Pc-Camera -pac207 093a:2460 Qtec Webcam 100 -pac207 093a:2461 HP Webcam -pac207 093a:2463 Philips SPC 220 NC -pac207 093a:2464 Labtec Webcam 1200 -pac207 093a:2468 Webcam WB-1400T -pac207 093a:2470 Genius GF112 -pac207 093a:2471 Genius VideoCam ge111 -pac207 093a:2472 Genius VideoCam ge110 -pac207 093a:2474 Genius iLook 111 -pac207 093a:2476 Genius e-Messenger 112 -pac7311 093a:2600 PAC7311 Typhoon -pac7311 093a:2601 Philips SPC 610 NC -pac7311 093a:2603 Philips SPC 500 NC -pac7311 093a:2608 Trust WB-3300p -pac7311 093a:260e Gigaware VGA PC Camera, Trust WB-3350p, SIGMA cam 2350 -pac7311 093a:260f SnakeCam -pac7302 093a:2620 Apollo AC-905 -pac7302 093a:2621 PAC731x -pac7302 093a:2622 Genius Eye 312 -pac7302 093a:2623 Pixart Imaging, Inc. -pac7302 093a:2624 PAC7302 -pac7302 093a:2625 Genius iSlim 310 -pac7302 093a:2626 Labtec 2200 -pac7302 093a:2627 Genius FaceCam 300 -pac7302 093a:2628 Genius iLook 300 -pac7302 093a:2629 Genious iSlim 300 -pac7302 093a:262a Webcam 300k -pac7302 093a:262c Philips SPC 230 NC -jl2005bcd 0979:0227 Various brands, 19 known cameras supported -jeilinj 0979:0270 Sakar 57379 -jeilinj 0979:0280 Sportscam DV15, Sakar 57379 -zc3xx 0ac8:0301 Web Camera -zc3xx 0ac8:0302 Z-star Vimicro zc0302 -vc032x 0ac8:0321 Vimicro generic vc0321 -vc032x 0ac8:0323 Vimicro Vc0323 -vc032x 0ac8:0328 A4Tech PK-130MG -zc3xx 0ac8:301b Z-Star zc301b -zc3xx 0ac8:303b Vimicro 0x303b -zc3xx 0ac8:305b Z-star Vimicro zc0305b -zc3xx 0ac8:307b PC Camera (ZS0211) -vc032x 0ac8:c001 Sony embedded vimicro -vc032x 0ac8:c002 Sony embedded vimicro -vc032x 0ac8:c301 Samsung Q1 Ultra Premium -spca508 0af9:0010 Hama USB Sightcam 100 -spca508 0af9:0011 Hama USB Sightcam 100 -ov519 0b62:0059 iBOT2 Webcam -sonixb 0c45:6001 Genius VideoCAM NB -sonixb 0c45:6005 Microdia Sweex Mini Webcam -sonixb 0c45:6007 Sonix sn9c101 + Tas5110D -sonixb 0c45:6009 spcaCam@120 -sonixb 0c45:600d spcaCam@120 -sonixb 0c45:6011 Microdia PC Camera (SN9C102) -sonixb 0c45:6019 Generic Sonix OV7630 -sonixb 0c45:6024 Generic Sonix Tas5130c -sonixb 0c45:6025 Xcam Shanga -sonixb 0c45:6027 GeniusEye 310 -sonixb 0c45:6028 Sonix Btc Pc380 -sonixb 0c45:6029 spcaCam@150 -sonixb 0c45:602a Meade ETX-105EC Camera -sonixb 0c45:602c Generic Sonix OV7630 -sonixb 0c45:602d LIC-200 LG -sonixb 0c45:602e Genius VideoCam Messenger -sonixj 0c45:6040 Speed NVC 350K -sonixj 0c45:607c Sonix sn9c102p Hv7131R -sonixb 0c45:6083 VideoCAM Look -sonixb 0c45:608c VideoCAM Look -sonixb 0c45:608f PC Camera (SN9C103 + OV7630) -sonixb 0c45:60a8 VideoCAM Look -sonixb 0c45:60aa VideoCAM Look -sonixb 0c45:60af VideoCAM Look -sonixb 0c45:60b0 Genius VideoCam Look -sonixj 0c45:60c0 Sangha Sn535 -sonixj 0c45:60ce USB-PC-Camera-168 (TALK-5067) -sonixj 0c45:60ec SN9C105+MO4000 -sonixj 0c45:60fb Surfer NoName -sonixj 0c45:60fc LG-LIC300 -sonixj 0c45:60fe Microdia Audio -sonixj 0c45:6100 PC Camera (SN9C128) -sonixj 0c45:6102 PC Camera (SN9C128) -sonixj 0c45:610a PC Camera (SN9C128) -sonixj 0c45:610b PC Camera (SN9C128) -sonixj 0c45:610c PC Camera (SN9C128) -sonixj 0c45:610e PC Camera (SN9C128) -sonixj 0c45:6128 Microdia/Sonix SNP325 -sonixj 0c45:612a Avant Camera -sonixj 0c45:612b Speed-Link REFLECT2 -sonixj 0c45:612c Typhoon Rasy Cam 1.3MPix -sonixj 0c45:612e PC Camera (SN9C110) -sonixj 0c45:6130 Sonix Pccam -sonixj 0c45:6138 Sn9c120 Mo4000 -sonixj 0c45:613a Microdia Sonix PC Camera -sonixj 0c45:613b Surfer SN-206 -sonixj 0c45:613c Sonix Pccam168 -sonixj 0c45:613e PC Camera (SN9C120) -sonixj 0c45:6142 Hama PC-Webcam AC-150 -sonixj 0c45:6143 Sonix Pccam168 -sonixj 0c45:6148 Digitus DA-70811/ZSMC USB PC Camera ZS211/Microdia -sonixj 0c45:614a Frontech E-Ccam (JIL-2225) -sn9c20x 0c45:6240 PC Camera (SN9C201 + MT9M001) -sn9c20x 0c45:6242 PC Camera (SN9C201 + MT9M111) -sn9c20x 0c45:6248 PC Camera (SN9C201 + OV9655) -sn9c20x 0c45:624c PC Camera (SN9C201 + MT9M112) -sn9c20x 0c45:624e PC Camera (SN9C201 + SOI968) -sn9c20x 0c45:624f PC Camera (SN9C201 + OV9650) -sn9c20x 0c45:6251 PC Camera (SN9C201 + OV9650) -sn9c20x 0c45:6253 PC Camera (SN9C201 + OV9650) -sn9c20x 0c45:6260 PC Camera (SN9C201 + OV7670) -sn9c20x 0c45:6270 PC Camera (SN9C201 + MT9V011/MT9V111/MT9V112) -sn9c20x 0c45:627b PC Camera (SN9C201 + OV7660) -sn9c20x 0c45:627c PC Camera (SN9C201 + HV7131R) -sn9c20x 0c45:627f PC Camera (SN9C201 + OV9650) -sn9c20x 0c45:6280 PC Camera (SN9C202 + MT9M001) -sn9c20x 0c45:6282 PC Camera (SN9C202 + MT9M111) -sn9c20x 0c45:6288 PC Camera (SN9C202 + OV9655) -sn9c20x 0c45:628c PC Camera (SN9C201 + MT9M112) -sn9c20x 0c45:628e PC Camera (SN9C202 + SOI968) -sn9c20x 0c45:628f PC Camera (SN9C202 + OV9650) -sn9c20x 0c45:62a0 PC Camera (SN9C202 + OV7670) -sn9c20x 0c45:62b0 PC Camera (SN9C202 + MT9V011/MT9V111/MT9V112) -sn9c20x 0c45:62b3 PC Camera (SN9C202 + OV9655) -sn9c20x 0c45:62bb PC Camera (SN9C202 + OV7660) -sn9c20x 0c45:62bc PC Camera (SN9C202 + HV7131R) -sn9c2028 0c45:8001 Wild Planet Digital Spy Camera -sn9c2028 0c45:8003 Sakar #11199, #6637x, #67480 keychain cams -sn9c2028 0c45:8008 Mini-Shotz ms-350 -sn9c2028 0c45:800a Vivitar Vivicam 3350B -sunplus 0d64:0303 Sunplus FashionCam DXG -ov519 0e96:c001 TRUST 380 USB2 SPACEC@M -etoms 102c:6151 Qcam Sangha CIF -etoms 102c:6251 Qcam xxxxxx VGA -ov519 1046:9967 W9967CF/W9968CF WebCam IC, Video Blaster WebCam Go -zc3xx 10fd:0128 Typhoon Webshot II USB 300k 0x0128 -spca561 10fd:7e50 FlyCam Usb 100 -zc3xx 10fd:804d Typhoon Webshot II Webcam [zc0301] -zc3xx 10fd:8050 Typhoon Webshot II USB 300k -ov534 1415:2000 Sony HD Eye for PS3 (SLEH 00201) -pac207 145f:013a Trust WB-1300N -pac7302 145f:013c Trust -sn9c20x 145f:013d Trust WB-3600R -vc032x 15b8:6001 HP 2.0 Megapixel -vc032x 15b8:6002 HP 2.0 Megapixel rz406aa -stk1135 174f:6a31 ASUSlaptop, MT9M112 sensor -spca501 1776:501c Arowana 300K CMOS Camera -t613 17a1:0128 TASCORP JPEG Webcam, NGS Cyclops -vc032x 17ef:4802 Lenovo Vc0323+MI1310_SOC -pac7302 1ae7:2001 SpeedLinkSnappy Mic SL-6825-SBK -pac207 2001:f115 D-Link DSB-C120 -sq905c 2770:9050 Disney pix micro (CIF) -sq905c 2770:9051 Lego Bionicle -sq905c 2770:9052 Disney pix micro 2 (VGA) -sq905c 2770:905c All 11 known cameras with this ID -sq905 2770:9120 All 24 known cameras with this ID -sq905c 2770:913d All 4 known cameras with this ID -sq930x 2770:930b Sweex Motion Tracking / I-Tec iCam Tracer -sq930x 2770:930c Trust WB-3500T / NSG Robbie 2.0 -spca500 2899:012c Toptro Industrial -ov519 8020:ef04 ov519 -spca508 8086:0110 Intel Easy PC Camera -spca500 8086:0630 Intel Pocket PC Camera -spca506 99fa:8988 Grandtec V.cap -sn9c20x a168:0610 Dino-Lite Digital Microscope (SN9C201 + HV7131R) -sn9c20x a168:0611 Dino-Lite Digital Microscope (SN9C201 + HV7131R) -sn9c20x a168:0613 Dino-Lite Digital Microscope (SN9C201 + HV7131R) -sn9c20x a168:0614 Dino-Lite Digital Microscope (SN9C201 + MT9M111) -sn9c20x a168:0615 Dino-Lite Digital Microscope (SN9C201 + MT9M111) -sn9c20x a168:0617 Dino-Lite Digital Microscope (SN9C201 + MT9M111) -sn9c20x a168:0618 Dino-Lite Digital Microscope (SN9C201 + HV7131R) -spca561 abcd:cdee Petcam -========= ========= =================================================================== diff --git a/Documentation/media/v4l-drivers/imx.rst b/Documentation/media/v4l-drivers/imx.rst deleted file mode 100644 index 3182951c7651..000000000000 --- a/Documentation/media/v4l-drivers/imx.rst +++ /dev/null @@ -1,621 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -i.MX Video Capture Driver -========================= - -Introduction ------------- - -The Freescale i.MX5/6 contains an Image Processing Unit (IPU), which -handles the flow of image frames to and from capture devices and -display devices. - -For image capture, the IPU contains the following internal subunits: - -- Image DMA Controller (IDMAC) -- Camera Serial Interface (CSI) -- Image Converter (IC) -- Sensor Multi-FIFO Controller (SMFC) -- Image Rotator (IRT) -- Video De-Interlacing or Combining Block (VDIC) - -The IDMAC is the DMA controller for transfer of image frames to and from -memory. Various dedicated DMA channels exist for both video capture and -display paths. During transfer, the IDMAC is also capable of vertical -image flip, 8x8 block transfer (see IRT description), pixel component -re-ordering (for example UYVY to YUYV) within the same colorspace, and -packed <--> planar conversion. The IDMAC can also perform a simple -de-interlacing by interweaving even and odd lines during transfer -(without motion compensation which requires the VDIC). - -The CSI is the backend capture unit that interfaces directly with -camera sensors over Parallel, BT.656/1120, and MIPI CSI-2 buses. - -The IC handles color-space conversion, resizing (downscaling and -upscaling), horizontal flip, and 90/270 degree rotation operations. - -There are three independent "tasks" within the IC that can carry out -conversions concurrently: pre-process encoding, pre-process viewfinder, -and post-processing. Within each task, conversions are split into three -sections: downsizing section, main section (upsizing, flip, colorspace -conversion, and graphics plane combining), and rotation section. - -The IPU time-shares the IC task operations. The time-slice granularity -is one burst of eight pixels in the downsizing section, one image line -in the main processing section, one image frame in the rotation section. - -The SMFC is composed of four independent FIFOs that each can transfer -captured frames from sensors directly to memory concurrently via four -IDMAC channels. - -The IRT carries out 90 and 270 degree image rotation operations. The -rotation operation is carried out on 8x8 pixel blocks at a time. This -operation is supported by the IDMAC which handles the 8x8 block transfer -along with block reordering, in coordination with vertical flip. - -The VDIC handles the conversion of interlaced video to progressive, with -support for different motion compensation modes (low, medium, and high -motion). The deinterlaced output frames from the VDIC can be sent to the -IC pre-process viewfinder task for further conversions. The VDIC also -contains a Combiner that combines two image planes, with alpha blending -and color keying. - -In addition to the IPU internal subunits, there are also two units -outside the IPU that are also involved in video capture on i.MX: - -- MIPI CSI-2 Receiver for camera sensors with the MIPI CSI-2 bus - interface. This is a Synopsys DesignWare core. -- Two video multiplexers for selecting among multiple sensor inputs - to send to a CSI. - -For more info, refer to the latest versions of the i.MX5/6 reference -manuals [#f1]_ and [#f2]_. - - -Features --------- - -Some of the features of this driver include: - -- Many different pipelines can be configured via media controller API, - that correspond to the hardware video capture pipelines supported in - the i.MX. - -- Supports parallel, BT.565, and MIPI CSI-2 interfaces. - -- Concurrent independent streams, by configuring pipelines to multiple - video capture interfaces using independent entities. - -- Scaling, color-space conversion, horizontal and vertical flip, and - image rotation via IC task subdevs. - -- Many pixel formats supported (RGB, packed and planar YUV, partial - planar YUV). - -- The VDIC subdev supports motion compensated de-interlacing, with three - motion compensation modes: low, medium, and high motion. Pipelines are - defined that allow sending frames to the VDIC subdev directly from the - CSI. There is also support in the future for sending frames to the - VDIC from memory buffers via a output/mem2mem devices. - -- Includes a Frame Interval Monitor (FIM) that can correct vertical sync - problems with the ADV718x video decoders. - - -Entities --------- - -imx6-mipi-csi2 --------------- - -This is the MIPI CSI-2 receiver entity. It has one sink pad to receive -the MIPI CSI-2 stream (usually from a MIPI CSI-2 camera sensor). It has -four source pads, corresponding to the four MIPI CSI-2 demuxed virtual -channel outputs. Multiple source pads can be enabled to independently -stream from multiple virtual channels. - -This entity actually consists of two sub-blocks. One is the MIPI CSI-2 -core. This is a Synopsys Designware MIPI CSI-2 core. The other sub-block -is a "CSI-2 to IPU gasket". The gasket acts as a demultiplexer of the -four virtual channels streams, providing four separate parallel buses -containing each virtual channel that are routed to CSIs or video -multiplexers as described below. - -On i.MX6 solo/dual-lite, all four virtual channel buses are routed to -two video multiplexers. Both CSI0 and CSI1 can receive any virtual -channel, as selected by the video multiplexers. - -On i.MX6 Quad, virtual channel 0 is routed to IPU1-CSI0 (after selected -by a video mux), virtual channels 1 and 2 are hard-wired to IPU1-CSI1 -and IPU2-CSI0, respectively, and virtual channel 3 is routed to -IPU2-CSI1 (again selected by a video mux). - -ipuX_csiY_mux -------------- - -These are the video multiplexers. They have two or more sink pads to -select from either camera sensors with a parallel interface, or from -MIPI CSI-2 virtual channels from imx6-mipi-csi2 entity. They have a -single source pad that routes to a CSI (ipuX_csiY entities). - -On i.MX6 solo/dual-lite, there are two video mux entities. One sits -in front of IPU1-CSI0 to select between a parallel sensor and any of -the four MIPI CSI-2 virtual channels (a total of five sink pads). The -other mux sits in front of IPU1-CSI1, and again has five sink pads to -select between a parallel sensor and any of the four MIPI CSI-2 virtual -channels. - -On i.MX6 Quad, there are two video mux entities. One sits in front of -IPU1-CSI0 to select between a parallel sensor and MIPI CSI-2 virtual -channel 0 (two sink pads). The other mux sits in front of IPU2-CSI1 to -select between a parallel sensor and MIPI CSI-2 virtual channel 3 (two -sink pads). - -ipuX_csiY ---------- - -These are the CSI entities. They have a single sink pad receiving from -either a video mux or from a MIPI CSI-2 virtual channel as described -above. - -This entity has two source pads. The first source pad can link directly -to the ipuX_vdic entity or the ipuX_ic_prp entity, using hardware links -that require no IDMAC memory buffer transfer. - -When the direct source pad is routed to the ipuX_ic_prp entity, frames -from the CSI can be processed by one or both of the IC pre-processing -tasks. - -When the direct source pad is routed to the ipuX_vdic entity, the VDIC -will carry out motion-compensated de-interlace using "high motion" mode -(see description of ipuX_vdic entity). - -The second source pad sends video frames directly to memory buffers -via the SMFC and an IDMAC channel, bypassing IC pre-processing. This -source pad is routed to a capture device node, with a node name of the -format "ipuX_csiY capture". - -Note that since the IDMAC source pad makes use of an IDMAC channel, -pixel reordering within the same colorspace can be carried out by the -IDMAC channel. For example, if the CSI sink pad is receiving in UYVY -order, the capture device linked to the IDMAC source pad can capture -in YUYV order. Also, if the CSI sink pad is receiving a packed YUV -format, the capture device can capture a planar YUV format such as -YUV420. - -The IDMAC channel at the IDMAC source pad also supports simple -interweave without motion compensation, which is activated if the source -pad's field type is sequential top-bottom or bottom-top, and the -requested capture interface field type is set to interlaced (t-b, b-t, -or unqualified interlaced). The capture interface will enforce the same -field order as the source pad field order (interlaced-bt if source pad -is seq-bt, interlaced-tb if source pad is seq-tb). - -For events produced by ipuX_csiY, see ref:`imx_api_ipuX_csiY`. - -Cropping in ipuX_csiY ---------------------- - -The CSI supports cropping the incoming raw sensor frames. This is -implemented in the ipuX_csiY entities at the sink pad, using the -crop selection subdev API. - -The CSI also supports fixed divide-by-two downscaling independently in -width and height. This is implemented in the ipuX_csiY entities at -the sink pad, using the compose selection subdev API. - -The output rectangle at the ipuX_csiY source pad is the same as -the compose rectangle at the sink pad. So the source pad rectangle -cannot be negotiated, it must be set using the compose selection -API at sink pad (if /2 downscale is desired, otherwise source pad -rectangle is equal to incoming rectangle). - -To give an example of crop and /2 downscale, this will crop a -1280x960 input frame to 640x480, and then /2 downscale in both -dimensions to 320x240 (assumes ipu1_csi0 is linked to ipu1_csi0_mux): - -.. code-block:: none - - media-ctl -V "'ipu1_csi0_mux':2[fmt:UYVY2X8/1280x960]" - media-ctl -V "'ipu1_csi0':0[crop:(0,0)/640x480]" - media-ctl -V "'ipu1_csi0':0[compose:(0,0)/320x240]" - -Frame Skipping in ipuX_csiY ---------------------------- - -The CSI supports frame rate decimation, via frame skipping. Frame -rate decimation is specified by setting the frame intervals at -sink and source pads. The ipuX_csiY entity then applies the best -frame skip setting to the CSI to achieve the desired frame rate -at the source pad. - -The following example reduces an assumed incoming 60 Hz frame -rate by half at the IDMAC output source pad: - -.. code-block:: none - - media-ctl -V "'ipu1_csi0':0[fmt:UYVY2X8/640x480@1/60]" - media-ctl -V "'ipu1_csi0':2[fmt:UYVY2X8/640x480@1/30]" - -Frame Interval Monitor in ipuX_csiY ------------------------------------ - -See ref:`imx_api_FIM`. - -ipuX_vdic ---------- - -The VDIC carries out motion compensated de-interlacing, with three -motion compensation modes: low, medium, and high motion. The mode is -specified with the menu control V4L2_CID_DEINTERLACING_MODE. The VDIC -has two sink pads and a single source pad. - -The direct sink pad receives from an ipuX_csiY direct pad. With this -link the VDIC can only operate in high motion mode. - -When the IDMAC sink pad is activated, it receives from an output -or mem2mem device node. With this pipeline, the VDIC can also operate -in low and medium modes, because these modes require receiving -frames from memory buffers. Note that an output or mem2mem device -is not implemented yet, so this sink pad currently has no links. - -The source pad routes to the IC pre-processing entity ipuX_ic_prp. - -ipuX_ic_prp ------------ - -This is the IC pre-processing entity. It acts as a router, routing -data from its sink pad to one or both of its source pads. - -This entity has a single sink pad. The sink pad can receive from the -ipuX_csiY direct pad, or from ipuX_vdic. - -This entity has two source pads. One source pad routes to the -pre-process encode task entity (ipuX_ic_prpenc), the other to the -pre-process viewfinder task entity (ipuX_ic_prpvf). Both source pads -can be activated at the same time if the sink pad is receiving from -ipuX_csiY. Only the source pad to the pre-process viewfinder task entity -can be activated if the sink pad is receiving from ipuX_vdic (frames -from the VDIC can only be processed by the pre-process viewfinder task). - -ipuX_ic_prpenc --------------- - -This is the IC pre-processing encode entity. It has a single sink -pad from ipuX_ic_prp, and a single source pad. The source pad is -routed to a capture device node, with a node name of the format -"ipuX_ic_prpenc capture". - -This entity performs the IC pre-process encode task operations: -color-space conversion, resizing (downscaling and upscaling), -horizontal and vertical flip, and 90/270 degree rotation. Flip -and rotation are provided via standard V4L2 controls. - -Like the ipuX_csiY IDMAC source, this entity also supports simple -de-interlace without motion compensation, and pixel reordering. - -ipuX_ic_prpvf -------------- - -This is the IC pre-processing viewfinder entity. It has a single sink -pad from ipuX_ic_prp, and a single source pad. The source pad is routed -to a capture device node, with a node name of the format -"ipuX_ic_prpvf capture". - -This entity is identical in operation to ipuX_ic_prpenc, with the same -resizing and CSC operations and flip/rotation controls. It will receive -and process de-interlaced frames from the ipuX_vdic if ipuX_ic_prp is -receiving from ipuX_vdic. - -Like the ipuX_csiY IDMAC source, this entity supports simple -interweaving without motion compensation. However, note that if the -ipuX_vdic is included in the pipeline (ipuX_ic_prp is receiving from -ipuX_vdic), it's not possible to use interweave in ipuX_ic_prpvf, -since the ipuX_vdic has already carried out de-interlacing (with -motion compensation) and therefore the field type output from -ipuX_vdic can only be none (progressive). - -Capture Pipelines ------------------ - -The following describe the various use-cases supported by the pipelines. - -The links shown do not include the backend sensor, video mux, or mipi -csi-2 receiver links. This depends on the type of sensor interface -(parallel or mipi csi-2). So these pipelines begin with: - -sensor -> ipuX_csiY_mux -> ... - -for parallel sensors, or: - -sensor -> imx6-mipi-csi2 -> (ipuX_csiY_mux) -> ... - -for mipi csi-2 sensors. The imx6-mipi-csi2 receiver may need to route -to the video mux (ipuX_csiY_mux) before sending to the CSI, depending -on the mipi csi-2 virtual channel, hence ipuX_csiY_mux is shown in -parenthesis. - -Unprocessed Video Capture: --------------------------- - -Send frames directly from sensor to camera device interface node, with -no conversions, via ipuX_csiY IDMAC source pad: - --> ipuX_csiY:2 -> ipuX_csiY capture - -IC Direct Conversions: ----------------------- - -This pipeline uses the preprocess encode entity to route frames directly -from the CSI to the IC, to carry out scaling up to 1024x1024 resolution, -CSC, flipping, and image rotation: - --> ipuX_csiY:1 -> 0:ipuX_ic_prp:1 -> 0:ipuX_ic_prpenc:1 -> ipuX_ic_prpenc capture - -Motion Compensated De-interlace: --------------------------------- - -This pipeline routes frames from the CSI direct pad to the VDIC entity to -support motion-compensated de-interlacing (high motion mode only), -scaling up to 1024x1024, CSC, flip, and rotation: - --> ipuX_csiY:1 -> 0:ipuX_vdic:2 -> 0:ipuX_ic_prp:2 -> 0:ipuX_ic_prpvf:1 -> ipuX_ic_prpvf capture - - -Usage Notes ------------ - -To aid in configuration and for backward compatibility with V4L2 -applications that access controls only from video device nodes, the -capture device interfaces inherit controls from the active entities -in the current pipeline, so controls can be accessed either directly -from the subdev or from the active capture device interface. For -example, the FIM controls are available either from the ipuX_csiY -subdevs or from the active capture device. - -The following are specific usage notes for the Sabre* reference -boards: - - -SabreLite with OV5642 and OV5640 --------------------------------- - -This platform requires the OmniVision OV5642 module with a parallel -camera interface, and the OV5640 module with a MIPI CSI-2 -interface. Both modules are available from Boundary Devices: - -- https://boundarydevices.com/product/nit6x_5mp -- https://boundarydevices.com/product/nit6x_5mp_mipi - -Note that if only one camera module is available, the other sensor -node can be disabled in the device tree. - -The OV5642 module is connected to the parallel bus input on the i.MX -internal video mux to IPU1 CSI0. It's i2c bus connects to i2c bus 2. - -The MIPI CSI-2 OV5640 module is connected to the i.MX internal MIPI CSI-2 -receiver, and the four virtual channel outputs from the receiver are -routed as follows: vc0 to the IPU1 CSI0 mux, vc1 directly to IPU1 CSI1, -vc2 directly to IPU2 CSI0, and vc3 to the IPU2 CSI1 mux. The OV5640 is -also connected to i2c bus 2 on the SabreLite, therefore the OV5642 and -OV5640 must not share the same i2c slave address. - -The following basic example configures unprocessed video capture -pipelines for both sensors. The OV5642 is routed to ipu1_csi0, and -the OV5640, transmitting on MIPI CSI-2 virtual channel 1 (which is -imx6-mipi-csi2 pad 2), is routed to ipu1_csi1. Both sensors are -configured to output 640x480, and the OV5642 outputs YUYV2X8, the -OV5640 UYVY2X8: - -.. code-block:: none - - # Setup links for OV5642 - media-ctl -l "'ov5642 1-0042':0 -> 'ipu1_csi0_mux':1[1]" - media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]" - media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]" - # Setup links for OV5640 - media-ctl -l "'ov5640 1-0040':0 -> 'imx6-mipi-csi2':0[1]" - media-ctl -l "'imx6-mipi-csi2':2 -> 'ipu1_csi1':0[1]" - media-ctl -l "'ipu1_csi1':2 -> 'ipu1_csi1 capture':0[1]" - # Configure pads for OV5642 pipeline - media-ctl -V "'ov5642 1-0042':0 [fmt:YUYV2X8/640x480 field:none]" - media-ctl -V "'ipu1_csi0_mux':2 [fmt:YUYV2X8/640x480 field:none]" - media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/640x480 field:none]" - # Configure pads for OV5640 pipeline - media-ctl -V "'ov5640 1-0040':0 [fmt:UYVY2X8/640x480 field:none]" - media-ctl -V "'imx6-mipi-csi2':2 [fmt:UYVY2X8/640x480 field:none]" - media-ctl -V "'ipu1_csi1':2 [fmt:AYUV32/640x480 field:none]" - -Streaming can then begin independently on the capture device nodes -"ipu1_csi0 capture" and "ipu1_csi1 capture". The v4l2-ctl tool can -be used to select any supported YUV pixelformat on the capture device -nodes, including planar. - -i.MX6Q SabreAuto with ADV7180 decoder -------------------------------------- - -On the i.MX6Q SabreAuto, an on-board ADV7180 SD decoder is connected to the -parallel bus input on the internal video mux to IPU1 CSI0. - -The following example configures a pipeline to capture from the ADV7180 -video decoder, assuming NTSC 720x480 input signals, using simple -interweave (unconverted and without motion compensation). The adv7180 -must output sequential or alternating fields (field type 'seq-bt' for -NTSC, or 'alternate'): - -.. code-block:: none - - # Setup links - media-ctl -l "'adv7180 3-0021':0 -> 'ipu1_csi0_mux':1[1]" - media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]" - media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]" - # Configure pads - media-ctl -V "'adv7180 3-0021':0 [fmt:UYVY2X8/720x480 field:seq-bt]" - media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/720x480]" - media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/720x480]" - # Configure "ipu1_csi0 capture" interface (assumed at /dev/video4) - v4l2-ctl -d4 --set-fmt-video=field=interlaced_bt - -Streaming can then begin on /dev/video4. The v4l2-ctl tool can also be -used to select any supported YUV pixelformat on /dev/video4. - -This example configures a pipeline to capture from the ADV7180 -video decoder, assuming PAL 720x576 input signals, with Motion -Compensated de-interlacing. The adv7180 must output sequential or -alternating fields (field type 'seq-tb' for PAL, or 'alternate'). - -.. code-block:: none - - # Setup links - media-ctl -l "'adv7180 3-0021':0 -> 'ipu1_csi0_mux':1[1]" - media-ctl -l "'ipu1_csi0_mux':2 -> 'ipu1_csi0':0[1]" - media-ctl -l "'ipu1_csi0':1 -> 'ipu1_vdic':0[1]" - media-ctl -l "'ipu1_vdic':2 -> 'ipu1_ic_prp':0[1]" - media-ctl -l "'ipu1_ic_prp':2 -> 'ipu1_ic_prpvf':0[1]" - media-ctl -l "'ipu1_ic_prpvf':1 -> 'ipu1_ic_prpvf capture':0[1]" - # Configure pads - media-ctl -V "'adv7180 3-0021':0 [fmt:UYVY2X8/720x576 field:seq-tb]" - media-ctl -V "'ipu1_csi0_mux':2 [fmt:UYVY2X8/720x576]" - media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/720x576]" - media-ctl -V "'ipu1_vdic':2 [fmt:AYUV32/720x576 field:none]" - media-ctl -V "'ipu1_ic_prp':2 [fmt:AYUV32/720x576 field:none]" - media-ctl -V "'ipu1_ic_prpvf':1 [fmt:AYUV32/720x576 field:none]" - # Configure "ipu1_ic_prpvf capture" interface (assumed at /dev/video2) - v4l2-ctl -d2 --set-fmt-video=field=none - -Streaming can then begin on /dev/video2. The v4l2-ctl tool can also be -used to select any supported YUV pixelformat on /dev/video2. - -This platform accepts Composite Video analog inputs to the ADV7180 on -Ain1 (connector J42). - -i.MX6DL SabreAuto with ADV7180 decoder --------------------------------------- - -On the i.MX6DL SabreAuto, an on-board ADV7180 SD decoder is connected to the -parallel bus input on the internal video mux to IPU1 CSI0. - -The following example configures a pipeline to capture from the ADV7180 -video decoder, assuming NTSC 720x480 input signals, using simple -interweave (unconverted and without motion compensation). The adv7180 -must output sequential or alternating fields (field type 'seq-bt' for -NTSC, or 'alternate'): - -.. code-block:: none - - # Setup links - media-ctl -l "'adv7180 4-0021':0 -> 'ipu1_csi0_mux':4[1]" - media-ctl -l "'ipu1_csi0_mux':5 -> 'ipu1_csi0':0[1]" - media-ctl -l "'ipu1_csi0':2 -> 'ipu1_csi0 capture':0[1]" - # Configure pads - media-ctl -V "'adv7180 4-0021':0 [fmt:UYVY2X8/720x480 field:seq-bt]" - media-ctl -V "'ipu1_csi0_mux':5 [fmt:UYVY2X8/720x480]" - media-ctl -V "'ipu1_csi0':2 [fmt:AYUV32/720x480]" - # Configure "ipu1_csi0 capture" interface (assumed at /dev/video0) - v4l2-ctl -d0 --set-fmt-video=field=interlaced_bt - -Streaming can then begin on /dev/video0. The v4l2-ctl tool can also be -used to select any supported YUV pixelformat on /dev/video0. - -This example configures a pipeline to capture from the ADV7180 -video decoder, assuming PAL 720x576 input signals, with Motion -Compensated de-interlacing. The adv7180 must output sequential or -alternating fields (field type 'seq-tb' for PAL, or 'alternate'). - -.. code-block:: none - - # Setup links - media-ctl -l "'adv7180 4-0021':0 -> 'ipu1_csi0_mux':4[1]" - media-ctl -l "'ipu1_csi0_mux':5 -> 'ipu1_csi0':0[1]" - media-ctl -l "'ipu1_csi0':1 -> 'ipu1_vdic':0[1]" - media-ctl -l "'ipu1_vdic':2 -> 'ipu1_ic_prp':0[1]" - media-ctl -l "'ipu1_ic_prp':2 -> 'ipu1_ic_prpvf':0[1]" - media-ctl -l "'ipu1_ic_prpvf':1 -> 'ipu1_ic_prpvf capture':0[1]" - # Configure pads - media-ctl -V "'adv7180 4-0021':0 [fmt:UYVY2X8/720x576 field:seq-tb]" - media-ctl -V "'ipu1_csi0_mux':5 [fmt:UYVY2X8/720x576]" - media-ctl -V "'ipu1_csi0':1 [fmt:AYUV32/720x576]" - media-ctl -V "'ipu1_vdic':2 [fmt:AYUV32/720x576 field:none]" - media-ctl -V "'ipu1_ic_prp':2 [fmt:AYUV32/720x576 field:none]" - media-ctl -V "'ipu1_ic_prpvf':1 [fmt:AYUV32/720x576 field:none]" - # Configure "ipu1_ic_prpvf capture" interface (assumed at /dev/video2) - v4l2-ctl -d2 --set-fmt-video=field=none - -Streaming can then begin on /dev/video2. The v4l2-ctl tool can also be -used to select any supported YUV pixelformat on /dev/video2. - -This platform accepts Composite Video analog inputs to the ADV7180 on -Ain1 (connector J42). - -SabreSD with MIPI CSI-2 OV5640 ------------------------------- - -Similarly to SabreLite, the SabreSD supports a parallel interface -OV5642 module on IPU1 CSI0, and a MIPI CSI-2 OV5640 module. The OV5642 -connects to i2c bus 1 and the OV5640 to i2c bus 2. - -The device tree for SabreSD includes OF graphs for both the parallel -OV5642 and the MIPI CSI-2 OV5640, but as of this writing only the MIPI -CSI-2 OV5640 has been tested, so the OV5642 node is currently disabled. -The OV5640 module connects to MIPI connector J5 (sorry I don't have the -compatible module part number or URL). - -The following example configures a direct conversion pipeline to capture -from the OV5640, transmitting on MIPI CSI-2 virtual channel 1. $sensorfmt -can be any format supported by the OV5640. $sensordim is the frame -dimension part of $sensorfmt (minus the mbus pixel code). $outputfmt can -be any format supported by the ipu1_ic_prpenc entity at its output pad: - -.. code-block:: none - - # Setup links - media-ctl -l "'ov5640 1-003c':0 -> 'imx6-mipi-csi2':0[1]" - media-ctl -l "'imx6-mipi-csi2':2 -> 'ipu1_csi1':0[1]" - media-ctl -l "'ipu1_csi1':1 -> 'ipu1_ic_prp':0[1]" - media-ctl -l "'ipu1_ic_prp':1 -> 'ipu1_ic_prpenc':0[1]" - media-ctl -l "'ipu1_ic_prpenc':1 -> 'ipu1_ic_prpenc capture':0[1]" - # Configure pads - media-ctl -V "'ov5640 1-003c':0 [fmt:$sensorfmt field:none]" - media-ctl -V "'imx6-mipi-csi2':2 [fmt:$sensorfmt field:none]" - media-ctl -V "'ipu1_csi1':1 [fmt:AYUV32/$sensordim field:none]" - media-ctl -V "'ipu1_ic_prp':1 [fmt:AYUV32/$sensordim field:none]" - media-ctl -V "'ipu1_ic_prpenc':1 [fmt:$outputfmt field:none]" - -Streaming can then begin on "ipu1_ic_prpenc capture" node. The v4l2-ctl -tool can be used to select any supported YUV or RGB pixelformat on the -capture device node. - - -Known Issues ------------- - -1. When using 90 or 270 degree rotation control at capture resolutions - near the IC resizer limit of 1024x1024, and combined with planar - pixel formats (YUV420, YUV422p), frame capture will often fail with - no end-of-frame interrupts from the IDMAC channel. To work around - this, use lower resolution and/or packed formats (YUYV, RGB3, etc.) - when 90 or 270 rotations are needed. - - -File list ---------- - -drivers/staging/media/imx/ -include/media/imx.h -include/linux/imx-media.h - -References ----------- - -.. [#f1] http://www.nxp.com/assets/documents/data/en/reference-manuals/IMX6DQRM.pdf -.. [#f2] http://www.nxp.com/assets/documents/data/en/reference-manuals/IMX6SDLRM.pdf - - -Authors -------- - -- Steve Longerbeam -- Philipp Zabel -- Russell King - -Copyright (C) 2012-2017 Mentor Graphics Inc. diff --git a/Documentation/media/v4l-drivers/imx7.rst b/Documentation/media/v4l-drivers/imx7.rst deleted file mode 100644 index 1e442c97da47..000000000000 --- a/Documentation/media/v4l-drivers/imx7.rst +++ /dev/null @@ -1,161 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -i.MX7 Video Capture Driver -========================== - -Introduction ------------- - -The i.MX7 contrary to the i.MX5/6 family does not contain an Image Processing -Unit (IPU); because of that the capabilities to perform operations or -manipulation of the capture frames are less feature rich. - -For image capture the i.MX7 has three units: -- CMOS Sensor Interface (CSI) -- Video Multiplexer -- MIPI CSI-2 Receiver - -.. code-block:: none - - MIPI Camera Input ---> MIPI CSI-2 --- > |\ - | \ - | \ - | M | - | U | ------> CSI ---> Capture - | X | - | / - Parallel Camera Input ----------------> | / - |/ - -For additional information, please refer to the latest versions of the i.MX7 -reference manual [#f1]_. - -Entities --------- - -imx7-mipi-csi2 --------------- - -This is the MIPI CSI-2 receiver entity. It has one sink pad to receive the pixel -data from MIPI CSI-2 camera sensor. It has one source pad, corresponding to the -virtual channel 0. This module is compliant to previous version of Samsung -D-phy, and supports two D-PHY Rx Data lanes. - -csi-mux -------- - -This is the video multiplexer. It has two sink pads to select from either camera -sensor with a parallel interface or from MIPI CSI-2 virtual channel 0. It has -a single source pad that routes to the CSI. - -csi ---- - -The CSI enables the chip to connect directly to external CMOS image sensor. CSI -can interface directly with Parallel and MIPI CSI-2 buses. It has 256 x 64 FIFO -to store received image pixel data and embedded DMA controllers to transfer data -from the FIFO through AHB bus. - -This entity has one sink pad that receives from the csi-mux entity and a single -source pad that routes video frames directly to memory buffers. This pad is -routed to a capture device node. - -Usage Notes ------------ - -To aid in configuration and for backward compatibility with V4L2 applications -that access controls only from video device nodes, the capture device interfaces -inherit controls from the active entities in the current pipeline, so controls -can be accessed either directly from the subdev or from the active capture -device interface. For example, the sensor controls are available either from the -sensor subdevs or from the active capture device. - -Warp7 with OV2680 ------------------ - -On this platform an OV2680 MIPI CSI-2 module is connected to the internal MIPI -CSI-2 receiver. The following example configures a video capture pipeline with -an output of 800x600, and BGGR 10 bit bayer format: - -.. code-block:: none - - # Setup links - media-ctl -l "'ov2680 1-0036':0 -> 'imx7-mipi-csis.0':0[1]" - media-ctl -l "'imx7-mipi-csis.0':1 -> 'csi-mux':1[1]" - media-ctl -l "'csi-mux':2 -> 'csi':0[1]" - media-ctl -l "'csi':1 -> 'csi capture':0[1]" - - # Configure pads for pipeline - media-ctl -V "'ov2680 1-0036':0 [fmt:SBGGR10_1X10/800x600 field:none]" - media-ctl -V "'csi-mux':1 [fmt:SBGGR10_1X10/800x600 field:none]" - media-ctl -V "'csi-mux':2 [fmt:SBGGR10_1X10/800x600 field:none]" - media-ctl -V "'imx7-mipi-csis.0':0 [fmt:SBGGR10_1X10/800x600 field:none]" - media-ctl -V "'csi':0 [fmt:SBGGR10_1X10/800x600 field:none]" - -After this streaming can start. The v4l2-ctl tool can be used to select any of -the resolutions supported by the sensor. - -.. code-block:: none - - # media-ctl -p - Media controller API version 5.2.0 - - Media device information - ------------------------ - driver imx7-csi - model imx-media - serial - bus info - hw revision 0x0 - driver version 5.2.0 - - Device topology - - entity 1: csi (2 pads, 2 links) - type V4L2 subdev subtype Unknown flags 0 - device node name /dev/v4l-subdev0 - pad0: Sink - [fmt:SBGGR10_1X10/800x600 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range] - <- "csi-mux":2 [ENABLED] - pad1: Source - [fmt:SBGGR10_1X10/800x600 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:full-range] - -> "csi capture":0 [ENABLED] - - - entity 4: csi capture (1 pad, 1 link) - type Node subtype V4L flags 0 - device node name /dev/video0 - pad0: Sink - <- "csi":1 [ENABLED] - - - entity 10: csi-mux (3 pads, 2 links) - type V4L2 subdev subtype Unknown flags 0 - device node name /dev/v4l-subdev1 - pad0: Sink - [fmt:Y8_1X8/1x1 field:none] - pad1: Sink - [fmt:SBGGR10_1X10/800x600 field:none] - <- "imx7-mipi-csis.0":1 [ENABLED] - pad2: Source - [fmt:SBGGR10_1X10/800x600 field:none] - -> "csi":0 [ENABLED] - - - entity 14: imx7-mipi-csis.0 (2 pads, 2 links) - type V4L2 subdev subtype Unknown flags 0 - device node name /dev/v4l-subdev2 - pad0: Sink - [fmt:SBGGR10_1X10/800x600 field:none] - <- "ov2680 1-0036":0 [ENABLED] - pad1: Source - [fmt:SBGGR10_1X10/800x600 field:none] - -> "csi-mux":1 [ENABLED] - - - entity 17: ov2680 1-0036 (1 pad, 1 link) - type V4L2 subdev subtype Sensor flags 0 - device node name /dev/v4l-subdev3 - pad0: Source - [fmt:SBGGR10_1X10/800x600@1/30 field:none colorspace:srgb] - -> "imx7-mipi-csis.0":0 [ENABLED] - -References ----------- - -.. [#f1] https://www.nxp.com/docs/en/reference-manual/IMX7SRM.pdf diff --git a/Documentation/media/v4l-drivers/index.rst b/Documentation/media/v4l-drivers/index.rst index 8962a86dad70..aef375cfb05a 100644 --- a/Documentation/media/v4l-drivers/index.rst +++ b/Documentation/media/v4l-drivers/index.rst @@ -31,38 +31,13 @@ For more details see the file COPYING in the source distribution of Linux. :maxdepth: 5 :numbered: - v4l-with-ir tuners - cardlist - bttv - cafe_ccic - cpia2 - cx88 - davinci-vpbe - fimc - imx - imx7 - ipu3 - ivtv max2175 - meye - omap3isp - omap4_camera - philips pvrusb2 pxa_camera - qcom_camss radiotrack - rcar-fdp1 - saa7134 sh_mobile_ceu_camera - si470x - si4713 - si476x uvcvideo - vimc - vivid - zr364xx bttv-devel cpia2_devel diff --git a/Documentation/media/v4l-drivers/ipu3.rst b/Documentation/media/v4l-drivers/ipu3.rst deleted file mode 100644 index a694f49491f9..000000000000 --- a/Documentation/media/v4l-drivers/ipu3.rst +++ /dev/null @@ -1,558 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -.. include:: - -=============================================================== -Intel Image Processing Unit 3 (IPU3) Imaging Unit (ImgU) driver -=============================================================== - -Copyright |copy| 2018 Intel Corporation - -Introduction -============ - -This file documents the Intel IPU3 (3rd generation Image Processing Unit) -Imaging Unit drivers located under drivers/media/pci/intel/ipu3 (CIO2) as well -as under drivers/staging/media/ipu3 (ImgU). - -The Intel IPU3 found in certain Kaby Lake (as well as certain Sky Lake) -platforms (U/Y processor lines) is made up of two parts namely the Imaging Unit -(ImgU) and the CIO2 device (MIPI CSI2 receiver). - -The CIO2 device receives the raw Bayer data from the sensors and outputs the -frames in a format that is specific to the IPU3 (for consumption by the IPU3 -ImgU). The CIO2 driver is available as drivers/media/pci/intel/ipu3/ipu3-cio2* -and is enabled through the CONFIG_VIDEO_IPU3_CIO2 config option. - -The Imaging Unit (ImgU) is responsible for processing images captured -by the IPU3 CIO2 device. The ImgU driver sources can be found under -drivers/staging/media/ipu3 directory. The driver is enabled through the -CONFIG_VIDEO_IPU3_IMGU config option. - -The two driver modules are named ipu3_csi2 and ipu3_imgu, respectively. - -The drivers has been tested on Kaby Lake platforms (U/Y processor lines). - -Both of the drivers implement V4L2, Media Controller and V4L2 sub-device -interfaces. The IPU3 CIO2 driver supports camera sensors connected to the CIO2 -MIPI CSI-2 interfaces through V4L2 sub-device sensor drivers. - -CIO2 -==== - -The CIO2 is represented as a single V4L2 subdev, which provides a V4L2 subdev -interface to the user space. There is a video node for each CSI-2 receiver, -with a single media controller interface for the entire device. - -The CIO2 contains four independent capture channel, each with its own MIPI CSI-2 -receiver and DMA engine. Each channel is modelled as a V4L2 sub-device exposed -to userspace as a V4L2 sub-device node and has two pads: - -.. tabularcolumns:: |p{0.8cm}|p{4.0cm}|p{4.0cm}| - -.. flat-table:: - - * - pad - - direction - - purpose - - * - 0 - - sink - - MIPI CSI-2 input, connected to the sensor subdev - - * - 1 - - source - - Raw video capture, connected to the V4L2 video interface - -The V4L2 video interfaces model the DMA engines. They are exposed to userspace -as V4L2 video device nodes. - -Capturing frames in raw Bayer format ------------------------------------- - -CIO2 MIPI CSI2 receiver is used to capture frames (in packed raw Bayer format) -from the raw sensors connected to the CSI2 ports. The captured frames are used -as input to the ImgU driver. - -Image processing using IPU3 ImgU requires tools such as raw2pnm [#f1]_, and -yavta [#f2]_ due to the following unique requirements and / or features specific -to IPU3. - --- The IPU3 CSI2 receiver outputs the captured frames from the sensor in packed -raw Bayer format that is specific to IPU3. - --- Multiple video nodes have to be operated simultaneously. - -Let us take the example of ov5670 sensor connected to CSI2 port 0, for a -2592x1944 image capture. - -Using the media contorller APIs, the ov5670 sensor is configured to send -frames in packed raw Bayer format to IPU3 CSI2 receiver. - -# This example assumes /dev/media0 as the CIO2 media device - -export MDEV=/dev/media0 - -# and that ov5670 sensor is connected to i2c bus 10 with address 0x36 - -export SDEV=$(media-ctl -d $MDEV -e "ov5670 10-0036") - -# Establish the link for the media devices using media-ctl [#f3]_ -media-ctl -d $MDEV -l "ov5670:0 -> ipu3-csi2 0:0[1]" - -# Set the format for the media devices -media-ctl -d $MDEV -V "ov5670:0 [fmt:SGRBG10/2592x1944]" - -media-ctl -d $MDEV -V "ipu3-csi2 0:0 [fmt:SGRBG10/2592x1944]" - -media-ctl -d $MDEV -V "ipu3-csi2 0:1 [fmt:SGRBG10/2592x1944]" - -Once the media pipeline is configured, desired sensor specific settings -(such as exposure and gain settings) can be set, using the yavta tool. - -e.g - -yavta -w 0x009e0903 444 $SDEV - -yavta -w 0x009e0913 1024 $SDEV - -yavta -w 0x009e0911 2046 $SDEV - -Once the desired sensor settings are set, frame captures can be done as below. - -e.g - -yavta --data-prefix -u -c10 -n5 -I -s2592x1944 --file=/tmp/frame-#.bin \ - -f IPU3_SGRBG10 $(media-ctl -d $MDEV -e "ipu3-cio2 0") - -With the above command, 10 frames are captured at 2592x1944 resolution, with -sGRBG10 format and output as IPU3_SGRBG10 format. - -The captured frames are available as /tmp/frame-#.bin files. - -ImgU -==== - -The ImgU is represented as two V4L2 subdevs, each of which provides a V4L2 -subdev interface to the user space. - -Each V4L2 subdev represents a pipe, which can support a maximum of 2 streams. -This helps to support advanced camera features like Continuous View Finder (CVF) -and Snapshot During Video(SDV). - -The ImgU contains two independent pipes, each modelled as a V4L2 sub-device -exposed to userspace as a V4L2 sub-device node. - -Each pipe has two sink pads and three source pads for the following purpose: - -.. tabularcolumns:: |p{0.8cm}|p{4.0cm}|p{4.0cm}| - -.. flat-table:: - - * - pad - - direction - - purpose - - * - 0 - - sink - - Input raw video stream - - * - 1 - - sink - - Processing parameters - - * - 2 - - source - - Output processed video stream - - * - 3 - - source - - Output viewfinder video stream - - * - 4 - - source - - 3A statistics - -Each pad is connected to a corresponding V4L2 video interface, exposed to -userspace as a V4L2 video device node. - -Device operation ----------------- - -With ImgU, once the input video node ("ipu3-imgu 0/1":0, in -: format) is queued with buffer (in packed raw Bayer -format), ImgU starts processing the buffer and produces the video output in YUV -format and statistics output on respective output nodes. The driver is expected -to have buffers ready for all of parameter, output and statistics nodes, when -input video node is queued with buffer. - -At a minimum, all of input, main output, 3A statistics and viewfinder -video nodes should be enabled for IPU3 to start image processing. - -Each ImgU V4L2 subdev has the following set of video nodes. - -input, output and viewfinder video nodes ----------------------------------------- - -The frames (in packed raw Bayer format specific to the IPU3) received by the -input video node is processed by the IPU3 Imaging Unit and are output to 2 video -nodes, with each targeting a different purpose (main output and viewfinder -output). - -Details onand the Bayer format specific to the IPU3 can be found in -:ref:`v4l2-pix-fmt-ipu3-sbggr10`. - -The driver supports V4L2 Video Capture Interface as defined at :ref:`devices`. - -Only the multi-planar API is supported. More details can be found at -:ref:`planar-apis`. - -Parameters video node ---------------------- - -The parameters video node receives the ImgU algorithm parameters that are used -to configure how the ImgU algorithms process the image. - -Details on processing parameters specific to the IPU3 can be found in -:ref:`v4l2-meta-fmt-params`. - -3A statistics video node ------------------------- - -3A statistics video node is used by the ImgU driver to output the 3A (auto -focus, auto exposure and auto white balance) statistics for the frames that are -being processed by the ImgU to user space applications. User space applications -can use this statistics data to compute the desired algorithm parameters for -the ImgU. - -Configuring the Intel IPU3 -========================== - -The IPU3 ImgU pipelines can be configured using the Media Controller, defined at -:ref:`media_controller`. - -Firmware binary selection -------------------------- - -The firmware binary is selected using the V4L2_CID_INTEL_IPU3_MODE, currently -defined in drivers/staging/media/ipu3/include/intel-ipu3.h . "VIDEO" and "STILL" -modes are available. - -Processing the image in raw Bayer format ----------------------------------------- - -Configuring ImgU V4L2 subdev for image processing -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The ImgU V4L2 subdevs have to be configured with media controller APIs to have -all the video nodes setup correctly. - -Let us take "ipu3-imgu 0" subdev as an example. - -media-ctl -d $MDEV -r - -media-ctl -d $MDEV -l "ipu3-imgu 0 input":0 -> "ipu3-imgu 0":0[1] - -media-ctl -d $MDEV -l "ipu3-imgu 0":2 -> "ipu3-imgu 0 output":0[1] - -media-ctl -d $MDEV -l "ipu3-imgu 0":3 -> "ipu3-imgu 0 viewfinder":0[1] - -media-ctl -d $MDEV -l "ipu3-imgu 0":4 -> "ipu3-imgu 0 3a stat":0[1] - -Also the pipe mode of the corresponding V4L2 subdev should be set as desired -(e.g 0 for video mode or 1 for still mode) through the control id 0x009819a1 as -below. - -yavta -w "0x009819A1 1" /dev/v4l-subdev7 - -Certain hardware blocks in ImgU pipeline can change the frame resolution by -cropping or scaling, these hardware blocks include Input Feeder(IF), Bayer Down -Scaler (BDS) and Geometric Distortion Correction (GDC). -There is also a block which can change the frame resolution - YUV Scaler, it is -only applicable to the secondary output. - -RAW Bayer frames go through these ImgU pipeline hardware blocks and the final -processed image output to the DDR memory. - -.. kernel-figure:: ipu3_rcb.svg - :alt: ipu3 resolution blocks image - - IPU3 resolution change hardware blocks - -**Input Feeder** - -Input Feeder gets the Bayer frame data from the sensor, it can enable cropping -of lines and columns from the frame and then store pixels into device's internal -pixel buffer which are ready to readout by following blocks. - -**Bayer Down Scaler** - -Bayer Down Scaler is capable of performing image scaling in Bayer domain, the -downscale factor can be configured from 1X to 1/4X in each axis with -configuration steps of 0.03125 (1/32). - -**Geometric Distortion Correction** - -Geometric Distortion Correction is used to performe correction of distortions -and image filtering. It needs some extra filter and envelop padding pixels to -work, so the input resolution of GDC should be larger than the output -resolution. - -**YUV Scaler** - -YUV Scaler which similar with BDS, but it is mainly do image down scaling in -YUV domain, it can support up to 1/12X down scaling, but it can not be applied -to the main output. - -The ImgU V4L2 subdev has to be configured with the supported resolutions in all -the above hardware blocks, for a given input resolution. -For a given supported resolution for an input frame, the Input Feeder, Bayer -Down Scaler and GDC blocks should be configured with the supported resolutions -as each hardware block has its own alignment requirement. - -You must configure the output resolution of the hardware blocks smartly to meet -the hardware requirement along with keeping the maximum field of view. The -intermediate resolutions can be generated by specific tool - - -https://github.com/intel/intel-ipu3-pipecfg - -This tool can be used to generate intermediate resolutions. More information can -be obtained by looking at the following IPU3 ImgU configuration table. - -https://chromium.googlesource.com/chromiumos/overlays/board-overlays/+/master - -Under baseboard-poppy/media-libs/cros-camera-hal-configs-poppy/files/gcss -directory, graph_settings_ov5670.xml can be used as an example. - -The following steps prepare the ImgU pipeline for the image processing. - -1. The ImgU V4L2 subdev data format should be set by using the -VIDIOC_SUBDEV_S_FMT on pad 0, using the GDC width and height obtained above. - -2. The ImgU V4L2 subdev cropping should be set by using the -VIDIOC_SUBDEV_S_SELECTION on pad 0, with V4L2_SEL_TGT_CROP as the target, -using the input feeder height and width. - -3. The ImgU V4L2 subdev composing should be set by using the -VIDIOC_SUBDEV_S_SELECTION on pad 0, with V4L2_SEL_TGT_COMPOSE as the target, -using the BDS height and width. - -For the ov5670 example, for an input frame with a resolution of 2592x1944 -(which is input to the ImgU subdev pad 0), the corresponding resolutions -for input feeder, BDS and GDC are 2592x1944, 2592x1944 and 2560x1920 -respectively. - -Once this is done, the received raw Bayer frames can be input to the ImgU -V4L2 subdev as below, using the open source application v4l2n [#f1]_. - -For an image captured with 2592x1944 [#f4]_ resolution, with desired output -resolution as 2560x1920 and viewfinder resolution as 2560x1920, the following -v4l2n command can be used. This helps process the raw Bayer frames and produces -the desired results for the main output image and the viewfinder output, in NV12 -format. - -v4l2n --pipe=4 --load=/tmp/frame-#.bin --open=/dev/video4 ---fmt=type:VIDEO_OUTPUT_MPLANE,width=2592,height=1944,pixelformat=0X47337069 ---reqbufs=type:VIDEO_OUTPUT_MPLANE,count:1 --pipe=1 --output=/tmp/frames.out ---open=/dev/video5 ---fmt=type:VIDEO_CAPTURE_MPLANE,width=2560,height=1920,pixelformat=NV12 ---reqbufs=type:VIDEO_CAPTURE_MPLANE,count:1 --pipe=2 --output=/tmp/frames.vf ---open=/dev/video6 ---fmt=type:VIDEO_CAPTURE_MPLANE,width=2560,height=1920,pixelformat=NV12 ---reqbufs=type:VIDEO_CAPTURE_MPLANE,count:1 --pipe=3 --open=/dev/video7 ---output=/tmp/frames.3A --fmt=type:META_CAPTURE,? ---reqbufs=count:1,type:META_CAPTURE --pipe=1,2,3,4 --stream=5 - -where /dev/video4, /dev/video5, /dev/video6 and /dev/video7 devices point to -input, output, viewfinder and 3A statistics video nodes respectively. - -Converting the raw Bayer image into YUV domain ----------------------------------------------- - -The processed images after the above step, can be converted to YUV domain -as below. - -Main output frames -~~~~~~~~~~~~~~~~~~ - -raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.out /tmp/frames.out.ppm - -where 2560x1920 is output resolution, NV12 is the video format, followed -by input frame and output PNM file. - -Viewfinder output frames -~~~~~~~~~~~~~~~~~~~~~~~~ - -raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.vf /tmp/frames.vf.ppm - -where 2560x1920 is output resolution, NV12 is the video format, followed -by input frame and output PNM file. - -Example user space code for IPU3 -================================ - -User space code that configures and uses IPU3 is available here. - -https://chromium.googlesource.com/chromiumos/platform/arc-camera/+/master/ - -The source can be located under hal/intel directory. - -Overview of IPU3 pipeline -========================= - -IPU3 pipeline has a number of image processing stages, each of which takes a -set of parameters as input. The major stages of pipelines are shown here: - -.. kernel-render:: DOT - :alt: IPU3 ImgU Pipeline - :caption: IPU3 ImgU Pipeline Diagram - - digraph "IPU3 ImgU" { - node [shape=box] - splines="ortho" - rankdir="LR" - - a [label="Raw pixels"] - b [label="Bayer Downscaling"] - c [label="Optical Black Correction"] - d [label="Linearization"] - e [label="Lens Shading Correction"] - f [label="White Balance / Exposure / Focus Apply"] - g [label="Bayer Noise Reduction"] - h [label="ANR"] - i [label="Demosaicing"] - j [label="Color Correction Matrix"] - k [label="Gamma correction"] - l [label="Color Space Conversion"] - m [label="Chroma Down Scaling"] - n [label="Chromatic Noise Reduction"] - o [label="Total Color Correction"] - p [label="XNR3"] - q [label="TNR"] - r [label="DDR"] - - { rank=same; a -> b -> c -> d -> e -> f } - { rank=same; g -> h -> i -> j -> k -> l } - { rank=same; m -> n -> o -> p -> q -> r } - - a -> g -> m [style=invis, weight=10] - - f -> g - l -> m - } - -The table below presents a description of the above algorithms. - -======================== ======================================================= -Name Description -======================== ======================================================= -Optical Black Correction Optical Black Correction block subtracts a pre-defined - value from the respective pixel values to obtain better - image quality. - Defined in :c:type:`ipu3_uapi_obgrid_param`. -Linearization This algo block uses linearization parameters to - address non-linearity sensor effects. The Lookup table - table is defined in - :c:type:`ipu3_uapi_isp_lin_vmem_params`. -SHD Lens shading correction is used to correct spatial - non-uniformity of the pixel response due to optical - lens shading. This is done by applying a different gain - for each pixel. The gain, black level etc are - configured in :c:type:`ipu3_uapi_shd_config_static`. -BNR Bayer noise reduction block removes image noise by - applying a bilateral filter. - See :c:type:`ipu3_uapi_bnr_static_config` for details. -ANR Advanced Noise Reduction is a block based algorithm - that performs noise reduction in the Bayer domain. The - convolution matrix etc can be found in - :c:type:`ipu3_uapi_anr_config`. -DM Demosaicing converts raw sensor data in Bayer format - into RGB (Red, Green, Blue) presentation. Then add - outputs of estimation of Y channel for following stream - processing by Firmware. The struct is defined as - :c:type:`ipu3_uapi_dm_config`. -Color Correction Color Correction algo transforms sensor specific color - space to the standard "sRGB" color space. This is done - by applying 3x3 matrix defined in - :c:type:`ipu3_uapi_ccm_mat_config`. -Gamma correction Gamma correction :c:type:`ipu3_uapi_gamma_config` is a - basic non-linear tone mapping correction that is - applied per pixel for each pixel component. -CSC Color space conversion transforms each pixel from the - RGB primary presentation to YUV (Y: brightness, - UV: Luminance) presentation. This is done by applying - a 3x3 matrix defined in - :c:type:`ipu3_uapi_csc_mat_config` -CDS Chroma down sampling - After the CSC is performed, the Chroma Down Sampling - is applied for a UV plane down sampling by a factor - of 2 in each direction for YUV 4:2:0 using a 4x2 - configurable filter :c:type:`ipu3_uapi_cds_params`. -CHNR Chroma noise reduction - This block processes only the chrominance pixels and - performs noise reduction by cleaning the high - frequency noise. - See struct :c:type:`ipu3_uapi_yuvp1_chnr_config`. -TCC Total color correction as defined in struct - :c:type:`ipu3_uapi_yuvp2_tcc_static_config`. -XNR3 eXtreme Noise Reduction V3 is the third revision of - noise reduction algorithm used to improve image - quality. This removes the low frequency noise in the - captured image. Two related structs are being defined, - :c:type:`ipu3_uapi_isp_xnr3_params` for ISP data memory - and :c:type:`ipu3_uapi_isp_xnr3_vmem_params` for vector - memory. -TNR Temporal Noise Reduction block compares successive - frames in time to remove anomalies / noise in pixel - values. :c:type:`ipu3_uapi_isp_tnr3_vmem_params` and - :c:type:`ipu3_uapi_isp_tnr3_params` are defined for ISP - vector and data memory respectively. -======================== ======================================================= - -Other often encountered acronyms not listed in above table: - - ACC - Accelerator cluster - AWB_FR - Auto white balance filter response statistics - BDS - Bayer downscaler parameters - CCM - Color correction matrix coefficients - IEFd - Image enhancement filter directed - Obgrid - Optical black level compensation - OSYS - Output system configuration - ROI - Region of interest - YDS - Y down sampling - YTM - Y-tone mapping - -A few stages of the pipeline will be executed by firmware running on the ISP -processor, while many others will use a set of fixed hardware blocks also -called accelerator cluster (ACC) to crunch pixel data and produce statistics. - -ACC parameters of individual algorithms, as defined by -:c:type:`ipu3_uapi_acc_param`, can be chosen to be applied by the user -space through struct :c:type:`ipu3_uapi_flags` embedded in -:c:type:`ipu3_uapi_params` structure. For parameters that are configured as -not enabled by the user space, the corresponding structs are ignored by the -driver, in which case the existing configuration of the algorithm will be -preserved. - -References -========== - -.. [#f5] drivers/staging/media/ipu3/include/intel-ipu3.h - -.. [#f1] https://github.com/intel/nvt - -.. [#f2] http://git.ideasonboard.org/yavta.git - -.. [#f3] http://git.ideasonboard.org/?p=media-ctl.git;a=summary - -.. [#f4] ImgU limitation requires an additional 16x16 for all input resolutions diff --git a/Documentation/media/v4l-drivers/ipu3_rcb.svg b/Documentation/media/v4l-drivers/ipu3_rcb.svg deleted file mode 100644 index d878421b42a0..000000000000 --- a/Documentation/media/v4l-drivers/ipu3_rcb.svg +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Documentation/media/v4l-drivers/ivtv-cardlist.rst b/Documentation/media/v4l-drivers/ivtv-cardlist.rst deleted file mode 100644 index c34a9ebc9ac2..000000000000 --- a/Documentation/media/v4l-drivers/ivtv-cardlist.rst +++ /dev/null @@ -1,139 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -IVTV cards list -=============== - -.. tabularcolumns:: |p{1.4cm}|p{12.7cm}|p{3.4cm}| - -.. flat-table:: - :header-rows: 1 - :widths: 2 19 18 - :stub-columns: 0 - - * - Card number - - Card name - - PCI IDs - - * - 0 - - Hauppauge WinTV PVR-250 - - IVTV16 104d:813d - - * - 1 - - Hauppauge WinTV PVR-350 - - IVTV16 104d:813d - - * - 2 - - Hauppauge WinTV PVR-150 - - IVTV16 104d:813d - - * - 3 - - AVerMedia M179 - - IVTV15 1461:a3cf, IVTV15 1461:a3ce - - * - 4 - - Yuan MPG600, Kuroutoshikou ITVC16-STVLP - - IVTV16 12ab:fff3, IVTV16 12ab:ffff - - * - 5 - - YUAN MPG160, Kuroutoshikou ITVC15-STVLP, I/O Data GV-M2TV/PCI - - IVTV15 10fc:40a0 - - * - 6 - - Yuan PG600, Diamond PVR-550 - - IVTV16 ff92:0070, IVTV16 ffab:0600 - - * - 7 - - Adaptec VideOh! AVC-2410 - - IVTV16 9005:0093 - - * - 8 - - Adaptec VideOh! AVC-2010 - - IVTV16 9005:0092 - - * - 9 - - Nagase Transgear 5000TV - - IVTV16 1461:bfff - - * - 10 - - AOpen VA2000MAX-SNT6 - - IVTV16 0000:ff5f - - * - 11 - - Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP - - IVTV16 12ab:0600, IVTV16 fbab:0600, IVTV16 1154:0523 - - * - 12 - - I/O Data GV-MVP/RX, GV-MVP/RX2W (dual tuner) - - IVTV16 10fc:d01e, IVTV16 10fc:d038, IVTV16 10fc:d039 - - * - 13 - - I/O Data GV-MVP/RX2E - - IVTV16 10fc:d025 - - * - 14 - - GotView PCI DVD - - IVTV16 12ab:0600 - - * - 15 - - GotView PCI DVD2 Deluxe - - IVTV16 ffac:0600 - - * - 16 - - Yuan MPC622 - - IVTV16 ff01:d998 - - * - 17 - - Digital Cowboy DCT-MTVP1 - - IVTV16 1461:bfff - - * - 18 - - Yuan PG600-2, GotView PCI DVD Lite - - IVTV16 ffab:0600, IVTV16 ffad:0600 - - * - 19 - - Club3D ZAP-TV1x01 - - IVTV16 ffab:0600 - - * - 20 - - AVerTV MCE 116 Plus - - IVTV16 1461:c439 - - * - 21 - - ASUS Falcon2 - - IVTV16 1043:4b66, IVTV16 1043:462e, IVTV16 1043:4b2e - - * - 22 - - AVerMedia PVR-150 Plus / AVerTV M113 Partsnic (Daewoo) Tuner - - IVTV16 1461:c034, IVTV16 1461:c035 - - * - 23 - - AVerMedia EZMaker PCI Deluxe - - IVTV16 1461:c03f - - * - 24 - - AVerMedia M104 - - IVTV16 1461:c136 - - * - 25 - - Buffalo PC-MV5L/PCI - - IVTV16 1154:052b - - * - 26 - - AVerMedia UltraTV 1500 MCE / AVerTV M113 Philips Tuner - - IVTV16 1461:c019, IVTV16 1461:c01b - - * - 27 - - Sony VAIO Giga Pocket (ENX Kikyou) - - IVTV16 104d:813d - - * - 28 - - Hauppauge WinTV PVR-350 (V1) - - IVTV16 104d:813d - - * - 29 - - Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR) - - IVTV16 104d:813d - - * - 30 - - Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR/YCS) - - IVTV16 104d:813d diff --git a/Documentation/media/v4l-drivers/ivtv.rst b/Documentation/media/v4l-drivers/ivtv.rst deleted file mode 100644 index 7b8775d20214..000000000000 --- a/Documentation/media/v4l-drivers/ivtv.rst +++ /dev/null @@ -1,218 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The ivtv driver -=============== - -Author: Hans Verkuil - -This is a v4l2 device driver for the Conexant cx23415/6 MPEG encoder/decoder. -The cx23415 can do both encoding and decoding, the cx23416 can only do MPEG -encoding. Currently the only card featuring full decoding support is the -Hauppauge PVR-350. - -.. note:: - - #) This driver requires the latest encoder firmware (version 2.06.039, size - 376836 bytes). Get the firmware from here: - - https://linuxtv.org/downloads/firmware/#conexant - - #) 'normal' TV applications do not work with this driver, you need - an application that can handle MPEG input such as mplayer, xine, MythTV, - etc. - -The primary goal of the IVTV project is to provide a "clean room" Linux -Open Source driver implementation for video capture cards based on the -iCompression iTVC15 or Conexant CX23415/CX23416 MPEG Codec. - -Features --------- - - * Hardware mpeg2 capture of broadcast video (and sound) via the tuner or - S-Video/Composite and audio line-in. - * Hardware mpeg2 capture of FM radio where hardware support exists - * Supports NTSC, PAL, SECAM with stereo sound - * Supports SAP and bilingual transmissions. - * Supports raw VBI (closed captions and teletext). - * Supports sliced VBI (closed captions and teletext) and is able to insert - this into the captured MPEG stream. - * Supports raw YUV and PCM input. - -Additional features for the PVR-350 (CX23415 based) ---------------------------------------------------- - - * Provides hardware mpeg2 playback - * Provides comprehensive OSD (On Screen Display: ie. graphics overlaying the - video signal) - * Provides a framebuffer (allowing X applications to appear on the video - device) - * Supports raw YUV output. - -IMPORTANT: In case of problems first read this page: - https://help.ubuntu.com/community/Install_IVTV_Troubleshooting - -See also --------- - -https://linuxtv.org - -IRC ---- - -irc://irc.freenode.net/#v4l - ----------------------------------------------------------- - -Devices -------- - -A maximum of 12 ivtv boards are allowed at the moment. - -Cards that don't have a video output capability (i.e. non PVR350 cards) -lack the vbi8, vbi16, video16 and video48 devices. They also do not -support the framebuffer device /dev/fbx for OSD. - -The radio0 device may or may not be present, depending on whether the -card has a radio tuner or not. - -Here is a list of the base v4l devices: - -.. code-block:: none - - crw-rw---- 1 root video 81, 0 Jun 19 22:22 /dev/video0 - crw-rw---- 1 root video 81, 16 Jun 19 22:22 /dev/video16 - crw-rw---- 1 root video 81, 24 Jun 19 22:22 /dev/video24 - crw-rw---- 1 root video 81, 32 Jun 19 22:22 /dev/video32 - crw-rw---- 1 root video 81, 48 Jun 19 22:22 /dev/video48 - crw-rw---- 1 root video 81, 64 Jun 19 22:22 /dev/radio0 - crw-rw---- 1 root video 81, 224 Jun 19 22:22 /dev/vbi0 - crw-rw---- 1 root video 81, 228 Jun 19 22:22 /dev/vbi8 - crw-rw---- 1 root video 81, 232 Jun 19 22:22 /dev/vbi16 - -Base devices ------------- - -For every extra card you have the numbers increased by one. For example, -/dev/video0 is listed as the 'base' encoding capture device so we have: - -- /dev/video0 is the encoding capture device for the first card (card 0) -- /dev/video1 is the encoding capture device for the second card (card 1) -- /dev/video2 is the encoding capture device for the third card (card 2) - -Note that if the first card doesn't have a feature (eg no decoder, so no -video16, the second card will still use video17. The simple rule is 'add -the card number to the base device number'. If you have other capture -cards (e.g. WinTV PCI) that are detected first, then you have to tell -the ivtv module about it so that it will start counting at 1 (or 2, or -whatever). Otherwise the device numbers can get confusing. The ivtv -'ivtv_first_minor' module option can be used for that. - - -- /dev/video0 - - The encoding capture device(s). - - Read-only. - - Reading from this device gets you the MPEG1/2 program stream. - Example: - - .. code-block:: none - - cat /dev/video0 > my.mpg (you need to hit ctrl-c to exit) - - -- /dev/video16 - - The decoder output device(s) - - Write-only. Only present if the MPEG decoder (i.e. CX23415) exists. - - An mpeg2 stream sent to this device will appear on the selected video - display, audio will appear on the line-out/audio out. It is only - available for cards that support video out. Example: - - .. code-block:: none - - cat my.mpg >/dev/video16 - - -- /dev/video24 - - The raw audio capture device(s). - - Read-only - - The raw audio PCM stereo stream from the currently selected - tuner or audio line-in. Reading from this device results in a raw - (signed 16 bit Little Endian, 48000 Hz, stereo pcm) capture. - This device only captures audio. This should be replaced by an ALSA - device in the future. - Note that there is no corresponding raw audio output device, this is - not supported in the decoder firmware. - - -- /dev/video32 - - The raw video capture device(s) - - Read-only - - The raw YUV video output from the current video input. The YUV format - is non-standard (V4L2_PIX_FMT_HM12). - - Note that the YUV and PCM streams are not synchronized, so they are of - limited use. - - -- /dev/video48 - - The raw video display device(s) - - Write-only. Only present if the MPEG decoder (i.e. CX23415) exists. - - Writes a YUV stream to the decoder of the card. - - -- /dev/radio0 - - The radio tuner device(s) - - Cannot be read or written. - - Used to enable the radio tuner and tune to a frequency. You cannot - read or write audio streams with this device. Once you use this - device to tune the radio, use /dev/video24 to read the raw pcm stream - or /dev/video0 to get an mpeg2 stream with black video. - - -- /dev/vbi0 - - The 'vertical blank interval' (Teletext, CC, WSS etc) capture device(s) - - Read-only - - Captures the raw (or sliced) video data sent during the Vertical Blank - Interval. This data is used to encode teletext, closed captions, VPS, - widescreen signalling, electronic program guide information, and other - services. - - -- /dev/vbi8 - - Processed vbi feedback device(s) - - Read-only. Only present if the MPEG decoder (i.e. CX23415) exists. - - The sliced VBI data embedded in an MPEG stream is reproduced on this - device. So while playing back a recording on /dev/video16, you can - read the embedded VBI data from /dev/vbi8. - - -- /dev/vbi16 - - The vbi 'display' device(s) - - Write-only. Only present if the MPEG decoder (i.e. CX23415) exists. - - Can be used to send sliced VBI data to the video-out connector. diff --git a/Documentation/media/v4l-drivers/meye.rst b/Documentation/media/v4l-drivers/meye.rst deleted file mode 100644 index 9098a1e65f8b..000000000000 --- a/Documentation/media/v4l-drivers/meye.rst +++ /dev/null @@ -1,93 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -.. include:: - -Vaio Picturebook Motion Eye Camera Driver -========================================= - -Copyright |copy| 2001-2004 Stelian Pop - -Copyright |copy| 2001-2002 Alcôve - -Copyright |copy| 2000 Andrew Tridgell - -This driver enable the use of video4linux compatible applications with the -Motion Eye camera. This driver requires the "Sony Laptop Extras" driver (which -can be found in the "Misc devices" section of the kernel configuration utility) -to be compiled and installed (using its "camera=1" parameter). - -It can do at maximum 30 fps @ 320x240 or 15 fps @ 640x480. - -Grabbing is supported in packed YUV colorspace only. - -MJPEG hardware grabbing is supported via a private API (see below). - -Hardware supported ------------------- - -This driver supports the 'second' version of the MotionEye camera :) - -The first version was connected directly on the video bus of the Neomagic -video card and is unsupported. - -The second one, made by Kawasaki Steel is fully supported by this -driver (PCI vendor/device is 0x136b/0xff01) - -The third one, present in recent (more or less last year) Picturebooks -(C1M* models), is not supported. The manufacturer has given the specs -to the developers under a NDA (which allows the development of a GPL -driver however), but things are not moving very fast (see -http://r-engine.sourceforge.net/) (PCI vendor/device is 0x10cf/0x2011). - -There is a forth model connected on the USB bus in TR1* Vaio laptops. -This camera is not supported at all by the current driver, in fact -little information if any is available for this camera -(USB vendor/device is 0x054c/0x0107). - -Driver options --------------- - -Several options can be passed to the meye driver using the standard -module argument syntax (= when passing the option to the -module or meye.= on the kernel boot line when meye is -statically linked into the kernel). Those options are: - -.. code-block:: none - - gbuffers: number of capture buffers, default is 2 (32 max) - - gbufsize: size of each capture buffer, default is 614400 - - video_nr: video device to register (0 = /dev/video0, etc) - -Module use ----------- - -In order to automatically load the meye module on use, you can put those lines -in your /etc/modprobe.d/meye.conf file: - -.. code-block:: none - - alias char-major-81 videodev - alias char-major-81-0 meye - options meye gbuffers=32 - -Usage: ------- - -.. code-block:: none - - xawtv >= 3.49 () - for display and uncompressed video capture: - - xawtv -c /dev/video0 -geometry 640x480 - or - xawtv -c /dev/video0 -geometry 320x240 - - motioneye () - for getting ppm or jpg snapshots, mjpeg video - -Bugs / Todo ------------ - -- 'motioneye' still uses the meye private v4l1 API extensions. diff --git a/Documentation/media/v4l-drivers/omap3isp.rst b/Documentation/media/v4l-drivers/omap3isp.rst deleted file mode 100644 index bc447bbec7ce..000000000000 --- a/Documentation/media/v4l-drivers/omap3isp.rst +++ /dev/null @@ -1,92 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -.. include:: - -OMAP 3 Image Signal Processor (ISP) driver -========================================== - -Copyright |copy| 2010 Nokia Corporation - -Copyright |copy| 2009 Texas Instruments, Inc. - -Contacts: Laurent Pinchart , -Sakari Ailus , David Cohen - - -Introduction ------------- - -This file documents the Texas Instruments OMAP 3 Image Signal Processor (ISP) -driver located under drivers/media/platform/omap3isp. The original driver was -written by Texas Instruments but since that it has been rewritten (twice) at -Nokia. - -The driver has been successfully used on the following versions of OMAP 3: - -- 3430 -- 3530 -- 3630 - -The driver implements V4L2, Media controller and v4l2_subdev interfaces. -Sensor, lens and flash drivers using the v4l2_subdev interface in the kernel -are supported. - - -Split to subdevs ----------------- - -The OMAP 3 ISP is split into V4L2 subdevs, each of the blocks inside the ISP -having one subdev to represent it. Each of the subdevs provide a V4L2 subdev -interface to userspace. - -- OMAP3 ISP CCP2 -- OMAP3 ISP CSI2a -- OMAP3 ISP CCDC -- OMAP3 ISP preview -- OMAP3 ISP resizer -- OMAP3 ISP AEWB -- OMAP3 ISP AF -- OMAP3 ISP histogram - -Each possible link in the ISP is modelled by a link in the Media controller -interface. For an example program see [#]_. - - -Controlling the OMAP 3 ISP --------------------------- - -In general, the settings given to the OMAP 3 ISP take effect at the beginning -of the following frame. This is done when the module becomes idle during the -vertical blanking period on the sensor. In memory-to-memory operation the pipe -is run one frame at a time. Applying the settings is done between the frames. - -All the blocks in the ISP, excluding the CSI-2 and possibly the CCP2 receiver, -insist on receiving complete frames. Sensors must thus never send the ISP -partial frames. - -Autoidle does have issues with some ISP blocks on the 3430, at least. -Autoidle is only enabled on 3630 when the omap3isp module parameter autoidle -is non-zero. - -Technical reference manuals (TRMs) and other documentation ----------------------------------------------------------- - -OMAP 3430 TRM: - -Referenced 2011-03-05. - -OMAP 35xx TRM: - Referenced 2011-03-05. - -OMAP 3630 TRM: - -Referenced 2011-03-05. - -DM 3730 TRM: - Referenced 2011-03-06. - - -References ----------- - -.. [#] http://git.ideasonboard.org/?p=media-ctl.git;a=summary diff --git a/Documentation/media/v4l-drivers/omap4_camera.rst b/Documentation/media/v4l-drivers/omap4_camera.rst deleted file mode 100644 index 24db4222d36d..000000000000 --- a/Documentation/media/v4l-drivers/omap4_camera.rst +++ /dev/null @@ -1,62 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -OMAP4 ISS Driver -================ - -Author: Sergio Aguirre - -Copyright (C) 2012, Texas Instruments - -Introduction ------------- - -The OMAP44XX family of chips contains the Imaging SubSystem (a.k.a. ISS), -Which contains several components that can be categorized in 3 big groups: - -- Interfaces (2 Interfaces: CSI2-A & CSI2-B/CCP2) -- ISP (Image Signal Processor) -- SIMCOP (Still Image Coprocessor) - -For more information, please look in [#f1]_ for latest version of: -"OMAP4430 Multimedia Device Silicon Revision 2.x" - -As of Revision AB, the ISS is described in detail in section 8. - -This driver is supporting **only** the CSI2-A/B interfaces for now. - -It makes use of the Media Controller framework [#f2]_, and inherited most of the -code from OMAP3 ISP driver (found under drivers/media/platform/omap3isp/\*), -except that it doesn't need an IOMMU now for ISS buffers memory mapping. - -Supports usage of MMAP buffers only (for now). - -Tested platforms ----------------- - -- OMAP4430SDP, w/ ES2.1 GP & SEVM4430-CAM-V1-0 (Contains IMX060 & OV5640, in - which only the last one is supported, outputting YUV422 frames). - -- TI Blaze MDP, w/ OMAP4430 ES2.2 EMU (Contains 1 IMX060 & 2 OV5650 sensors, in - which only the OV5650 are supported, outputting RAW10 frames). - -- PandaBoard, Rev. A2, w/ OMAP4430 ES2.1 GP & OV adapter board, tested with - following sensors: - * OV5640 - * OV5650 - -- Tested on mainline kernel: - - http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=summary - - Tag: v3.3 (commit c16fa4f2ad19908a47c63d8fa436a1178438c7e7) - -File list ---------- -drivers/staging/media/omap4iss/ -include/linux/platform_data/media/omap4iss.h - -References ----------- - -.. [#f1] http://focus.ti.com/general/docs/wtbu/wtbudocumentcenter.tsp?navigationId=12037&templateId=6123#62 -.. [#f2] http://lwn.net/Articles/420485/ diff --git a/Documentation/media/v4l-drivers/philips.rst b/Documentation/media/v4l-drivers/philips.rst deleted file mode 100644 index e2840be10d08..000000000000 --- a/Documentation/media/v4l-drivers/philips.rst +++ /dev/null @@ -1,247 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Philips webcams (pwc driver) -============================ - -This file contains some additional information for the Philips and OEM webcams. -E-mail: webcam@smcc.demon.nl Last updated: 2004-01-19 -Site: http://www.smcc.demon.nl/webcam/ - -As of this moment, the following cameras are supported: - - * Philips PCA645 - * Philips PCA646 - * Philips PCVC675 - * Philips PCVC680 - * Philips PCVC690 - * Philips PCVC720/40 - * Philips PCVC730 - * Philips PCVC740 - * Philips PCVC750 - * Askey VC010 - * Creative Labs Webcam 5 - * Creative Labs Webcam Pro Ex - * Logitech QuickCam 3000 Pro - * Logitech QuickCam 4000 Pro - * Logitech QuickCam Notebook Pro - * Logitech QuickCam Zoom - * Logitech QuickCam Orbit - * Logitech QuickCam Sphere - * Samsung MPC-C10 - * Samsung MPC-C30 - * Sotec Afina Eye - * AME CU-001 - * Visionite VCS-UM100 - * Visionite VCS-UC300 - -The main webpage for the Philips driver is at the address above. It contains -a lot of extra information, a FAQ, and the binary plugin 'PWCX'. This plugin -contains decompression routines that allow you to use higher image sizes and -framerates; in addition the webcam uses less bandwidth on the USB bus (handy -if you want to run more than 1 camera simultaneously). These routines fall -under a NDA, and may therefore not be distributed as source; however, its use -is completely optional. - -You can build this code either into your kernel, or as a module. I recommend -the latter, since it makes troubleshooting a lot easier. The built-in -microphone is supported through the USB Audio class. - -When you load the module you can set some default settings for the -camera; some programs depend on a particular image-size or -format and -don't know how to set it properly in the driver. The options are: - -size - Can be one of 'sqcif', 'qsif', 'qcif', 'sif', 'cif' or - 'vga', for an image size of resp. 128x96, 160x120, 176x144, - 320x240, 352x288 and 640x480 (of course, only for those cameras that - support these resolutions). - -fps - Specifies the desired framerate. Is an integer in the range of 4-30. - -fbufs - This parameter specifies the number of internal buffers to use for storing - frames from the cam. This will help if the process that reads images from - the cam is a bit slow or momentarily busy. However, on slow machines it - only introduces lag, so choose carefully. The default is 3, which is - reasonable. You can set it between 2 and 5. - -mbufs - This is an integer between 1 and 10. It will tell the module the number of - buffers to reserve for mmap(), VIDIOCCGMBUF, VIDIOCMCAPTURE and friends. - The default is 2, which is adequate for most applications (double - buffering). - - Should you experience a lot of 'Dumping frame...' messages during - grabbing with a tool that uses mmap(), you might want to increase if. - However, it doesn't really buffer images, it just gives you a bit more - slack when your program is behind. But you need a multi-threaded or - forked program to really take advantage of these buffers. - - The absolute maximum is 10, but don't set it too high! Every buffer takes - up 460 KB of RAM, so unless you have a lot of memory setting this to - something more than 4 is an absolute waste. This memory is only - allocated during open(), so nothing is wasted when the camera is not in - use. - -power_save - When power_save is enabled (set to 1), the module will try to shut down - the cam on close() and re-activate on open(). This will save power and - turn off the LED. Not all cameras support this though (the 645 and 646 - don't have power saving at all), and some models don't work either (they - will shut down, but never wake up). Consider this experimental. By - default this option is disabled. - -compression (only useful with the plugin) - With this option you can control the compression factor that the camera - uses to squeeze the image through the USB bus. You can set the - parameter between 0 and 3:: - - 0 = prefer uncompressed images; if the requested mode is not available - in an uncompressed format, the driver will silently switch to low - compression. - 1 = low compression. - 2 = medium compression. - 3 = high compression. - - High compression takes less bandwidth of course, but it could also - introduce some unwanted artefacts. The default is 2, medium compression. - See the FAQ on the website for an overview of which modes require - compression. - - The compression parameter does not apply to the 645 and 646 cameras - and OEM models derived from those (only a few). Most cams honour this - parameter. - -leds - This settings takes 2 integers, that define the on/off time for the LED - (in milliseconds). One of the interesting things that you can do with - this is let the LED blink while the camera is in use. This:: - - leds=500,500 - - will blink the LED once every second. But with:: - - leds=0,0 - - the LED never goes on, making it suitable for silent surveillance. - - By default the camera's LED is on solid while in use, and turned off - when the camera is not used anymore. - - This parameter works only with the ToUCam range of cameras (720, 730, 740, - 750) and OEMs. For other cameras this command is silently ignored, and - the LED cannot be controlled. - - Finally: this parameters does not take effect UNTIL the first time you - open the camera device. Until then, the LED remains on. - -dev_hint - A long standing problem with USB devices is their dynamic nature: you - never know what device a camera gets assigned; it depends on module load - order, the hub configuration, the order in which devices are plugged in, - and the phase of the moon (i.e. it can be random). With this option you - can give the driver a hint as to what video device node (/dev/videoX) it - should use with a specific camera. This is also handy if you have two - cameras of the same model. - - A camera is specified by its type (the number from the camera model, - like PCA645, PCVC750VC, etc) and optionally the serial number (visible - in /sys/kernel/debug/usb/devices). A hint consists of a string with the - following format:: - - [type[.serialnumber]:]node - - The square brackets mean that both the type and the serialnumber are - optional, but a serialnumber cannot be specified without a type (which - would be rather pointless). The serialnumber is separated from the type - by a '.'; the node number by a ':'. - - This somewhat cryptic syntax is best explained by a few examples:: - - dev_hint=3,5 The first detected cam gets assigned - /dev/video3, the second /dev/video5. Any - other cameras will get the first free - available slot (see below). - - dev_hint=645:1,680:2 The PCA645 camera will get /dev/video1, - and a PCVC680 /dev/video2. - - dev_hint=645.0123:3,645.4567:0 The PCA645 camera with serialnumber - 0123 goes to /dev/video3, the same - camera model with the 4567 serial - gets /dev/video0. - - dev_hint=750:1,4,5,6 The PCVC750 camera will get /dev/video1, the - next 3 Philips cams will use /dev/video4 - through /dev/video6. - - Some points worth knowing: - - - Serialnumbers are case sensitive and must be written full, including - leading zeroes (it's treated as a string). - - If a device node is already occupied, registration will fail and - the webcam is not available. - - You can have up to 64 video devices; be sure to make enough device - nodes in /dev if you want to spread the numbers. - After /dev/video9 comes /dev/video10 (not /dev/videoA). - - If a camera does not match any dev_hint, it will simply get assigned - the first available device node, just as it used to be. - -trace - In order to better detect problems, it is now possible to turn on a - 'trace' of some of the calls the module makes; it logs all items in your - kernel log at debug level. - - The trace variable is a bitmask; each bit represents a certain feature. - If you want to trace something, look up the bit value(s) in the table - below, add the values together and supply that to the trace variable. - - ====== ======= ================================================ ======= - Value Value Description Default - (dec) (hex) - ====== ======= ================================================ ======= - 1 0x1 Module initialization; this will log messages On - while loading and unloading the module - - 2 0x2 probe() and disconnect() traces On - - 4 0x4 Trace open() and close() calls Off - - 8 0x8 read(), mmap() and associated ioctl() calls Off - - 16 0x10 Memory allocation of buffers, etc. Off - - 32 0x20 Showing underflow, overflow and Dumping frame On - messages - - 64 0x40 Show viewport and image sizes Off - - 128 0x80 PWCX debugging Off - ====== ======= ================================================ ======= - - For example, to trace the open() & read() functions, sum 8 + 4 = 12, - so you would supply trace=12 during insmod or modprobe. If - you want to turn the initialization and probing tracing off, set trace=0. - The default value for trace is 35 (0x23). - - - -Example:: - - # modprobe pwc size=cif fps=15 power_save=1 - -The fbufs, mbufs and trace parameters are global and apply to all connected -cameras. Each camera has its own set of buffers. - -size and fps only specify defaults when you open() the device; this is to -accommodate some tools that don't set the size. You can change these -settings after open() with the Video4Linux ioctl() calls. The default of -defaults is QCIF size at 10 fps. - -The compression parameter is semiglobal; it sets the initial compression -preference for all camera's, but this parameter can be set per camera with -the VIDIOCPWCSCQUAL ioctl() call. - -All parameters are optional. - diff --git a/Documentation/media/v4l-drivers/qcom_camss.rst b/Documentation/media/v4l-drivers/qcom_camss.rst deleted file mode 100644 index a72e17d09cb7..000000000000 --- a/Documentation/media/v4l-drivers/qcom_camss.rst +++ /dev/null @@ -1,185 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -.. include:: - -Qualcomm Camera Subsystem driver -================================ - -Introduction ------------- - -This file documents the Qualcomm Camera Subsystem driver located under -drivers/media/platform/qcom/camss. - -The current version of the driver supports the Camera Subsystem found on -Qualcomm MSM8916/APQ8016 and MSM8996/APQ8096 processors. - -The driver implements V4L2, Media controller and V4L2 subdev interfaces. -Camera sensor using V4L2 subdev interface in the kernel is supported. - -The driver is implemented using as a reference the Qualcomm Camera Subsystem -driver for Android as found in Code Aurora [#f1]_ [#f2]_. - - -Qualcomm Camera Subsystem hardware ----------------------------------- - -The Camera Subsystem hardware found on 8x16 / 8x96 processors and supported by -the driver consists of: - -- 2 / 3 CSIPHY modules. They handle the Physical layer of the CSI2 receivers. - A separate camera sensor can be connected to each of the CSIPHY module; -- 2 / 4 CSID (CSI Decoder) modules. They handle the Protocol and Application - layer of the CSI2 receivers. A CSID can decode data stream from any of the - CSIPHY. Each CSID also contains a TG (Test Generator) block which can generate - artificial input data for test purposes; -- ISPIF (ISP Interface) module. Handles the routing of the data streams from - the CSIDs to the inputs of the VFE; -- 1 / 2 VFE (Video Front End) module(s). Contain a pipeline of image processing - hardware blocks. The VFE has different input interfaces. The PIX (Pixel) input - interface feeds the input data to the image processing pipeline. The image - processing pipeline contains also a scale and crop module at the end. Three - RDI (Raw Dump Interface) input interfaces bypass the image processing - pipeline. The VFE also contains the AXI bus interface which writes the output - data to memory. - - -Supported functionality ------------------------ - -The current version of the driver supports: - -- Input from camera sensor via CSIPHY; -- Generation of test input data by the TG in CSID; -- RDI interface of VFE - - - Raw dump of the input data to memory. - - Supported formats: - - - YUYV/UYVY/YVYU/VYUY (packed YUV 4:2:2 - V4L2_PIX_FMT_YUYV / - V4L2_PIX_FMT_UYVY / V4L2_PIX_FMT_YVYU / V4L2_PIX_FMT_VYUY); - - MIPI RAW8 (8bit Bayer RAW - V4L2_PIX_FMT_SRGGB8 / - V4L2_PIX_FMT_SGRBG8 / V4L2_PIX_FMT_SGBRG8 / V4L2_PIX_FMT_SBGGR8); - - MIPI RAW10 (10bit packed Bayer RAW - V4L2_PIX_FMT_SBGGR10P / - V4L2_PIX_FMT_SGBRG10P / V4L2_PIX_FMT_SGRBG10P / V4L2_PIX_FMT_SRGGB10P / - V4L2_PIX_FMT_Y10P); - - MIPI RAW12 (12bit packed Bayer RAW - V4L2_PIX_FMT_SRGGB12P / - V4L2_PIX_FMT_SGBRG12P / V4L2_PIX_FMT_SGRBG12P / V4L2_PIX_FMT_SRGGB12P). - - (8x96 only) MIPI RAW14 (14bit packed Bayer RAW - V4L2_PIX_FMT_SRGGB14P / - V4L2_PIX_FMT_SGBRG14P / V4L2_PIX_FMT_SGRBG14P / V4L2_PIX_FMT_SRGGB14P). - - - (8x96 only) Format conversion of the input data. - - Supported input formats: - - - MIPI RAW10 (10bit packed Bayer RAW - V4L2_PIX_FMT_SBGGR10P / V4L2_PIX_FMT_Y10P). - - Supported output formats: - - - Plain16 RAW10 (10bit unpacked Bayer RAW - V4L2_PIX_FMT_SBGGR10 / V4L2_PIX_FMT_Y10). - -- PIX interface of VFE - - - Format conversion of the input data. - - Supported input formats: - - - YUYV/UYVY/YVYU/VYUY (packed YUV 4:2:2 - V4L2_PIX_FMT_YUYV / - V4L2_PIX_FMT_UYVY / V4L2_PIX_FMT_YVYU / V4L2_PIX_FMT_VYUY). - - Supported output formats: - - - NV12/NV21 (two plane YUV 4:2:0 - V4L2_PIX_FMT_NV12 / V4L2_PIX_FMT_NV21); - - NV16/NV61 (two plane YUV 4:2:2 - V4L2_PIX_FMT_NV16 / V4L2_PIX_FMT_NV61). - - (8x96 only) YUYV/UYVY/YVYU/VYUY (packed YUV 4:2:2 - V4L2_PIX_FMT_YUYV / - V4L2_PIX_FMT_UYVY / V4L2_PIX_FMT_YVYU / V4L2_PIX_FMT_VYUY). - - - Scaling support. Configuration of the VFE Encoder Scale module - for downscalling with ratio up to 16x. - - - Cropping support. Configuration of the VFE Encoder Crop module. - -- Concurrent and independent usage of two (8x96: three) data inputs - - could be camera sensors and/or TG. - - -Driver Architecture and Design ------------------------------- - -The driver implements the V4L2 subdev interface. With the goal to model the -hardware links between the modules and to expose a clean, logical and usable -interface, the driver is split into V4L2 sub-devices as follows (8x16 / 8x96): - -- 2 / 3 CSIPHY sub-devices - each CSIPHY is represented by a single sub-device; -- 2 / 4 CSID sub-devices - each CSID is represented by a single sub-device; -- 2 / 4 ISPIF sub-devices - ISPIF is represented by a number of sub-devices - equal to the number of CSID sub-devices; -- 4 / 8 VFE sub-devices - VFE is represented by a number of sub-devices equal to - the number of the input interfaces (3 RDI and 1 PIX for each VFE). - -The considerations to split the driver in this particular way are as follows: - -- representing CSIPHY and CSID modules by a separate sub-device for each module - allows to model the hardware links between these modules; -- representing VFE by a separate sub-devices for each input interface allows - to use the input interfaces concurrently and independently as this is - supported by the hardware; -- representing ISPIF by a number of sub-devices equal to the number of CSID - sub-devices allows to create linear media controller pipelines when using two - cameras simultaneously. This avoids branches in the pipelines which otherwise - will require a) userspace and b) media framework (e.g. power on/off - operations) to make assumptions about the data flow from a sink pad to a - source pad on a single media entity. - -Each VFE sub-device is linked to a separate video device node. - -The media controller pipeline graph is as follows (with connected two / three -OV5645 camera sensors): - -.. _qcom_camss_graph: - -.. kernel-figure:: qcom_camss_graph.dot - :alt: qcom_camss_graph.dot - :align: center - - Media pipeline graph 8x16 - -.. kernel-figure:: qcom_camss_8x96_graph.dot - :alt: qcom_camss_8x96_graph.dot - :align: center - - Media pipeline graph 8x96 - - -Implementation --------------- - -Runtime configuration of the hardware (updating settings while streaming) is -not required to implement the currently supported functionality. The complete -configuration on each hardware module is applied on STREAMON ioctl based on -the current active media links, formats and controls set. - -The output size of the scaler module in the VFE is configured with the actual -compose selection rectangle on the sink pad of the 'msm_vfe0_pix' entity. - -The crop output area of the crop module in the VFE is configured with the actual -crop selection rectangle on the source pad of the 'msm_vfe0_pix' entity. - - -Documentation -------------- - -APQ8016 Specification: -https://developer.qualcomm.com/download/sd410/snapdragon-410-processor-device-specification.pdf -Referenced 2016-11-24. - -APQ8096 Specification: -https://developer.qualcomm.com/download/sd820e/qualcomm-snapdragon-820e-processor-apq8096sge-device-specification.pdf -Referenced 2018-06-22. - -References ----------- - -.. [#f1] https://source.codeaurora.org/quic/la/kernel/msm-3.10/ -.. [#f2] https://source.codeaurora.org/quic/la/kernel/msm-3.18/ diff --git a/Documentation/media/v4l-drivers/qcom_camss_8x96_graph.dot b/Documentation/media/v4l-drivers/qcom_camss_8x96_graph.dot deleted file mode 100644 index 7ed243b41b67..000000000000 --- a/Documentation/media/v4l-drivers/qcom_camss_8x96_graph.dot +++ /dev/null @@ -1,106 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 - -digraph board { - rankdir=TB - n00000001 [label="{{ 0} | msm_csiphy0\n/dev/v4l-subdev0 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000001:port1 -> n0000000a:port0 [style=dashed] - n00000001:port1 -> n0000000d:port0 [style=dashed] - n00000001:port1 -> n00000010:port0 [style=dashed] - n00000001:port1 -> n00000013:port0 [style=dashed] - n00000004 [label="{{ 0} | msm_csiphy1\n/dev/v4l-subdev1 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000004:port1 -> n0000000a:port0 [style=dashed] - n00000004:port1 -> n0000000d:port0 [style=dashed] - n00000004:port1 -> n00000010:port0 [style=dashed] - n00000004:port1 -> n00000013:port0 [style=dashed] - n00000007 [label="{{ 0} | msm_csiphy2\n/dev/v4l-subdev2 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000007:port1 -> n0000000a:port0 [style=dashed] - n00000007:port1 -> n0000000d:port0 [style=dashed] - n00000007:port1 -> n00000010:port0 [style=dashed] - n00000007:port1 -> n00000013:port0 [style=dashed] - n0000000a [label="{{ 0} | msm_csid0\n/dev/v4l-subdev3 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0000000a:port1 -> n00000016:port0 [style=dashed] - n0000000a:port1 -> n00000019:port0 [style=dashed] - n0000000a:port1 -> n0000001c:port0 [style=dashed] - n0000000a:port1 -> n0000001f:port0 [style=dashed] - n0000000d [label="{{ 0} | msm_csid1\n/dev/v4l-subdev4 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0000000d:port1 -> n00000016:port0 [style=dashed] - n0000000d:port1 -> n00000019:port0 [style=dashed] - n0000000d:port1 -> n0000001c:port0 [style=dashed] - n0000000d:port1 -> n0000001f:port0 [style=dashed] - n00000010 [label="{{ 0} | msm_csid2\n/dev/v4l-subdev5 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000010:port1 -> n00000016:port0 [style=dashed] - n00000010:port1 -> n00000019:port0 [style=dashed] - n00000010:port1 -> n0000001c:port0 [style=dashed] - n00000010:port1 -> n0000001f:port0 [style=dashed] - n00000013 [label="{{ 0} | msm_csid3\n/dev/v4l-subdev6 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000013:port1 -> n00000016:port0 [style=dashed] - n00000013:port1 -> n00000019:port0 [style=dashed] - n00000013:port1 -> n0000001c:port0 [style=dashed] - n00000013:port1 -> n0000001f:port0 [style=dashed] - n00000016 [label="{{ 0} | msm_ispif0\n/dev/v4l-subdev7 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000016:port1 -> n00000022:port0 [style=dashed] - n00000016:port1 -> n0000002b:port0 [style=dashed] - n00000016:port1 -> n00000034:port0 [style=dashed] - n00000016:port1 -> n0000003d:port0 [style=dashed] - n00000016:port1 -> n00000046:port0 [style=dashed] - n00000016:port1 -> n0000004f:port0 [style=dashed] - n00000016:port1 -> n00000058:port0 [style=dashed] - n00000016:port1 -> n00000061:port0 [style=dashed] - n00000019 [label="{{ 0} | msm_ispif1\n/dev/v4l-subdev8 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000019:port1 -> n00000022:port0 [style=dashed] - n00000019:port1 -> n0000002b:port0 [style=dashed] - n00000019:port1 -> n00000034:port0 [style=dashed] - n00000019:port1 -> n0000003d:port0 [style=dashed] - n00000019:port1 -> n00000046:port0 [style=dashed] - n00000019:port1 -> n0000004f:port0 [style=dashed] - n00000019:port1 -> n00000058:port0 [style=dashed] - n00000019:port1 -> n00000061:port0 [style=dashed] - n0000001c [label="{{ 0} | msm_ispif2\n/dev/v4l-subdev9 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0000001c:port1 -> n00000022:port0 [style=dashed] - n0000001c:port1 -> n0000002b:port0 [style=dashed] - n0000001c:port1 -> n00000034:port0 [style=dashed] - n0000001c:port1 -> n0000003d:port0 [style=dashed] - n0000001c:port1 -> n00000046:port0 [style=dashed] - n0000001c:port1 -> n0000004f:port0 [style=dashed] - n0000001c:port1 -> n00000058:port0 [style=dashed] - n0000001c:port1 -> n00000061:port0 [style=dashed] - n0000001f [label="{{ 0} | msm_ispif3\n/dev/v4l-subdev10 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0000001f:port1 -> n00000022:port0 [style=dashed] - n0000001f:port1 -> n0000002b:port0 [style=dashed] - n0000001f:port1 -> n00000034:port0 [style=dashed] - n0000001f:port1 -> n0000003d:port0 [style=dashed] - n0000001f:port1 -> n00000046:port0 [style=dashed] - n0000001f:port1 -> n0000004f:port0 [style=dashed] - n0000001f:port1 -> n00000058:port0 [style=dashed] - n0000001f:port1 -> n00000061:port0 [style=dashed] - n00000022 [label="{{ 0} | msm_vfe0_rdi0\n/dev/v4l-subdev11 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000022:port1 -> n00000025 [style=bold] - n00000025 [label="msm_vfe0_video0\n/dev/video0", shape=box, style=filled, fillcolor=yellow] - n0000002b [label="{{ 0} | msm_vfe0_rdi1\n/dev/v4l-subdev12 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0000002b:port1 -> n0000002e [style=bold] - n0000002e [label="msm_vfe0_video1\n/dev/video1", shape=box, style=filled, fillcolor=yellow] - n00000034 [label="{{ 0} | msm_vfe0_rdi2\n/dev/v4l-subdev13 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000034:port1 -> n00000037 [style=bold] - n00000037 [label="msm_vfe0_video2\n/dev/video2", shape=box, style=filled, fillcolor=yellow] - n0000003d [label="{{ 0} | msm_vfe0_pix\n/dev/v4l-subdev14 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0000003d:port1 -> n00000040 [style=bold] - n00000040 [label="msm_vfe0_video3\n/dev/video3", shape=box, style=filled, fillcolor=yellow] - n00000046 [label="{{ 0} | msm_vfe1_rdi0\n/dev/v4l-subdev15 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000046:port1 -> n00000049 [style=bold] - n00000049 [label="msm_vfe1_video0\n/dev/video4", shape=box, style=filled, fillcolor=yellow] - n0000004f [label="{{ 0} | msm_vfe1_rdi1\n/dev/v4l-subdev16 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0000004f:port1 -> n00000052 [style=bold] - n00000052 [label="msm_vfe1_video1\n/dev/video5", shape=box, style=filled, fillcolor=yellow] - n00000058 [label="{{ 0} | msm_vfe1_rdi2\n/dev/v4l-subdev17 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000058:port1 -> n0000005b [style=bold] - n0000005b [label="msm_vfe1_video2\n/dev/video6", shape=box, style=filled, fillcolor=yellow] - n00000061 [label="{{ 0} | msm_vfe1_pix\n/dev/v4l-subdev18 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000061:port1 -> n00000064 [style=bold] - n00000064 [label="msm_vfe1_video3\n/dev/video7", shape=box, style=filled, fillcolor=yellow] - n000000e2 [label="{{} | ov5645 3-0039\n/dev/v4l-subdev19 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] - n000000e2:port0 -> n00000004:port0 [style=bold] - n000000e4 [label="{{} | ov5645 3-003a\n/dev/v4l-subdev20 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] - n000000e4:port0 -> n00000007:port0 [style=bold] - n000000e6 [label="{{} | ov5645 3-003b\n/dev/v4l-subdev21 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] - n000000e6:port0 -> n00000001:port0 [style=bold] -} diff --git a/Documentation/media/v4l-drivers/qcom_camss_graph.dot b/Documentation/media/v4l-drivers/qcom_camss_graph.dot deleted file mode 100644 index ef7dca92fd0b..000000000000 --- a/Documentation/media/v4l-drivers/qcom_camss_graph.dot +++ /dev/null @@ -1,43 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 - -digraph board { - rankdir=TB - n00000001 [label="{{ 0} | msm_csiphy0\n/dev/v4l-subdev0 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000001:port1 -> n00000007:port0 [style=dashed] - n00000001:port1 -> n0000000a:port0 [style=dashed] - n00000004 [label="{{ 0} | msm_csiphy1\n/dev/v4l-subdev1 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000004:port1 -> n00000007:port0 [style=dashed] - n00000004:port1 -> n0000000a:port0 [style=dashed] - n00000007 [label="{{ 0} | msm_csid0\n/dev/v4l-subdev2 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000007:port1 -> n0000000d:port0 [style=dashed] - n00000007:port1 -> n00000010:port0 [style=dashed] - n0000000a [label="{{ 0} | msm_csid1\n/dev/v4l-subdev3 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0000000a:port1 -> n0000000d:port0 [style=dashed] - n0000000a:port1 -> n00000010:port0 [style=dashed] - n0000000d [label="{{ 0} | msm_ispif0\n/dev/v4l-subdev4 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0000000d:port1 -> n00000013:port0 [style=dashed] - n0000000d:port1 -> n0000001c:port0 [style=dashed] - n0000000d:port1 -> n00000025:port0 [style=dashed] - n0000000d:port1 -> n0000002e:port0 [style=dashed] - n00000010 [label="{{ 0} | msm_ispif1\n/dev/v4l-subdev5 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000010:port1 -> n00000013:port0 [style=dashed] - n00000010:port1 -> n0000001c:port0 [style=dashed] - n00000010:port1 -> n00000025:port0 [style=dashed] - n00000010:port1 -> n0000002e:port0 [style=dashed] - n00000013 [label="{{ 0} | msm_vfe0_rdi0\n/dev/v4l-subdev6 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000013:port1 -> n00000016 [style=bold] - n00000016 [label="msm_vfe0_video0\n/dev/video0", shape=box, style=filled, fillcolor=yellow] - n0000001c [label="{{ 0} | msm_vfe0_rdi1\n/dev/v4l-subdev7 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0000001c:port1 -> n0000001f [style=bold] - n0000001f [label="msm_vfe0_video1\n/dev/video1", shape=box, style=filled, fillcolor=yellow] - n00000025 [label="{{ 0} | msm_vfe0_rdi2\n/dev/v4l-subdev8 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000025:port1 -> n00000028 [style=bold] - n00000028 [label="msm_vfe0_video2\n/dev/video2", shape=box, style=filled, fillcolor=yellow] - n0000002e [label="{{ 0} | msm_vfe0_pix\n/dev/v4l-subdev9 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n0000002e:port1 -> n00000031 [style=bold] - n00000031 [label="msm_vfe0_video3\n/dev/video3", shape=box, style=filled, fillcolor=yellow] - n00000057 [label="{{} | ov5645 1-0076\n/dev/v4l-subdev10 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] - n00000057:port0 -> n00000001:port0 [style=bold] - n00000059 [label="{{} | ov5645 1-0074\n/dev/v4l-subdev11 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] - n00000059:port0 -> n00000004:port0 [style=bold] -} diff --git a/Documentation/media/v4l-drivers/rcar-fdp1.rst b/Documentation/media/v4l-drivers/rcar-fdp1.rst deleted file mode 100644 index 88b0edcf9046..000000000000 --- a/Documentation/media/v4l-drivers/rcar-fdp1.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Renesas R-Car Fine Display Processor (FDP1) Driver -================================================== - -The R-Car FDP1 driver implements driver-specific controls as follows. - -``V4L2_CID_DEINTERLACING_MODE (menu)`` - The video deinterlacing mode (such as Bob, Weave, ...). The R-Car FDP1 - driver implements the following modes. - -.. flat-table:: - :header-rows: 0 - :stub-columns: 0 - :widths: 1 4 - - * - ``"Progressive" (0)`` - - The input image video stream is progressive (not interlaced). No - deinterlacing is performed. Apart from (optional) format and encoding - conversion output frames are identical to the input frames. - * - ``"Adaptive 2D/3D" (1)`` - - Motion adaptive version of 2D and 3D deinterlacing. Use 3D deinterlacing - in the presence of fast motion and 2D deinterlacing with diagonal - interpolation otherwise. - * - ``"Fixed 2D" (2)`` - - The current field is scaled vertically by averaging adjacent lines to - recover missing lines. This method is also known as blending or Line - Averaging (LAV). - * - ``"Fixed 3D" (3)`` - - The previous and next fields are averaged to recover lines missing from - the current field. This method is also known as Field Averaging (FAV). - * - ``"Previous field" (4)`` - - The current field is weaved with the previous field, i.e. the previous - field is used to fill missing lines from the current field. This method - is also known as weave deinterlacing. - * - ``"Next field" (5)`` - - The current field is weaved with the next field, i.e. the next field is - used to fill missing lines from the current field. This method is also - known as weave deinterlacing. diff --git a/Documentation/media/v4l-drivers/saa7134-cardlist.rst b/Documentation/media/v4l-drivers/saa7134-cardlist.rst deleted file mode 100644 index afb0e2fb52b0..000000000000 --- a/Documentation/media/v4l-drivers/saa7134-cardlist.rst +++ /dev/null @@ -1,803 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -SAA7134 cards list -================== - -.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| - -.. flat-table:: - :header-rows: 1 - :widths: 2 19 18 - :stub-columns: 0 - - * - Card number - - Card name - - PCI IDs - - * - 0 - - UNKNOWN/GENERIC - - - - * - 1 - - Proteus Pro [philips reference design] - - 1131:2001, 1131:2001 - - * - 2 - - LifeView FlyVIDEO3000 - - 5168:0138, 4e42:0138 - - * - 3 - - LifeView/Typhoon FlyVIDEO2000 - - 5168:0138, 4e42:0138 - - * - 4 - - EMPRESS - - 1131:6752 - - * - 5 - - SKNet Monster TV - - 1131:4e85 - - * - 6 - - Tevion MD 9717 - - - - * - 7 - - KNC One TV-Station RDS / Typhoon TV Tuner RDS - - 1131:fe01, 1894:fe01 - - * - 8 - - Terratec Cinergy 400 TV - - 153b:1142 - - * - 9 - - Medion 5044 - - - - * - 10 - - Kworld/KuroutoShikou SAA7130-TVPCI - - - - * - 11 - - Terratec Cinergy 600 TV - - 153b:1143 - - * - 12 - - Medion 7134 - - 16be:0003, 16be:5000 - - * - 13 - - Typhoon TV+Radio 90031 - - - - * - 14 - - ELSA EX-VISION 300TV - - 1048:226b - - * - 15 - - ELSA EX-VISION 500TV - - 1048:226a - - * - 16 - - ASUS TV-FM 7134 - - 1043:4842, 1043:4830, 1043:4840 - - * - 17 - - AOPEN VA1000 POWER - - 1131:7133 - - * - 18 - - BMK MPEX No Tuner - - - - * - 19 - - Compro VideoMate TV - - 185b:c100 - - * - 20 - - Matrox CronosPlus - - 102B:48d0 - - * - 21 - - 10MOONS PCI TV CAPTURE CARD - - 1131:2001 - - * - 22 - - AverMedia M156 / Medion 2819 - - 1461:a70b - - * - 23 - - BMK MPEX Tuner - - - - * - 24 - - KNC One TV-Station DVR - - 1894:a006 - - * - 25 - - ASUS TV-FM 7133 - - 1043:4843 - - * - 26 - - Pinnacle PCTV Stereo (saa7134) - - 11bd:002b - - * - 27 - - Manli MuchTV M-TV002 - - - - * - 28 - - Manli MuchTV M-TV001 - - - - * - 29 - - Nagase Sangyo TransGear 3000TV - - 1461:050c - - * - 30 - - Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) - - 1019:4cb4 - - * - 31 - - Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) - - 1019:4cb5 - - * - 32 - - AVACS SmartTV - - - - * - 33 - - AVerMedia DVD EZMaker - - 1461:10ff - - * - 34 - - Noval Prime TV 7133 - - - - * - 35 - - AverMedia AverTV Studio 305 - - 1461:2115 - - * - 36 - - UPMOST PURPLE TV - - 12ab:0800 - - * - 37 - - Items MuchTV Plus / IT-005 - - - - * - 38 - - Terratec Cinergy 200 TV - - 153b:1152 - - * - 39 - - LifeView FlyTV Platinum Mini - - 5168:0212, 4e42:0212, 5169:1502 - - * - 40 - - Compro VideoMate TV PVR/FM - - 185b:c100 - - * - 41 - - Compro VideoMate TV Gold+ - - 185b:c100 - - * - 42 - - Sabrent SBT-TVFM (saa7130) - - - - * - 43 - - :Zolid Xpert TV7134 - - - - * - 44 - - Empire PCI TV-Radio LE - - - - * - 45 - - Avermedia AVerTV Studio 307 - - 1461:9715 - - * - 46 - - AVerMedia Cardbus TV/Radio (E500) - - 1461:d6ee - - * - 47 - - Terratec Cinergy 400 mobile - - 153b:1162 - - * - 48 - - Terratec Cinergy 600 TV MK3 - - 153b:1158 - - * - 49 - - Compro VideoMate Gold+ Pal - - 185b:c200 - - * - 50 - - Pinnacle PCTV 300i DVB-T + PAL - - 11bd:002d - - * - 51 - - ProVideo PV952 - - 1540:9524 - - * - 52 - - AverMedia AverTV/305 - - 1461:2108 - - * - 53 - - ASUS TV-FM 7135 - - 1043:4845 - - * - 54 - - LifeView FlyTV Platinum FM / Gold - - 5168:0214, 5168:5214, 1489:0214, 5168:0304 - - * - 55 - - LifeView FlyDVB-T DUO / MSI TV@nywhere Duo - - 5168:0306, 4E42:0306 - - * - 56 - - Avermedia AVerTV 307 - - 1461:a70a - - * - 57 - - Avermedia AVerTV GO 007 FM - - 1461:f31f - - * - 58 - - ADS Tech Instant TV (saa7135) - - 1421:0350, 1421:0351, 1421:0370, 1421:1370 - - * - 59 - - Kworld/Tevion V-Stream Xpert TV PVR7134 - - - - * - 60 - - LifeView/Typhoon/Genius FlyDVB-T Duo Cardbus - - 5168:0502, 4e42:0502, 1489:0502 - - * - 61 - - Philips TOUGH DVB-T reference design - - 1131:2004 - - * - 62 - - Compro VideoMate TV Gold+II - - - - * - 63 - - Kworld Xpert TV PVR7134 - - - - * - 64 - - FlyTV mini Asus Digimatrix - - 1043:0210 - - * - 65 - - V-Stream Studio TV Terminator - - - - * - 66 - - Yuan TUN-900 (saa7135) - - - - * - 67 - - Beholder BeholdTV 409 FM - - 0000:4091 - - * - 68 - - GoTView 7135 PCI - - 5456:7135 - - * - 69 - - Philips EUROPA V3 reference design - - 1131:2004 - - * - 70 - - Compro Videomate DVB-T300 - - 185b:c900 - - * - 71 - - Compro Videomate DVB-T200 - - 185b:c901 - - * - 72 - - RTD Embedded Technologies VFG7350 - - 1435:7350 - - * - 73 - - RTD Embedded Technologies VFG7330 - - 1435:7330 - - * - 74 - - LifeView FlyTV Platinum Mini2 - - 14c0:1212 - - * - 75 - - AVerMedia AVerTVHD MCE A180 - - 1461:1044 - - * - 76 - - SKNet MonsterTV Mobile - - 1131:4ee9 - - * - 77 - - Pinnacle PCTV 40i/50i/110i (saa7133) - - 11bd:002e - - * - 78 - - ASUSTeK P7131 Dual - - 1043:4862 - - * - 79 - - Sedna/MuchTV PC TV Cardbus TV/Radio (ITO25 Rev:2B) - - - - * - 80 - - ASUS Digimatrix TV - - 1043:0210 - - * - 81 - - Philips Tiger reference design - - 1131:2018 - - * - 82 - - MSI TV@Anywhere plus - - 1462:6231, 1462:8624 - - * - 83 - - Terratec Cinergy 250 PCI TV - - 153b:1160 - - * - 84 - - LifeView FlyDVB Trio - - 5168:0319 - - * - 85 - - AverTV DVB-T 777 - - 1461:2c05, 1461:2c05 - - * - 86 - - LifeView FlyDVB-T / Genius VideoWonder DVB-T - - 5168:0301, 1489:0301 - - * - 87 - - ADS Instant TV Duo Cardbus PTV331 - - 0331:1421 - - * - 88 - - Tevion/KWorld DVB-T 220RF - - 17de:7201 - - * - 89 - - ELSA EX-VISION 700TV - - 1048:226c - - * - 90 - - Kworld ATSC110/115 - - 17de:7350, 17de:7352 - - * - 91 - - AVerMedia A169 B - - 1461:7360 - - * - 92 - - AVerMedia A169 B1 - - 1461:6360 - - * - 93 - - Medion 7134 Bridge #2 - - 16be:0005 - - * - 94 - - LifeView FlyDVB-T Hybrid Cardbus/MSI TV @nywhere A/D NB - - 5168:3306, 5168:3502, 5168:3307, 4e42:3502 - - * - 95 - - LifeView FlyVIDEO3000 (NTSC) - - 5169:0138 - - * - 96 - - Medion Md8800 Quadro - - 16be:0007, 16be:0008, 16be:000d - - * - 97 - - LifeView FlyDVB-S /Acorp TV134DS - - 5168:0300, 4e42:0300 - - * - 98 - - Proteus Pro 2309 - - 0919:2003 - - * - 99 - - AVerMedia TV Hybrid A16AR - - 1461:2c00 - - * - 100 - - Asus Europa2 OEM - - 1043:4860 - - * - 101 - - Pinnacle PCTV 310i - - 11bd:002f - - * - 102 - - Avermedia AVerTV Studio 507 - - 1461:9715 - - * - 103 - - Compro Videomate DVB-T200A - - - - * - 104 - - Hauppauge WinTV-HVR1110 DVB-T/Hybrid - - 0070:6700, 0070:6701, 0070:6702, 0070:6703, 0070:6704, 0070:6705 - - * - 105 - - Terratec Cinergy HT PCMCIA - - 153b:1172 - - * - 106 - - Encore ENLTV - - 1131:2342, 1131:2341, 3016:2344 - - * - 107 - - Encore ENLTV-FM - - 1131:230f - - * - 108 - - Terratec Cinergy HT PCI - - 153b:1175 - - * - 109 - - Philips Tiger - S Reference design - - - - * - 110 - - Avermedia M102 - - 1461:f31e - - * - 111 - - ASUS P7131 4871 - - 1043:4871 - - * - 112 - - ASUSTeK P7131 Hybrid - - 1043:4876 - - * - 113 - - Elitegroup ECS TVP3XP FM1246 Tuner Card (PAL,FM) - - 1019:4cb6 - - * - 114 - - KWorld DVB-T 210 - - 17de:7250 - - * - 115 - - Sabrent PCMCIA TV-PCB05 - - 0919:2003 - - * - 116 - - 10MOONS TM300 TV Card - - 1131:2304 - - * - 117 - - Avermedia Super 007 - - 1461:f01d - - * - 118 - - Beholder BeholdTV 401 - - 0000:4016 - - * - 119 - - Beholder BeholdTV 403 - - 0000:4036 - - * - 120 - - Beholder BeholdTV 403 FM - - 0000:4037 - - * - 121 - - Beholder BeholdTV 405 - - 0000:4050 - - * - 122 - - Beholder BeholdTV 405 FM - - 0000:4051 - - * - 123 - - Beholder BeholdTV 407 - - 0000:4070 - - * - 124 - - Beholder BeholdTV 407 FM - - 0000:4071 - - * - 125 - - Beholder BeholdTV 409 - - 0000:4090 - - * - 126 - - Beholder BeholdTV 505 FM - - 5ace:5050 - - * - 127 - - Beholder BeholdTV 507 FM / BeholdTV 509 FM - - 5ace:5070, 5ace:5090 - - * - 128 - - Beholder BeholdTV Columbus TV/FM - - 0000:5201 - - * - 129 - - Beholder BeholdTV 607 FM - - 5ace:6070 - - * - 130 - - Beholder BeholdTV M6 - - 5ace:6190 - - * - 131 - - Twinhan Hybrid DTV-DVB 3056 PCI - - 1822:0022 - - * - 132 - - Genius TVGO AM11MCE - - - - * - 133 - - NXP Snake DVB-S reference design - - - - * - 134 - - Medion/Creatix CTX953 Hybrid - - 16be:0010 - - * - 135 - - MSI TV@nywhere A/D v1.1 - - 1462:8625 - - * - 136 - - AVerMedia Cardbus TV/Radio (E506R) - - 1461:f436 - - * - 137 - - AVerMedia Hybrid TV/Radio (A16D) - - 1461:f936 - - * - 138 - - Avermedia M115 - - 1461:a836 - - * - 139 - - Compro VideoMate T750 - - 185b:c900 - - * - 140 - - Avermedia DVB-S Pro A700 - - 1461:a7a1 - - * - 141 - - Avermedia DVB-S Hybrid+FM A700 - - 1461:a7a2 - - * - 142 - - Beholder BeholdTV H6 - - 5ace:6290 - - * - 143 - - Beholder BeholdTV M63 - - 5ace:6191 - - * - 144 - - Beholder BeholdTV M6 Extra - - 5ace:6193 - - * - 145 - - AVerMedia MiniPCI DVB-T Hybrid M103 - - 1461:f636, 1461:f736 - - * - 146 - - ASUSTeK P7131 Analog - - - - * - 147 - - Asus Tiger 3in1 - - 1043:4878 - - * - 148 - - Encore ENLTV-FM v5.3 - - 1a7f:2008 - - * - 149 - - Avermedia PCI pure analog (M135A) - - 1461:f11d - - * - 150 - - Zogis Real Angel 220 - - - - * - 151 - - ADS Tech Instant HDTV - - 1421:0380 - - * - 152 - - Asus Tiger Rev:1.00 - - 1043:4857 - - * - 153 - - Kworld Plus TV Analog Lite PCI - - 17de:7128 - - * - 154 - - Avermedia AVerTV GO 007 FM Plus - - 1461:f31d - - * - 155 - - Hauppauge WinTV-HVR1150 ATSC/QAM-Hybrid - - 0070:6706, 0070:6708 - - * - 156 - - Hauppauge WinTV-HVR1120 DVB-T/Hybrid - - 0070:6707, 0070:6709, 0070:670a - - * - 157 - - Avermedia AVerTV Studio 507UA - - 1461:a11b - - * - 158 - - AVerMedia Cardbus TV/Radio (E501R) - - 1461:b7e9 - - * - 159 - - Beholder BeholdTV 505 RDS - - 0000:505B - - * - 160 - - Beholder BeholdTV 507 RDS - - 0000:5071 - - * - 161 - - Beholder BeholdTV 507 RDS - - 0000:507B - - * - 162 - - Beholder BeholdTV 607 FM - - 5ace:6071 - - * - 163 - - Beholder BeholdTV 609 FM - - 5ace:6090 - - * - 164 - - Beholder BeholdTV 609 FM - - 5ace:6091 - - * - 165 - - Beholder BeholdTV 607 RDS - - 5ace:6072 - - * - 166 - - Beholder BeholdTV 607 RDS - - 5ace:6073 - - * - 167 - - Beholder BeholdTV 609 RDS - - 5ace:6092 - - * - 168 - - Beholder BeholdTV 609 RDS - - 5ace:6093 - - * - 169 - - Compro VideoMate S350/S300 - - 185b:c900 - - * - 170 - - AverMedia AverTV Studio 505 - - 1461:a115 - - * - 171 - - Beholder BeholdTV X7 - - 5ace:7595 - - * - 172 - - RoverMedia TV Link Pro FM - - 19d1:0138 - - * - 173 - - Zolid Hybrid TV Tuner PCI - - 1131:2004 - - * - 174 - - Asus Europa Hybrid OEM - - 1043:4847 - - * - 175 - - Leadtek Winfast DTV1000S - - 107d:6655 - - * - 176 - - Beholder BeholdTV 505 RDS - - 0000:5051 - - * - 177 - - Hawell HW-404M7 - - - - * - 178 - - Beholder BeholdTV H7 - - 5ace:7190 - - * - 179 - - Beholder BeholdTV A7 - - 5ace:7090 - - * - 180 - - Avermedia PCI M733A - - 1461:4155, 1461:4255 - - * - 181 - - TechoTrend TT-budget T-3000 - - 13c2:2804 - - * - 182 - - Kworld PCI SBTVD/ISDB-T Full-Seg Hybrid - - 17de:b136 - - * - 183 - - Compro VideoMate Vista M1F - - 185b:c900 - - * - 184 - - Encore ENLTV-FM 3 - - 1a7f:2108 - - * - 185 - - MagicPro ProHDTV Pro2 DMB-TH/Hybrid - - 17de:d136 - - * - 186 - - Beholder BeholdTV 501 - - 5ace:5010 - - * - 187 - - Beholder BeholdTV 503 FM - - 5ace:5030 - - * - 188 - - Sensoray 811/911 - - 6000:0811, 6000:0911 - - * - 189 - - Kworld PC150-U - - 17de:a134 - - * - 190 - - Asus My Cinema PS3-100 - - 1043:48cd - - * - 191 - - Hawell HW-9004V1 - - - - * - 192 - - AverMedia AverTV Satellite Hybrid+FM A706 - - 1461:2055 - - * - 193 - - WIS Voyager or compatible - - 1905:7007 - - * - 194 - - AverMedia AverTV/505 - - 1461:a10a - - * - 195 - - Leadtek Winfast TV2100 FM - - 107d:6f3a - - * - 196 - - SnaZio* TVPVR PRO - - 1779:13cf diff --git a/Documentation/media/v4l-drivers/saa7134.rst b/Documentation/media/v4l-drivers/saa7134.rst deleted file mode 100644 index c84246dd81c0..000000000000 --- a/Documentation/media/v4l-drivers/saa7134.rst +++ /dev/null @@ -1,61 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The saa7134 driver -================== - -Author Gerd Hoffmann - - -This is a v4l2/oss device driver for saa7130/33/34/35 based capture / TV -boards. See http://www.semiconductors.philips.com/pip/saa7134hl for a -description. - - -Status ------- - -Almost everything is working. video, sound, tuner, radio, mpeg ts, ... - -As with bttv, card-specific tweaks are needed. Check CARDLIST for a -list of known TV cards and saa7134-cards.c for the drivers card -configuration info. - - -Build ------ - -Pick up videodev + v4l2 patches from http://bytesex.org/patches/. -Configure, build, install + boot the new kernel. You'll need at least -these config options: - -.. code-block:: none - - CONFIG_I2C=m - CONFIG_VIDEO_DEV=m - -Type "make" to build the driver now. "make install" installs the -driver. "modprobe saa7134" should load it. Depending on the card you -might have to pass card= as insmod option, check CARDLIST for -valid choices. - - -Changes / Fixes ---------------- - -Please mail me unified diffs ("diff -u") with your changes, and don't -forget to tell me what it changes / which problem it fixes / whatever -it is good for ... - - -Known Problems --------------- - -* The tuner for the flyvideos isn't detected automatically and the - default might not work for you depending on which version you have. - There is a tuner= insmod option to override the driver's default. - -Credits -------- - -andrew.stevens@philips.com + werner.leeb@philips.com for providing -saa7134 hardware specs and sample board. diff --git a/Documentation/media/v4l-drivers/saa7164-cardlist.rst b/Documentation/media/v4l-drivers/saa7164-cardlist.rst deleted file mode 100644 index e8f36e084537..000000000000 --- a/Documentation/media/v4l-drivers/saa7164-cardlist.rst +++ /dev/null @@ -1,71 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -SAA7164 cards list -================== - -.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| - -.. flat-table:: - :header-rows: 1 - :widths: 2 19 18 - :stub-columns: 0 - - * - Card number - - Card name - - PCI IDs - - * - 0 - - Unknown - - - - * - 1 - - Generic Rev2 - - - - * - 2 - - Generic Rev3 - - - - * - 3 - - Hauppauge WinTV-HVR2250 - - 0070:8880, 0070:8810 - - * - 4 - - Hauppauge WinTV-HVR2200 - - 0070:8980 - - * - 5 - - Hauppauge WinTV-HVR2200 - - 0070:8900 - - * - 6 - - Hauppauge WinTV-HVR2200 - - 0070:8901 - - * - 7 - - Hauppauge WinTV-HVR2250 - - 0070:8891, 0070:8851 - - * - 8 - - Hauppauge WinTV-HVR2250 - - 0070:88A1 - - * - 9 - - Hauppauge WinTV-HVR2200 - - 0070:8940 - - * - 10 - - Hauppauge WinTV-HVR2200 - - 0070:8953 - - * - 11 - - Hauppauge WinTV-HVR2255(proto) - - 0070:f111 - - * - 12 - - Hauppauge WinTV-HVR2255 - - 0070:f111 - - * - 13 - - Hauppauge WinTV-HVR2205 - - 0070:f123, 0070:f120 diff --git a/Documentation/media/v4l-drivers/si470x.rst b/Documentation/media/v4l-drivers/si470x.rst deleted file mode 100644 index d53bf5f95200..000000000000 --- a/Documentation/media/v4l-drivers/si470x.rst +++ /dev/null @@ -1,167 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -.. include:: - -The Silicon Labs Si470x FM Radio Receivers driver -================================================= - -Copyright |copy| 2009 Tobias Lorenz - - -Information from Silicon Labs ------------------------------ - -Silicon Laboratories is the manufacturer of the radio ICs, that nowadays are the -most often used radio receivers in cell phones. Usually they are connected with -I2C. But SiLabs also provides a reference design, which integrates this IC, -together with a small microcontroller C8051F321, to form a USB radio. -Part of this reference design is also a radio application in binary and source -code. The software also contains an automatic firmware upgrade to the most -current version. Information on these can be downloaded here: -http://www.silabs.com/usbradio - - -Supported ICs -------------- - -The following ICs have a very similar register set, so that they are or will be -supported somewhen by the driver: - -- Si4700: FM radio receiver -- Si4701: FM radio receiver, RDS Support -- Si4702: FM radio receiver -- Si4703: FM radio receiver, RDS Support -- Si4704: FM radio receiver, no external antenna required -- Si4705: FM radio receiver, no external antenna required, RDS support, Dig I/O -- Si4706: Enhanced FM RDS/TMC radio receiver, no external antenna required, RDS - Support -- Si4707: Dedicated weather band radio receiver with SAME decoder, RDS Support -- Si4708: Smallest FM receivers -- Si4709: Smallest FM receivers, RDS Support - -More information on these can be downloaded here: -http://www.silabs.com/products/mcu/Pages/USBFMRadioRD.aspx - - -Supported USB devices ---------------------- - -Currently the following USB radios (vendor:product) with the Silicon Labs si470x -chips are known to work: - -- 10c4:818a: Silicon Labs USB FM Radio Reference Design -- 06e1:a155: ADS/Tech FM Radio Receiver (formerly Instant FM Music) (RDX-155-EF) -- 1b80:d700: KWorld USB FM Radio SnapMusic Mobile 700 (FM700) -- 10c5:819a: Sanei Electric, Inc. FM USB Radio (sold as DealExtreme.com PCear) - - -Software --------- - -Testing is usually done with most application under Debian/testing: - -- fmtools - Utility for managing FM tuner cards -- gnomeradio - FM-radio tuner for the GNOME desktop -- gradio - GTK FM radio tuner -- kradio - Comfortable Radio Application for KDE -- radio - ncurses-based radio application -- mplayer - The Ultimate Movie Player For Linux -- v4l2-ctl - Collection of command line video4linux utilities - -For example, you can use: - -.. code-block:: none - - v4l2-ctl -d /dev/radio0 --set-ctrl=volume=10,mute=0 --set-freq=95.21 --all - -There is also a library libv4l, which can be used. It's going to have a function -for frequency seeking, either by using hardware functionality as in radio-si470x -or by implementing a function as we currently have in every of the mentioned -programs. Somewhen the radio programs should make use of libv4l. - -For processing RDS information, there is a project ongoing at: -http://rdsd.berlios.de/ - -There is currently no project for making TMC sentences human readable. - - -Audio Listing -------------- - -USB Audio is provided by the ALSA snd_usb_audio module. It is recommended to -also select SND_USB_AUDIO, as this is required to get sound from the radio. For -listing you have to redirect the sound, for example using one of the following -commands. Please adjust the audio devices to your needs (/dev/dsp* and hw:x,x). - -If you just want to test audio (very poor quality): - -.. code-block:: none - - cat /dev/dsp1 > /dev/dsp - -If you use sox + OSS try: - -.. code-block:: none - - sox -2 --endian little -r 96000 -t oss /dev/dsp1 -t oss /dev/dsp - -or using sox + alsa: - -.. code-block:: none - - sox --endian little -c 2 -S -r 96000 -t alsa hw:1 -t alsa -r 96000 hw:0 - -If you use arts try: - -.. code-block:: none - - arecord -D hw:1,0 -r96000 -c2 -f S16_LE | artsdsp aplay -B - - -If you use mplayer try: - -.. code-block:: none - - mplayer -radio adevice=hw=1.0:arate=96000 \ - -rawaudio rate=96000 \ - radio:///capture - -Module Parameters ------------------ - -After loading the module, you still have access to some of them in the sysfs -mount under /sys/module/radio_si470x/parameters. The contents of read-only files -(0444) are not updated, even if space, band and de are changed using private -video controls. The others are runtime changeable. - - -Errors ------- - -Increase tune_timeout, if you often get -EIO errors. - -When timed out or band limit is reached, hw_freq_seek returns -EAGAIN. - -If you get any errors from snd_usb_audio, please report them to the ALSA people. - - -Open Issues ------------ - -V4L minor device allocation and parameter setting is not perfect. A solution is -currently under discussion. - -There is an USB interface for downloading/uploading new firmware images. Support -for it can be implemented using the request_firmware interface. - -There is a RDS interrupt mode. The driver is already using the same interface -for polling RDS information, but is currently not using the interrupt mode. - -There is a LED interface, which can be used to override the LED control -programmed in the firmware. This can be made available using the LED support -functions in the kernel. - - -Other useful information and links ----------------------------------- - -http://www.silabs.com/usbradio diff --git a/Documentation/media/v4l-drivers/si4713.rst b/Documentation/media/v4l-drivers/si4713.rst deleted file mode 100644 index be8e6b49b7b4..000000000000 --- a/Documentation/media/v4l-drivers/si4713.rst +++ /dev/null @@ -1,192 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -.. include:: - -The Silicon Labs Si4713 FM Radio Transmitter Driver -=================================================== - -Copyright |copy| 2009 Nokia Corporation - -Contact: Eduardo Valentin - - -Information about the Device ----------------------------- - -This chip is a Silicon Labs product. It is a I2C device, currently on 0x63 address. -Basically, it has transmission and signal noise level measurement features. - -The Si4713 integrates transmit functions for FM broadcast stereo transmission. -The chip also allows integrated receive power scanning to identify low signal -power FM channels. - -The chip is programmed using commands and responses. There are also several -properties which can change the behavior of this chip. - -Users must comply with local regulations on radio frequency (RF) transmission. - -Device driver description -------------------------- - -There are two modules to handle this device. One is a I2C device driver -and the other is a platform driver. - -The I2C device driver exports a v4l2-subdev interface to the kernel. -All properties can also be accessed by v4l2 extended controls interface, by -using the v4l2-subdev calls (g_ext_ctrls, s_ext_ctrls). - -The platform device driver exports a v4l2 radio device interface to user land. -So, it uses the I2C device driver as a sub device in order to send the user -commands to the actual device. Basically it is a wrapper to the I2C device driver. - -Applications can use v4l2 radio API to specify frequency of operation, mute state, -etc. But mostly of its properties will be present in the extended controls. - -When the v4l2 mute property is set to 1 (true), the driver will turn the chip off. - -Properties description ----------------------- - -The properties can be accessed using v4l2 extended controls. -Here is an output from v4l2-ctl util: - -.. code-block:: none - - / # v4l2-ctl -d /dev/radio0 --all -L - Driver Info: - Driver name : radio-si4713 - Card type : Silicon Labs Si4713 Modulator - Bus info : - Driver version: 0 - Capabilities : 0x00080800 - RDS Output - Modulator - Audio output: 0 (FM Modulator Audio Out) - Frequency: 1408000 (88.000000 MHz) - Video Standard = 0x00000000 - Modulator: - Name : FM Modulator - Capabilities : 62.5 Hz stereo rds - Frequency range : 76.0 MHz - 108.0 MHz - Subchannel modulation: stereo+rds - - User Controls - - mute (bool) : default=1 value=0 - - FM Radio Modulator Controls - - rds_signal_deviation (int) : min=0 max=90000 step=10 default=200 value=200 flags=slider - rds_program_id (int) : min=0 max=65535 step=1 default=0 value=0 - rds_program_type (int) : min=0 max=31 step=1 default=0 value=0 - rds_ps_name (str) : min=0 max=96 step=8 value='si4713 ' - rds_radio_text (str) : min=0 max=384 step=32 value='' - audio_limiter_feature_enabled (bool) : default=1 value=1 - audio_limiter_release_time (int) : min=250 max=102390 step=50 default=5010 value=5010 flags=slider - audio_limiter_deviation (int) : min=0 max=90000 step=10 default=66250 value=66250 flags=slider - audio_compression_feature_enabl (bool) : default=1 value=1 - audio_compression_gain (int) : min=0 max=20 step=1 default=15 value=15 flags=slider - audio_compression_threshold (int) : min=-40 max=0 step=1 default=-40 value=-40 flags=slider - audio_compression_attack_time (int) : min=0 max=5000 step=500 default=0 value=0 flags=slider - audio_compression_release_time (int) : min=100000 max=1000000 step=100000 default=1000000 value=1000000 flags=slider - pilot_tone_feature_enabled (bool) : default=1 value=1 - pilot_tone_deviation (int) : min=0 max=90000 step=10 default=6750 value=6750 flags=slider - pilot_tone_frequency (int) : min=0 max=19000 step=1 default=19000 value=19000 flags=slider - pre_emphasis_settings (menu) : min=0 max=2 default=1 value=1 - tune_power_level (int) : min=0 max=120 step=1 default=88 value=88 flags=slider - tune_antenna_capacitor (int) : min=0 max=191 step=1 default=0 value=110 flags=slider - -Here is a summary of them: - -* Pilot is an audible tone sent by the device. - -- pilot_frequency - Configures the frequency of the stereo pilot tone. -- pilot_deviation - Configures pilot tone frequency deviation level. -- pilot_enabled - Enables or disables the pilot tone feature. - -* The si4713 device is capable of applying audio compression to the - transmitted signal. - -- acomp_enabled - Enables or disables the audio dynamic range control feature. -- acomp_gain - Sets the gain for audio dynamic range control. -- acomp_threshold - Sets the threshold level for audio dynamic range control. -- acomp_attack_time - Sets the attack time for audio dynamic range control. -- acomp_release_time - Sets the release time for audio dynamic range control. - -* Limiter setups audio deviation limiter feature. Once a over deviation occurs, - it is possible to adjust the front-end gain of the audio input and always - prevent over deviation. - -- limiter_enabled - Enables or disables the limiter feature. -- limiter_deviation - Configures audio frequency deviation level. -- limiter_release_time - Sets the limiter release time. - -* Tuning power - -- power_level - Sets the output power level for signal transmission. - antenna_capacitor - This selects the value of antenna tuning capacitor - manually or automatically if set to zero. - -* RDS related - -- rds_ps_name - Sets the RDS ps name field for transmission. -- rds_radio_text - Sets the RDS radio text for transmission. -- rds_pi - Sets the RDS PI field for transmission. -- rds_pty - Sets the RDS PTY field for transmission. - -* Region related - -- preemphasis - sets the preemphasis to be applied for transmission. - -RNL ---- - -This device also has an interface to measure received noise level. To do that, you should -ioctl the device node. Here is an code of example: - -.. code-block:: none - - int main (int argc, char *argv[]) - { - struct si4713_rnl rnl; - int fd = open("/dev/radio0", O_RDWR); - int rval; - - if (argc < 2) - return -EINVAL; - - if (fd < 0) - return fd; - - sscanf(argv[1], "%d", &rnl.frequency); - - rval = ioctl(fd, SI4713_IOC_MEASURE_RNL, &rnl); - if (rval < 0) - return rval; - - printf("received noise level: %d\n", rnl.rnl); - - close(fd); - } - -The struct si4713_rnl and SI4713_IOC_MEASURE_RNL are defined under -include/linux/platform_data/media/si4713.h. - -Stereo/Mono and RDS subchannels -------------------------------- - -The device can also be configured using the available sub channels for -transmission. To do that use S/G_MODULATOR ioctl and configure txsubchans properly. -Refer to the V4L2 API specification for proper use of this ioctl. - -Testing -------- -Testing is usually done with v4l2-ctl utility for managing FM tuner cards. -The tool can be found in v4l-dvb repository under v4l2-apps/util directory. - -Example for setting rds ps name: - -.. code-block:: none - - # v4l2-ctl -d /dev/radio0 --set-ctrl=rds_ps_name="Dummy" - diff --git a/Documentation/media/v4l-drivers/si476x.rst b/Documentation/media/v4l-drivers/si476x.rst deleted file mode 100644 index 87062301d6a1..000000000000 --- a/Documentation/media/v4l-drivers/si476x.rst +++ /dev/null @@ -1,160 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -.. include:: - - -The SI476x Driver -================= - -Copyright |copy| 2013 Andrey Smirnov - -TODO for the driver -------------------- - -- According to the SiLabs' datasheet it is possible to update the - firmware of the radio chip in the run-time, thus bringing it to the - most recent version. Unfortunately I couldn't find any mentioning of - the said firmware update for the old chips that I tested the driver - against, so for chips like that the driver only exposes the old - functionality. - - -Parameters exposed over debugfs -------------------------------- -SI476x allow user to get multiple characteristics that can be very -useful for EoL testing/RF performance estimation, parameters that have -very little to do with V4L2 subsystem. Such parameters are exposed via -debugfs and can be accessed via regular file I/O operations. - -The drivers exposes following files: - -* /sys/kernel/debug//acf - This file contains ACF(Automatically Controlled Features) status - information. The contents of the file is binary data of the - following layout: - - .. tabularcolumns:: |p{7ex}|p{12ex}|L| - - ============= ============== ==================================== - Offset Name Description - ============= ============== ==================================== - 0x00 blend_int Flag, set when stereo separation has - crossed below the blend threshold - 0x01 hblend_int Flag, set when HiBlend cutoff - frequency is lower than threshold - 0x02 hicut_int Flag, set when HiCut cutoff - frequency is lower than threshold - 0x03 chbw_int Flag, set when channel filter - bandwidth is less than threshold - 0x04 softmute_int Flag indicating that softmute - attenuation has increased above - softmute threshold - 0x05 smute 0 - Audio is not soft muted - 1 - Audio is soft muted - 0x06 smattn Soft mute attenuation level in dB - 0x07 chbw Channel filter bandwidth in kHz - 0x08 hicut HiCut cutoff frequency in units of - 100Hz - 0x09 hiblend HiBlend cutoff frequency in units - of 100 Hz - 0x10 pilot 0 - Stereo pilot is not present - 1 - Stereo pilot is present - 0x11 stblend Stereo blend in % - ============= ============== ==================================== - - -* /sys/kernel/debug//rds_blckcnt - This file contains statistics about RDS receptions. It's binary data - has the following layout: - - .. tabularcolumns:: |p{7ex}|p{12ex}|L| - - ============= ============== ==================================== - Offset Name Description - ============= ============== ==================================== - 0x00 expected Number of expected RDS blocks - 0x02 received Number of received RDS blocks - 0x04 uncorrectable Number of uncorrectable RDS blocks - ============= ============== ==================================== - -* /sys/kernel/debug//agc - This file contains information about parameters pertaining to - AGC(Automatic Gain Control) - - The layout is: - - .. tabularcolumns:: |p{7ex}|p{12ex}|L| - - ============= ============== ==================================== - Offset Name Description - ============= ============== ==================================== - 0x00 mxhi 0 - FM Mixer PD high threshold is - not tripped - 1 - FM Mixer PD high threshold is - tripped - 0x01 mxlo ditto for FM Mixer PD low - 0x02 lnahi ditto for FM LNA PD high - 0x03 lnalo ditto for FM LNA PD low - 0x04 fmagc1 FMAGC1 attenuator resistance - (see datasheet for more detail) - 0x05 fmagc2 ditto for FMAGC2 - 0x06 pgagain PGA gain in dB - 0x07 fmwblang FM/WB LNA Gain in dB - ============= ============== ==================================== - -* /sys/kernel/debug//rsq - This file contains information about parameters pertaining to - RSQ(Received Signal Quality) - - The layout is: - - .. tabularcolumns:: |p{7ex}|p{12ex}|p{60ex}| - - ============= ============== ==================================== - Offset Name Description - ============= ============== ==================================== - 0x00 multhint 0 - multipath value has not crossed - the Multipath high threshold - 1 - multipath value has crossed - the Multipath high threshold - 0x01 multlint ditto for Multipath low threshold - 0x02 snrhint 0 - received signal's SNR has not - crossed high threshold - 1 - received signal's SNR has - crossed high threshold - 0x03 snrlint ditto for low threshold - 0x04 rssihint ditto for RSSI high threshold - 0x05 rssilint ditto for RSSI low threshold - 0x06 bltf Flag indicating if seek command - reached/wrapped seek band limit - 0x07 snr_ready Indicates that SNR metrics is ready - 0x08 rssiready ditto for RSSI metrics - 0x09 injside 0 - Low-side injection is being used - 1 - High-side injection is used - 0x10 afcrl Flag indicating if AFC rails - 0x11 valid Flag indicating if channel is valid - 0x12 readfreq Current tuned frequency - 0x14 freqoff Signed frequency offset in units of - 2ppm - 0x15 rssi Signed value of RSSI in dBuV - 0x16 snr Signed RF SNR in dB - 0x17 issi Signed Image Strength Signal - indicator - 0x18 lassi Signed Low side adjacent Channel - Strength indicator - 0x19 hassi ditto fpr High side - 0x20 mult Multipath indicator - 0x21 dev Frequency deviation - 0x24 assi Adjacent channel SSI - 0x25 usn Ultrasonic noise indicator - 0x26 pilotdev Pilot deviation in units of 100 Hz - 0x27 rdsdev ditto for RDS - 0x28 assidev ditto for ASSI - 0x29 strongdev Frequency deviation - 0x30 rdspi RDS PI code - ============= ============== ==================================== - -* /sys/kernel/debug//rsq_primary - This file contains information about parameters pertaining to - RSQ(Received Signal Quality) for primary tuner only. Layout is as - the one above. diff --git a/Documentation/media/v4l-drivers/tm6000-cardlist.rst b/Documentation/media/v4l-drivers/tm6000-cardlist.rst deleted file mode 100644 index 6d2769c0f4d8..000000000000 --- a/Documentation/media/v4l-drivers/tm6000-cardlist.rst +++ /dev/null @@ -1,83 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -TM6000 cards list -================= - -.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| - -.. flat-table:: - :header-rows: 1 - :widths: 2 19 18 - :stub-columns: 0 - - * - Card number - - Card name - - USB IDs - - * - 0 - - Unknown tm6000 video grabber - - - - * - 1 - - Generic tm5600 board - - 6000:0001 - - * - 2 - - Generic tm6000 board - - - - * - 3 - - Generic tm6010 board - - 6000:0002 - - * - 4 - - 10Moons UT 821 - - - - * - 5 - - 10Moons UT 330 - - - - * - 6 - - ADSTECH Dual TV USB - - 06e1:f332 - - * - 7 - - Freecom Hybrid Stick / Moka DVB-T Receiver Dual - - 14aa:0620 - - * - 8 - - ADSTECH Mini Dual TV USB - - 06e1:b339 - - * - 9 - - Hauppauge WinTV HVR-900H / WinTV USB2-Stick - - 2040:6600, 2040:6601, 2040:6610, 2040:6611 - - * - 10 - - Beholder Wander DVB-T/TV/FM USB2.0 - - 6000:dec0 - - * - 11 - - Beholder Voyager TV/FM USB2.0 - - 6000:dec1 - - * - 12 - - Terratec Cinergy Hybrid XE / Cinergy Hybrid-Stick - - 0ccd:0086, 0ccd:00A5 - - * - 13 - - Twinhan TU501(704D1) - - 13d3:3240, 13d3:3241, 13d3:3243, 13d3:3264 - - * - 14 - - Beholder Wander Lite DVB-T/TV/FM USB2.0 - - 6000:dec2 - - * - 15 - - Beholder Voyager Lite TV/FM USB2.0 - - 6000:dec3 - - * - 16 - - Terratec Grabster AV 150/250 MX - - 0ccd:0079 diff --git a/Documentation/media/v4l-drivers/tuner-cardlist.rst b/Documentation/media/v4l-drivers/tuner-cardlist.rst deleted file mode 100644 index 362617c59c5d..000000000000 --- a/Documentation/media/v4l-drivers/tuner-cardlist.rst +++ /dev/null @@ -1,100 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Tuner cards list -================ - -============ ===================================================== -Tuner number Card name -============ ===================================================== -0 Temic PAL (4002 FH5) -1 Philips PAL_I (FI1246 and compatibles) -2 Philips NTSC (FI1236,FM1236 and compatibles) -3 Philips (SECAM+PAL_BG) (FI1216MF, FM1216MF, FR1216MF) -4 NoTuner -5 Philips PAL_BG (FI1216 and compatibles) -6 Temic NTSC (4032 FY5) -7 Temic PAL_I (4062 FY5) -8 Temic NTSC (4036 FY5) -9 Alps HSBH1 -10 Alps TSBE1 -11 Alps TSBB5 -12 Alps TSBE5 -13 Alps TSBC5 -14 Temic PAL_BG (4006FH5) -15 Alps TSCH6 -16 Temic PAL_DK (4016 FY5) -17 Philips NTSC_M (MK2) -18 Temic PAL_I (4066 FY5) -19 Temic PAL* auto (4006 FN5) -20 Temic PAL_BG (4009 FR5) or PAL_I (4069 FR5) -21 Temic NTSC (4039 FR5) -22 Temic PAL/SECAM multi (4046 FM5) -23 Philips PAL_DK (FI1256 and compatibles) -24 Philips PAL/SECAM multi (FQ1216ME) -25 LG PAL_I+FM (TAPC-I001D) -26 LG PAL_I (TAPC-I701D) -27 LG NTSC+FM (TPI8NSR01F) -28 LG PAL_BG+FM (TPI8PSB01D) -29 LG PAL_BG (TPI8PSB11D) -30 Temic PAL* auto + FM (4009 FN5) -31 SHARP NTSC_JP (2U5JF5540) -32 Samsung PAL TCPM9091PD27 -33 MT20xx universal -34 Temic PAL_BG (4106 FH5) -35 Temic PAL_DK/SECAM_L (4012 FY5) -36 Temic NTSC (4136 FY5) -37 LG PAL (newer TAPC series) -38 Philips PAL/SECAM multi (FM1216ME MK3) -39 LG NTSC (newer TAPC series) -40 HITACHI V7-J180AT -41 Philips PAL_MK (FI1216 MK) -42 Philips FCV1236D ATSC/NTSC dual in -43 Philips NTSC MK3 (FM1236MK3 or FM1236/F) -44 Philips 4 in 1 (ATI TV Wonder Pro/Conexant) -45 Microtune 4049 FM5 -46 Panasonic VP27s/ENGE4324D -47 LG NTSC (TAPE series) -48 Tenna TNF 8831 BGFF) -49 Microtune 4042 FI5 ATSC/NTSC dual in -50 TCL 2002N -51 Philips PAL/SECAM_D (FM 1256 I-H3) -52 Thomson DTT 7610 (ATSC/NTSC) -53 Philips FQ1286 -54 Philips/NXP TDA 8290/8295 + 8275/8275A/18271 -55 TCL 2002MB -56 Philips PAL/SECAM multi (FQ1216AME MK4) -57 Philips FQ1236A MK4 -58 Ymec TVision TVF-8531MF/8831MF/8731MF -59 Ymec TVision TVF-5533MF -60 Thomson DTT 761X (ATSC/NTSC) -61 Tena TNF9533-D/IF/TNF9533-B/DF -62 Philips TEA5767HN FM Radio -63 Philips FMD1216ME MK3 Hybrid Tuner -64 LG TDVS-H06xF -65 Ymec TVF66T5-B/DFF -66 LG TALN series -67 Philips TD1316 Hybrid Tuner -68 Philips TUV1236D ATSC/NTSC dual in -69 Tena TNF 5335 and similar models -70 Samsung TCPN 2121P30A -71 Xceive xc2028/xc3028 tuner -72 Thomson FE6600 -73 Samsung TCPG 6121P30A -75 Philips TEA5761 FM Radio -76 Xceive 5000 tuner -77 TCL tuner MF02GIP-5N-E -78 Philips FMD1216MEX MK3 Hybrid Tuner -79 Philips PAL/SECAM multi (FM1216 MK5) -80 Philips FQ1216LME MK3 PAL/SECAM w/active loopthrough -81 Partsnic (Daewoo) PTI-5NF05 -82 Philips CU1216L -83 NXP TDA18271 -84 Sony BTF-Pxn01Z -85 Philips FQ1236 MK5 -86 Tena TNF5337 MFD -87 Xceive 4000 tuner -88 Xceive 5000C tuner -89 Sony BTF-PG472Z PAL/SECAM -90 Sony BTF-PK467Z NTSC-M-JP -91 Sony BTF-PB463Z NTSC-M -============ ===================================================== diff --git a/Documentation/media/v4l-drivers/usbvision-cardlist.rst b/Documentation/media/v4l-drivers/usbvision-cardlist.rst deleted file mode 100644 index 6aee115ee6e2..000000000000 --- a/Documentation/media/v4l-drivers/usbvision-cardlist.rst +++ /dev/null @@ -1,283 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -USBvision cards list -==================== - -.. tabularcolumns:: |p{1.4cm}|p{11.1cm}|p{4.2cm}| - -.. flat-table:: - :header-rows: 1 - :widths: 2 19 18 - :stub-columns: 0 - - * - Card number - - Card name - - USB IDs - - * - 0 - - Xanboo - - 0a6f:0400 - - * - 1 - - Belkin USB VideoBus II Adapter - - 050d:0106 - - * - 2 - - Belkin Components USB VideoBus - - 050d:0207 - - * - 3 - - Belkin USB VideoBus II - - 050d:0208 - - * - 4 - - echoFX InterView Lite - - 0571:0002 - - * - 5 - - USBGear USBG-V1 resp. HAMA USB - - 0573:0003 - - * - 6 - - D-Link V100 - - 0573:0400 - - * - 7 - - X10 USB Camera - - 0573:2000 - - * - 8 - - Hauppauge WinTV USB Live (PAL B/G) - - 0573:2d00 - - * - 9 - - Hauppauge WinTV USB Live Pro (NTSC M/N) - - 0573:2d01 - - * - 10 - - Zoran Co. PMD (Nogatech) AV-grabber Manhattan - - 0573:2101 - - * - 11 - - Nogatech USB-TV (NTSC) FM - - 0573:4100 - - * - 12 - - PNY USB-TV (NTSC) FM - - 0573:4110 - - * - 13 - - PixelView PlayTv-USB PRO (PAL) FM - - 0573:4450 - - * - 14 - - ZTV ZT-721 2.4GHz USB A/V Receiver - - 0573:4550 - - * - 15 - - Hauppauge WinTV USB (NTSC M/N) - - 0573:4d00 - - * - 16 - - Hauppauge WinTV USB (PAL B/G) - - 0573:4d01 - - * - 17 - - Hauppauge WinTV USB (PAL I) - - 0573:4d02 - - * - 18 - - Hauppauge WinTV USB (PAL/SECAM L) - - 0573:4d03 - - * - 19 - - Hauppauge WinTV USB (PAL D/K) - - 0573:4d04 - - * - 20 - - Hauppauge WinTV USB (NTSC FM) - - 0573:4d10 - - * - 21 - - Hauppauge WinTV USB (PAL B/G FM) - - 0573:4d11 - - * - 22 - - Hauppauge WinTV USB (PAL I FM) - - 0573:4d12 - - * - 23 - - Hauppauge WinTV USB (PAL D/K FM) - - 0573:4d14 - - * - 24 - - Hauppauge WinTV USB Pro (NTSC M/N) - - 0573:4d2a - - * - 25 - - Hauppauge WinTV USB Pro (NTSC M/N) V2 - - 0573:4d2b - - * - 26 - - Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L) - - 0573:4d2c - - * - 27 - - Hauppauge WinTV USB Pro (NTSC M/N) V3 - - 0573:4d20 - - * - 28 - - Hauppauge WinTV USB Pro (PAL B/G) - - 0573:4d21 - - * - 29 - - Hauppauge WinTV USB Pro (PAL I) - - 0573:4d22 - - * - 30 - - Hauppauge WinTV USB Pro (PAL/SECAM L) - - 0573:4d23 - - * - 31 - - Hauppauge WinTV USB Pro (PAL D/K) - - 0573:4d24 - - * - 32 - - Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) - - 0573:4d25 - - * - 33 - - Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) V2 - - 0573:4d26 - - * - 34 - - Hauppauge WinTV USB Pro (PAL B/G) V2 - - 0573:4d27 - - * - 35 - - Hauppauge WinTV USB Pro (PAL B/G,D/K) - - 0573:4d28 - - * - 36 - - Hauppauge WinTV USB Pro (PAL I,D/K) - - 0573:4d29 - - * - 37 - - Hauppauge WinTV USB Pro (NTSC M/N FM) - - 0573:4d30 - - * - 38 - - Hauppauge WinTV USB Pro (PAL B/G FM) - - 0573:4d31 - - * - 39 - - Hauppauge WinTV USB Pro (PAL I FM) - - 0573:4d32 - - * - 40 - - Hauppauge WinTV USB Pro (PAL D/K FM) - - 0573:4d34 - - * - 41 - - Hauppauge WinTV USB Pro (Temic PAL/SECAM B/G/I/D/K/L FM) - - 0573:4d35 - - * - 42 - - Hauppauge WinTV USB Pro (Temic PAL B/G FM) - - 0573:4d36 - - * - 43 - - Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L FM) - - 0573:4d37 - - * - 44 - - Hauppauge WinTV USB Pro (NTSC M/N FM) V2 - - 0573:4d38 - - * - 45 - - Camtel Technology USB TV Genie Pro FM Model TVB330 - - 0768:0006 - - * - 46 - - Digital Video Creator I - - 07d0:0001 - - * - 47 - - Global Village GV-007 (NTSC) - - 07d0:0002 - - * - 48 - - Dazzle Fusion Model DVC-50 Rev 1 (NTSC) - - 07d0:0003 - - * - 49 - - Dazzle Fusion Model DVC-80 Rev 1 (PAL) - - 07d0:0004 - - * - 50 - - Dazzle Fusion Model DVC-90 Rev 1 (SECAM) - - 07d0:0005 - - * - 51 - - Eskape Labs MyTV2Go - - 07f8:9104 - - * - 52 - - Pinnacle Studio PCTV USB (PAL) - - 2304:010d - - * - 53 - - Pinnacle Studio PCTV USB (SECAM) - - 2304:0109 - - * - 54 - - Pinnacle Studio PCTV USB (PAL) FM - - 2304:0110 - - * - 55 - - Miro PCTV USB - - 2304:0111 - - * - 56 - - Pinnacle Studio PCTV USB (NTSC) FM - - 2304:0112 - - * - 57 - - Pinnacle Studio PCTV USB (PAL) FM V2 - - 2304:0210 - - * - 58 - - Pinnacle Studio PCTV USB (NTSC) FM V2 - - 2304:0212 - - * - 59 - - Pinnacle Studio PCTV USB (PAL) FM V3 - - 2304:0214 - - * - 60 - - Pinnacle Studio Linx Video input cable (NTSC) - - 2304:0300 - - * - 61 - - Pinnacle Studio Linx Video input cable (PAL) - - 2304:0301 - - * - 62 - - Pinnacle PCTV Bungee USB (PAL) FM - - 2304:0419 - - * - 63 - - Hauppauge WinTv-USB - - 2400:4200 - - * - 64 - - Pinnacle Studio PCTV USB (NTSC) FM V3 - - 2304:0113 - - * - 65 - - Nogatech USB MicroCam NTSC (NV3000N) - - 0573:3000 - - * - 66 - - Nogatech USB MicroCam PAL (NV3001P) - - 0573:3001 diff --git a/Documentation/media/v4l-drivers/v4l-with-ir.rst b/Documentation/media/v4l-drivers/v4l-with-ir.rst deleted file mode 100644 index ce23c8a7bc93..000000000000 --- a/Documentation/media/v4l-drivers/v4l-with-ir.rst +++ /dev/null @@ -1,75 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Infrared remote control support in video4linux drivers -====================================================== - -Authors: Gerd Hoffmann, Mauro Carvalho Chehab - -Basics ------- - -Most analog and digital TV boards support remote controllers. Several of -them have a microprocessor that receives the IR carriers, convert into -pulse/space sequences and then to scan codes, returning such codes to -userspace ("scancode mode"). Other boards return just the pulse/space -sequences ("raw mode"). - -The support for remote controller in scancode mode is provided by the -standard Linux input layer. The support for raw mode is provided via LIRC. - -In order to check the support and test it, it is suggested to download -the `v4l-utils `_. It provides -two tools to handle remote controllers: - -- ir-keytable: provides a way to query the remote controller, list the - protocols it supports, enable in-kernel support for IR decoder or - switch the protocol and to test the reception of scan codes; - -- ir-ctl: provide tools to handle remote controllers that support raw mode - via LIRC interface. - -Usually, the remote controller module is auto-loaded when the TV card is -detected. However, for a few devices, you need to manually load the -ir-kbd-i2c module. - -How it works ------------- - -The modules register the remote as keyboard within the linux input -layer, i.e. you'll see the keys of the remote as normal key strokes -(if CONFIG_INPUT_KEYBOARD is enabled). - -Using the event devices (CONFIG_INPUT_EVDEV) it is possible for -applications to access the remote via /dev/input/event devices. -The udev/systemd will automatically create the devices. If you install -the `v4l-utils `_, it may also -automatically load a different keytable than the default one. Please see -`v4l-utils `_ ir-keytable.1 -man page for details. - -The ir-keytable tool is nice for trouble shooting, i.e. to check -whenever the input device is really present, which of the devices it -is, check whenever pressing keys on the remote actually generates -events and the like. You can also use any other input utility that changes -the keymaps, like the input kbd utility. - - -Using with lircd -================ - -The latest versions of the lircd daemon supports reading events from the -linux input layer (via event device). It also supports receiving IR codes -in lirc mode. - - -Using without lircd -=================== - -Xorg recognizes several IR keycodes that have its numerical value lower -than 247. With the advent of Wayland, the input driver got updated too, -and should now accept all keycodes. Yet, you may want to just reasign -the keycodes to something that your favorite media application likes. - -This can be done by setting -`v4l-utils `_ to load your own -keytable in runtime. Please read ir-keytable.1 man page for details. diff --git a/Documentation/media/v4l-drivers/vimc.dot b/Documentation/media/v4l-drivers/vimc.dot deleted file mode 100644 index 57863a13fa39..000000000000 --- a/Documentation/media/v4l-drivers/vimc.dot +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 - -digraph board { - rankdir=TB - n00000001 [label="{{} | Sensor A\n/dev/v4l-subdev0 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] - n00000001:port0 -> n00000005:port0 [style=bold] - n00000001:port0 -> n0000000b [style=bold] - n00000003 [label="{{} | Sensor B\n/dev/v4l-subdev1 | { 0}}", shape=Mrecord, style=filled, fillcolor=green] - n00000003:port0 -> n00000008:port0 [style=bold] - n00000003:port0 -> n0000000f [style=bold] - n00000005 [label="{{ 0} | Debayer A\n/dev/v4l-subdev2 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000005:port1 -> n00000017:port0 - n00000008 [label="{{ 0} | Debayer B\n/dev/v4l-subdev3 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000008:port1 -> n00000017:port0 [style=dashed] - n0000000b [label="Raw Capture 0\n/dev/video0", shape=box, style=filled, fillcolor=yellow] - n0000000f [label="Raw Capture 1\n/dev/video1", shape=box, style=filled, fillcolor=yellow] - n00000013 [label="RGB/YUV Input\n/dev/video2", shape=box, style=filled, fillcolor=yellow] - n00000013 -> n00000017:port0 [style=dashed] - n00000017 [label="{{ 0} | Scaler\n/dev/v4l-subdev4 | { 1}}", shape=Mrecord, style=filled, fillcolor=green] - n00000017:port1 -> n0000001a [style=bold] - n0000001a [label="RGB/YUV Capture\n/dev/video3", shape=box, style=filled, fillcolor=yellow] -} diff --git a/Documentation/media/v4l-drivers/vimc.rst b/Documentation/media/v4l-drivers/vimc.rst deleted file mode 100644 index 211cc8972410..000000000000 --- a/Documentation/media/v4l-drivers/vimc.rst +++ /dev/null @@ -1,90 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The Virtual Media Controller Driver (vimc) -========================================== - -The vimc driver emulates complex video hardware using the V4L2 API and the Media -API. It has a capture device and three subdevices: sensor, debayer and scaler. - -Topology --------- - -The topology is hardcoded, although you could modify it in vimc-core and -recompile the driver to achieve your own topology. This is the default topology: - -.. _vimc_topology_graph: - -.. kernel-figure:: vimc.dot - :alt: Diagram of the default media pipeline topology - :align: center - - Media pipeline graph on vimc - -Configuring the topology -~~~~~~~~~~~~~~~~~~~~~~~~ - -Each subdevice will come with its default configuration (pixelformat, height, -width, ...). One needs to configure the topology in order to match the -configuration on each linked subdevice to stream frames through the pipeline. -If the configuration doesn't match, the stream will fail. The ``v4l-utils`` -package is a bundle of user-space applications, that comes with ``media-ctl`` and -``v4l2-ctl`` that can be used to configure the vimc configuration. This sequence -of commands fits for the default topology: - -.. code-block:: bash - - media-ctl -d platform:vimc -V '"Sensor A":0[fmt:SBGGR8_1X8/640x480]' - media-ctl -d platform:vimc -V '"Debayer A":0[fmt:SBGGR8_1X8/640x480]' - media-ctl -d platform:vimc -V '"Sensor B":0[fmt:SBGGR8_1X8/640x480]' - media-ctl -d platform:vimc -V '"Debayer B":0[fmt:SBGGR8_1X8/640x480]' - v4l2-ctl -z platform:vimc -d "RGB/YUV Capture" -v width=1920,height=1440 - v4l2-ctl -z platform:vimc -d "Raw Capture 0" -v pixelformat=BA81 - v4l2-ctl -z platform:vimc -d "Raw Capture 1" -v pixelformat=BA81 - -Subdevices ----------- - -Subdevices define the behavior of an entity in the topology. Depending on the -subdevice, the entity can have multiple pads of type source or sink. - -vimc-sensor: - Generates images in several formats using video test pattern generator. - Exposes: - - * 1 Pad source - -vimc-debayer: - Transforms images in bayer format into a non-bayer format. - Exposes: - - * 1 Pad sink - * 1 Pad source - -vimc-scaler: - Scale up the image by a factor of 3. E.g.: a 640x480 image becomes a - 1920x1440 image. (this value can be configured, see at - `Module options`_). - Exposes: - - * 1 Pad sink - * 1 Pad source - -vimc-capture: - Exposes node /dev/videoX to allow userspace to capture the stream. - Exposes: - - * 1 Pad sink - * 1 Pad source - - -Module options --------------- - -Vimc has a module parameter to configure the driver. - -* ``sca_mult=`` - - Image size multiplier factor to be used to multiply both width and - height, so the image size will be ``sca_mult^2`` bigger than the - original one. Currently, only supports scaling up (the default value - is 3). diff --git a/Documentation/media/v4l-drivers/vivid.rst b/Documentation/media/v4l-drivers/vivid.rst deleted file mode 100644 index 52e57b773f07..000000000000 --- a/Documentation/media/v4l-drivers/vivid.rst +++ /dev/null @@ -1,1393 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The Virtual Video Test Driver (vivid) -===================================== - -This driver emulates video4linux hardware of various types: video capture, video -output, vbi capture and output, metadata capture and output, radio receivers and -transmitters, touch capture and a software defined radio receiver. In addition a -simple framebuffer device is available for testing capture and output overlays. - -Up to 64 vivid instances can be created, each with up to 16 inputs and 16 outputs. - -Each input can be a webcam, TV capture device, S-Video capture device or an HDMI -capture device. Each output can be an S-Video output device or an HDMI output -device. - -These inputs and outputs act exactly as a real hardware device would behave. This -allows you to use this driver as a test input for application development, since -you can test the various features without requiring special hardware. - -This document describes the features implemented by this driver: - -- Support for read()/write(), MMAP, USERPTR and DMABUF streaming I/O. -- A large list of test patterns and variations thereof -- Working brightness, contrast, saturation and hue controls -- Support for the alpha color component -- Full colorspace support, including limited/full RGB range -- All possible control types are present -- Support for various pixel aspect ratios and video aspect ratios -- Error injection to test what happens if errors occur -- Supports crop/compose/scale in any combination for both input and output -- Can emulate up to 4K resolutions -- All Field settings are supported for testing interlaced capturing -- Supports all standard YUV and RGB formats, including two multiplanar YUV formats -- Raw and Sliced VBI capture and output support -- Radio receiver and transmitter support, including RDS support -- Software defined radio (SDR) support -- Capture and output overlay support -- Metadata capture and output support -- Touch capture support - -These features will be described in more detail below. - -Configuring the driver ----------------------- - -By default the driver will create a single instance that has a video capture -device with webcam, TV, S-Video and HDMI inputs, a video output device with -S-Video and HDMI outputs, one vbi capture device, one vbi output device, one -radio receiver device, one radio transmitter device and one SDR device. - -The number of instances, devices, video inputs and outputs and their types are -all configurable using the following module options: - -- n_devs: - - number of driver instances to create. By default set to 1. Up to 64 - instances can be created. - -- node_types: - - which devices should each driver instance create. An array of - hexadecimal values, one for each instance. The default is 0x1d3d. - Each value is a bitmask with the following meaning: - - - bit 0: Video Capture node - - bit 2-3: VBI Capture node: 0 = none, 1 = raw vbi, 2 = sliced vbi, 3 = both - - bit 4: Radio Receiver node - - bit 5: Software Defined Radio Receiver node - - bit 8: Video Output node - - bit 10-11: VBI Output node: 0 = none, 1 = raw vbi, 2 = sliced vbi, 3 = both - - bit 12: Radio Transmitter node - - bit 16: Framebuffer for testing overlays - - bit 17: Metadata Capture node - - bit 18: Metadata Output node - - bit 19: Touch Capture node - - So to create four instances, the first two with just one video capture - device, the second two with just one video output device you would pass - these module options to vivid: - - .. code-block:: none - - n_devs=4 node_types=0x1,0x1,0x100,0x100 - -- num_inputs: - - the number of inputs, one for each instance. By default 4 inputs - are created for each video capture device. At most 16 inputs can be created, - and there must be at least one. - -- input_types: - - the input types for each instance, the default is 0xe4. This defines - what the type of each input is when the inputs are created for each driver - instance. This is a hexadecimal value with up to 16 pairs of bits, each - pair gives the type and bits 0-1 map to input 0, bits 2-3 map to input 1, - 30-31 map to input 15. Each pair of bits has the following meaning: - - - 00: this is a webcam input - - 01: this is a TV tuner input - - 10: this is an S-Video input - - 11: this is an HDMI input - - So to create a video capture device with 8 inputs where input 0 is a TV - tuner, inputs 1-3 are S-Video inputs and inputs 4-7 are HDMI inputs you - would use the following module options: - - .. code-block:: none - - num_inputs=8 input_types=0xffa9 - -- num_outputs: - - the number of outputs, one for each instance. By default 2 outputs - are created for each video output device. At most 16 outputs can be - created, and there must be at least one. - -- output_types: - - the output types for each instance, the default is 0x02. This defines - what the type of each output is when the outputs are created for each - driver instance. This is a hexadecimal value with up to 16 bits, each bit - gives the type and bit 0 maps to output 0, bit 1 maps to output 1, bit - 15 maps to output 15. The meaning of each bit is as follows: - - - 0: this is an S-Video output - - 1: this is an HDMI output - - So to create a video output device with 8 outputs where outputs 0-3 are - S-Video outputs and outputs 4-7 are HDMI outputs you would use the - following module options: - - .. code-block:: none - - num_outputs=8 output_types=0xf0 - -- vid_cap_nr: - - give the desired videoX start number for each video capture device. - The default is -1 which will just take the first free number. This allows - you to map capture video nodes to specific videoX device nodes. Example: - - .. code-block:: none - - n_devs=4 vid_cap_nr=2,4,6,8 - - This will attempt to assign /dev/video2 for the video capture device of - the first vivid instance, video4 for the next up to video8 for the last - instance. If it can't succeed, then it will just take the next free - number. - -- vid_out_nr: - - give the desired videoX start number for each video output device. - The default is -1 which will just take the first free number. - -- vbi_cap_nr: - - give the desired vbiX start number for each vbi capture device. - The default is -1 which will just take the first free number. - -- vbi_out_nr: - - give the desired vbiX start number for each vbi output device. - The default is -1 which will just take the first free number. - -- radio_rx_nr: - - give the desired radioX start number for each radio receiver device. - The default is -1 which will just take the first free number. - -- radio_tx_nr: - - give the desired radioX start number for each radio transmitter - device. The default is -1 which will just take the first free number. - -- sdr_cap_nr: - - give the desired swradioX start number for each SDR capture device. - The default is -1 which will just take the first free number. - -- meta_cap_nr: - - give the desired videoX start number for each metadata capture device. - The default is -1 which will just take the first free number. - -- meta_out_nr: - - give the desired videoX start number for each metadata output device. - The default is -1 which will just take the first free number. - -- touch_cap_nr: - - give the desired v4l-touchX start number for each touch capture device. - The default is -1 which will just take the first free number. - -- ccs_cap_mode: - - specify the allowed video capture crop/compose/scaling combination - for each driver instance. Video capture devices can have any combination - of cropping, composing and scaling capabilities and this will tell the - vivid driver which of those is should emulate. By default the user can - select this through controls. - - The value is either -1 (controlled by the user) or a set of three bits, - each enabling (1) or disabling (0) one of the features: - - - bit 0: - - Enable crop support. Cropping will take only part of the - incoming picture. - - bit 1: - - Enable compose support. Composing will copy the incoming - picture into a larger buffer. - - - bit 2: - - Enable scaling support. Scaling can scale the incoming - picture. The scaler of the vivid driver can enlarge up - or down to four times the original size. The scaler is - very simple and low-quality. Simplicity and speed were - key, not quality. - - Note that this value is ignored by webcam inputs: those enumerate - discrete framesizes and that is incompatible with cropping, composing - or scaling. - -- ccs_out_mode: - - specify the allowed video output crop/compose/scaling combination - for each driver instance. Video output devices can have any combination - of cropping, composing and scaling capabilities and this will tell the - vivid driver which of those is should emulate. By default the user can - select this through controls. - - The value is either -1 (controlled by the user) or a set of three bits, - each enabling (1) or disabling (0) one of the features: - - - bit 0: - - Enable crop support. Cropping will take only part of the - outgoing buffer. - - - bit 1: - - Enable compose support. Composing will copy the incoming - buffer into a larger picture frame. - - - bit 2: - - Enable scaling support. Scaling can scale the incoming - buffer. The scaler of the vivid driver can enlarge up - or down to four times the original size. The scaler is - very simple and low-quality. Simplicity and speed were - key, not quality. - -- multiplanar: - - select whether each device instance supports multi-planar formats, - and thus the V4L2 multi-planar API. By default device instances are - single-planar. - - This module option can override that for each instance. Values are: - - - 1: this is a single-planar instance. - - 2: this is a multi-planar instance. - -- vivid_debug: - - enable driver debugging info - -- no_error_inj: - - if set disable the error injecting controls. This option is - needed in order to run a tool like v4l2-compliance. Tools like that - exercise all controls including a control like 'Disconnect' which - emulates a USB disconnect, making the device inaccessible and so - all tests that v4l2-compliance is doing will fail afterwards. - - There may be other situations as well where you want to disable the - error injection support of vivid. When this option is set, then the - controls that select crop, compose and scale behavior are also - removed. Unless overridden by ccs_cap_mode and/or ccs_out_mode the - will default to enabling crop, compose and scaling. - -- allocators: - - memory allocator selection, default is 0. It specifies the way buffers - will be allocated. - - - 0: vmalloc - - 1: dma-contig - -Taken together, all these module options allow you to precisely customize -the driver behavior and test your application with all sorts of permutations. -It is also very suitable to emulate hardware that is not yet available, e.g. -when developing software for a new upcoming device. - - -Video Capture -------------- - -This is probably the most frequently used feature. The video capture device -can be configured by using the module options num_inputs, input_types and -ccs_cap_mode (see section 1 for more detailed information), but by default -four inputs are configured: a webcam, a TV tuner, an S-Video and an HDMI -input, one input for each input type. Those are described in more detail -below. - -Special attention has been given to the rate at which new frames become -available. The jitter will be around 1 jiffie (that depends on the HZ -configuration of your kernel, so usually 1/100, 1/250 or 1/1000 of a second), -but the long-term behavior is exactly following the framerate. So a -framerate of 59.94 Hz is really different from 60 Hz. If the framerate -exceeds your kernel's HZ value, then you will get dropped frames, but the -frame/field sequence counting will keep track of that so the sequence -count will skip whenever frames are dropped. - - -Webcam Input -~~~~~~~~~~~~ - -The webcam input supports three framesizes: 320x180, 640x360 and 1280x720. It -supports frames per second settings of 10, 15, 25, 30, 50 and 60 fps. Which ones -are available depends on the chosen framesize: the larger the framesize, the -lower the maximum frames per second. - -The initially selected colorspace when you switch to the webcam input will be -sRGB. - - -TV and S-Video Inputs -~~~~~~~~~~~~~~~~~~~~~ - -The only difference between the TV and S-Video input is that the TV has a -tuner. Otherwise they behave identically. - -These inputs support audio inputs as well: one TV and one Line-In. They -both support all TV standards. If the standard is queried, then the Vivid -controls 'Standard Signal Mode' and 'Standard' determine what -the result will be. - -These inputs support all combinations of the field setting. Special care has -been taken to faithfully reproduce how fields are handled for the different -TV standards. This is particularly noticeable when generating a horizontally -moving image so the temporal effect of using interlaced formats becomes clearly -visible. For 50 Hz standards the top field is the oldest and the bottom field -is the newest in time. For 60 Hz standards that is reversed: the bottom field -is the oldest and the top field is the newest in time. - -When you start capturing in V4L2_FIELD_ALTERNATE mode the first buffer will -contain the top field for 50 Hz standards and the bottom field for 60 Hz -standards. This is what capture hardware does as well. - -Finally, for PAL/SECAM standards the first half of the top line contains noise. -This simulates the Wide Screen Signal that is commonly placed there. - -The initially selected colorspace when you switch to the TV or S-Video input -will be SMPTE-170M. - -The pixel aspect ratio will depend on the TV standard. The video aspect ratio -can be selected through the 'Standard Aspect Ratio' Vivid control. -Choices are '4x3', '16x9' which will give letterboxed widescreen video and -'16x9 Anamorphic' which will give full screen squashed anamorphic widescreen -video that will need to be scaled accordingly. - -The TV 'tuner' supports a frequency range of 44-958 MHz. Channels are available -every 6 MHz, starting from 49.25 MHz. For each channel the generated image -will be in color for the +/- 0.25 MHz around it, and in grayscale for -+/- 1 MHz around the channel. Beyond that it is just noise. The VIDIOC_G_TUNER -ioctl will return 100% signal strength for +/- 0.25 MHz and 50% for +/- 1 MHz. -It will also return correct afc values to show whether the frequency is too -low or too high. - -The audio subchannels that are returned are MONO for the +/- 1 MHz range around -a valid channel frequency. When the frequency is within +/- 0.25 MHz of the -channel it will return either MONO, STEREO, either MONO | SAP (for NTSC) or -LANG1 | LANG2 (for others), or STEREO | SAP. - -Which one is returned depends on the chosen channel, each next valid channel -will cycle through the possible audio subchannel combinations. This allows -you to test the various combinations by just switching channels.. - -Finally, for these inputs the v4l2_timecode struct is filled in in the -dequeued v4l2_buffer struct. - - -HDMI Input -~~~~~~~~~~ - -The HDMI inputs supports all CEA-861 and DMT timings, both progressive and -interlaced, for pixelclock frequencies between 25 and 600 MHz. The field -mode for interlaced formats is always V4L2_FIELD_ALTERNATE. For HDMI the -field order is always top field first, and when you start capturing an -interlaced format you will receive the top field first. - -The initially selected colorspace when you switch to the HDMI input or -select an HDMI timing is based on the format resolution: for resolutions -less than or equal to 720x576 the colorspace is set to SMPTE-170M, for -others it is set to REC-709 (CEA-861 timings) or sRGB (VESA DMT timings). - -The pixel aspect ratio will depend on the HDMI timing: for 720x480 is it -set as for the NTSC TV standard, for 720x576 it is set as for the PAL TV -standard, and for all others a 1:1 pixel aspect ratio is returned. - -The video aspect ratio can be selected through the 'DV Timings Aspect Ratio' -Vivid control. Choices are 'Source Width x Height' (just use the -same ratio as the chosen format), '4x3' or '16x9', either of which can -result in pillarboxed or letterboxed video. - -For HDMI inputs it is possible to set the EDID. By default a simple EDID -is provided. You can only set the EDID for HDMI inputs. Internally, however, -the EDID is shared between all HDMI inputs. - -No interpretation is done of the EDID data with the exception of the -physical address. See the CEC section for more details. - -There is a maximum of 15 HDMI inputs (if there are more, then they will be -reduced to 15) since that's the limitation of the EDID physical address. - - -Video Output ------------- - -The video output device can be configured by using the module options -num_outputs, output_types and ccs_out_mode (see section 1 for more detailed -information), but by default two outputs are configured: an S-Video and an -HDMI input, one output for each output type. Those are described in more detail -below. - -Like with video capture the framerate is also exact in the long term. - - -S-Video Output -~~~~~~~~~~~~~~ - -This output supports audio outputs as well: "Line-Out 1" and "Line-Out 2". -The S-Video output supports all TV standards. - -This output supports all combinations of the field setting. - -The initially selected colorspace when you switch to the TV or S-Video input -will be SMPTE-170M. - - -HDMI Output -~~~~~~~~~~~ - -The HDMI output supports all CEA-861 and DMT timings, both progressive and -interlaced, for pixelclock frequencies between 25 and 600 MHz. The field -mode for interlaced formats is always V4L2_FIELD_ALTERNATE. - -The initially selected colorspace when you switch to the HDMI output or -select an HDMI timing is based on the format resolution: for resolutions -less than or equal to 720x576 the colorspace is set to SMPTE-170M, for -others it is set to REC-709 (CEA-861 timings) or sRGB (VESA DMT timings). - -The pixel aspect ratio will depend on the HDMI timing: for 720x480 is it -set as for the NTSC TV standard, for 720x576 it is set as for the PAL TV -standard, and for all others a 1:1 pixel aspect ratio is returned. - -An HDMI output has a valid EDID which can be obtained through VIDIOC_G_EDID. - -There is a maximum of 15 HDMI outputs (if there are more, then they will be -reduced to 15) since that's the limitation of the EDID physical address. See -also the CEC section for more details. - -VBI Capture ------------ - -There are three types of VBI capture devices: those that only support raw -(undecoded) VBI, those that only support sliced (decoded) VBI and those that -support both. This is determined by the node_types module option. In all -cases the driver will generate valid VBI data: for 60 Hz standards it will -generate Closed Caption and XDS data. The closed caption stream will -alternate between "Hello world!" and "Closed captions test" every second. -The XDS stream will give the current time once a minute. For 50 Hz standards -it will generate the Wide Screen Signal which is based on the actual Video -Aspect Ratio control setting and teletext pages 100-159, one page per frame. - -The VBI device will only work for the S-Video and TV inputs, it will give -back an error if the current input is a webcam or HDMI. - - -VBI Output ----------- - -There are three types of VBI output devices: those that only support raw -(undecoded) VBI, those that only support sliced (decoded) VBI and those that -support both. This is determined by the node_types module option. - -The sliced VBI output supports the Wide Screen Signal and the teletext signal -for 50 Hz standards and Closed Captioning + XDS for 60 Hz standards. - -The VBI device will only work for the S-Video output, it will give -back an error if the current output is HDMI. - - -Radio Receiver --------------- - -The radio receiver emulates an FM/AM/SW receiver. The FM band also supports RDS. -The frequency ranges are: - - - FM: 64 MHz - 108 MHz - - AM: 520 kHz - 1710 kHz - - SW: 2300 kHz - 26.1 MHz - -Valid channels are emulated every 1 MHz for FM and every 100 kHz for AM and SW. -The signal strength decreases the further the frequency is from the valid -frequency until it becomes 0% at +/- 50 kHz (FM) or 5 kHz (AM/SW) from the -ideal frequency. The initial frequency when the driver is loaded is set to -95 MHz. - -The FM receiver supports RDS as well, both using 'Block I/O' and 'Controls' -modes. In the 'Controls' mode the RDS information is stored in read-only -controls. These controls are updated every time the frequency is changed, -or when the tuner status is requested. The Block I/O method uses the read() -interface to pass the RDS blocks on to the application for decoding. - -The RDS signal is 'detected' for +/- 12.5 kHz around the channel frequency, -and the further the frequency is away from the valid frequency the more RDS -errors are randomly introduced into the block I/O stream, up to 50% of all -blocks if you are +/- 12.5 kHz from the channel frequency. All four errors -can occur in equal proportions: blocks marked 'CORRECTED', blocks marked -'ERROR', blocks marked 'INVALID' and dropped blocks. - -The generated RDS stream contains all the standard fields contained in a -0B group, and also radio text and the current time. - -The receiver supports HW frequency seek, either in Bounded mode, Wrap Around -mode or both, which is configurable with the "Radio HW Seek Mode" control. - - -Radio Transmitter ------------------ - -The radio transmitter emulates an FM/AM/SW transmitter. The FM band also supports RDS. -The frequency ranges are: - - - FM: 64 MHz - 108 MHz - - AM: 520 kHz - 1710 kHz - - SW: 2300 kHz - 26.1 MHz - -The initial frequency when the driver is loaded is 95.5 MHz. - -The FM transmitter supports RDS as well, both using 'Block I/O' and 'Controls' -modes. In the 'Controls' mode the transmitted RDS information is configured -using controls, and in 'Block I/O' mode the blocks are passed to the driver -using write(). - - -Software Defined Radio Receiver -------------------------------- - -The SDR receiver has three frequency bands for the ADC tuner: - - - 300 kHz - - 900 kHz - 2800 kHz - - 3200 kHz - -The RF tuner supports 50 MHz - 2000 MHz. - -The generated data contains the In-phase and Quadrature components of a -1 kHz tone that has an amplitude of sqrt(2). - - -Metadata Capture ----------------- - -The Metadata capture generates UVC format metadata. The PTS and SCR are -transmitted based on the values set in vivid contols. - -The Metadata device will only work for the Webcam input, it will give -back an error for all other inputs. - - -Metadata Output ---------------- - -The Metadata output can be used to set brightness, contrast, saturation and hue. - -The Metadata device will only work for the Webcam output, it will give -back an error for all other outputs. - - -Touch Capture -------------- - -The Touch capture generates touch patterns simulating single tap, double tap, -triple tap, move from left to right, zoom in, zoom out, palm press (simulating -a large area being pressed on a touchpad), and simulating 16 simultaneous -touch points. - -Controls --------- - -Different devices support different controls. The sections below will describe -each control and which devices support them. - - -User Controls - Test Controls -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The Button, Boolean, Integer 32 Bits, Integer 64 Bits, Menu, String, Bitmask and -Integer Menu are controls that represent all possible control types. The Menu -control and the Integer Menu control both have 'holes' in their menu list, -meaning that one or more menu items return EINVAL when VIDIOC_QUERYMENU is called. -Both menu controls also have a non-zero minimum control value. These features -allow you to check if your application can handle such things correctly. -These controls are supported for every device type. - - -User Controls - Video Capture -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following controls are specific to video capture. - -The Brightness, Contrast, Saturation and Hue controls actually work and are -standard. There is one special feature with the Brightness control: each -video input has its own brightness value, so changing input will restore -the brightness for that input. In addition, each video input uses a different -brightness range (minimum and maximum control values). Switching inputs will -cause a control event to be sent with the V4L2_EVENT_CTRL_CH_RANGE flag set. -This allows you to test controls that can change their range. - -The 'Gain, Automatic' and Gain controls can be used to test volatile controls: -if 'Gain, Automatic' is set, then the Gain control is volatile and changes -constantly. If 'Gain, Automatic' is cleared, then the Gain control is a normal -control. - -The 'Horizontal Flip' and 'Vertical Flip' controls can be used to flip the -image. These combine with the 'Sensor Flipped Horizontally/Vertically' Vivid -controls. - -The 'Alpha Component' control can be used to set the alpha component for -formats containing an alpha channel. - - -User Controls - Audio -~~~~~~~~~~~~~~~~~~~~~ - -The following controls are specific to video capture and output and radio -receivers and transmitters. - -The 'Volume' and 'Mute' audio controls are typical for such devices to -control the volume and mute the audio. They don't actually do anything in -the vivid driver. - - -Vivid Controls -~~~~~~~~~~~~~~ - -These vivid custom controls control the image generation, error injection, etc. - - -Test Pattern Controls -^^^^^^^^^^^^^^^^^^^^^ - -The Test Pattern Controls are all specific to video capture. - -- Test Pattern: - - selects which test pattern to use. Use the CSC Colorbar for - testing colorspace conversions: the colors used in that test pattern - map to valid colors in all colorspaces. The colorspace conversion - is disabled for the other test patterns. - -- OSD Text Mode: - - selects whether the text superimposed on the - test pattern should be shown, and if so, whether only counters should - be displayed or the full text. - -- Horizontal Movement: - - selects whether the test pattern should - move to the left or right and at what speed. - -- Vertical Movement: - - does the same for the vertical direction. - -- Show Border: - - show a two-pixel wide border at the edge of the actual image, - excluding letter or pillarboxing. - -- Show Square: - - show a square in the middle of the image. If the image is - displayed with the correct pixel and image aspect ratio corrections, - then the width and height of the square on the monitor should be - the same. - -- Insert SAV Code in Image: - - adds a SAV (Start of Active Video) code to the image. - This can be used to check if such codes in the image are inadvertently - interpreted instead of being ignored. - -- Insert EAV Code in Image: - - does the same for the EAV (End of Active Video) code. - - -Capture Feature Selection Controls -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These controls are all specific to video capture. - -- Sensor Flipped Horizontally: - - the image is flipped horizontally and the - V4L2_IN_ST_HFLIP input status flag is set. This emulates the case where - a sensor is for example mounted upside down. - -- Sensor Flipped Vertically: - - the image is flipped vertically and the - V4L2_IN_ST_VFLIP input status flag is set. This emulates the case where - a sensor is for example mounted upside down. - -- Standard Aspect Ratio: - - selects if the image aspect ratio as used for the TV or - S-Video input should be 4x3, 16x9 or anamorphic widescreen. This may - introduce letterboxing. - -- DV Timings Aspect Ratio: - - selects if the image aspect ratio as used for the HDMI - input should be the same as the source width and height ratio, or if - it should be 4x3 or 16x9. This may introduce letter or pillarboxing. - -- Timestamp Source: - - selects when the timestamp for each buffer is taken. - -- Colorspace: - - selects which colorspace should be used when generating the image. - This only applies if the CSC Colorbar test pattern is selected, - otherwise the test pattern will go through unconverted. - This behavior is also what you want, since a 75% Colorbar - should really have 75% signal intensity and should not be affected - by colorspace conversions. - - Changing the colorspace will result in the V4L2_EVENT_SOURCE_CHANGE - to be sent since it emulates a detected colorspace change. - -- Transfer Function: - - selects which colorspace transfer function should be used when - generating an image. This only applies if the CSC Colorbar test pattern is - selected, otherwise the test pattern will go through unconverted. - This behavior is also what you want, since a 75% Colorbar - should really have 75% signal intensity and should not be affected - by colorspace conversions. - - Changing the transfer function will result in the V4L2_EVENT_SOURCE_CHANGE - to be sent since it emulates a detected colorspace change. - -- Y'CbCr Encoding: - - selects which Y'CbCr encoding should be used when generating - a Y'CbCr image. This only applies if the format is set to a Y'CbCr format - as opposed to an RGB format. - - Changing the Y'CbCr encoding will result in the V4L2_EVENT_SOURCE_CHANGE - to be sent since it emulates a detected colorspace change. - -- Quantization: - - selects which quantization should be used for the RGB or Y'CbCr - encoding when generating the test pattern. - - Changing the quantization will result in the V4L2_EVENT_SOURCE_CHANGE - to be sent since it emulates a detected colorspace change. - -- Limited RGB Range (16-235): - - selects if the RGB range of the HDMI source should - be limited or full range. This combines with the Digital Video 'Rx RGB - Quantization Range' control and can be used to test what happens if - a source provides you with the wrong quantization range information. - See the description of that control for more details. - -- Apply Alpha To Red Only: - - apply the alpha channel as set by the 'Alpha Component' - user control to the red color of the test pattern only. - -- Enable Capture Cropping: - - enables crop support. This control is only present if - the ccs_cap_mode module option is set to the default value of -1 and if - the no_error_inj module option is set to 0 (the default). - -- Enable Capture Composing: - - enables composing support. This control is only - present if the ccs_cap_mode module option is set to the default value of - -1 and if the no_error_inj module option is set to 0 (the default). - -- Enable Capture Scaler: - - enables support for a scaler (maximum 4 times upscaling - and downscaling). This control is only present if the ccs_cap_mode - module option is set to the default value of -1 and if the no_error_inj - module option is set to 0 (the default). - -- Maximum EDID Blocks: - - determines how many EDID blocks the driver supports. - Note that the vivid driver does not actually interpret new EDID - data, it just stores it. It allows for up to 256 EDID blocks - which is the maximum supported by the standard. - -- Fill Percentage of Frame: - - can be used to draw only the top X percent - of the image. Since each frame has to be drawn by the driver, this - demands a lot of the CPU. For large resolutions this becomes - problematic. By drawing only part of the image this CPU load can - be reduced. - - -Output Feature Selection Controls -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -These controls are all specific to video output. - -- Enable Output Cropping: - - enables crop support. This control is only present if - the ccs_out_mode module option is set to the default value of -1 and if - the no_error_inj module option is set to 0 (the default). - -- Enable Output Composing: - - enables composing support. This control is only - present if the ccs_out_mode module option is set to the default value of - -1 and if the no_error_inj module option is set to 0 (the default). - -- Enable Output Scaler: - - enables support for a scaler (maximum 4 times upscaling - and downscaling). This control is only present if the ccs_out_mode - module option is set to the default value of -1 and if the no_error_inj - module option is set to 0 (the default). - - -Error Injection Controls -^^^^^^^^^^^^^^^^^^^^^^^^ - -The following two controls are only valid for video and vbi capture. - -- Standard Signal Mode: - - selects the behavior of VIDIOC_QUERYSTD: what should it return? - - Changing this control will result in the V4L2_EVENT_SOURCE_CHANGE - to be sent since it emulates a changed input condition (e.g. a cable - was plugged in or out). - -- Standard: - - selects the standard that VIDIOC_QUERYSTD should return if the - previous control is set to "Selected Standard". - - Changing this control will result in the V4L2_EVENT_SOURCE_CHANGE - to be sent since it emulates a changed input standard. - - -The following two controls are only valid for video capture. - -- DV Timings Signal Mode: - - selects the behavior of VIDIOC_QUERY_DV_TIMINGS: what - should it return? - - Changing this control will result in the V4L2_EVENT_SOURCE_CHANGE - to be sent since it emulates a changed input condition (e.g. a cable - was plugged in or out). - -- DV Timings: - - selects the timings the VIDIOC_QUERY_DV_TIMINGS should return - if the previous control is set to "Selected DV Timings". - - Changing this control will result in the V4L2_EVENT_SOURCE_CHANGE - to be sent since it emulates changed input timings. - - -The following controls are only present if the no_error_inj module option -is set to 0 (the default). These controls are valid for video and vbi -capture and output streams and for the SDR capture device except for the -Disconnect control which is valid for all devices. - -- Wrap Sequence Number: - - test what happens when you wrap the sequence number in - struct v4l2_buffer around. - -- Wrap Timestamp: - - test what happens when you wrap the timestamp in struct - v4l2_buffer around. - -- Percentage of Dropped Buffers: - - sets the percentage of buffers that - are never returned by the driver (i.e., they are dropped). - -- Disconnect: - - emulates a USB disconnect. The device will act as if it has - been disconnected. Only after all open filehandles to the device - node have been closed will the device become 'connected' again. - -- Inject V4L2_BUF_FLAG_ERROR: - - when pressed, the next frame returned by - the driver will have the error flag set (i.e. the frame is marked - corrupt). - -- Inject VIDIOC_REQBUFS Error: - - when pressed, the next REQBUFS or CREATE_BUFS - ioctl call will fail with an error. To be precise: the videobuf2 - queue_setup() op will return -EINVAL. - -- Inject VIDIOC_QBUF Error: - - when pressed, the next VIDIOC_QBUF or - VIDIOC_PREPARE_BUFFER ioctl call will fail with an error. To be - precise: the videobuf2 buf_prepare() op will return -EINVAL. - -- Inject VIDIOC_STREAMON Error: - - when pressed, the next VIDIOC_STREAMON ioctl - call will fail with an error. To be precise: the videobuf2 - start_streaming() op will return -EINVAL. - -- Inject Fatal Streaming Error: - - when pressed, the streaming core will be - marked as having suffered a fatal error, the only way to recover - from that is to stop streaming. To be precise: the videobuf2 - vb2_queue_error() function is called. - - -VBI Raw Capture Controls -^^^^^^^^^^^^^^^^^^^^^^^^ - -- Interlaced VBI Format: - - if set, then the raw VBI data will be interlaced instead - of providing it grouped by field. - - -Digital Video Controls -~~~~~~~~~~~~~~~~~~~~~~ - -- Rx RGB Quantization Range: - - sets the RGB quantization detection of the HDMI - input. This combines with the Vivid 'Limited RGB Range (16-235)' - control and can be used to test what happens if a source provides - you with the wrong quantization range information. This can be tested - by selecting an HDMI input, setting this control to Full or Limited - range and selecting the opposite in the 'Limited RGB Range (16-235)' - control. The effect is easy to see if the 'Gray Ramp' test pattern - is selected. - -- Tx RGB Quantization Range: - - sets the RGB quantization detection of the HDMI - output. It is currently not used for anything in vivid, but most HDMI - transmitters would typically have this control. - -- Transmit Mode: - - sets the transmit mode of the HDMI output to HDMI or DVI-D. This - affects the reported colorspace since DVI_D outputs will always use - sRGB. - -- Display Present: - - sets the presence of a "display" on the HDMI output. This affects - the tx_edid_present, tx_hotplug and tx_rxsense controls. - - -FM Radio Receiver Controls -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- RDS Reception: - - set if the RDS receiver should be enabled. - -- RDS Program Type: - - -- RDS PS Name: - - -- RDS Radio Text: - - -- RDS Traffic Announcement: - - -- RDS Traffic Program: - - -- RDS Music: - - these are all read-only controls. If RDS Rx I/O Mode is set to - "Block I/O", then they are inactive as well. If RDS Rx I/O Mode is set - to "Controls", then these controls report the received RDS data. - -.. note:: - The vivid implementation of this is pretty basic: they are only - updated when you set a new frequency or when you get the tuner status - (VIDIOC_G_TUNER). - -- Radio HW Seek Mode: - - can be one of "Bounded", "Wrap Around" or "Both". This - determines if VIDIOC_S_HW_FREQ_SEEK will be bounded by the frequency - range or wrap-around or if it is selectable by the user. - -- Radio Programmable HW Seek: - - if set, then the user can provide the lower and - upper bound of the HW Seek. Otherwise the frequency range boundaries - will be used. - -- Generate RBDS Instead of RDS: - - if set, then generate RBDS (the US variant of - RDS) data instead of RDS (European-style RDS). This affects only the - PICODE and PTY codes. - -- RDS Rx I/O Mode: - - this can be "Block I/O" where the RDS blocks have to be read() - by the application, or "Controls" where the RDS data is provided by - the RDS controls mentioned above. - - -FM Radio Modulator Controls -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- RDS Program ID: - - -- RDS Program Type: - - -- RDS PS Name: - - -- RDS Radio Text: - - -- RDS Stereo: - - -- RDS Artificial Head: - - -- RDS Compressed: - - -- RDS Dynamic PTY: - - -- RDS Traffic Announcement: - - -- RDS Traffic Program: - - -- RDS Music: - - these are all controls that set the RDS data that is transmitted by - the FM modulator. - -- RDS Tx I/O Mode: - - this can be "Block I/O" where the application has to use write() - to pass the RDS blocks to the driver, or "Controls" where the RDS data - is Provided by the RDS controls mentioned above. - -Metadata Capture Controls -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- Generate PTS - - if set, then the generated metadata stream contains Presentation timestamp. - -- Generate SCR - - if set, then the generated metadata stream contains Source Clock information. - -Video, VBI and RDS Looping --------------------------- - -The vivid driver supports looping of video output to video input, VBI output -to VBI input and RDS output to RDS input. For video/VBI looping this emulates -as if a cable was hooked up between the output and input connector. So video -and VBI looping is only supported between S-Video and HDMI inputs and outputs. -VBI is only valid for S-Video as it makes no sense for HDMI. - -Since radio is wireless this looping always happens if the radio receiver -frequency is close to the radio transmitter frequency. In that case the radio -transmitter will 'override' the emulated radio stations. - -Looping is currently supported only between devices created by the same -vivid driver instance. - - -Video and Sliced VBI looping -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The way to enable video/VBI looping is currently fairly crude. A 'Loop Video' -control is available in the "Vivid" control class of the video -capture and VBI capture devices. When checked the video looping will be enabled. -Once enabled any video S-Video or HDMI input will show a static test pattern -until the video output has started. At that time the video output will be -looped to the video input provided that: - -- the input type matches the output type. So the HDMI input cannot receive - video from the S-Video output. - -- the video resolution of the video input must match that of the video output. - So it is not possible to loop a 50 Hz (720x576) S-Video output to a 60 Hz - (720x480) S-Video input, or a 720p60 HDMI output to a 1080p30 input. - -- the pixel formats must be identical on both sides. Otherwise the driver would - have to do pixel format conversion as well, and that's taking things too far. - -- the field settings must be identical on both sides. Same reason as above: - requiring the driver to convert from one field format to another complicated - matters too much. This also prohibits capturing with 'Field Top' or 'Field - Bottom' when the output video is set to 'Field Alternate'. This combination, - while legal, became too complicated to support. Both sides have to be 'Field - Alternate' for this to work. Also note that for this specific case the - sequence and field counting in struct v4l2_buffer on the capture side may not - be 100% accurate. - -- field settings V4L2_FIELD_SEQ_TB/BT are not supported. While it is possible to - implement this, it would mean a lot of work to get this right. Since these - field values are rarely used the decision was made not to implement this for - now. - -- on the input side the "Standard Signal Mode" for the S-Video input or the - "DV Timings Signal Mode" for the HDMI input should be configured so that a - valid signal is passed to the video input. - -The framerates do not have to match, although this might change in the future. - -By default you will see the OSD text superimposed on top of the looped video. -This can be turned off by changing the "OSD Text Mode" control of the video -capture device. - -For VBI looping to work all of the above must be valid and in addition the vbi -output must be configured for sliced VBI. The VBI capture side can be configured -for either raw or sliced VBI. Note that at the moment only CC/XDS (60 Hz formats) -and WSS (50 Hz formats) VBI data is looped. Teletext VBI data is not looped. - - -Radio & RDS Looping -~~~~~~~~~~~~~~~~~~~ - -As mentioned in section 6 the radio receiver emulates stations are regular -frequency intervals. Depending on the frequency of the radio receiver a -signal strength value is calculated (this is returned by VIDIOC_G_TUNER). -However, it will also look at the frequency set by the radio transmitter and -if that results in a higher signal strength than the settings of the radio -transmitter will be used as if it was a valid station. This also includes -the RDS data (if any) that the transmitter 'transmits'. This is received -faithfully on the receiver side. Note that when the driver is loaded the -frequencies of the radio receiver and transmitter are not identical, so -initially no looping takes place. - - -Cropping, Composing, Scaling ----------------------------- - -This driver supports cropping, composing and scaling in any combination. Normally -which features are supported can be selected through the Vivid controls, -but it is also possible to hardcode it when the module is loaded through the -ccs_cap_mode and ccs_out_mode module options. See section 1 on the details of -these module options. - -This allows you to test your application for all these variations. - -Note that the webcam input never supports cropping, composing or scaling. That -only applies to the TV/S-Video/HDMI inputs and outputs. The reason is that -webcams, including this virtual implementation, normally use -VIDIOC_ENUM_FRAMESIZES to list a set of discrete framesizes that it supports. -And that does not combine with cropping, composing or scaling. This is -primarily a limitation of the V4L2 API which is carefully reproduced here. - -The minimum and maximum resolutions that the scaler can achieve are 16x16 and -(4096 * 4) x (2160 x 4), but it can only scale up or down by a factor of 4 or -less. So for a source resolution of 1280x720 the minimum the scaler can do is -320x180 and the maximum is 5120x2880. You can play around with this using the -qv4l2 test tool and you will see these dependencies. - -This driver also supports larger 'bytesperline' settings, something that -VIDIOC_S_FMT allows but that few drivers implement. - -The scaler is a simple scaler that uses the Coarse Bresenham algorithm. It's -designed for speed and simplicity, not quality. - -If the combination of crop, compose and scaling allows it, then it is possible -to change crop and compose rectangles on the fly. - - -Formats -------- - -The driver supports all the regular packed and planar 4:4:4, 4:2:2 and 4:2:0 -YUYV formats, 8, 16, 24 and 32 RGB packed formats and various multiplanar -formats. - -The alpha component can be set through the 'Alpha Component' User control -for those formats that support it. If the 'Apply Alpha To Red Only' control -is set, then the alpha component is only used for the color red and set to -0 otherwise. - -The driver has to be configured to support the multiplanar formats. By default -the driver instances are single-planar. This can be changed by setting the -multiplanar module option, see section 1 for more details on that option. - -If the driver instance is using the multiplanar formats/API, then the first -single planar format (YUYV) and the multiplanar NV16M and NV61M formats the -will have a plane that has a non-zero data_offset of 128 bytes. It is rare for -data_offset to be non-zero, so this is a useful feature for testing applications. - -Video output will also honor any data_offset that the application set. - - -Capture Overlay ---------------- - -Note: capture overlay support is implemented primarily to test the existing -V4L2 capture overlay API. In practice few if any GPUs support such overlays -anymore, and neither are they generally needed anymore since modern hardware -is so much more capable. By setting flag 0x10000 in the node_types module -option the vivid driver will create a simple framebuffer device that can be -used for testing this API. Whether this API should be used for new drivers is -questionable. - -This driver has support for a destructive capture overlay with bitmap clipping -and list clipping (up to 16 rectangles) capabilities. Overlays are not -supported for multiplanar formats. It also honors the struct v4l2_window field -setting: if it is set to FIELD_TOP or FIELD_BOTTOM and the capture setting is -FIELD_ALTERNATE, then only the top or bottom fields will be copied to the overlay. - -The overlay only works if you are also capturing at that same time. This is a -vivid limitation since it copies from a buffer to the overlay instead of -filling the overlay directly. And if you are not capturing, then no buffers -are available to fill. - -In addition, the pixelformat of the capture format and that of the framebuffer -must be the same for the overlay to work. Otherwise VIDIOC_OVERLAY will return -an error. - -In order to really see what it going on you will need to create two vivid -instances: the first with a framebuffer enabled. You configure the capture -overlay of the second instance to use the framebuffer of the first, then -you start capturing in the second instance. For the first instance you setup -the output overlay for the video output, turn on video looping and capture -to see the blended framebuffer overlay that's being written to by the second -instance. This setup would require the following commands: - -.. code-block:: none - - $ sudo modprobe vivid n_devs=2 node_types=0x10101,0x1 - $ v4l2-ctl -d1 --find-fb - /dev/fb1 is the framebuffer associated with base address 0x12800000 - $ sudo v4l2-ctl -d2 --set-fbuf fb=1 - $ v4l2-ctl -d1 --set-fbuf fb=1 - $ v4l2-ctl -d0 --set-fmt-video=pixelformat='AR15' - $ v4l2-ctl -d1 --set-fmt-video-out=pixelformat='AR15' - $ v4l2-ctl -d2 --set-fmt-video=pixelformat='AR15' - $ v4l2-ctl -d0 -i2 - $ v4l2-ctl -d2 -i2 - $ v4l2-ctl -d2 -c horizontal_movement=4 - $ v4l2-ctl -d1 --overlay=1 - $ v4l2-ctl -d1 -c loop_video=1 - $ v4l2-ctl -d2 --stream-mmap --overlay=1 - -And from another console: - -.. code-block:: none - - $ v4l2-ctl -d1 --stream-out-mmap - -And yet another console: - -.. code-block:: none - - $ qv4l2 - -and start streaming. - -As you can see, this is not for the faint of heart... - - -Output Overlay --------------- - -Note: output overlays are primarily implemented in order to test the existing -V4L2 output overlay API. Whether this API should be used for new drivers is -questionable. - -This driver has support for an output overlay and is capable of: - - - bitmap clipping, - - list clipping (up to 16 rectangles) - - chromakey - - source chromakey - - global alpha - - local alpha - - local inverse alpha - -Output overlays are not supported for multiplanar formats. In addition, the -pixelformat of the capture format and that of the framebuffer must be the -same for the overlay to work. Otherwise VIDIOC_OVERLAY will return an error. - -Output overlays only work if the driver has been configured to create a -framebuffer by setting flag 0x10000 in the node_types module option. The -created framebuffer has a size of 720x576 and supports ARGB 1:5:5:5 and -RGB 5:6:5. - -In order to see the effects of the various clipping, chromakeying or alpha -processing capabilities you need to turn on video looping and see the results -on the capture side. The use of the clipping, chromakeying or alpha processing -capabilities will slow down the video loop considerably as a lot of checks have -to be done per pixel. - - -CEC (Consumer Electronics Control) ----------------------------------- - -If there are HDMI inputs then a CEC adapter will be created that has -the same number of input ports. This is the equivalent of e.g. a TV that -has that number of inputs. Each HDMI output will also create a -CEC adapter that is hooked up to the corresponding input port, or (if there -are more outputs than inputs) is not hooked up at all. In other words, -this is the equivalent of hooking up each output device to an input port of -the TV. Any remaining output devices remain unconnected. - -The EDID that each output reads reports a unique CEC physical address that is -based on the physical address of the EDID of the input. So if the EDID of the -receiver has physical address A.B.0.0, then each output will see an EDID -containing physical address A.B.C.0 where C is 1 to the number of inputs. If -there are more outputs than inputs then the remaining outputs have a CEC adapter -that is disabled and reports an invalid physical address. - - -Some Future Improvements ------------------------- - -Just as a reminder and in no particular order: - -- Add a virtual alsa driver to test audio -- Add virtual sub-devices and media controller support -- Some support for testing compressed video -- Add support to loop raw VBI output to raw VBI input -- Add support to loop teletext sliced VBI output to VBI input -- Fix sequence/field numbering when looping of video with alternate fields -- Add support for V4L2_CID_BG_COLOR for video outputs -- Add ARGB888 overlay support: better testing of the alpha channel -- Improve pixel aspect support in the tpg code by passing a real v4l2_fract -- Use per-queue locks and/or per-device locks to improve throughput -- Add support to loop from a specific output to a specific input across - vivid instances -- The SDR radio should use the same 'frequencies' for stations as the normal - radio receiver, and give back noise if the frequency doesn't match up with - a station frequency -- Make a thread for the RDS generation, that would help in particular for the - "Controls" RDS Rx I/O Mode as the read-only RDS controls could be updated - in real-time. -- Changing the EDID should cause hotplug detect emulation to happen. diff --git a/Documentation/media/v4l-drivers/zr364xx.rst b/Documentation/media/v4l-drivers/zr364xx.rst deleted file mode 100644 index ec8acb3e98fc..000000000000 --- a/Documentation/media/v4l-drivers/zr364xx.rst +++ /dev/null @@ -1,110 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Zoran 364xx based USB webcam module -=================================== - -site: http://royale.zerezo.com/zr364xx/ - -mail: royale@zerezo.com - -.. note:: - - This documentation is outdated - -Introduction ------------- - - -This brings support under Linux for the Aiptek PocketDV 3300 in webcam -mode. If you just want to get on your PC the pictures and movies on the -camera, you should use the usb-storage module instead. - -The driver works with several other cameras in webcam mode (see the list -below). - -Maybe this code can work for other JPEG/USB cams based on the Coach -chips from Zoran? - -Possible chipsets are : ZR36430 (ZR36430BGC) and -maybe ZR36431, ZR36440, ZR36442... - -You can try the experience changing the vendor/product ID values (look -at the source code). - -You can get these values by looking at /var/log/messages when you plug -your camera, or by typing : cat /sys/kernel/debug/usb/devices. - -If you manage to use your cam with this code, you can send me a mail -(royale@zerezo.com) with the name of your cam and a patch if needed. - -This is a beta release of the driver. Since version 0.70, this driver is -only compatible with V4L2 API and 2.6.x kernels. If you need V4L1 or -2.4x kernels support, please use an older version, but the code is not -maintained anymore. Good luck! - -Install -------- - -In order to use this driver, you must compile it with your kernel. - -Location: Device Drivers -> Multimedia devices -> Video For Linux -> Video Capture Adapters -> V4L USB devices - -Usage ------ - -modprobe zr364xx debug=X mode=Y - -- debug : set to 1 to enable verbose debug messages -- mode : 0 = 320x240, 1 = 160x120, 2 = 640x480 - -You can then use the camera with V4L2 compatible applications, for -example Ekiga. - -To capture a single image, try this: dd if=/dev/video0 of=test.jpg bs=1M -count=1 - -links ------ - -http://mxhaard.free.fr/ (support for many others cams including some Aiptek PocketDV) -http://www.harmwal.nl/pccam880/ (this project also supports cameras based on this chipset) - -Supported devices ------------------ - -====== ======= ============== ==================== -Vendor Product Distributor Model -====== ======= ============== ==================== -0x08ca 0x0109 Aiptek PocketDV 3300 -0x08ca 0x0109 Maxell Maxcam PRO DV3 -0x041e 0x4024 Creative PC-CAM 880 -0x0d64 0x0108 Aiptek Fidelity 3200 -0x0d64 0x0108 Praktica DCZ 1.3 S -0x0d64 0x0108 Genius Digital Camera (?) -0x0d64 0x0108 DXG Technology Fashion Cam -0x0546 0x3187 Polaroid iON 230 -0x0d64 0x3108 Praktica Exakta DC 2200 -0x0d64 0x3108 Genius G-Shot D211 -0x0595 0x4343 Concord Eye-Q Duo 1300 -0x0595 0x4343 Concord Eye-Q Duo 2000 -0x0595 0x4343 Fujifilm EX-10 -0x0595 0x4343 Ricoh RDC-6000 -0x0595 0x4343 Digitrex DSC 1300 -0x0595 0x4343 Firstline FDC 2000 -0x0bb0 0x500d Concord EyeQ Go Wireless -0x0feb 0x2004 CRS Electronic 3.3 Digital Camera -0x0feb 0x2004 Packard Bell DSC-300 -0x055f 0xb500 Mustek MDC 3000 -0x08ca 0x2062 Aiptek PocketDV 5700 -0x052b 0x1a18 Chiphead Megapix V12 -0x04c8 0x0729 Konica Revio 2 -0x04f2 0xa208 Creative PC-CAM 850 -0x0784 0x0040 Traveler Slimline X5 -0x06d6 0x0034 Trust Powerc@m 750 -0x0a17 0x0062 Pentax Optio 50L -0x06d6 0x003b Trust Powerc@m 970Z -0x0a17 0x004e Pentax Optio 50 -0x041e 0x405d Creative DiVi CAM 516 -0x08ca 0x2102 Aiptek DV T300 -0x06d6 0x003d Trust Powerc@m 910Z -====== ======= ============== ==================== diff --git a/Documentation/translations/zh_CN/video4linux/omap3isp.txt b/Documentation/translations/zh_CN/video4linux/omap3isp.txt index e9f29375aa95..75e481985630 100644 --- a/Documentation/translations/zh_CN/video4linux/omap3isp.txt +++ b/Documentation/translations/zh_CN/video4linux/omap3isp.txt @@ -1,4 +1,4 @@ -Chinese translated version of Documentation/media/v4l-drivers/omap3isp.rst +Chinese translated version of Documentation/admin-guide/media/omap3isp.rst If you have any comment or update to the content, please contact the original document maintainer directly. However, if you have a problem @@ -11,7 +11,7 @@ Maintainer: Laurent Pinchart David Cohen Chinese maintainer: Fu Wei --------------------------------------------------------------------- -Documentation/media/v4l-drivers/omap3isp.rst 的中文翻译 +Documentation/admin-guide/media/omap3isp.rst 的中文翻译 如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文 交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻 diff --git a/Documentation/userspace-api/media/v4l/dev-sliced-vbi.rst b/Documentation/userspace-api/media/v4l/dev-sliced-vbi.rst index 0767299e9105..751c6590e774 100644 --- a/Documentation/userspace-api/media/v4l/dev-sliced-vbi.rst +++ b/Documentation/userspace-api/media/v4l/dev-sliced-vbi.rst @@ -438,7 +438,7 @@ MPEG stream. *Historical context*: This format specification originates from a custom, embedded, sliced VBI data format used by the ``ivtv`` driver. This format has already been informally specified in the kernel sources -in the file ``Documentation/media/v4l-drivers/cx2341x.rst`` . The +in the file ``Documentation/media/v4l-drivers/cx2341x-uapi.rst`` . The maximum size of the payload and other aspects of this format are driven by the CX23415 MPEG decoder's capabilities and limitations with respect to extracting, decoding, and displaying sliced VBI data embedded within diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst index f64f6fc4fd75..f81016c97a0d 100644 --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst @@ -116,7 +116,7 @@ enum v4l2_mpeg_stream_vbi_fmt - * - ``V4L2_MPEG_STREAM_VBI_FMT_IVTV`` - VBI in private packets, IVTV format (documented in the kernel sources in the file - ``Documentation/media/v4l-drivers/cx2341x.rst``) + ``Documentation/media/v4l-drivers/cx2341x-uapi.rst``) diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-image-process.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-image-process.rst index e47103aa32ed..bb9d484c25e4 100644 --- a/Documentation/userspace-api/media/v4l/ext-ctrls-image-process.rst +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-image-process.rst @@ -53,7 +53,7 @@ Image Process Control IDs ``V4L2_CID_DEINTERLACING_MODE (menu)`` The video deinterlacing mode (such as Bob, Weave, ...). The menu items are - driver specific and are documented in :ref:`v4l-drivers`. + driver specific and are documented in :ref:`uapi-v4l-drivers`. ``V4L2_CID_DIGITAL_GAIN (integer)`` Digital gain is the value by which all colour components diff --git a/Documentation/userspace-api/media/v4l/pixfmt-reserved.rst b/Documentation/userspace-api/media/v4l/pixfmt-reserved.rst index 8ef90b0df864..dbdcf6c9f072 100644 --- a/Documentation/userspace-api/media/v4l/pixfmt-reserved.rst +++ b/Documentation/userspace-api/media/v4l/pixfmt-reserved.rst @@ -58,7 +58,7 @@ please make a proposal on the linux-media mailing list. - YUV 4:2:0 format used by the IVTV driver. The format is documented in the kernel sources in the file - ``Documentation/media/v4l-drivers/cx2341x.rst`` + ``Documentation/media/v4l-drivers/cx2341x-uapi.rst`` * .. _V4L2-PIX-FMT-CPIA1: - ``V4L2_PIX_FMT_CPIA1`` diff --git a/MAINTAINERS b/MAINTAINERS index 5262a05ff0d1..abe6a64183fa 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3758,7 +3758,7 @@ M: Jonathan Corbet L: linux-media@vger.kernel.org S: Maintained T: git git://linuxtv.org/media_tree.git -F: Documentation/media/v4l-drivers/cafe_ccic* +F: Documentation/admin-guide/media/cafe_ccic* F: drivers/media/platform/marvell-ccic/ CAIF NETWORK LAYER @@ -6234,7 +6234,7 @@ L: linux-media@vger.kernel.org S: Maintained W: https://linuxtv.org T: git git://linuxtv.org/media_tree.git -F: Documentation/media/v4l-drivers/em28xx* +F: Documentation/admin-guide/media/em28xx* F: drivers/media/usb/em28xx/ EMBEDDED LINUX @@ -8651,8 +8651,8 @@ M: Sakari Ailus L: linux-media@vger.kernel.org S: Maintained F: Documentation/userspace-api/media/v4l/pixfmt-meta-intel-ipu3.rst -F: Documentation/media/v4l-drivers/ipu3.rst -F: Documentation/media/v4l-drivers/ipu3_rcb.svg +F: Documentation/admin-guide/media/ipu3.rst +F: Documentation/admin-guide/media/ipu3_rcb.svg F: drivers/staging/media/ipu3/ INTEL IXP4XX QMGR, NPE, ETHERNET and HSS SUPPORT @@ -9076,7 +9076,7 @@ L: linux-media@vger.kernel.org S: Maintained W: https://linuxtv.org T: git git://linuxtv.org/media_tree.git -F: Documentation/media/v4l-drivers/ivtv* +F: Documentation/admin-guide/media/ivtv* F: drivers/media/pci/ivtv/ F: include/uapi/linux/ivtv* @@ -10450,7 +10450,7 @@ L: linux-media@vger.kernel.org S: Maintained T: git git://linuxtv.org/media_tree.git F: Documentation/devicetree/bindings/media/imx.txt -F: Documentation/media/v4l-drivers/imx.rst +F: Documentation/admin-guide/media/imx.rst F: drivers/staging/media/imx/ F: include/linux/imx-media.h F: include/media/imx.h @@ -10462,7 +10462,7 @@ S: Maintained T: git git://linuxtv.org/media_tree.git F: Documentation/devicetree/bindings/media/imx7-csi.txt F: Documentation/devicetree/bindings/media/imx7-mipi-csi2.txt -F: Documentation/media/v4l-drivers/imx7.rst +F: Documentation/admin-guide/media/imx7.rst F: drivers/staging/media/imx/imx7-media-csi.c F: drivers/staging/media/imx/imx7-mipi-csis.c @@ -13701,7 +13701,7 @@ M: Hans Verkuil L: linux-media@vger.kernel.org S: Maintained T: git git://linuxtv.org/media_tree.git -F: Documentation/media/cec-drivers/pulse8-cec.rst +F: Documentation/admin-guide/media/pulse8-cec.rst F: drivers/media/usb/pulse8-cec/* PVRUSB2 VIDEO4LINUX DRIVER @@ -13958,7 +13958,7 @@ M: Todor Tomov L: linux-media@vger.kernel.org S: Maintained F: Documentation/devicetree/bindings/media/qcom,camss.txt -F: Documentation/media/v4l-drivers/qcom_camss.rst +F: Documentation/admin-guide/media/qcom_camss.rst F: drivers/media/platform/qcom/camss/ QUALCOMM CORE POWER REDUCTION (CPR) AVS DRIVER @@ -16972,7 +16972,7 @@ L: linux-media@vger.kernel.org S: Odd fixes W: https://linuxtv.org T: git git://linuxtv.org/media_tree.git -F: Documentation/media/v4l-drivers/tm6000* +F: Documentation/admin-guide/media/tm6000* F: drivers/media/usb/tm6000/ TMIO/SDHI MMC DRIVER @@ -17653,7 +17653,7 @@ L: linux-media@vger.kernel.org S: Maintained W: http://royale.zerezo.com/zr364xx/ T: git git://linuxtv.org/media_tree.git -F: Documentation/media/v4l-drivers/zr364xx* +F: Documentation/admin-guide/media/zr364xx* F: drivers/media/usb/zr364xx/ USER-MODE LINUX (UML) diff --git a/drivers/media/pci/bt8xx/Kconfig b/drivers/media/pci/bt8xx/Kconfig index c79c6175c262..30714c7319ac 100644 --- a/drivers/media/pci/bt8xx/Kconfig +++ b/drivers/media/pci/bt8xx/Kconfig @@ -16,7 +16,7 @@ config VIDEO_BT848 help Support for BT848 based frame grabber/overlay boards. This includes the Miro, Hauppauge and STB boards. Please read the material in - for more information. + for more information. To compile this driver as a module, choose M here: the module will be called bttv. diff --git a/drivers/media/pci/meye/Kconfig b/drivers/media/pci/meye/Kconfig index b37da612dd0c..fed1f4a01817 100644 --- a/drivers/media/pci/meye/Kconfig +++ b/drivers/media/pci/meye/Kconfig @@ -7,7 +7,7 @@ config VIDEO_MEYE help This is the video4linux driver for the Motion Eye camera found in the Vaio Picturebook laptops. Please read the material in - for more information. + for more information. If you say Y or M here, you need to say Y or M to "Sony Laptop Extras" in the misc device section. diff --git a/drivers/media/radio/si470x/Kconfig b/drivers/media/radio/si470x/Kconfig index a1ba8bc54b62..7161bd6cd13c 100644 --- a/drivers/media/radio/si470x/Kconfig +++ b/drivers/media/radio/si470x/Kconfig @@ -30,7 +30,7 @@ config USB_SI470X Please have a look at the documentation, especially on how to redirect the audio stream from the radio to your sound device: - Documentation/media/v4l-drivers/si470x.rst + Documentation/admin-guide/media/si470x.rst Say Y here if you want to connect this type of radio to your computer's USB port. diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c index fd8b42bb9a84..fb8280620c58 100644 --- a/drivers/media/usb/dvb-usb-v2/lmedm04.c +++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c @@ -22,7 +22,7 @@ * * LME2510C + M88RS2000 * - * For firmware see Documentation/media/dvb-drivers/lmedm04.rst + * For firmware see Documentation/admin-guide/media/lmedm04.rst * * I2C addresses: * 0xd0 - STV0288 - Demodulator diff --git a/drivers/media/usb/gspca/Kconfig b/drivers/media/usb/gspca/Kconfig index 77a360958239..0283e3b908e4 100644 --- a/drivers/media/usb/gspca/Kconfig +++ b/drivers/media/usb/gspca/Kconfig @@ -9,7 +9,7 @@ menuconfig USB_GSPCA Say Y here if you want to enable selecting webcams based on the GSPCA framework. - See for more info. + See for more info. This driver uses the Video For Linux API. You must say Y or M to "Video For Linux" to use this driver. diff --git a/drivers/media/usb/zr364xx/Kconfig b/drivers/media/usb/zr364xx/Kconfig index 55b06c833667..49b4257487bb 100644 --- a/drivers/media/usb/zr364xx/Kconfig +++ b/drivers/media/usb/zr364xx/Kconfig @@ -7,7 +7,7 @@ config USB_ZR364XX help Say Y here if you want to connect this type of camera to your computer's USB port. - See for more info + See for more info and list of supported cameras. To compile this driver as a module, choose M here: the -- cgit v1.2.3 From 577a7ad33aeff86f6c97277b12b122a0a2ad97d7 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Wed, 4 Mar 2020 15:54:10 +0100 Subject: media: docs: move driver-specific info to driver-api Those documents don't really describe the driver API. Instead, they contain development-specific information. Yet, as the main index file describes the content of it as: "how specific kernel subsystems work from the point of view of a kernel developer" It seems to be the better fit. Signed-off-by: Mauro Carvalho Chehab --- .../driver-api/media/drivers/bttv-devel.rst | 123 + .../driver-api/media/drivers/contributors.rst | 131 + .../driver-api/media/drivers/cpia2_devel.rst | 56 + .../driver-api/media/drivers/cx2341x-devel.rst | 3685 ++++++++++++++++++++ .../driver-api/media/drivers/cx88-devel.rst | 113 + .../media/drivers/davinci-vpbe-devel.rst | 39 + Documentation/driver-api/media/drivers/dvb-usb.rst | 357 ++ .../driver-api/media/drivers/fimc-devel.rst | 33 + .../driver-api/media/drivers/frontends.rst | 32 + Documentation/driver-api/media/drivers/index.rst | 61 + Documentation/driver-api/media/drivers/pvrusb2.rst | 202 ++ .../driver-api/media/drivers/pxa_camera.rst | 194 ++ .../driver-api/media/drivers/radiotrack.rst | 168 + .../driver-api/media/drivers/saa7134-devel.rst | 67 + .../media/drivers/sh_mobile_ceu_camera.rst | 142 + Documentation/driver-api/media/drivers/tuners.rst | 133 + .../driver-api/media/drivers/vimc-devel.rst | 15 + Documentation/driver-api/media/index.rst | 2 + Documentation/media/dvb-drivers/contributors.rst | 131 - Documentation/media/dvb-drivers/dvb-usb.rst | 357 -- Documentation/media/dvb-drivers/frontends.rst | 32 - Documentation/media/dvb-drivers/index.rst | 34 - Documentation/media/index.rst | 1 - Documentation/media/v4l-drivers/bttv-devel.rst | 123 - Documentation/media/v4l-drivers/cpia2_devel.rst | 56 - Documentation/media/v4l-drivers/cx2341x-devel.rst | 3685 -------------------- Documentation/media/v4l-drivers/cx88-devel.rst | 113 - .../media/v4l-drivers/davinci-vpbe-devel.rst | 39 - Documentation/media/v4l-drivers/fimc-devel.rst | 33 - Documentation/media/v4l-drivers/index.rst | 14 - Documentation/media/v4l-drivers/pvrusb2.rst | 202 -- Documentation/media/v4l-drivers/pxa_camera.rst | 194 -- Documentation/media/v4l-drivers/radiotrack.rst | 168 - Documentation/media/v4l-drivers/saa7134-devel.rst | 67 - .../media/v4l-drivers/sh_mobile_ceu_camera.rst | 142 - Documentation/media/v4l-drivers/tuners.rst | 133 - Documentation/media/v4l-drivers/vimc-devel.rst | 15 - MAINTAINERS | 8 +- drivers/media/dvb-frontends/dib3000.h | 2 +- drivers/media/dvb-frontends/dib3000mb.c | 2 +- drivers/media/dvb-frontends/eds1547.h | 2 +- drivers/media/dvb-frontends/z0194a.h | 2 +- drivers/media/pci/cx18/cx18-streams.c | 4 +- drivers/media/platform/pxa_camera.c | 4 +- drivers/media/radio/Kconfig | 2 +- drivers/media/usb/dvb-usb-v2/Kconfig | 2 +- drivers/media/usb/dvb-usb-v2/gl861.c | 2 +- drivers/media/usb/dvb-usb-v2/lmedm04.c | 2 +- drivers/media/usb/dvb-usb-v2/lmedm04.h | 2 +- drivers/media/usb/dvb-usb-v2/mxl111sf.c | 2 +- drivers/media/usb/dvb-usb-v2/mxl111sf.h | 2 +- drivers/media/usb/dvb-usb/Kconfig | 2 +- drivers/media/usb/dvb-usb/a800.c | 2 +- drivers/media/usb/dvb-usb/af9005-fe.c | 2 +- drivers/media/usb/dvb-usb/af9005-remote.c | 2 +- drivers/media/usb/dvb-usb/af9005.c | 2 +- drivers/media/usb/dvb-usb/af9005.h | 2 +- drivers/media/usb/dvb-usb/az6027.c | 2 +- drivers/media/usb/dvb-usb/cxusb.c | 2 +- drivers/media/usb/dvb-usb/dibusb-common.c | 2 +- drivers/media/usb/dvb-usb/dibusb-mb.c | 2 +- drivers/media/usb/dvb-usb/dibusb-mc-common.c | 2 +- drivers/media/usb/dvb-usb/dibusb-mc.c | 2 +- drivers/media/usb/dvb-usb/dibusb.h | 2 +- drivers/media/usb/dvb-usb/digitv.c | 2 +- drivers/media/usb/dvb-usb/dtt200u-fe.c | 2 +- drivers/media/usb/dvb-usb/dtt200u.c | 2 +- drivers/media/usb/dvb-usb/dtt200u.h | 2 +- drivers/media/usb/dvb-usb/dvb-usb-init.c | 2 +- drivers/media/usb/dvb-usb/dw2102.c | 2 +- drivers/media/usb/dvb-usb/gp8psk.c | 2 +- drivers/media/usb/dvb-usb/gp8psk.h | 2 +- drivers/media/usb/dvb-usb/m920x.c | 2 +- drivers/media/usb/dvb-usb/nova-t-usb2.c | 2 +- drivers/media/usb/dvb-usb/opera1.c | 2 +- drivers/media/usb/dvb-usb/ttusb2.c | 2 +- drivers/media/usb/dvb-usb/ttusb2.h | 2 +- drivers/media/usb/dvb-usb/umt-010.c | 2 +- drivers/media/usb/dvb-usb/vp702x-fe.c | 2 +- drivers/media/usb/dvb-usb/vp702x.c | 2 +- drivers/media/usb/dvb-usb/vp7045-fe.c | 2 +- drivers/media/usb/dvb-usb/vp7045.c | 2 +- drivers/media/usb/dvb-usb/vp7045.h | 2 +- 83 files changed, 5604 insertions(+), 5590 deletions(-) create mode 100644 Documentation/driver-api/media/drivers/bttv-devel.rst create mode 100644 Documentation/driver-api/media/drivers/contributors.rst create mode 100644 Documentation/driver-api/media/drivers/cpia2_devel.rst create mode 100644 Documentation/driver-api/media/drivers/cx2341x-devel.rst create mode 100644 Documentation/driver-api/media/drivers/cx88-devel.rst create mode 100644 Documentation/driver-api/media/drivers/davinci-vpbe-devel.rst create mode 100644 Documentation/driver-api/media/drivers/dvb-usb.rst create mode 100644 Documentation/driver-api/media/drivers/fimc-devel.rst create mode 100644 Documentation/driver-api/media/drivers/frontends.rst create mode 100644 Documentation/driver-api/media/drivers/index.rst create mode 100644 Documentation/driver-api/media/drivers/pvrusb2.rst create mode 100644 Documentation/driver-api/media/drivers/pxa_camera.rst create mode 100644 Documentation/driver-api/media/drivers/radiotrack.rst create mode 100644 Documentation/driver-api/media/drivers/saa7134-devel.rst create mode 100644 Documentation/driver-api/media/drivers/sh_mobile_ceu_camera.rst create mode 100644 Documentation/driver-api/media/drivers/tuners.rst create mode 100644 Documentation/driver-api/media/drivers/vimc-devel.rst delete mode 100644 Documentation/media/dvb-drivers/contributors.rst delete mode 100644 Documentation/media/dvb-drivers/dvb-usb.rst delete mode 100644 Documentation/media/dvb-drivers/frontends.rst delete mode 100644 Documentation/media/dvb-drivers/index.rst delete mode 100644 Documentation/media/v4l-drivers/bttv-devel.rst delete mode 100644 Documentation/media/v4l-drivers/cpia2_devel.rst delete mode 100644 Documentation/media/v4l-drivers/cx2341x-devel.rst delete mode 100644 Documentation/media/v4l-drivers/cx88-devel.rst delete mode 100644 Documentation/media/v4l-drivers/davinci-vpbe-devel.rst delete mode 100644 Documentation/media/v4l-drivers/fimc-devel.rst delete mode 100644 Documentation/media/v4l-drivers/pvrusb2.rst delete mode 100644 Documentation/media/v4l-drivers/pxa_camera.rst delete mode 100644 Documentation/media/v4l-drivers/radiotrack.rst delete mode 100644 Documentation/media/v4l-drivers/saa7134-devel.rst delete mode 100644 Documentation/media/v4l-drivers/sh_mobile_ceu_camera.rst delete mode 100644 Documentation/media/v4l-drivers/tuners.rst delete mode 100644 Documentation/media/v4l-drivers/vimc-devel.rst (limited to 'drivers/media/pci') diff --git a/Documentation/driver-api/media/drivers/bttv-devel.rst b/Documentation/driver-api/media/drivers/bttv-devel.rst new file mode 100644 index 000000000000..396fad572c93 --- /dev/null +++ b/Documentation/driver-api/media/drivers/bttv-devel.rst @@ -0,0 +1,123 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The bttv driver +=============== + +bttv and sound mini howto +------------------------- + +There are a lot of different bt848/849/878/879 based boards available. +Making video work often is not a big deal, because this is handled +completely by the bt8xx chip, which is common on all boards. But +sound is handled in slightly different ways on each board. + +To handle the grabber boards correctly, there is a array tvcards[] in +bttv-cards.c, which holds the information required for each board. +Sound will work only, if the correct entry is used (for video it often +makes no difference). The bttv driver prints a line to the kernel +log, telling which card type is used. Like this one: + +.. code-block:: none + + bttv0: model: BT848(Hauppauge old) [autodetected] + +You should verify this is correct. If it isn't, you have to pass the +correct board type as insmod argument, "insmod bttv card=2" for +example. The file CARDLIST has a list of valid arguments for card. +If your card isn't listed there, you might check the source code for +new entries which are not listed yet. If there isn't one for your +card, you can check if one of the existing entries does work for you +(just trial and error...). + +Some boards have an extra processor for sound to do stereo decoding +and other nice features. The msp34xx chips are used by Hauppauge for +example. If your board has one, you might have to load a helper +module like msp3400.o to make sound work. If there isn't one for the +chip used on your board: Bad luck. Start writing a new one. Well, +you might want to check the video4linux mailing list archive first... + +Of course you need a correctly installed soundcard unless you have the +speakers connected directly to the grabber board. Hint: check the +mixer settings too. ALSA for example has everything muted by default. + + +How sound works in detail +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Still doesn't work? Looks like some driver hacking is required. +Below is a do-it-yourself description for you. + +The bt8xx chips have 32 general purpose pins, and registers to control +these pins. One register is the output enable register +(BT848_GPIO_OUT_EN), it says which pins are actively driven by the +bt848 chip. Another one is the data register (BT848_GPIO_DATA), where +you can get/set the status if these pins. They can be used for input +and output. + +Most grabber board vendors use these pins to control an external chip +which does the sound routing. But every board is a little different. +These pins are also used by some companies to drive remote control +receiver chips. Some boards use the i2c bus instead of the gpio pins +to connect the mux chip. + +As mentioned above, there is a array which holds the required +information for each known board. You basically have to create a new +line for your board. The important fields are these two: + +.. code-block:: c + + struct tvcard + { + [ ... ] + u32 gpiomask; + u32 audiomux[6]; /* Tuner, Radio, external, internal, mute, stereo */ + }; + +gpiomask specifies which pins are used to control the audio mux chip. +The corresponding bits in the output enable register +(BT848_GPIO_OUT_EN) will be set as these pins must be driven by the +bt848 chip. + +The audiomux\[\] array holds the data values for the different inputs +(i.e. which pins must be high/low for tuner/mute/...). This will be +written to the data register (BT848_GPIO_DATA) to switch the audio +mux. + + +What you have to do is figure out the correct values for gpiomask and +the audiomux array. If you have Windows and the drivers four your +card installed, you might to check out if you can read these registers +values used by the windows driver. A tool to do this is available +from ftp://telepresence.dmem.strath.ac.uk/pub/bt848/winutil, but it +doesn't work with bt878 boards according to some reports I received. +Another one with bt878 support is available from +http://btwincap.sourceforge.net/Files/btspy2.00.zip + +You might also dig around in the \*.ini files of the Windows applications. +You can have a look at the board to see which of the gpio pins are +connected at all and then start trial-and-error ... + + +Starting with release 0.7.41 bttv has a number of insmod options to +make the gpio debugging easier: + +.. code-block:: none + + bttv_gpio=0/1 enable/disable gpio debug messages + gpiomask=n set the gpiomask value + audiomux=i,j,... set the values of the audiomux array + audioall=a set the values of the audiomux array (one + value for all array elements, useful to check + out which effect the particular value has). + +The messages printed with bttv_gpio=1 look like this: + +.. code-block:: none + + bttv0: gpio: en=00000027, out=00000024 in=00ffffd8 [audio: off] + + en = output _en_able register (BT848_GPIO_OUT_EN) + out = _out_put bits of the data register (BT848_GPIO_DATA), + i.e. BT848_GPIO_DATA & BT848_GPIO_OUT_EN + in = _in_put bits of the data register, + i.e. BT848_GPIO_DATA & ~BT848_GPIO_OUT_EN diff --git a/Documentation/driver-api/media/drivers/contributors.rst b/Documentation/driver-api/media/drivers/contributors.rst new file mode 100644 index 000000000000..f23b6e6faf46 --- /dev/null +++ b/Documentation/driver-api/media/drivers/contributors.rst @@ -0,0 +1,131 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Contributors +============ + +.. note:: + + This documentation is outdated. There are several other DVB contributors + that aren't listed below. + +Thanks go to the following people for patches and contributions: + +- Michael Hunold + + - for the initial saa7146 driver and its recent overhaul + +- Christian Theiss + + - for his work on the initial Linux DVB driver + +- Marcus Metzler and + Ralph Metzler + + - for their continuing work on the DVB driver + +- Michael Holzt + + - for his contributions to the dvb-net driver + +- Diego Picciani + + - for CyberLogin for Linux which allows logging onto EON + (in case you are wondering where CyberLogin is, EON changed its login + procedure and CyberLogin is no longer used.) + +- Martin Schaller + + - for patching the cable card decoder driver + +- Klaus Schmidinger + + - for various fixes regarding tuning, OSD and CI stuff and his work on VDR + +- Steve Brown + + - for his AFC kernel thread + +- Christoph Martin + + - for his LIRC infrared handler + +- Andreas Oberritter , + Dennis Noermann , + Felix Domke , + Florian Schirmer , + Ronny Strutz <3des@elitedvb.de>, + Wolfram Joost + and all the other dbox2 people + + - for many bugfixes in the generic DVB Core, frontend drivers and + their work on the dbox2 port of the DVB driver + +- Oliver Endriss + + - for many bugfixes + +- Andrew de Quincey + + - for the tda1004x frontend driver, and various bugfixes + +- Peter Schildmann + + - for the driver for the Technisat SkyStar2 PCI DVB card + +- Vadim Catana , + Roberto Ragusa and + Augusto Cardoso + + - for all the work for the FlexCopII chipset by B2C2,Inc. + +- Davor Emard + + - for his work on the budget drivers, the demux code, + the module unloading problems, ... + +- Hans-Frieder Vogt + + - for his work on calculating and checking the crc's for the + TechnoTrend/Hauppauge DEC driver firmware + +- Michael Dreher and + Andreas 'randy' Weinberger + + - for the support of the Fujitsu-Siemens Activy budget DVB-S + +- Kenneth Aafløy + + - for adding support for Typhoon DVB-S budget card + +- Ernst Peinlich + + - for tuning/DiSEqC support for the DEC 3000-s + +- Peter Beutner + + - for the IR code for the ttusb-dec driver + +- Wilson Michaels + + - for the lgdt330x frontend driver, and various bugfixes + +- Michael Krufky + + - for maintaining v4l/dvb inter-tree dependencies + +- Taylor Jacob + + - for the nxt2002 frontend driver + +- Jean-Francois Thibert + + - for the nxt2004 frontend driver + +- Kirk Lapray + + - for the or51211 and or51132 frontend drivers, and + for merging the nxt2002 and nxt2004 modules into a + single nxt200x frontend driver. + +(If you think you should be in this list, but you are not, drop a +line to the DVB mailing list) diff --git a/Documentation/driver-api/media/drivers/cpia2_devel.rst b/Documentation/driver-api/media/drivers/cpia2_devel.rst new file mode 100644 index 000000000000..decaa4768c78 --- /dev/null +++ b/Documentation/driver-api/media/drivers/cpia2_devel.rst @@ -0,0 +1,56 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The cpia2 driver +================ + +Authors: Peter Pregler , +Scott J. Bertin , and +Jarl Totland for the original cpia driver, which +this one was modelled from. + + +Notes to developers +~~~~~~~~~~~~~~~~~~~ + + - This is a driver version stripped of the 2.4 back compatibility + and old MJPEG ioctl API. See cpia2.sf.net for 2.4 support. + +Programmer's overview of cpia2 driver +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Cpia2 is the second generation video coprocessor from VLSI Vision Ltd (now a +division of ST Microelectronics). There are two versions. The first is the +STV0672, which is capable of up to 30 frames per second (fps) in frame sizes +up to CIF, and 15 fps for VGA frames. The STV0676 is an improved version, +which can handle up to 30 fps VGA. Both coprocessors can be attached to two +CMOS sensors - the vvl6410 CIF sensor and the vvl6500 VGA sensor. These will +be referred to as the 410 and the 500 sensors, or the CIF and VGA sensors. + +The two chipsets operate almost identically. The core is an 8051 processor, +running two different versions of firmware. The 672 runs the VP4 video +processor code, the 676 runs VP5. There are a few differences in register +mappings for the two chips. In these cases, the symbols defined in the +header files are marked with VP4 or VP5 as part of the symbol name. + +The cameras appear externally as three sets of registers. Setting register +values is the only way to control the camera. Some settings are +interdependant, such as the sequence required to power up the camera. I will +try to make note of all of these cases. + +The register sets are called blocks. Block 0 is the system block. This +section is always powered on when the camera is plugged in. It contains +registers that control housekeeping functions such as powering up the video +processor. The video processor is the VP block. These registers control +how the video from the sensor is processed. Examples are timing registers, +user mode (vga, qvga), scaling, cropping, framerates, and so on. The last +block is the video compressor (VC). The video stream sent from the camera is +compressed as Motion JPEG (JPEGA). The VC controls all of the compression +parameters. Looking at the file cpia2_registers.h, you can get a full view +of these registers and the possible values for most of them. + +One or more registers can be set or read by sending a usb control message to +the camera. There are three modes for this. Block mode requests a number +of contiguous registers. Random mode reads or writes random registers with +a tuple structure containing address/value pairs. The repeat mode is only +used by VP4 to load a firmware patch. It contains a starting address and +a sequence of bytes to be written into a gpio port. diff --git a/Documentation/driver-api/media/drivers/cx2341x-devel.rst b/Documentation/driver-api/media/drivers/cx2341x-devel.rst new file mode 100644 index 000000000000..97699df6ea2e --- /dev/null +++ b/Documentation/driver-api/media/drivers/cx2341x-devel.rst @@ -0,0 +1,3685 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The cx2341x driver +================== + +Memory at cx2341x chips +----------------------- + +This section describes the cx2341x memory map and documents some of the +register space. + +.. note:: the memory long words are little-endian ('intel format'). + +.. warning:: + + This information was figured out from searching through the memory + and registers, this information may not be correct and is certainly + not complete, and was not derived from anything more than searching + through the memory space with commands like: + + .. code-block:: none + + ivtvctl -O min=0x02000000,max=0x020000ff + + So take this as is, I'm always searching for more stuff, it's a large + register space :-). + +Memory Map +~~~~~~~~~~ + +The cx2341x exposes its entire 64M memory space to the PCI host via the PCI BAR0 +(Base Address Register 0). The addresses here are offsets relative to the +address held in BAR0. + +.. code-block:: none + + 0x00000000-0x00ffffff Encoder memory space + 0x00000000-0x0003ffff Encode.rom + ???-??? MPEG buffer(s) + ???-??? Raw video capture buffer(s) + ???-??? Raw audio capture buffer(s) + ???-??? Display buffers (6 or 9) + + 0x01000000-0x01ffffff Decoder memory space + 0x01000000-0x0103ffff Decode.rom + ???-??? MPEG buffers(s) + 0x0114b000-0x0115afff Audio.rom (deprecated?) + + 0x02000000-0x0200ffff Register Space + +Registers +~~~~~~~~~ + +The registers occupy the 64k space starting at the 0x02000000 offset from BAR0. +All of these registers are 32 bits wide. + +.. code-block:: none + + DMA Registers 0x000-0xff: + + 0x00 - Control: + 0=reset/cancel, 1=read, 2=write, 4=stop + 0x04 - DMA status: + 1=read busy, 2=write busy, 4=read error, 8=write error, 16=link list error + 0x08 - pci DMA pointer for read link list + 0x0c - pci DMA pointer for write link list + 0x10 - read/write DMA enable: + 1=read enable, 2=write enable + 0x14 - always 0xffffffff, if set any lower instability occurs, 0x00 crashes + 0x18 - ?? + 0x1c - always 0x20 or 32, smaller values slow down DMA transactions + 0x20 - always value of 0x780a010a + 0x24-0x3c - usually just random values??? + 0x40 - Interrupt status + 0x44 - Write a bit here and shows up in Interrupt status 0x40 + 0x48 - Interrupt Mask + 0x4C - always value of 0xfffdffff, + if changed to 0xffffffff DMA write interrupts break. + 0x50 - always 0xffffffff + 0x54 - always 0xffffffff (0x4c, 0x50, 0x54 seem like interrupt masks, are + 3 processors on chip, Java ones, VPU, SPU, APU, maybe these are the + interrupt masks???). + 0x60-0x7C - random values + 0x80 - first write linked list reg, for Encoder Memory addr + 0x84 - first write linked list reg, for pci memory addr + 0x88 - first write linked list reg, for length of buffer in memory addr + (|0x80000000 or this for last link) + 0x8c-0xdc - rest of write linked list reg, 8 sets of 3 total, DMA goes here + from linked list addr in reg 0x0c, firmware must push through or + something. + 0xe0 - first (and only) read linked list reg, for pci memory addr + 0xe4 - first (and only) read linked list reg, for Decoder memory addr + 0xe8 - first (and only) read linked list reg, for length of buffer + 0xec-0xff - Nothing seems to be in these registers, 0xec-f4 are 0x00000000. + +Memory locations for Encoder Buffers 0x700-0x7ff: + +These registers show offsets of memory locations pertaining to each +buffer area used for encoding, have to shift them by <<1 first. + +- 0x07F8: Encoder SDRAM refresh +- 0x07FC: Encoder SDRAM pre-charge + +Memory locations for Decoder Buffers 0x800-0x8ff: + +These registers show offsets of memory locations pertaining to each +buffer area used for decoding, have to shift them by <<1 first. + +- 0x08F8: Decoder SDRAM refresh +- 0x08FC: Decoder SDRAM pre-charge + +Other memory locations: + +- 0x2800: Video Display Module control +- 0x2D00: AO (audio output?) control +- 0x2D24: Bytes Flushed +- 0x7000: LSB I2C write clock bit (inverted) +- 0x7004: LSB I2C write data bit (inverted) +- 0x7008: LSB I2C read clock bit +- 0x700c: LSB I2C read data bit +- 0x9008: GPIO get input state +- 0x900c: GPIO set output state +- 0x9020: GPIO direction (Bit7 (GPIO 0..7) - 0:input, 1:output) +- 0x9050: SPU control +- 0x9054: Reset HW blocks +- 0x9058: VPU control +- 0xA018: Bit6: interrupt pending? +- 0xA064: APU command + + +Interrupt Status Register +~~~~~~~~~~~~~~~~~~~~~~~~~ + +The definition of the bits in the interrupt status register 0x0040, and the +interrupt mask 0x0048. If a bit is cleared in the mask, then we want our ISR to +execute. + +- bit 31 Encoder Start Capture +- bit 30 Encoder EOS +- bit 29 Encoder VBI capture +- bit 28 Encoder Video Input Module reset event +- bit 27 Encoder DMA complete +- bit 24 Decoder audio mode change detection event (through event notification) +- bit 22 Decoder data request +- bit 20 Decoder DMA complete +- bit 19 Decoder VBI re-insertion +- bit 18 Decoder DMA err (linked-list bad) + +Missing documentation +--------------------- + +- Encoder API post(?) +- Decoder API post(?) +- Decoder VTRACE event + + +The cx2341x firmware upload +--------------------------- + +This document describes how to upload the cx2341x firmware to the card. + +How to find +~~~~~~~~~~~ + +See the web pages of the various projects that uses this chip for information +on how to obtain the firmware. + +The firmware stored in a Windows driver can be detected as follows: + +- Each firmware image is 256k bytes. +- The 1st 32-bit word of the Encoder image is 0x0000da7 +- The 1st 32-bit word of the Decoder image is 0x00003a7 +- The 2nd 32-bit word of both images is 0xaa55bb66 + +How to load +~~~~~~~~~~~ + +- Issue the FWapi command to stop the encoder if it is running. Wait for the + command to complete. +- Issue the FWapi command to stop the decoder if it is running. Wait for the + command to complete. +- Issue the I2C command to the digitizer to stop emitting VSYNC events. +- Issue the FWapi command to halt the encoder's firmware. +- Sleep for 10ms. +- Issue the FWapi command to halt the decoder's firmware. +- Sleep for 10ms. +- Write 0x00000000 to register 0x2800 to stop the Video Display Module. +- Write 0x00000005 to register 0x2D00 to stop the AO (audio output?). +- Write 0x00000000 to register 0xA064 to ping? the APU. +- Write 0xFFFFFFFE to register 0x9058 to stop the VPU. +- Write 0xFFFFFFFF to register 0x9054 to reset the HW blocks. +- Write 0x00000001 to register 0x9050 to stop the SPU. +- Sleep for 10ms. +- Write 0x0000001A to register 0x07FC to init the Encoder SDRAM's pre-charge. +- Write 0x80000640 to register 0x07F8 to init the Encoder SDRAM's refresh to 1us. +- Write 0x0000001A to register 0x08FC to init the Decoder SDRAM's pre-charge. +- Write 0x80000640 to register 0x08F8 to init the Decoder SDRAM's refresh to 1us. +- Sleep for 512ms. (600ms is recommended) +- Transfer the encoder's firmware image to offset 0 in Encoder memory space. +- Transfer the decoder's firmware image to offset 0 in Decoder memory space. +- Use a read-modify-write operation to Clear bit 0 of register 0x9050 to + re-enable the SPU. +- Sleep for 1 second. +- Use a read-modify-write operation to Clear bits 3 and 0 of register 0x9058 + to re-enable the VPU. +- Sleep for 1 second. +- Issue status API commands to both firmware images to verify. + + +How to call the firmware API +---------------------------- + +The preferred calling convention is known as the firmware mailbox. The +mailboxes are basically a fixed length array that serves as the call-stack. + +Firmware mailboxes can be located by searching the encoder and decoder memory +for a 16 byte signature. That signature will be located on a 256-byte boundary. + +Signature: + +.. code-block:: none + + 0x78, 0x56, 0x34, 0x12, 0x12, 0x78, 0x56, 0x34, + 0x34, 0x12, 0x78, 0x56, 0x56, 0x34, 0x12, 0x78 + +The firmware implements 20 mailboxes of 20 32-bit words. The first 10 are +reserved for API calls. The second 10 are used by the firmware for event +notification. + + ====== ================= + Index Name + ====== ================= + 0 Flags + 1 Command + 2 Return value + 3 Timeout + 4-19 Parameter/Result + ====== ================= + + +The flags are defined in the following table. The direction is from the +perspective of the firmware. + + ==== ========== ============================================ + Bit Direction Purpose + ==== ========== ============================================ + 2 O Firmware has processed the command. + 1 I Driver has finished setting the parameters. + 0 I Driver is using this mailbox. + ==== ========== ============================================ + +The command is a 32-bit enumerator. The API specifics may be found in this +chapter. + +The return value is a 32-bit enumerator. Only two values are currently defined: + +- 0=success +- -1=command undefined. + +There are 16 parameters/results 32-bit fields. The driver populates these fields +with values for all the parameters required by the call. The driver overwrites +these fields with result values returned by the call. + +The timeout value protects the card from a hung driver thread. If the driver +doesn't handle the completed call within the timeout specified, the firmware +will reset that mailbox. + +To make an API call, the driver iterates over each mailbox looking for the +first one available (bit 0 has been cleared). The driver sets that bit, fills +in the command enumerator, the timeout value and any required parameters. The +driver then sets the parameter ready bit (bit 1). The firmware scans the +mailboxes for pending commands, processes them, sets the result code, populates +the result value array with that call's return values and sets the call +complete bit (bit 2). Once bit 2 is set, the driver should retrieve the results +and clear all the flags. If the driver does not perform this task within the +time set in the timeout register, the firmware will reset that mailbox. + +Event notifications are sent from the firmware to the host. The host tells the +firmware which events it is interested in via an API call. That call tells the +firmware which notification mailbox to use. The firmware signals the host via +an interrupt. Only the 16 Results fields are used, the Flags, Command, Return +value and Timeout words are not used. + + +OSD firmware API description +---------------------------- + +.. note:: this API is part of the decoder firmware, so it's cx23415 only. + + + +CX2341X_OSD_GET_FRAMEBUFFER +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 65/0x41 + +Description +^^^^^^^^^^^ + +Return base and length of contiguous OSD memory. + +Result[0] +^^^^^^^^^ + +OSD base address + +Result[1] +^^^^^^^^^ + +OSD length + + + +CX2341X_OSD_GET_PIXEL_FORMAT +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 66/0x42 + +Description +^^^^^^^^^^^ + +Query OSD format + +Result[0] +^^^^^^^^^ + +0=8bit index +1=16bit RGB 5:6:5 +2=16bit ARGB 1:5:5:5 +3=16bit ARGB 1:4:4:4 +4=32bit ARGB 8:8:8:8 + + + +CX2341X_OSD_SET_PIXEL_FORMAT +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 67/0x43 + +Description +^^^^^^^^^^^ + +Assign pixel format + +Param[0] +^^^^^^^^ + +- 0=8bit index +- 1=16bit RGB 5:6:5 +- 2=16bit ARGB 1:5:5:5 +- 3=16bit ARGB 1:4:4:4 +- 4=32bit ARGB 8:8:8:8 + + + +CX2341X_OSD_GET_STATE +~~~~~~~~~~~~~~~~~~~~~ + +Enum: 68/0x44 + +Description +^^^^^^^^^^^ + +Query OSD state + +Result[0] +^^^^^^^^^ + +- Bit 0 0=off, 1=on +- Bits 1:2 alpha control +- Bits 3:5 pixel format + + + +CX2341X_OSD_SET_STATE +~~~~~~~~~~~~~~~~~~~~~ + +Enum: 69/0x45 + +Description +^^^^^^^^^^^ + +OSD switch + +Param[0] +^^^^^^^^ + +0=off, 1=on + + + +CX2341X_OSD_GET_OSD_COORDS +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 70/0x46 + +Description +^^^^^^^^^^^ + +Retrieve coordinates of OSD area blended with video + +Result[0] +^^^^^^^^^ + +OSD buffer address + +Result[1] +^^^^^^^^^ + +Stride in pixels + +Result[2] +^^^^^^^^^ + +Lines in OSD buffer + +Result[3] +^^^^^^^^^ + +Horizontal offset in buffer + +Result[4] +^^^^^^^^^ + +Vertical offset in buffer + + + +CX2341X_OSD_SET_OSD_COORDS +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 71/0x47 + +Description +^^^^^^^^^^^ + +Assign the coordinates of the OSD area to blend with video + +Param[0] +^^^^^^^^ + +buffer address + +Param[1] +^^^^^^^^ + +buffer stride in pixels + +Param[2] +^^^^^^^^ + +lines in buffer + +Param[3] +^^^^^^^^ + +horizontal offset + +Param[4] +^^^^^^^^ + +vertical offset + + + +CX2341X_OSD_GET_SCREEN_COORDS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 72/0x48 + +Description +^^^^^^^^^^^ + +Retrieve OSD screen area coordinates + +Result[0] +^^^^^^^^^ + +top left horizontal offset + +Result[1] +^^^^^^^^^ + +top left vertical offset + +Result[2] +^^^^^^^^^ + +bottom right horizontal offset + +Result[3] +^^^^^^^^^ + +bottom right vertical offset + + + +CX2341X_OSD_SET_SCREEN_COORDS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 73/0x49 + +Description +^^^^^^^^^^^ + +Assign the coordinates of the screen area to blend with video + +Param[0] +^^^^^^^^ + +top left horizontal offset + +Param[1] +^^^^^^^^ + +top left vertical offset + +Param[2] +^^^^^^^^ + +bottom left horizontal offset + +Param[3] +^^^^^^^^ + +bottom left vertical offset + + + +CX2341X_OSD_GET_GLOBAL_ALPHA +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 74/0x4A + +Description +^^^^^^^^^^^ + +Retrieve OSD global alpha + +Result[0] +^^^^^^^^^ + +global alpha: 0=off, 1=on + +Result[1] +^^^^^^^^^ + +bits 0:7 global alpha + + + +CX2341X_OSD_SET_GLOBAL_ALPHA +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 75/0x4B + +Description +^^^^^^^^^^^ + +Update global alpha + +Param[0] +^^^^^^^^ + +global alpha: 0=off, 1=on + +Param[1] +^^^^^^^^ + +global alpha (8 bits) + +Param[2] +^^^^^^^^ + +local alpha: 0=on, 1=off + + + +CX2341X_OSD_SET_BLEND_COORDS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 78/0x4C + +Description +^^^^^^^^^^^ + +Move start of blending area within display buffer + +Param[0] +^^^^^^^^ + +horizontal offset in buffer + +Param[1] +^^^^^^^^ + +vertical offset in buffer + + + +CX2341X_OSD_GET_FLICKER_STATE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 79/0x4F + +Description +^^^^^^^^^^^ + +Retrieve flicker reduction module state + +Result[0] +^^^^^^^^^ + +flicker state: 0=off, 1=on + + + +CX2341X_OSD_SET_FLICKER_STATE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 80/0x50 + +Description +^^^^^^^^^^^ + +Set flicker reduction module state + +Param[0] +^^^^^^^^ + +State: 0=off, 1=on + + + +CX2341X_OSD_BLT_COPY +~~~~~~~~~~~~~~~~~~~~ + +Enum: 82/0x52 + +Description +^^^^^^^^^^^ + +BLT copy + +Param[0] +^^^^^^^^ + +.. code-block:: none + + '0000' zero + '0001' ~destination AND ~source + '0010' ~destination AND source + '0011' ~destination + '0100' destination AND ~source + '0101' ~source + '0110' destination XOR source + '0111' ~destination OR ~source + '1000' ~destination AND ~source + '1001' destination XNOR source + '1010' source + '1011' ~destination OR source + '1100' destination + '1101' destination OR ~source + '1110' destination OR source + '1111' one + + +Param[1] +^^^^^^^^ + +Resulting alpha blending + +- '01' source_alpha +- '10' destination_alpha +- '11' source_alpha*destination_alpha+1 + (zero if both source and destination alpha are zero) + +Param[2] +^^^^^^^^ + +.. code-block:: none + + '00' output_pixel = source_pixel + + '01' if source_alpha=0: + output_pixel = destination_pixel + if 256 > source_alpha > 1: + output_pixel = ((source_alpha + 1)*source_pixel + + (255 - source_alpha)*destination_pixel)/256 + + '10' if destination_alpha=0: + output_pixel = source_pixel + if 255 > destination_alpha > 0: + output_pixel = ((255 - destination_alpha)*source_pixel + + (destination_alpha + 1)*destination_pixel)/256 + + '11' if source_alpha=0: + source_temp = 0 + if source_alpha=255: + source_temp = source_pixel*256 + if 255 > source_alpha > 0: + source_temp = source_pixel*(source_alpha + 1) + if destination_alpha=0: + destination_temp = 0 + if destination_alpha=255: + destination_temp = destination_pixel*256 + if 255 > destination_alpha > 0: + destination_temp = destination_pixel*(destination_alpha + 1) + output_pixel = (source_temp + destination_temp)/256 + +Param[3] +^^^^^^^^ + +width + +Param[4] +^^^^^^^^ + +height + +Param[5] +^^^^^^^^ + +destination pixel mask + +Param[6] +^^^^^^^^ + +destination rectangle start address + +Param[7] +^^^^^^^^ + +destination stride in dwords + +Param[8] +^^^^^^^^ + +source stride in dwords + +Param[9] +^^^^^^^^ + +source rectangle start address + + + +CX2341X_OSD_BLT_FILL +~~~~~~~~~~~~~~~~~~~~ + +Enum: 83/0x53 + +Description +^^^^^^^^^^^ + +BLT fill color + +Param[0] +^^^^^^^^ + +Same as Param[0] on API 0x52 + +Param[1] +^^^^^^^^ + +Same as Param[1] on API 0x52 + +Param[2] +^^^^^^^^ + +Same as Param[2] on API 0x52 + +Param[3] +^^^^^^^^ + +width + +Param[4] +^^^^^^^^ + +height + +Param[5] +^^^^^^^^ + +destination pixel mask + +Param[6] +^^^^^^^^ + +destination rectangle start address + +Param[7] +^^^^^^^^ + +destination stride in dwords + +Param[8] +^^^^^^^^ + +color fill value + + + +CX2341X_OSD_BLT_TEXT +~~~~~~~~~~~~~~~~~~~~ + +Enum: 84/0x54 + +Description +^^^^^^^^^^^ + +BLT for 8 bit alpha text source + +Param[0] +^^^^^^^^ + +Same as Param[0] on API 0x52 + +Param[1] +^^^^^^^^ + +Same as Param[1] on API 0x52 + +Param[2] +^^^^^^^^ + +Same as Param[2] on API 0x52 + +Param[3] +^^^^^^^^ + +width + +Param[4] +^^^^^^^^ + +height + +Param[5] +^^^^^^^^ + +destination pixel mask + +Param[6] +^^^^^^^^ + +destination rectangle start address + +Param[7] +^^^^^^^^ + +destination stride in dwords + +Param[8] +^^^^^^^^ + +source stride in dwords + +Param[9] +^^^^^^^^ + +source rectangle start address + +Param[10] +^^^^^^^^^ + +color fill value + + + +CX2341X_OSD_SET_FRAMEBUFFER_WINDOW +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 86/0x56 + +Description +^^^^^^^^^^^ + +Positions the main output window on the screen. The coordinates must be +such that the entire window fits on the screen. + +Param[0] +^^^^^^^^ + +window width + +Param[1] +^^^^^^^^ + +window height + +Param[2] +^^^^^^^^ + +top left window corner horizontal offset + +Param[3] +^^^^^^^^ + +top left window corner vertical offset + + + +CX2341X_OSD_SET_CHROMA_KEY +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 96/0x60 + +Description +^^^^^^^^^^^ + +Chroma key switch and color + +Param[0] +^^^^^^^^ + +state: 0=off, 1=on + +Param[1] +^^^^^^^^ + +color + + + +CX2341X_OSD_GET_ALPHA_CONTENT_INDEX +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 97/0x61 + +Description +^^^^^^^^^^^ + +Retrieve alpha content index + +Result[0] +^^^^^^^^^ + +alpha content index, Range 0:15 + + + +CX2341X_OSD_SET_ALPHA_CONTENT_INDEX +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 98/0x62 + +Description +^^^^^^^^^^^ + +Assign alpha content index + +Param[0] +^^^^^^^^ + +alpha content index, range 0:15 + + +Encoder firmware API description +-------------------------------- + +CX2341X_ENC_PING_FW +~~~~~~~~~~~~~~~~~~~ + +Enum: 128/0x80 + +Description +^^^^^^^^^^^ + +Does nothing. Can be used to check if the firmware is responding. + + + +CX2341X_ENC_START_CAPTURE +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 129/0x81 + +Description +^^^^^^^^^^^ + +Commences the capture of video, audio and/or VBI data. All encoding +parameters must be initialized prior to this API call. Captures frames +continuously or until a predefined number of frames have been captured. + +Param[0] +^^^^^^^^ + +Capture stream type: + + - 0=MPEG + - 1=Raw + - 2=Raw passthrough + - 3=VBI + + +Param[1] +^^^^^^^^ + +Bitmask: + + - Bit 0 when set, captures YUV + - Bit 1 when set, captures PCM audio + - Bit 2 when set, captures VBI (same as param[0]=3) + - Bit 3 when set, the capture destination is the decoder + (same as param[0]=2) + - Bit 4 when set, the capture destination is the host + +.. note:: this parameter is only meaningful for RAW capture type. + + + +CX2341X_ENC_STOP_CAPTURE +~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 130/0x82 + +Description +^^^^^^^^^^^ + +Ends a capture in progress + +Param[0] +^^^^^^^^ + +- 0=stop at end of GOP (generates IRQ) +- 1=stop immediate (no IRQ) + +Param[1] +^^^^^^^^ + +Stream type to stop, see param[0] of API 0x81 + +Param[2] +^^^^^^^^ + +Subtype, see param[1] of API 0x81 + + + +CX2341X_ENC_SET_AUDIO_ID +~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 137/0x89 + +Description +^^^^^^^^^^^ + +Assigns the transport stream ID of the encoded audio stream + +Param[0] +^^^^^^^^ + +Audio Stream ID + + + +CX2341X_ENC_SET_VIDEO_ID +~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 139/0x8B + +Description +^^^^^^^^^^^ + +Set video transport stream ID + +Param[0] +^^^^^^^^ + +Video stream ID + + + +CX2341X_ENC_SET_PCR_ID +~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 141/0x8D + +Description +^^^^^^^^^^^ + +Assigns the transport stream ID for PCR packets + +Param[0] +^^^^^^^^ + +PCR Stream ID + + + +CX2341X_ENC_SET_FRAME_RATE +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 143/0x8F + +Description +^^^^^^^^^^^ + +Set video frames per second. Change occurs at start of new GOP. + +Param[0] +^^^^^^^^ + +- 0=30fps +- 1=25fps + + + +CX2341X_ENC_SET_FRAME_SIZE +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 145/0x91 + +Description +^^^^^^^^^^^ + +Select video stream encoding resolution. + +Param[0] +^^^^^^^^ + +Height in lines. Default 480 + +Param[1] +^^^^^^^^ + +Width in pixels. Default 720 + + + +CX2341X_ENC_SET_BIT_RATE +~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 149/0x95 + +Description +^^^^^^^^^^^ + +Assign average video stream bitrate. + +Param[0] +^^^^^^^^ + +0=variable bitrate, 1=constant bitrate + +Param[1] +^^^^^^^^ + +bitrate in bits per second + +Param[2] +^^^^^^^^ + +peak bitrate in bits per second, divided by 400 + +Param[3] +^^^^^^^^ + +Mux bitrate in bits per second, divided by 400. May be 0 (default). + +Param[4] +^^^^^^^^ + +Rate Control VBR Padding + +Param[5] +^^^^^^^^ + +VBV Buffer used by encoder + +.. note:: + + #) Param\[3\] and Param\[4\] seem to be always 0 + #) Param\[5\] doesn't seem to be used. + + + +CX2341X_ENC_SET_GOP_PROPERTIES +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 151/0x97 + +Description +^^^^^^^^^^^ + +Setup the GOP structure + +Param[0] +^^^^^^^^ + +GOP size (maximum is 34) + +Param[1] +^^^^^^^^ + +Number of B frames between the I and P frame, plus 1. +For example: IBBPBBPBBPBB --> GOP size: 12, number of B frames: 2+1 = 3 + +.. note:: + + GOP size must be a multiple of (B-frames + 1). + + + +CX2341X_ENC_SET_ASPECT_RATIO +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 153/0x99 + +Description +^^^^^^^^^^^ + +Sets the encoding aspect ratio. Changes in the aspect ratio take effect +at the start of the next GOP. + +Param[0] +^^^^^^^^ + +- '0000' forbidden +- '0001' 1:1 square +- '0010' 4:3 +- '0011' 16:9 +- '0100' 2.21:1 +- '0101' to '1111' reserved + + + +CX2341X_ENC_SET_DNR_FILTER_MODE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 155/0x9B + +Description +^^^^^^^^^^^ + +Assign Dynamic Noise Reduction operating mode + +Param[0] +^^^^^^^^ + +Bit0: Spatial filter, set=auto, clear=manual +Bit1: Temporal filter, set=auto, clear=manual + +Param[1] +^^^^^^^^ + +Median filter: + +- 0=Disabled +- 1=Horizontal +- 2=Vertical +- 3=Horiz/Vert +- 4=Diagonal + + + +CX2341X_ENC_SET_DNR_FILTER_PROPS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 157/0x9D + +Description +^^^^^^^^^^^ + +These Dynamic Noise Reduction filter values are only meaningful when +the respective filter is set to "manual" (See API 0x9B) + +Param[0] +^^^^^^^^ + +Spatial filter: default 0, range 0:15 + +Param[1] +^^^^^^^^ + +Temporal filter: default 0, range 0:31 + + + +CX2341X_ENC_SET_CORING_LEVELS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 159/0x9F + +Description +^^^^^^^^^^^ + +Assign Dynamic Noise Reduction median filter properties. + +Param[0] +^^^^^^^^ + +Threshold above which the luminance median filter is enabled. +Default: 0, range 0:255 + +Param[1] +^^^^^^^^ + +Threshold below which the luminance median filter is enabled. +Default: 255, range 0:255 + +Param[2] +^^^^^^^^ + +Threshold above which the chrominance median filter is enabled. +Default: 0, range 0:255 + +Param[3] +^^^^^^^^ + +Threshold below which the chrominance median filter is enabled. +Default: 255, range 0:255 + + + +CX2341X_ENC_SET_SPATIAL_FILTER_TYPE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 161/0xA1 + +Description +^^^^^^^^^^^ + +Assign spatial prefilter parameters + +Param[0] +^^^^^^^^ + +Luminance filter + +- 0=Off +- 1=1D Horizontal +- 2=1D Vertical +- 3=2D H/V Separable (default) +- 4=2D Symmetric non-separable + +Param[1] +^^^^^^^^ + +Chrominance filter + +- 0=Off +- 1=1D Horizontal (default) + + + +CX2341X_ENC_SET_VBI_LINE +~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 183/0xB7 + +Description +^^^^^^^^^^^ + +Selects VBI line number. + +Param[0] +^^^^^^^^ + +- Bits 0:4 line number +- Bit 31 0=top_field, 1=bottom_field +- Bits 0:31 all set specifies "all lines" + +Param[1] +^^^^^^^^ + +VBI line information features: 0=disabled, 1=enabled + +Param[2] +^^^^^^^^ + +Slicing: 0=None, 1=Closed Caption +Almost certainly not implemented. Set to 0. + +Param[3] +^^^^^^^^ + +Luminance samples in this line. +Almost certainly not implemented. Set to 0. + +Param[4] +^^^^^^^^ + +Chrominance samples in this line +Almost certainly not implemented. Set to 0. + + + +CX2341X_ENC_SET_STREAM_TYPE +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 185/0xB9 + +Description +^^^^^^^^^^^ + +Assign stream type + +.. note:: + + Transport stream is not working in recent firmwares. + And in older firmwares the timestamps in the TS seem to be + unreliable. + +Param[0] +^^^^^^^^ + +- 0=Program stream +- 1=Transport stream +- 2=MPEG1 stream +- 3=PES A/V stream +- 5=PES Video stream +- 7=PES Audio stream +- 10=DVD stream +- 11=VCD stream +- 12=SVCD stream +- 13=DVD_S1 stream +- 14=DVD_S2 stream + + + +CX2341X_ENC_SET_OUTPUT_PORT +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 187/0xBB + +Description +^^^^^^^^^^^ + +Assign stream output port. Normally 0 when the data is copied through +the PCI bus (DMA), and 1 when the data is streamed to another chip +(pvrusb and cx88-blackbird). + +Param[0] +^^^^^^^^ + +- 0=Memory (default) +- 1=Streaming +- 2=Serial + +Param[1] +^^^^^^^^ + +Unknown, but leaving this to 0 seems to work best. Indications are that +this might have to do with USB support, although passing anything but 0 +only breaks things. + + + +CX2341X_ENC_SET_AUDIO_PROPERTIES +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 189/0xBD + +Description +^^^^^^^^^^^ + +Set audio stream properties, may be called while encoding is in progress. + +.. note:: + + All bitfields are consistent with ISO11172 documentation except + bits 2:3 which ISO docs define as: + + - '11' Layer I + - '10' Layer II + - '01' Layer III + - '00' Undefined + + This discrepancy may indicate a possible error in the documentation. + Testing indicated that only Layer II is actually working, and that + the minimum bitrate should be 192 kbps. + +Param[0] +^^^^^^^^ + +Bitmask: + +.. code-block:: none + + 0:1 '00' 44.1Khz + '01' 48Khz + '10' 32Khz + '11' reserved + + 2:3 '01'=Layer I + '10'=Layer II + + 4:7 Bitrate: + Index | Layer I | Layer II + ------+-------------+------------ + '0000' | free format | free format + '0001' | 32 kbit/s | 32 kbit/s + '0010' | 64 kbit/s | 48 kbit/s + '0011' | 96 kbit/s | 56 kbit/s + '0100' | 128 kbit/s | 64 kbit/s + '0101' | 160 kbit/s | 80 kbit/s + '0110' | 192 kbit/s | 96 kbit/s + '0111' | 224 kbit/s | 112 kbit/s + '1000' | 256 kbit/s | 128 kbit/s + '1001' | 288 kbit/s | 160 kbit/s + '1010' | 320 kbit/s | 192 kbit/s + '1011' | 352 kbit/s | 224 kbit/s + '1100' | 384 kbit/s | 256 kbit/s + '1101' | 416 kbit/s | 320 kbit/s + '1110' | 448 kbit/s | 384 kbit/s + + .. note:: + + For Layer II, not all combinations of total bitrate + and mode are allowed. See ISO11172-3 3-Annex B, + Table 3-B.2 + + 8:9 '00'=Stereo + '01'=JointStereo + '10'=Dual + '11'=Mono + + .. note:: + + The cx23415 cannot decode Joint Stereo properly. + + 10:11 Mode Extension used in joint_stereo mode. + In Layer I and II they indicate which subbands are in + intensity_stereo. All other subbands are coded in stereo. + '00' subbands 4-31 in intensity_stereo, bound==4 + '01' subbands 8-31 in intensity_stereo, bound==8 + '10' subbands 12-31 in intensity_stereo, bound==12 + '11' subbands 16-31 in intensity_stereo, bound==16 + + 12:13 Emphasis: + '00' None + '01' 50/15uS + '10' reserved + '11' CCITT J.17 + + 14 CRC: + '0' off + '1' on + + 15 Copyright: + '0' off + '1' on + + 16 Generation: + '0' copy + '1' original + + + +CX2341X_ENC_HALT_FW +~~~~~~~~~~~~~~~~~~~ + +Enum: 195/0xC3 + +Description +^^^^^^^^^^^ + +The firmware is halted and no further API calls are serviced until the +firmware is uploaded again. + + + +CX2341X_ENC_GET_VERSION +~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 196/0xC4 + +Description +^^^^^^^^^^^ + +Returns the version of the encoder firmware. + +Result[0] +^^^^^^^^^ + +Version bitmask: +- Bits 0:15 build +- Bits 16:23 minor +- Bits 24:31 major + + + +CX2341X_ENC_SET_GOP_CLOSURE +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 197/0xC5 + +Description +^^^^^^^^^^^ + +Assigns the GOP open/close property. + +Param[0] +^^^^^^^^ + +- 0=Open +- 1=Closed + + + +CX2341X_ENC_GET_SEQ_END +~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 198/0xC6 + +Description +^^^^^^^^^^^ + +Obtains the sequence end code of the encoder's buffer. When a capture +is started a number of interrupts are still generated, the last of +which will have Result[0] set to 1 and Result[1] will contain the size +of the buffer. + +Result[0] +^^^^^^^^^ + +State of the transfer (1 if last buffer) + +Result[1] +^^^^^^^^^ + +If Result[0] is 1, this contains the size of the last buffer, undefined +otherwise. + + + +CX2341X_ENC_SET_PGM_INDEX_INFO +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 199/0xC7 + +Description +^^^^^^^^^^^ + +Sets the Program Index Information. +The information is stored as follows: + +.. code-block:: c + + struct info { + u32 length; // Length of this frame + u32 offset_low; // Offset in the file of the + u32 offset_high; // start of this frame + u32 mask1; // Bits 0-2 are the type mask: + // 1=I, 2=P, 4=B + // 0=End of Program Index, other fields + // are invalid. + u32 pts; // The PTS of the frame + u32 mask2; // Bit 0 is bit 32 of the pts. + }; + u32 table_ptr; + struct info index[400]; + +The table_ptr is the encoder memory address in the table were +*new* entries will be written. + +.. note:: This is a ringbuffer, so the table_ptr will wraparound. + +Param[0] +^^^^^^^^ + +Picture Mask: +- 0=No index capture +- 1=I frames +- 3=I,P frames +- 7=I,P,B frames + +(Seems to be ignored, it always indexes I, P and B frames) + +Param[1] +^^^^^^^^ + +Elements requested (up to 400) + +Result[0] +^^^^^^^^^ + +Offset in the encoder memory of the start of the table. + +Result[1] +^^^^^^^^^ + +Number of allocated elements up to a maximum of Param[1] + + + +CX2341X_ENC_SET_VBI_CONFIG +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 200/0xC8 + +Description +^^^^^^^^^^^ + +Configure VBI settings + +Param[0] +^^^^^^^^ + +Bitmap: + +.. code-block:: none + + 0 Mode '0' Sliced, '1' Raw + 1:3 Insertion: + '000' insert in extension & user data + '001' insert in private packets + '010' separate stream and user data + '111' separate stream and private data + 8:15 Stream ID (normally 0xBD) + +Param[1] +^^^^^^^^ + +Frames per interrupt (max 8). Only valid in raw mode. + +Param[2] +^^^^^^^^ + +Total raw VBI frames. Only valid in raw mode. + +Param[3] +^^^^^^^^ + +Start codes + +Param[4] +^^^^^^^^ + +Stop codes + +Param[5] +^^^^^^^^ + +Lines per frame + +Param[6] +^^^^^^^^ + +Byte per line + +Result[0] +^^^^^^^^^ + +Observed frames per interrupt in raw mode only. Rage 1 to Param[1] + +Result[1] +^^^^^^^^^ + +Observed number of frames in raw mode. Range 1 to Param[2] + +Result[2] +^^^^^^^^^ + +Memory offset to start or raw VBI data + + + +CX2341X_ENC_SET_DMA_BLOCK_SIZE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 201/0xC9 + +Description +^^^^^^^^^^^ + +Set DMA transfer block size + +Param[0] +^^^^^^^^ + +DMA transfer block size in bytes or frames. When unit is bytes, +supported block sizes are 2^7, 2^8 and 2^9 bytes. + +Param[1] +^^^^^^^^ + +Unit: 0=bytes, 1=frames + + + +CX2341X_ENC_GET_PREV_DMA_INFO_MB_10 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 202/0xCA + +Description +^^^^^^^^^^^ + +Returns information on the previous DMA transfer in conjunction with +bit 27 of the interrupt mask. Uses mailbox 10. + +Result[0] +^^^^^^^^^ + +Type of stream + +Result[1] +^^^^^^^^^ + +Address Offset + +Result[2] +^^^^^^^^^ + +Maximum size of transfer + + + +CX2341X_ENC_GET_PREV_DMA_INFO_MB_9 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 203/0xCB + +Description +^^^^^^^^^^^ + +Returns information on the previous DMA transfer in conjunction with +bit 27 or 18 of the interrupt mask. Uses mailbox 9. + +Result[0] +^^^^^^^^^ + +Status bits: +- 0 read completed +- 1 write completed +- 2 DMA read error +- 3 DMA write error +- 4 Scatter-Gather array error + +Result[1] +^^^^^^^^^ + +DMA type + +Result[2] +^^^^^^^^^ + +Presentation Time Stamp bits 0..31 + +Result[3] +^^^^^^^^^ + +Presentation Time Stamp bit 32 + + + +CX2341X_ENC_SCHED_DMA_TO_HOST +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 204/0xCC + +Description +^^^^^^^^^^^ + +Setup DMA to host operation + +Param[0] +^^^^^^^^ + +Memory address of link list + +Param[1] +^^^^^^^^ + +Length of link list (wtf: what units ???) + +Param[2] +^^^^^^^^ + +DMA type (0=MPEG) + + + +CX2341X_ENC_INITIALIZE_INPUT +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 205/0xCD + +Description +^^^^^^^^^^^ + +Initializes the video input + + + +CX2341X_ENC_SET_FRAME_DROP_RATE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 208/0xD0 + +Description +^^^^^^^^^^^ + +For each frame captured, skip specified number of frames. + +Param[0] +^^^^^^^^ + +Number of frames to skip + + + +CX2341X_ENC_PAUSE_ENCODER +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 210/0xD2 + +Description +^^^^^^^^^^^ + +During a pause condition, all frames are dropped instead of being encoded. + +Param[0] +^^^^^^^^ + +- 0=Pause encoding +- 1=Continue encoding + + + +CX2341X_ENC_REFRESH_INPUT +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 211/0xD3 + +Description +^^^^^^^^^^^ + +Refreshes the video input + + + +CX2341X_ENC_SET_COPYRIGHT +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 212/0xD4 + +Description +^^^^^^^^^^^ + +Sets stream copyright property + +Param[0] +^^^^^^^^ + + +- 0=Stream is not copyrighted +- 1=Stream is copyrighted + + + +CX2341X_ENC_SET_EVENT_NOTIFICATION +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 213/0xD5 + +Description +^^^^^^^^^^^ + +Setup firmware to notify the host about a particular event. Host must +unmask the interrupt bit. + +Param[0] +^^^^^^^^ + +Event (0=refresh encoder input) + +Param[1] +^^^^^^^^ + +Notification 0=disabled 1=enabled + +Param[2] +^^^^^^^^ + +Interrupt bit + +Param[3] +^^^^^^^^ + +Mailbox slot, -1 if no mailbox required. + + + +CX2341X_ENC_SET_NUM_VSYNC_LINES +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 214/0xD6 + +Description +^^^^^^^^^^^ + +Depending on the analog video decoder used, this assigns the number +of lines for field 1 and 2. + +Param[0] +^^^^^^^^ + +Field 1 number of lines: +- 0x00EF for SAA7114 +- 0x00F0 for SAA7115 +- 0x0105 for Micronas + +Param[1] +^^^^^^^^ + +Field 2 number of lines: +- 0x00EF for SAA7114 +- 0x00F0 for SAA7115 +- 0x0106 for Micronas + + + +CX2341X_ENC_SET_PLACEHOLDER +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 215/0xD7 + +Description +^^^^^^^^^^^ + +Provides a mechanism of inserting custom user data in the MPEG stream. + +Param[0] +^^^^^^^^ + +- 0=extension & user data +- 1=private packet with stream ID 0xBD + +Param[1] +^^^^^^^^ + +Rate at which to insert data, in units of frames (for private packet) +or GOPs (for ext. & user data) + +Param[2] +^^^^^^^^ + +Number of data DWORDs (below) to insert + +Param[3] +^^^^^^^^ + +Custom data 0 + +Param[4] +^^^^^^^^ + +Custom data 1 + +Param[5] +^^^^^^^^ + +Custom data 2 + +Param[6] +^^^^^^^^ + +Custom data 3 + +Param[7] +^^^^^^^^ + +Custom data 4 + +Param[8] +^^^^^^^^ + +Custom data 5 + +Param[9] +^^^^^^^^ + +Custom data 6 + +Param[10] +^^^^^^^^^ + +Custom data 7 + +Param[11] +^^^^^^^^^ + +Custom data 8 + + + +CX2341X_ENC_MUTE_VIDEO +~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 217/0xD9 + +Description +^^^^^^^^^^^ + +Video muting + +Param[0] +^^^^^^^^ + +Bit usage: + +.. code-block:: none + + 0 '0'=video not muted + '1'=video muted, creates frames with the YUV color defined below + 1:7 Unused + 8:15 V chrominance information + 16:23 U chrominance information + 24:31 Y luminance information + + + +CX2341X_ENC_MUTE_AUDIO +~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 218/0xDA + +Description +^^^^^^^^^^^ + +Audio muting + +Param[0] +^^^^^^^^ + +- 0=audio not muted +- 1=audio muted (produces silent mpeg audio stream) + + + +CX2341X_ENC_SET_VERT_CROP_LINE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 219/0xDB + +Description +^^^^^^^^^^^ + +Something to do with 'Vertical Crop Line' + +Param[0] +^^^^^^^^ + +If saa7114 and raw VBI capture and 60 Hz, then set to 10001. +Else 0. + + + +CX2341X_ENC_MISC +~~~~~~~~~~~~~~~~ + +Enum: 220/0xDC + +Description +^^^^^^^^^^^ + +Miscellaneous actions. Not known for 100% what it does. It's really a +sort of ioctl call. The first parameter is a command number, the second +the value. + +Param[0] +^^^^^^^^ + +Command number: + +.. code-block:: none + + 1=set initial SCR value when starting encoding (works). + 2=set quality mode (apparently some test setting). + 3=setup advanced VIM protection handling. + Always 1 for the cx23416 and 0 for cx23415. + 4=generate DVD compatible PTS timestamps + 5=USB flush mode + 6=something to do with the quantization matrix + 7=set navigation pack insertion for DVD: adds 0xbf (private stream 2) + packets to the MPEG. The size of these packets is 2048 bytes (including + the header of 6 bytes: 0x000001bf + length). The payload is zeroed and + it is up to the application to fill them in. These packets are apparently + inserted every four frames. + 8=enable scene change detection (seems to be a failure) + 9=set history parameters of the video input module + 10=set input field order of VIM + 11=set quantization matrix + 12=reset audio interface after channel change or input switch (has no argument). + Needed for the cx2584x, not needed for the mspx4xx, but it doesn't seem to + do any harm calling it regardless. + 13=set audio volume delay + 14=set audio delay + + +Param[1] +^^^^^^^^ + +Command value. + +Decoder firmware API description +-------------------------------- + +.. note:: this API is part of the decoder firmware, so it's cx23415 only. + + + +CX2341X_DEC_PING_FW +~~~~~~~~~~~~~~~~~~~ + +Enum: 0/0x00 + +Description +^^^^^^^^^^^ + +This API call does nothing. It may be used to check if the firmware +is responding. + + + +CX2341X_DEC_START_PLAYBACK +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 1/0x01 + +Description +^^^^^^^^^^^ + +Begin or resume playback. + +Param[0] +^^^^^^^^ + +0 based frame number in GOP to begin playback from. + +Param[1] +^^^^^^^^ + +Specifies the number of muted audio frames to play before normal +audio resumes. (This is not implemented in the firmware, leave at 0) + + + +CX2341X_DEC_STOP_PLAYBACK +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 2/0x02 + +Description +^^^^^^^^^^^ + +Ends playback and clears all decoder buffers. If PTS is not zero, +playback stops at specified PTS. + +Param[0] +^^^^^^^^ + +Display 0=last frame, 1=black + +.. note:: + + this takes effect immediately, so if you want to wait for a PTS, + then use '0', otherwise the screen goes to black at once. + You can call this later (even if there is no playback) with a 1 value + to set the screen to black. + +Param[1] +^^^^^^^^ + +PTS low + +Param[2] +^^^^^^^^ + +PTS high + + + +CX2341X_DEC_SET_PLAYBACK_SPEED +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 3/0x03 + +Description +^^^^^^^^^^^ + +Playback stream at speed other than normal. There are two modes of +operation: + + - Smooth: host transfers entire stream and firmware drops unused + frames. + - Coarse: host drops frames based on indexing as required to achieve + desired speed. + +Param[0] +^^^^^^^^ + +.. code-block:: none + + Bitmap: + 0:7 0 normal + 1 fast only "1.5 times" + n nX fast, 1/nX slow + 30 Framedrop: + '0' during 1.5 times play, every other B frame is dropped + '1' during 1.5 times play, stream is unchanged (bitrate + must not exceed 8mbps) + 31 Speed: + '0' slow + '1' fast + +.. note:: + + n is limited to 2. Anything higher does not result in + faster playback. Instead the host should start dropping frames. + +Param[1] +^^^^^^^^ + +Direction: 0=forward, 1=reverse + +.. note:: + + to make reverse playback work you have to write full GOPs in + reverse order. + +Param[2] +^^^^^^^^ + +.. code-block:: none + + Picture mask: + 1=I frames + 3=I, P frames + 7=I, P, B frames + +Param[3] +^^^^^^^^ + +B frames per GOP (for reverse play only) + +.. note:: + + for reverse playback the Picture Mask should be set to I or I, P. + Adding B frames to the mask will result in corrupt video. This field + has to be set to the correct value in order to keep the timing correct. + +Param[4] +^^^^^^^^ + +Mute audio: 0=disable, 1=enable + +Param[5] +^^^^^^^^ + +Display 0=frame, 1=field + +Param[6] +^^^^^^^^ + +Specifies the number of muted audio frames to play before normal audio +resumes. (Not implemented in the firmware, leave at 0) + + + +CX2341X_DEC_STEP_VIDEO +~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 5/0x05 + +Description +^^^^^^^^^^^ + +Each call to this API steps the playback to the next unit defined below +in the current playback direction. + +Param[0] +^^^^^^^^ + +0=frame, 1=top field, 2=bottom field + + + +CX2341X_DEC_SET_DMA_BLOCK_SIZE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 8/0x08 + +Description +^^^^^^^^^^^ + +Set DMA transfer block size. Counterpart to API 0xC9 + +Param[0] +^^^^^^^^ + +DMA transfer block size in bytes. A different size may be specified +when issuing the DMA transfer command. + + + +CX2341X_DEC_GET_XFER_INFO +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 9/0x09 + +Description +^^^^^^^^^^^ + +This API call may be used to detect an end of stream condition. + +Result[0] +^^^^^^^^^ + +Stream type + +Result[1] +^^^^^^^^^ + +Address offset + +Result[2] +^^^^^^^^^ + +Maximum bytes to transfer + +Result[3] +^^^^^^^^^ + +Buffer fullness + + + +CX2341X_DEC_GET_DMA_STATUS +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 10/0x0A + +Description +^^^^^^^^^^^ + +Status of the last DMA transfer + +Result[0] +^^^^^^^^^ + +Bit 1 set means transfer complete +Bit 2 set means DMA error +Bit 3 set means linked list error + +Result[1] +^^^^^^^^^ + +DMA type: 0=MPEG, 1=OSD, 2=YUV + + + +CX2341X_DEC_SCHED_DMA_FROM_HOST +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 11/0x0B + +Description +^^^^^^^^^^^ + +Setup DMA from host operation. Counterpart to API 0xCC + +Param[0] +^^^^^^^^ + +Memory address of link list + +Param[1] +^^^^^^^^ + +Total # of bytes to transfer + +Param[2] +^^^^^^^^ + +DMA type (0=MPEG, 1=OSD, 2=YUV) + + + +CX2341X_DEC_PAUSE_PLAYBACK +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 13/0x0D + +Description +^^^^^^^^^^^ + +Freeze playback immediately. In this mode, when internal buffers are +full, no more data will be accepted and data request IRQs will be +masked. + +Param[0] +^^^^^^^^ + +Display: 0=last frame, 1=black + + + +CX2341X_DEC_HALT_FW +~~~~~~~~~~~~~~~~~~~ + +Enum: 14/0x0E + +Description +^^^^^^^^^^^ + +The firmware is halted and no further API calls are serviced until +the firmware is uploaded again. + + + +CX2341X_DEC_SET_STANDARD +~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 16/0x10 + +Description +^^^^^^^^^^^ + +Selects display standard + +Param[0] +^^^^^^^^ + +0=NTSC, 1=PAL + + + +CX2341X_DEC_GET_VERSION +~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 17/0x11 + +Description +^^^^^^^^^^^ + +Returns decoder firmware version information + +Result[0] +^^^^^^^^^ + +Version bitmask: + - Bits 0:15 build + - Bits 16:23 minor + - Bits 24:31 major + + + +CX2341X_DEC_SET_STREAM_INPUT +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 20/0x14 + +Description +^^^^^^^^^^^ + +Select decoder stream input port + +Param[0] +^^^^^^^^ + +0=memory (default), 1=streaming + + + +CX2341X_DEC_GET_TIMING_INFO +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 21/0x15 + +Description +^^^^^^^^^^^ + +Returns timing information from start of playback + +Result[0] +^^^^^^^^^ + +Frame count by decode order + +Result[1] +^^^^^^^^^ + +Video PTS bits 0:31 by display order + +Result[2] +^^^^^^^^^ + +Video PTS bit 32 by display order + +Result[3] +^^^^^^^^^ + +SCR bits 0:31 by display order + +Result[4] +^^^^^^^^^ + +SCR bit 32 by display order + + + +CX2341X_DEC_SET_AUDIO_MODE +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 22/0x16 + +Description +^^^^^^^^^^^ + +Select audio mode + +Param[0] +^^^^^^^^ + +Dual mono mode action + 0=Stereo, 1=Left, 2=Right, 3=Mono, 4=Swap, -1=Unchanged + +Param[1] +^^^^^^^^ + +Stereo mode action: + 0=Stereo, 1=Left, 2=Right, 3=Mono, 4=Swap, -1=Unchanged + + + +CX2341X_DEC_SET_EVENT_NOTIFICATION +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 23/0x17 + +Description +^^^^^^^^^^^ + +Setup firmware to notify the host about a particular event. +Counterpart to API 0xD5 + +Param[0] +^^^^^^^^ + +Event: + - 0=Audio mode change between mono, (joint) stereo and dual channel. + - 3=Decoder started + - 4=Unknown: goes off 10-15 times per second while decoding. + - 5=Some sync event: goes off once per frame. + +Param[1] +^^^^^^^^ + +Notification 0=disabled, 1=enabled + +Param[2] +^^^^^^^^ + +Interrupt bit + +Param[3] +^^^^^^^^ + +Mailbox slot, -1 if no mailbox required. + + + +CX2341X_DEC_SET_DISPLAY_BUFFERS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 24/0x18 + +Description +^^^^^^^^^^^ + +Number of display buffers. To decode all frames in reverse playback you +must use nine buffers. + +Param[0] +^^^^^^^^ + +0=six buffers, 1=nine buffers + + + +CX2341X_DEC_EXTRACT_VBI +~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 25/0x19 + +Description +^^^^^^^^^^^ + +Extracts VBI data + +Param[0] +^^^^^^^^ + +0=extract from extension & user data, 1=extract from private packets + +Result[0] +^^^^^^^^^ + +VBI table location + +Result[1] +^^^^^^^^^ + +VBI table size + + + +CX2341X_DEC_SET_DECODER_SOURCE +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 26/0x1A + +Description +^^^^^^^^^^^ + +Selects decoder source. Ensure that the parameters passed to this +API match the encoder settings. + +Param[0] +^^^^^^^^ + +Mode: 0=MPEG from host, 1=YUV from encoder, 2=YUV from host + +Param[1] +^^^^^^^^ + +YUV picture width + +Param[2] +^^^^^^^^ + +YUV picture height + +Param[3] +^^^^^^^^ + +Bitmap: see Param[0] of API 0xBD + + + +CX2341X_DEC_SET_PREBUFFERING +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Enum: 30/0x1E + +Description +^^^^^^^^^^^ + +Decoder prebuffering, when enabled up to 128KB are buffered for +streams <8mpbs or 640KB for streams >8mbps + +Param[0] +^^^^^^^^ + +0=off, 1=on + +PVR350 Video decoder registers 0x02002800 -> 0x02002B00 +------------------------------------------------------- + +Author: Ian Armstrong + +Version: v0.4 + +Date: 12 March 2007 + + +This list has been worked out through trial and error. There will be mistakes +and omissions. Some registers have no obvious effect so it's hard to say what +they do, while others interact with each other, or require a certain load +sequence. Horizontal filter setup is one example, with six registers working +in unison and requiring a certain load sequence to correctly configure. The +indexed colour palette is much easier to set at just two registers, but again +it requires a certain load sequence. + +Some registers are fussy about what they are set to. Load in a bad value & the +decoder will fail. A firmware reload will often recover, but sometimes a reset +is required. For registers containing size information, setting them to 0 is +generally a bad idea. For other control registers i.e. 2878, you'll only find +out what values are bad when it hangs. + +.. code-block:: none + + -------------------------------------------------------------------------------- + 2800 + bit 0 + Decoder enable + 0 = disable + 1 = enable + -------------------------------------------------------------------------------- + 2804 + bits 0:31 + Decoder horizontal Y alias register 1 + --------------- + 2808 + bits 0:31 + Decoder horizontal Y alias register 2 + --------------- + 280C + bits 0:31 + Decoder horizontal Y alias register 3 + --------------- + 2810 + bits 0:31 + Decoder horizontal Y alias register 4 + --------------- + 2814 + bits 0:31 + Decoder horizontal Y alias register 5 + --------------- + 2818 + bits 0:31 + Decoder horizontal Y alias trigger + + These six registers control the horizontal aliasing filter for the Y plane. + The first five registers must all be loaded before accessing the trigger + (2818), as this register actually clocks the data through for the first + five. + + To correctly program set the filter, this whole procedure must be done 16 + times. The actual register contents are copied from a lookup-table in the + firmware which contains 4 different filter settings. + + -------------------------------------------------------------------------------- + 281C + bits 0:31 + Decoder horizontal UV alias register 1 + --------------- + 2820 + bits 0:31 + Decoder horizontal UV alias register 2 + --------------- + 2824 + bits 0:31 + Decoder horizontal UV alias register 3 + --------------- + 2828 + bits 0:31 + Decoder horizontal UV alias register 4 + --------------- + 282C + bits 0:31 + Decoder horizontal UV alias register 5 + --------------- + 2830 + bits 0:31 + Decoder horizontal UV alias trigger + + These six registers control the horizontal aliasing for the UV plane. + Operation is the same as the Y filter, with 2830 being the trigger + register. + + -------------------------------------------------------------------------------- + 2834 + bits 0:15 + Decoder Y source width in pixels + + bits 16:31 + Decoder Y destination width in pixels + --------------- + 2838 + bits 0:15 + Decoder UV source width in pixels + + bits 16:31 + Decoder UV destination width in pixels + + NOTE: For both registers, the resulting image must be fully visible on + screen. If the image exceeds the right edge both the source and destination + size must be adjusted to reflect the visible portion. For the source width, + you must take into account the scaling when calculating the new value. + -------------------------------------------------------------------------------- + + 283C + bits 0:31 + Decoder Y horizontal scaling + Normally = Reg 2854 >> 2 + --------------- + 2840 + bits 0:31 + Decoder ?? unknown - horizontal scaling + Usually 0x00080514 + --------------- + 2844 + bits 0:31 + Decoder UV horizontal scaling + Normally = Reg 2854 >> 2 + --------------- + 2848 + bits 0:31 + Decoder ?? unknown - horizontal scaling + Usually 0x00100514 + --------------- + 284C + bits 0:31 + Decoder ?? unknown - Y plane + Usually 0x00200020 + --------------- + 2850 + bits 0:31 + Decoder ?? unknown - UV plane + Usually 0x00200020 + --------------- + 2854 + bits 0:31 + Decoder 'master' value for horizontal scaling + --------------- + 2858 + bits 0:31 + Decoder ?? unknown + Usually 0 + --------------- + 285C + bits 0:31 + Decoder ?? unknown + Normally = Reg 2854 >> 1 + --------------- + 2860 + bits 0:31 + Decoder ?? unknown + Usually 0 + --------------- + 2864 + bits 0:31 + Decoder ?? unknown + Normally = Reg 2854 >> 1 + --------------- + 2868 + bits 0:31 + Decoder ?? unknown + Usually 0 + + Most of these registers either control horizontal scaling, or appear linked + to it in some way. Register 2854 contains the 'master' value & the other + registers can be calculated from that one. You must also remember to + correctly set the divider in Reg 2874. + + To enlarge: + Reg 2854 = (source_width * 0x00200000) / destination_width + Reg 2874 = No divide + + To reduce from full size down to half size: + Reg 2854 = (source_width/2 * 0x00200000) / destination width + Reg 2874 = Divide by 2 + + To reduce from half size down to quarter size: + Reg 2854 = (source_width/4 * 0x00200000) / destination width + Reg 2874 = Divide by 4 + + The result is always rounded up. + + -------------------------------------------------------------------------------- + 286C + bits 0:15 + Decoder horizontal Y buffer offset + + bits 15:31 + Decoder horizontal UV buffer offset + + Offset into the video image buffer. If the offset is gradually incremented, + the on screen image will move left & wrap around higher up on the right. + + -------------------------------------------------------------------------------- + 2870 + bits 0:15 + Decoder horizontal Y output offset + + bits 16:31 + Decoder horizontal UV output offset + + Offsets the actual video output. Controls output alignment of the Y & UV + planes. The higher the value, the greater the shift to the left. Use + reg 2890 to move the image right. + + -------------------------------------------------------------------------------- + 2874 + bits 0:1 + Decoder horizontal Y output size divider + 00 = No divide + 01 = Divide by 2 + 10 = Divide by 3 + + bits 4:5 + Decoder horizontal UV output size divider + 00 = No divide + 01 = Divide by 2 + 10 = Divide by 3 + + bit 8 + Decoder ?? unknown + 0 = Normal + 1 = Affects video output levels + + bit 16 + Decoder ?? unknown + 0 = Normal + 1 = Disable horizontal filter + + -------------------------------------------------------------------------------- + 2878 + bit 0 + ?? unknown + + bit 1 + osd on/off + 0 = osd off + 1 = osd on + + bit 2 + Decoder + osd video timing + 0 = NTSC + 1 = PAL + + bits 3:4 + ?? unknown + + bit 5 + Decoder + osd + Swaps upper & lower fields + + -------------------------------------------------------------------------------- + 287C + bits 0:10 + Decoder & osd ?? unknown + Moves entire screen horizontally. Starts at 0x005 with the screen + shifted heavily to the right. Incrementing in steps of 0x004 will + gradually shift the screen to the left. + + bits 11:31 + ?? unknown + + Normally contents are 0x00101111 (NTSC) or 0x1010111d (PAL) + + -------------------------------------------------------------------------------- + 2880 -------- ?? unknown + 2884 -------- ?? unknown + -------------------------------------------------------------------------------- + 2888 + bit 0 + Decoder + osd ?? unknown + 0 = Normal + 1 = Misaligned fields (Correctable through 289C & 28A4) + + bit 4 + ?? unknown + + bit 8 + ?? unknown + + Warning: Bad values will require a firmware reload to recover. + Known to be bad are 0x000,0x011,0x100,0x111 + -------------------------------------------------------------------------------- + 288C + bits 0:15 + osd ?? unknown + Appears to affect the osd position stability. The higher the value the + more unstable it becomes. Decoder output remains stable. + + bits 16:31 + osd ?? unknown + Same as bits 0:15 + + -------------------------------------------------------------------------------- + 2890 + bits 0:11 + Decoder output horizontal offset. + + Horizontal offset moves the video image right. A small left shift is + possible, but it's better to use reg 2870 for that due to its greater + range. + + NOTE: Video corruption will occur if video window is shifted off the right + edge. To avoid this read the notes for 2834 & 2838. + -------------------------------------------------------------------------------- + 2894 + bits 0:23 + Decoder output video surround colour. + + Contains the colour (in yuv) used to fill the screen when the video is + running in a window. + -------------------------------------------------------------------------------- + 2898 + bits 0:23 + Decoder video window colour + Contains the colour (in yuv) used to fill the video window when the + video is turned off. + + bit 24 + Decoder video output + 0 = Video on + 1 = Video off + + bit 28 + Decoder plane order + 0 = Y,UV + 1 = UV,Y + + bit 29 + Decoder second plane byte order + 0 = Normal (UV) + 1 = Swapped (VU) + + In normal usage, the first plane is Y & the second plane is UV. Though the + order of the planes can be swapped, only the byte order of the second plane + can be swapped. This isn't much use for the Y plane, but can be useful for + the UV plane. + + -------------------------------------------------------------------------------- + 289C + bits 0:15 + Decoder vertical field offset 1 + + bits 16:31 + Decoder vertical field offset 2 + + Controls field output vertical alignment. The higher the number, the lower + the image on screen. Known starting values are 0x011E0017 (NTSC) & + 0x01500017 (PAL) + -------------------------------------------------------------------------------- + 28A0 + bits 0:15 + Decoder & osd width in pixels + + bits 16:31 + Decoder & osd height in pixels + + All output from the decoder & osd are disabled beyond this area. Decoder + output will simply go black outside of this region. If the osd tries to + exceed this area it will become corrupt. + -------------------------------------------------------------------------------- + 28A4 + bits 0:11 + osd left shift. + + Has a range of 0x770->0x7FF. With the exception of 0, any value outside of + this range corrupts the osd. + -------------------------------------------------------------------------------- + 28A8 + bits 0:15 + osd vertical field offset 1 + + bits 16:31 + osd vertical field offset 2 + + Controls field output vertical alignment. The higher the number, the lower + the image on screen. Known starting values are 0x011E0017 (NTSC) & + 0x01500017 (PAL) + -------------------------------------------------------------------------------- + 28AC -------- ?? unknown + | + V + 28BC -------- ?? unknown + -------------------------------------------------------------------------------- + 28C0 + bit 0 + Current output field + 0 = first field + 1 = second field + + bits 16:31 + Current scanline + The scanline counts from the top line of the first field + through to the last line of the second field. + -------------------------------------------------------------------------------- + 28C4 -------- ?? unknown + | + V + 28F8 -------- ?? unknown + -------------------------------------------------------------------------------- + 28FC + bit 0 + ?? unknown + 0 = Normal + 1 = Breaks decoder & osd output + -------------------------------------------------------------------------------- + 2900 + bits 0:31 + Decoder vertical Y alias register 1 + --------------- + 2904 + bits 0:31 + Decoder vertical Y alias register 2 + --------------- + 2908 + bits 0:31 + Decoder vertical Y alias trigger + + These three registers control the vertical aliasing filter for the Y plane. + Operation is similar to the horizontal Y filter (2804). The only real + difference is that there are only two registers to set before accessing + the trigger register (2908). As for the horizontal filter, the values are + taken from a lookup table in the firmware, and the procedure must be + repeated 16 times to fully program the filter. + -------------------------------------------------------------------------------- + 290C + bits 0:31 + Decoder vertical UV alias register 1 + --------------- + 2910 + bits 0:31 + Decoder vertical UV alias register 2 + --------------- + 2914 + bits 0:31 + Decoder vertical UV alias trigger + + These three registers control the vertical aliasing filter for the UV + plane. Operation is the same as the Y filter, with 2914 being the trigger. + -------------------------------------------------------------------------------- + 2918 + bits 0:15 + Decoder Y source height in pixels + + bits 16:31 + Decoder Y destination height in pixels + --------------- + 291C + bits 0:15 + Decoder UV source height in pixels divided by 2 + + bits 16:31 + Decoder UV destination height in pixels + + NOTE: For both registers, the resulting image must be fully visible on + screen. If the image exceeds the bottom edge both the source and + destination size must be adjusted to reflect the visible portion. For the + source height, you must take into account the scaling when calculating the + new value. + -------------------------------------------------------------------------------- + 2920 + bits 0:31 + Decoder Y vertical scaling + Normally = Reg 2930 >> 2 + --------------- + 2924 + bits 0:31 + Decoder Y vertical scaling + Normally = Reg 2920 + 0x514 + --------------- + 2928 + bits 0:31 + Decoder UV vertical scaling + When enlarging = Reg 2930 >> 2 + When reducing = Reg 2930 >> 3 + --------------- + 292C + bits 0:31 + Decoder UV vertical scaling + Normally = Reg 2928 + 0x514 + --------------- + 2930 + bits 0:31 + Decoder 'master' value for vertical scaling + --------------- + 2934 + bits 0:31 + Decoder ?? unknown - Y vertical scaling + --------------- + 2938 + bits 0:31 + Decoder Y vertical scaling + Normally = Reg 2930 + --------------- + 293C + bits 0:31 + Decoder ?? unknown - Y vertical scaling + --------------- + 2940 + bits 0:31 + Decoder UV vertical scaling + When enlarging = Reg 2930 >> 1 + When reducing = Reg 2930 + --------------- + 2944 + bits 0:31 + Decoder ?? unknown - UV vertical scaling + --------------- + 2948 + bits 0:31 + Decoder UV vertical scaling + Normally = Reg 2940 + --------------- + 294C + bits 0:31 + Decoder ?? unknown - UV vertical scaling + + Most of these registers either control vertical scaling, or appear linked + to it in some way. Register 2930 contains the 'master' value & all other + registers can be calculated from that one. You must also remember to + correctly set the divider in Reg 296C + + To enlarge: + Reg 2930 = (source_height * 0x00200000) / destination_height + Reg 296C = No divide + + To reduce from full size down to half size: + Reg 2930 = (source_height/2 * 0x00200000) / destination height + Reg 296C = Divide by 2 + + To reduce from half down to quarter. + Reg 2930 = (source_height/4 * 0x00200000) / destination height + Reg 296C = Divide by 4 + + -------------------------------------------------------------------------------- + 2950 + bits 0:15 + Decoder Y line index into display buffer, first field + + bits 16:31 + Decoder Y vertical line skip, first field + -------------------------------------------------------------------------------- + 2954 + bits 0:15 + Decoder Y line index into display buffer, second field + + bits 16:31 + Decoder Y vertical line skip, second field + -------------------------------------------------------------------------------- + 2958 + bits 0:15 + Decoder UV line index into display buffer, first field + + bits 16:31 + Decoder UV vertical line skip, first field + -------------------------------------------------------------------------------- + 295C + bits 0:15 + Decoder UV line index into display buffer, second field + + bits 16:31 + Decoder UV vertical line skip, second field + -------------------------------------------------------------------------------- + 2960 + bits 0:15 + Decoder destination height minus 1 + + bits 16:31 + Decoder destination height divided by 2 + -------------------------------------------------------------------------------- + 2964 + bits 0:15 + Decoder Y vertical offset, second field + + bits 16:31 + Decoder Y vertical offset, first field + + These two registers shift the Y plane up. The higher the number, the + greater the shift. + -------------------------------------------------------------------------------- + 2968 + bits 0:15 + Decoder UV vertical offset, second field + + bits 16:31 + Decoder UV vertical offset, first field + + These two registers shift the UV plane up. The higher the number, the + greater the shift. + -------------------------------------------------------------------------------- + 296C + bits 0:1 + Decoder vertical Y output size divider + 00 = No divide + 01 = Divide by 2 + 10 = Divide by 4 + + bits 8:9 + Decoder vertical UV output size divider + 00 = No divide + 01 = Divide by 2 + 10 = Divide by 4 + -------------------------------------------------------------------------------- + 2970 + bit 0 + Decoder ?? unknown + 0 = Normal + 1 = Affect video output levels + + bit 16 + Decoder ?? unknown + 0 = Normal + 1 = Disable vertical filter + + -------------------------------------------------------------------------------- + 2974 -------- ?? unknown + | + V + 29EF -------- ?? unknown + -------------------------------------------------------------------------------- + 2A00 + bits 0:2 + osd colour mode + 000 = 8 bit indexed + 001 = 16 bit (565) + 010 = 15 bit (555) + 011 = 12 bit (444) + 100 = 32 bit (8888) + + bits 4:5 + osd display bpp + 01 = 8 bit + 10 = 16 bit + 11 = 32 bit + + bit 8 + osd global alpha + 0 = Off + 1 = On + + bit 9 + osd local alpha + 0 = Off + 1 = On + + bit 10 + osd colour key + 0 = Off + 1 = On + + bit 11 + osd ?? unknown + Must be 1 + + bit 13 + osd colour space + 0 = ARGB + 1 = AYVU + + bits 16:31 + osd ?? unknown + Must be 0x001B (some kind of buffer pointer ?) + + When the bits-per-pixel is set to 8, the colour mode is ignored and + assumed to be 8 bit indexed. For 16 & 32 bits-per-pixel the colour depth + is honoured, and when using a colour depth that requires fewer bytes than + allocated the extra bytes are used as padding. So for a 32 bpp with 8 bit + index colour, there are 3 padding bytes per pixel. It's also possible to + select 16bpp with a 32 bit colour mode. This results in the pixel width + being doubled, but the color key will not work as expected in this mode. + + Colour key is as it suggests. You designate a colour which will become + completely transparent. When using 565, 555 or 444 colour modes, the + colour key is always 16 bits wide. The colour to key on is set in Reg 2A18. + + Local alpha works differently depending on the colour mode. For 32bpp & 8 + bit indexed, local alpha is a per-pixel 256 step transparency, with 0 being + transparent and 255 being solid. For the 16bpp modes 555 & 444, the unused + bit(s) act as a simple transparency switch, with 0 being solid & 1 being + fully transparent. There is no local alpha support for 16bit 565. + + Global alpha is a 256 step transparency that applies to the entire osd, + with 0 being transparent & 255 being solid. + + It's possible to combine colour key, local alpha & global alpha. + -------------------------------------------------------------------------------- + 2A04 + bits 0:15 + osd x coord for left edge + + bits 16:31 + osd y coord for top edge + --------------- + 2A08 + bits 0:15 + osd x coord for right edge + + bits 16:31 + osd y coord for bottom edge + + For both registers, (0,0) = top left corner of the display area. These + registers do not control the osd size, only where it's positioned & how + much is visible. The visible osd area cannot exceed the right edge of the + display, otherwise the osd will become corrupt. See reg 2A10 for + setting osd width. + -------------------------------------------------------------------------------- + 2A0C + bits 0:31 + osd buffer index + + An index into the osd buffer. Slowly incrementing this moves the osd left, + wrapping around onto the right edge + -------------------------------------------------------------------------------- + 2A10 + bits 0:11 + osd buffer 32 bit word width + + Contains the width of the osd measured in 32 bit words. This means that all + colour modes are restricted to a byte width which is divisible by 4. + -------------------------------------------------------------------------------- + 2A14 + bits 0:15 + osd height in pixels + + bits 16:32 + osd line index into buffer + osd will start displaying from this line. + -------------------------------------------------------------------------------- + 2A18 + bits 0:31 + osd colour key + + Contains the colour value which will be transparent. + -------------------------------------------------------------------------------- + 2A1C + bits 0:7 + osd global alpha + + Contains the global alpha value (equiv ivtvfbctl --alpha XX) + -------------------------------------------------------------------------------- + 2A20 -------- ?? unknown + | + V + 2A2C -------- ?? unknown + -------------------------------------------------------------------------------- + 2A30 + bits 0:7 + osd colour to change in indexed palette + --------------- + 2A34 + bits 0:31 + osd colour for indexed palette + + To set the new palette, first load the index of the colour to change into + 2A30, then load the new colour into 2A34. The full palette is 256 colours, + so the index range is 0x00-0xFF + -------------------------------------------------------------------------------- + 2A38 -------- ?? unknown + 2A3C -------- ?? unknown + -------------------------------------------------------------------------------- + 2A40 + bits 0:31 + osd ?? unknown + + Affects overall brightness, wrapping around to black + -------------------------------------------------------------------------------- + 2A44 + bits 0:31 + osd ?? unknown + + Green tint + -------------------------------------------------------------------------------- + 2A48 + bits 0:31 + osd ?? unknown + + Red tint + -------------------------------------------------------------------------------- + 2A4C + bits 0:31 + osd ?? unknown + + Affects overall brightness, wrapping around to black + -------------------------------------------------------------------------------- + 2A50 + bits 0:31 + osd ?? unknown + + Colour shift + -------------------------------------------------------------------------------- + 2A54 + bits 0:31 + osd ?? unknown + + Colour shift + -------------------------------------------------------------------------------- + 2A58 -------- ?? unknown + | + V + 2AFC -------- ?? unknown + -------------------------------------------------------------------------------- + 2B00 + bit 0 + osd filter control + 0 = filter off + 1 = filter on + + bits 1:4 + osd ?? unknown + + -------------------------------------------------------------------------------- + +The cx231xx DMA engine +---------------------- + + +This page describes the structures and procedures used by the cx2341x DMA +engine. + +Introduction +~~~~~~~~~~~~ + +The cx2341x PCI interface is busmaster capable. This means it has a DMA +engine to efficiently transfer large volumes of data between the card and main +memory without requiring help from a CPU. Like most hardware, it must operate +on contiguous physical memory. This is difficult to come by in large quantities +on virtual memory machines. + +Therefore, it also supports a technique called "scatter-gather". The card can +transfer multiple buffers in one operation. Instead of allocating one large +contiguous buffer, the driver can allocate several smaller buffers. + +In practice, I've seen the average transfer to be roughly 80K, but transfers +above 128K were not uncommon, particularly at startup. The 128K figure is +important, because that is the largest block that the kernel can normally +allocate. Even still, 128K blocks are hard to come by, so the driver writer is +urged to choose a smaller block size and learn the scatter-gather technique. + +Mailbox #10 is reserved for DMA transfer information. + +Note: the hardware expects little-endian data ('intel format'). + +Flow +~~~~ + +This section describes, in general, the order of events when handling DMA +transfers. Detailed information follows this section. + +- The card raises the Encoder interrupt. +- The driver reads the transfer type, offset and size from Mailbox #10. +- The driver constructs the scatter-gather array from enough free dma buffers + to cover the size. +- The driver schedules the DMA transfer via the ScheduleDMAtoHost API call. +- The card raises the DMA Complete interrupt. +- The driver checks the DMA status register for any errors. +- The driver post-processes the newly transferred buffers. + +NOTE! It is possible that the Encoder and DMA Complete interrupts get raised +simultaneously. (End of the last, start of the next, etc.) + +Mailbox #10 +~~~~~~~~~~~ + +The Flags, Command, Return Value and Timeout fields are ignored. + +- Name: Mailbox #10 +- Results[0]: Type: 0: MPEG. +- Results[1]: Offset: The position relative to the card's memory space. +- Results[2]: Size: The exact number of bytes to transfer. + +My speculation is that since the StartCapture API has a capture type of "RAW" +available, that the type field will have other values that correspond to YUV +and PCM data. + +Scatter-Gather Array +~~~~~~~~~~~~~~~~~~~~ + +The scatter-gather array is a contiguously allocated block of memory that +tells the card the source and destination of each data-block to transfer. +Card "addresses" are derived from the offset supplied by Mailbox #10. Host +addresses are the physical memory location of the target DMA buffer. + +Each S-G array element is a struct of three 32-bit words. The first word is +the source address, the second is the destination address. Both take up the +entire 32 bits. The lowest 18 bits of the third word is the transfer byte +count. The high-bit of the third word is the "last" flag. The last-flag tells +the card to raise the DMA_DONE interrupt. From hard personal experience, if +you forget to set this bit, the card will still "work" but the stream will +most likely get corrupted. + +The transfer count must be a multiple of 256. Therefore, the driver will need +to track how much data in the target buffer is valid and deal with it +accordingly. + +Array Element: + +- 32-bit Source Address +- 32-bit Destination Address +- 14-bit reserved (high bit is the last flag) +- 18-bit byte count + +DMA Transfer Status +~~~~~~~~~~~~~~~~~~~ + +Register 0x0004 holds the DMA Transfer Status: + +- bit 0: read completed +- bit 1: write completed +- bit 2: DMA read error +- bit 3: DMA write error +- bit 4: Scatter-Gather array error diff --git a/Documentation/driver-api/media/drivers/cx88-devel.rst b/Documentation/driver-api/media/drivers/cx88-devel.rst new file mode 100644 index 000000000000..cfe7c03f4930 --- /dev/null +++ b/Documentation/driver-api/media/drivers/cx88-devel.rst @@ -0,0 +1,113 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The cx88 driver +=============== + +Author: Gerd Hoffmann + +Documentation missing at the cx88 datasheet +------------------------------------------- + +MO_OUTPUT_FORMAT (0x310164) + +.. code-block:: none + + Previous default from DScaler: 0x1c1f0008 + Digit 8: 31-28 + 28: PREVREMOD = 1 + + Digit 7: 27-24 (0xc = 12 = b1100 ) + 27: COMBALT = 1 + 26: PAL_INV_PHASE + (DScaler apparently set this to 1, resulted in sucky picture) + + Digits 6,5: 23-16 + 25-16: COMB_RANGE = 0x1f [default] (9 bits -> max 512) + + Digit 4: 15-12 + 15: DISIFX = 0 + 14: INVCBF = 0 + 13: DISADAPT = 0 + 12: NARROWADAPT = 0 + + Digit 3: 11-8 + 11: FORCE2H + 10: FORCEREMD + 9: NCHROMAEN + 8: NREMODEN + + Digit 2: 7-4 + 7-6: YCORE + 5-4: CCORE + + Digit 1: 3-0 + 3: RANGE = 1 + 2: HACTEXT + 1: HSFMT + +0x47 is the sync byte for MPEG-2 transport stream packets. +Datasheet incorrectly states to use 47 decimal. 188 is the length. +All DVB compliant frontends output packets with this start code. + +Hauppauge WinTV cx88 IR information +----------------------------------- + +The controls for the mux are GPIO [0,1] for source, and GPIO 2 for muting. + +====== ======== ================================================= +GPIO0 GPIO1 +====== ======== ================================================= + 0 0 TV Audio + 1 0 FM radio + 0 1 Line-In + 1 1 Mono tuner bypass or CD passthru (tuner specific) +====== ======== ================================================= + +GPIO 16(I believe) is tied to the IR port (if present). + + +From the data sheet: + +- Register 24'h20004 PCI Interrupt Status + + - bit [18] IR_SMP_INT Set when 32 input samples have been collected over + - gpio[16] pin into GP_SAMPLE register. + +What's missing from the data sheet: + +- Setup 4KHz sampling rate (roughly 2x oversampled; good enough for our RC5 + compat remote) +- set register 0x35C050 to 0xa80a80 +- enable sampling +- set register 0x35C054 to 0x5 +- enable the IRQ bit 18 in the interrupt mask register (and + provide for a handler) + +GP_SAMPLE register is at 0x35C058 + +Bits are then right shifted into the GP_SAMPLE register at the specified +rate; you get an interrupt when a full DWORD is received. +You need to recover the actual RC5 bits out of the (oversampled) IR sensor +bits. (Hint: look for the 0/1and 1/0 crossings of the RC5 bi-phase data) An +actual raw RC5 code will span 2-3 DWORDS, depending on the actual alignment. + +I'm pretty sure when no IR signal is present the receiver is always in a +marking state(1); but stray light, etc can cause intermittent noise values +as well. Remember, this is a free running sample of the IR receiver state +over time, so don't assume any sample starts at any particular place. + +Additional info +~~~~~~~~~~~~~~~ + +This data sheet (google search) seems to have a lovely description of the +RC5 basics: +http://www.atmel.com/dyn/resources/prod_documents/doc2817.pdf + +This document has more data: +http://www.nenya.be/beor/electronics/rc5.htm + +This document has a how to decode a bi-phase data stream: +http://www.ee.washington.edu/circuit_archive/text/ir_decode.txt + +This document has still more info: +http://www.xs4all.nl/~sbp/knowledge/ir/rc5.htm diff --git a/Documentation/driver-api/media/drivers/davinci-vpbe-devel.rst b/Documentation/driver-api/media/drivers/davinci-vpbe-devel.rst new file mode 100644 index 000000000000..f0961672e6a3 --- /dev/null +++ b/Documentation/driver-api/media/drivers/davinci-vpbe-devel.rst @@ -0,0 +1,39 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The VPBE V4L2 driver design +=========================== + +File partitioning +----------------- + + V4L2 display device driver + drivers/media/platform/davinci/vpbe_display.c + drivers/media/platform/davinci/vpbe_display.h + + VPBE display controller + drivers/media/platform/davinci/vpbe.c + drivers/media/platform/davinci/vpbe.h + + VPBE venc sub device driver + drivers/media/platform/davinci/vpbe_venc.c + drivers/media/platform/davinci/vpbe_venc.h + drivers/media/platform/davinci/vpbe_venc_regs.h + + VPBE osd driver + drivers/media/platform/davinci/vpbe_osd.c + drivers/media/platform/davinci/vpbe_osd.h + drivers/media/platform/davinci/vpbe_osd_regs.h + +To be done +---------- + +vpbe display controller + - Add support for external encoders. + - add support for selecting external encoder as default at probe time. + +vpbe venc sub device + - add timings for supporting ths8200 + - add support for LogicPD LCD. + +FB drivers + - Add support for fbdev drivers.- Ready and part of subsequent patches. diff --git a/Documentation/driver-api/media/drivers/dvb-usb.rst b/Documentation/driver-api/media/drivers/dvb-usb.rst new file mode 100644 index 000000000000..b2d5d9e62b30 --- /dev/null +++ b/Documentation/driver-api/media/drivers/dvb-usb.rst @@ -0,0 +1,357 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Idea behind the dvb-usb-framework +================================= + +.. note:: + + #) This documentation is outdated. Please check at the DVB wiki + at https://linuxtv.org/wiki for more updated info. + + #) **deprecated:** Newer DVB USB drivers should use the dvb-usb-v2 framework. + +In March 2005 I got the new Twinhan USB2.0 DVB-T device. They provided specs +and a firmware. + +Quite keen I wanted to put the driver (with some quirks of course) into dibusb. +After reading some specs and doing some USB snooping, it realized, that the +dibusb-driver would be a complete mess afterwards. So I decided to do it in a +different way: With the help of a dvb-usb-framework. + +The framework provides generic functions (mostly kernel API calls), such as: + +- Transport Stream URB handling in conjunction with dvb-demux-feed-control + (bulk and isoc are supported) +- registering the device for the DVB-API +- registering an I2C-adapter if applicable +- remote-control/input-device handling +- firmware requesting and loading (currently just for the Cypress USB + controllers) +- other functions/methods which can be shared by several drivers (such as + functions for bulk-control-commands) +- TODO: a I2C-chunker. It creates device-specific chunks of register-accesses + depending on length of a register and the number of values that can be + multi-written and multi-read. + +The source code of the particular DVB USB devices does just the communication +with the device via the bus. The connection between the DVB-API-functionality +is done via callbacks, assigned in a static device-description (struct +dvb_usb_device) each device-driver has to have. + +For an example have a look in drivers/media/usb/dvb-usb/vp7045*. + +Objective is to migrate all the usb-devices (dibusb, cinergyT2, maybe the +ttusb; flexcop-usb already benefits from the generic flexcop-device) to use +the dvb-usb-lib. + +TODO: dynamic enabling and disabling of the pid-filter in regard to number of +feeds requested. + +Supported devices +----------------- + +See the LinuxTV DVB Wiki at https://linuxtv.org for a complete list of +cards/drivers/firmwares: +https://linuxtv.org/wiki/index.php/DVB_USB + +0. History & News: + + 2005-06-30 + + - added support for WideView WT-220U (Thanks to Steve Chang) + + 2005-05-30 + + - added basic isochronous support to the dvb-usb-framework + - added support for Conexant Hybrid reference design and Nebula + DigiTV USB + + 2005-04-17 + + - all dibusb devices ported to make use of the dvb-usb-framework + + 2005-04-02 + + - re-enabled and improved remote control code. + + 2005-03-31 + + - ported the Yakumo/Hama/Typhoon DVB-T USB2.0 device to dvb-usb. + + 2005-03-30 + + - first commit of the dvb-usb-module based on the dibusb-source. + First device is a new driver for the + TwinhanDTV Alpha / MagicBox II USB2.0-only DVB-T device. + - (change from dvb-dibusb to dvb-usb) + + 2005-03-28 + + - added support for the AVerMedia AverTV DVB-T USB2.0 device + (Thanks to Glen Harris and Jiun-Kuei Jung, AVerMedia) + + 2005-03-14 + + - added support for the Typhoon/Yakumo/HAMA DVB-T mobile USB2.0 + + 2005-02-11 + + - added support for the KWorld/ADSTech Instant DVB-T USB2.0. + Thanks a lot to Joachim von Caron + + 2005-02-02 + - added support for the Hauppauge Win-TV Nova-T USB2 + + 2005-01-31 + - distorted streaming is gone for USB1.1 devices + + 2005-01-13 + + - moved the mirrored pid_filter_table back to dvb-dibusb + first almost working version for HanfTek UMT-010 + found out, that Yakumo/HAMA/Typhoon are predecessors of the HanfTek UMT-010 + + 2005-01-10 + + - refactoring completed, now everything is very delightful + + - tuner quirks for some weird devices (Artec T1 AN2235 device has sometimes a + Panasonic Tuner assembled). Tunerprobing implemented. + Thanks a lot to Gunnar Wittich. + + 2004-12-29 + + - after several days of struggling around bug of no returning URBs fixed. + + 2004-12-26 + + - refactored the dibusb-driver, split into separate files + - i2c-probing enabled + + 2004-12-06 + + - possibility for demod i2c-address probing + - new usb IDs (Compro, Artec) + + 2004-11-23 + + - merged changes from DiB3000MC_ver2.1 + - revised the debugging + - possibility to deliver the complete TS for USB2.0 + + 2004-11-21 + + - first working version of the dib3000mc/p frontend driver. + + 2004-11-12 + + - added additional remote control keys. Thanks to Uwe Hanke. + + 2004-11-07 + + - added remote control support. Thanks to David Matthews. + + 2004-11-05 + + - added support for a new devices (Grandtec/Avermedia/Artec) + - merged my changes (for dib3000mb/dibusb) to the FE_REFACTORING, because it became HEAD + - moved transfer control (pid filter, fifo control) from usb driver to frontend, it seems + better settled there (added xfer_ops-struct) + - created a common files for frontends (mc/p/mb) + + 2004-09-28 + + - added support for a new device (Unknown, vendor ID is Hyper-Paltek) + + 2004-09-20 + + - added support for a new device (Compro DVB-U2000), thanks + to Amaury Demol for reporting + - changed usb TS transfer method (several urbs, stopping transfer + before setting a new pid) + + 2004-09-13 + + - added support for a new device (Artec T1 USB TVBOX), thanks + to Christian Motschke for reporting + + 2004-09-05 + + - released the dibusb device and dib3000mb-frontend driver + (old news for vp7041.c) + + 2004-07-15 + + - found out, by accident, that the device has a TUA6010XS for PLL + + 2004-07-12 + + - figured out, that the driver should also work with the + CTS Portable (Chinese Television System) + + 2004-07-08 + + - firmware-extraction-2.422-problem solved, driver is now working + properly with firmware extracted from 2.422 + - #if for 2.6.4 (dvb), compile issue + - changed firmware handling, see vp7041.txt sec 1.1 + + 2004-07-02 + + - some tuner modifications, v0.1, cleanups, first public + + 2004-06-28 + + - now using the dvb_dmx_swfilter_packets, everything runs fine now + + 2004-06-27 + + - able to watch and switching channels (pre-alpha) + - no section filtering yet + + 2004-06-06 + + - first TS received, but kernel oops :/ + + 2004-05-14 + + - firmware loader is working + + 2004-05-11 + + - start writing the driver + +How to use? +----------- + +Firmware +~~~~~~~~ + +Most of the USB drivers need to download a firmware to the device before start +working. + +Have a look at the Wikipage for the DVB-USB-drivers to find out, which firmware +you need for your device: + +https://linuxtv.org/wiki/index.php/DVB_USB + +Compiling +~~~~~~~~~ + +Since the driver is in the linux kernel, activating the driver in +your favorite config-environment should sufficient. I recommend +to compile the driver as module. Hotplug does the rest. + +If you use dvb-kernel enter the build-2.6 directory run 'make' and 'insmod.sh +load' afterwards. + +Loading the drivers +~~~~~~~~~~~~~~~~~~~ + +Hotplug is able to load the driver, when it is needed (because you plugged +in the device). + +If you want to enable debug output, you have to load the driver manually and +from within the dvb-kernel cvs repository. + +first have a look, which debug level are available: + +.. code-block:: none + + # modinfo dvb-usb + # modinfo dvb-usb-vp7045 + + etc. + +.. code-block:: none + + modprobe dvb-usb debug= + modprobe dvb-usb-vp7045 debug= + etc. + +should do the trick. + +When the driver is loaded successfully, the firmware file was in +the right place and the device is connected, the "Power"-LED should be +turned on. + +At this point you should be able to start a dvb-capable application. I'm use +(t|s)zap, mplayer and dvbscan to test the basics. VDR-xine provides the +long-term test scenario. + +Known problems and bugs +----------------------- + +- Don't remove the USB device while running an DVB application, your system + will go crazy or die most likely. + +Adding support for devices +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +TODO + +USB1.1 Bandwidth limitation +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A lot of the currently supported devices are USB1.1 and thus they have a +maximum bandwidth of about 5-6 MBit/s when connected to a USB2.0 hub. +This is not enough for receiving the complete transport stream of a +DVB-T channel (which is about 16 MBit/s). Normally this is not a +problem, if you only want to watch TV (this does not apply for HDTV), +but watching a channel while recording another channel on the same +frequency simply does not work very well. This applies to all USB1.1 +DVB-T devices, not just the dvb-usb-devices) + +The bug, where the TS is distorted by a heavy usage of the device is gone +definitely. All dvb-usb-devices I was using (Twinhan, Kworld, DiBcom) are +working like charm now with VDR. Sometimes I even was able to record a channel +and watch another one. + +Comments +~~~~~~~~ + +Patches, comments and suggestions are very very welcome. + +3. Acknowledgements +------------------- + + Amaury Demol (Amaury.Demol@parrot.com) and Francois Kanounnikoff from DiBcom for + providing specs, code and help, on which the dvb-dibusb, dib3000mb and + dib3000mc are based. + + David Matthews for identifying a new device type (Artec T1 with AN2235) + and for extending dibusb with remote control event handling. Thank you. + + Alex Woods for frequently answering question about usb and dvb + stuff, a big thank you. + + Bernd Wagner for helping with huge bug reports and discussions. + + Gunnar Wittich and Joachim von Caron for their trust for providing + root-shells on their machines to implement support for new devices. + + Allan Third and Michael Hutchinson for their help to write the Nebula + digitv-driver. + + Glen Harris for bringing up, that there is a new dibusb-device and Jiun-Kuei + Jung from AVerMedia who kindly provided a special firmware to get the device + up and running in Linux. + + Jennifer Chen, Jeff and Jack from Twinhan for kindly supporting by + writing the vp7045-driver. + + Steve Chang from WideView for providing information for new devices and + firmware files. + + Michael Paxton for submitting remote control keymaps. + + Some guys on the linux-dvb mailing list for encouraging me. + + Peter Schildmann >peter.schildmann-nospam-at-web.de< for his + user-level firmware loader, which saves a lot of time + (when writing the vp7041 driver) + + Ulf Hermenau for helping me out with traditional chinese. + + André Smoktun and Christian Frömmel for supporting me with + hardware and listening to my problems very patiently. diff --git a/Documentation/driver-api/media/drivers/fimc-devel.rst b/Documentation/driver-api/media/drivers/fimc-devel.rst new file mode 100644 index 000000000000..956e3a9901f8 --- /dev/null +++ b/Documentation/driver-api/media/drivers/fimc-devel.rst @@ -0,0 +1,33 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: + +The Samsung S5P/EXYNOS4 FIMC driver +=================================== + +Copyright |copy| 2012 - 2013 Samsung Electronics Co., Ltd. + +Files partitioning +------------------ + +- media device driver + + drivers/media/platform/exynos4-is/media-dev.[ch] + +- camera capture video device driver + + drivers/media/platform/exynos4-is/fimc-capture.c + +- MIPI-CSI2 receiver subdev + + drivers/media/platform/exynos4-is/mipi-csis.[ch] + +- video post-processor (mem-to-mem) + + drivers/media/platform/exynos4-is/fimc-core.c + +- common files + + drivers/media/platform/exynos4-is/fimc-core.h + drivers/media/platform/exynos4-is/fimc-reg.h + drivers/media/platform/exynos4-is/regs-fimc.h diff --git a/Documentation/driver-api/media/drivers/frontends.rst b/Documentation/driver-api/media/drivers/frontends.rst new file mode 100644 index 000000000000..7b8336ece681 --- /dev/null +++ b/Documentation/driver-api/media/drivers/frontends.rst @@ -0,0 +1,32 @@ +.. SPDX-License-Identifier: GPL-2.0 + +**************** +Frontend drivers +**************** + +Frontend attach headers +*********************** + +.. Keep it on alphabetic order + +.. kernel-doc:: drivers/media/dvb-frontends/a8293.h +.. kernel-doc:: drivers/media/dvb-frontends/af9013.h +.. kernel-doc:: drivers/media/dvb-frontends/ascot2e.h +.. kernel-doc:: drivers/media/dvb-frontends/cxd2820r.h +.. kernel-doc:: drivers/media/dvb-frontends/drxk.h +.. kernel-doc:: drivers/media/dvb-frontends/dvb-pll.h +.. kernel-doc:: drivers/media/dvb-frontends/helene.h +.. kernel-doc:: drivers/media/dvb-frontends/horus3a.h +.. kernel-doc:: drivers/media/dvb-frontends/ix2505v.h +.. kernel-doc:: drivers/media/dvb-frontends/m88ds3103.h +.. kernel-doc:: drivers/media/dvb-frontends/mb86a20s.h +.. kernel-doc:: drivers/media/dvb-frontends/mn88472.h +.. kernel-doc:: drivers/media/dvb-frontends/rtl2830.h +.. kernel-doc:: drivers/media/dvb-frontends/rtl2832.h +.. kernel-doc:: drivers/media/dvb-frontends/rtl2832_sdr.h +.. kernel-doc:: drivers/media/dvb-frontends/stb6000.h +.. kernel-doc:: drivers/media/dvb-frontends/tda10071.h +.. kernel-doc:: drivers/media/dvb-frontends/tda826x.h +.. kernel-doc:: drivers/media/dvb-frontends/zd1301_demod.h +.. kernel-doc:: drivers/media/dvb-frontends/zl10036.h + diff --git a/Documentation/driver-api/media/drivers/index.rst b/Documentation/driver-api/media/drivers/index.rst new file mode 100644 index 000000000000..aafff51f7e0e --- /dev/null +++ b/Documentation/driver-api/media/drivers/index.rst @@ -0,0 +1,61 @@ +.. SPDX-License-Identifier: GPL-2.0 + +.. include:: + +################################################ +Video4Linux (V4L) driver-specific documentation +################################################ + +.. only:: html + + .. class:: toc-title + + Table of Contents + +.. toctree:: + :maxdepth: 5 + + bttv-devel + cpia2_devel + cx2341x-devel + cx88-devel + davinci-vpbe-devel + fimc-devel + pvrusb2 + pxa_camera + radiotrack + saa7134-devel + sh_mobile_ceu_camera + tuners + vimc-devel + + +############################################## +Linux Digital TV driver-specific documentation +############################################## + +**Copyright** |copy| 2001-2016 : LinuxTV Developers + +This documentation is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +more details. + +For more details see the file COPYING in the source distribution of Linux. + +.. only:: html + + .. class:: toc-title + + Table of Contents + +.. toctree:: + :maxdepth: 5 + + dvb-usb + frontends + contributors diff --git a/Documentation/driver-api/media/drivers/pvrusb2.rst b/Documentation/driver-api/media/drivers/pvrusb2.rst new file mode 100644 index 000000000000..83bfaa531ea8 --- /dev/null +++ b/Documentation/driver-api/media/drivers/pvrusb2.rst @@ -0,0 +1,202 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The pvrusb2 driver +================== + +Author: Mike Isely + +Background +---------- + +This driver is intended for the "Hauppauge WinTV PVR USB 2.0", which +is a USB 2.0 hosted TV Tuner. This driver is a work in progress. +Its history started with the reverse-engineering effort by Björn +Danielsson whose web page can be found here: +http://pvrusb2.dax.nu/ + +From there Aurelien Alleaume began an effort to +create a video4linux compatible driver. I began with Aurelien's +last known snapshot and evolved the driver to the state it is in +here. + +More information on this driver can be found at: +http://www.isely.net/pvrusb2.html + + +This driver has a strong separation of layers. They are very +roughly: + +1. Low level wire-protocol implementation with the device. + +2. I2C adaptor implementation and corresponding I2C client drivers + implemented elsewhere in V4L. + +3. High level hardware driver implementation which coordinates all + activities that ensure correct operation of the device. + +4. A "context" layer which manages instancing of driver, setup, + tear-down, arbitration, and interaction with high level + interfaces appropriately as devices are hotplugged in the + system. + +5. High level interfaces which glue the driver to various published + Linux APIs (V4L, sysfs, maybe DVB in the future). + +The most important shearing layer is between the top 2 layers. A +lot of work went into the driver to ensure that any kind of +conceivable API can be laid on top of the core driver. (Yes, the +driver internally leverages V4L to do its work but that really has +nothing to do with the API published by the driver to the outside +world.) The architecture allows for different APIs to +simultaneously access the driver. I have a strong sense of fairness +about APIs and also feel that it is a good design principle to keep +implementation and interface isolated from each other. Thus while +right now the V4L high level interface is the most complete, the +sysfs high level interface will work equally well for similar +functions, and there's no reason I see right now why it shouldn't be +possible to produce a DVB high level interface that can sit right +alongside V4L. + +Building +-------- + +To build these modules essentially amounts to just running "Make", +but you need the kernel source tree nearby and you will likely also +want to set a few controlling environment variables first in order +to link things up with that source tree. Please see the Makefile +here for comments that explain how to do that. + +Source file list / functional overview +-------------------------------------- + +(Note: The term "module" used below generally refers to loosely +defined functional units within the pvrusb2 driver and bears no +relation to the Linux kernel's concept of a loadable module.) + +pvrusb2-audio.[ch] - This is glue logic that resides between this + driver and the msp3400.ko I2C client driver (which is found + elsewhere in V4L). + +pvrusb2-context.[ch] - This module implements the context for an + instance of the driver. Everything else eventually ties back to + or is otherwise instanced within the data structures implemented + here. Hotplugging is ultimately coordinated here. All high level + interfaces tie into the driver through this module. This module + helps arbitrate each interface's access to the actual driver core, + and is designed to allow concurrent access through multiple + instances of multiple interfaces (thus you can for example change + the tuner's frequency through sysfs while simultaneously streaming + video through V4L out to an instance of mplayer). + +pvrusb2-debug.h - This header defines a printk() wrapper and a mask + of debugging bit definitions for the various kinds of debug + messages that can be enabled within the driver. + +pvrusb2-debugifc.[ch] - This module implements a crude command line + oriented debug interface into the driver. Aside from being part + of the process for implementing manual firmware extraction (see + the pvrusb2 web site mentioned earlier), probably I'm the only one + who has ever used this. It is mainly a debugging aid. + +pvrusb2-eeprom.[ch] - This is glue logic that resides between this + driver the tveeprom.ko module, which is itself implemented + elsewhere in V4L. + +pvrusb2-encoder.[ch] - This module implements all protocol needed to + interact with the Conexant mpeg2 encoder chip within the pvrusb2 + device. It is a crude echo of corresponding logic in ivtv, + however the design goals (strict isolation) and physical layer + (proxy through USB instead of PCI) are enough different that this + implementation had to be completely different. + +pvrusb2-hdw-internal.h - This header defines the core data structure + in the driver used to track ALL internal state related to control + of the hardware. Nobody outside of the core hardware-handling + modules should have any business using this header. All external + access to the driver should be through one of the high level + interfaces (e.g. V4L, sysfs, etc), and in fact even those high + level interfaces are restricted to the API defined in + pvrusb2-hdw.h and NOT this header. + +pvrusb2-hdw.h - This header defines the full internal API for + controlling the hardware. High level interfaces (e.g. V4L, sysfs) + will work through here. + +pvrusb2-hdw.c - This module implements all the various bits of logic + that handle overall control of a specific pvrusb2 device. + (Policy, instantiation, and arbitration of pvrusb2 devices fall + within the jurisdiction of pvrusb-context not here). + +pvrusb2-i2c-chips-\*.c - These modules implement the glue logic to + tie together and configure various I2C modules as they attach to + the I2C bus. There are two versions of this file. The "v4l2" + version is intended to be used in-tree alongside V4L, where we + implement just the logic that makes sense for a pure V4L + environment. The "all" version is intended for use outside of + V4L, where we might encounter other possibly "challenging" modules + from ivtv or older kernel snapshots (or even the support modules + in the standalone snapshot). + +pvrusb2-i2c-cmd-v4l1.[ch] - This module implements generic V4L1 + compatible commands to the I2C modules. It is here where state + changes inside the pvrusb2 driver are translated into V4L1 + commands that are in turn send to the various I2C modules. + +pvrusb2-i2c-cmd-v4l2.[ch] - This module implements generic V4L2 + compatible commands to the I2C modules. It is here where state + changes inside the pvrusb2 driver are translated into V4L2 + commands that are in turn send to the various I2C modules. + +pvrusb2-i2c-core.[ch] - This module provides an implementation of a + kernel-friendly I2C adaptor driver, through which other external + I2C client drivers (e.g. msp3400, tuner, lirc) may connect and + operate corresponding chips within the pvrusb2 device. It is + through here that other V4L modules can reach into this driver to + operate specific pieces (and those modules are in turn driven by + glue logic which is coordinated by pvrusb2-hdw, doled out by + pvrusb2-context, and then ultimately made available to users + through one of the high level interfaces). + +pvrusb2-io.[ch] - This module implements a very low level ring of + transfer buffers, required in order to stream data from the + device. This module is *very* low level. It only operates the + buffers and makes no attempt to define any policy or mechanism for + how such buffers might be used. + +pvrusb2-ioread.[ch] - This module layers on top of pvrusb2-io.[ch] + to provide a streaming API usable by a read() system call style of + I/O. Right now this is the only layer on top of pvrusb2-io.[ch], + however the underlying architecture here was intended to allow for + other styles of I/O to be implemented with additional modules, like + mmap()'ed buffers or something even more exotic. + +pvrusb2-main.c - This is the top level of the driver. Module level + and USB core entry points are here. This is our "main". + +pvrusb2-sysfs.[ch] - This is the high level interface which ties the + pvrusb2 driver into sysfs. Through this interface you can do + everything with the driver except actually stream data. + +pvrusb2-tuner.[ch] - This is glue logic that resides between this + driver and the tuner.ko I2C client driver (which is found + elsewhere in V4L). + +pvrusb2-util.h - This header defines some common macros used + throughout the driver. These macros are not really specific to + the driver, but they had to go somewhere. + +pvrusb2-v4l2.[ch] - This is the high level interface which ties the + pvrusb2 driver into video4linux. It is through here that V4L + applications can open and operate the driver in the usual V4L + ways. Note that **ALL** V4L functionality is published only + through here and nowhere else. + +pvrusb2-video-\*.[ch] - This is glue logic that resides between this + driver and the saa711x.ko I2C client driver (which is found + elsewhere in V4L). Note that saa711x.ko used to be known as + saa7115.ko in ivtv. There are two versions of this; one is + selected depending on the particular saa711[5x].ko that is found. + +pvrusb2.h - This header contains compile time tunable parameters + (and at the moment the driver has very little that needs to be + tuned). diff --git a/Documentation/driver-api/media/drivers/pxa_camera.rst b/Documentation/driver-api/media/drivers/pxa_camera.rst new file mode 100644 index 000000000000..ee1bd96b66dd --- /dev/null +++ b/Documentation/driver-api/media/drivers/pxa_camera.rst @@ -0,0 +1,194 @@ +.. SPDX-License-Identifier: GPL-2.0 + +PXA-Camera Host Driver +====================== + +Author: Robert Jarzmik + +Constraints +----------- + +a) Image size for YUV422P format + All YUV422P images are enforced to have width x height % 16 = 0. + This is due to DMA constraints, which transfers only planes of 8 byte + multiples. + + +Global video workflow +--------------------- + +a) QCI stopped + Initially, the QCI interface is stopped. + When a buffer is queued (pxa_videobuf_ops->buf_queue), the QCI starts. + +b) QCI started + More buffers can be queued while the QCI is started without halting the + capture. The new buffers are "appended" at the tail of the DMA chain, and + smoothly captured one frame after the other. + + Once a buffer is filled in the QCI interface, it is marked as "DONE" and + removed from the active buffers list. It can be then requeud or dequeued by + userland application. + + Once the last buffer is filled in, the QCI interface stops. + +c) Capture global finite state machine schema + +.. code-block:: none + + +----+ +---+ +----+ + | DQ | | Q | | DQ | + | v | v | v + +-----------+ +------------------------+ + | STOP | | Wait for capture start | + +-----------+ Q +------------------------+ + +-> | QCI: stop | ------------------> | QCI: run | <------------+ + | | DMA: stop | | DMA: stop | | + | +-----------+ +-----> +------------------------+ | + | / | | + | / +---+ +----+ | | + |capture list empty / | Q | | DQ | | QCI Irq EOF | + | / | v | v v | + | +--------------------+ +----------------------+ | + | | DMA hotlink missed | | Capture running | | + | +--------------------+ +----------------------+ | + | | QCI: run | +-----> | QCI: run | <-+ | + | | DMA: stop | / | DMA: run | | | + | +--------------------+ / +----------------------+ | Other | + | ^ /DMA still | | channels | + | | capture list / running | DMA Irq End | not | + | | not empty / | | finished | + | | / v | yet | + | +----------------------+ +----------------------+ | | + | | Videobuf released | | Channel completed | | | + | +----------------------+ +----------------------+ | | + +-- | QCI: run | | QCI: run | --+ | + | DMA: run | | DMA: run | | + +----------------------+ +----------------------+ | + ^ / | | + | no overrun / | overrun | + | / v | + +--------------------+ / +----------------------+ | + | Frame completed | / | Frame overran | | + +--------------------+ <-----+ +----------------------+ restart frame | + | QCI: run | | QCI: stop | --------------+ + | DMA: run | | DMA: stop | + +--------------------+ +----------------------+ + + Legend: - each box is a FSM state + - each arrow is the condition to transition to another state + - an arrow with a comment is a mandatory transition (no condition) + - arrow "Q" means : a buffer was enqueued + - arrow "DQ" means : a buffer was dequeued + - "QCI: stop" means the QCI interface is not enabled + - "DMA: stop" means all 3 DMA channels are stopped + - "DMA: run" means at least 1 DMA channel is still running + +DMA usage +--------- + +a) DMA flow + - first buffer queued for capture + Once a first buffer is queued for capture, the QCI is started, but data + transfer is not started. On "End Of Frame" interrupt, the irq handler + starts the DMA chain. + - capture of one videobuffer + The DMA chain starts transferring data into videobuffer RAM pages. + When all pages are transferred, the DMA irq is raised on "ENDINTR" status + - finishing one videobuffer + The DMA irq handler marks the videobuffer as "done", and removes it from + the active running queue + Meanwhile, the next videobuffer (if there is one), is transferred by DMA + - finishing the last videobuffer + On the DMA irq of the last videobuffer, the QCI is stopped. + +b) DMA prepared buffer will have this structure + +.. code-block:: none + + +------------+-----+---------------+-----------------+ + | desc-sg[0] | ... | desc-sg[last] | finisher/linker | + +------------+-----+---------------+-----------------+ + +This structure is pointed by dma->sg_cpu. +The descriptors are used as follows: + +- desc-sg[i]: i-th descriptor, transferring the i-th sg + element to the video buffer scatter gather +- finisher: has ddadr=DADDR_STOP, dcmd=ENDIRQEN +- linker: has ddadr= desc-sg[0] of next video buffer, dcmd=0 + +For the next schema, let's assume d0=desc-sg[0] .. dN=desc-sg[N], +"f" stands for finisher and "l" for linker. +A typical running chain is : + +.. code-block:: none + + Videobuffer 1 Videobuffer 2 + +---------+----+---+ +----+----+----+---+ + | d0 | .. | dN | l | | d0 | .. | dN | f | + +---------+----+-|-+ ^----+----+----+---+ + | | + +----+ + +After the chaining is finished, the chain looks like : + +.. code-block:: none + + Videobuffer 1 Videobuffer 2 Videobuffer 3 + +---------+----+---+ +----+----+----+---+ +----+----+----+---+ + | d0 | .. | dN | l | | d0 | .. | dN | l | | d0 | .. | dN | f | + +---------+----+-|-+ ^----+----+----+-|-+ ^----+----+----+---+ + | | | | + +----+ +----+ + new_link + +c) DMA hot chaining timeslice issue + +As DMA chaining is done while DMA _is_ running, the linking may be done +while the DMA jumps from one Videobuffer to another. On the schema, that +would be a problem if the following sequence is encountered : + +- DMA chain is Videobuffer1 + Videobuffer2 +- pxa_videobuf_queue() is called to queue Videobuffer3 +- DMA controller finishes Videobuffer2, and DMA stops + +.. code-block:: none + + => + Videobuffer 1 Videobuffer 2 + +---------+----+---+ +----+----+----+---+ + | d0 | .. | dN | l | | d0 | .. | dN | f | + +---------+----+-|-+ ^----+----+----+-^-+ + | | | + +----+ +-- DMA DDADR loads DDADR_STOP + +- pxa_dma_add_tail_buf() is called, the Videobuffer2 "finisher" is + replaced by a "linker" to Videobuffer3 (creation of new_link) +- pxa_videobuf_queue() finishes +- the DMA irq handler is called, which terminates Videobuffer2 +- Videobuffer3 capture is not scheduled on DMA chain (as it stopped !!!) + +.. code-block:: none + + Videobuffer 1 Videobuffer 2 Videobuffer 3 + +---------+----+---+ +----+----+----+---+ +----+----+----+---+ + | d0 | .. | dN | l | | d0 | .. | dN | l | | d0 | .. | dN | f | + +---------+----+-|-+ ^----+----+----+-|-+ ^----+----+----+---+ + | | | | + +----+ +----+ + new_link + DMA DDADR still is DDADR_STOP + +- pxa_camera_check_link_miss() is called + This checks if the DMA is finished and a buffer is still on the + pcdev->capture list. If that's the case, the capture will be restarted, + and Videobuffer3 is scheduled on DMA chain. +- the DMA irq handler finishes + +.. note:: + + If DMA stops just after pxa_camera_check_link_miss() reads DDADR() + value, we have the guarantee that the DMA irq handler will be called back + when the DMA will finish the buffer, and pxa_camera_check_link_miss() will + be called again, to reschedule Videobuffer3. diff --git a/Documentation/driver-api/media/drivers/radiotrack.rst b/Documentation/driver-api/media/drivers/radiotrack.rst new file mode 100644 index 000000000000..a85cb6205db8 --- /dev/null +++ b/Documentation/driver-api/media/drivers/radiotrack.rst @@ -0,0 +1,168 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The Radiotrack radio driver +=========================== + +Author: Stephen M. Benoit + +Date: Dec 14, 1996 + +ACKNOWLEDGMENTS +---------------- + +This document was made based on 'C' code for Linux from Gideon le Grange +(legrang@active.co.za or legrang@cs.sun.ac.za) in 1994, and elaborations from +Frans Brinkman (brinkman@esd.nl) in 1996. The results reported here are from +experiments that the author performed on his own setup, so your mileage may +vary... I make no guarantees, claims or warranties to the suitability or +validity of this information. No other documentation on the AIMS +Lab (http://www.aimslab.com/) RadioTrack card was made available to the +author. This document is offered in the hopes that it might help users who +want to use the RadioTrack card in an environment other than MS Windows. + +WHY THIS DOCUMENT? +------------------ + +I have a RadioTrack card from back when I ran an MS-Windows platform. After +converting to Linux, I found Gideon le Grange's command-line software for +running the card, and found that it was good! Frans Brinkman made a +comfortable X-windows interface, and added a scanning feature. For hack +value, I wanted to see if the tuner could be tuned beyond the usual FM radio +broadcast band, so I could pick up the audio carriers from North American +broadcast TV channels, situated just below and above the 87.0-109.0 MHz range. +I did not get much success, but I learned about programming ioports under +Linux and gained some insights about the hardware design used for the card. + +So, without further delay, here are the details. + + +PHYSICAL DESCRIPTION +-------------------- + +The RadioTrack card is an ISA 8-bit FM radio card. The radio frequency (RF) +input is simply an antenna lead, and the output is a power audio signal +available through a miniature phone plug. Its RF frequencies of operation are +more or less limited from 87.0 to 109.0 MHz (the commercial FM broadcast +band). Although the registers can be programmed to request frequencies beyond +these limits, experiments did not give promising results. The variable +frequency oscillator (VFO) that demodulates the intermediate frequency (IF) +signal probably has a small range of useful frequencies, and wraps around or +gets clipped beyond the limits mentioned above. + + +CONTROLLING THE CARD WITH IOPORT +-------------------------------- + +The RadioTrack (base) ioport is configurable for 0x30c or 0x20c. Only one +ioport seems to be involved. The ioport decoding circuitry must be pretty +simple, as individual ioport bits are directly matched to specific functions +(or blocks) of the radio card. This way, many functions can be changed in +parallel with one write to the ioport. The only feedback available through +the ioports appears to be the "Stereo Detect" bit. + +The bits of the ioport are arranged as follows: + +.. code-block:: none + + MSb LSb + +------+------+------+--------+--------+-------+---------+--------+ + | VolA | VolB | ???? | Stereo | Radio | TuneA | TuneB | Tune | + | (+) | (-) | | Detect | Audio | (bit) | (latch) | Update | + | | | | Enable | Enable | | | Enable | + +------+------+------+--------+--------+-------+---------+--------+ + + +==== ==== ================================= +VolA VolB Description +==== ==== ================================= +0 0 audio mute +0 1 volume + (some delay required) +1 0 volume - (some delay required) +1 1 stay at present volume +==== ==== ================================= + +==================== =========== +Stereo Detect Enable Description +==================== =========== +0 No Detect +1 Detect +==================== =========== + +Results available by reading ioport >60 msec after last port write. + + 0xff ==> no stereo detected, 0xfd ==> stereo detected. + +============================= ============================= +Radio to Audio (path) Enable Description +============================= ============================= +0 Disable path (silence) +1 Enable path (audio produced) +============================= ============================= + +===== ===== ================== +TuneA TuneB Description +===== ===== ================== +0 0 "zero" bit phase 1 +0 1 "zero" bit phase 2 +1 0 "one" bit phase 1 +1 1 "one" bit phase 2 +===== ===== ================== + + +24-bit code, where bits = (freq*40) + 10486188. +The Most Significant 11 bits must be 1010 xxxx 0x0 to be valid. +The bits are shifted in LSb first. + +================== =========================== +Tune Update Enable Description +================== =========================== +0 Tuner held constant +1 Tuner updating in progress +================== =========================== + + +PROGRAMMING EXAMPLES +-------------------- + +.. code-block:: none + + Default: BASE <-- 0xc8 (current volume, no stereo detect, + radio enable, tuner adjust disable) + + Card Off: BASE <-- 0x00 (audio mute, no stereo detect, + radio disable, tuner adjust disable) + + Card On: BASE <-- 0x00 (see "Card Off", clears any unfinished business) + BASE <-- 0xc8 (see "Default") + + Volume Down: BASE <-- 0x48 (volume down, no stereo detect, + radio enable, tuner adjust disable) + wait 10 msec + BASE <-- 0xc8 (see "Default") + + Volume Up: BASE <-- 0x88 (volume up, no stereo detect, + radio enable, tuner adjust disable) + wait 10 msec + BASE <-- 0xc8 (see "Default") + + Check Stereo: BASE <-- 0xd8 (current volume, stereo detect, + radio enable, tuner adjust disable) + wait 100 msec + x <-- BASE (read ioport) + BASE <-- 0xc8 (see "Default") + + x=0xff ==> "not stereo", x=0xfd ==> "stereo detected" + + Set Frequency: code = (freq*40) + 10486188 + foreach of the 24 bits in code, + (from Least to Most Significant): + to write a "zero" bit, + BASE <-- 0x01 (audio mute, no stereo detect, radio + disable, "zero" bit phase 1, tuner adjust) + BASE <-- 0x03 (audio mute, no stereo detect, radio + disable, "zero" bit phase 2, tuner adjust) + to write a "one" bit, + BASE <-- 0x05 (audio mute, no stereo detect, radio + disable, "one" bit phase 1, tuner adjust) + BASE <-- 0x07 (audio mute, no stereo detect, radio + disable, "one" bit phase 2, tuner adjust) diff --git a/Documentation/driver-api/media/drivers/saa7134-devel.rst b/Documentation/driver-api/media/drivers/saa7134-devel.rst new file mode 100644 index 000000000000..167fd729bc8c --- /dev/null +++ b/Documentation/driver-api/media/drivers/saa7134-devel.rst @@ -0,0 +1,67 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The saa7134 driver +================== + +Author Gerd Hoffmann + + +Card Variations: +---------------- + +Cards can use either of these two crystals (xtal): + +- 32.11 MHz -> .audio_clock=0x187de7 +- 24.576MHz -> .audio_clock=0x200000 (xtal * .audio_clock = 51539600) + +Some details about 30/34/35: + +- saa7130 - low-price chip, doesn't have mute, that is why all those + cards should have .mute field defined in their tuner structure. + +- saa7134 - usual chip + +- saa7133/35 - saa7135 is probably a marketing decision, since all those + chips identifies itself as 33 on pci. + +LifeView GPIOs +-------------- + +This section was authored by: Peter Missel + +- LifeView FlyTV Platinum FM (LR214WF) + + - GP27 MDT2005 PB4 pin 10 + - GP26 MDT2005 PB3 pin 9 + - GP25 MDT2005 PB2 pin 8 + - GP23 MDT2005 PB1 pin 7 + - GP22 MDT2005 PB0 pin 6 + - GP21 MDT2005 PB5 pin 11 + - GP20 MDT2005 PB6 pin 12 + - GP19 MDT2005 PB7 pin 13 + - nc MDT2005 PA3 pin 2 + - Remote MDT2005 PA2 pin 1 + - GP18 MDT2005 PA1 pin 18 + - nc MDT2005 PA0 pin 17 strap low + - GP17 Strap "GP7"=High + - GP16 Strap "GP6"=High + + - 0=Radio 1=TV + - Drives SA630D ENCH1 and HEF4052 A1 pinsto do FM radio through + SIF input + + - GP15 nc + - GP14 nc + - GP13 nc + - GP12 Strap "GP5" = High + - GP11 Strap "GP4" = High + - GP10 Strap "GP3" = High + - GP09 Strap "GP2" = Low + - GP08 Strap "GP1" = Low + - GP07.00 nc + +Credits +------- + +andrew.stevens@philips.com + werner.leeb@philips.com for providing +saa7134 hardware specs and sample board. diff --git a/Documentation/driver-api/media/drivers/sh_mobile_ceu_camera.rst b/Documentation/driver-api/media/drivers/sh_mobile_ceu_camera.rst new file mode 100644 index 000000000000..822fcb8368ae --- /dev/null +++ b/Documentation/driver-api/media/drivers/sh_mobile_ceu_camera.rst @@ -0,0 +1,142 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Cropping and Scaling algorithm, used in the sh_mobile_ceu_camera driver +======================================================================= + +Author: Guennadi Liakhovetski + +Terminology +----------- + +sensor scales: horizontal and vertical scales, configured by the sensor driver +host scales: -"- host driver +combined scales: sensor_scale * host_scale + + +Generic scaling / cropping scheme +--------------------------------- + +.. code-block:: none + + -1-- + | + -2-- -\ + | --\ + | --\ + +-5-- . -- -3-- -\ + | `... -\ + | `... -4-- . - -7.. + | `. + | `. .6-- + | + | . .6'- + | .´ + | ... -4'- .´ + | ...´ - -7'. + +-5'- .´ -/ + | -- -3'- -/ + | --/ + | --/ + -2'- -/ + | + | + -1'- + +In the above chart minuses and slashes represent "real" data amounts, points and +accents represent "useful" data, basically, CEU scaled and cropped output, +mapped back onto the client's source plane. + +Such a configuration can be produced by user requests: + +S_CROP(left / top = (5) - (1), width / height = (5') - (5)) +S_FMT(width / height = (6') - (6)) + +Here: + +(1) to (1') - whole max width or height +(1) to (2) - sensor cropped left or top +(2) to (2') - sensor cropped width or height +(3) to (3') - sensor scale +(3) to (4) - CEU cropped left or top +(4) to (4') - CEU cropped width or height +(5) to (5') - reverse sensor scale applied to CEU cropped width or height +(2) to (5) - reverse sensor scale applied to CEU cropped left or top +(6) to (6') - CEU scale - user window + + +S_FMT +----- + +Do not touch input rectangle - it is already optimal. + +1. Calculate current sensor scales: + + scale_s = ((2') - (2)) / ((3') - (3)) + +2. Calculate "effective" input crop (sensor subwindow) - CEU crop scaled back at +current sensor scales onto input window - this is user S_CROP: + + width_u = (5') - (5) = ((4') - (4)) * scale_s + +3. Calculate new combined scales from "effective" input window to requested user +window: + + scale_comb = width_u / ((6') - (6)) + +4. Calculate sensor output window by applying combined scales to real input +window: + + width_s_out = ((7') - (7)) = ((2') - (2)) / scale_comb + +5. Apply iterative sensor S_FMT for sensor output window. + + subdev->video_ops->s_fmt(.width = width_s_out) + +6. Retrieve sensor output window (g_fmt) + +7. Calculate new sensor scales: + + scale_s_new = ((3')_new - (3)_new) / ((2') - (2)) + +8. Calculate new CEU crop - apply sensor scales to previously calculated +"effective" crop: + + width_ceu = (4')_new - (4)_new = width_u / scale_s_new + left_ceu = (4)_new - (3)_new = ((5) - (2)) / scale_s_new + +9. Use CEU cropping to crop to the new window: + + ceu_crop(.width = width_ceu, .left = left_ceu) + +10. Use CEU scaling to scale to the requested user window: + + scale_ceu = width_ceu / width + + +S_CROP +------ + +The :ref:`V4L2 crop API ` says: + +"...specification does not define an origin or units. However by convention +drivers should horizontally count unscaled samples relative to 0H." + +We choose to follow the advise and interpret cropping units as client input +pixels. + +Cropping is performed in the following 6 steps: + +1. Request exactly user rectangle from the sensor. + +2. If smaller - iterate until a larger one is obtained. Result: sensor cropped + to 2 : 2', target crop 5 : 5', current output format 6' - 6. + +3. In the previous step the sensor has tried to preserve its output frame as + good as possible, but it could have changed. Retrieve it again. + +4. Sensor scaled to 3 : 3'. Sensor's scale is (2' - 2) / (3' - 3). Calculate + intermediate window: 4' - 4 = (5' - 5) * (3' - 3) / (2' - 2) + +5. Calculate and apply host scale = (6' - 6) / (4' - 4) + +6. Calculate and apply host crop: 6 - 7 = (5 - 2) * (6' - 6) / (5' - 5) diff --git a/Documentation/driver-api/media/drivers/tuners.rst b/Documentation/driver-api/media/drivers/tuners.rst new file mode 100644 index 000000000000..7509be888909 --- /dev/null +++ b/Documentation/driver-api/media/drivers/tuners.rst @@ -0,0 +1,133 @@ +.. SPDX-License-Identifier: GPL-2.0 + +Tuner drivers +============= + +Simple tuner Programming +------------------------ + +There are some flavors of Tuner programming APIs. +These differ mainly by the bandswitch byte. + +- L= LG_API (VHF_LO=0x01, VHF_HI=0x02, UHF=0x08, radio=0x04) +- P= PHILIPS_API (VHF_LO=0xA0, VHF_HI=0x90, UHF=0x30, radio=0x04) +- T= TEMIC_API (VHF_LO=0x02, VHF_HI=0x04, UHF=0x01) +- A= ALPS_API (VHF_LO=0x14, VHF_HI=0x12, UHF=0x11) +- M= PHILIPS_MK3 (VHF_LO=0x01, VHF_HI=0x02, UHF=0x04, radio=0x19) + +Tuner Manufacturers +------------------- + +- SAMSUNG Tuner identification: (e.g. TCPM9091PD27) + +.. code-block:: none + + TCP [ABCJLMNQ] 90[89][125] [DP] [ACD] 27 [ABCD] + [ABCJLMNQ]: + A= BG+DK + B= BG + C= I+DK + J= NTSC-Japan + L= Secam LL + M= BG+I+DK + N= NTSC + Q= BG+I+DK+LL + [89]: ? + [125]: + 2: No FM + 5: With FM + [DP]: + D= NTSC + P= PAL + [ACD]: + A= F-connector + C= Phono connector + D= Din Jack + [ABCD]: + 3-wire/I2C tuning, 2-band/3-band + +These Tuners are PHILIPS_API compatible. + +Philips Tuner identification: (e.g. FM1216MF) + +.. code-block:: none + + F[IRMQ]12[1345]6{MF|ME|MP} + F[IRMQ]: + FI12x6: Tuner Series + FR12x6: Tuner + Radio IF + FM12x6: Tuner + FM + FQ12x6: special + FMR12x6: special + TD15xx: Digital Tuner ATSC + 12[1345]6: + 1216: PAL BG + 1236: NTSC + 1246: PAL I + 1256: Pal DK + {MF|ME|MP} + MF: BG LL w/ Secam (Multi France) + ME: BG DK I LL (Multi Europe) + MP: BG DK I (Multi PAL) + MR: BG DK M (?) + MG: BG DKI M (?) + MK2 series PHILIPS_API, most tuners are compatible to this one ! + MK3 series introduced in 2002 w/ PHILIPS_MK3_API + +Temic Tuner identification: (.e.g 4006FH5) + +.. code-block:: none + + 4[01][0136][269]F[HYNR]5 + 40x2: Tuner (5V/33V), TEMIC_API. + 40x6: Tuner 5V + 41xx: Tuner compact + 40x9: Tuner+FM compact + [0136] + xx0x: PAL BG + xx1x: Pal DK, Secam LL + xx3x: NTSC + xx6x: PAL I + F[HYNR]5 + FH5: Pal BG + FY5: others + FN5: multistandard + FR5: w/ FM radio + 3X xxxx: order number with specific connector + Note: Only 40x2 series has TEMIC_API, all newer tuners have PHILIPS_API. + +LG Innotek Tuner: + +- TPI8NSR11 : NTSC J/M (TPI8NSR01 w/FM) (P,210/497) +- TPI8PSB11 : PAL B/G (TPI8PSB01 w/FM) (P,170/450) +- TAPC-I701 : PAL I (TAPC-I001 w/FM) (P,170/450) +- TPI8PSB12 : PAL D/K+B/G (TPI8PSB02 w/FM) (P,170/450) +- TAPC-H701P: NTSC_JP (TAPC-H001P w/FM) (L,170/450) +- TAPC-G701P: PAL B/G (TAPC-G001P w/FM) (L,170/450) +- TAPC-W701P: PAL I (TAPC-W001P w/FM) (L,170/450) +- TAPC-Q703P: PAL D/K (TAPC-Q001P w/FM) (L,170/450) +- TAPC-Q704P: PAL D/K+I (L,170/450) +- TAPC-G702P: PAL D/K+B/G (L,170/450) + +- TADC-H002F: NTSC (L,175/410?; 2-B, C-W+11, W+12-69) +- TADC-M201D: PAL D/K+B/G+I (L,143/425) (sound control at I2C address 0xc8) +- TADC-T003F: NTSC Taiwan (L,175/410?; 2-B, C-W+11, W+12-69) + +Suffix: + - P= Standard phono female socket + - D= IEC female socket + - F= F-connector + +Other Tuners: + +- TCL2002MB-1 : PAL BG + DK =TUNER_LG_PAL_NEW_TAPC +- TCL2002MB-1F: PAL BG + DK w/FM =PHILIPS_PAL +- TCL2002MI-2 : PAL I = ?? + +ALPS Tuners: + +- Most are LG_API compatible +- TSCH6 has ALPS_API (TSCH5 ?) +- TSBE1 has extra API 05,02,08 Control_byte=0xCB Source:[#f1]_ + +.. [#f1] conexant100029b-PCI-Decoder-ApplicationNote.pdf diff --git a/Documentation/driver-api/media/drivers/vimc-devel.rst b/Documentation/driver-api/media/drivers/vimc-devel.rst new file mode 100644 index 000000000000..b2aa2ee79205 --- /dev/null +++ b/Documentation/driver-api/media/drivers/vimc-devel.rst @@ -0,0 +1,15 @@ +.. SPDX-License-Identifier: GPL-2.0 + +The Virtual Media Controller Driver (vimc) +========================================== + +Source code documentation +------------------------- + +vimc-streamer +~~~~~~~~~~~~~ + +.. kernel-doc:: drivers/media/platform/vimc/vimc-streamer.h + :internal: + +.. kernel-doc:: drivers/media/platform/vimc/vimc-streamer.c diff --git a/Documentation/driver-api/media/index.rst b/Documentation/driver-api/media/index.rst index d2842f300bbd..57383df79bd3 100644 --- a/Documentation/driver-api/media/index.rst +++ b/Documentation/driver-api/media/index.rst @@ -36,3 +36,5 @@ For more details see the file COPYING in the source distribution of Linux. mc-core cec-core csi2 + + drivers/index diff --git a/Documentation/media/dvb-drivers/contributors.rst b/Documentation/media/dvb-drivers/contributors.rst deleted file mode 100644 index f23b6e6faf46..000000000000 --- a/Documentation/media/dvb-drivers/contributors.rst +++ /dev/null @@ -1,131 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Contributors -============ - -.. note:: - - This documentation is outdated. There are several other DVB contributors - that aren't listed below. - -Thanks go to the following people for patches and contributions: - -- Michael Hunold - - - for the initial saa7146 driver and its recent overhaul - -- Christian Theiss - - - for his work on the initial Linux DVB driver - -- Marcus Metzler and - Ralph Metzler - - - for their continuing work on the DVB driver - -- Michael Holzt - - - for his contributions to the dvb-net driver - -- Diego Picciani - - - for CyberLogin for Linux which allows logging onto EON - (in case you are wondering where CyberLogin is, EON changed its login - procedure and CyberLogin is no longer used.) - -- Martin Schaller - - - for patching the cable card decoder driver - -- Klaus Schmidinger - - - for various fixes regarding tuning, OSD and CI stuff and his work on VDR - -- Steve Brown - - - for his AFC kernel thread - -- Christoph Martin - - - for his LIRC infrared handler - -- Andreas Oberritter , - Dennis Noermann , - Felix Domke , - Florian Schirmer , - Ronny Strutz <3des@elitedvb.de>, - Wolfram Joost - and all the other dbox2 people - - - for many bugfixes in the generic DVB Core, frontend drivers and - their work on the dbox2 port of the DVB driver - -- Oliver Endriss - - - for many bugfixes - -- Andrew de Quincey - - - for the tda1004x frontend driver, and various bugfixes - -- Peter Schildmann - - - for the driver for the Technisat SkyStar2 PCI DVB card - -- Vadim Catana , - Roberto Ragusa and - Augusto Cardoso - - - for all the work for the FlexCopII chipset by B2C2,Inc. - -- Davor Emard - - - for his work on the budget drivers, the demux code, - the module unloading problems, ... - -- Hans-Frieder Vogt - - - for his work on calculating and checking the crc's for the - TechnoTrend/Hauppauge DEC driver firmware - -- Michael Dreher and - Andreas 'randy' Weinberger - - - for the support of the Fujitsu-Siemens Activy budget DVB-S - -- Kenneth Aafløy - - - for adding support for Typhoon DVB-S budget card - -- Ernst Peinlich - - - for tuning/DiSEqC support for the DEC 3000-s - -- Peter Beutner - - - for the IR code for the ttusb-dec driver - -- Wilson Michaels - - - for the lgdt330x frontend driver, and various bugfixes - -- Michael Krufky - - - for maintaining v4l/dvb inter-tree dependencies - -- Taylor Jacob - - - for the nxt2002 frontend driver - -- Jean-Francois Thibert - - - for the nxt2004 frontend driver - -- Kirk Lapray - - - for the or51211 and or51132 frontend drivers, and - for merging the nxt2002 and nxt2004 modules into a - single nxt200x frontend driver. - -(If you think you should be in this list, but you are not, drop a -line to the DVB mailing list) diff --git a/Documentation/media/dvb-drivers/dvb-usb.rst b/Documentation/media/dvb-drivers/dvb-usb.rst deleted file mode 100644 index b2d5d9e62b30..000000000000 --- a/Documentation/media/dvb-drivers/dvb-usb.rst +++ /dev/null @@ -1,357 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Idea behind the dvb-usb-framework -================================= - -.. note:: - - #) This documentation is outdated. Please check at the DVB wiki - at https://linuxtv.org/wiki for more updated info. - - #) **deprecated:** Newer DVB USB drivers should use the dvb-usb-v2 framework. - -In March 2005 I got the new Twinhan USB2.0 DVB-T device. They provided specs -and a firmware. - -Quite keen I wanted to put the driver (with some quirks of course) into dibusb. -After reading some specs and doing some USB snooping, it realized, that the -dibusb-driver would be a complete mess afterwards. So I decided to do it in a -different way: With the help of a dvb-usb-framework. - -The framework provides generic functions (mostly kernel API calls), such as: - -- Transport Stream URB handling in conjunction with dvb-demux-feed-control - (bulk and isoc are supported) -- registering the device for the DVB-API -- registering an I2C-adapter if applicable -- remote-control/input-device handling -- firmware requesting and loading (currently just for the Cypress USB - controllers) -- other functions/methods which can be shared by several drivers (such as - functions for bulk-control-commands) -- TODO: a I2C-chunker. It creates device-specific chunks of register-accesses - depending on length of a register and the number of values that can be - multi-written and multi-read. - -The source code of the particular DVB USB devices does just the communication -with the device via the bus. The connection between the DVB-API-functionality -is done via callbacks, assigned in a static device-description (struct -dvb_usb_device) each device-driver has to have. - -For an example have a look in drivers/media/usb/dvb-usb/vp7045*. - -Objective is to migrate all the usb-devices (dibusb, cinergyT2, maybe the -ttusb; flexcop-usb already benefits from the generic flexcop-device) to use -the dvb-usb-lib. - -TODO: dynamic enabling and disabling of the pid-filter in regard to number of -feeds requested. - -Supported devices ------------------ - -See the LinuxTV DVB Wiki at https://linuxtv.org for a complete list of -cards/drivers/firmwares: -https://linuxtv.org/wiki/index.php/DVB_USB - -0. History & News: - - 2005-06-30 - - - added support for WideView WT-220U (Thanks to Steve Chang) - - 2005-05-30 - - - added basic isochronous support to the dvb-usb-framework - - added support for Conexant Hybrid reference design and Nebula - DigiTV USB - - 2005-04-17 - - - all dibusb devices ported to make use of the dvb-usb-framework - - 2005-04-02 - - - re-enabled and improved remote control code. - - 2005-03-31 - - - ported the Yakumo/Hama/Typhoon DVB-T USB2.0 device to dvb-usb. - - 2005-03-30 - - - first commit of the dvb-usb-module based on the dibusb-source. - First device is a new driver for the - TwinhanDTV Alpha / MagicBox II USB2.0-only DVB-T device. - - (change from dvb-dibusb to dvb-usb) - - 2005-03-28 - - - added support for the AVerMedia AverTV DVB-T USB2.0 device - (Thanks to Glen Harris and Jiun-Kuei Jung, AVerMedia) - - 2005-03-14 - - - added support for the Typhoon/Yakumo/HAMA DVB-T mobile USB2.0 - - 2005-02-11 - - - added support for the KWorld/ADSTech Instant DVB-T USB2.0. - Thanks a lot to Joachim von Caron - - 2005-02-02 - - added support for the Hauppauge Win-TV Nova-T USB2 - - 2005-01-31 - - distorted streaming is gone for USB1.1 devices - - 2005-01-13 - - - moved the mirrored pid_filter_table back to dvb-dibusb - first almost working version for HanfTek UMT-010 - found out, that Yakumo/HAMA/Typhoon are predecessors of the HanfTek UMT-010 - - 2005-01-10 - - - refactoring completed, now everything is very delightful - - - tuner quirks for some weird devices (Artec T1 AN2235 device has sometimes a - Panasonic Tuner assembled). Tunerprobing implemented. - Thanks a lot to Gunnar Wittich. - - 2004-12-29 - - - after several days of struggling around bug of no returning URBs fixed. - - 2004-12-26 - - - refactored the dibusb-driver, split into separate files - - i2c-probing enabled - - 2004-12-06 - - - possibility for demod i2c-address probing - - new usb IDs (Compro, Artec) - - 2004-11-23 - - - merged changes from DiB3000MC_ver2.1 - - revised the debugging - - possibility to deliver the complete TS for USB2.0 - - 2004-11-21 - - - first working version of the dib3000mc/p frontend driver. - - 2004-11-12 - - - added additional remote control keys. Thanks to Uwe Hanke. - - 2004-11-07 - - - added remote control support. Thanks to David Matthews. - - 2004-11-05 - - - added support for a new devices (Grandtec/Avermedia/Artec) - - merged my changes (for dib3000mb/dibusb) to the FE_REFACTORING, because it became HEAD - - moved transfer control (pid filter, fifo control) from usb driver to frontend, it seems - better settled there (added xfer_ops-struct) - - created a common files for frontends (mc/p/mb) - - 2004-09-28 - - - added support for a new device (Unknown, vendor ID is Hyper-Paltek) - - 2004-09-20 - - - added support for a new device (Compro DVB-U2000), thanks - to Amaury Demol for reporting - - changed usb TS transfer method (several urbs, stopping transfer - before setting a new pid) - - 2004-09-13 - - - added support for a new device (Artec T1 USB TVBOX), thanks - to Christian Motschke for reporting - - 2004-09-05 - - - released the dibusb device and dib3000mb-frontend driver - (old news for vp7041.c) - - 2004-07-15 - - - found out, by accident, that the device has a TUA6010XS for PLL - - 2004-07-12 - - - figured out, that the driver should also work with the - CTS Portable (Chinese Television System) - - 2004-07-08 - - - firmware-extraction-2.422-problem solved, driver is now working - properly with firmware extracted from 2.422 - - #if for 2.6.4 (dvb), compile issue - - changed firmware handling, see vp7041.txt sec 1.1 - - 2004-07-02 - - - some tuner modifications, v0.1, cleanups, first public - - 2004-06-28 - - - now using the dvb_dmx_swfilter_packets, everything runs fine now - - 2004-06-27 - - - able to watch and switching channels (pre-alpha) - - no section filtering yet - - 2004-06-06 - - - first TS received, but kernel oops :/ - - 2004-05-14 - - - firmware loader is working - - 2004-05-11 - - - start writing the driver - -How to use? ------------ - -Firmware -~~~~~~~~ - -Most of the USB drivers need to download a firmware to the device before start -working. - -Have a look at the Wikipage for the DVB-USB-drivers to find out, which firmware -you need for your device: - -https://linuxtv.org/wiki/index.php/DVB_USB - -Compiling -~~~~~~~~~ - -Since the driver is in the linux kernel, activating the driver in -your favorite config-environment should sufficient. I recommend -to compile the driver as module. Hotplug does the rest. - -If you use dvb-kernel enter the build-2.6 directory run 'make' and 'insmod.sh -load' afterwards. - -Loading the drivers -~~~~~~~~~~~~~~~~~~~ - -Hotplug is able to load the driver, when it is needed (because you plugged -in the device). - -If you want to enable debug output, you have to load the driver manually and -from within the dvb-kernel cvs repository. - -first have a look, which debug level are available: - -.. code-block:: none - - # modinfo dvb-usb - # modinfo dvb-usb-vp7045 - - etc. - -.. code-block:: none - - modprobe dvb-usb debug= - modprobe dvb-usb-vp7045 debug= - etc. - -should do the trick. - -When the driver is loaded successfully, the firmware file was in -the right place and the device is connected, the "Power"-LED should be -turned on. - -At this point you should be able to start a dvb-capable application. I'm use -(t|s)zap, mplayer and dvbscan to test the basics. VDR-xine provides the -long-term test scenario. - -Known problems and bugs ------------------------ - -- Don't remove the USB device while running an DVB application, your system - will go crazy or die most likely. - -Adding support for devices -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -TODO - -USB1.1 Bandwidth limitation -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -A lot of the currently supported devices are USB1.1 and thus they have a -maximum bandwidth of about 5-6 MBit/s when connected to a USB2.0 hub. -This is not enough for receiving the complete transport stream of a -DVB-T channel (which is about 16 MBit/s). Normally this is not a -problem, if you only want to watch TV (this does not apply for HDTV), -but watching a channel while recording another channel on the same -frequency simply does not work very well. This applies to all USB1.1 -DVB-T devices, not just the dvb-usb-devices) - -The bug, where the TS is distorted by a heavy usage of the device is gone -definitely. All dvb-usb-devices I was using (Twinhan, Kworld, DiBcom) are -working like charm now with VDR. Sometimes I even was able to record a channel -and watch another one. - -Comments -~~~~~~~~ - -Patches, comments and suggestions are very very welcome. - -3. Acknowledgements -------------------- - - Amaury Demol (Amaury.Demol@parrot.com) and Francois Kanounnikoff from DiBcom for - providing specs, code and help, on which the dvb-dibusb, dib3000mb and - dib3000mc are based. - - David Matthews for identifying a new device type (Artec T1 with AN2235) - and for extending dibusb with remote control event handling. Thank you. - - Alex Woods for frequently answering question about usb and dvb - stuff, a big thank you. - - Bernd Wagner for helping with huge bug reports and discussions. - - Gunnar Wittich and Joachim von Caron for their trust for providing - root-shells on their machines to implement support for new devices. - - Allan Third and Michael Hutchinson for their help to write the Nebula - digitv-driver. - - Glen Harris for bringing up, that there is a new dibusb-device and Jiun-Kuei - Jung from AVerMedia who kindly provided a special firmware to get the device - up and running in Linux. - - Jennifer Chen, Jeff and Jack from Twinhan for kindly supporting by - writing the vp7045-driver. - - Steve Chang from WideView for providing information for new devices and - firmware files. - - Michael Paxton for submitting remote control keymaps. - - Some guys on the linux-dvb mailing list for encouraging me. - - Peter Schildmann >peter.schildmann-nospam-at-web.de< for his - user-level firmware loader, which saves a lot of time - (when writing the vp7041 driver) - - Ulf Hermenau for helping me out with traditional chinese. - - André Smoktun and Christian Frömmel for supporting me with - hardware and listening to my problems very patiently. diff --git a/Documentation/media/dvb-drivers/frontends.rst b/Documentation/media/dvb-drivers/frontends.rst deleted file mode 100644 index 7b8336ece681..000000000000 --- a/Documentation/media/dvb-drivers/frontends.rst +++ /dev/null @@ -1,32 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -**************** -Frontend drivers -**************** - -Frontend attach headers -*********************** - -.. Keep it on alphabetic order - -.. kernel-doc:: drivers/media/dvb-frontends/a8293.h -.. kernel-doc:: drivers/media/dvb-frontends/af9013.h -.. kernel-doc:: drivers/media/dvb-frontends/ascot2e.h -.. kernel-doc:: drivers/media/dvb-frontends/cxd2820r.h -.. kernel-doc:: drivers/media/dvb-frontends/drxk.h -.. kernel-doc:: drivers/media/dvb-frontends/dvb-pll.h -.. kernel-doc:: drivers/media/dvb-frontends/helene.h -.. kernel-doc:: drivers/media/dvb-frontends/horus3a.h -.. kernel-doc:: drivers/media/dvb-frontends/ix2505v.h -.. kernel-doc:: drivers/media/dvb-frontends/m88ds3103.h -.. kernel-doc:: drivers/media/dvb-frontends/mb86a20s.h -.. kernel-doc:: drivers/media/dvb-frontends/mn88472.h -.. kernel-doc:: drivers/media/dvb-frontends/rtl2830.h -.. kernel-doc:: drivers/media/dvb-frontends/rtl2832.h -.. kernel-doc:: drivers/media/dvb-frontends/rtl2832_sdr.h -.. kernel-doc:: drivers/media/dvb-frontends/stb6000.h -.. kernel-doc:: drivers/media/dvb-frontends/tda10071.h -.. kernel-doc:: drivers/media/dvb-frontends/tda826x.h -.. kernel-doc:: drivers/media/dvb-frontends/zd1301_demod.h -.. kernel-doc:: drivers/media/dvb-frontends/zl10036.h - diff --git a/Documentation/media/dvb-drivers/index.rst b/Documentation/media/dvb-drivers/index.rst deleted file mode 100644 index 7a870ee7ac7d..000000000000 --- a/Documentation/media/dvb-drivers/index.rst +++ /dev/null @@ -1,34 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -.. include:: - -############################################## -Linux Digital TV driver-specific documentation -############################################## - -**Copyright** |copy| 2001-2016 : LinuxTV Developers - -This documentation is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the Free -Software Foundation version 2 of the License. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -more details. - -For more details see the file COPYING in the source distribution of Linux. - -.. only:: html - - .. class:: toc-title - - Table of Contents - -.. toctree:: - :maxdepth: 5 - :numbered: - - dvb-usb - frontends - contributors diff --git a/Documentation/media/index.rst b/Documentation/media/index.rst index 0f75280b8c43..a5cd600e0b04 100644 --- a/Documentation/media/index.rst +++ b/Documentation/media/index.rst @@ -16,7 +16,6 @@ Linux Media Subsystem Documentation ../driver-api/media/index v4l-drivers/index - dvb-drivers/index .. only:: html and subproject diff --git a/Documentation/media/v4l-drivers/bttv-devel.rst b/Documentation/media/v4l-drivers/bttv-devel.rst deleted file mode 100644 index 396fad572c93..000000000000 --- a/Documentation/media/v4l-drivers/bttv-devel.rst +++ /dev/null @@ -1,123 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The bttv driver -=============== - -bttv and sound mini howto -------------------------- - -There are a lot of different bt848/849/878/879 based boards available. -Making video work often is not a big deal, because this is handled -completely by the bt8xx chip, which is common on all boards. But -sound is handled in slightly different ways on each board. - -To handle the grabber boards correctly, there is a array tvcards[] in -bttv-cards.c, which holds the information required for each board. -Sound will work only, if the correct entry is used (for video it often -makes no difference). The bttv driver prints a line to the kernel -log, telling which card type is used. Like this one: - -.. code-block:: none - - bttv0: model: BT848(Hauppauge old) [autodetected] - -You should verify this is correct. If it isn't, you have to pass the -correct board type as insmod argument, "insmod bttv card=2" for -example. The file CARDLIST has a list of valid arguments for card. -If your card isn't listed there, you might check the source code for -new entries which are not listed yet. If there isn't one for your -card, you can check if one of the existing entries does work for you -(just trial and error...). - -Some boards have an extra processor for sound to do stereo decoding -and other nice features. The msp34xx chips are used by Hauppauge for -example. If your board has one, you might have to load a helper -module like msp3400.o to make sound work. If there isn't one for the -chip used on your board: Bad luck. Start writing a new one. Well, -you might want to check the video4linux mailing list archive first... - -Of course you need a correctly installed soundcard unless you have the -speakers connected directly to the grabber board. Hint: check the -mixer settings too. ALSA for example has everything muted by default. - - -How sound works in detail -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Still doesn't work? Looks like some driver hacking is required. -Below is a do-it-yourself description for you. - -The bt8xx chips have 32 general purpose pins, and registers to control -these pins. One register is the output enable register -(BT848_GPIO_OUT_EN), it says which pins are actively driven by the -bt848 chip. Another one is the data register (BT848_GPIO_DATA), where -you can get/set the status if these pins. They can be used for input -and output. - -Most grabber board vendors use these pins to control an external chip -which does the sound routing. But every board is a little different. -These pins are also used by some companies to drive remote control -receiver chips. Some boards use the i2c bus instead of the gpio pins -to connect the mux chip. - -As mentioned above, there is a array which holds the required -information for each known board. You basically have to create a new -line for your board. The important fields are these two: - -.. code-block:: c - - struct tvcard - { - [ ... ] - u32 gpiomask; - u32 audiomux[6]; /* Tuner, Radio, external, internal, mute, stereo */ - }; - -gpiomask specifies which pins are used to control the audio mux chip. -The corresponding bits in the output enable register -(BT848_GPIO_OUT_EN) will be set as these pins must be driven by the -bt848 chip. - -The audiomux\[\] array holds the data values for the different inputs -(i.e. which pins must be high/low for tuner/mute/...). This will be -written to the data register (BT848_GPIO_DATA) to switch the audio -mux. - - -What you have to do is figure out the correct values for gpiomask and -the audiomux array. If you have Windows and the drivers four your -card installed, you might to check out if you can read these registers -values used by the windows driver. A tool to do this is available -from ftp://telepresence.dmem.strath.ac.uk/pub/bt848/winutil, but it -doesn't work with bt878 boards according to some reports I received. -Another one with bt878 support is available from -http://btwincap.sourceforge.net/Files/btspy2.00.zip - -You might also dig around in the \*.ini files of the Windows applications. -You can have a look at the board to see which of the gpio pins are -connected at all and then start trial-and-error ... - - -Starting with release 0.7.41 bttv has a number of insmod options to -make the gpio debugging easier: - -.. code-block:: none - - bttv_gpio=0/1 enable/disable gpio debug messages - gpiomask=n set the gpiomask value - audiomux=i,j,... set the values of the audiomux array - audioall=a set the values of the audiomux array (one - value for all array elements, useful to check - out which effect the particular value has). - -The messages printed with bttv_gpio=1 look like this: - -.. code-block:: none - - bttv0: gpio: en=00000027, out=00000024 in=00ffffd8 [audio: off] - - en = output _en_able register (BT848_GPIO_OUT_EN) - out = _out_put bits of the data register (BT848_GPIO_DATA), - i.e. BT848_GPIO_DATA & BT848_GPIO_OUT_EN - in = _in_put bits of the data register, - i.e. BT848_GPIO_DATA & ~BT848_GPIO_OUT_EN diff --git a/Documentation/media/v4l-drivers/cpia2_devel.rst b/Documentation/media/v4l-drivers/cpia2_devel.rst deleted file mode 100644 index decaa4768c78..000000000000 --- a/Documentation/media/v4l-drivers/cpia2_devel.rst +++ /dev/null @@ -1,56 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The cpia2 driver -================ - -Authors: Peter Pregler , -Scott J. Bertin , and -Jarl Totland for the original cpia driver, which -this one was modelled from. - - -Notes to developers -~~~~~~~~~~~~~~~~~~~ - - - This is a driver version stripped of the 2.4 back compatibility - and old MJPEG ioctl API. See cpia2.sf.net for 2.4 support. - -Programmer's overview of cpia2 driver -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Cpia2 is the second generation video coprocessor from VLSI Vision Ltd (now a -division of ST Microelectronics). There are two versions. The first is the -STV0672, which is capable of up to 30 frames per second (fps) in frame sizes -up to CIF, and 15 fps for VGA frames. The STV0676 is an improved version, -which can handle up to 30 fps VGA. Both coprocessors can be attached to two -CMOS sensors - the vvl6410 CIF sensor and the vvl6500 VGA sensor. These will -be referred to as the 410 and the 500 sensors, or the CIF and VGA sensors. - -The two chipsets operate almost identically. The core is an 8051 processor, -running two different versions of firmware. The 672 runs the VP4 video -processor code, the 676 runs VP5. There are a few differences in register -mappings for the two chips. In these cases, the symbols defined in the -header files are marked with VP4 or VP5 as part of the symbol name. - -The cameras appear externally as three sets of registers. Setting register -values is the only way to control the camera. Some settings are -interdependant, such as the sequence required to power up the camera. I will -try to make note of all of these cases. - -The register sets are called blocks. Block 0 is the system block. This -section is always powered on when the camera is plugged in. It contains -registers that control housekeeping functions such as powering up the video -processor. The video processor is the VP block. These registers control -how the video from the sensor is processed. Examples are timing registers, -user mode (vga, qvga), scaling, cropping, framerates, and so on. The last -block is the video compressor (VC). The video stream sent from the camera is -compressed as Motion JPEG (JPEGA). The VC controls all of the compression -parameters. Looking at the file cpia2_registers.h, you can get a full view -of these registers and the possible values for most of them. - -One or more registers can be set or read by sending a usb control message to -the camera. There are three modes for this. Block mode requests a number -of contiguous registers. Random mode reads or writes random registers with -a tuple structure containing address/value pairs. The repeat mode is only -used by VP4 to load a firmware patch. It contains a starting address and -a sequence of bytes to be written into a gpio port. diff --git a/Documentation/media/v4l-drivers/cx2341x-devel.rst b/Documentation/media/v4l-drivers/cx2341x-devel.rst deleted file mode 100644 index 97699df6ea2e..000000000000 --- a/Documentation/media/v4l-drivers/cx2341x-devel.rst +++ /dev/null @@ -1,3685 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The cx2341x driver -================== - -Memory at cx2341x chips ------------------------ - -This section describes the cx2341x memory map and documents some of the -register space. - -.. note:: the memory long words are little-endian ('intel format'). - -.. warning:: - - This information was figured out from searching through the memory - and registers, this information may not be correct and is certainly - not complete, and was not derived from anything more than searching - through the memory space with commands like: - - .. code-block:: none - - ivtvctl -O min=0x02000000,max=0x020000ff - - So take this as is, I'm always searching for more stuff, it's a large - register space :-). - -Memory Map -~~~~~~~~~~ - -The cx2341x exposes its entire 64M memory space to the PCI host via the PCI BAR0 -(Base Address Register 0). The addresses here are offsets relative to the -address held in BAR0. - -.. code-block:: none - - 0x00000000-0x00ffffff Encoder memory space - 0x00000000-0x0003ffff Encode.rom - ???-??? MPEG buffer(s) - ???-??? Raw video capture buffer(s) - ???-??? Raw audio capture buffer(s) - ???-??? Display buffers (6 or 9) - - 0x01000000-0x01ffffff Decoder memory space - 0x01000000-0x0103ffff Decode.rom - ???-??? MPEG buffers(s) - 0x0114b000-0x0115afff Audio.rom (deprecated?) - - 0x02000000-0x0200ffff Register Space - -Registers -~~~~~~~~~ - -The registers occupy the 64k space starting at the 0x02000000 offset from BAR0. -All of these registers are 32 bits wide. - -.. code-block:: none - - DMA Registers 0x000-0xff: - - 0x00 - Control: - 0=reset/cancel, 1=read, 2=write, 4=stop - 0x04 - DMA status: - 1=read busy, 2=write busy, 4=read error, 8=write error, 16=link list error - 0x08 - pci DMA pointer for read link list - 0x0c - pci DMA pointer for write link list - 0x10 - read/write DMA enable: - 1=read enable, 2=write enable - 0x14 - always 0xffffffff, if set any lower instability occurs, 0x00 crashes - 0x18 - ?? - 0x1c - always 0x20 or 32, smaller values slow down DMA transactions - 0x20 - always value of 0x780a010a - 0x24-0x3c - usually just random values??? - 0x40 - Interrupt status - 0x44 - Write a bit here and shows up in Interrupt status 0x40 - 0x48 - Interrupt Mask - 0x4C - always value of 0xfffdffff, - if changed to 0xffffffff DMA write interrupts break. - 0x50 - always 0xffffffff - 0x54 - always 0xffffffff (0x4c, 0x50, 0x54 seem like interrupt masks, are - 3 processors on chip, Java ones, VPU, SPU, APU, maybe these are the - interrupt masks???). - 0x60-0x7C - random values - 0x80 - first write linked list reg, for Encoder Memory addr - 0x84 - first write linked list reg, for pci memory addr - 0x88 - first write linked list reg, for length of buffer in memory addr - (|0x80000000 or this for last link) - 0x8c-0xdc - rest of write linked list reg, 8 sets of 3 total, DMA goes here - from linked list addr in reg 0x0c, firmware must push through or - something. - 0xe0 - first (and only) read linked list reg, for pci memory addr - 0xe4 - first (and only) read linked list reg, for Decoder memory addr - 0xe8 - first (and only) read linked list reg, for length of buffer - 0xec-0xff - Nothing seems to be in these registers, 0xec-f4 are 0x00000000. - -Memory locations for Encoder Buffers 0x700-0x7ff: - -These registers show offsets of memory locations pertaining to each -buffer area used for encoding, have to shift them by <<1 first. - -- 0x07F8: Encoder SDRAM refresh -- 0x07FC: Encoder SDRAM pre-charge - -Memory locations for Decoder Buffers 0x800-0x8ff: - -These registers show offsets of memory locations pertaining to each -buffer area used for decoding, have to shift them by <<1 first. - -- 0x08F8: Decoder SDRAM refresh -- 0x08FC: Decoder SDRAM pre-charge - -Other memory locations: - -- 0x2800: Video Display Module control -- 0x2D00: AO (audio output?) control -- 0x2D24: Bytes Flushed -- 0x7000: LSB I2C write clock bit (inverted) -- 0x7004: LSB I2C write data bit (inverted) -- 0x7008: LSB I2C read clock bit -- 0x700c: LSB I2C read data bit -- 0x9008: GPIO get input state -- 0x900c: GPIO set output state -- 0x9020: GPIO direction (Bit7 (GPIO 0..7) - 0:input, 1:output) -- 0x9050: SPU control -- 0x9054: Reset HW blocks -- 0x9058: VPU control -- 0xA018: Bit6: interrupt pending? -- 0xA064: APU command - - -Interrupt Status Register -~~~~~~~~~~~~~~~~~~~~~~~~~ - -The definition of the bits in the interrupt status register 0x0040, and the -interrupt mask 0x0048. If a bit is cleared in the mask, then we want our ISR to -execute. - -- bit 31 Encoder Start Capture -- bit 30 Encoder EOS -- bit 29 Encoder VBI capture -- bit 28 Encoder Video Input Module reset event -- bit 27 Encoder DMA complete -- bit 24 Decoder audio mode change detection event (through event notification) -- bit 22 Decoder data request -- bit 20 Decoder DMA complete -- bit 19 Decoder VBI re-insertion -- bit 18 Decoder DMA err (linked-list bad) - -Missing documentation ---------------------- - -- Encoder API post(?) -- Decoder API post(?) -- Decoder VTRACE event - - -The cx2341x firmware upload ---------------------------- - -This document describes how to upload the cx2341x firmware to the card. - -How to find -~~~~~~~~~~~ - -See the web pages of the various projects that uses this chip for information -on how to obtain the firmware. - -The firmware stored in a Windows driver can be detected as follows: - -- Each firmware image is 256k bytes. -- The 1st 32-bit word of the Encoder image is 0x0000da7 -- The 1st 32-bit word of the Decoder image is 0x00003a7 -- The 2nd 32-bit word of both images is 0xaa55bb66 - -How to load -~~~~~~~~~~~ - -- Issue the FWapi command to stop the encoder if it is running. Wait for the - command to complete. -- Issue the FWapi command to stop the decoder if it is running. Wait for the - command to complete. -- Issue the I2C command to the digitizer to stop emitting VSYNC events. -- Issue the FWapi command to halt the encoder's firmware. -- Sleep for 10ms. -- Issue the FWapi command to halt the decoder's firmware. -- Sleep for 10ms. -- Write 0x00000000 to register 0x2800 to stop the Video Display Module. -- Write 0x00000005 to register 0x2D00 to stop the AO (audio output?). -- Write 0x00000000 to register 0xA064 to ping? the APU. -- Write 0xFFFFFFFE to register 0x9058 to stop the VPU. -- Write 0xFFFFFFFF to register 0x9054 to reset the HW blocks. -- Write 0x00000001 to register 0x9050 to stop the SPU. -- Sleep for 10ms. -- Write 0x0000001A to register 0x07FC to init the Encoder SDRAM's pre-charge. -- Write 0x80000640 to register 0x07F8 to init the Encoder SDRAM's refresh to 1us. -- Write 0x0000001A to register 0x08FC to init the Decoder SDRAM's pre-charge. -- Write 0x80000640 to register 0x08F8 to init the Decoder SDRAM's refresh to 1us. -- Sleep for 512ms. (600ms is recommended) -- Transfer the encoder's firmware image to offset 0 in Encoder memory space. -- Transfer the decoder's firmware image to offset 0 in Decoder memory space. -- Use a read-modify-write operation to Clear bit 0 of register 0x9050 to - re-enable the SPU. -- Sleep for 1 second. -- Use a read-modify-write operation to Clear bits 3 and 0 of register 0x9058 - to re-enable the VPU. -- Sleep for 1 second. -- Issue status API commands to both firmware images to verify. - - -How to call the firmware API ----------------------------- - -The preferred calling convention is known as the firmware mailbox. The -mailboxes are basically a fixed length array that serves as the call-stack. - -Firmware mailboxes can be located by searching the encoder and decoder memory -for a 16 byte signature. That signature will be located on a 256-byte boundary. - -Signature: - -.. code-block:: none - - 0x78, 0x56, 0x34, 0x12, 0x12, 0x78, 0x56, 0x34, - 0x34, 0x12, 0x78, 0x56, 0x56, 0x34, 0x12, 0x78 - -The firmware implements 20 mailboxes of 20 32-bit words. The first 10 are -reserved for API calls. The second 10 are used by the firmware for event -notification. - - ====== ================= - Index Name - ====== ================= - 0 Flags - 1 Command - 2 Return value - 3 Timeout - 4-19 Parameter/Result - ====== ================= - - -The flags are defined in the following table. The direction is from the -perspective of the firmware. - - ==== ========== ============================================ - Bit Direction Purpose - ==== ========== ============================================ - 2 O Firmware has processed the command. - 1 I Driver has finished setting the parameters. - 0 I Driver is using this mailbox. - ==== ========== ============================================ - -The command is a 32-bit enumerator. The API specifics may be found in this -chapter. - -The return value is a 32-bit enumerator. Only two values are currently defined: - -- 0=success -- -1=command undefined. - -There are 16 parameters/results 32-bit fields. The driver populates these fields -with values for all the parameters required by the call. The driver overwrites -these fields with result values returned by the call. - -The timeout value protects the card from a hung driver thread. If the driver -doesn't handle the completed call within the timeout specified, the firmware -will reset that mailbox. - -To make an API call, the driver iterates over each mailbox looking for the -first one available (bit 0 has been cleared). The driver sets that bit, fills -in the command enumerator, the timeout value and any required parameters. The -driver then sets the parameter ready bit (bit 1). The firmware scans the -mailboxes for pending commands, processes them, sets the result code, populates -the result value array with that call's return values and sets the call -complete bit (bit 2). Once bit 2 is set, the driver should retrieve the results -and clear all the flags. If the driver does not perform this task within the -time set in the timeout register, the firmware will reset that mailbox. - -Event notifications are sent from the firmware to the host. The host tells the -firmware which events it is interested in via an API call. That call tells the -firmware which notification mailbox to use. The firmware signals the host via -an interrupt. Only the 16 Results fields are used, the Flags, Command, Return -value and Timeout words are not used. - - -OSD firmware API description ----------------------------- - -.. note:: this API is part of the decoder firmware, so it's cx23415 only. - - - -CX2341X_OSD_GET_FRAMEBUFFER -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 65/0x41 - -Description -^^^^^^^^^^^ - -Return base and length of contiguous OSD memory. - -Result[0] -^^^^^^^^^ - -OSD base address - -Result[1] -^^^^^^^^^ - -OSD length - - - -CX2341X_OSD_GET_PIXEL_FORMAT -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 66/0x42 - -Description -^^^^^^^^^^^ - -Query OSD format - -Result[0] -^^^^^^^^^ - -0=8bit index -1=16bit RGB 5:6:5 -2=16bit ARGB 1:5:5:5 -3=16bit ARGB 1:4:4:4 -4=32bit ARGB 8:8:8:8 - - - -CX2341X_OSD_SET_PIXEL_FORMAT -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 67/0x43 - -Description -^^^^^^^^^^^ - -Assign pixel format - -Param[0] -^^^^^^^^ - -- 0=8bit index -- 1=16bit RGB 5:6:5 -- 2=16bit ARGB 1:5:5:5 -- 3=16bit ARGB 1:4:4:4 -- 4=32bit ARGB 8:8:8:8 - - - -CX2341X_OSD_GET_STATE -~~~~~~~~~~~~~~~~~~~~~ - -Enum: 68/0x44 - -Description -^^^^^^^^^^^ - -Query OSD state - -Result[0] -^^^^^^^^^ - -- Bit 0 0=off, 1=on -- Bits 1:2 alpha control -- Bits 3:5 pixel format - - - -CX2341X_OSD_SET_STATE -~~~~~~~~~~~~~~~~~~~~~ - -Enum: 69/0x45 - -Description -^^^^^^^^^^^ - -OSD switch - -Param[0] -^^^^^^^^ - -0=off, 1=on - - - -CX2341X_OSD_GET_OSD_COORDS -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 70/0x46 - -Description -^^^^^^^^^^^ - -Retrieve coordinates of OSD area blended with video - -Result[0] -^^^^^^^^^ - -OSD buffer address - -Result[1] -^^^^^^^^^ - -Stride in pixels - -Result[2] -^^^^^^^^^ - -Lines in OSD buffer - -Result[3] -^^^^^^^^^ - -Horizontal offset in buffer - -Result[4] -^^^^^^^^^ - -Vertical offset in buffer - - - -CX2341X_OSD_SET_OSD_COORDS -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 71/0x47 - -Description -^^^^^^^^^^^ - -Assign the coordinates of the OSD area to blend with video - -Param[0] -^^^^^^^^ - -buffer address - -Param[1] -^^^^^^^^ - -buffer stride in pixels - -Param[2] -^^^^^^^^ - -lines in buffer - -Param[3] -^^^^^^^^ - -horizontal offset - -Param[4] -^^^^^^^^ - -vertical offset - - - -CX2341X_OSD_GET_SCREEN_COORDS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 72/0x48 - -Description -^^^^^^^^^^^ - -Retrieve OSD screen area coordinates - -Result[0] -^^^^^^^^^ - -top left horizontal offset - -Result[1] -^^^^^^^^^ - -top left vertical offset - -Result[2] -^^^^^^^^^ - -bottom right horizontal offset - -Result[3] -^^^^^^^^^ - -bottom right vertical offset - - - -CX2341X_OSD_SET_SCREEN_COORDS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 73/0x49 - -Description -^^^^^^^^^^^ - -Assign the coordinates of the screen area to blend with video - -Param[0] -^^^^^^^^ - -top left horizontal offset - -Param[1] -^^^^^^^^ - -top left vertical offset - -Param[2] -^^^^^^^^ - -bottom left horizontal offset - -Param[3] -^^^^^^^^ - -bottom left vertical offset - - - -CX2341X_OSD_GET_GLOBAL_ALPHA -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 74/0x4A - -Description -^^^^^^^^^^^ - -Retrieve OSD global alpha - -Result[0] -^^^^^^^^^ - -global alpha: 0=off, 1=on - -Result[1] -^^^^^^^^^ - -bits 0:7 global alpha - - - -CX2341X_OSD_SET_GLOBAL_ALPHA -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 75/0x4B - -Description -^^^^^^^^^^^ - -Update global alpha - -Param[0] -^^^^^^^^ - -global alpha: 0=off, 1=on - -Param[1] -^^^^^^^^ - -global alpha (8 bits) - -Param[2] -^^^^^^^^ - -local alpha: 0=on, 1=off - - - -CX2341X_OSD_SET_BLEND_COORDS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 78/0x4C - -Description -^^^^^^^^^^^ - -Move start of blending area within display buffer - -Param[0] -^^^^^^^^ - -horizontal offset in buffer - -Param[1] -^^^^^^^^ - -vertical offset in buffer - - - -CX2341X_OSD_GET_FLICKER_STATE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 79/0x4F - -Description -^^^^^^^^^^^ - -Retrieve flicker reduction module state - -Result[0] -^^^^^^^^^ - -flicker state: 0=off, 1=on - - - -CX2341X_OSD_SET_FLICKER_STATE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 80/0x50 - -Description -^^^^^^^^^^^ - -Set flicker reduction module state - -Param[0] -^^^^^^^^ - -State: 0=off, 1=on - - - -CX2341X_OSD_BLT_COPY -~~~~~~~~~~~~~~~~~~~~ - -Enum: 82/0x52 - -Description -^^^^^^^^^^^ - -BLT copy - -Param[0] -^^^^^^^^ - -.. code-block:: none - - '0000' zero - '0001' ~destination AND ~source - '0010' ~destination AND source - '0011' ~destination - '0100' destination AND ~source - '0101' ~source - '0110' destination XOR source - '0111' ~destination OR ~source - '1000' ~destination AND ~source - '1001' destination XNOR source - '1010' source - '1011' ~destination OR source - '1100' destination - '1101' destination OR ~source - '1110' destination OR source - '1111' one - - -Param[1] -^^^^^^^^ - -Resulting alpha blending - -- '01' source_alpha -- '10' destination_alpha -- '11' source_alpha*destination_alpha+1 - (zero if both source and destination alpha are zero) - -Param[2] -^^^^^^^^ - -.. code-block:: none - - '00' output_pixel = source_pixel - - '01' if source_alpha=0: - output_pixel = destination_pixel - if 256 > source_alpha > 1: - output_pixel = ((source_alpha + 1)*source_pixel + - (255 - source_alpha)*destination_pixel)/256 - - '10' if destination_alpha=0: - output_pixel = source_pixel - if 255 > destination_alpha > 0: - output_pixel = ((255 - destination_alpha)*source_pixel + - (destination_alpha + 1)*destination_pixel)/256 - - '11' if source_alpha=0: - source_temp = 0 - if source_alpha=255: - source_temp = source_pixel*256 - if 255 > source_alpha > 0: - source_temp = source_pixel*(source_alpha + 1) - if destination_alpha=0: - destination_temp = 0 - if destination_alpha=255: - destination_temp = destination_pixel*256 - if 255 > destination_alpha > 0: - destination_temp = destination_pixel*(destination_alpha + 1) - output_pixel = (source_temp + destination_temp)/256 - -Param[3] -^^^^^^^^ - -width - -Param[4] -^^^^^^^^ - -height - -Param[5] -^^^^^^^^ - -destination pixel mask - -Param[6] -^^^^^^^^ - -destination rectangle start address - -Param[7] -^^^^^^^^ - -destination stride in dwords - -Param[8] -^^^^^^^^ - -source stride in dwords - -Param[9] -^^^^^^^^ - -source rectangle start address - - - -CX2341X_OSD_BLT_FILL -~~~~~~~~~~~~~~~~~~~~ - -Enum: 83/0x53 - -Description -^^^^^^^^^^^ - -BLT fill color - -Param[0] -^^^^^^^^ - -Same as Param[0] on API 0x52 - -Param[1] -^^^^^^^^ - -Same as Param[1] on API 0x52 - -Param[2] -^^^^^^^^ - -Same as Param[2] on API 0x52 - -Param[3] -^^^^^^^^ - -width - -Param[4] -^^^^^^^^ - -height - -Param[5] -^^^^^^^^ - -destination pixel mask - -Param[6] -^^^^^^^^ - -destination rectangle start address - -Param[7] -^^^^^^^^ - -destination stride in dwords - -Param[8] -^^^^^^^^ - -color fill value - - - -CX2341X_OSD_BLT_TEXT -~~~~~~~~~~~~~~~~~~~~ - -Enum: 84/0x54 - -Description -^^^^^^^^^^^ - -BLT for 8 bit alpha text source - -Param[0] -^^^^^^^^ - -Same as Param[0] on API 0x52 - -Param[1] -^^^^^^^^ - -Same as Param[1] on API 0x52 - -Param[2] -^^^^^^^^ - -Same as Param[2] on API 0x52 - -Param[3] -^^^^^^^^ - -width - -Param[4] -^^^^^^^^ - -height - -Param[5] -^^^^^^^^ - -destination pixel mask - -Param[6] -^^^^^^^^ - -destination rectangle start address - -Param[7] -^^^^^^^^ - -destination stride in dwords - -Param[8] -^^^^^^^^ - -source stride in dwords - -Param[9] -^^^^^^^^ - -source rectangle start address - -Param[10] -^^^^^^^^^ - -color fill value - - - -CX2341X_OSD_SET_FRAMEBUFFER_WINDOW -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 86/0x56 - -Description -^^^^^^^^^^^ - -Positions the main output window on the screen. The coordinates must be -such that the entire window fits on the screen. - -Param[0] -^^^^^^^^ - -window width - -Param[1] -^^^^^^^^ - -window height - -Param[2] -^^^^^^^^ - -top left window corner horizontal offset - -Param[3] -^^^^^^^^ - -top left window corner vertical offset - - - -CX2341X_OSD_SET_CHROMA_KEY -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 96/0x60 - -Description -^^^^^^^^^^^ - -Chroma key switch and color - -Param[0] -^^^^^^^^ - -state: 0=off, 1=on - -Param[1] -^^^^^^^^ - -color - - - -CX2341X_OSD_GET_ALPHA_CONTENT_INDEX -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 97/0x61 - -Description -^^^^^^^^^^^ - -Retrieve alpha content index - -Result[0] -^^^^^^^^^ - -alpha content index, Range 0:15 - - - -CX2341X_OSD_SET_ALPHA_CONTENT_INDEX -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 98/0x62 - -Description -^^^^^^^^^^^ - -Assign alpha content index - -Param[0] -^^^^^^^^ - -alpha content index, range 0:15 - - -Encoder firmware API description --------------------------------- - -CX2341X_ENC_PING_FW -~~~~~~~~~~~~~~~~~~~ - -Enum: 128/0x80 - -Description -^^^^^^^^^^^ - -Does nothing. Can be used to check if the firmware is responding. - - - -CX2341X_ENC_START_CAPTURE -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 129/0x81 - -Description -^^^^^^^^^^^ - -Commences the capture of video, audio and/or VBI data. All encoding -parameters must be initialized prior to this API call. Captures frames -continuously or until a predefined number of frames have been captured. - -Param[0] -^^^^^^^^ - -Capture stream type: - - - 0=MPEG - - 1=Raw - - 2=Raw passthrough - - 3=VBI - - -Param[1] -^^^^^^^^ - -Bitmask: - - - Bit 0 when set, captures YUV - - Bit 1 when set, captures PCM audio - - Bit 2 when set, captures VBI (same as param[0]=3) - - Bit 3 when set, the capture destination is the decoder - (same as param[0]=2) - - Bit 4 when set, the capture destination is the host - -.. note:: this parameter is only meaningful for RAW capture type. - - - -CX2341X_ENC_STOP_CAPTURE -~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 130/0x82 - -Description -^^^^^^^^^^^ - -Ends a capture in progress - -Param[0] -^^^^^^^^ - -- 0=stop at end of GOP (generates IRQ) -- 1=stop immediate (no IRQ) - -Param[1] -^^^^^^^^ - -Stream type to stop, see param[0] of API 0x81 - -Param[2] -^^^^^^^^ - -Subtype, see param[1] of API 0x81 - - - -CX2341X_ENC_SET_AUDIO_ID -~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 137/0x89 - -Description -^^^^^^^^^^^ - -Assigns the transport stream ID of the encoded audio stream - -Param[0] -^^^^^^^^ - -Audio Stream ID - - - -CX2341X_ENC_SET_VIDEO_ID -~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 139/0x8B - -Description -^^^^^^^^^^^ - -Set video transport stream ID - -Param[0] -^^^^^^^^ - -Video stream ID - - - -CX2341X_ENC_SET_PCR_ID -~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 141/0x8D - -Description -^^^^^^^^^^^ - -Assigns the transport stream ID for PCR packets - -Param[0] -^^^^^^^^ - -PCR Stream ID - - - -CX2341X_ENC_SET_FRAME_RATE -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 143/0x8F - -Description -^^^^^^^^^^^ - -Set video frames per second. Change occurs at start of new GOP. - -Param[0] -^^^^^^^^ - -- 0=30fps -- 1=25fps - - - -CX2341X_ENC_SET_FRAME_SIZE -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 145/0x91 - -Description -^^^^^^^^^^^ - -Select video stream encoding resolution. - -Param[0] -^^^^^^^^ - -Height in lines. Default 480 - -Param[1] -^^^^^^^^ - -Width in pixels. Default 720 - - - -CX2341X_ENC_SET_BIT_RATE -~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 149/0x95 - -Description -^^^^^^^^^^^ - -Assign average video stream bitrate. - -Param[0] -^^^^^^^^ - -0=variable bitrate, 1=constant bitrate - -Param[1] -^^^^^^^^ - -bitrate in bits per second - -Param[2] -^^^^^^^^ - -peak bitrate in bits per second, divided by 400 - -Param[3] -^^^^^^^^ - -Mux bitrate in bits per second, divided by 400. May be 0 (default). - -Param[4] -^^^^^^^^ - -Rate Control VBR Padding - -Param[5] -^^^^^^^^ - -VBV Buffer used by encoder - -.. note:: - - #) Param\[3\] and Param\[4\] seem to be always 0 - #) Param\[5\] doesn't seem to be used. - - - -CX2341X_ENC_SET_GOP_PROPERTIES -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 151/0x97 - -Description -^^^^^^^^^^^ - -Setup the GOP structure - -Param[0] -^^^^^^^^ - -GOP size (maximum is 34) - -Param[1] -^^^^^^^^ - -Number of B frames between the I and P frame, plus 1. -For example: IBBPBBPBBPBB --> GOP size: 12, number of B frames: 2+1 = 3 - -.. note:: - - GOP size must be a multiple of (B-frames + 1). - - - -CX2341X_ENC_SET_ASPECT_RATIO -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 153/0x99 - -Description -^^^^^^^^^^^ - -Sets the encoding aspect ratio. Changes in the aspect ratio take effect -at the start of the next GOP. - -Param[0] -^^^^^^^^ - -- '0000' forbidden -- '0001' 1:1 square -- '0010' 4:3 -- '0011' 16:9 -- '0100' 2.21:1 -- '0101' to '1111' reserved - - - -CX2341X_ENC_SET_DNR_FILTER_MODE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 155/0x9B - -Description -^^^^^^^^^^^ - -Assign Dynamic Noise Reduction operating mode - -Param[0] -^^^^^^^^ - -Bit0: Spatial filter, set=auto, clear=manual -Bit1: Temporal filter, set=auto, clear=manual - -Param[1] -^^^^^^^^ - -Median filter: - -- 0=Disabled -- 1=Horizontal -- 2=Vertical -- 3=Horiz/Vert -- 4=Diagonal - - - -CX2341X_ENC_SET_DNR_FILTER_PROPS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 157/0x9D - -Description -^^^^^^^^^^^ - -These Dynamic Noise Reduction filter values are only meaningful when -the respective filter is set to "manual" (See API 0x9B) - -Param[0] -^^^^^^^^ - -Spatial filter: default 0, range 0:15 - -Param[1] -^^^^^^^^ - -Temporal filter: default 0, range 0:31 - - - -CX2341X_ENC_SET_CORING_LEVELS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 159/0x9F - -Description -^^^^^^^^^^^ - -Assign Dynamic Noise Reduction median filter properties. - -Param[0] -^^^^^^^^ - -Threshold above which the luminance median filter is enabled. -Default: 0, range 0:255 - -Param[1] -^^^^^^^^ - -Threshold below which the luminance median filter is enabled. -Default: 255, range 0:255 - -Param[2] -^^^^^^^^ - -Threshold above which the chrominance median filter is enabled. -Default: 0, range 0:255 - -Param[3] -^^^^^^^^ - -Threshold below which the chrominance median filter is enabled. -Default: 255, range 0:255 - - - -CX2341X_ENC_SET_SPATIAL_FILTER_TYPE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 161/0xA1 - -Description -^^^^^^^^^^^ - -Assign spatial prefilter parameters - -Param[0] -^^^^^^^^ - -Luminance filter - -- 0=Off -- 1=1D Horizontal -- 2=1D Vertical -- 3=2D H/V Separable (default) -- 4=2D Symmetric non-separable - -Param[1] -^^^^^^^^ - -Chrominance filter - -- 0=Off -- 1=1D Horizontal (default) - - - -CX2341X_ENC_SET_VBI_LINE -~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 183/0xB7 - -Description -^^^^^^^^^^^ - -Selects VBI line number. - -Param[0] -^^^^^^^^ - -- Bits 0:4 line number -- Bit 31 0=top_field, 1=bottom_field -- Bits 0:31 all set specifies "all lines" - -Param[1] -^^^^^^^^ - -VBI line information features: 0=disabled, 1=enabled - -Param[2] -^^^^^^^^ - -Slicing: 0=None, 1=Closed Caption -Almost certainly not implemented. Set to 0. - -Param[3] -^^^^^^^^ - -Luminance samples in this line. -Almost certainly not implemented. Set to 0. - -Param[4] -^^^^^^^^ - -Chrominance samples in this line -Almost certainly not implemented. Set to 0. - - - -CX2341X_ENC_SET_STREAM_TYPE -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 185/0xB9 - -Description -^^^^^^^^^^^ - -Assign stream type - -.. note:: - - Transport stream is not working in recent firmwares. - And in older firmwares the timestamps in the TS seem to be - unreliable. - -Param[0] -^^^^^^^^ - -- 0=Program stream -- 1=Transport stream -- 2=MPEG1 stream -- 3=PES A/V stream -- 5=PES Video stream -- 7=PES Audio stream -- 10=DVD stream -- 11=VCD stream -- 12=SVCD stream -- 13=DVD_S1 stream -- 14=DVD_S2 stream - - - -CX2341X_ENC_SET_OUTPUT_PORT -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 187/0xBB - -Description -^^^^^^^^^^^ - -Assign stream output port. Normally 0 when the data is copied through -the PCI bus (DMA), and 1 when the data is streamed to another chip -(pvrusb and cx88-blackbird). - -Param[0] -^^^^^^^^ - -- 0=Memory (default) -- 1=Streaming -- 2=Serial - -Param[1] -^^^^^^^^ - -Unknown, but leaving this to 0 seems to work best. Indications are that -this might have to do with USB support, although passing anything but 0 -only breaks things. - - - -CX2341X_ENC_SET_AUDIO_PROPERTIES -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 189/0xBD - -Description -^^^^^^^^^^^ - -Set audio stream properties, may be called while encoding is in progress. - -.. note:: - - All bitfields are consistent with ISO11172 documentation except - bits 2:3 which ISO docs define as: - - - '11' Layer I - - '10' Layer II - - '01' Layer III - - '00' Undefined - - This discrepancy may indicate a possible error in the documentation. - Testing indicated that only Layer II is actually working, and that - the minimum bitrate should be 192 kbps. - -Param[0] -^^^^^^^^ - -Bitmask: - -.. code-block:: none - - 0:1 '00' 44.1Khz - '01' 48Khz - '10' 32Khz - '11' reserved - - 2:3 '01'=Layer I - '10'=Layer II - - 4:7 Bitrate: - Index | Layer I | Layer II - ------+-------------+------------ - '0000' | free format | free format - '0001' | 32 kbit/s | 32 kbit/s - '0010' | 64 kbit/s | 48 kbit/s - '0011' | 96 kbit/s | 56 kbit/s - '0100' | 128 kbit/s | 64 kbit/s - '0101' | 160 kbit/s | 80 kbit/s - '0110' | 192 kbit/s | 96 kbit/s - '0111' | 224 kbit/s | 112 kbit/s - '1000' | 256 kbit/s | 128 kbit/s - '1001' | 288 kbit/s | 160 kbit/s - '1010' | 320 kbit/s | 192 kbit/s - '1011' | 352 kbit/s | 224 kbit/s - '1100' | 384 kbit/s | 256 kbit/s - '1101' | 416 kbit/s | 320 kbit/s - '1110' | 448 kbit/s | 384 kbit/s - - .. note:: - - For Layer II, not all combinations of total bitrate - and mode are allowed. See ISO11172-3 3-Annex B, - Table 3-B.2 - - 8:9 '00'=Stereo - '01'=JointStereo - '10'=Dual - '11'=Mono - - .. note:: - - The cx23415 cannot decode Joint Stereo properly. - - 10:11 Mode Extension used in joint_stereo mode. - In Layer I and II they indicate which subbands are in - intensity_stereo. All other subbands are coded in stereo. - '00' subbands 4-31 in intensity_stereo, bound==4 - '01' subbands 8-31 in intensity_stereo, bound==8 - '10' subbands 12-31 in intensity_stereo, bound==12 - '11' subbands 16-31 in intensity_stereo, bound==16 - - 12:13 Emphasis: - '00' None - '01' 50/15uS - '10' reserved - '11' CCITT J.17 - - 14 CRC: - '0' off - '1' on - - 15 Copyright: - '0' off - '1' on - - 16 Generation: - '0' copy - '1' original - - - -CX2341X_ENC_HALT_FW -~~~~~~~~~~~~~~~~~~~ - -Enum: 195/0xC3 - -Description -^^^^^^^^^^^ - -The firmware is halted and no further API calls are serviced until the -firmware is uploaded again. - - - -CX2341X_ENC_GET_VERSION -~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 196/0xC4 - -Description -^^^^^^^^^^^ - -Returns the version of the encoder firmware. - -Result[0] -^^^^^^^^^ - -Version bitmask: -- Bits 0:15 build -- Bits 16:23 minor -- Bits 24:31 major - - - -CX2341X_ENC_SET_GOP_CLOSURE -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 197/0xC5 - -Description -^^^^^^^^^^^ - -Assigns the GOP open/close property. - -Param[0] -^^^^^^^^ - -- 0=Open -- 1=Closed - - - -CX2341X_ENC_GET_SEQ_END -~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 198/0xC6 - -Description -^^^^^^^^^^^ - -Obtains the sequence end code of the encoder's buffer. When a capture -is started a number of interrupts are still generated, the last of -which will have Result[0] set to 1 and Result[1] will contain the size -of the buffer. - -Result[0] -^^^^^^^^^ - -State of the transfer (1 if last buffer) - -Result[1] -^^^^^^^^^ - -If Result[0] is 1, this contains the size of the last buffer, undefined -otherwise. - - - -CX2341X_ENC_SET_PGM_INDEX_INFO -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 199/0xC7 - -Description -^^^^^^^^^^^ - -Sets the Program Index Information. -The information is stored as follows: - -.. code-block:: c - - struct info { - u32 length; // Length of this frame - u32 offset_low; // Offset in the file of the - u32 offset_high; // start of this frame - u32 mask1; // Bits 0-2 are the type mask: - // 1=I, 2=P, 4=B - // 0=End of Program Index, other fields - // are invalid. - u32 pts; // The PTS of the frame - u32 mask2; // Bit 0 is bit 32 of the pts. - }; - u32 table_ptr; - struct info index[400]; - -The table_ptr is the encoder memory address in the table were -*new* entries will be written. - -.. note:: This is a ringbuffer, so the table_ptr will wraparound. - -Param[0] -^^^^^^^^ - -Picture Mask: -- 0=No index capture -- 1=I frames -- 3=I,P frames -- 7=I,P,B frames - -(Seems to be ignored, it always indexes I, P and B frames) - -Param[1] -^^^^^^^^ - -Elements requested (up to 400) - -Result[0] -^^^^^^^^^ - -Offset in the encoder memory of the start of the table. - -Result[1] -^^^^^^^^^ - -Number of allocated elements up to a maximum of Param[1] - - - -CX2341X_ENC_SET_VBI_CONFIG -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 200/0xC8 - -Description -^^^^^^^^^^^ - -Configure VBI settings - -Param[0] -^^^^^^^^ - -Bitmap: - -.. code-block:: none - - 0 Mode '0' Sliced, '1' Raw - 1:3 Insertion: - '000' insert in extension & user data - '001' insert in private packets - '010' separate stream and user data - '111' separate stream and private data - 8:15 Stream ID (normally 0xBD) - -Param[1] -^^^^^^^^ - -Frames per interrupt (max 8). Only valid in raw mode. - -Param[2] -^^^^^^^^ - -Total raw VBI frames. Only valid in raw mode. - -Param[3] -^^^^^^^^ - -Start codes - -Param[4] -^^^^^^^^ - -Stop codes - -Param[5] -^^^^^^^^ - -Lines per frame - -Param[6] -^^^^^^^^ - -Byte per line - -Result[0] -^^^^^^^^^ - -Observed frames per interrupt in raw mode only. Rage 1 to Param[1] - -Result[1] -^^^^^^^^^ - -Observed number of frames in raw mode. Range 1 to Param[2] - -Result[2] -^^^^^^^^^ - -Memory offset to start or raw VBI data - - - -CX2341X_ENC_SET_DMA_BLOCK_SIZE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 201/0xC9 - -Description -^^^^^^^^^^^ - -Set DMA transfer block size - -Param[0] -^^^^^^^^ - -DMA transfer block size in bytes or frames. When unit is bytes, -supported block sizes are 2^7, 2^8 and 2^9 bytes. - -Param[1] -^^^^^^^^ - -Unit: 0=bytes, 1=frames - - - -CX2341X_ENC_GET_PREV_DMA_INFO_MB_10 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 202/0xCA - -Description -^^^^^^^^^^^ - -Returns information on the previous DMA transfer in conjunction with -bit 27 of the interrupt mask. Uses mailbox 10. - -Result[0] -^^^^^^^^^ - -Type of stream - -Result[1] -^^^^^^^^^ - -Address Offset - -Result[2] -^^^^^^^^^ - -Maximum size of transfer - - - -CX2341X_ENC_GET_PREV_DMA_INFO_MB_9 -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 203/0xCB - -Description -^^^^^^^^^^^ - -Returns information on the previous DMA transfer in conjunction with -bit 27 or 18 of the interrupt mask. Uses mailbox 9. - -Result[0] -^^^^^^^^^ - -Status bits: -- 0 read completed -- 1 write completed -- 2 DMA read error -- 3 DMA write error -- 4 Scatter-Gather array error - -Result[1] -^^^^^^^^^ - -DMA type - -Result[2] -^^^^^^^^^ - -Presentation Time Stamp bits 0..31 - -Result[3] -^^^^^^^^^ - -Presentation Time Stamp bit 32 - - - -CX2341X_ENC_SCHED_DMA_TO_HOST -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 204/0xCC - -Description -^^^^^^^^^^^ - -Setup DMA to host operation - -Param[0] -^^^^^^^^ - -Memory address of link list - -Param[1] -^^^^^^^^ - -Length of link list (wtf: what units ???) - -Param[2] -^^^^^^^^ - -DMA type (0=MPEG) - - - -CX2341X_ENC_INITIALIZE_INPUT -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 205/0xCD - -Description -^^^^^^^^^^^ - -Initializes the video input - - - -CX2341X_ENC_SET_FRAME_DROP_RATE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 208/0xD0 - -Description -^^^^^^^^^^^ - -For each frame captured, skip specified number of frames. - -Param[0] -^^^^^^^^ - -Number of frames to skip - - - -CX2341X_ENC_PAUSE_ENCODER -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 210/0xD2 - -Description -^^^^^^^^^^^ - -During a pause condition, all frames are dropped instead of being encoded. - -Param[0] -^^^^^^^^ - -- 0=Pause encoding -- 1=Continue encoding - - - -CX2341X_ENC_REFRESH_INPUT -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 211/0xD3 - -Description -^^^^^^^^^^^ - -Refreshes the video input - - - -CX2341X_ENC_SET_COPYRIGHT -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 212/0xD4 - -Description -^^^^^^^^^^^ - -Sets stream copyright property - -Param[0] -^^^^^^^^ - - -- 0=Stream is not copyrighted -- 1=Stream is copyrighted - - - -CX2341X_ENC_SET_EVENT_NOTIFICATION -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 213/0xD5 - -Description -^^^^^^^^^^^ - -Setup firmware to notify the host about a particular event. Host must -unmask the interrupt bit. - -Param[0] -^^^^^^^^ - -Event (0=refresh encoder input) - -Param[1] -^^^^^^^^ - -Notification 0=disabled 1=enabled - -Param[2] -^^^^^^^^ - -Interrupt bit - -Param[3] -^^^^^^^^ - -Mailbox slot, -1 if no mailbox required. - - - -CX2341X_ENC_SET_NUM_VSYNC_LINES -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 214/0xD6 - -Description -^^^^^^^^^^^ - -Depending on the analog video decoder used, this assigns the number -of lines for field 1 and 2. - -Param[0] -^^^^^^^^ - -Field 1 number of lines: -- 0x00EF for SAA7114 -- 0x00F0 for SAA7115 -- 0x0105 for Micronas - -Param[1] -^^^^^^^^ - -Field 2 number of lines: -- 0x00EF for SAA7114 -- 0x00F0 for SAA7115 -- 0x0106 for Micronas - - - -CX2341X_ENC_SET_PLACEHOLDER -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 215/0xD7 - -Description -^^^^^^^^^^^ - -Provides a mechanism of inserting custom user data in the MPEG stream. - -Param[0] -^^^^^^^^ - -- 0=extension & user data -- 1=private packet with stream ID 0xBD - -Param[1] -^^^^^^^^ - -Rate at which to insert data, in units of frames (for private packet) -or GOPs (for ext. & user data) - -Param[2] -^^^^^^^^ - -Number of data DWORDs (below) to insert - -Param[3] -^^^^^^^^ - -Custom data 0 - -Param[4] -^^^^^^^^ - -Custom data 1 - -Param[5] -^^^^^^^^ - -Custom data 2 - -Param[6] -^^^^^^^^ - -Custom data 3 - -Param[7] -^^^^^^^^ - -Custom data 4 - -Param[8] -^^^^^^^^ - -Custom data 5 - -Param[9] -^^^^^^^^ - -Custom data 6 - -Param[10] -^^^^^^^^^ - -Custom data 7 - -Param[11] -^^^^^^^^^ - -Custom data 8 - - - -CX2341X_ENC_MUTE_VIDEO -~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 217/0xD9 - -Description -^^^^^^^^^^^ - -Video muting - -Param[0] -^^^^^^^^ - -Bit usage: - -.. code-block:: none - - 0 '0'=video not muted - '1'=video muted, creates frames with the YUV color defined below - 1:7 Unused - 8:15 V chrominance information - 16:23 U chrominance information - 24:31 Y luminance information - - - -CX2341X_ENC_MUTE_AUDIO -~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 218/0xDA - -Description -^^^^^^^^^^^ - -Audio muting - -Param[0] -^^^^^^^^ - -- 0=audio not muted -- 1=audio muted (produces silent mpeg audio stream) - - - -CX2341X_ENC_SET_VERT_CROP_LINE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 219/0xDB - -Description -^^^^^^^^^^^ - -Something to do with 'Vertical Crop Line' - -Param[0] -^^^^^^^^ - -If saa7114 and raw VBI capture and 60 Hz, then set to 10001. -Else 0. - - - -CX2341X_ENC_MISC -~~~~~~~~~~~~~~~~ - -Enum: 220/0xDC - -Description -^^^^^^^^^^^ - -Miscellaneous actions. Not known for 100% what it does. It's really a -sort of ioctl call. The first parameter is a command number, the second -the value. - -Param[0] -^^^^^^^^ - -Command number: - -.. code-block:: none - - 1=set initial SCR value when starting encoding (works). - 2=set quality mode (apparently some test setting). - 3=setup advanced VIM protection handling. - Always 1 for the cx23416 and 0 for cx23415. - 4=generate DVD compatible PTS timestamps - 5=USB flush mode - 6=something to do with the quantization matrix - 7=set navigation pack insertion for DVD: adds 0xbf (private stream 2) - packets to the MPEG. The size of these packets is 2048 bytes (including - the header of 6 bytes: 0x000001bf + length). The payload is zeroed and - it is up to the application to fill them in. These packets are apparently - inserted every four frames. - 8=enable scene change detection (seems to be a failure) - 9=set history parameters of the video input module - 10=set input field order of VIM - 11=set quantization matrix - 12=reset audio interface after channel change or input switch (has no argument). - Needed for the cx2584x, not needed for the mspx4xx, but it doesn't seem to - do any harm calling it regardless. - 13=set audio volume delay - 14=set audio delay - - -Param[1] -^^^^^^^^ - -Command value. - -Decoder firmware API description --------------------------------- - -.. note:: this API is part of the decoder firmware, so it's cx23415 only. - - - -CX2341X_DEC_PING_FW -~~~~~~~~~~~~~~~~~~~ - -Enum: 0/0x00 - -Description -^^^^^^^^^^^ - -This API call does nothing. It may be used to check if the firmware -is responding. - - - -CX2341X_DEC_START_PLAYBACK -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 1/0x01 - -Description -^^^^^^^^^^^ - -Begin or resume playback. - -Param[0] -^^^^^^^^ - -0 based frame number in GOP to begin playback from. - -Param[1] -^^^^^^^^ - -Specifies the number of muted audio frames to play before normal -audio resumes. (This is not implemented in the firmware, leave at 0) - - - -CX2341X_DEC_STOP_PLAYBACK -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 2/0x02 - -Description -^^^^^^^^^^^ - -Ends playback and clears all decoder buffers. If PTS is not zero, -playback stops at specified PTS. - -Param[0] -^^^^^^^^ - -Display 0=last frame, 1=black - -.. note:: - - this takes effect immediately, so if you want to wait for a PTS, - then use '0', otherwise the screen goes to black at once. - You can call this later (even if there is no playback) with a 1 value - to set the screen to black. - -Param[1] -^^^^^^^^ - -PTS low - -Param[2] -^^^^^^^^ - -PTS high - - - -CX2341X_DEC_SET_PLAYBACK_SPEED -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 3/0x03 - -Description -^^^^^^^^^^^ - -Playback stream at speed other than normal. There are two modes of -operation: - - - Smooth: host transfers entire stream and firmware drops unused - frames. - - Coarse: host drops frames based on indexing as required to achieve - desired speed. - -Param[0] -^^^^^^^^ - -.. code-block:: none - - Bitmap: - 0:7 0 normal - 1 fast only "1.5 times" - n nX fast, 1/nX slow - 30 Framedrop: - '0' during 1.5 times play, every other B frame is dropped - '1' during 1.5 times play, stream is unchanged (bitrate - must not exceed 8mbps) - 31 Speed: - '0' slow - '1' fast - -.. note:: - - n is limited to 2. Anything higher does not result in - faster playback. Instead the host should start dropping frames. - -Param[1] -^^^^^^^^ - -Direction: 0=forward, 1=reverse - -.. note:: - - to make reverse playback work you have to write full GOPs in - reverse order. - -Param[2] -^^^^^^^^ - -.. code-block:: none - - Picture mask: - 1=I frames - 3=I, P frames - 7=I, P, B frames - -Param[3] -^^^^^^^^ - -B frames per GOP (for reverse play only) - -.. note:: - - for reverse playback the Picture Mask should be set to I or I, P. - Adding B frames to the mask will result in corrupt video. This field - has to be set to the correct value in order to keep the timing correct. - -Param[4] -^^^^^^^^ - -Mute audio: 0=disable, 1=enable - -Param[5] -^^^^^^^^ - -Display 0=frame, 1=field - -Param[6] -^^^^^^^^ - -Specifies the number of muted audio frames to play before normal audio -resumes. (Not implemented in the firmware, leave at 0) - - - -CX2341X_DEC_STEP_VIDEO -~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 5/0x05 - -Description -^^^^^^^^^^^ - -Each call to this API steps the playback to the next unit defined below -in the current playback direction. - -Param[0] -^^^^^^^^ - -0=frame, 1=top field, 2=bottom field - - - -CX2341X_DEC_SET_DMA_BLOCK_SIZE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 8/0x08 - -Description -^^^^^^^^^^^ - -Set DMA transfer block size. Counterpart to API 0xC9 - -Param[0] -^^^^^^^^ - -DMA transfer block size in bytes. A different size may be specified -when issuing the DMA transfer command. - - - -CX2341X_DEC_GET_XFER_INFO -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 9/0x09 - -Description -^^^^^^^^^^^ - -This API call may be used to detect an end of stream condition. - -Result[0] -^^^^^^^^^ - -Stream type - -Result[1] -^^^^^^^^^ - -Address offset - -Result[2] -^^^^^^^^^ - -Maximum bytes to transfer - -Result[3] -^^^^^^^^^ - -Buffer fullness - - - -CX2341X_DEC_GET_DMA_STATUS -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 10/0x0A - -Description -^^^^^^^^^^^ - -Status of the last DMA transfer - -Result[0] -^^^^^^^^^ - -Bit 1 set means transfer complete -Bit 2 set means DMA error -Bit 3 set means linked list error - -Result[1] -^^^^^^^^^ - -DMA type: 0=MPEG, 1=OSD, 2=YUV - - - -CX2341X_DEC_SCHED_DMA_FROM_HOST -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 11/0x0B - -Description -^^^^^^^^^^^ - -Setup DMA from host operation. Counterpart to API 0xCC - -Param[0] -^^^^^^^^ - -Memory address of link list - -Param[1] -^^^^^^^^ - -Total # of bytes to transfer - -Param[2] -^^^^^^^^ - -DMA type (0=MPEG, 1=OSD, 2=YUV) - - - -CX2341X_DEC_PAUSE_PLAYBACK -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 13/0x0D - -Description -^^^^^^^^^^^ - -Freeze playback immediately. In this mode, when internal buffers are -full, no more data will be accepted and data request IRQs will be -masked. - -Param[0] -^^^^^^^^ - -Display: 0=last frame, 1=black - - - -CX2341X_DEC_HALT_FW -~~~~~~~~~~~~~~~~~~~ - -Enum: 14/0x0E - -Description -^^^^^^^^^^^ - -The firmware is halted and no further API calls are serviced until -the firmware is uploaded again. - - - -CX2341X_DEC_SET_STANDARD -~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 16/0x10 - -Description -^^^^^^^^^^^ - -Selects display standard - -Param[0] -^^^^^^^^ - -0=NTSC, 1=PAL - - - -CX2341X_DEC_GET_VERSION -~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 17/0x11 - -Description -^^^^^^^^^^^ - -Returns decoder firmware version information - -Result[0] -^^^^^^^^^ - -Version bitmask: - - Bits 0:15 build - - Bits 16:23 minor - - Bits 24:31 major - - - -CX2341X_DEC_SET_STREAM_INPUT -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 20/0x14 - -Description -^^^^^^^^^^^ - -Select decoder stream input port - -Param[0] -^^^^^^^^ - -0=memory (default), 1=streaming - - - -CX2341X_DEC_GET_TIMING_INFO -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 21/0x15 - -Description -^^^^^^^^^^^ - -Returns timing information from start of playback - -Result[0] -^^^^^^^^^ - -Frame count by decode order - -Result[1] -^^^^^^^^^ - -Video PTS bits 0:31 by display order - -Result[2] -^^^^^^^^^ - -Video PTS bit 32 by display order - -Result[3] -^^^^^^^^^ - -SCR bits 0:31 by display order - -Result[4] -^^^^^^^^^ - -SCR bit 32 by display order - - - -CX2341X_DEC_SET_AUDIO_MODE -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 22/0x16 - -Description -^^^^^^^^^^^ - -Select audio mode - -Param[0] -^^^^^^^^ - -Dual mono mode action - 0=Stereo, 1=Left, 2=Right, 3=Mono, 4=Swap, -1=Unchanged - -Param[1] -^^^^^^^^ - -Stereo mode action: - 0=Stereo, 1=Left, 2=Right, 3=Mono, 4=Swap, -1=Unchanged - - - -CX2341X_DEC_SET_EVENT_NOTIFICATION -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 23/0x17 - -Description -^^^^^^^^^^^ - -Setup firmware to notify the host about a particular event. -Counterpart to API 0xD5 - -Param[0] -^^^^^^^^ - -Event: - - 0=Audio mode change between mono, (joint) stereo and dual channel. - - 3=Decoder started - - 4=Unknown: goes off 10-15 times per second while decoding. - - 5=Some sync event: goes off once per frame. - -Param[1] -^^^^^^^^ - -Notification 0=disabled, 1=enabled - -Param[2] -^^^^^^^^ - -Interrupt bit - -Param[3] -^^^^^^^^ - -Mailbox slot, -1 if no mailbox required. - - - -CX2341X_DEC_SET_DISPLAY_BUFFERS -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 24/0x18 - -Description -^^^^^^^^^^^ - -Number of display buffers. To decode all frames in reverse playback you -must use nine buffers. - -Param[0] -^^^^^^^^ - -0=six buffers, 1=nine buffers - - - -CX2341X_DEC_EXTRACT_VBI -~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 25/0x19 - -Description -^^^^^^^^^^^ - -Extracts VBI data - -Param[0] -^^^^^^^^ - -0=extract from extension & user data, 1=extract from private packets - -Result[0] -^^^^^^^^^ - -VBI table location - -Result[1] -^^^^^^^^^ - -VBI table size - - - -CX2341X_DEC_SET_DECODER_SOURCE -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 26/0x1A - -Description -^^^^^^^^^^^ - -Selects decoder source. Ensure that the parameters passed to this -API match the encoder settings. - -Param[0] -^^^^^^^^ - -Mode: 0=MPEG from host, 1=YUV from encoder, 2=YUV from host - -Param[1] -^^^^^^^^ - -YUV picture width - -Param[2] -^^^^^^^^ - -YUV picture height - -Param[3] -^^^^^^^^ - -Bitmap: see Param[0] of API 0xBD - - - -CX2341X_DEC_SET_PREBUFFERING -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Enum: 30/0x1E - -Description -^^^^^^^^^^^ - -Decoder prebuffering, when enabled up to 128KB are buffered for -streams <8mpbs or 640KB for streams >8mbps - -Param[0] -^^^^^^^^ - -0=off, 1=on - -PVR350 Video decoder registers 0x02002800 -> 0x02002B00 -------------------------------------------------------- - -Author: Ian Armstrong - -Version: v0.4 - -Date: 12 March 2007 - - -This list has been worked out through trial and error. There will be mistakes -and omissions. Some registers have no obvious effect so it's hard to say what -they do, while others interact with each other, or require a certain load -sequence. Horizontal filter setup is one example, with six registers working -in unison and requiring a certain load sequence to correctly configure. The -indexed colour palette is much easier to set at just two registers, but again -it requires a certain load sequence. - -Some registers are fussy about what they are set to. Load in a bad value & the -decoder will fail. A firmware reload will often recover, but sometimes a reset -is required. For registers containing size information, setting them to 0 is -generally a bad idea. For other control registers i.e. 2878, you'll only find -out what values are bad when it hangs. - -.. code-block:: none - - -------------------------------------------------------------------------------- - 2800 - bit 0 - Decoder enable - 0 = disable - 1 = enable - -------------------------------------------------------------------------------- - 2804 - bits 0:31 - Decoder horizontal Y alias register 1 - --------------- - 2808 - bits 0:31 - Decoder horizontal Y alias register 2 - --------------- - 280C - bits 0:31 - Decoder horizontal Y alias register 3 - --------------- - 2810 - bits 0:31 - Decoder horizontal Y alias register 4 - --------------- - 2814 - bits 0:31 - Decoder horizontal Y alias register 5 - --------------- - 2818 - bits 0:31 - Decoder horizontal Y alias trigger - - These six registers control the horizontal aliasing filter for the Y plane. - The first five registers must all be loaded before accessing the trigger - (2818), as this register actually clocks the data through for the first - five. - - To correctly program set the filter, this whole procedure must be done 16 - times. The actual register contents are copied from a lookup-table in the - firmware which contains 4 different filter settings. - - -------------------------------------------------------------------------------- - 281C - bits 0:31 - Decoder horizontal UV alias register 1 - --------------- - 2820 - bits 0:31 - Decoder horizontal UV alias register 2 - --------------- - 2824 - bits 0:31 - Decoder horizontal UV alias register 3 - --------------- - 2828 - bits 0:31 - Decoder horizontal UV alias register 4 - --------------- - 282C - bits 0:31 - Decoder horizontal UV alias register 5 - --------------- - 2830 - bits 0:31 - Decoder horizontal UV alias trigger - - These six registers control the horizontal aliasing for the UV plane. - Operation is the same as the Y filter, with 2830 being the trigger - register. - - -------------------------------------------------------------------------------- - 2834 - bits 0:15 - Decoder Y source width in pixels - - bits 16:31 - Decoder Y destination width in pixels - --------------- - 2838 - bits 0:15 - Decoder UV source width in pixels - - bits 16:31 - Decoder UV destination width in pixels - - NOTE: For both registers, the resulting image must be fully visible on - screen. If the image exceeds the right edge both the source and destination - size must be adjusted to reflect the visible portion. For the source width, - you must take into account the scaling when calculating the new value. - -------------------------------------------------------------------------------- - - 283C - bits 0:31 - Decoder Y horizontal scaling - Normally = Reg 2854 >> 2 - --------------- - 2840 - bits 0:31 - Decoder ?? unknown - horizontal scaling - Usually 0x00080514 - --------------- - 2844 - bits 0:31 - Decoder UV horizontal scaling - Normally = Reg 2854 >> 2 - --------------- - 2848 - bits 0:31 - Decoder ?? unknown - horizontal scaling - Usually 0x00100514 - --------------- - 284C - bits 0:31 - Decoder ?? unknown - Y plane - Usually 0x00200020 - --------------- - 2850 - bits 0:31 - Decoder ?? unknown - UV plane - Usually 0x00200020 - --------------- - 2854 - bits 0:31 - Decoder 'master' value for horizontal scaling - --------------- - 2858 - bits 0:31 - Decoder ?? unknown - Usually 0 - --------------- - 285C - bits 0:31 - Decoder ?? unknown - Normally = Reg 2854 >> 1 - --------------- - 2860 - bits 0:31 - Decoder ?? unknown - Usually 0 - --------------- - 2864 - bits 0:31 - Decoder ?? unknown - Normally = Reg 2854 >> 1 - --------------- - 2868 - bits 0:31 - Decoder ?? unknown - Usually 0 - - Most of these registers either control horizontal scaling, or appear linked - to it in some way. Register 2854 contains the 'master' value & the other - registers can be calculated from that one. You must also remember to - correctly set the divider in Reg 2874. - - To enlarge: - Reg 2854 = (source_width * 0x00200000) / destination_width - Reg 2874 = No divide - - To reduce from full size down to half size: - Reg 2854 = (source_width/2 * 0x00200000) / destination width - Reg 2874 = Divide by 2 - - To reduce from half size down to quarter size: - Reg 2854 = (source_width/4 * 0x00200000) / destination width - Reg 2874 = Divide by 4 - - The result is always rounded up. - - -------------------------------------------------------------------------------- - 286C - bits 0:15 - Decoder horizontal Y buffer offset - - bits 15:31 - Decoder horizontal UV buffer offset - - Offset into the video image buffer. If the offset is gradually incremented, - the on screen image will move left & wrap around higher up on the right. - - -------------------------------------------------------------------------------- - 2870 - bits 0:15 - Decoder horizontal Y output offset - - bits 16:31 - Decoder horizontal UV output offset - - Offsets the actual video output. Controls output alignment of the Y & UV - planes. The higher the value, the greater the shift to the left. Use - reg 2890 to move the image right. - - -------------------------------------------------------------------------------- - 2874 - bits 0:1 - Decoder horizontal Y output size divider - 00 = No divide - 01 = Divide by 2 - 10 = Divide by 3 - - bits 4:5 - Decoder horizontal UV output size divider - 00 = No divide - 01 = Divide by 2 - 10 = Divide by 3 - - bit 8 - Decoder ?? unknown - 0 = Normal - 1 = Affects video output levels - - bit 16 - Decoder ?? unknown - 0 = Normal - 1 = Disable horizontal filter - - -------------------------------------------------------------------------------- - 2878 - bit 0 - ?? unknown - - bit 1 - osd on/off - 0 = osd off - 1 = osd on - - bit 2 - Decoder + osd video timing - 0 = NTSC - 1 = PAL - - bits 3:4 - ?? unknown - - bit 5 - Decoder + osd - Swaps upper & lower fields - - -------------------------------------------------------------------------------- - 287C - bits 0:10 - Decoder & osd ?? unknown - Moves entire screen horizontally. Starts at 0x005 with the screen - shifted heavily to the right. Incrementing in steps of 0x004 will - gradually shift the screen to the left. - - bits 11:31 - ?? unknown - - Normally contents are 0x00101111 (NTSC) or 0x1010111d (PAL) - - -------------------------------------------------------------------------------- - 2880 -------- ?? unknown - 2884 -------- ?? unknown - -------------------------------------------------------------------------------- - 2888 - bit 0 - Decoder + osd ?? unknown - 0 = Normal - 1 = Misaligned fields (Correctable through 289C & 28A4) - - bit 4 - ?? unknown - - bit 8 - ?? unknown - - Warning: Bad values will require a firmware reload to recover. - Known to be bad are 0x000,0x011,0x100,0x111 - -------------------------------------------------------------------------------- - 288C - bits 0:15 - osd ?? unknown - Appears to affect the osd position stability. The higher the value the - more unstable it becomes. Decoder output remains stable. - - bits 16:31 - osd ?? unknown - Same as bits 0:15 - - -------------------------------------------------------------------------------- - 2890 - bits 0:11 - Decoder output horizontal offset. - - Horizontal offset moves the video image right. A small left shift is - possible, but it's better to use reg 2870 for that due to its greater - range. - - NOTE: Video corruption will occur if video window is shifted off the right - edge. To avoid this read the notes for 2834 & 2838. - -------------------------------------------------------------------------------- - 2894 - bits 0:23 - Decoder output video surround colour. - - Contains the colour (in yuv) used to fill the screen when the video is - running in a window. - -------------------------------------------------------------------------------- - 2898 - bits 0:23 - Decoder video window colour - Contains the colour (in yuv) used to fill the video window when the - video is turned off. - - bit 24 - Decoder video output - 0 = Video on - 1 = Video off - - bit 28 - Decoder plane order - 0 = Y,UV - 1 = UV,Y - - bit 29 - Decoder second plane byte order - 0 = Normal (UV) - 1 = Swapped (VU) - - In normal usage, the first plane is Y & the second plane is UV. Though the - order of the planes can be swapped, only the byte order of the second plane - can be swapped. This isn't much use for the Y plane, but can be useful for - the UV plane. - - -------------------------------------------------------------------------------- - 289C - bits 0:15 - Decoder vertical field offset 1 - - bits 16:31 - Decoder vertical field offset 2 - - Controls field output vertical alignment. The higher the number, the lower - the image on screen. Known starting values are 0x011E0017 (NTSC) & - 0x01500017 (PAL) - -------------------------------------------------------------------------------- - 28A0 - bits 0:15 - Decoder & osd width in pixels - - bits 16:31 - Decoder & osd height in pixels - - All output from the decoder & osd are disabled beyond this area. Decoder - output will simply go black outside of this region. If the osd tries to - exceed this area it will become corrupt. - -------------------------------------------------------------------------------- - 28A4 - bits 0:11 - osd left shift. - - Has a range of 0x770->0x7FF. With the exception of 0, any value outside of - this range corrupts the osd. - -------------------------------------------------------------------------------- - 28A8 - bits 0:15 - osd vertical field offset 1 - - bits 16:31 - osd vertical field offset 2 - - Controls field output vertical alignment. The higher the number, the lower - the image on screen. Known starting values are 0x011E0017 (NTSC) & - 0x01500017 (PAL) - -------------------------------------------------------------------------------- - 28AC -------- ?? unknown - | - V - 28BC -------- ?? unknown - -------------------------------------------------------------------------------- - 28C0 - bit 0 - Current output field - 0 = first field - 1 = second field - - bits 16:31 - Current scanline - The scanline counts from the top line of the first field - through to the last line of the second field. - -------------------------------------------------------------------------------- - 28C4 -------- ?? unknown - | - V - 28F8 -------- ?? unknown - -------------------------------------------------------------------------------- - 28FC - bit 0 - ?? unknown - 0 = Normal - 1 = Breaks decoder & osd output - -------------------------------------------------------------------------------- - 2900 - bits 0:31 - Decoder vertical Y alias register 1 - --------------- - 2904 - bits 0:31 - Decoder vertical Y alias register 2 - --------------- - 2908 - bits 0:31 - Decoder vertical Y alias trigger - - These three registers control the vertical aliasing filter for the Y plane. - Operation is similar to the horizontal Y filter (2804). The only real - difference is that there are only two registers to set before accessing - the trigger register (2908). As for the horizontal filter, the values are - taken from a lookup table in the firmware, and the procedure must be - repeated 16 times to fully program the filter. - -------------------------------------------------------------------------------- - 290C - bits 0:31 - Decoder vertical UV alias register 1 - --------------- - 2910 - bits 0:31 - Decoder vertical UV alias register 2 - --------------- - 2914 - bits 0:31 - Decoder vertical UV alias trigger - - These three registers control the vertical aliasing filter for the UV - plane. Operation is the same as the Y filter, with 2914 being the trigger. - -------------------------------------------------------------------------------- - 2918 - bits 0:15 - Decoder Y source height in pixels - - bits 16:31 - Decoder Y destination height in pixels - --------------- - 291C - bits 0:15 - Decoder UV source height in pixels divided by 2 - - bits 16:31 - Decoder UV destination height in pixels - - NOTE: For both registers, the resulting image must be fully visible on - screen. If the image exceeds the bottom edge both the source and - destination size must be adjusted to reflect the visible portion. For the - source height, you must take into account the scaling when calculating the - new value. - -------------------------------------------------------------------------------- - 2920 - bits 0:31 - Decoder Y vertical scaling - Normally = Reg 2930 >> 2 - --------------- - 2924 - bits 0:31 - Decoder Y vertical scaling - Normally = Reg 2920 + 0x514 - --------------- - 2928 - bits 0:31 - Decoder UV vertical scaling - When enlarging = Reg 2930 >> 2 - When reducing = Reg 2930 >> 3 - --------------- - 292C - bits 0:31 - Decoder UV vertical scaling - Normally = Reg 2928 + 0x514 - --------------- - 2930 - bits 0:31 - Decoder 'master' value for vertical scaling - --------------- - 2934 - bits 0:31 - Decoder ?? unknown - Y vertical scaling - --------------- - 2938 - bits 0:31 - Decoder Y vertical scaling - Normally = Reg 2930 - --------------- - 293C - bits 0:31 - Decoder ?? unknown - Y vertical scaling - --------------- - 2940 - bits 0:31 - Decoder UV vertical scaling - When enlarging = Reg 2930 >> 1 - When reducing = Reg 2930 - --------------- - 2944 - bits 0:31 - Decoder ?? unknown - UV vertical scaling - --------------- - 2948 - bits 0:31 - Decoder UV vertical scaling - Normally = Reg 2940 - --------------- - 294C - bits 0:31 - Decoder ?? unknown - UV vertical scaling - - Most of these registers either control vertical scaling, or appear linked - to it in some way. Register 2930 contains the 'master' value & all other - registers can be calculated from that one. You must also remember to - correctly set the divider in Reg 296C - - To enlarge: - Reg 2930 = (source_height * 0x00200000) / destination_height - Reg 296C = No divide - - To reduce from full size down to half size: - Reg 2930 = (source_height/2 * 0x00200000) / destination height - Reg 296C = Divide by 2 - - To reduce from half down to quarter. - Reg 2930 = (source_height/4 * 0x00200000) / destination height - Reg 296C = Divide by 4 - - -------------------------------------------------------------------------------- - 2950 - bits 0:15 - Decoder Y line index into display buffer, first field - - bits 16:31 - Decoder Y vertical line skip, first field - -------------------------------------------------------------------------------- - 2954 - bits 0:15 - Decoder Y line index into display buffer, second field - - bits 16:31 - Decoder Y vertical line skip, second field - -------------------------------------------------------------------------------- - 2958 - bits 0:15 - Decoder UV line index into display buffer, first field - - bits 16:31 - Decoder UV vertical line skip, first field - -------------------------------------------------------------------------------- - 295C - bits 0:15 - Decoder UV line index into display buffer, second field - - bits 16:31 - Decoder UV vertical line skip, second field - -------------------------------------------------------------------------------- - 2960 - bits 0:15 - Decoder destination height minus 1 - - bits 16:31 - Decoder destination height divided by 2 - -------------------------------------------------------------------------------- - 2964 - bits 0:15 - Decoder Y vertical offset, second field - - bits 16:31 - Decoder Y vertical offset, first field - - These two registers shift the Y plane up. The higher the number, the - greater the shift. - -------------------------------------------------------------------------------- - 2968 - bits 0:15 - Decoder UV vertical offset, second field - - bits 16:31 - Decoder UV vertical offset, first field - - These two registers shift the UV plane up. The higher the number, the - greater the shift. - -------------------------------------------------------------------------------- - 296C - bits 0:1 - Decoder vertical Y output size divider - 00 = No divide - 01 = Divide by 2 - 10 = Divide by 4 - - bits 8:9 - Decoder vertical UV output size divider - 00 = No divide - 01 = Divide by 2 - 10 = Divide by 4 - -------------------------------------------------------------------------------- - 2970 - bit 0 - Decoder ?? unknown - 0 = Normal - 1 = Affect video output levels - - bit 16 - Decoder ?? unknown - 0 = Normal - 1 = Disable vertical filter - - -------------------------------------------------------------------------------- - 2974 -------- ?? unknown - | - V - 29EF -------- ?? unknown - -------------------------------------------------------------------------------- - 2A00 - bits 0:2 - osd colour mode - 000 = 8 bit indexed - 001 = 16 bit (565) - 010 = 15 bit (555) - 011 = 12 bit (444) - 100 = 32 bit (8888) - - bits 4:5 - osd display bpp - 01 = 8 bit - 10 = 16 bit - 11 = 32 bit - - bit 8 - osd global alpha - 0 = Off - 1 = On - - bit 9 - osd local alpha - 0 = Off - 1 = On - - bit 10 - osd colour key - 0 = Off - 1 = On - - bit 11 - osd ?? unknown - Must be 1 - - bit 13 - osd colour space - 0 = ARGB - 1 = AYVU - - bits 16:31 - osd ?? unknown - Must be 0x001B (some kind of buffer pointer ?) - - When the bits-per-pixel is set to 8, the colour mode is ignored and - assumed to be 8 bit indexed. For 16 & 32 bits-per-pixel the colour depth - is honoured, and when using a colour depth that requires fewer bytes than - allocated the extra bytes are used as padding. So for a 32 bpp with 8 bit - index colour, there are 3 padding bytes per pixel. It's also possible to - select 16bpp with a 32 bit colour mode. This results in the pixel width - being doubled, but the color key will not work as expected in this mode. - - Colour key is as it suggests. You designate a colour which will become - completely transparent. When using 565, 555 or 444 colour modes, the - colour key is always 16 bits wide. The colour to key on is set in Reg 2A18. - - Local alpha works differently depending on the colour mode. For 32bpp & 8 - bit indexed, local alpha is a per-pixel 256 step transparency, with 0 being - transparent and 255 being solid. For the 16bpp modes 555 & 444, the unused - bit(s) act as a simple transparency switch, with 0 being solid & 1 being - fully transparent. There is no local alpha support for 16bit 565. - - Global alpha is a 256 step transparency that applies to the entire osd, - with 0 being transparent & 255 being solid. - - It's possible to combine colour key, local alpha & global alpha. - -------------------------------------------------------------------------------- - 2A04 - bits 0:15 - osd x coord for left edge - - bits 16:31 - osd y coord for top edge - --------------- - 2A08 - bits 0:15 - osd x coord for right edge - - bits 16:31 - osd y coord for bottom edge - - For both registers, (0,0) = top left corner of the display area. These - registers do not control the osd size, only where it's positioned & how - much is visible. The visible osd area cannot exceed the right edge of the - display, otherwise the osd will become corrupt. See reg 2A10 for - setting osd width. - -------------------------------------------------------------------------------- - 2A0C - bits 0:31 - osd buffer index - - An index into the osd buffer. Slowly incrementing this moves the osd left, - wrapping around onto the right edge - -------------------------------------------------------------------------------- - 2A10 - bits 0:11 - osd buffer 32 bit word width - - Contains the width of the osd measured in 32 bit words. This means that all - colour modes are restricted to a byte width which is divisible by 4. - -------------------------------------------------------------------------------- - 2A14 - bits 0:15 - osd height in pixels - - bits 16:32 - osd line index into buffer - osd will start displaying from this line. - -------------------------------------------------------------------------------- - 2A18 - bits 0:31 - osd colour key - - Contains the colour value which will be transparent. - -------------------------------------------------------------------------------- - 2A1C - bits 0:7 - osd global alpha - - Contains the global alpha value (equiv ivtvfbctl --alpha XX) - -------------------------------------------------------------------------------- - 2A20 -------- ?? unknown - | - V - 2A2C -------- ?? unknown - -------------------------------------------------------------------------------- - 2A30 - bits 0:7 - osd colour to change in indexed palette - --------------- - 2A34 - bits 0:31 - osd colour for indexed palette - - To set the new palette, first load the index of the colour to change into - 2A30, then load the new colour into 2A34. The full palette is 256 colours, - so the index range is 0x00-0xFF - -------------------------------------------------------------------------------- - 2A38 -------- ?? unknown - 2A3C -------- ?? unknown - -------------------------------------------------------------------------------- - 2A40 - bits 0:31 - osd ?? unknown - - Affects overall brightness, wrapping around to black - -------------------------------------------------------------------------------- - 2A44 - bits 0:31 - osd ?? unknown - - Green tint - -------------------------------------------------------------------------------- - 2A48 - bits 0:31 - osd ?? unknown - - Red tint - -------------------------------------------------------------------------------- - 2A4C - bits 0:31 - osd ?? unknown - - Affects overall brightness, wrapping around to black - -------------------------------------------------------------------------------- - 2A50 - bits 0:31 - osd ?? unknown - - Colour shift - -------------------------------------------------------------------------------- - 2A54 - bits 0:31 - osd ?? unknown - - Colour shift - -------------------------------------------------------------------------------- - 2A58 -------- ?? unknown - | - V - 2AFC -------- ?? unknown - -------------------------------------------------------------------------------- - 2B00 - bit 0 - osd filter control - 0 = filter off - 1 = filter on - - bits 1:4 - osd ?? unknown - - -------------------------------------------------------------------------------- - -The cx231xx DMA engine ----------------------- - - -This page describes the structures and procedures used by the cx2341x DMA -engine. - -Introduction -~~~~~~~~~~~~ - -The cx2341x PCI interface is busmaster capable. This means it has a DMA -engine to efficiently transfer large volumes of data between the card and main -memory without requiring help from a CPU. Like most hardware, it must operate -on contiguous physical memory. This is difficult to come by in large quantities -on virtual memory machines. - -Therefore, it also supports a technique called "scatter-gather". The card can -transfer multiple buffers in one operation. Instead of allocating one large -contiguous buffer, the driver can allocate several smaller buffers. - -In practice, I've seen the average transfer to be roughly 80K, but transfers -above 128K were not uncommon, particularly at startup. The 128K figure is -important, because that is the largest block that the kernel can normally -allocate. Even still, 128K blocks are hard to come by, so the driver writer is -urged to choose a smaller block size and learn the scatter-gather technique. - -Mailbox #10 is reserved for DMA transfer information. - -Note: the hardware expects little-endian data ('intel format'). - -Flow -~~~~ - -This section describes, in general, the order of events when handling DMA -transfers. Detailed information follows this section. - -- The card raises the Encoder interrupt. -- The driver reads the transfer type, offset and size from Mailbox #10. -- The driver constructs the scatter-gather array from enough free dma buffers - to cover the size. -- The driver schedules the DMA transfer via the ScheduleDMAtoHost API call. -- The card raises the DMA Complete interrupt. -- The driver checks the DMA status register for any errors. -- The driver post-processes the newly transferred buffers. - -NOTE! It is possible that the Encoder and DMA Complete interrupts get raised -simultaneously. (End of the last, start of the next, etc.) - -Mailbox #10 -~~~~~~~~~~~ - -The Flags, Command, Return Value and Timeout fields are ignored. - -- Name: Mailbox #10 -- Results[0]: Type: 0: MPEG. -- Results[1]: Offset: The position relative to the card's memory space. -- Results[2]: Size: The exact number of bytes to transfer. - -My speculation is that since the StartCapture API has a capture type of "RAW" -available, that the type field will have other values that correspond to YUV -and PCM data. - -Scatter-Gather Array -~~~~~~~~~~~~~~~~~~~~ - -The scatter-gather array is a contiguously allocated block of memory that -tells the card the source and destination of each data-block to transfer. -Card "addresses" are derived from the offset supplied by Mailbox #10. Host -addresses are the physical memory location of the target DMA buffer. - -Each S-G array element is a struct of three 32-bit words. The first word is -the source address, the second is the destination address. Both take up the -entire 32 bits. The lowest 18 bits of the third word is the transfer byte -count. The high-bit of the third word is the "last" flag. The last-flag tells -the card to raise the DMA_DONE interrupt. From hard personal experience, if -you forget to set this bit, the card will still "work" but the stream will -most likely get corrupted. - -The transfer count must be a multiple of 256. Therefore, the driver will need -to track how much data in the target buffer is valid and deal with it -accordingly. - -Array Element: - -- 32-bit Source Address -- 32-bit Destination Address -- 14-bit reserved (high bit is the last flag) -- 18-bit byte count - -DMA Transfer Status -~~~~~~~~~~~~~~~~~~~ - -Register 0x0004 holds the DMA Transfer Status: - -- bit 0: read completed -- bit 1: write completed -- bit 2: DMA read error -- bit 3: DMA write error -- bit 4: Scatter-Gather array error diff --git a/Documentation/media/v4l-drivers/cx88-devel.rst b/Documentation/media/v4l-drivers/cx88-devel.rst deleted file mode 100644 index cfe7c03f4930..000000000000 --- a/Documentation/media/v4l-drivers/cx88-devel.rst +++ /dev/null @@ -1,113 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The cx88 driver -=============== - -Author: Gerd Hoffmann - -Documentation missing at the cx88 datasheet -------------------------------------------- - -MO_OUTPUT_FORMAT (0x310164) - -.. code-block:: none - - Previous default from DScaler: 0x1c1f0008 - Digit 8: 31-28 - 28: PREVREMOD = 1 - - Digit 7: 27-24 (0xc = 12 = b1100 ) - 27: COMBALT = 1 - 26: PAL_INV_PHASE - (DScaler apparently set this to 1, resulted in sucky picture) - - Digits 6,5: 23-16 - 25-16: COMB_RANGE = 0x1f [default] (9 bits -> max 512) - - Digit 4: 15-12 - 15: DISIFX = 0 - 14: INVCBF = 0 - 13: DISADAPT = 0 - 12: NARROWADAPT = 0 - - Digit 3: 11-8 - 11: FORCE2H - 10: FORCEREMD - 9: NCHROMAEN - 8: NREMODEN - - Digit 2: 7-4 - 7-6: YCORE - 5-4: CCORE - - Digit 1: 3-0 - 3: RANGE = 1 - 2: HACTEXT - 1: HSFMT - -0x47 is the sync byte for MPEG-2 transport stream packets. -Datasheet incorrectly states to use 47 decimal. 188 is the length. -All DVB compliant frontends output packets with this start code. - -Hauppauge WinTV cx88 IR information ------------------------------------ - -The controls for the mux are GPIO [0,1] for source, and GPIO 2 for muting. - -====== ======== ================================================= -GPIO0 GPIO1 -====== ======== ================================================= - 0 0 TV Audio - 1 0 FM radio - 0 1 Line-In - 1 1 Mono tuner bypass or CD passthru (tuner specific) -====== ======== ================================================= - -GPIO 16(I believe) is tied to the IR port (if present). - - -From the data sheet: - -- Register 24'h20004 PCI Interrupt Status - - - bit [18] IR_SMP_INT Set when 32 input samples have been collected over - - gpio[16] pin into GP_SAMPLE register. - -What's missing from the data sheet: - -- Setup 4KHz sampling rate (roughly 2x oversampled; good enough for our RC5 - compat remote) -- set register 0x35C050 to 0xa80a80 -- enable sampling -- set register 0x35C054 to 0x5 -- enable the IRQ bit 18 in the interrupt mask register (and - provide for a handler) - -GP_SAMPLE register is at 0x35C058 - -Bits are then right shifted into the GP_SAMPLE register at the specified -rate; you get an interrupt when a full DWORD is received. -You need to recover the actual RC5 bits out of the (oversampled) IR sensor -bits. (Hint: look for the 0/1and 1/0 crossings of the RC5 bi-phase data) An -actual raw RC5 code will span 2-3 DWORDS, depending on the actual alignment. - -I'm pretty sure when no IR signal is present the receiver is always in a -marking state(1); but stray light, etc can cause intermittent noise values -as well. Remember, this is a free running sample of the IR receiver state -over time, so don't assume any sample starts at any particular place. - -Additional info -~~~~~~~~~~~~~~~ - -This data sheet (google search) seems to have a lovely description of the -RC5 basics: -http://www.atmel.com/dyn/resources/prod_documents/doc2817.pdf - -This document has more data: -http://www.nenya.be/beor/electronics/rc5.htm - -This document has a how to decode a bi-phase data stream: -http://www.ee.washington.edu/circuit_archive/text/ir_decode.txt - -This document has still more info: -http://www.xs4all.nl/~sbp/knowledge/ir/rc5.htm diff --git a/Documentation/media/v4l-drivers/davinci-vpbe-devel.rst b/Documentation/media/v4l-drivers/davinci-vpbe-devel.rst deleted file mode 100644 index f0961672e6a3..000000000000 --- a/Documentation/media/v4l-drivers/davinci-vpbe-devel.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The VPBE V4L2 driver design -=========================== - -File partitioning ------------------ - - V4L2 display device driver - drivers/media/platform/davinci/vpbe_display.c - drivers/media/platform/davinci/vpbe_display.h - - VPBE display controller - drivers/media/platform/davinci/vpbe.c - drivers/media/platform/davinci/vpbe.h - - VPBE venc sub device driver - drivers/media/platform/davinci/vpbe_venc.c - drivers/media/platform/davinci/vpbe_venc.h - drivers/media/platform/davinci/vpbe_venc_regs.h - - VPBE osd driver - drivers/media/platform/davinci/vpbe_osd.c - drivers/media/platform/davinci/vpbe_osd.h - drivers/media/platform/davinci/vpbe_osd_regs.h - -To be done ----------- - -vpbe display controller - - Add support for external encoders. - - add support for selecting external encoder as default at probe time. - -vpbe venc sub device - - add timings for supporting ths8200 - - add support for LogicPD LCD. - -FB drivers - - Add support for fbdev drivers.- Ready and part of subsequent patches. diff --git a/Documentation/media/v4l-drivers/fimc-devel.rst b/Documentation/media/v4l-drivers/fimc-devel.rst deleted file mode 100644 index 956e3a9901f8..000000000000 --- a/Documentation/media/v4l-drivers/fimc-devel.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -.. include:: - -The Samsung S5P/EXYNOS4 FIMC driver -=================================== - -Copyright |copy| 2012 - 2013 Samsung Electronics Co., Ltd. - -Files partitioning ------------------- - -- media device driver - - drivers/media/platform/exynos4-is/media-dev.[ch] - -- camera capture video device driver - - drivers/media/platform/exynos4-is/fimc-capture.c - -- MIPI-CSI2 receiver subdev - - drivers/media/platform/exynos4-is/mipi-csis.[ch] - -- video post-processor (mem-to-mem) - - drivers/media/platform/exynos4-is/fimc-core.c - -- common files - - drivers/media/platform/exynos4-is/fimc-core.h - drivers/media/platform/exynos4-is/fimc-reg.h - drivers/media/platform/exynos4-is/regs-fimc.h diff --git a/Documentation/media/v4l-drivers/index.rst b/Documentation/media/v4l-drivers/index.rst index aef375cfb05a..ee7faff88a33 100644 --- a/Documentation/media/v4l-drivers/index.rst +++ b/Documentation/media/v4l-drivers/index.rst @@ -31,23 +31,9 @@ For more details see the file COPYING in the source distribution of Linux. :maxdepth: 5 :numbered: - tuners max2175 - pvrusb2 - pxa_camera - radiotrack - sh_mobile_ceu_camera uvcvideo - bttv-devel - cpia2_devel - cx2341x-devel - cx88-devel - davinci-vpbe-devel - fimc-devel - saa7134-devel - vimc-devel - cx2341x-uapi imx-uapi meye-uapi diff --git a/Documentation/media/v4l-drivers/pvrusb2.rst b/Documentation/media/v4l-drivers/pvrusb2.rst deleted file mode 100644 index 83bfaa531ea8..000000000000 --- a/Documentation/media/v4l-drivers/pvrusb2.rst +++ /dev/null @@ -1,202 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The pvrusb2 driver -================== - -Author: Mike Isely - -Background ----------- - -This driver is intended for the "Hauppauge WinTV PVR USB 2.0", which -is a USB 2.0 hosted TV Tuner. This driver is a work in progress. -Its history started with the reverse-engineering effort by Björn -Danielsson whose web page can be found here: -http://pvrusb2.dax.nu/ - -From there Aurelien Alleaume began an effort to -create a video4linux compatible driver. I began with Aurelien's -last known snapshot and evolved the driver to the state it is in -here. - -More information on this driver can be found at: -http://www.isely.net/pvrusb2.html - - -This driver has a strong separation of layers. They are very -roughly: - -1. Low level wire-protocol implementation with the device. - -2. I2C adaptor implementation and corresponding I2C client drivers - implemented elsewhere in V4L. - -3. High level hardware driver implementation which coordinates all - activities that ensure correct operation of the device. - -4. A "context" layer which manages instancing of driver, setup, - tear-down, arbitration, and interaction with high level - interfaces appropriately as devices are hotplugged in the - system. - -5. High level interfaces which glue the driver to various published - Linux APIs (V4L, sysfs, maybe DVB in the future). - -The most important shearing layer is between the top 2 layers. A -lot of work went into the driver to ensure that any kind of -conceivable API can be laid on top of the core driver. (Yes, the -driver internally leverages V4L to do its work but that really has -nothing to do with the API published by the driver to the outside -world.) The architecture allows for different APIs to -simultaneously access the driver. I have a strong sense of fairness -about APIs and also feel that it is a good design principle to keep -implementation and interface isolated from each other. Thus while -right now the V4L high level interface is the most complete, the -sysfs high level interface will work equally well for similar -functions, and there's no reason I see right now why it shouldn't be -possible to produce a DVB high level interface that can sit right -alongside V4L. - -Building --------- - -To build these modules essentially amounts to just running "Make", -but you need the kernel source tree nearby and you will likely also -want to set a few controlling environment variables first in order -to link things up with that source tree. Please see the Makefile -here for comments that explain how to do that. - -Source file list / functional overview --------------------------------------- - -(Note: The term "module" used below generally refers to loosely -defined functional units within the pvrusb2 driver and bears no -relation to the Linux kernel's concept of a loadable module.) - -pvrusb2-audio.[ch] - This is glue logic that resides between this - driver and the msp3400.ko I2C client driver (which is found - elsewhere in V4L). - -pvrusb2-context.[ch] - This module implements the context for an - instance of the driver. Everything else eventually ties back to - or is otherwise instanced within the data structures implemented - here. Hotplugging is ultimately coordinated here. All high level - interfaces tie into the driver through this module. This module - helps arbitrate each interface's access to the actual driver core, - and is designed to allow concurrent access through multiple - instances of multiple interfaces (thus you can for example change - the tuner's frequency through sysfs while simultaneously streaming - video through V4L out to an instance of mplayer). - -pvrusb2-debug.h - This header defines a printk() wrapper and a mask - of debugging bit definitions for the various kinds of debug - messages that can be enabled within the driver. - -pvrusb2-debugifc.[ch] - This module implements a crude command line - oriented debug interface into the driver. Aside from being part - of the process for implementing manual firmware extraction (see - the pvrusb2 web site mentioned earlier), probably I'm the only one - who has ever used this. It is mainly a debugging aid. - -pvrusb2-eeprom.[ch] - This is glue logic that resides between this - driver the tveeprom.ko module, which is itself implemented - elsewhere in V4L. - -pvrusb2-encoder.[ch] - This module implements all protocol needed to - interact with the Conexant mpeg2 encoder chip within the pvrusb2 - device. It is a crude echo of corresponding logic in ivtv, - however the design goals (strict isolation) and physical layer - (proxy through USB instead of PCI) are enough different that this - implementation had to be completely different. - -pvrusb2-hdw-internal.h - This header defines the core data structure - in the driver used to track ALL internal state related to control - of the hardware. Nobody outside of the core hardware-handling - modules should have any business using this header. All external - access to the driver should be through one of the high level - interfaces (e.g. V4L, sysfs, etc), and in fact even those high - level interfaces are restricted to the API defined in - pvrusb2-hdw.h and NOT this header. - -pvrusb2-hdw.h - This header defines the full internal API for - controlling the hardware. High level interfaces (e.g. V4L, sysfs) - will work through here. - -pvrusb2-hdw.c - This module implements all the various bits of logic - that handle overall control of a specific pvrusb2 device. - (Policy, instantiation, and arbitration of pvrusb2 devices fall - within the jurisdiction of pvrusb-context not here). - -pvrusb2-i2c-chips-\*.c - These modules implement the glue logic to - tie together and configure various I2C modules as they attach to - the I2C bus. There are two versions of this file. The "v4l2" - version is intended to be used in-tree alongside V4L, where we - implement just the logic that makes sense for a pure V4L - environment. The "all" version is intended for use outside of - V4L, where we might encounter other possibly "challenging" modules - from ivtv or older kernel snapshots (or even the support modules - in the standalone snapshot). - -pvrusb2-i2c-cmd-v4l1.[ch] - This module implements generic V4L1 - compatible commands to the I2C modules. It is here where state - changes inside the pvrusb2 driver are translated into V4L1 - commands that are in turn send to the various I2C modules. - -pvrusb2-i2c-cmd-v4l2.[ch] - This module implements generic V4L2 - compatible commands to the I2C modules. It is here where state - changes inside the pvrusb2 driver are translated into V4L2 - commands that are in turn send to the various I2C modules. - -pvrusb2-i2c-core.[ch] - This module provides an implementation of a - kernel-friendly I2C adaptor driver, through which other external - I2C client drivers (e.g. msp3400, tuner, lirc) may connect and - operate corresponding chips within the pvrusb2 device. It is - through here that other V4L modules can reach into this driver to - operate specific pieces (and those modules are in turn driven by - glue logic which is coordinated by pvrusb2-hdw, doled out by - pvrusb2-context, and then ultimately made available to users - through one of the high level interfaces). - -pvrusb2-io.[ch] - This module implements a very low level ring of - transfer buffers, required in order to stream data from the - device. This module is *very* low level. It only operates the - buffers and makes no attempt to define any policy or mechanism for - how such buffers might be used. - -pvrusb2-ioread.[ch] - This module layers on top of pvrusb2-io.[ch] - to provide a streaming API usable by a read() system call style of - I/O. Right now this is the only layer on top of pvrusb2-io.[ch], - however the underlying architecture here was intended to allow for - other styles of I/O to be implemented with additional modules, like - mmap()'ed buffers or something even more exotic. - -pvrusb2-main.c - This is the top level of the driver. Module level - and USB core entry points are here. This is our "main". - -pvrusb2-sysfs.[ch] - This is the high level interface which ties the - pvrusb2 driver into sysfs. Through this interface you can do - everything with the driver except actually stream data. - -pvrusb2-tuner.[ch] - This is glue logic that resides between this - driver and the tuner.ko I2C client driver (which is found - elsewhere in V4L). - -pvrusb2-util.h - This header defines some common macros used - throughout the driver. These macros are not really specific to - the driver, but they had to go somewhere. - -pvrusb2-v4l2.[ch] - This is the high level interface which ties the - pvrusb2 driver into video4linux. It is through here that V4L - applications can open and operate the driver in the usual V4L - ways. Note that **ALL** V4L functionality is published only - through here and nowhere else. - -pvrusb2-video-\*.[ch] - This is glue logic that resides between this - driver and the saa711x.ko I2C client driver (which is found - elsewhere in V4L). Note that saa711x.ko used to be known as - saa7115.ko in ivtv. There are two versions of this; one is - selected depending on the particular saa711[5x].ko that is found. - -pvrusb2.h - This header contains compile time tunable parameters - (and at the moment the driver has very little that needs to be - tuned). diff --git a/Documentation/media/v4l-drivers/pxa_camera.rst b/Documentation/media/v4l-drivers/pxa_camera.rst deleted file mode 100644 index ee1bd96b66dd..000000000000 --- a/Documentation/media/v4l-drivers/pxa_camera.rst +++ /dev/null @@ -1,194 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -PXA-Camera Host Driver -====================== - -Author: Robert Jarzmik - -Constraints ------------ - -a) Image size for YUV422P format - All YUV422P images are enforced to have width x height % 16 = 0. - This is due to DMA constraints, which transfers only planes of 8 byte - multiples. - - -Global video workflow ---------------------- - -a) QCI stopped - Initially, the QCI interface is stopped. - When a buffer is queued (pxa_videobuf_ops->buf_queue), the QCI starts. - -b) QCI started - More buffers can be queued while the QCI is started without halting the - capture. The new buffers are "appended" at the tail of the DMA chain, and - smoothly captured one frame after the other. - - Once a buffer is filled in the QCI interface, it is marked as "DONE" and - removed from the active buffers list. It can be then requeud or dequeued by - userland application. - - Once the last buffer is filled in, the QCI interface stops. - -c) Capture global finite state machine schema - -.. code-block:: none - - +----+ +---+ +----+ - | DQ | | Q | | DQ | - | v | v | v - +-----------+ +------------------------+ - | STOP | | Wait for capture start | - +-----------+ Q +------------------------+ - +-> | QCI: stop | ------------------> | QCI: run | <------------+ - | | DMA: stop | | DMA: stop | | - | +-----------+ +-----> +------------------------+ | - | / | | - | / +---+ +----+ | | - |capture list empty / | Q | | DQ | | QCI Irq EOF | - | / | v | v v | - | +--------------------+ +----------------------+ | - | | DMA hotlink missed | | Capture running | | - | +--------------------+ +----------------------+ | - | | QCI: run | +-----> | QCI: run | <-+ | - | | DMA: stop | / | DMA: run | | | - | +--------------------+ / +----------------------+ | Other | - | ^ /DMA still | | channels | - | | capture list / running | DMA Irq End | not | - | | not empty / | | finished | - | | / v | yet | - | +----------------------+ +----------------------+ | | - | | Videobuf released | | Channel completed | | | - | +----------------------+ +----------------------+ | | - +-- | QCI: run | | QCI: run | --+ | - | DMA: run | | DMA: run | | - +----------------------+ +----------------------+ | - ^ / | | - | no overrun / | overrun | - | / v | - +--------------------+ / +----------------------+ | - | Frame completed | / | Frame overran | | - +--------------------+ <-----+ +----------------------+ restart frame | - | QCI: run | | QCI: stop | --------------+ - | DMA: run | | DMA: stop | - +--------------------+ +----------------------+ - - Legend: - each box is a FSM state - - each arrow is the condition to transition to another state - - an arrow with a comment is a mandatory transition (no condition) - - arrow "Q" means : a buffer was enqueued - - arrow "DQ" means : a buffer was dequeued - - "QCI: stop" means the QCI interface is not enabled - - "DMA: stop" means all 3 DMA channels are stopped - - "DMA: run" means at least 1 DMA channel is still running - -DMA usage ---------- - -a) DMA flow - - first buffer queued for capture - Once a first buffer is queued for capture, the QCI is started, but data - transfer is not started. On "End Of Frame" interrupt, the irq handler - starts the DMA chain. - - capture of one videobuffer - The DMA chain starts transferring data into videobuffer RAM pages. - When all pages are transferred, the DMA irq is raised on "ENDINTR" status - - finishing one videobuffer - The DMA irq handler marks the videobuffer as "done", and removes it from - the active running queue - Meanwhile, the next videobuffer (if there is one), is transferred by DMA - - finishing the last videobuffer - On the DMA irq of the last videobuffer, the QCI is stopped. - -b) DMA prepared buffer will have this structure - -.. code-block:: none - - +------------+-----+---------------+-----------------+ - | desc-sg[0] | ... | desc-sg[last] | finisher/linker | - +------------+-----+---------------+-----------------+ - -This structure is pointed by dma->sg_cpu. -The descriptors are used as follows: - -- desc-sg[i]: i-th descriptor, transferring the i-th sg - element to the video buffer scatter gather -- finisher: has ddadr=DADDR_STOP, dcmd=ENDIRQEN -- linker: has ddadr= desc-sg[0] of next video buffer, dcmd=0 - -For the next schema, let's assume d0=desc-sg[0] .. dN=desc-sg[N], -"f" stands for finisher and "l" for linker. -A typical running chain is : - -.. code-block:: none - - Videobuffer 1 Videobuffer 2 - +---------+----+---+ +----+----+----+---+ - | d0 | .. | dN | l | | d0 | .. | dN | f | - +---------+----+-|-+ ^----+----+----+---+ - | | - +----+ - -After the chaining is finished, the chain looks like : - -.. code-block:: none - - Videobuffer 1 Videobuffer 2 Videobuffer 3 - +---------+----+---+ +----+----+----+---+ +----+----+----+---+ - | d0 | .. | dN | l | | d0 | .. | dN | l | | d0 | .. | dN | f | - +---------+----+-|-+ ^----+----+----+-|-+ ^----+----+----+---+ - | | | | - +----+ +----+ - new_link - -c) DMA hot chaining timeslice issue - -As DMA chaining is done while DMA _is_ running, the linking may be done -while the DMA jumps from one Videobuffer to another. On the schema, that -would be a problem if the following sequence is encountered : - -- DMA chain is Videobuffer1 + Videobuffer2 -- pxa_videobuf_queue() is called to queue Videobuffer3 -- DMA controller finishes Videobuffer2, and DMA stops - -.. code-block:: none - - => - Videobuffer 1 Videobuffer 2 - +---------+----+---+ +----+----+----+---+ - | d0 | .. | dN | l | | d0 | .. | dN | f | - +---------+----+-|-+ ^----+----+----+-^-+ - | | | - +----+ +-- DMA DDADR loads DDADR_STOP - -- pxa_dma_add_tail_buf() is called, the Videobuffer2 "finisher" is - replaced by a "linker" to Videobuffer3 (creation of new_link) -- pxa_videobuf_queue() finishes -- the DMA irq handler is called, which terminates Videobuffer2 -- Videobuffer3 capture is not scheduled on DMA chain (as it stopped !!!) - -.. code-block:: none - - Videobuffer 1 Videobuffer 2 Videobuffer 3 - +---------+----+---+ +----+----+----+---+ +----+----+----+---+ - | d0 | .. | dN | l | | d0 | .. | dN | l | | d0 | .. | dN | f | - +---------+----+-|-+ ^----+----+----+-|-+ ^----+----+----+---+ - | | | | - +----+ +----+ - new_link - DMA DDADR still is DDADR_STOP - -- pxa_camera_check_link_miss() is called - This checks if the DMA is finished and a buffer is still on the - pcdev->capture list. If that's the case, the capture will be restarted, - and Videobuffer3 is scheduled on DMA chain. -- the DMA irq handler finishes - -.. note:: - - If DMA stops just after pxa_camera_check_link_miss() reads DDADR() - value, we have the guarantee that the DMA irq handler will be called back - when the DMA will finish the buffer, and pxa_camera_check_link_miss() will - be called again, to reschedule Videobuffer3. diff --git a/Documentation/media/v4l-drivers/radiotrack.rst b/Documentation/media/v4l-drivers/radiotrack.rst deleted file mode 100644 index a85cb6205db8..000000000000 --- a/Documentation/media/v4l-drivers/radiotrack.rst +++ /dev/null @@ -1,168 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The Radiotrack radio driver -=========================== - -Author: Stephen M. Benoit - -Date: Dec 14, 1996 - -ACKNOWLEDGMENTS ----------------- - -This document was made based on 'C' code for Linux from Gideon le Grange -(legrang@active.co.za or legrang@cs.sun.ac.za) in 1994, and elaborations from -Frans Brinkman (brinkman@esd.nl) in 1996. The results reported here are from -experiments that the author performed on his own setup, so your mileage may -vary... I make no guarantees, claims or warranties to the suitability or -validity of this information. No other documentation on the AIMS -Lab (http://www.aimslab.com/) RadioTrack card was made available to the -author. This document is offered in the hopes that it might help users who -want to use the RadioTrack card in an environment other than MS Windows. - -WHY THIS DOCUMENT? ------------------- - -I have a RadioTrack card from back when I ran an MS-Windows platform. After -converting to Linux, I found Gideon le Grange's command-line software for -running the card, and found that it was good! Frans Brinkman made a -comfortable X-windows interface, and added a scanning feature. For hack -value, I wanted to see if the tuner could be tuned beyond the usual FM radio -broadcast band, so I could pick up the audio carriers from North American -broadcast TV channels, situated just below and above the 87.0-109.0 MHz range. -I did not get much success, but I learned about programming ioports under -Linux and gained some insights about the hardware design used for the card. - -So, without further delay, here are the details. - - -PHYSICAL DESCRIPTION --------------------- - -The RadioTrack card is an ISA 8-bit FM radio card. The radio frequency (RF) -input is simply an antenna lead, and the output is a power audio signal -available through a miniature phone plug. Its RF frequencies of operation are -more or less limited from 87.0 to 109.0 MHz (the commercial FM broadcast -band). Although the registers can be programmed to request frequencies beyond -these limits, experiments did not give promising results. The variable -frequency oscillator (VFO) that demodulates the intermediate frequency (IF) -signal probably has a small range of useful frequencies, and wraps around or -gets clipped beyond the limits mentioned above. - - -CONTROLLING THE CARD WITH IOPORT --------------------------------- - -The RadioTrack (base) ioport is configurable for 0x30c or 0x20c. Only one -ioport seems to be involved. The ioport decoding circuitry must be pretty -simple, as individual ioport bits are directly matched to specific functions -(or blocks) of the radio card. This way, many functions can be changed in -parallel with one write to the ioport. The only feedback available through -the ioports appears to be the "Stereo Detect" bit. - -The bits of the ioport are arranged as follows: - -.. code-block:: none - - MSb LSb - +------+------+------+--------+--------+-------+---------+--------+ - | VolA | VolB | ???? | Stereo | Radio | TuneA | TuneB | Tune | - | (+) | (-) | | Detect | Audio | (bit) | (latch) | Update | - | | | | Enable | Enable | | | Enable | - +------+------+------+--------+--------+-------+---------+--------+ - - -==== ==== ================================= -VolA VolB Description -==== ==== ================================= -0 0 audio mute -0 1 volume + (some delay required) -1 0 volume - (some delay required) -1 1 stay at present volume -==== ==== ================================= - -==================== =========== -Stereo Detect Enable Description -==================== =========== -0 No Detect -1 Detect -==================== =========== - -Results available by reading ioport >60 msec after last port write. - - 0xff ==> no stereo detected, 0xfd ==> stereo detected. - -============================= ============================= -Radio to Audio (path) Enable Description -============================= ============================= -0 Disable path (silence) -1 Enable path (audio produced) -============================= ============================= - -===== ===== ================== -TuneA TuneB Description -===== ===== ================== -0 0 "zero" bit phase 1 -0 1 "zero" bit phase 2 -1 0 "one" bit phase 1 -1 1 "one" bit phase 2 -===== ===== ================== - - -24-bit code, where bits = (freq*40) + 10486188. -The Most Significant 11 bits must be 1010 xxxx 0x0 to be valid. -The bits are shifted in LSb first. - -================== =========================== -Tune Update Enable Description -================== =========================== -0 Tuner held constant -1 Tuner updating in progress -================== =========================== - - -PROGRAMMING EXAMPLES --------------------- - -.. code-block:: none - - Default: BASE <-- 0xc8 (current volume, no stereo detect, - radio enable, tuner adjust disable) - - Card Off: BASE <-- 0x00 (audio mute, no stereo detect, - radio disable, tuner adjust disable) - - Card On: BASE <-- 0x00 (see "Card Off", clears any unfinished business) - BASE <-- 0xc8 (see "Default") - - Volume Down: BASE <-- 0x48 (volume down, no stereo detect, - radio enable, tuner adjust disable) - wait 10 msec - BASE <-- 0xc8 (see "Default") - - Volume Up: BASE <-- 0x88 (volume up, no stereo detect, - radio enable, tuner adjust disable) - wait 10 msec - BASE <-- 0xc8 (see "Default") - - Check Stereo: BASE <-- 0xd8 (current volume, stereo detect, - radio enable, tuner adjust disable) - wait 100 msec - x <-- BASE (read ioport) - BASE <-- 0xc8 (see "Default") - - x=0xff ==> "not stereo", x=0xfd ==> "stereo detected" - - Set Frequency: code = (freq*40) + 10486188 - foreach of the 24 bits in code, - (from Least to Most Significant): - to write a "zero" bit, - BASE <-- 0x01 (audio mute, no stereo detect, radio - disable, "zero" bit phase 1, tuner adjust) - BASE <-- 0x03 (audio mute, no stereo detect, radio - disable, "zero" bit phase 2, tuner adjust) - to write a "one" bit, - BASE <-- 0x05 (audio mute, no stereo detect, radio - disable, "one" bit phase 1, tuner adjust) - BASE <-- 0x07 (audio mute, no stereo detect, radio - disable, "one" bit phase 2, tuner adjust) diff --git a/Documentation/media/v4l-drivers/saa7134-devel.rst b/Documentation/media/v4l-drivers/saa7134-devel.rst deleted file mode 100644 index 167fd729bc8c..000000000000 --- a/Documentation/media/v4l-drivers/saa7134-devel.rst +++ /dev/null @@ -1,67 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The saa7134 driver -================== - -Author Gerd Hoffmann - - -Card Variations: ----------------- - -Cards can use either of these two crystals (xtal): - -- 32.11 MHz -> .audio_clock=0x187de7 -- 24.576MHz -> .audio_clock=0x200000 (xtal * .audio_clock = 51539600) - -Some details about 30/34/35: - -- saa7130 - low-price chip, doesn't have mute, that is why all those - cards should have .mute field defined in their tuner structure. - -- saa7134 - usual chip - -- saa7133/35 - saa7135 is probably a marketing decision, since all those - chips identifies itself as 33 on pci. - -LifeView GPIOs --------------- - -This section was authored by: Peter Missel - -- LifeView FlyTV Platinum FM (LR214WF) - - - GP27 MDT2005 PB4 pin 10 - - GP26 MDT2005 PB3 pin 9 - - GP25 MDT2005 PB2 pin 8 - - GP23 MDT2005 PB1 pin 7 - - GP22 MDT2005 PB0 pin 6 - - GP21 MDT2005 PB5 pin 11 - - GP20 MDT2005 PB6 pin 12 - - GP19 MDT2005 PB7 pin 13 - - nc MDT2005 PA3 pin 2 - - Remote MDT2005 PA2 pin 1 - - GP18 MDT2005 PA1 pin 18 - - nc MDT2005 PA0 pin 17 strap low - - GP17 Strap "GP7"=High - - GP16 Strap "GP6"=High - - - 0=Radio 1=TV - - Drives SA630D ENCH1 and HEF4052 A1 pinsto do FM radio through - SIF input - - - GP15 nc - - GP14 nc - - GP13 nc - - GP12 Strap "GP5" = High - - GP11 Strap "GP4" = High - - GP10 Strap "GP3" = High - - GP09 Strap "GP2" = Low - - GP08 Strap "GP1" = Low - - GP07.00 nc - -Credits -------- - -andrew.stevens@philips.com + werner.leeb@philips.com for providing -saa7134 hardware specs and sample board. diff --git a/Documentation/media/v4l-drivers/sh_mobile_ceu_camera.rst b/Documentation/media/v4l-drivers/sh_mobile_ceu_camera.rst deleted file mode 100644 index 822fcb8368ae..000000000000 --- a/Documentation/media/v4l-drivers/sh_mobile_ceu_camera.rst +++ /dev/null @@ -1,142 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Cropping and Scaling algorithm, used in the sh_mobile_ceu_camera driver -======================================================================= - -Author: Guennadi Liakhovetski - -Terminology ------------ - -sensor scales: horizontal and vertical scales, configured by the sensor driver -host scales: -"- host driver -combined scales: sensor_scale * host_scale - - -Generic scaling / cropping scheme ---------------------------------- - -.. code-block:: none - - -1-- - | - -2-- -\ - | --\ - | --\ - +-5-- . -- -3-- -\ - | `... -\ - | `... -4-- . - -7.. - | `. - | `. .6-- - | - | . .6'- - | .´ - | ... -4'- .´ - | ...´ - -7'. - +-5'- .´ -/ - | -- -3'- -/ - | --/ - | --/ - -2'- -/ - | - | - -1'- - -In the above chart minuses and slashes represent "real" data amounts, points and -accents represent "useful" data, basically, CEU scaled and cropped output, -mapped back onto the client's source plane. - -Such a configuration can be produced by user requests: - -S_CROP(left / top = (5) - (1), width / height = (5') - (5)) -S_FMT(width / height = (6') - (6)) - -Here: - -(1) to (1') - whole max width or height -(1) to (2) - sensor cropped left or top -(2) to (2') - sensor cropped width or height -(3) to (3') - sensor scale -(3) to (4) - CEU cropped left or top -(4) to (4') - CEU cropped width or height -(5) to (5') - reverse sensor scale applied to CEU cropped width or height -(2) to (5) - reverse sensor scale applied to CEU cropped left or top -(6) to (6') - CEU scale - user window - - -S_FMT ------ - -Do not touch input rectangle - it is already optimal. - -1. Calculate current sensor scales: - - scale_s = ((2') - (2)) / ((3') - (3)) - -2. Calculate "effective" input crop (sensor subwindow) - CEU crop scaled back at -current sensor scales onto input window - this is user S_CROP: - - width_u = (5') - (5) = ((4') - (4)) * scale_s - -3. Calculate new combined scales from "effective" input window to requested user -window: - - scale_comb = width_u / ((6') - (6)) - -4. Calculate sensor output window by applying combined scales to real input -window: - - width_s_out = ((7') - (7)) = ((2') - (2)) / scale_comb - -5. Apply iterative sensor S_FMT for sensor output window. - - subdev->video_ops->s_fmt(.width = width_s_out) - -6. Retrieve sensor output window (g_fmt) - -7. Calculate new sensor scales: - - scale_s_new = ((3')_new - (3)_new) / ((2') - (2)) - -8. Calculate new CEU crop - apply sensor scales to previously calculated -"effective" crop: - - width_ceu = (4')_new - (4)_new = width_u / scale_s_new - left_ceu = (4)_new - (3)_new = ((5) - (2)) / scale_s_new - -9. Use CEU cropping to crop to the new window: - - ceu_crop(.width = width_ceu, .left = left_ceu) - -10. Use CEU scaling to scale to the requested user window: - - scale_ceu = width_ceu / width - - -S_CROP ------- - -The :ref:`V4L2 crop API ` says: - -"...specification does not define an origin or units. However by convention -drivers should horizontally count unscaled samples relative to 0H." - -We choose to follow the advise and interpret cropping units as client input -pixels. - -Cropping is performed in the following 6 steps: - -1. Request exactly user rectangle from the sensor. - -2. If smaller - iterate until a larger one is obtained. Result: sensor cropped - to 2 : 2', target crop 5 : 5', current output format 6' - 6. - -3. In the previous step the sensor has tried to preserve its output frame as - good as possible, but it could have changed. Retrieve it again. - -4. Sensor scaled to 3 : 3'. Sensor's scale is (2' - 2) / (3' - 3). Calculate - intermediate window: 4' - 4 = (5' - 5) * (3' - 3) / (2' - 2) - -5. Calculate and apply host scale = (6' - 6) / (4' - 4) - -6. Calculate and apply host crop: 6 - 7 = (5 - 2) * (6' - 6) / (5' - 5) diff --git a/Documentation/media/v4l-drivers/tuners.rst b/Documentation/media/v4l-drivers/tuners.rst deleted file mode 100644 index 7509be888909..000000000000 --- a/Documentation/media/v4l-drivers/tuners.rst +++ /dev/null @@ -1,133 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -Tuner drivers -============= - -Simple tuner Programming ------------------------- - -There are some flavors of Tuner programming APIs. -These differ mainly by the bandswitch byte. - -- L= LG_API (VHF_LO=0x01, VHF_HI=0x02, UHF=0x08, radio=0x04) -- P= PHILIPS_API (VHF_LO=0xA0, VHF_HI=0x90, UHF=0x30, radio=0x04) -- T= TEMIC_API (VHF_LO=0x02, VHF_HI=0x04, UHF=0x01) -- A= ALPS_API (VHF_LO=0x14, VHF_HI=0x12, UHF=0x11) -- M= PHILIPS_MK3 (VHF_LO=0x01, VHF_HI=0x02, UHF=0x04, radio=0x19) - -Tuner Manufacturers -------------------- - -- SAMSUNG Tuner identification: (e.g. TCPM9091PD27) - -.. code-block:: none - - TCP [ABCJLMNQ] 90[89][125] [DP] [ACD] 27 [ABCD] - [ABCJLMNQ]: - A= BG+DK - B= BG - C= I+DK - J= NTSC-Japan - L= Secam LL - M= BG+I+DK - N= NTSC - Q= BG+I+DK+LL - [89]: ? - [125]: - 2: No FM - 5: With FM - [DP]: - D= NTSC - P= PAL - [ACD]: - A= F-connector - C= Phono connector - D= Din Jack - [ABCD]: - 3-wire/I2C tuning, 2-band/3-band - -These Tuners are PHILIPS_API compatible. - -Philips Tuner identification: (e.g. FM1216MF) - -.. code-block:: none - - F[IRMQ]12[1345]6{MF|ME|MP} - F[IRMQ]: - FI12x6: Tuner Series - FR12x6: Tuner + Radio IF - FM12x6: Tuner + FM - FQ12x6: special - FMR12x6: special - TD15xx: Digital Tuner ATSC - 12[1345]6: - 1216: PAL BG - 1236: NTSC - 1246: PAL I - 1256: Pal DK - {MF|ME|MP} - MF: BG LL w/ Secam (Multi France) - ME: BG DK I LL (Multi Europe) - MP: BG DK I (Multi PAL) - MR: BG DK M (?) - MG: BG DKI M (?) - MK2 series PHILIPS_API, most tuners are compatible to this one ! - MK3 series introduced in 2002 w/ PHILIPS_MK3_API - -Temic Tuner identification: (.e.g 4006FH5) - -.. code-block:: none - - 4[01][0136][269]F[HYNR]5 - 40x2: Tuner (5V/33V), TEMIC_API. - 40x6: Tuner 5V - 41xx: Tuner compact - 40x9: Tuner+FM compact - [0136] - xx0x: PAL BG - xx1x: Pal DK, Secam LL - xx3x: NTSC - xx6x: PAL I - F[HYNR]5 - FH5: Pal BG - FY5: others - FN5: multistandard - FR5: w/ FM radio - 3X xxxx: order number with specific connector - Note: Only 40x2 series has TEMIC_API, all newer tuners have PHILIPS_API. - -LG Innotek Tuner: - -- TPI8NSR11 : NTSC J/M (TPI8NSR01 w/FM) (P,210/497) -- TPI8PSB11 : PAL B/G (TPI8PSB01 w/FM) (P,170/450) -- TAPC-I701 : PAL I (TAPC-I001 w/FM) (P,170/450) -- TPI8PSB12 : PAL D/K+B/G (TPI8PSB02 w/FM) (P,170/450) -- TAPC-H701P: NTSC_JP (TAPC-H001P w/FM) (L,170/450) -- TAPC-G701P: PAL B/G (TAPC-G001P w/FM) (L,170/450) -- TAPC-W701P: PAL I (TAPC-W001P w/FM) (L,170/450) -- TAPC-Q703P: PAL D/K (TAPC-Q001P w/FM) (L,170/450) -- TAPC-Q704P: PAL D/K+I (L,170/450) -- TAPC-G702P: PAL D/K+B/G (L,170/450) - -- TADC-H002F: NTSC (L,175/410?; 2-B, C-W+11, W+12-69) -- TADC-M201D: PAL D/K+B/G+I (L,143/425) (sound control at I2C address 0xc8) -- TADC-T003F: NTSC Taiwan (L,175/410?; 2-B, C-W+11, W+12-69) - -Suffix: - - P= Standard phono female socket - - D= IEC female socket - - F= F-connector - -Other Tuners: - -- TCL2002MB-1 : PAL BG + DK =TUNER_LG_PAL_NEW_TAPC -- TCL2002MB-1F: PAL BG + DK w/FM =PHILIPS_PAL -- TCL2002MI-2 : PAL I = ?? - -ALPS Tuners: - -- Most are LG_API compatible -- TSCH6 has ALPS_API (TSCH5 ?) -- TSBE1 has extra API 05,02,08 Control_byte=0xCB Source:[#f1]_ - -.. [#f1] conexant100029b-PCI-Decoder-ApplicationNote.pdf diff --git a/Documentation/media/v4l-drivers/vimc-devel.rst b/Documentation/media/v4l-drivers/vimc-devel.rst deleted file mode 100644 index b2aa2ee79205..000000000000 --- a/Documentation/media/v4l-drivers/vimc-devel.rst +++ /dev/null @@ -1,15 +0,0 @@ -.. SPDX-License-Identifier: GPL-2.0 - -The Virtual Media Controller Driver (vimc) -========================================== - -Source code documentation -------------------------- - -vimc-streamer -~~~~~~~~~~~~~ - -.. kernel-doc:: drivers/media/platform/vimc/vimc-streamer.h - :internal: - -.. kernel-doc:: drivers/media/platform/vimc/vimc-streamer.c diff --git a/MAINTAINERS b/MAINTAINERS index abe6a64183fa..e0a0a3fbfe21 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3667,7 +3667,7 @@ L: linux-media@vger.kernel.org S: Odd fixes W: https://linuxtv.org T: git git://linuxtv.org/media_tree.git -F: Documentation/media/v4l-drivers/bttv* +F: Documentation/driver-api/media/drivers/bttv* F: drivers/media/pci/bt8xx/bttv* BUS FREQUENCY DRIVER FOR SAMSUNG EXYNOS @@ -4539,7 +4539,7 @@ L: linux-media@vger.kernel.org S: Odd fixes W: https://linuxtv.org T: git git://linuxtv.org/media_tree.git -F: Documentation/media/v4l-drivers/cx88* +F: Documentation/driver-api/media/drivers/cx88* F: drivers/media/pci/cx88/ CXD2820R MEDIA DRIVER @@ -13711,7 +13711,7 @@ L: linux-media@vger.kernel.org S: Maintained W: http://www.isely.net/pvrusb2/ T: git git://linuxtv.org/media_tree.git -F: Documentation/media/v4l-drivers/pvrusb2* +F: Documentation/driver-api/media/drivers/pvrusb2* F: drivers/media/usb/pvrusb2/ PWC WEBCAM DRIVER @@ -14720,7 +14720,7 @@ L: linux-media@vger.kernel.org S: Odd fixes W: https://linuxtv.org T: git git://linuxtv.org/media_tree.git -F: Documentation/media/v4l-drivers/saa7134* +F: Documentation/driver-api/media/drivers/saa7134* F: drivers/media/pci/saa7134/ SAA7146 VIDEO4LINUX-2 DRIVER diff --git a/drivers/media/dvb-frontends/dib3000.h b/drivers/media/dvb-frontends/dib3000.h index 9118a7a48ef2..3f129efa21de 100644 --- a/drivers/media/dvb-frontends/dib3000.h +++ b/drivers/media/dvb-frontends/dib3000.h @@ -14,7 +14,7 @@ * Amaury Demol from DiBcom for providing specs and driver * sources, on which this driver (and the dvb-dibusb) are based. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #ifndef DIB3000_H diff --git a/drivers/media/dvb-frontends/dib3000mb.c b/drivers/media/dvb-frontends/dib3000mb.c index 46ed0e20c8fa..0f0480d8576d 100644 --- a/drivers/media/dvb-frontends/dib3000mb.c +++ b/drivers/media/dvb-frontends/dib3000mb.c @@ -14,7 +14,7 @@ * Amaury Demol from DiBcom for providing specs and driver * sources, on which this driver (and the dvb-dibusb) are based. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt diff --git a/drivers/media/dvb-frontends/eds1547.h b/drivers/media/dvb-frontends/eds1547.h index 907254b85708..bb85a6e27076 100644 --- a/drivers/media/dvb-frontends/eds1547.h +++ b/drivers/media/dvb-frontends/eds1547.h @@ -3,7 +3,7 @@ * * Copyright (C) 2008 Igor M. Liplianin (liplianin@me.by) * -* see Documentation/media/dvb-drivers/dvb-usb.rst for more information +* see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #ifndef EDS1547 diff --git a/drivers/media/dvb-frontends/z0194a.h b/drivers/media/dvb-frontends/z0194a.h index 21442905d116..3446ccbf3c1c 100644 --- a/drivers/media/dvb-frontends/z0194a.h +++ b/drivers/media/dvb-frontends/z0194a.h @@ -3,7 +3,7 @@ * * Copyright (C) 2008 Igor M. Liplianin (liplianin@me.by) * -* see Documentation/media/dvb-drivers/dvb-usb.rst for more information +* see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #ifndef Z0194A diff --git a/drivers/media/pci/cx18/cx18-streams.c b/drivers/media/pci/cx18/cx18-streams.c index 0e2365c9f4ad..c41bae118415 100644 --- a/drivers/media/pci/cx18/cx18-streams.c +++ b/drivers/media/pci/cx18/cx18-streams.c @@ -845,7 +845,7 @@ int cx18_start_v4l2_encode_stream(struct cx18_stream *s) /* * Audio related reset according to - * Documentation/media/v4l-drivers/cx2341x-devel.rst + * Documentation/driver-api/media/drivers/cx2341x-devel.rst */ if (atomic_read(&cx->ana_capturing) == 0) cx18_vapi(cx, CX18_CPU_SET_MISC_PARAMETERS, 2, @@ -853,7 +853,7 @@ int cx18_start_v4l2_encode_stream(struct cx18_stream *s) /* * Number of lines for Field 1 & Field 2 according to - * Documentation/media/v4l-drivers/cx2341x-devel.rst + * Documentation/driver-api/media/drivers/cx2341x-devel.rst * Field 1 is 312 for 625 line systems in BT.656 * Field 2 is 313 for 625 line systems in BT.656 */ diff --git a/drivers/media/platform/pxa_camera.c b/drivers/media/platform/pxa_camera.c index 70c85a2a10f5..3c5fe737d36f 100644 --- a/drivers/media/platform/pxa_camera.c +++ b/drivers/media/platform/pxa_camera.c @@ -1016,7 +1016,7 @@ static void pxa_camera_wakeup(struct pxa_camera_dev *pcdev, * - a videobuffer is queued on the pcdev->capture list * * Please check the "DMA hot chaining timeslice issue" in - * Documentation/media/v4l-drivers/pxa_camera.rst + * Documentation/driver-api/media/drivers/pxa_camera.rst * * Context: should only be called within the dma irq handler */ @@ -1438,7 +1438,7 @@ static void pxac_vb2_queue(struct vb2_buffer *vb) /* * Please check the DMA prepared buffer structure in : - * Documentation/media/v4l-drivers/pxa_camera.rst + * Documentation/driver-api/media/drivers/pxa_camera.rst * Please check also in pxa_camera_check_link_miss() to understand why DMA chain * modification while DMA chain is running will work anyway. */ diff --git a/drivers/media/radio/Kconfig b/drivers/media/radio/Kconfig index f4df16df19d9..d29e29645e04 100644 --- a/drivers/media/radio/Kconfig +++ b/drivers/media/radio/Kconfig @@ -272,7 +272,7 @@ config RADIO_RTRACK been reported to be used by these cards. More information is contained in the file - . + . To compile this driver as a module, choose M here: the module will be called radio-aimslab. diff --git a/drivers/media/usb/dvb-usb-v2/Kconfig b/drivers/media/usb/dvb-usb-v2/Kconfig index b21a4d413872..ff0ae64424c4 100644 --- a/drivers/media/usb/dvb-usb-v2/Kconfig +++ b/drivers/media/usb/dvb-usb-v2/Kconfig @@ -7,7 +7,7 @@ config DVB_USB_V2 USB1.1 and USB2.0 DVB devices. Almost every USB device needs a firmware, please look into - . + . For a complete list of supported USB devices see the LinuxTV DVB Wiki: diff --git a/drivers/media/usb/dvb-usb-v2/gl861.c b/drivers/media/usb/dvb-usb-v2/gl861.c index 19217dcf20f1..42c3b8af0774 100644 --- a/drivers/media/usb/dvb-usb-v2/gl861.c +++ b/drivers/media/usb/dvb-usb-v2/gl861.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* DVB USB compliant linux driver for GL861 USB2.0 devices. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.c b/drivers/media/usb/dvb-usb-v2/lmedm04.c index fb8280620c58..8a3c0eeed959 100644 --- a/drivers/media/usb/dvb-usb-v2/lmedm04.c +++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c @@ -39,7 +39,7 @@ * Copyright (C) 2010 Malcolm Priestley (tvboxspy@gmail.com) * LME2510(C)(C) Leaguerme (Shenzhen) MicroElectronics Co., Ltd. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information * * Known Issues : * LME2510: Non Intel USB chipsets fail to maintain High Speed on diff --git a/drivers/media/usb/dvb-usb-v2/lmedm04.h b/drivers/media/usb/dvb-usb-v2/lmedm04.h index 766a8348624d..4335b6ebcc1c 100644 --- a/drivers/media/usb/dvb-usb-v2/lmedm04.h +++ b/drivers/media/usb/dvb-usb-v2/lmedm04.h @@ -14,7 +14,7 @@ * MVB0001F (LME2510C+LGTDQT-P001F) * * * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #ifndef _DVB_USB_LME2510_H_ #define _DVB_USB_LME2510_H_ diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf.c b/drivers/media/usb/dvb-usb-v2/mxl111sf.c index 55b4ae7037a4..7865fa0a8295 100644 --- a/drivers/media/usb/dvb-usb-v2/mxl111sf.c +++ b/drivers/media/usb/dvb-usb-v2/mxl111sf.c @@ -2,7 +2,7 @@ /* * Copyright (C) 2010-2014 Michael Krufky (mkrufky@linuxtv.org) * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include diff --git a/drivers/media/usb/dvb-usb-v2/mxl111sf.h b/drivers/media/usb/dvb-usb-v2/mxl111sf.h index 70bd2a2a8ec1..e57e5d2353b4 100644 --- a/drivers/media/usb/dvb-usb-v2/mxl111sf.h +++ b/drivers/media/usb/dvb-usb-v2/mxl111sf.h @@ -2,7 +2,7 @@ /* * Copyright (C) 2010-2014 Michael Krufky (mkrufky@linuxtv.org) * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #ifndef _DVB_USB_MXL111SF_H_ diff --git a/drivers/media/usb/dvb-usb/Kconfig b/drivers/media/usb/dvb-usb/Kconfig index 42334a02cdce..15d29c91662f 100644 --- a/drivers/media/usb/dvb-usb/Kconfig +++ b/drivers/media/usb/dvb-usb/Kconfig @@ -8,7 +8,7 @@ config DVB_USB USB1.1 and USB2.0 DVB devices. Almost every USB device needs a firmware, please look into - . + . For a complete list of supported USB devices see the LinuxTV DVB Wiki: diff --git a/drivers/media/usb/dvb-usb/a800.c b/drivers/media/usb/dvb-usb/a800.c index 666213f5d5d8..15bbefe3bc00 100644 --- a/drivers/media/usb/dvb-usb/a800.c +++ b/drivers/media/usb/dvb-usb/a800.c @@ -8,7 +8,7 @@ * - AVerMedia who kindly provided information and * - Glen Harris who suffered from my mistakes during development. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "dibusb.h" diff --git a/drivers/media/usb/dvb-usb/af9005-fe.c b/drivers/media/usb/dvb-usb/af9005-fe.c index 6c960f723457..9d6fa0556d7b 100644 --- a/drivers/media/usb/dvb-usb/af9005-fe.c +++ b/drivers/media/usb/dvb-usb/af9005-fe.c @@ -6,7 +6,7 @@ * * Thanks to Afatech who kindly provided information. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "af9005.h" #include "af9005-script.h" diff --git a/drivers/media/usb/dvb-usb/af9005-remote.c b/drivers/media/usb/dvb-usb/af9005-remote.c index c664353f3911..41d48b3c8d05 100644 --- a/drivers/media/usb/dvb-usb/af9005-remote.c +++ b/drivers/media/usb/dvb-usb/af9005-remote.c @@ -8,7 +8,7 @@ * * Thanks to Afatech who kindly provided information. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "af9005.h" /* debug */ diff --git a/drivers/media/usb/dvb-usb/af9005.c b/drivers/media/usb/dvb-usb/af9005.c index 89b4b5d84cdf..3446bcac8ed1 100644 --- a/drivers/media/usb/dvb-usb/af9005.c +++ b/drivers/media/usb/dvb-usb/af9005.c @@ -6,7 +6,7 @@ * * Thanks to Afatech who kindly provided information. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "af9005.h" diff --git a/drivers/media/usb/dvb-usb/af9005.h b/drivers/media/usb/dvb-usb/af9005.h index 3179a7c71e8f..11d74dc26d83 100644 --- a/drivers/media/usb/dvb-usb/af9005.h +++ b/drivers/media/usb/dvb-usb/af9005.h @@ -6,7 +6,7 @@ * * Thanks to Afatech who kindly provided information. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #ifndef _DVB_USB_AF9005_H_ #define _DVB_USB_AF9005_H_ diff --git a/drivers/media/usb/dvb-usb/az6027.c b/drivers/media/usb/dvb-usb/az6027.c index 8de18da0c4bd..d5be540e31a7 100644 --- a/drivers/media/usb/dvb-usb/az6027.c +++ b/drivers/media/usb/dvb-usb/az6027.c @@ -4,7 +4,7 @@ * * Copyright (C) 2009 Adams.Xu * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "az6027.h" diff --git a/drivers/media/usb/dvb-usb/cxusb.c b/drivers/media/usb/dvb-usb/cxusb.c index c421b603be44..fd058f71ce49 100644 --- a/drivers/media/usb/dvb-usb/cxusb.c +++ b/drivers/media/usb/dvb-usb/cxusb.c @@ -18,7 +18,7 @@ * Copyright (C) 2006, 2007 Chris Pascoe (c.pascoe@itee.uq.edu.au) * Copyright (C) 2011, 2017 Maciej S. Szmigiero (mail@maciej.szmigiero.name) * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include #include diff --git a/drivers/media/usb/dvb-usb/dibusb-common.c b/drivers/media/usb/dvb-usb/dibusb-common.c index 59ce2dec11e9..02b51d1a1b67 100644 --- a/drivers/media/usb/dvb-usb/dibusb-common.c +++ b/drivers/media/usb/dvb-usb/dibusb-common.c @@ -3,7 +3,7 @@ * * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de) * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "dibusb.h" diff --git a/drivers/media/usb/dvb-usb/dibusb-mb.c b/drivers/media/usb/dvb-usb/dibusb-mb.c index d4ea72bf09c5..f462c918d5a4 100644 --- a/drivers/media/usb/dvb-usb/dibusb-mb.c +++ b/drivers/media/usb/dvb-usb/dibusb-mb.c @@ -7,7 +7,7 @@ * based on GPL code from DiBcom, which has * Copyright (C) 2004 Amaury Demol for DiBcom * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "dibusb.h" diff --git a/drivers/media/usb/dvb-usb/dibusb-mc-common.c b/drivers/media/usb/dvb-usb/dibusb-mc-common.c index 967027e29c17..b8cde4cded33 100644 --- a/drivers/media/usb/dvb-usb/dibusb-mc-common.c +++ b/drivers/media/usb/dvb-usb/dibusb-mc-common.c @@ -3,7 +3,7 @@ * * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "dibusb.h" diff --git a/drivers/media/usb/dvb-usb/dibusb-mc.c b/drivers/media/usb/dvb-usb/dibusb-mc.c index ada3bee296c2..e2689977c8c8 100644 --- a/drivers/media/usb/dvb-usb/dibusb-mc.c +++ b/drivers/media/usb/dvb-usb/dibusb-mc.c @@ -7,7 +7,7 @@ * based on GPL code from DiBcom, which has * Copyright (C) 2004 Amaury Demol for DiBcom * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "dibusb.h" diff --git a/drivers/media/usb/dvb-usb/dibusb.h b/drivers/media/usb/dvb-usb/dibusb.h index a83326c36ca7..f61de0744821 100644 --- a/drivers/media/usb/dvb-usb/dibusb.h +++ b/drivers/media/usb/dvb-usb/dibusb.h @@ -3,7 +3,7 @@ * * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de) * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #ifndef _DVB_USB_DIBUSB_H_ #define _DVB_USB_DIBUSB_H_ diff --git a/drivers/media/usb/dvb-usb/digitv.c b/drivers/media/usb/dvb-usb/digitv.c index 99a39339d45d..906438c5a40f 100644 --- a/drivers/media/usb/dvb-usb/digitv.c +++ b/drivers/media/usb/dvb-usb/digitv.c @@ -6,7 +6,7 @@ * * partly based on the SDK published by Nebula Electronics * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "digitv.h" diff --git a/drivers/media/usb/dvb-usb/dtt200u-fe.c b/drivers/media/usb/dvb-usb/dtt200u-fe.c index 00ce723c7bf0..9f83560ba63d 100644 --- a/drivers/media/usb/dvb-usb/dtt200u-fe.c +++ b/drivers/media/usb/dvb-usb/dtt200u-fe.c @@ -4,7 +4,7 @@ * * Copyright (C) 2005 Patrick Boettcher * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "dtt200u.h" diff --git a/drivers/media/usb/dvb-usb/dtt200u.c b/drivers/media/usb/dvb-usb/dtt200u.c index 1e7296b2e5b2..24efa023d827 100644 --- a/drivers/media/usb/dvb-usb/dtt200u.c +++ b/drivers/media/usb/dvb-usb/dtt200u.c @@ -6,7 +6,7 @@ * * Thanks to Steve Chang from WideView for providing support for the WT-220U. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "dtt200u.h" diff --git a/drivers/media/usb/dvb-usb/dtt200u.h b/drivers/media/usb/dvb-usb/dtt200u.h index 832f355114e4..696c2c1f3af3 100644 --- a/drivers/media/usb/dvb-usb/dtt200u.h +++ b/drivers/media/usb/dvb-usb/dtt200u.h @@ -4,7 +4,7 @@ * * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de) * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #ifndef _DVB_USB_DTT200U_H_ #define _DVB_USB_DTT200U_H_ diff --git a/drivers/media/usb/dvb-usb/dvb-usb-init.c b/drivers/media/usb/dvb-usb/dvb-usb-init.c index 16a0b4a359ea..46ada09ce38a 100644 --- a/drivers/media/usb/dvb-usb/dvb-usb-init.c +++ b/drivers/media/usb/dvb-usb/dvb-usb-init.c @@ -6,7 +6,7 @@ * * Copyright (C) 2004-6 Patrick Boettcher (patrick.boettcher@posteo.de) * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "dvb-usb-common.h" diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c index 1007366a295b..594a763b46cf 100644 --- a/drivers/media/usb/dvb-usb/dw2102.c +++ b/drivers/media/usb/dvb-usb/dw2102.c @@ -8,7 +8,7 @@ * Terratec Cinergy S2 cards * Copyright (C) 2008-2012 Igor M. Liplianin (liplianin@me.by) * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include #include "dw2102.h" diff --git a/drivers/media/usb/dvb-usb/gp8psk.c b/drivers/media/usb/dvb-usb/gp8psk.c index 1282f701f185..c07f46f5176e 100644 --- a/drivers/media/usb/dvb-usb/gp8psk.c +++ b/drivers/media/usb/dvb-usb/gp8psk.c @@ -9,7 +9,7 @@ * * This module is based off the vp7045 and vp702x modules * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "gp8psk.h" #include "gp8psk-fe.h" diff --git a/drivers/media/usb/dvb-usb/gp8psk.h b/drivers/media/usb/dvb-usb/gp8psk.h index 2f4c1368eabe..5293dfdd2609 100644 --- a/drivers/media/usb/dvb-usb/gp8psk.h +++ b/drivers/media/usb/dvb-usb/gp8psk.h @@ -9,7 +9,7 @@ * * This module is based off the vp7045 and vp702x modules * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #ifndef _DVB_USB_GP8PSK_H_ #define _DVB_USB_GP8PSK_H_ diff --git a/drivers/media/usb/dvb-usb/m920x.c b/drivers/media/usb/dvb-usb/m920x.c index d866a1990a7d..b8b99be5564b 100644 --- a/drivers/media/usb/dvb-usb/m920x.c +++ b/drivers/media/usb/dvb-usb/m920x.c @@ -3,7 +3,7 @@ * * Copyright (C) 2006 Aapo Tahkola (aet@rasterburn.org) * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "m920x.h" diff --git a/drivers/media/usb/dvb-usb/nova-t-usb2.c b/drivers/media/usb/dvb-usb/nova-t-usb2.c index e368935a5089..e7b290552b66 100644 --- a/drivers/media/usb/dvb-usb/nova-t-usb2.c +++ b/drivers/media/usb/dvb-usb/nova-t-usb2.c @@ -4,7 +4,7 @@ * * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de) * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "dibusb.h" diff --git a/drivers/media/usb/dvb-usb/opera1.c b/drivers/media/usb/dvb-usb/opera1.c index 823b33ae828d..e8d784b9d119 100644 --- a/drivers/media/usb/dvb-usb/opera1.c +++ b/drivers/media/usb/dvb-usb/opera1.c @@ -4,7 +4,7 @@ * Copyright (C) 2006 Mario Hlawitschka (dh1pa@amsat.org) * Copyright (C) 2006 Marco Gittler (g.marco@freenet.de) * -* see Documentation/media/dvb-drivers/dvb-usb.rst for more information +* see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #define DVB_USB_LOG_PREFIX "opera" diff --git a/drivers/media/usb/dvb-usb/ttusb2.c b/drivers/media/usb/dvb-usb/ttusb2.c index e12a5466b677..fd3e7312daef 100644 --- a/drivers/media/usb/dvb-usb/ttusb2.c +++ b/drivers/media/usb/dvb-usb/ttusb2.c @@ -17,7 +17,7 @@ * Copyright (c) 2003 Felix Domke * Copyright (C) 2005-6 Patrick Boettcher * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #define DVB_USB_LOG_PREFIX "ttusb2" #include "dvb-usb.h" diff --git a/drivers/media/usb/dvb-usb/ttusb2.h b/drivers/media/usb/dvb-usb/ttusb2.h index 8a3853cd6a26..b34c469d83f9 100644 --- a/drivers/media/usb/dvb-usb/ttusb2.h +++ b/drivers/media/usb/dvb-usb/ttusb2.h @@ -6,7 +6,7 @@ * Copyright (c) 2003 Felix Domke * Copyright (C) 2005-6 Patrick Boettcher * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #ifndef _DVB_USB_TTUSB2_H_ #define _DVB_USB_TTUSB2_H_ diff --git a/drivers/media/usb/dvb-usb/umt-010.c b/drivers/media/usb/dvb-usb/umt-010.c index a2101bd43349..2181993771ae 100644 --- a/drivers/media/usb/dvb-usb/umt-010.c +++ b/drivers/media/usb/dvb-usb/umt-010.c @@ -4,7 +4,7 @@ * * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@posteo.de) * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "dibusb.h" diff --git a/drivers/media/usb/dvb-usb/vp702x-fe.c b/drivers/media/usb/dvb-usb/vp702x-fe.c index 1c75a9c9dfca..c1e7931900ee 100644 --- a/drivers/media/usb/dvb-usb/vp702x-fe.c +++ b/drivers/media/usb/dvb-usb/vp702x-fe.c @@ -12,7 +12,7 @@ * This file can be removed soon, after the DST-driver is rewritten to provice * the frontend-controlling separately. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "vp702x.h" diff --git a/drivers/media/usb/dvb-usb/vp702x.c b/drivers/media/usb/dvb-usb/vp702x.c index 381b5c898a07..bf54747e2e01 100644 --- a/drivers/media/usb/dvb-usb/vp702x.c +++ b/drivers/media/usb/dvb-usb/vp702x.c @@ -9,7 +9,7 @@ * * Thanks to Twinhan who kindly provided hardware and information. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "vp702x.h" #include diff --git a/drivers/media/usb/dvb-usb/vp7045-fe.c b/drivers/media/usb/dvb-usb/vp7045-fe.c index d253307a35f8..e99740ec2650 100644 --- a/drivers/media/usb/dvb-usb/vp7045-fe.c +++ b/drivers/media/usb/dvb-usb/vp7045-fe.c @@ -6,7 +6,7 @@ * * Thanks to Twinhan who kindly provided hardware and information. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "vp7045.h" diff --git a/drivers/media/usb/dvb-usb/vp7045.c b/drivers/media/usb/dvb-usb/vp7045.c index 2baf57216d19..23e3a90af1f4 100644 --- a/drivers/media/usb/dvb-usb/vp7045.c +++ b/drivers/media/usb/dvb-usb/vp7045.c @@ -7,7 +7,7 @@ * * Thanks to Twinhan who kindly provided hardware and information. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #include "vp7045.h" diff --git a/drivers/media/usb/dvb-usb/vp7045.h b/drivers/media/usb/dvb-usb/vp7045.h index 818366746c41..1c8438f22b97 100644 --- a/drivers/media/usb/dvb-usb/vp7045.h +++ b/drivers/media/usb/dvb-usb/vp7045.h @@ -6,7 +6,7 @@ * * Thanks to Twinhan who kindly provided hardware and information. * - * see Documentation/media/dvb-drivers/dvb-usb.rst for more information + * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information */ #ifndef _DVB_USB_VP7045_H_ #define _DVB_USB_VP7045_H_ -- cgit v1.2.3 From 85f7cd3a2aadd3be9652ce105370f561ff755a26 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Tue, 14 Apr 2020 11:00:30 +0200 Subject: Revert "media: Kconfig: better support hybrid TV devices" Changing from "depends on" to "select" may cause some side-effects. This patch is not ready to be merged yet, as it requires some adjustments. So, let's revert it. This reverts commit a3b91d8bd1e034c8ed89d3f55243478af97a0a52. Signed-off-by: Mauro Carvalho Chehab --- drivers/media/Kconfig | 26 ++++++++++++++------------ drivers/media/pci/Kconfig | 10 ++-------- drivers/media/pci/bt8xx/Kconfig | 5 +++-- drivers/media/pci/cx18/Kconfig | 2 +- drivers/media/pci/cx23885/Kconfig | 4 ++-- drivers/media/pci/cx88/Kconfig | 4 ++-- drivers/media/pci/saa7134/Kconfig | 4 ++-- drivers/media/pci/saa7164/Kconfig | 2 +- drivers/media/platform/Kconfig | 2 +- drivers/media/usb/Kconfig | 8 +------- drivers/media/usb/au0828/Kconfig | 6 ++++-- drivers/media/usb/cx231xx/Kconfig | 4 ++-- drivers/media/usb/pvrusb2/Kconfig | 4 ++-- drivers/media/usb/tm6000/Kconfig | 4 ++-- 14 files changed, 39 insertions(+), 46 deletions(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig index 0972a42e7e0c..a8def1591352 100644 --- a/drivers/media/Kconfig +++ b/drivers/media/Kconfig @@ -77,7 +77,12 @@ config MEDIA_ANALOG_TV_SUPPORT help Enable analog TV support. - Say Y when you have a board with analog TV support. + Say Y when you have a TV board with analog support or with a + hybrid analog/digital TV chipset. + + Note: There are several DVB cards that are based on chips that + support both analog and digital TV. Disabling this option + will disable support for them. config MEDIA_DIGITAL_TV_SUPPORT bool @@ -86,7 +91,8 @@ config MEDIA_DIGITAL_TV_SUPPORT help Enable digital TV support. - Say Y when you have a board with digital TV support. + Say Y when you have a board with digital support or a board with + hybrid digital TV and analog TV. config MEDIA_RADIO_SUPPORT bool @@ -100,6 +106,10 @@ config MEDIA_RADIO_SUPPORT Say Y when you have a board with radio support. + Note: There are several TV cards that are based on chips that + support radio reception. Disabling this option will + disable support for them. + config MEDIA_SDR_SUPPORT bool prompt "Software defined radio" if MEDIA_SUPPORT_FILTER @@ -155,13 +165,9 @@ endmenu # media device types menu "Media core support" visible if !MEDIA_SUPPORT_FILTER -comment "Video4Linux core enabled to support hybrid TV devices" - depends on MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI - config VIDEO_DEV - tristate - prompt "Video4Linux core" if !(MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI) - default MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_RADIO_SUPPORT || MEDIA_SDR_SUPPORT || MEDIA_PLATFORM_SUPPORT || MEDIA_TEST_SUPPORT || MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI + tristate "Video4Linux core" + default MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_RADIO_SUPPORT || MEDIA_SDR_SUPPORT || MEDIA_PLATFORM_SUPPORT || MEDIA_TEST_SUPPORT help Enables the V4L2 API, used by cameras, analog TV, video grabbers, radio devices and by some input devices. @@ -180,12 +186,8 @@ config MEDIA_CONTROLLER # Only enables if one of DTV is selected # -comment "Digital TV core enabled to support hybrid TV devices" - depends on MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI - config DVB_CORE tristate - prompt "Digital TV core" if !(MEDIA_HYBRID_USB || MEDIA_HYBRID_PCI) depends on MEDIA_DIGITAL_TV_SUPPORT depends on (I2C || I2C=n) select CRC32 diff --git a/drivers/media/pci/Kconfig b/drivers/media/pci/Kconfig index 44f1efd21272..2cd8e328dda9 100644 --- a/drivers/media/pci/Kconfig +++ b/drivers/media/pci/Kconfig @@ -1,11 +1,5 @@ # SPDX-License-Identifier: GPL-2.0-only -# Should match the hybrid card list below -config MEDIA_HYBRID_PCI - bool - depends on VIDEO_CX18 || VIDEO_CX23885 || VIDEO_CX88 || VIDEO_BT848 || VIDEO_SAA7134 || VIDEO_SAA7164 - default y - if PCI menuconfig MEDIA_PCI_SUPPORT @@ -31,18 +25,18 @@ if MEDIA_ANALOG_TV_SUPPORT source "drivers/media/pci/ivtv/Kconfig" source "drivers/media/pci/saa7146/Kconfig" source "drivers/media/pci/dt3155/Kconfig" -source "drivers/media/pci/cx25821/Kconfig" -source "drivers/media/pci/cobalt/Kconfig" endif if MEDIA_ANALOG_TV_SUPPORT || MEDIA_DIGITAL_TV_SUPPORT comment "Media capture/analog/hybrid TV support" source "drivers/media/pci/cx18/Kconfig" source "drivers/media/pci/cx23885/Kconfig" +source "drivers/media/pci/cx25821/Kconfig" source "drivers/media/pci/cx88/Kconfig" source "drivers/media/pci/bt8xx/Kconfig" source "drivers/media/pci/saa7134/Kconfig" source "drivers/media/pci/saa7164/Kconfig" +source "drivers/media/pci/cobalt/Kconfig" endif diff --git a/drivers/media/pci/bt8xx/Kconfig b/drivers/media/pci/bt8xx/Kconfig index 30714c7319ac..3f56decbb681 100644 --- a/drivers/media/pci/bt8xx/Kconfig +++ b/drivers/media/pci/bt8xx/Kconfig @@ -1,10 +1,11 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_BT848 tristate "BT848 Video For Linux" - depends on PCI && I2C + depends on VIDEO_DEV && PCI && I2C && VIDEO_V4L2 select I2C_ALGOBIT select VIDEOBUF_DMA_SG depends on RC_CORE + depends on MEDIA_RADIO_SUPPORT select VIDEO_TUNER select VIDEO_TVEEPROM select VIDEO_MSP3400 if MEDIA_SUBDRV_AUTOSELECT @@ -23,7 +24,7 @@ config VIDEO_BT848 config DVB_BT8XX tristate "DVB/ATSC Support for bt878 based TV cards" - depends on PCI && I2C && VIDEO_BT848 + depends on DVB_CORE && PCI && I2C && VIDEO_BT848 select DVB_MT352 if MEDIA_SUBDRV_AUTOSELECT select DVB_SP887X if MEDIA_SUBDRV_AUTOSELECT select DVB_NXT6000 if MEDIA_SUBDRV_AUTOSELECT diff --git a/drivers/media/pci/cx18/Kconfig b/drivers/media/pci/cx18/Kconfig index 110e072bd8ba..7074a1071302 100644 --- a/drivers/media/pci/cx18/Kconfig +++ b/drivers/media/pci/cx18/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_CX18 tristate "Conexant cx23418 MPEG encoder support" - depends on PCI && I2C + depends on VIDEO_V4L2 && DVB_CORE && PCI && I2C select I2C_ALGOBIT select VIDEOBUF_VMALLOC depends on RC_CORE diff --git a/drivers/media/pci/cx23885/Kconfig b/drivers/media/pci/cx23885/Kconfig index e8f4edf270c8..926da881929d 100644 --- a/drivers/media/pci/cx23885/Kconfig +++ b/drivers/media/pci/cx23885/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_CX23885 tristate "Conexant cx23885 (2388x successor) support" - depends on PCI && I2C && INPUT && SND + depends on DVB_CORE && VIDEO_DEV && PCI && I2C && INPUT && SND select SND_PCM select I2C_ALGOBIT select VIDEO_TUNER @@ -53,7 +53,7 @@ config VIDEO_CX23885 config MEDIA_ALTERA_CI tristate "Altera FPGA based CI module" - depends on VIDEO_CX23885 + depends on VIDEO_CX23885 && DVB_CORE select ALTERA_STAPL help An Altera FPGA CI module for NetUP Dual DVB-T/C RF CI card. diff --git a/drivers/media/pci/cx88/Kconfig b/drivers/media/pci/cx88/Kconfig index ab994b3049f4..24e1e7c41744 100644 --- a/drivers/media/pci/cx88/Kconfig +++ b/drivers/media/pci/cx88/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_CX88 tristate "Conexant 2388x (bt878 successor) support" - depends on PCI && I2C && RC_CORE + depends on VIDEO_DEV && PCI && I2C && RC_CORE select I2C_ALGOBIT select VIDEOBUF2_DMA_SG select VIDEO_TUNER @@ -44,7 +44,7 @@ config VIDEO_CX88_BLACKBIRD config VIDEO_CX88_DVB tristate "DVB/ATSC Support for cx2388x based TV cards" - depends on VIDEO_CX88 + depends on VIDEO_CX88 && DVB_CORE select VIDEOBUF2_DVB select DVB_PLL if MEDIA_SUBDRV_AUTOSELECT select DVB_MT352 if MEDIA_SUBDRV_AUTOSELECT diff --git a/drivers/media/pci/saa7134/Kconfig b/drivers/media/pci/saa7134/Kconfig index a2af02f6d593..30c1759682a9 100644 --- a/drivers/media/pci/saa7134/Kconfig +++ b/drivers/media/pci/saa7134/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_SAA7134 tristate "Philips SAA7134 support" - depends on PCI && I2C + depends on VIDEO_DEV && PCI && I2C select VIDEOBUF2_DMA_SG select VIDEO_TUNER select VIDEO_TVEEPROM @@ -37,7 +37,7 @@ config VIDEO_SAA7134_RC config VIDEO_SAA7134_DVB tristate "DVB/ATSC Support for saa7134 based TV cards" - depends on VIDEO_SAA7134 + depends on VIDEO_SAA7134 && DVB_CORE select VIDEOBUF2_DVB select DVB_PLL if MEDIA_SUBDRV_AUTOSELECT select DVB_MT352 if MEDIA_SUBDRV_AUTOSELECT diff --git a/drivers/media/pci/saa7164/Kconfig b/drivers/media/pci/saa7164/Kconfig index 8df933a722a7..6655c3e504cd 100644 --- a/drivers/media/pci/saa7164/Kconfig +++ b/drivers/media/pci/saa7164/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_SAA7164 tristate "NXP SAA7164 support" - depends on PCI && I2C + depends on DVB_CORE && VIDEO_DEV && PCI && I2C select I2C_ALGOBIT select FW_LOADER select VIDEO_TUNER diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig index b8b2de5f1541..c11386bfc24b 100644 --- a/drivers/media/platform/Kconfig +++ b/drivers/media/platform/Kconfig @@ -543,7 +543,7 @@ config VIDEO_TI_CSC menuconfig DVB_PLATFORM_DRIVERS bool "DVB platform devices" - select DVB_CORE + depends on MEDIA_DIGITAL_TV_SUPPORT help Say Y here to enable support for platform-specific Digital TV drivers. diff --git a/drivers/media/usb/Kconfig b/drivers/media/usb/Kconfig index 036aa4385fdc..bf08393e38d1 100644 --- a/drivers/media/usb/Kconfig +++ b/drivers/media/usb/Kconfig @@ -5,12 +5,6 @@ config TTPCI_EEPROM tristate depends on I2C -# Should match the hybrid card list below -config MEDIA_HYBRID_USB - bool - depends on VIDEO_AU0828 || VIDEO_CX231XX || VIDEO_TM6000 || VIDEO_PVRUSB2 - default y - if USB && MEDIA_SUPPORT menuconfig MEDIA_USB_SUPPORT @@ -35,6 +29,7 @@ endif if MEDIA_ANALOG_TV_SUPPORT comment "Analog TV USB devices" +source "drivers/media/usb/pvrusb2/Kconfig" source "drivers/media/usb/hdpvr/Kconfig" source "drivers/media/usb/stk1160/Kconfig" source "drivers/media/usb/go7007/Kconfig" @@ -44,7 +39,6 @@ if (MEDIA_ANALOG_TV_SUPPORT || MEDIA_DIGITAL_TV_SUPPORT) comment "Analog/digital TV USB devices" source "drivers/media/usb/au0828/Kconfig" source "drivers/media/usb/cx231xx/Kconfig" -source "drivers/media/usb/pvrusb2/Kconfig" source "drivers/media/usb/tm6000/Kconfig" endif diff --git a/drivers/media/usb/au0828/Kconfig b/drivers/media/usb/au0828/Kconfig index 2f5ee684a278..05cc6c48c26f 100644 --- a/drivers/media/usb/au0828/Kconfig +++ b/drivers/media/usb/au0828/Kconfig @@ -2,12 +2,12 @@ config VIDEO_AU0828 tristate "Auvitek AU0828 support" - depends on I2C && INPUT && USB + depends on I2C && INPUT && DVB_CORE && USB && VIDEO_V4L2 select MEDIA_CONTROLLER select MEDIA_CONTROLLER_DVB select I2C_ALGOBIT select VIDEO_TVEEPROM - select VIDEOBUF2_VMALLOC + select VIDEOBUF2_VMALLOC if VIDEO_V4L2 select DVB_AU8522_DTV if MEDIA_SUBDRV_AUTOSELECT select MEDIA_TUNER_XC5000 if MEDIA_SUBDRV_AUTOSELECT select MEDIA_TUNER_MXL5007T if MEDIA_SUBDRV_AUTOSELECT @@ -22,6 +22,8 @@ config VIDEO_AU0828 config VIDEO_AU0828_V4L2 bool "Auvitek AU0828 v4l2 analog video support" depends on VIDEO_AU0828 + depends on VIDEO_V4L2=y || VIDEO_V4L2=VIDEO_AU0828 + select DVB_AU8522_V4L if MEDIA_SUBDRV_AUTOSELECT select VIDEO_TUNER default y help diff --git a/drivers/media/usb/cx231xx/Kconfig b/drivers/media/usb/cx231xx/Kconfig index 7e3b189f9dca..2fe2b2d335ba 100644 --- a/drivers/media/usb/cx231xx/Kconfig +++ b/drivers/media/usb/cx231xx/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_CX231XX tristate "Conexant cx231xx USB video capture support" - depends on I2C && I2C_MUX + depends on VIDEO_DEV && I2C && I2C_MUX select VIDEO_TUNER select VIDEO_TVEEPROM select VIDEOBUF2_VMALLOC @@ -40,7 +40,7 @@ config VIDEO_CX231XX_ALSA config VIDEO_CX231XX_DVB tristate "DVB/ATSC Support for Cx231xx based TV cards" - depends on VIDEO_CX231XX + depends on VIDEO_CX231XX && DVB_CORE select MEDIA_TUNER_XC5000 if MEDIA_SUBDRV_AUTOSELECT select MEDIA_TUNER_TDA18271 if MEDIA_SUBDRV_AUTOSELECT select DVB_MB86A20S if MEDIA_SUBDRV_AUTOSELECT diff --git a/drivers/media/usb/pvrusb2/Kconfig b/drivers/media/usb/pvrusb2/Kconfig index 5bf45f2b2517..e6a4f730591b 100644 --- a/drivers/media/usb/pvrusb2/Kconfig +++ b/drivers/media/usb/pvrusb2/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_PVRUSB2 tristate "Hauppauge WinTV-PVR USB2 support" - depends on I2C + depends on VIDEO_V4L2 && I2C select VIDEO_TUNER select VIDEO_TVEEPROM select VIDEO_CX2341X @@ -36,7 +36,7 @@ config VIDEO_PVRUSB2_SYSFS config VIDEO_PVRUSB2_DVB bool "pvrusb2 ATSC/DVB support" default y - depends on VIDEO_PVRUSB2 + depends on VIDEO_PVRUSB2 && DVB_CORE select DVB_LGDT330X if MEDIA_SUBDRV_AUTOSELECT select DVB_S5H1409 if MEDIA_SUBDRV_AUTOSELECT select DVB_S5H1411 if MEDIA_SUBDRV_AUTOSELECT diff --git a/drivers/media/usb/tm6000/Kconfig b/drivers/media/usb/tm6000/Kconfig index ad9cfa855eac..56e977deba81 100644 --- a/drivers/media/usb/tm6000/Kconfig +++ b/drivers/media/usb/tm6000/Kconfig @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only config VIDEO_TM6000 tristate "TV Master TM5600/6000/6010 driver" - depends on I2C && INPUT && RC_CORE && USB + depends on VIDEO_DEV && I2C && INPUT && RC_CORE && USB select VIDEO_TUNER select MEDIA_TUNER_XC2028 select MEDIA_TUNER_XC5000 @@ -28,7 +28,7 @@ config VIDEO_TM6000_ALSA config VIDEO_TM6000_DVB tristate "DVB Support for tm6000 based TV cards" - depends on VIDEO_TM6000 && USB + depends on VIDEO_TM6000 && DVB_CORE && USB select DVB_ZL10353 help This adds support for DVB cards based on the tm5600/tm6000 chip. -- cgit v1.2.3 From 286e78a9b508728604b40f39e0051d00f894a807 Mon Sep 17 00:00:00 2001 From: Wolfram Sang Date: Thu, 26 Mar 2020 22:09:41 +0100 Subject: media: pci: cx88: convert to use i2c_new_client_device() Move away from the deprecated API and make use of the fact that unregistering devices is NULL- and ERR_PTR-safe. Signed-off-by: Wolfram Sang Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/cx88/cx88-core.c | 3 +-- drivers/media/pci/cx88/cx88-input.c | 2 +- drivers/media/pci/cx88/cx88-video.c | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/pci/cx88/cx88-core.c b/drivers/media/pci/cx88/cx88-core.c index dcadf78657d6..48c8a3429542 100644 --- a/drivers/media/pci/cx88/cx88-core.c +++ b/drivers/media/pci/cx88/cx88-core.c @@ -1070,8 +1070,7 @@ void cx88_core_put(struct cx88_core *core, struct pci_dev *pci) mutex_lock(&devlist); cx88_ir_fini(core); if (core->i2c_rc == 0) { - if (core->i2c_rtc) - i2c_unregister_device(core->i2c_rtc); + i2c_unregister_device(core->i2c_rtc); i2c_del_adapter(&core->i2c_adap); } list_del(&core->devlist); diff --git a/drivers/media/pci/cx88/cx88-input.c b/drivers/media/pci/cx88/cx88-input.c index c7c2acd55266..7e0fed9cd200 100644 --- a/drivers/media/pci/cx88/cx88-input.c +++ b/drivers/media/pci/cx88/cx88-input.c @@ -638,7 +638,7 @@ void cx88_i2c_init_ir(struct cx88_core *core) I2C_SMBUS_READ, 0, I2C_SMBUS_QUICK, NULL) >= 0) { info.addr = *addrp; - i2c_new_device(&core->i2c_adap, &info); + i2c_new_client_device(&core->i2c_adap, &info); break; } } diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c index 6aabc45aa93c..ba0e9660a047 100644 --- a/drivers/media/pci/cx88/cx88-video.c +++ b/drivers/media/pci/cx88/cx88-video.c @@ -1385,7 +1385,7 @@ static int cx8800_initdev(struct pci_dev *pci_dev, }; request_module("rtc-isl1208"); - core->i2c_rtc = i2c_new_device(&core->i2c_adap, &rtc_info); + core->i2c_rtc = i2c_new_client_device(&core->i2c_adap, &rtc_info); } /* fall-through */ case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO: -- cgit v1.2.3 From b041cb6362db77bb60e9dda0b89ec653ed2cc4f0 Mon Sep 17 00:00:00 2001 From: Wolfram Sang Date: Thu, 26 Mar 2020 22:09:42 +0100 Subject: media: pci: saa7134: convert to use i2c_new_client_device() Move away from the deprecated API. Signed-off-by: Wolfram Sang Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/saa7134/saa7134-input.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/pci/saa7134/saa7134-input.c b/drivers/media/pci/saa7134/saa7134-input.c index 9aea7c30380b..8610eb473b39 100644 --- a/drivers/media/pci/saa7134/saa7134-input.c +++ b/drivers/media/pci/saa7134/saa7134-input.c @@ -982,7 +982,7 @@ void saa7134_probe_i2c_ir(struct saa7134_dev *dev) if (dev->init_data.name) info.platform_data = &dev->init_data; - i2c_new_device(&dev->i2c_adap, &info); + i2c_new_client_device(&dev->i2c_adap, &info); } static int saa7134_raw_decode_irq(struct saa7134_dev *dev) -- cgit v1.2.3 From 81118817c4ae31ad372f187f43b8c7fb2acea0d8 Mon Sep 17 00:00:00 2001 From: Brad Love Date: Thu, 14 Nov 2019 21:04:01 +0100 Subject: media: cx23885: Add analog frontend to Hauppauge QuadHD Add analog tuner frontend to 888 Hauppauge QuadHD boards Signed-off-by: Brad Love Signed-off-by: Sean Young Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/cx23885/cx23885-cards.c | 31 +++++++++++++++++++++++++++---- drivers/media/pci/cx23885/cx23885-dvb.c | 20 ++++++++++++++++++++ drivers/media/pci/cx23885/cx23885-video.c | 8 +++++++- 3 files changed, 54 insertions(+), 5 deletions(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c index 8e5a2c580821..266bd529017b 100644 --- a/drivers/media/pci/cx23885/cx23885-cards.c +++ b/drivers/media/pci/cx23885/cx23885-cards.c @@ -757,24 +757,47 @@ struct cx23885_board cx23885_boards[] = { } }, }, [CX23885_BOARD_HAUPPAUGE_QUADHD_DVB] = { - .name = "Hauppauge WinTV-QuadHD-DVB", + .name = "Hauppauge WinTV-QuadHD-DVB", + .porta = CX23885_ANALOG_VIDEO, .portb = CX23885_MPEG_DVB, .portc = CX23885_MPEG_DVB, + .tuner_type = TUNER_ABSENT, + .force_bff = 1, + .input = {{ + .type = CX23885_VMUX_TELEVISION, + .vmux = CX25840_VIN7_CH3 | + CX25840_VIN5_CH2 | + CX25840_VIN2_CH1 | + CX25840_DIF_ON, + .amux = CX25840_AUDIO8, + } }, }, [CX23885_BOARD_HAUPPAUGE_QUADHD_DVB_885] = { - .name = "Hauppauge WinTV-QuadHD-DVB(885)", + .name = "Hauppauge WinTV-QuadHD-DVB(885)", .portb = CX23885_MPEG_DVB, .portc = CX23885_MPEG_DVB, + .tuner_type = TUNER_ABSENT, }, [CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC] = { - .name = "Hauppauge WinTV-QuadHD-ATSC", + .name = "Hauppauge WinTV-QuadHD-ATSC", + .porta = CX23885_ANALOG_VIDEO, .portb = CX23885_MPEG_DVB, .portc = CX23885_MPEG_DVB, + .tuner_type = TUNER_ABSENT, + .input = {{ + .type = CX23885_VMUX_TELEVISION, + .vmux = CX25840_VIN7_CH3 | + CX25840_VIN5_CH2 | + CX25840_VIN2_CH1 | + CX25840_DIF_ON, + .amux = CX25840_AUDIO8, + } }, }, [CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC_885] = { - .name = "Hauppauge WinTV-QuadHD-ATSC(885)", + .name = "Hauppauge WinTV-QuadHD-ATSC(885)", .portb = CX23885_MPEG_DVB, .portc = CX23885_MPEG_DVB, + .tuner_type = TUNER_ABSENT, }, [CX23885_BOARD_HAUPPAUGE_HVR1265_K4] = { .name = "Hauppauge WinTV-HVR-1265(161111)", diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c index 494751a067a3..81058d300583 100644 --- a/drivers/media/pci/cx23885/cx23885-dvb.c +++ b/drivers/media/pci/cx23885/cx23885-dvb.c @@ -2367,6 +2367,16 @@ static int dvb_register(struct cx23885_tsport *port) goto frontend_detach; } port->i2c_client_tuner = client_tuner; + + /* we only attach tuner for analog on the 888 version */ + if (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_DVB) { + pr_info("%s(): QUADHD_DVB analog setup\n", + __func__); + dev->ts1.analog_fe.tuner_priv = client_tuner; + memcpy(&dev->ts1.analog_fe.ops.tuner_ops, + &fe0->dvb.frontend->ops.tuner_ops, + sizeof(struct dvb_tuner_ops)); + } break; /* port c - terrestrial/cable */ @@ -2456,6 +2466,16 @@ static int dvb_register(struct cx23885_tsport *port) goto frontend_detach; } port->i2c_client_tuner = client_tuner; + + /* we only attach tuner for analog on the 888 version */ + if (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC) { + pr_info("%s(): QUADHD_ATSC analog setup\n", + __func__); + dev->ts1.analog_fe.tuner_priv = client_tuner; + memcpy(&dev->ts1.analog_fe.ops.tuner_ops, + &fe0->dvb.frontend->ops.tuner_ops, + sizeof(struct dvb_tuner_ops)); + } break; /* port c - terrestrial/cable */ diff --git a/drivers/media/pci/cx23885/cx23885-video.c b/drivers/media/pci/cx23885/cx23885-video.c index 000c108b94fd..a2a1dd48e914 100644 --- a/drivers/media/pci/cx23885/cx23885-video.c +++ b/drivers/media/pci/cx23885/cx23885-video.c @@ -253,6 +253,8 @@ static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input) (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255) || (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255_22111) || (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1265_K4) || + (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC) || + (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_DVB) || (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1850) || (dev->board == CX23885_BOARD_MYGICA_X8507) || (dev->board == CX23885_BOARD_AVERMEDIA_HC81R) || @@ -996,7 +998,9 @@ static int cx23885_set_freq_via_ops(struct cx23885_dev *dev, if ((dev->board == CX23885_BOARD_HAUPPAUGE_HVR1850) || (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255) || (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255_22111) || - (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1265_K4)) + (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1265_K4) || + (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_DVB) || + (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC)) fe = &dev->ts1.analog_fe; if (fe && fe->ops.tuner_ops.set_analog_params) { @@ -1027,6 +1031,8 @@ int cx23885_set_frequency(struct file *file, void *priv, case CX23885_BOARD_HAUPPAUGE_HVR1255_22111: case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: case CX23885_BOARD_HAUPPAUGE_HVR1850: + case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: + case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: ret = cx23885_set_freq_via_ops(dev, f); break; default: -- cgit v1.2.3 From f8e76a5e26792fe1d4dd0afd706bbc17cb8b5ed8 Mon Sep 17 00:00:00 2001 From: Brad Love Date: Thu, 14 Nov 2019 21:04:02 +0100 Subject: media: cx23885: Add analog frontend to 1265_K4 Enables the analog tuning frontend for Hauppauge HVR-1265_K4. Signed-off-by: Brad Love Signed-off-by: Sean Young Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/cx23885/cx23885-cards.c | 8 +++++++- drivers/media/pci/cx23885/cx23885-dvb.c | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c index 266bd529017b..f1bd73eb44cb 100644 --- a/drivers/media/pci/cx23885/cx23885-cards.c +++ b/drivers/media/pci/cx23885/cx23885-cards.c @@ -804,8 +804,14 @@ struct cx23885_board cx23885_boards[] = { .porta = CX23885_ANALOG_VIDEO, .portc = CX23885_MPEG_DVB, .tuner_type = TUNER_ABSENT, - .force_bff = 1, .input = {{ + .type = CX23885_VMUX_TELEVISION, + .vmux = CX25840_VIN7_CH3 | + CX25840_VIN5_CH2 | + CX25840_VIN2_CH1 | + CX25840_DIF_ON, + .amux = CX25840_AUDIO8, + }, { .type = CX23885_VMUX_COMPOSITE1, .vmux = CX25840_VIN7_CH3 | CX25840_VIN4_CH2 | diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c index 81058d300583..7c2c8f15945d 100644 --- a/drivers/media/pci/cx23885/cx23885-dvb.c +++ b/drivers/media/pci/cx23885/cx23885-dvb.c @@ -2547,6 +2547,11 @@ static int dvb_register(struct cx23885_tsport *port) goto frontend_detach; } port->i2c_client_tuner = client_tuner; + + dev->ts1.analog_fe.tuner_priv = client_tuner; + memcpy(&dev->ts1.analog_fe.ops.tuner_ops, + &fe0->dvb.frontend->ops.tuner_ops, + sizeof(struct dvb_tuner_ops)); break; } break; -- cgit v1.2.3 From 2be355a08e191110237b9b908b8af1e3da573d9b Mon Sep 17 00:00:00 2001 From: Brad Love Date: Thu, 14 Nov 2019 21:04:03 +0100 Subject: media: cx23885: Add analog frontend to HVR5525 Enables the analog tuning frontend for Hauppauge HVR-5525. Signed-off-by: Brad Love Signed-off-by: Sean Young Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/cx23885/cx23885-cards.c | 12 ++++++++++++ drivers/media/pci/cx23885/cx23885-dvb.c | 6 ++++++ drivers/media/pci/cx23885/cx23885-video.c | 3 +++ 3 files changed, 21 insertions(+) (limited to 'drivers/media/pci') diff --git a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c index f1bd73eb44cb..570a4a09c387 100644 --- a/drivers/media/pci/cx23885/cx23885-cards.c +++ b/drivers/media/pci/cx23885/cx23885-cards.c @@ -703,8 +703,19 @@ struct cx23885_board cx23885_boards[] = { }, [CX23885_BOARD_HAUPPAUGE_HVR5525] = { .name = "Hauppauge WinTV-HVR5525", + .porta = CX23885_ANALOG_VIDEO, .portb = CX23885_MPEG_DVB, .portc = CX23885_MPEG_DVB, + .tuner_type = TUNER_ABSENT, + .force_bff = 1, + .input = {{ + .type = CX23885_VMUX_TELEVISION, + .vmux = CX25840_VIN7_CH3 | + CX25840_VIN5_CH2 | + CX25840_VIN2_CH1 | + CX25840_DIF_ON, + .amux = CX25840_AUDIO8, + } }, }, [CX23885_BOARD_VIEWCAST_260E] = { .name = "ViewCast 260e", @@ -2379,6 +2390,7 @@ void cx23885_card_setup(struct cx23885_dev *dev) case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: case CX23885_BOARD_HAUPPAUGE_HVR1270: case CX23885_BOARD_HAUPPAUGE_HVR1850: + case CX23885_BOARD_HAUPPAUGE_HVR5525: case CX23885_BOARD_MYGICA_X8506: case CX23885_BOARD_MAGICPRO_PROHDTVE2: case CX23885_BOARD_HAUPPAUGE_HVR1290: diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c index 7c2c8f15945d..45c2f4afceb8 100644 --- a/drivers/media/pci/cx23885/cx23885-dvb.c +++ b/drivers/media/pci/cx23885/cx23885-dvb.c @@ -2314,6 +2314,12 @@ static int dvb_register(struct cx23885_tsport *port) goto frontend_detach; } port->i2c_client_tuner = client_tuner; + + dev->ts1.analog_fe.tuner_priv = client_tuner; + memcpy(&dev->ts1.analog_fe.ops.tuner_ops, + &fe0->dvb.frontend->ops.tuner_ops, + sizeof(struct dvb_tuner_ops)); + break; } break; diff --git a/drivers/media/pci/cx23885/cx23885-video.c b/drivers/media/pci/cx23885/cx23885-video.c index a2a1dd48e914..3c1051ded9b5 100644 --- a/drivers/media/pci/cx23885/cx23885-video.c +++ b/drivers/media/pci/cx23885/cx23885-video.c @@ -256,6 +256,7 @@ static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input) (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC) || (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_DVB) || (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1850) || + (dev->board == CX23885_BOARD_HAUPPAUGE_HVR5525) || (dev->board == CX23885_BOARD_MYGICA_X8507) || (dev->board == CX23885_BOARD_AVERMEDIA_HC81R) || (dev->board == CX23885_BOARD_VIEWCAST_260E) || @@ -999,6 +1000,7 @@ static int cx23885_set_freq_via_ops(struct cx23885_dev *dev, (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255) || (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1255_22111) || (dev->board == CX23885_BOARD_HAUPPAUGE_HVR1265_K4) || + (dev->board == CX23885_BOARD_HAUPPAUGE_HVR5525) || (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_DVB) || (dev->board == CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC)) fe = &dev->ts1.analog_fe; @@ -1031,6 +1033,7 @@ int cx23885_set_frequency(struct file *file, void *priv, case CX23885_BOARD_HAUPPAUGE_HVR1255_22111: case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: case CX23885_BOARD_HAUPPAUGE_HVR1850: + case CX23885_BOARD_HAUPPAUGE_HVR5525: case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: ret = cx23885_set_freq_via_ops(dev, f); -- cgit v1.2.3 From fbc9a49cf2721ac78b964c3eef7566efc6f1db23 Mon Sep 17 00:00:00 2001 From: Brad Love Date: Thu, 14 Nov 2019 21:04:04 +0100 Subject: media: cx23885: Add i2c device analog tuner support Hauppauge QuadHD/1265/5525 boards all use i2c device drivers and have tuner_type equal TUNER_ABSENT. This means additional support is required to enable the analog tuning capability, a case statement is used to identify these models. Signed-off-by: Brad Love Signed-off-by: Sean Young Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/cx23885/cx23885-video.c | 88 ++++++++++++++++++++++++++----- 1 file changed, 76 insertions(+), 12 deletions(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/pci/cx23885/cx23885-video.c b/drivers/media/pci/cx23885/cx23885-video.c index 3c1051ded9b5..440d108b7ddd 100644 --- a/drivers/media/pci/cx23885/cx23885-video.c +++ b/drivers/media/pci/cx23885/cx23885-video.c @@ -639,8 +639,18 @@ static int vidioc_querycap(struct file *file, void *priv, V4L2_CAP_AUDIO | V4L2_CAP_VBI_CAPTURE | V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VBI_CAPTURE | V4L2_CAP_DEVICE_CAPS; - if (dev->tuner_type != TUNER_ABSENT) + switch (dev->board) { /* i2c device tuners */ + case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: + case CX23885_BOARD_HAUPPAUGE_HVR5525: + case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: + case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: cap->capabilities |= V4L2_CAP_TUNER; + break; + default: + if (dev->tuner_type != TUNER_ABSENT) + cap->capabilities |= V4L2_CAP_TUNER; + break; + } return 0; } @@ -886,8 +896,17 @@ static int vidioc_g_tuner(struct file *file, void *priv, { struct cx23885_dev *dev = video_drvdata(file); - if (dev->tuner_type == TUNER_ABSENT) - return -EINVAL; + switch (dev->board) { /* i2c device tuners */ + case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: + case CX23885_BOARD_HAUPPAUGE_HVR5525: + case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: + case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: + break; + default: + if (dev->tuner_type == TUNER_ABSENT) + return -EINVAL; + break; + } if (0 != t->index) return -EINVAL; @@ -902,8 +921,17 @@ static int vidioc_s_tuner(struct file *file, void *priv, { struct cx23885_dev *dev = video_drvdata(file); - if (dev->tuner_type == TUNER_ABSENT) - return -EINVAL; + switch (dev->board) { /* i2c device tuners */ + case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: + case CX23885_BOARD_HAUPPAUGE_HVR5525: + case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: + case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: + break; + default: + if (dev->tuner_type == TUNER_ABSENT) + return -EINVAL; + break; + } if (0 != t->index) return -EINVAL; /* Update the A/V core */ @@ -917,9 +945,17 @@ static int vidioc_g_frequency(struct file *file, void *priv, { struct cx23885_dev *dev = video_drvdata(file); - if (dev->tuner_type == TUNER_ABSENT) - return -EINVAL; - + switch (dev->board) { /* i2c device tuners */ + case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: + case CX23885_BOARD_HAUPPAUGE_HVR5525: + case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: + case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: + break; + default: + if (dev->tuner_type == TUNER_ABSENT) + return -EINVAL; + break; + } f->type = V4L2_TUNER_ANALOG_TV; f->frequency = dev->freq; @@ -933,8 +969,17 @@ static int cx23885_set_freq(struct cx23885_dev *dev, const struct v4l2_frequency struct v4l2_ctrl *mute; int old_mute_val = 1; - if (dev->tuner_type == TUNER_ABSENT) - return -EINVAL; + switch (dev->board) { /* i2c device tuners */ + case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: + case CX23885_BOARD_HAUPPAUGE_HVR5525: + case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: + case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: + break; + default: + if (dev->tuner_type == TUNER_ABSENT) + return -EINVAL; + break; + } if (unlikely(f->tuner != 0)) return -EINVAL; @@ -1311,8 +1356,18 @@ int cx23885_video_register(struct cx23885_dev *dev) dev->video_dev->queue = &dev->vb2_vidq; dev->video_dev->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_STREAMING | V4L2_CAP_AUDIO | V4L2_CAP_VIDEO_CAPTURE; - if (dev->tuner_type != TUNER_ABSENT) + switch (dev->board) { /* i2c device tuners */ + case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: + case CX23885_BOARD_HAUPPAUGE_HVR5525: + case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: + case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: dev->video_dev->device_caps |= V4L2_CAP_TUNER; + break; + default: + if (dev->tuner_type != TUNER_ABSENT) + dev->video_dev->device_caps |= V4L2_CAP_TUNER; + } + err = video_register_device(dev->video_dev, VFL_TYPE_VIDEO, video_nr[dev->nr]); if (err < 0) { @@ -1329,8 +1384,17 @@ int cx23885_video_register(struct cx23885_dev *dev) dev->vbi_dev->queue = &dev->vb2_vbiq; dev->vbi_dev->device_caps = V4L2_CAP_READWRITE | V4L2_CAP_STREAMING | V4L2_CAP_AUDIO | V4L2_CAP_VBI_CAPTURE; - if (dev->tuner_type != TUNER_ABSENT) + switch (dev->board) { /* i2c device tuners */ + case CX23885_BOARD_HAUPPAUGE_HVR1265_K4: + case CX23885_BOARD_HAUPPAUGE_HVR5525: + case CX23885_BOARD_HAUPPAUGE_QUADHD_DVB: + case CX23885_BOARD_HAUPPAUGE_QUADHD_ATSC: dev->vbi_dev->device_caps |= V4L2_CAP_TUNER; + break; + default: + if (dev->tuner_type != TUNER_ABSENT) + dev->vbi_dev->device_caps |= V4L2_CAP_TUNER; + } err = video_register_device(dev->vbi_dev, VFL_TYPE_VBI, vbi_nr[dev->nr]); if (err < 0) { -- cgit v1.2.3 From b72f14ee7eb3e9e2f8a9c4cb807a1ec749a4c022 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Tue, 21 Apr 2020 15:57:39 +0200 Subject: media: pci: Fill v4l2_fmtdesc with designated initializers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace initialization of static const v4l2_fmtdesc instances that specify every struct member with designated initializers. This allows not zeroing the reserved fields explicitly, and will avoid a need to patch these drivers every time a reserved field is repurposed. Signed-off-by: Laurent Pinchart Reviewed-by: Niklas Söderlund Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/cx18/cx18-ioctl.c | 22 ++++++++++++++++------ drivers/media/pci/ivtv/ivtv-ioctl.c | 26 ++++++++++++++------------ 2 files changed, 30 insertions(+), 18 deletions(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/pci/cx18/cx18-ioctl.c b/drivers/media/pci/cx18/cx18-ioctl.c index fa57e12f2ac8..4864def20676 100644 --- a/drivers/media/pci/cx18/cx18-ioctl.c +++ b/drivers/media/pci/cx18/cx18-ioctl.c @@ -466,14 +466,24 @@ static int cx18_enum_fmt_vid_cap(struct file *file, void *fh, struct v4l2_fmtdesc *fmt) { static const struct v4l2_fmtdesc formats[] = { - { 0, V4L2_BUF_TYPE_VIDEO_CAPTURE, 0, - "HM12 (YUV 4:1:1)", V4L2_PIX_FMT_HM12, { 0, 0, 0, 0 } + { + .index = 0, + .type = V4L2_BUF_TYPE_VIDEO_CAPTURE, + .description = "HM12 (YUV 4:1:1)", + .pixelformat = V4L2_PIX_FMT_HM12, }, - { 1, V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FMT_FLAG_COMPRESSED, - "MPEG", V4L2_PIX_FMT_MPEG, { 0, 0, 0, 0 } + { + .index = 1, + .type = V4L2_BUF_TYPE_VIDEO_CAPTURE, + .flags = V4L2_FMT_FLAG_COMPRESSED, + .description = "MPEG", + .pixelformat = V4L2_PIX_FMT_MPEG, }, - { 2, V4L2_BUF_TYPE_VIDEO_CAPTURE, 0, - "UYVY 4:2:2", V4L2_PIX_FMT_UYVY, { 0, 0, 0, 0 } + { + .index = 2, + .type = V4L2_BUF_TYPE_VIDEO_CAPTURE, + .description = "UYVY 4:2:2", + .pixelformat = V4L2_PIX_FMT_UYVY, }, }; diff --git a/drivers/media/pci/ivtv/ivtv-ioctl.c b/drivers/media/pci/ivtv/ivtv-ioctl.c index 137853944e46..35dccb31174c 100644 --- a/drivers/media/pci/ivtv/ivtv-ioctl.c +++ b/drivers/media/pci/ivtv/ivtv-ioctl.c @@ -920,14 +920,15 @@ static int ivtv_g_selection(struct file *file, void *fh, static int ivtv_enum_fmt_vid_cap(struct file *file, void *fh, struct v4l2_fmtdesc *fmt) { static const struct v4l2_fmtdesc hm12 = { - 0, V4L2_BUF_TYPE_VIDEO_CAPTURE, 0, - "HM12 (YUV 4:2:0)", V4L2_PIX_FMT_HM12, - { 0, 0, 0, 0 } + .type = V4L2_BUF_TYPE_VIDEO_CAPTURE, + .description = "HM12 (YUV 4:2:0)", + .pixelformat = V4L2_PIX_FMT_HM12, }; static const struct v4l2_fmtdesc mpeg = { - 0, V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FMT_FLAG_COMPRESSED, - "MPEG", V4L2_PIX_FMT_MPEG, - { 0, 0, 0, 0 } + .type = V4L2_BUF_TYPE_VIDEO_CAPTURE, + .flags = V4L2_FMT_FLAG_COMPRESSED, + .description = "MPEG", + .pixelformat = V4L2_PIX_FMT_MPEG, }; struct ivtv *itv = fh2id(fh)->itv; struct ivtv_stream *s = &itv->streams[fh2id(fh)->type]; @@ -946,14 +947,15 @@ static int ivtv_enum_fmt_vid_cap(struct file *file, void *fh, struct v4l2_fmtdes static int ivtv_enum_fmt_vid_out(struct file *file, void *fh, struct v4l2_fmtdesc *fmt) { static const struct v4l2_fmtdesc hm12 = { - 0, V4L2_BUF_TYPE_VIDEO_OUTPUT, 0, - "HM12 (YUV 4:2:0)", V4L2_PIX_FMT_HM12, - { 0, 0, 0, 0 } + .type = V4L2_BUF_TYPE_VIDEO_OUTPUT, + .description = "HM12 (YUV 4:2:0)", + .pixelformat = V4L2_PIX_FMT_HM12, }; static const struct v4l2_fmtdesc mpeg = { - 0, V4L2_BUF_TYPE_VIDEO_OUTPUT, V4L2_FMT_FLAG_COMPRESSED, - "MPEG", V4L2_PIX_FMT_MPEG, - { 0, 0, 0, 0 } + .type = V4L2_BUF_TYPE_VIDEO_OUTPUT, + .flags = V4L2_FMT_FLAG_COMPRESSED, + .description = "MPEG", + .pixelformat = V4L2_PIX_FMT_MPEG, }; struct ivtv *itv = fh2id(fh)->itv; struct ivtv_stream *s = &itv->streams[fh2id(fh)->type]; -- cgit v1.2.3 From 77d30eab04485a5996feb48d4e07cb72fbaccadb Mon Sep 17 00:00:00 2001 From: Colin Ian King Date: Thu, 7 May 2020 23:43:31 +0200 Subject: media: mantis_dvb: remove redundant initialization to variable result The variable result is being initialized with a value that is never read and it is being updated later with a new value. The initialization is redundant and can be removed. Addresses-Coverity: ("Unused value") Signed-off-by: Colin Ian King Signed-off-by: Sean Young Signed-off-by: Mauro Carvalho Chehab --- drivers/media/pci/mantis/mantis_dvb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/media/pci') diff --git a/drivers/media/pci/mantis/mantis_dvb.c b/drivers/media/pci/mantis/mantis_dvb.c index e78ca1f26e68..2da94be5b373 100644 --- a/drivers/media/pci/mantis/mantis_dvb.c +++ b/drivers/media/pci/mantis/mantis_dvb.c @@ -135,7 +135,7 @@ static int mantis_dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed) int mantis_dvb_init(struct mantis_pci *mantis) { struct mantis_hwconfig *config = mantis->hwconfig; - int result = -1; + int result; dprintk(MANTIS_DEBUG, 1, "dvb_register_adapter"); -- cgit v1.2.3