From: Marek Vasut Date: Sun, 20 Apr 2014 20:58:34 +0000 (+0200) Subject: asix-sigma: Suspend support for trailing DRAM lines X-Git-Tag: libsigrok-0.3.0~32 X-Git-Url: http://sigrok.org/gitweb/?a=commitdiff_plain;h=46641facd4ad8de4a93910d7089c7b289b412443;p=libsigrok.git asix-sigma: Suspend support for trailing DRAM lines The support for trailing DRAM lines was broken. This patch starts rework of support for this, but in order to do that, we need to rework decode_chunk_ts() a little first. This patch adjusts the decode_chunk_ts() a little to receive the total amount of events in DRAM line instead of some nonsense value. This patch temporarily removes the support for the trailing DRAM lines until the decode_chunk_ts() is fixed to cope with this, so yes, this patch introduces breakage! Signed-off-by: Marek Vasut --- diff --git a/hardware/asix-sigma/asix-sigma.c b/hardware/asix-sigma/asix-sigma.c index 64ebcbb8..59acdcb1 100644 --- a/hardware/asix-sigma/asix-sigma.c +++ b/hardware/asix-sigma/asix-sigma.c @@ -949,7 +949,7 @@ static uint16_t sigma_dram_cluster_ts(struct sigma_dram_cluster *cluster) */ static int decode_chunk_ts(struct sigma_dram_line *dram_line, uint16_t *lastts, uint16_t *lastsample, int triggerpos, - uint16_t limit_chunk, void *cb_data) + uint16_t events_in_line, void *cb_data) { uint8_t *buf = (uint8_t *)dram_line; struct sigma_dram_cluster *dram_cluster; @@ -979,16 +979,12 @@ static int decode_chunk_ts(struct sigma_dram_line *dram_line, uint16_t *lastts, } /* For each ts. */ - for (i = 0; i < 64; i++) { + for (i = 0; i < (events_in_line / 7); i++) { dram_cluster = &dram_line->cluster[i]; ts = sigma_dram_cluster_ts(dram_cluster); tsdiff = ts - *lastts; *lastts = ts; - /* Decode partial chunk. */ - if (limit_chunk && ts > limit_chunk) - return SR_OK; - /* Pad last sample up to current point. */ numpad = tsdiff * devc->samples_per_event - clustersize; if (numpad > 0) { @@ -1093,7 +1089,7 @@ static int download_capture(struct sr_dev_inst *sdi) uint32_t i; uint32_t dl_lines_total, dl_lines_curr, dl_lines_done; - uint32_t dl_trailing_events; + uint32_t dl_events_in_line = 64 * 7; uint32_t trg_line = ~0; dram_line = g_try_malloc0(chunks_per_read * sizeof(*dram_line)); @@ -1122,7 +1118,6 @@ static int download_capture(struct sr_dev_inst *sdi) * line can be only partial, containing less than 64 clusters. */ dl_lines_total = (stoppos >> 9) + 1; - dl_trailing_events = stoppos & 0x1ff; dl_lines_done = 0; @@ -1143,11 +1138,10 @@ static int download_capture(struct sr_dev_inst *sdi) } for (i = 0; i < dl_lines_curr; i++) { - uint32_t dl_limit = 0; int trigger_line = -1; /* The last "DRAM line" can be only partially full. */ if (dl_lines_done + i == dl_lines_total - 1) - dl_limit = dl_trailing_events; + dl_events_in_line = stoppos & 0x1ff; /* Test if the trigger happened on this line. */ if (dl_lines_done + i == trg_line) @@ -1156,7 +1150,8 @@ static int download_capture(struct sr_dev_inst *sdi) decode_chunk_ts(dram_line + i, &devc->state.lastts, &devc->state.lastsample, - trigger_line, dl_limit, sdi); + trigger_line, + dl_events_in_line, sdi); } dl_lines_done += dl_lines_curr;