From b67b98b7b6c4e9027aeb5389845bdb6ddfd64eaf Mon Sep 17 00:00:00 2001 From: InuSasha Date: Sun, 5 Jan 2014 23:47:12 +0100 Subject: [PATCH] EN50494: fix subelement creation for multi-port switches --- src/input/mpegts/linuxdvb/linuxdvb_en50494.c | 2 ++ src/input/mpegts/linuxdvb/linuxdvb_satconf.c | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/input/mpegts/linuxdvb/linuxdvb_en50494.c b/src/input/mpegts/linuxdvb/linuxdvb_en50494.c index ae9f8747..7b9af649 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_en50494.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_en50494.c @@ -176,6 +176,8 @@ linuxdvb_en50494_tune tvhlog(LOG_ERR, LINUXDVB_EN50494_NAME, "transponder value bigger then 1024"); return -1; } + + /* tune frequency for the frontend */ le->le_tune_freq = (t + 350) * 4000 - freq; /* real used en50494 frequency */ /* 2 data fields (16bit) */ diff --git a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c index 973c33e5..a59d9bce 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c @@ -471,15 +471,24 @@ linuxdvb_satconf_create TAILQ_FOREACH(lse, &ls->ls_elements, ls_link) { if (!lse->ls_lnb) lse->ls_lnb = linuxdvb_lnb_create0(NULL, NULL, lse); - if (lst->ports > 1 && !lse->ls_switch) - lse->ls_switch = linuxdvb_switch_create0("Generic", NULL, lse, i, -1); + /* create multi port elements (2/4port & en50494) */ + if (lst->ports > 1) { + if( !lse->ls_en50494 && !strcmp("en50494",lst->type)) + lse->ls_en50494 = linuxdvb_en50494_create0("en50494", NULL, lse); + if( !lse->ls_switch && (!strcmp("2port",lst->type) || !strcmp("4port",lst->type))) + lse->ls_switch = linuxdvb_switch_create0("Generic", NULL, lse, i, -1); + } i++; } for (; i < lst->ports; i++) { lse = linuxdvb_satconf_ele_create0(NULL, NULL, ls); lse->ls_lnb = linuxdvb_lnb_create0(NULL, NULL, lse); + /* create multi port elements (2/4port & en50494) */ if (lst->ports > 1) { - lse->ls_switch = linuxdvb_switch_create0("Generic", NULL, lse, i, -1); + if( !strcmp("en50494",lst->type)) + lse->ls_en50494 = linuxdvb_en50494_create0("en50494", NULL, lse); + if( !strcmp("2port",lst->type) || !strcmp("4port",lst->type)) + lse->ls_switch = linuxdvb_switch_create0("Generic", NULL, lse, i, -1); } }