diff options
author | Michael Krufky <mkrufky@linuxtv.org> | 2012-01-29 13:44:58 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2012-05-20 08:41:50 -0400 |
commit | ca689488ee6f850000b8d12f0f41e810bff28a7c (patch) | |
tree | 5097cee48780ca4cb30e973e9c4de8c1450349e1 | |
parent | 4ad34da0300d7196be25ef79ef3f054756cdc739 (diff) |
[media] linux-dvb v5 API support for ATSC-MH
Add the following properties for controlling an ATSC-MH frontend:
DTV_ATSCMH_FIC_VER
DTV_ATSCMH_PARADE_ID
DTV_ATSCMH_NOG
DTV_ATSCMH_TNOG
DTV_ATSCMH_SGN
DTV_ATSCMH_PRC
DTV_ATSCMH_RS_FRAME_MODE
DTV_ATSCMH_RS_FRAME_ENSEMBLE
DTV_ATSCMH_RS_CODE_MODE_PRI
DTV_ATSCMH_RS_CODE_MODE_SEC
DTV_ATSCMH_SCCC_BLOCK_MODE
DTV_ATSCMH_SCCC_CODE_MODE_A
DTV_ATSCMH_SCCC_CODE_MODE_B
DTV_ATSCMH_SCCC_CODE_MODE_C
DTV_ATSCMH_SCCC_CODE_MODE_D
DTV_ATSCMH_FIC_ERR
DTV_ATSCMH_CRC_ERR
DTV_ATSCMH_RS_ERR
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r-- | drivers/media/dvb/dvb-core/dvb_frontend.c | 92 | ||||
-rw-r--r-- | drivers/media/dvb/dvb-core/dvb_frontend.h | 22 | ||||
-rw-r--r-- | include/linux/dvb/frontend.h | 54 |
3 files changed, 166 insertions, 2 deletions
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c index cb888d835a89..cd23f303162a 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c | |||
@@ -182,13 +182,13 @@ static enum dvbv3_emulation_type dvbv3_type(u32 delivery_system) | |||
182 | case SYS_DMBTH: | 182 | case SYS_DMBTH: |
183 | return DVBV3_OFDM; | 183 | return DVBV3_OFDM; |
184 | case SYS_ATSC: | 184 | case SYS_ATSC: |
185 | case SYS_ATSCMH: | ||
185 | case SYS_DVBC_ANNEX_B: | 186 | case SYS_DVBC_ANNEX_B: |
186 | return DVBV3_ATSC; | 187 | return DVBV3_ATSC; |
187 | case SYS_UNDEFINED: | 188 | case SYS_UNDEFINED: |
188 | case SYS_ISDBC: | 189 | case SYS_ISDBC: |
189 | case SYS_DVBH: | 190 | case SYS_DVBH: |
190 | case SYS_DAB: | 191 | case SYS_DAB: |
191 | case SYS_ATSCMH: | ||
192 | default: | 192 | default: |
193 | /* | 193 | /* |
194 | * Doesn't know how to emulate those types and/or | 194 | * Doesn't know how to emulate those types and/or |
@@ -1030,6 +1030,28 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = { | |||
1030 | _DTV_CMD(DTV_HIERARCHY, 0, 0), | 1030 | _DTV_CMD(DTV_HIERARCHY, 0, 0), |
1031 | 1031 | ||
1032 | _DTV_CMD(DTV_ENUM_DELSYS, 0, 0), | 1032 | _DTV_CMD(DTV_ENUM_DELSYS, 0, 0), |
1033 | |||
1034 | _DTV_CMD(DTV_ATSCMH_PARADE_ID, 1, 0), | ||
1035 | _DTV_CMD(DTV_ATSCMH_RS_FRAME_ENSEMBLE, 1, 0), | ||
1036 | |||
1037 | _DTV_CMD(DTV_ATSCMH_FIC_VER, 0, 0), | ||
1038 | _DTV_CMD(DTV_ATSCMH_PARADE_ID, 0, 0), | ||
1039 | _DTV_CMD(DTV_ATSCMH_NOG, 0, 0), | ||
1040 | _DTV_CMD(DTV_ATSCMH_TNOG, 0, 0), | ||
1041 | _DTV_CMD(DTV_ATSCMH_SGN, 0, 0), | ||
1042 | _DTV_CMD(DTV_ATSCMH_PRC, 0, 0), | ||
1043 | _DTV_CMD(DTV_ATSCMH_RS_FRAME_MODE, 0, 0), | ||
1044 | _DTV_CMD(DTV_ATSCMH_RS_FRAME_ENSEMBLE, 0, 0), | ||
1045 | _DTV_CMD(DTV_ATSCMH_RS_CODE_MODE_PRI, 0, 0), | ||
1046 | _DTV_CMD(DTV_ATSCMH_RS_CODE_MODE_SEC, 0, 0), | ||
1047 | _DTV_CMD(DTV_ATSCMH_SCCC_BLOCK_MODE, 0, 0), | ||
1048 | _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_A, 0, 0), | ||
1049 | _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_B, 0, 0), | ||
1050 | _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_C, 0, 0), | ||
1051 | _DTV_CMD(DTV_ATSCMH_SCCC_CODE_MODE_D, 0, 0), | ||
1052 | _DTV_CMD(DTV_ATSCMH_FIC_ERR, 0, 0), | ||
1053 | _DTV_CMD(DTV_ATSCMH_CRC_ERR, 0, 0), | ||
1054 | _DTV_CMD(DTV_ATSCMH_RS_ERR, 0, 0), | ||
1033 | }; | 1055 | }; |
1034 | 1056 | ||
1035 | static void dtv_property_dump(struct dtv_property *tvp) | 1057 | static void dtv_property_dump(struct dtv_property *tvp) |
@@ -1121,6 +1143,8 @@ static int dtv_property_cache_sync(struct dvb_frontend *fe, | |||
1121 | case DVBV3_ATSC: | 1143 | case DVBV3_ATSC: |
1122 | dprintk("%s() Preparing ATSC req\n", __func__); | 1144 | dprintk("%s() Preparing ATSC req\n", __func__); |
1123 | c->modulation = p->u.vsb.modulation; | 1145 | c->modulation = p->u.vsb.modulation; |
1146 | if (c->delivery_system == SYS_ATSCMH) | ||
1147 | break; | ||
1124 | if ((c->modulation == VSB_8) || (c->modulation == VSB_16)) | 1148 | if ((c->modulation == VSB_8) || (c->modulation == VSB_16)) |
1125 | c->delivery_system = SYS_ATSC; | 1149 | c->delivery_system = SYS_ATSC; |
1126 | else | 1150 | else |
@@ -1367,6 +1391,63 @@ static int dtv_property_process_get(struct dvb_frontend *fe, | |||
1367 | case DTV_DVBT2_PLP_ID: | 1391 | case DTV_DVBT2_PLP_ID: |
1368 | tvp->u.data = c->dvbt2_plp_id; | 1392 | tvp->u.data = c->dvbt2_plp_id; |
1369 | break; | 1393 | break; |
1394 | |||
1395 | /* ATSC-MH */ | ||
1396 | case DTV_ATSCMH_FIC_VER: | ||
1397 | tvp->u.data = fe->dtv_property_cache.atscmh_fic_ver; | ||
1398 | break; | ||
1399 | case DTV_ATSCMH_PARADE_ID: | ||
1400 | tvp->u.data = fe->dtv_property_cache.atscmh_parade_id; | ||
1401 | break; | ||
1402 | case DTV_ATSCMH_NOG: | ||
1403 | tvp->u.data = fe->dtv_property_cache.atscmh_nog; | ||
1404 | break; | ||
1405 | case DTV_ATSCMH_TNOG: | ||
1406 | tvp->u.data = fe->dtv_property_cache.atscmh_tnog; | ||
1407 | break; | ||
1408 | case DTV_ATSCMH_SGN: | ||
1409 | tvp->u.data = fe->dtv_property_cache.atscmh_sgn; | ||
1410 | break; | ||
1411 | case DTV_ATSCMH_PRC: | ||
1412 | tvp->u.data = fe->dtv_property_cache.atscmh_prc; | ||
1413 | break; | ||
1414 | case DTV_ATSCMH_RS_FRAME_MODE: | ||
1415 | tvp->u.data = fe->dtv_property_cache.atscmh_rs_frame_mode; | ||
1416 | break; | ||
1417 | case DTV_ATSCMH_RS_FRAME_ENSEMBLE: | ||
1418 | tvp->u.data = fe->dtv_property_cache.atscmh_rs_frame_ensemble; | ||
1419 | break; | ||
1420 | case DTV_ATSCMH_RS_CODE_MODE_PRI: | ||
1421 | tvp->u.data = fe->dtv_property_cache.atscmh_rs_code_mode_pri; | ||
1422 | break; | ||
1423 | case DTV_ATSCMH_RS_CODE_MODE_SEC: | ||
1424 | tvp->u.data = fe->dtv_property_cache.atscmh_rs_code_mode_sec; | ||
1425 | break; | ||
1426 | case DTV_ATSCMH_SCCC_BLOCK_MODE: | ||
1427 | tvp->u.data = fe->dtv_property_cache.atscmh_sccc_block_mode; | ||
1428 | break; | ||
1429 | case DTV_ATSCMH_SCCC_CODE_MODE_A: | ||
1430 | tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_a; | ||
1431 | break; | ||
1432 | case DTV_ATSCMH_SCCC_CODE_MODE_B: | ||
1433 | tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_b; | ||
1434 | break; | ||
1435 | case DTV_ATSCMH_SCCC_CODE_MODE_C: | ||
1436 | tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_c; | ||
1437 | break; | ||
1438 | case DTV_ATSCMH_SCCC_CODE_MODE_D: | ||
1439 | tvp->u.data = fe->dtv_property_cache.atscmh_sccc_code_mode_d; | ||
1440 | break; | ||
1441 | case DTV_ATSCMH_FIC_ERR: | ||
1442 | tvp->u.data = fe->dtv_property_cache.atscmh_fic_err; | ||
1443 | break; | ||
1444 | case DTV_ATSCMH_CRC_ERR: | ||
1445 | tvp->u.data = fe->dtv_property_cache.atscmh_crc_err; | ||
1446 | break; | ||
1447 | case DTV_ATSCMH_RS_ERR: | ||
1448 | tvp->u.data = fe->dtv_property_cache.atscmh_rs_err; | ||
1449 | break; | ||
1450 | |||
1370 | default: | 1451 | default: |
1371 | return -EINVAL; | 1452 | return -EINVAL; |
1372 | } | 1453 | } |
@@ -1708,6 +1789,15 @@ static int dtv_property_process_set(struct dvb_frontend *fe, | |||
1708 | case DTV_DVBT2_PLP_ID: | 1789 | case DTV_DVBT2_PLP_ID: |
1709 | c->dvbt2_plp_id = tvp->u.data; | 1790 | c->dvbt2_plp_id = tvp->u.data; |
1710 | break; | 1791 | break; |
1792 | |||
1793 | /* ATSC-MH */ | ||
1794 | case DTV_ATSCMH_PARADE_ID: | ||
1795 | fe->dtv_property_cache.atscmh_parade_id = tvp->u.data; | ||
1796 | break; | ||
1797 | case DTV_ATSCMH_RS_FRAME_ENSEMBLE: | ||
1798 | fe->dtv_property_cache.atscmh_rs_frame_ensemble = tvp->u.data; | ||
1799 | break; | ||
1800 | |||
1711 | default: | 1801 | default: |
1712 | return -EINVAL; | 1802 | return -EINVAL; |
1713 | } | 1803 | } |
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.h b/drivers/media/dvb/dvb-core/dvb_frontend.h index d63a8215fe03..80f5c27ddc9f 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.h +++ b/drivers/media/dvb/dvb-core/dvb_frontend.h | |||
@@ -372,6 +372,28 @@ struct dtv_frontend_properties { | |||
372 | 372 | ||
373 | /* DVB-T2 specifics */ | 373 | /* DVB-T2 specifics */ |
374 | u32 dvbt2_plp_id; | 374 | u32 dvbt2_plp_id; |
375 | |||
376 | /* ATSC-MH specifics */ | ||
377 | u8 atscmh_fic_ver; | ||
378 | u8 atscmh_parade_id; | ||
379 | u8 atscmh_nog; | ||
380 | u8 atscmh_tnog; | ||
381 | u8 atscmh_sgn; | ||
382 | u8 atscmh_prc; | ||
383 | |||
384 | u8 atscmh_rs_frame_mode; | ||
385 | u8 atscmh_rs_frame_ensemble; | ||
386 | u8 atscmh_rs_code_mode_pri; | ||
387 | u8 atscmh_rs_code_mode_sec; | ||
388 | u8 atscmh_sccc_block_mode; | ||
389 | u8 atscmh_sccc_code_mode_a; | ||
390 | u8 atscmh_sccc_code_mode_b; | ||
391 | u8 atscmh_sccc_code_mode_c; | ||
392 | u8 atscmh_sccc_code_mode_d; | ||
393 | |||
394 | u16 atscmh_fic_err; | ||
395 | u16 atscmh_crc_err; | ||
396 | u16 atscmh_rs_err; | ||
375 | }; | 397 | }; |
376 | 398 | ||
377 | struct dvb_frontend { | 399 | struct dvb_frontend { |
diff --git a/include/linux/dvb/frontend.h b/include/linux/dvb/frontend.h index cb4428ab81ed..5aedd5ae7f8f 100644 --- a/include/linux/dvb/frontend.h +++ b/include/linux/dvb/frontend.h | |||
@@ -320,7 +320,27 @@ struct dvb_frontend_event { | |||
320 | 320 | ||
321 | #define DTV_ENUM_DELSYS 44 | 321 | #define DTV_ENUM_DELSYS 44 |
322 | 322 | ||
323 | #define DTV_MAX_COMMAND DTV_ENUM_DELSYS | 323 | /* ATSC-MH */ |
324 | #define DTV_ATSCMH_FIC_VER 45 | ||
325 | #define DTV_ATSCMH_PARADE_ID 46 | ||
326 | #define DTV_ATSCMH_NOG 47 | ||
327 | #define DTV_ATSCMH_TNOG 48 | ||
328 | #define DTV_ATSCMH_SGN 49 | ||
329 | #define DTV_ATSCMH_PRC 50 | ||
330 | #define DTV_ATSCMH_RS_FRAME_MODE 51 | ||
331 | #define DTV_ATSCMH_RS_FRAME_ENSEMBLE 52 | ||
332 | #define DTV_ATSCMH_RS_CODE_MODE_PRI 53 | ||
333 | #define DTV_ATSCMH_RS_CODE_MODE_SEC 54 | ||
334 | #define DTV_ATSCMH_SCCC_BLOCK_MODE 55 | ||
335 | #define DTV_ATSCMH_SCCC_CODE_MODE_A 56 | ||
336 | #define DTV_ATSCMH_SCCC_CODE_MODE_B 57 | ||
337 | #define DTV_ATSCMH_SCCC_CODE_MODE_C 58 | ||
338 | #define DTV_ATSCMH_SCCC_CODE_MODE_D 59 | ||
339 | #define DTV_ATSCMH_FIC_ERR 60 | ||
340 | #define DTV_ATSCMH_CRC_ERR 61 | ||
341 | #define DTV_ATSCMH_RS_ERR 62 | ||
342 | |||
343 | #define DTV_MAX_COMMAND DTV_ATSCMH_RS_ERR | ||
324 | 344 | ||
325 | typedef enum fe_pilot { | 345 | typedef enum fe_pilot { |
326 | PILOT_ON, | 346 | PILOT_ON, |
@@ -360,6 +380,38 @@ typedef enum fe_delivery_system { | |||
360 | 380 | ||
361 | #define SYS_DVBC_ANNEX_AC SYS_DVBC_ANNEX_A | 381 | #define SYS_DVBC_ANNEX_AC SYS_DVBC_ANNEX_A |
362 | 382 | ||
383 | /* ATSC-MH */ | ||
384 | |||
385 | enum atscmh_sccc_block_mode { | ||
386 | ATSCMH_SCCC_BLK_SEP = 0, | ||
387 | ATSCMH_SCCC_BLK_COMB = 1, | ||
388 | ATSCMH_SCCC_BLK_RES = 2, | ||
389 | }; | ||
390 | |||
391 | enum atscmh_sccc_code_mode { | ||
392 | ATSCMH_SCCC_CODE_HLF = 0, | ||
393 | ATSCMH_SCCC_CODE_QTR = 1, | ||
394 | ATSCMH_SCCC_CODE_RES = 2, | ||
395 | }; | ||
396 | |||
397 | enum atscmh_rs_frame_ensemble { | ||
398 | ATSCMH_RSFRAME_ENS_PRI = 0, | ||
399 | ATSCMH_RSFRAME_ENS_SEC = 1, | ||
400 | }; | ||
401 | |||
402 | enum atscmh_rs_frame_mode { | ||
403 | ATSCMH_RSFRAME_PRI_ONLY = 0, | ||
404 | ATSCMH_RSFRAME_PRI_SEC = 1, | ||
405 | ATSCMH_RSFRAME_RES = 2, | ||
406 | }; | ||
407 | |||
408 | enum atscmh_rs_code_mode { | ||
409 | ATSCMH_RSCODE_211_187 = 0, | ||
410 | ATSCMH_RSCODE_223_187 = 1, | ||
411 | ATSCMH_RSCODE_235_187 = 2, | ||
412 | ATSCMH_RSCODE_RES = 3, | ||
413 | }; | ||
414 | |||
363 | 415 | ||
364 | struct dtv_cmds_h { | 416 | struct dtv_cmds_h { |
365 | char *name; /* A display name for debugging purposes */ | 417 | char *name; /* A display name for debugging purposes */ |