Module: xenomai-abe Branch: analogy Commit: df715172ef315404e14d627ee81c206474b29bf7 URL: http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=df715172ef315404e14d627ee81c206474b29bf7
Author: Simon Boulay <simon.bou...@gmail.com> Date: Thu Jan 7 22:08:22 2010 +0100 analogy: fix misuses of the instruction field data_size --- ksrc/drivers/analogy/sensoray/s526.c | 30 ++++++++++++++++++------------ 1 files changed, 18 insertions(+), 12 deletions(-) diff --git a/ksrc/drivers/analogy/sensoray/s526.c b/ksrc/drivers/analogy/sensoray/s526.c index 5d3d7e8..c730060 100644 --- a/ksrc/drivers/analogy/sensoray/s526.c +++ b/ksrc/drivers/analogy/sensoray/s526.c @@ -431,16 +431,18 @@ static int s526_gpct_rinsn(a4l_subd_t *subd, a4l_kinsn_t *insn) int i; if (insn->data_size <= 0) { - a4l_err(dev, "s526_gpct_rinsn: n should be > 0\n"); + a4l_err(dev, "s526_gpct_rinsn: data size should be > 0\n"); return -EINVAL; } - for (i = 0; i < insn->data_size; i++) { + for (i = 0; i < insn->data_size / sizeof(uint32_t); i++) { datalow = inw(ADDR_CHAN_REG(REG_C0L, counter_channel)); datahigh = inw(ADDR_CHAN_REG(REG_C0H, counter_channel)); data[i] = (int)(datahigh & 0x00FF); data[i] = (data[i] << 16) | (datalow & 0xFFFF); - a4l_dbg(1, drv_dbg, dev, "s526_gpct_rinsn GPCT[%d]: %x(0x%04x, 0x%04x)\n", counter_channel, data[i], datahigh, datalow); + a4l_dbg(1, drv_dbg, dev, + "s526_gpct_rinsn GPCT[%d]: %x(0x%04x, 0x%04x)\n", + counter_channel, data[i], datahigh, datalow); } return 0; @@ -456,10 +458,13 @@ static int s526_gpct_winsn(a4l_subd_t *subd, a4l_kinsn_t *insn) short value; union cmReg cmReg; - a4l_dbg(1, drv_dbg, dev, "s526_gpct_winsn: GPCT_INSN_WRITE on channel %d\n", subdev_channel); + a4l_dbg(1, drv_dbg, dev, + "s526_gpct_winsn: GPCT_INSN_WRITE on channel %d\n", + subdev_channel); cmReg.value = inw(ADDR_CHAN_REG(REG_C0M, subdev_channel)); - a4l_dbg(1, drv_dbg, dev, "s526_gpct_winsn: Counter Mode Register: %x\n", cmReg.value); + a4l_dbg(1, drv_dbg, dev, + "s526_gpct_winsn: Counter Mode Register: %x\n", cmReg.value); /* Check what Application of Counter this channel is configured for */ switch (subdpriv->config[subdev_channel].app) { @@ -520,7 +525,7 @@ static int s526_ai_insn_config(a4l_subd_t *subd, a4l_kinsn_t *insn) (struct s526_subd_ai_priv *)subd->priv; unsigned int *data = (unsigned int *)insn->data; - if (insn->data_size < 1) + if (insn->data_size < sizeof(unsigned int)) return -EINVAL; /* data[0] : channels was set in relevant bits. @@ -561,11 +566,12 @@ static int s526_ai_rinsn(a4l_subd_t *subd, a4l_kinsn_t *insn) ((1 << 5) << chan) | (chan << 1) | 0x0001; /* convert n samples */ - for (n = 0; n < insn->data_size; n++) { + for (n = 0; n < insn->data_size / sizeof(uint16_t); n++) { /* trigger conversion */ outw(value, ADDR_REG(REG_ADC)); a4l_dbg(1, drv_dbg, dev, "s526_ai_rinsn: Wrote 0x%04x to ADC\n", value); - /* a4l_dbg(1, drv_dbg, dev, "s526_ai_rinsn: ADC reg=0x%04x\n", inw(ADDR_REG(REG_ADC))); */ + /* a4l_dbg(1, drv_dbg, dev, + "s526_ai_rinsn: ADC reg=0x%04x\n", inw(ADDR_REG(REG_ADC))); */ /* wait for conversion to end */ for (i = 0; i < S526_AI_TIMEOUT; i++) { @@ -606,7 +612,7 @@ static int s526_ao_winsn(a4l_subd_t *subd, a4l_kinsn_t *insn) /* Writing a list of values to an AO channel is probably not * very useful, but that's how the interface is defined. */ - for (i = 0; i < insn->data_size; i++) { + for (i = 0; i < insn->data_size / sizeof(uint16_t); i++) { /* a typical programming sequence */ outw(data[i], ADDR_REG(REG_ADD)); /* write the data to preload register */ subdpriv->readback[chan] = data[i]; @@ -626,7 +632,7 @@ static int s526_ao_rinsn(a4l_subd_t *subd, a4l_kinsn_t *insn) int i; int chan = CR_CHAN(insn->chan_desc); - for (i = 0; i < insn->data_size; i++) + for (i = 0; i < insn->data_size / sizeof(uint16_t); i++) data[i] = subdpriv->readback[chan]; return 0; @@ -658,7 +664,7 @@ static int s526_dio_insn_config(a4l_subd_t *subd, a4l_kinsn_t *insn) case A4L_INSN_CONFIG_DIO_QUERY: data[1] = (subdpriv->io_bits & mask) ? A4L_OUTPUT : A4L_INPUT; - return insn->data_size; + return 0; default: return -EINVAL; } @@ -680,7 +686,7 @@ static int s526_dio_insn_bits(a4l_subd_t *subd, a4l_kinsn_t *insn) (struct s526_subd_dio_priv *)subd->priv; uint8_t *data = (uint8_t *)insn->data; - if (insn->data_size != 2) + if (insn->data_size != 2 * sizeof(uint8_t)) return -EINVAL; /* The insn data is a mask in data[0] and the new data _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git