Skip to content

Commit ccc13ae

Browse files
author
none
committed
Merge branch 'internal'
2 parents 0fe2c2f + 442b1c3 commit ccc13ae

3 files changed

Lines changed: 87 additions & 21 deletions

File tree

apps/ddinfo.c

Lines changed: 58 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ void print_temp(struct mci_result *res)
3535
printf("Die temperature = %u\n", res->sx8_bist.temperature);
3636
}
3737

38-
int temp_info(int dev)
38+
int temp_info(int dev, uint32_t link)
3939
{
4040
struct ddb_mci_msg msg = {
41-
.link = 0,
41+
.link = link,
4242
.cmd.command = SX8_CMD_GETBIST,
4343
};
4444
int ret;
@@ -233,23 +233,36 @@ void print_info(struct mci_result *res, uint8_t demod)
233233
switch (res->mode) {
234234
case M4_MODE_DVBSX:
235235
if (res->dvbs2_signal_info.standard == 2) {
236-
int short_frame = 0;
236+
int short_frame = 0, pilots = 0;
237+
char *modcod = "unknown";
238+
uint8_t pls = res->dvbs2_signal_info.pls_code;
237239

238-
if ((res->dvbs2_signal_info.pls_code >= 128) ||
239-
((res->dvbs2_signal_info.roll_off & 0x7f) > 2))
240+
if ((pls >= 128) || ((res->dvbs2_signal_info.roll_off & 0x7f) > 2))
240241
printf("Demod Locked: DVB-S2X\n");
241242
else
242243
printf("Demod Locked: DVB-S2\n");
243244
printf("PLS-Code: %u\n", res->dvbs2_signal_info.pls_code);
244-
printf("Roll-Off: %s\n", Rolloff[res->dvbs2_signal_info.roll_off]);
245-
printf("Inversion: %s\n", (res->dvbs2_signal_info.roll_off & 0x80) ? "on": "off");
246-
printf("\n");
245+
if (pls >= 250) {
246+
pilots = 1;
247+
modcod = S2Xrsvd[pls - 250];
248+
} else if (pls >= 132) {
249+
pilots = pls & 1;
250+
short_frame = pls > 216;
251+
modcod = S2XModCods[(pls - 132)/2];
252+
} else if (pls < 128) {
253+
pilots = pls & 1;
254+
short_frame = pls & 2;
255+
modcod = S2ModCods[pls / 4];
256+
}
257+
printf("Roll-Off: %s\n", Rolloff[res->dvbs2_signal_info.roll_off & 7]);
258+
printf("Pilots: %s\n", pilots ? "On" : "Off");
259+
printf("Frame: %s\n", short_frame ? "Short" : "Long");
247260
} else {
248261
printf("Demod Locked: DVB-S\n");
249262
printf("PR: %s\n",
250263
PunctureRates[res->dvbs2_signal_info.pls_code & 0x07]);
251-
252264
}
265+
printf("Inversion: %s\n", (res->dvbs2_signal_info.roll_off & 0x80) ? "on": "off");
253266
case M4_MODE_DVBT:
254267
printf("Locked DVB-T\n");
255268
break;
@@ -274,10 +287,37 @@ void print_info(struct mci_result *res, uint8_t demod)
274287

275288
}
276289

277-
int mci_info(int dev, uint8_t demod)
290+
int readreg(int dev, uint32_t reg, uint32_t link, uint32_t *val)
291+
{
292+
struct ddb_reg ddbreg;
293+
294+
ddbreg.reg = reg + (link << 28);
295+
if (ioctl(dev, IOCTL_DDB_READ_REG, &ddbreg) < 0)
296+
return -1;
297+
*val = ddbreg.val;
298+
return 0;
299+
}
300+
301+
void mci_firmware(int dev, uint32_t link)
302+
{
303+
union {
304+
uint32_t u[4];
305+
char s[16];
306+
} version;
307+
308+
readreg(dev, MIC_INTERFACE_VER , link, &version.u[0]);
309+
readreg(dev, MIC_INTERFACE_VER + 4, link, &version.u[1]);
310+
readreg(dev, MIC_INTERFACE_VER + 8, link, &version.u[2]);
311+
readreg(dev, MIC_INTERFACE_VER + 12, link, &version.u[3]);
312+
313+
printf("MCI firmware: %s.%d\n", &version.s, version.s[15]);
314+
}
315+
316+
317+
int mci_info(int dev, uint32_t link, uint8_t demod)
278318
{
279319
struct ddb_mci_msg msg = {
280-
.link = 0,
320+
.link = link,
281321
.cmd.command = MCI_CMD_GETSIGNALINFO,
282322
.cmd.demod = demod
283323
};
@@ -380,20 +420,22 @@ static int card_info(int ddbnum, int demod)
380420
id.hw, id.regmap, (id.hw & 0xff0000) >> 16, (id.hw & 0xffff));
381421
switch (id.device) {
382422
case 0x0009:
423+
mci_firmware(ddb, link);
383424
if (demod >= 0)
384-
mci_info(ddb, demod);
425+
mci_info(ddb, link, demod);
385426
else {
386427
for (i = 0; i < 8; i++)
387-
mci_info(ddb, i);
428+
mci_info(ddb, link, i);
388429
}
389-
temp_info(ddb);
430+
temp_info(ddb, link);
390431
break;
391432
case 0x000a:
433+
mci_firmware(ddb, link);
392434
if (demod >= 0)
393-
mci_info(ddb, demod);
435+
mci_info(ddb, link, demod);
394436
else {
395437
for (i = 0; i < 4; i++)
396-
mci_info(ddb, i);
438+
mci_info(ddb, link, i);
397439
}
398440
break;
399441
default:

ddbridge/ddbridge-core.c

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2602,7 +2602,7 @@ static int ddb_port_match_link_i2c(struct ddb_port *port)
26022602

26032603
static void ddb_ports_init(struct ddb *dev)
26042604
{
2605-
u32 i, l, p;
2605+
u32 i, l, p, ports;
26062606
struct ddb_port *port;
26072607
const struct ddb_info *info;
26082608
const struct ddb_regmap *rm;
@@ -2614,7 +2614,12 @@ static void ddb_ports_init(struct ddb *dev)
26142614
rm = info->regmap;
26152615
if (!rm)
26162616
continue;
2617-
for (i = 0; i < info->port_num; i++, p++) {
2617+
ports = info->port_num;
2618+
if ((l == 0) && (dev->link[l].info->type == DDB_MOD) &&
2619+
(dev->link[0].ids.revision == 1)) {
2620+
ports = ddbreadl(dev, 0x260) >> 24;
2621+
}
2622+
for (i = 0; i < ports; i++, p++) {
26182623
port = &dev->port[p];
26192624
port->dev = dev;
26202625
port->nr = i;
@@ -3266,8 +3271,8 @@ static long ddb_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
32663271
ddbid.device = dev->link[0].ids.device;
32673272
ddbid.subvendor = dev->link[0].ids.subvendor;
32683273
ddbid.subdevice = dev->link[0].ids.subdevice;
3269-
ddbid.hw = ddbreadl(dev, 0);
3270-
ddbid.regmap = ddbreadl(dev, 4);
3274+
ddbid.hw = dev->link[0].ids.hwid;
3275+
ddbid.regmap = dev->link[0].ids.regmapid;
32713276
if (copy_to_user(parg, &ddbid, sizeof(ddbid)))
32723277
return -EFAULT;
32733278
break;

ddbridge/ddbridge-modulator.c

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1863,6 +1863,8 @@ static int mod_init_2(struct ddb *dev, u32 Frequency)
18631863
dev_err(dev->dev, "FSM setup failed!\n");
18641864
return -1;
18651865
}
1866+
if (dev->link[0].ids.revision == 1)
1867+
return 0;
18661868
for (i = 0; i < streams; i++) {
18671869
struct ddb_mod *mod = &dev->mod[i];
18681870

@@ -2026,7 +2028,7 @@ static int mod_init_sdr_iq(struct ddb *dev)
20262028
ret = rfdac_init(dev);
20272029
if (ret)
20282030
dev_err(dev->dev, "RFDAC setup failed\n");
2029-
2031+
20302032
ddbwritel(dev, 0x01, 0x240);
20312033

20322034
if (dev->link[0].ids.revision == 1)
@@ -2049,6 +2051,23 @@ static int mod_init_sdr_iq(struct ddb *dev)
20492051

20502052
int ddbridge_mod_init(struct ddb *dev)
20512053
{
2054+
dev_info(dev->dev, "Revision: %u\n", dev->link[0].ids.revision);
2055+
if (dev->link[0].ids.revision == 1) {
2056+
switch (dev->link[0].info->version) {
2057+
case 0:
2058+
case 1:
2059+
return mod_init_1(dev, 722000000);
2060+
case 2: /* FSM */
2061+
return mod_init_2(dev, 114000000);
2062+
case 16: /* PAL */
2063+
return mod_init_3(dev, 503250000);
2064+
case 17: /* raw IQ */
2065+
case 18: /* IQ+FFT */
2066+
return mod_init_sdr_iq(dev);
2067+
default:
2068+
return -1;
2069+
}
2070+
}
20522071
switch (dev->link[0].info->version) {
20532072
case 0:
20542073
case 1:

0 commit comments

Comments
 (0)