Commit 224b6642 authored by Antti Palosaari's avatar Antti Palosaari Committed by Mauro Carvalho Chehab

[media] add DTMB support for DVB API

Cc: Patrick Boettcher <pboettcher@kernellabs.com>
Cc: Andreas Oberritter <obi@linuxtv.org>
Cc: Mauro Carvalho Chehab <mchehab@redhat.com>
Acked-by: default avatarPatrick Boettcher <pboettcher@kernellabs.com>
Signed-off-by: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 991452a2
...@@ -194,6 +194,7 @@ get/set up to 64 properties. The actual meaning of each property is described on ...@@ -194,6 +194,7 @@ get/set up to 64 properties. The actual meaning of each property is described on
APSK_16, APSK_16,
APSK_32, APSK_32,
DQPSK, DQPSK,
QAM_4_NR,
} fe_modulation_t; } fe_modulation_t;
</programlisting> </programlisting>
</section> </section>
...@@ -265,6 +266,7 @@ typedef enum fe_code_rate { ...@@ -265,6 +266,7 @@ typedef enum fe_code_rate {
FEC_AUTO, FEC_AUTO,
FEC_3_5, FEC_3_5,
FEC_9_10, FEC_9_10,
FEC_2_5,
} fe_code_rate_t; } fe_code_rate_t;
</programlisting> </programlisting>
<para>which correspond to error correction rates of 1/2, 2/3, etc., <para>which correspond to error correction rates of 1/2, 2/3, etc.,
...@@ -351,7 +353,7 @@ typedef enum fe_delivery_system { ...@@ -351,7 +353,7 @@ typedef enum fe_delivery_system {
SYS_ISDBC, SYS_ISDBC,
SYS_ATSC, SYS_ATSC,
SYS_ATSCMH, SYS_ATSCMH,
SYS_DMBTH, SYS_DTMB,
SYS_CMMB, SYS_CMMB,
SYS_DAB, SYS_DAB,
SYS_DVBT2, SYS_DVBT2,
...@@ -735,6 +737,9 @@ typedef enum fe_guard_interval { ...@@ -735,6 +737,9 @@ typedef enum fe_guard_interval {
GUARD_INTERVAL_1_128, GUARD_INTERVAL_1_128,
GUARD_INTERVAL_19_128, GUARD_INTERVAL_19_128,
GUARD_INTERVAL_19_256, GUARD_INTERVAL_19_256,
GUARD_INTERVAL_PN420,
GUARD_INTERVAL_PN595,
GUARD_INTERVAL_PN945,
} fe_guard_interval_t; } fe_guard_interval_t;
</programlisting> </programlisting>
...@@ -743,6 +748,7 @@ typedef enum fe_guard_interval { ...@@ -743,6 +748,7 @@ typedef enum fe_guard_interval {
try to find the correct guard interval (if capable) and will use TMCC to fill try to find the correct guard interval (if capable) and will use TMCC to fill
in the missing parameters.</para> in the missing parameters.</para>
<para>2) Intervals 1/128, 19/128 and 19/256 are used only for DVB-T2 at present</para> <para>2) Intervals 1/128, 19/128 and 19/256 are used only for DVB-T2 at present</para>
<para>3) DTMB specifies PN420, PN595 and PN945.</para>
</section> </section>
<section id="DTV-TRANSMISSION-MODE"> <section id="DTV-TRANSMISSION-MODE">
<title><constant>DTV_TRANSMISSION_MODE</constant></title> <title><constant>DTV_TRANSMISSION_MODE</constant></title>
...@@ -759,6 +765,8 @@ typedef enum fe_transmit_mode { ...@@ -759,6 +765,8 @@ typedef enum fe_transmit_mode {
TRANSMISSION_MODE_1K, TRANSMISSION_MODE_1K,
TRANSMISSION_MODE_16K, TRANSMISSION_MODE_16K,
TRANSMISSION_MODE_32K, TRANSMISSION_MODE_32K,
TRANSMISSION_MODE_C1,
TRANSMISSION_MODE_C3780,
} fe_transmit_mode_t; } fe_transmit_mode_t;
</programlisting> </programlisting>
<para>Notes:</para> <para>Notes:</para>
...@@ -770,6 +778,7 @@ typedef enum fe_transmit_mode { ...@@ -770,6 +778,7 @@ typedef enum fe_transmit_mode {
use TMCC to fill in the missing parameters.</para> use TMCC to fill in the missing parameters.</para>
<para>3) DVB-T specifies 2K and 8K as valid sizes.</para> <para>3) DVB-T specifies 2K and 8K as valid sizes.</para>
<para>4) DVB-T2 specifies 1K, 2K, 4K, 8K, 16K and 32K.</para> <para>4) DVB-T2 specifies 1K, 2K, 4K, 8K, 16K and 32K.</para>
<para>5) DTMB specifies C1 and C3780.</para>
</section> </section>
<section id="DTV-HIERARCHY"> <section id="DTV-HIERARCHY">
<title><constant>DTV_HIERARCHY</constant></title> <title><constant>DTV_HIERARCHY</constant></title>
...@@ -806,6 +815,17 @@ typedef enum fe_hierarchy { ...@@ -806,6 +815,17 @@ typedef enum fe_hierarchy {
FE_GET_INFO. In the case of a legacy frontend, the result is just the same FE_GET_INFO. In the case of a legacy frontend, the result is just the same
as with FE_GET_INFO, but in a more structured format </para> as with FE_GET_INFO, but in a more structured format </para>
</section> </section>
<section id="DTV-INTERLEAVING">
<title><constant>DTV_INTERLEAVING</constant></title>
<para>Interleaving mode</para>
<programlisting>
enum fe_interleaving {
INTERLEAVING_NONE,
INTERLEAVING_240,
INTERLEAVING_720,
};
</programlisting>
</section>
</section> </section>
<section id="frontend-property-terrestrial-systems"> <section id="frontend-property-terrestrial-systems">
<title>Properties used on terrestrial delivery systems</title> <title>Properties used on terrestrial delivery systems</title>
...@@ -944,6 +964,24 @@ typedef enum fe_hierarchy { ...@@ -944,6 +964,24 @@ typedef enum fe_hierarchy {
<listitem><para><link linkend="DTV-ATSCMH-SCCC-CODE-MODE-D"><constant>DTV_ATSCMH_SCCC_CODE_MODE_D</constant></link></para></listitem> <listitem><para><link linkend="DTV-ATSCMH-SCCC-CODE-MODE-D"><constant>DTV_ATSCMH_SCCC_CODE_MODE_D</constant></link></para></listitem>
</itemizedlist> </itemizedlist>
</section> </section>
<section id="dtmb-params">
<title>DTMB delivery system</title>
<para>The following parameters are valid for DTMB:</para>
<itemizedlist mark='opencircle'>
<listitem><para><link linkend="DTV-API-VERSION"><constant>DTV_API_VERSION</constant></link></para></listitem>
<listitem><para><link linkend="DTV-DELIVERY-SYSTEM"><constant>DTV_DELIVERY_SYSTEM</constant></link></para></listitem>
<listitem><para><link linkend="DTV-TUNE"><constant>DTV_TUNE</constant></link></para></listitem>
<listitem><para><link linkend="DTV-CLEAR"><constant>DTV_CLEAR</constant></link></para></listitem>
<listitem><para><link linkend="DTV-FREQUENCY"><constant>DTV_FREQUENCY</constant></link></para></listitem>
<listitem><para><link linkend="DTV-MODULATION"><constant>DTV_MODULATION</constant></link></para></listitem>
<listitem><para><link linkend="DTV-BANDWIDTH-HZ"><constant>DTV_BANDWIDTH_HZ</constant></link></para></listitem>
<listitem><para><link linkend="DTV-INVERSION"><constant>DTV_INVERSION</constant></link></para></listitem>
<listitem><para><link linkend="DTV-INNER-FEC"><constant>DTV_INNER_FEC</constant></link></para></listitem>
<listitem><para><link linkend="DTV-GUARD-INTERVAL"><constant>DTV_GUARD_INTERVAL</constant></link></para></listitem>
<listitem><para><link linkend="DTV-TRANSMISSION-MODE"><constant>DTV_TRANSMISSION_MODE</constant></link></para></listitem>
<listitem><para><link linkend="DTV-INTERLEAVING"><constant>DTV_INTERLEAVING</constant></link></para></listitem>
</itemizedlist>
</section>
</section> </section>
<section id="frontend-property-cable-systems"> <section id="frontend-property-cable-systems">
<title>Properties used on cable delivery systems</title> <title>Properties used on cable delivery systems</title>
......
...@@ -179,7 +179,7 @@ static enum dvbv3_emulation_type dvbv3_type(u32 delivery_system) ...@@ -179,7 +179,7 @@ static enum dvbv3_emulation_type dvbv3_type(u32 delivery_system)
case SYS_DVBT: case SYS_DVBT:
case SYS_DVBT2: case SYS_DVBT2:
case SYS_ISDBT: case SYS_ISDBT:
case SYS_DMBTH: case SYS_DTMB:
return DVBV3_OFDM; return DVBV3_OFDM;
case SYS_ATSC: case SYS_ATSC:
case SYS_ATSCMH: case SYS_ATSCMH:
...@@ -997,6 +997,7 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = { ...@@ -997,6 +997,7 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = {
_DTV_CMD(DTV_CODE_RATE_LP, 1, 0), _DTV_CMD(DTV_CODE_RATE_LP, 1, 0),
_DTV_CMD(DTV_GUARD_INTERVAL, 1, 0), _DTV_CMD(DTV_GUARD_INTERVAL, 1, 0),
_DTV_CMD(DTV_TRANSMISSION_MODE, 1, 0), _DTV_CMD(DTV_TRANSMISSION_MODE, 1, 0),
_DTV_CMD(DTV_INTERLEAVING, 1, 0),
_DTV_CMD(DTV_ISDBT_PARTIAL_RECEPTION, 1, 0), _DTV_CMD(DTV_ISDBT_PARTIAL_RECEPTION, 1, 0),
_DTV_CMD(DTV_ISDBT_SOUND_BROADCASTING, 1, 0), _DTV_CMD(DTV_ISDBT_SOUND_BROADCASTING, 1, 0),
...@@ -1028,6 +1029,7 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = { ...@@ -1028,6 +1029,7 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = {
_DTV_CMD(DTV_GUARD_INTERVAL, 0, 0), _DTV_CMD(DTV_GUARD_INTERVAL, 0, 0),
_DTV_CMD(DTV_TRANSMISSION_MODE, 0, 0), _DTV_CMD(DTV_TRANSMISSION_MODE, 0, 0),
_DTV_CMD(DTV_HIERARCHY, 0, 0), _DTV_CMD(DTV_HIERARCHY, 0, 0),
_DTV_CMD(DTV_INTERLEAVING, 0, 0),
_DTV_CMD(DTV_ENUM_DELSYS, 0, 0), _DTV_CMD(DTV_ENUM_DELSYS, 0, 0),
...@@ -1326,6 +1328,9 @@ static int dtv_property_process_get(struct dvb_frontend *fe, ...@@ -1326,6 +1328,9 @@ static int dtv_property_process_get(struct dvb_frontend *fe,
case DTV_HIERARCHY: case DTV_HIERARCHY:
tvp->u.data = c->hierarchy; tvp->u.data = c->hierarchy;
break; break;
case DTV_INTERLEAVING:
tvp->u.data = c->interleaving;
break;
/* ISDB-T Support here */ /* ISDB-T Support here */
case DTV_ISDBT_PARTIAL_RECEPTION: case DTV_ISDBT_PARTIAL_RECEPTION:
...@@ -1593,7 +1598,7 @@ static int set_delivery_system(struct dvb_frontend *fe, u32 desired_system) ...@@ -1593,7 +1598,7 @@ static int set_delivery_system(struct dvb_frontend *fe, u32 desired_system)
* The DVBv3 or DVBv5 call is requesting a different system. So, * The DVBv3 or DVBv5 call is requesting a different system. So,
* emulation is needed. * emulation is needed.
* *
* Emulate newer delivery systems like ISDBT, DVBT and DMBTH * Emulate newer delivery systems like ISDBT, DVBT and DTMB
* for older DVBv5 applications. The emulation will try to use * for older DVBv5 applications. The emulation will try to use
* the auto mode for most things, and will assume that the desired * the auto mode for most things, and will assume that the desired
* delivery system is the last one at the ops.delsys[] array * delivery system is the last one at the ops.delsys[] array
...@@ -1715,6 +1720,9 @@ static int dtv_property_process_set(struct dvb_frontend *fe, ...@@ -1715,6 +1720,9 @@ static int dtv_property_process_set(struct dvb_frontend *fe,
case DTV_HIERARCHY: case DTV_HIERARCHY:
c->hierarchy = tvp->u.data; c->hierarchy = tvp->u.data;
break; break;
case DTV_INTERLEAVING:
c->interleaving = tvp->u.data;
break;
/* ISDB-T Support here */ /* ISDB-T Support here */
case DTV_ISDBT_PARTIAL_RECEPTION: case DTV_ISDBT_PARTIAL_RECEPTION:
...@@ -2012,7 +2020,7 @@ static int dtv_set_frontend(struct dvb_frontend *fe) ...@@ -2012,7 +2020,7 @@ static int dtv_set_frontend(struct dvb_frontend *fe)
case SYS_DVBT: case SYS_DVBT:
case SYS_DVBT2: case SYS_DVBT2:
case SYS_ISDBT: case SYS_ISDBT:
case SYS_DMBTH: case SYS_DTMB:
fepriv->min_delay = HZ / 20; fepriv->min_delay = HZ / 20;
fepriv->step_size = fe->ops.info.frequency_stepsize * 2; fepriv->step_size = fe->ops.info.frequency_stepsize * 2;
fepriv->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1; fepriv->max_drift = (fe->ops.info.frequency_stepsize * 2) + 1;
......
...@@ -354,6 +354,8 @@ struct dtv_frontend_properties { ...@@ -354,6 +354,8 @@ struct dtv_frontend_properties {
fe_delivery_system_t delivery_system; fe_delivery_system_t delivery_system;
enum fe_interleaving interleaving;
/* ISDB-T specifics */ /* ISDB-T specifics */
u8 isdbt_partial_reception; u8 isdbt_partial_reception;
u8 isdbt_sb_mode; u8 isdbt_sb_mode;
......
...@@ -428,7 +428,7 @@ static int atbm8830_i2c_gate_ctrl(struct dvb_frontend *fe, int enable) ...@@ -428,7 +428,7 @@ static int atbm8830_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
} }
static struct dvb_frontend_ops atbm8830_ops = { static struct dvb_frontend_ops atbm8830_ops = {
.delsys = { SYS_DMBTH }, .delsys = { SYS_DTMB },
.info = { .info = {
.name = "AltoBeam ATBM8830/8831 DMB-TH", .name = "AltoBeam ATBM8830/8831 DMB-TH",
.frequency_min = 474000000, .frequency_min = 474000000,
......
...@@ -412,7 +412,7 @@ EXPORT_SYMBOL(lgs8gl5_attach); ...@@ -412,7 +412,7 @@ EXPORT_SYMBOL(lgs8gl5_attach);
static struct dvb_frontend_ops lgs8gl5_ops = { static struct dvb_frontend_ops lgs8gl5_ops = {
.delsys = { SYS_DMBTH }, .delsys = { SYS_DTMB },
.info = { .info = {
.name = "Legend Silicon LGS-8GL5 DMB-TH", .name = "Legend Silicon LGS-8GL5 DMB-TH",
.frequency_min = 474000000, .frequency_min = 474000000,
......
...@@ -995,7 +995,7 @@ static int lgs8gxx_i2c_gate_ctrl(struct dvb_frontend *fe, int enable) ...@@ -995,7 +995,7 @@ static int lgs8gxx_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
} }
static struct dvb_frontend_ops lgs8gxx_ops = { static struct dvb_frontend_ops lgs8gxx_ops = {
.delsys = { SYS_DMBTH }, .delsys = { SYS_DTMB },
.info = { .info = {
.name = "Legend Silicon LGS8913/LGS8GXX DMB-TH", .name = "Legend Silicon LGS8913/LGS8GXX DMB-TH",
.frequency_min = 474000000, .frequency_min = 474000000,
......
...@@ -152,6 +152,7 @@ typedef enum fe_code_rate { ...@@ -152,6 +152,7 @@ typedef enum fe_code_rate {
FEC_AUTO, FEC_AUTO,
FEC_3_5, FEC_3_5,
FEC_9_10, FEC_9_10,
FEC_2_5,
} fe_code_rate_t; } fe_code_rate_t;
...@@ -169,6 +170,7 @@ typedef enum fe_modulation { ...@@ -169,6 +170,7 @@ typedef enum fe_modulation {
APSK_16, APSK_16,
APSK_32, APSK_32,
DQPSK, DQPSK,
QAM_4_NR,
} fe_modulation_t; } fe_modulation_t;
typedef enum fe_transmit_mode { typedef enum fe_transmit_mode {
...@@ -179,6 +181,8 @@ typedef enum fe_transmit_mode { ...@@ -179,6 +181,8 @@ typedef enum fe_transmit_mode {
TRANSMISSION_MODE_1K, TRANSMISSION_MODE_1K,
TRANSMISSION_MODE_16K, TRANSMISSION_MODE_16K,
TRANSMISSION_MODE_32K, TRANSMISSION_MODE_32K,
TRANSMISSION_MODE_C1,
TRANSMISSION_MODE_C3780,
} fe_transmit_mode_t; } fe_transmit_mode_t;
#if defined(__DVB_CORE__) || !defined (__KERNEL__) #if defined(__DVB_CORE__) || !defined (__KERNEL__)
...@@ -202,6 +206,9 @@ typedef enum fe_guard_interval { ...@@ -202,6 +206,9 @@ typedef enum fe_guard_interval {
GUARD_INTERVAL_1_128, GUARD_INTERVAL_1_128,
GUARD_INTERVAL_19_128, GUARD_INTERVAL_19_128,
GUARD_INTERVAL_19_256, GUARD_INTERVAL_19_256,
GUARD_INTERVAL_PN420,
GUARD_INTERVAL_PN595,
GUARD_INTERVAL_PN945,
} fe_guard_interval_t; } fe_guard_interval_t;
...@@ -213,6 +220,11 @@ typedef enum fe_hierarchy { ...@@ -213,6 +220,11 @@ typedef enum fe_hierarchy {
HIERARCHY_AUTO HIERARCHY_AUTO
} fe_hierarchy_t; } fe_hierarchy_t;
enum fe_interleaving {
INTERLEAVING_NONE,
INTERLEAVING_240,
INTERLEAVING_720,
};
#if defined(__DVB_CORE__) || !defined (__KERNEL__) #if defined(__DVB_CORE__) || !defined (__KERNEL__)
struct dvb_qpsk_parameters { struct dvb_qpsk_parameters {
...@@ -337,7 +349,9 @@ struct dvb_frontend_event { ...@@ -337,7 +349,9 @@ struct dvb_frontend_event {
#define DTV_ATSCMH_SCCC_CODE_MODE_C 58 #define DTV_ATSCMH_SCCC_CODE_MODE_C 58
#define DTV_ATSCMH_SCCC_CODE_MODE_D 59 #define DTV_ATSCMH_SCCC_CODE_MODE_D 59
#define DTV_MAX_COMMAND DTV_ATSCMH_SCCC_CODE_MODE_D #define DTV_INTERLEAVING 60
#define DTV_MAX_COMMAND DTV_INTERLEAVING
typedef enum fe_pilot { typedef enum fe_pilot {
PILOT_ON, PILOT_ON,
...@@ -366,7 +380,7 @@ typedef enum fe_delivery_system { ...@@ -366,7 +380,7 @@ typedef enum fe_delivery_system {
SYS_ISDBC, SYS_ISDBC,
SYS_ATSC, SYS_ATSC,
SYS_ATSCMH, SYS_ATSCMH,
SYS_DMBTH, SYS_DTMB,
SYS_CMMB, SYS_CMMB,
SYS_DAB, SYS_DAB,
SYS_DVBT2, SYS_DVBT2,
...@@ -374,8 +388,9 @@ typedef enum fe_delivery_system { ...@@ -374,8 +388,9 @@ typedef enum fe_delivery_system {
SYS_DVBC_ANNEX_C, SYS_DVBC_ANNEX_C,
} fe_delivery_system_t; } fe_delivery_system_t;
/* backward compatibility */
#define SYS_DVBC_ANNEX_AC SYS_DVBC_ANNEX_A #define SYS_DVBC_ANNEX_AC SYS_DVBC_ANNEX_A
#define SYS_DMBTH SYS_DTMB /* DMB-TH is legacy name, use DTMB instead */
/* ATSC-MH */ /* ATSC-MH */
......
...@@ -24,6 +24,6 @@ ...@@ -24,6 +24,6 @@
#define _DVBVERSION_H_ #define _DVBVERSION_H_
#define DVB_API_VERSION 5 #define DVB_API_VERSION 5
#define DVB_API_VERSION_MINOR 6 #define DVB_API_VERSION_MINOR 7
#endif /*_DVBVERSION_H_*/ #endif /*_DVBVERSION_H_*/
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment