Proposed modifications to dvb_frontend_ops

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



In frontend.h we have a struct called dvb_frontend_ops, in there we
have an element called delsys to show the delivery systems supported
by the tuner, Id like to propose we add onto that with delmod and
delfec.

Its not a perfect solution as sometimes a specific modulation or fec
is only availible on specific systems. But its better then what we
have now. The struct fe_caps isnt really suited for this, its missing
many systems, modulations, and fec's. Its just not expandable enough
to get all the supported sys/mod/fec a tuner supports in there.

Expanding this would allow user land applications to poll the tuner to
determine more detailed information on the tuners capabilities.

Here is the patch I propose, along with the au8522 driver modified to
utilize the new elements. Id like to hear comments on it. Does anyone
see a better way of doing this ?

Chris Lee <updatelee@xxxxxxxxx>

diff --git a/drivers/media/dvb-core/dvb_frontend.c
b/drivers/media/dvb-core/dvb_frontend.c
index 1f925e8..f5df08e 100644
--- a/drivers/media/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb-core/dvb_frontend.c
@@ -1036,6 +1036,8 @@ static struct dtv_cmds_h dtv_cmds[DTV_MAX_COMMAND + 1] = {
  _DTV_CMD(DTV_API_VERSION, 0, 0),

  _DTV_CMD(DTV_ENUM_DELSYS, 0, 0),
+ _DTV_CMD(DTV_ENUM_DELMOD, 0, 0),
+ _DTV_CMD(DTV_ENUM_DELFEC, 0, 0),

  _DTV_CMD(DTV_ATSCMH_PARADE_ID, 1, 0),
  _DTV_CMD(DTV_ATSCMH_RS_FRAME_ENSEMBLE, 1, 0),
@@ -1285,6 +1287,22 @@ static int dtv_property_process_get(struct
dvb_frontend *fe,
  }
  tvp->u.buffer.len = ncaps;
  break;
+ case DTV_ENUM_DELMOD:
+ ncaps = 0;
+ while (fe->ops.delmod[ncaps] && ncaps < MAX_DELMOD) {
+ tvp->u.buffer.data[ncaps] = fe->ops.delmod[ncaps];
+ ncaps++;
+ }
+ tvp->u.buffer.len = ncaps;
+ break;
+ case DTV_ENUM_DELFEC:
+ ncaps = 0;
+ while (fe->ops.delfec[ncaps] && ncaps < MAX_DELFEC) {
+ tvp->u.buffer.data[ncaps] = fe->ops.delfec[ncaps];
+ ncaps++;
+ }
+ tvp->u.buffer.len = ncaps;
+ break;
  case DTV_FREQUENCY:
  tvp->u.data = c->frequency;
  break;
diff --git a/drivers/media/dvb-core/dvb_frontend.h
b/drivers/media/dvb-core/dvb_frontend.h
index 371b6ca..4e96640 100644
--- a/drivers/media/dvb-core/dvb_frontend.h
+++ b/drivers/media/dvb-core/dvb_frontend.h
@@ -47,6 +47,8 @@
  * should be smaller or equal to 32
  */
 #define MAX_DELSYS 8
+#define MAX_DELMOD 8
+#define MAX_DELFEC 32

 struct dvb_frontend_tune_settings {
  int min_delay_ms;
@@ -263,6 +265,8 @@ struct dvb_frontend_ops {
  struct dvb_frontend_info info;

  u8 delsys[MAX_DELSYS];
+ u8 delmod[MAX_DELMOD];
+ u8 delfec[MAX_DELFEC];

  void (*release)(struct dvb_frontend* fe);
  void (*release_sec)(struct dvb_frontend* fe);
diff --git a/include/uapi/linux/dvb/frontend.h
b/include/uapi/linux/dvb/frontend.h
index c56d77c..be63d37 100644
--- a/include/uapi/linux/dvb/frontend.h
+++ b/include/uapi/linux/dvb/frontend.h
@@ -375,7 +375,10 @@ struct dvb_frontend_event {
 #define DTV_STAT_ERROR_BLOCK_COUNT 68
 #define DTV_STAT_TOTAL_BLOCK_COUNT 69

-#define DTV_MAX_COMMAND DTV_STAT_TOTAL_BLOCK_COUNT
+#define DTV_ENUM_DELMOD 70
+#define DTV_ENUM_DELFEC 71
+
+#define DTV_MAX_COMMAND DTV_ENUM_DELFEC

 typedef enum fe_pilot {
  PILOT_ON,
diff --git a/drivers/media/dvb-frontends/au8522_dig.c
b/drivers/media/dvb-frontends/au8522_dig.c
index 6ee9028..1044c9d 100644
--- a/drivers/media/dvb-frontends/au8522_dig.c
+++ b/drivers/media/dvb-frontends/au8522_dig.c
@@ -822,7 +822,9 @@ error:
 EXPORT_SYMBOL(au8522_attach);

 static struct dvb_frontend_ops au8522_ops = {
- .delsys = { SYS_ATSC, SYS_DVBC_ANNEX_B },
+ .delsys = { SYS_DVBC_ANNEX_B, SYS_ATSC },
+ .delmod = { QAM_256, QAM_64, VSB_8 },
+ .delfec = { FEC_NONE },
  .info = {
  .name = "Auvitek AU8522 QAM/8VSB Frontend",
  .frequency_min = 54000000,
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux