Commit 886e03be authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'staging-3.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging

Pull staging tree fixes from Greg Kroah-Hartman:
 "Here are some drivers/staging and drivers/iio fixes for 3.9 (the two
  are still pretty intertwined, hence them coming both from my tree
  still.) Nothing major, just a few things that have been reported by
  users, all of these have been in linux-next for a while."

* tag 'staging-3.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging:
  staging: comedi: dt9812: use CR_CHAN() for channel number
  staging/vt6656: Fix too large integer constant warning on 32-bit
  staging: comedi: drivers: usbduxsigma.c: fix DMA buffers on stack
  staging: imx/drm: request irq only after adding the crtc
  staging: comedi: drivers: usbduxfast.c: fix for DMA buffers on stack
  staging: comedi: drivers: usbdux.c: fix DMA buffers on stack
  staging: vt6656: Fix oops on resume from suspend.
  iio:common:st_sensors fixed all warning messages about uninitialized variables
  iio: Fix build error seen if IIO_TRIGGER is defined but IIO_BUFFER is not
  iio/imu: inv_mpu6050 depends on IIO_BUFFER
  iio:ad5064: Initialize register cache correctly
  iio:ad5064: Fix off by one in DAC value range check
  iio:ad5064: Fix address of the second channel for ad5065/ad5045/ad5025
parents e66eded8 564c526a
...@@ -62,7 +62,7 @@ static int st_sensors_match_odr(struct st_sensors *sensor, ...@@ -62,7 +62,7 @@ static int st_sensors_match_odr(struct st_sensors *sensor,
int st_sensors_set_odr(struct iio_dev *indio_dev, unsigned int odr) int st_sensors_set_odr(struct iio_dev *indio_dev, unsigned int odr)
{ {
int err; int err;
struct st_sensor_odr_avl odr_out; struct st_sensor_odr_avl odr_out = {0, 0};
struct st_sensor_data *sdata = iio_priv(indio_dev); struct st_sensor_data *sdata = iio_priv(indio_dev);
err = st_sensors_match_odr(sdata->sensor, odr, &odr_out); err = st_sensors_match_odr(sdata->sensor, odr, &odr_out);
...@@ -114,7 +114,7 @@ static int st_sensors_match_fs(struct st_sensors *sensor, ...@@ -114,7 +114,7 @@ static int st_sensors_match_fs(struct st_sensors *sensor,
static int st_sensors_set_fullscale(struct iio_dev *indio_dev, unsigned int fs) static int st_sensors_set_fullscale(struct iio_dev *indio_dev, unsigned int fs)
{ {
int err, i; int err, i = 0;
struct st_sensor_data *sdata = iio_priv(indio_dev); struct st_sensor_data *sdata = iio_priv(indio_dev);
err = st_sensors_match_fs(sdata->sensor, fs, &i); err = st_sensors_match_fs(sdata->sensor, fs, &i);
...@@ -139,14 +139,13 @@ static int st_sensors_set_fullscale(struct iio_dev *indio_dev, unsigned int fs) ...@@ -139,14 +139,13 @@ static int st_sensors_set_fullscale(struct iio_dev *indio_dev, unsigned int fs)
int st_sensors_set_enable(struct iio_dev *indio_dev, bool enable) int st_sensors_set_enable(struct iio_dev *indio_dev, bool enable)
{ {
bool found;
u8 tmp_value; u8 tmp_value;
int err = -EINVAL; int err = -EINVAL;
struct st_sensor_odr_avl odr_out; bool found = false;
struct st_sensor_odr_avl odr_out = {0, 0};
struct st_sensor_data *sdata = iio_priv(indio_dev); struct st_sensor_data *sdata = iio_priv(indio_dev);
if (enable) { if (enable) {
found = false;
tmp_value = sdata->sensor->pw.value_on; tmp_value = sdata->sensor->pw.value_on;
if ((sdata->sensor->odr.addr == sdata->sensor->pw.addr) && if ((sdata->sensor->odr.addr == sdata->sensor->pw.addr) &&
(sdata->sensor->odr.mask == sdata->sensor->pw.mask)) { (sdata->sensor->odr.mask == sdata->sensor->pw.mask)) {
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#define AD5064_ADDR(x) ((x) << 20) #define AD5064_ADDR(x) ((x) << 20)
#define AD5064_CMD(x) ((x) << 24) #define AD5064_CMD(x) ((x) << 24)
#define AD5064_ADDR_DAC(chan) (chan)
#define AD5064_ADDR_ALL_DAC 0xF #define AD5064_ADDR_ALL_DAC 0xF
#define AD5064_CMD_WRITE_INPUT_N 0x0 #define AD5064_CMD_WRITE_INPUT_N 0x0
...@@ -131,15 +130,15 @@ static int ad5064_write(struct ad5064_state *st, unsigned int cmd, ...@@ -131,15 +130,15 @@ static int ad5064_write(struct ad5064_state *st, unsigned int cmd,
} }
static int ad5064_sync_powerdown_mode(struct ad5064_state *st, static int ad5064_sync_powerdown_mode(struct ad5064_state *st,
unsigned int channel) const struct iio_chan_spec *chan)
{ {
unsigned int val; unsigned int val;
int ret; int ret;
val = (0x1 << channel); val = (0x1 << chan->address);
if (st->pwr_down[channel]) if (st->pwr_down[chan->channel])
val |= st->pwr_down_mode[channel] << 8; val |= st->pwr_down_mode[chan->channel] << 8;
ret = ad5064_write(st, AD5064_CMD_POWERDOWN_DAC, 0, val, 0); ret = ad5064_write(st, AD5064_CMD_POWERDOWN_DAC, 0, val, 0);
...@@ -169,7 +168,7 @@ static int ad5064_set_powerdown_mode(struct iio_dev *indio_dev, ...@@ -169,7 +168,7 @@ static int ad5064_set_powerdown_mode(struct iio_dev *indio_dev,
mutex_lock(&indio_dev->mlock); mutex_lock(&indio_dev->mlock);
st->pwr_down_mode[chan->channel] = mode + 1; st->pwr_down_mode[chan->channel] = mode + 1;
ret = ad5064_sync_powerdown_mode(st, chan->channel); ret = ad5064_sync_powerdown_mode(st, chan);
mutex_unlock(&indio_dev->mlock); mutex_unlock(&indio_dev->mlock);
return ret; return ret;
...@@ -205,7 +204,7 @@ static ssize_t ad5064_write_dac_powerdown(struct iio_dev *indio_dev, ...@@ -205,7 +204,7 @@ static ssize_t ad5064_write_dac_powerdown(struct iio_dev *indio_dev,
mutex_lock(&indio_dev->mlock); mutex_lock(&indio_dev->mlock);
st->pwr_down[chan->channel] = pwr_down; st->pwr_down[chan->channel] = pwr_down;
ret = ad5064_sync_powerdown_mode(st, chan->channel); ret = ad5064_sync_powerdown_mode(st, chan);
mutex_unlock(&indio_dev->mlock); mutex_unlock(&indio_dev->mlock);
return ret ? ret : len; return ret ? ret : len;
} }
...@@ -258,7 +257,7 @@ static int ad5064_write_raw(struct iio_dev *indio_dev, ...@@ -258,7 +257,7 @@ static int ad5064_write_raw(struct iio_dev *indio_dev,
switch (mask) { switch (mask) {
case IIO_CHAN_INFO_RAW: case IIO_CHAN_INFO_RAW:
if (val > (1 << chan->scan_type.realbits) || val < 0) if (val >= (1 << chan->scan_type.realbits) || val < 0)
return -EINVAL; return -EINVAL;
mutex_lock(&indio_dev->mlock); mutex_lock(&indio_dev->mlock);
...@@ -292,34 +291,44 @@ static const struct iio_chan_spec_ext_info ad5064_ext_info[] = { ...@@ -292,34 +291,44 @@ static const struct iio_chan_spec_ext_info ad5064_ext_info[] = {
{ }, { },
}; };
#define AD5064_CHANNEL(chan, bits) { \ #define AD5064_CHANNEL(chan, addr, bits) { \
.type = IIO_VOLTAGE, \ .type = IIO_VOLTAGE, \
.indexed = 1, \ .indexed = 1, \
.output = 1, \ .output = 1, \
.channel = (chan), \ .channel = (chan), \
.info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \
IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \
.address = AD5064_ADDR_DAC(chan), \ .address = addr, \
.scan_type = IIO_ST('u', (bits), 16, 20 - (bits)), \ .scan_type = IIO_ST('u', (bits), 16, 20 - (bits)), \
.ext_info = ad5064_ext_info, \ .ext_info = ad5064_ext_info, \
} }
#define DECLARE_AD5064_CHANNELS(name, bits) \ #define DECLARE_AD5064_CHANNELS(name, bits) \
const struct iio_chan_spec name[] = { \ const struct iio_chan_spec name[] = { \
AD5064_CHANNEL(0, bits), \ AD5064_CHANNEL(0, 0, bits), \
AD5064_CHANNEL(1, bits), \ AD5064_CHANNEL(1, 1, bits), \
AD5064_CHANNEL(2, bits), \ AD5064_CHANNEL(2, 2, bits), \
AD5064_CHANNEL(3, bits), \ AD5064_CHANNEL(3, 3, bits), \
AD5064_CHANNEL(4, bits), \ AD5064_CHANNEL(4, 4, bits), \
AD5064_CHANNEL(5, bits), \ AD5064_CHANNEL(5, 5, bits), \
AD5064_CHANNEL(6, bits), \ AD5064_CHANNEL(6, 6, bits), \
AD5064_CHANNEL(7, bits), \ AD5064_CHANNEL(7, 7, bits), \
}
#define DECLARE_AD5065_CHANNELS(name, bits) \
const struct iio_chan_spec name[] = { \
AD5064_CHANNEL(0, 0, bits), \
AD5064_CHANNEL(1, 3, bits), \
} }
static DECLARE_AD5064_CHANNELS(ad5024_channels, 12); static DECLARE_AD5064_CHANNELS(ad5024_channels, 12);
static DECLARE_AD5064_CHANNELS(ad5044_channels, 14); static DECLARE_AD5064_CHANNELS(ad5044_channels, 14);
static DECLARE_AD5064_CHANNELS(ad5064_channels, 16); static DECLARE_AD5064_CHANNELS(ad5064_channels, 16);
static DECLARE_AD5065_CHANNELS(ad5025_channels, 12);
static DECLARE_AD5065_CHANNELS(ad5045_channels, 14);
static DECLARE_AD5065_CHANNELS(ad5065_channels, 16);
static const struct ad5064_chip_info ad5064_chip_info_tbl[] = { static const struct ad5064_chip_info ad5064_chip_info_tbl[] = {
[ID_AD5024] = { [ID_AD5024] = {
.shared_vref = false, .shared_vref = false,
...@@ -328,7 +337,7 @@ static const struct ad5064_chip_info ad5064_chip_info_tbl[] = { ...@@ -328,7 +337,7 @@ static const struct ad5064_chip_info ad5064_chip_info_tbl[] = {
}, },
[ID_AD5025] = { [ID_AD5025] = {
.shared_vref = false, .shared_vref = false,
.channels = ad5024_channels, .channels = ad5025_channels,
.num_channels = 2, .num_channels = 2,
}, },
[ID_AD5044] = { [ID_AD5044] = {
...@@ -338,7 +347,7 @@ static const struct ad5064_chip_info ad5064_chip_info_tbl[] = { ...@@ -338,7 +347,7 @@ static const struct ad5064_chip_info ad5064_chip_info_tbl[] = {
}, },
[ID_AD5045] = { [ID_AD5045] = {
.shared_vref = false, .shared_vref = false,
.channels = ad5044_channels, .channels = ad5045_channels,
.num_channels = 2, .num_channels = 2,
}, },
[ID_AD5064] = { [ID_AD5064] = {
...@@ -353,7 +362,7 @@ static const struct ad5064_chip_info ad5064_chip_info_tbl[] = { ...@@ -353,7 +362,7 @@ static const struct ad5064_chip_info ad5064_chip_info_tbl[] = {
}, },
[ID_AD5065] = { [ID_AD5065] = {
.shared_vref = false, .shared_vref = false,
.channels = ad5064_channels, .channels = ad5065_channels,
.num_channels = 2, .num_channels = 2,
}, },
[ID_AD5628_1] = { [ID_AD5628_1] = {
...@@ -429,6 +438,7 @@ static int ad5064_probe(struct device *dev, enum ad5064_type type, ...@@ -429,6 +438,7 @@ static int ad5064_probe(struct device *dev, enum ad5064_type type,
{ {
struct iio_dev *indio_dev; struct iio_dev *indio_dev;
struct ad5064_state *st; struct ad5064_state *st;
unsigned int midscale;
unsigned int i; unsigned int i;
int ret; int ret;
...@@ -465,11 +475,6 @@ static int ad5064_probe(struct device *dev, enum ad5064_type type, ...@@ -465,11 +475,6 @@ static int ad5064_probe(struct device *dev, enum ad5064_type type,
goto error_free_reg; goto error_free_reg;
} }
for (i = 0; i < st->chip_info->num_channels; ++i) {
st->pwr_down_mode[i] = AD5064_LDAC_PWRDN_1K;
st->dac_cache[i] = 0x8000;
}
indio_dev->dev.parent = dev; indio_dev->dev.parent = dev;
indio_dev->name = name; indio_dev->name = name;
indio_dev->info = &ad5064_info; indio_dev->info = &ad5064_info;
...@@ -477,6 +482,13 @@ static int ad5064_probe(struct device *dev, enum ad5064_type type, ...@@ -477,6 +482,13 @@ static int ad5064_probe(struct device *dev, enum ad5064_type type,
indio_dev->channels = st->chip_info->channels; indio_dev->channels = st->chip_info->channels;
indio_dev->num_channels = st->chip_info->num_channels; indio_dev->num_channels = st->chip_info->num_channels;
midscale = (1 << indio_dev->channels[0].scan_type.realbits) / 2;
for (i = 0; i < st->chip_info->num_channels; ++i) {
st->pwr_down_mode[i] = AD5064_LDAC_PWRDN_1K;
st->dac_cache[i] = midscale;
}
ret = iio_device_register(indio_dev); ret = iio_device_register(indio_dev);
if (ret) if (ret)
goto error_disable_reg; goto error_disable_reg;
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
config INV_MPU6050_IIO config INV_MPU6050_IIO
tristate "Invensense MPU6050 devices" tristate "Invensense MPU6050 devices"
depends on I2C && SYSFS depends on I2C && SYSFS
select IIO_BUFFER
select IIO_TRIGGERED_BUFFER select IIO_TRIGGERED_BUFFER
help help
This driver supports the Invensense MPU6050 devices. This driver supports the Invensense MPU6050 devices.
......
...@@ -947,12 +947,13 @@ static int dt9812_di_rinsn(struct comedi_device *dev, ...@@ -947,12 +947,13 @@ static int dt9812_di_rinsn(struct comedi_device *dev,
unsigned int *data) unsigned int *data)
{ {
struct comedi_dt9812 *devpriv = dev->private; struct comedi_dt9812 *devpriv = dev->private;
unsigned int channel = CR_CHAN(insn->chanspec);
int n; int n;
u8 bits = 0; u8 bits = 0;
dt9812_digital_in(devpriv->slot, &bits); dt9812_digital_in(devpriv->slot, &bits);
for (n = 0; n < insn->n; n++) for (n = 0; n < insn->n; n++)
data[n] = ((1 << insn->chanspec) & bits) != 0; data[n] = ((1 << channel) & bits) != 0;
return n; return n;
} }
...@@ -961,12 +962,13 @@ static int dt9812_do_winsn(struct comedi_device *dev, ...@@ -961,12 +962,13 @@ static int dt9812_do_winsn(struct comedi_device *dev,
unsigned int *data) unsigned int *data)
{ {
struct comedi_dt9812 *devpriv = dev->private; struct comedi_dt9812 *devpriv = dev->private;
unsigned int channel = CR_CHAN(insn->chanspec);
int n; int n;
u8 bits = 0; u8 bits = 0;
dt9812_digital_out_shadow(devpriv->slot, &bits); dt9812_digital_out_shadow(devpriv->slot, &bits);
for (n = 0; n < insn->n; n++) { for (n = 0; n < insn->n; n++) {
u8 mask = 1 << insn->chanspec; u8 mask = 1 << channel;
bits &= ~mask; bits &= ~mask;
if (data[n]) if (data[n])
...@@ -981,13 +983,13 @@ static int dt9812_ai_rinsn(struct comedi_device *dev, ...@@ -981,13 +983,13 @@ static int dt9812_ai_rinsn(struct comedi_device *dev,
unsigned int *data) unsigned int *data)
{ {
struct comedi_dt9812 *devpriv = dev->private; struct comedi_dt9812 *devpriv = dev->private;
unsigned int channel = CR_CHAN(insn->chanspec);
int n; int n;
for (n = 0; n < insn->n; n++) { for (n = 0; n < insn->n; n++) {
u16 value = 0; u16 value = 0;
dt9812_analog_in(devpriv->slot, insn->chanspec, &value, dt9812_analog_in(devpriv->slot, channel, &value, DT9812_GAIN_1);
DT9812_GAIN_1);
data[n] = value; data[n] = value;
} }
return n; return n;
...@@ -998,12 +1000,13 @@ static int dt9812_ao_rinsn(struct comedi_device *dev, ...@@ -998,12 +1000,13 @@ static int dt9812_ao_rinsn(struct comedi_device *dev,
unsigned int *data) unsigned int *data)
{ {
struct comedi_dt9812 *devpriv = dev->private; struct comedi_dt9812 *devpriv = dev->private;
unsigned int channel = CR_CHAN(insn->chanspec);
int n; int n;
u16 value; u16 value;
for (n = 0; n < insn->n; n++) { for (n = 0; n < insn->n; n++) {
value = 0; value = 0;
dt9812_analog_out_shadow(devpriv->slot, insn->chanspec, &value); dt9812_analog_out_shadow(devpriv->slot, channel, &value);
data[n] = value; data[n] = value;
} }
return n; return n;
...@@ -1014,10 +1017,11 @@ static int dt9812_ao_winsn(struct comedi_device *dev, ...@@ -1014,10 +1017,11 @@ static int dt9812_ao_winsn(struct comedi_device *dev,
unsigned int *data) unsigned int *data)
{ {
struct comedi_dt9812 *devpriv = dev->private; struct comedi_dt9812 *devpriv = dev->private;
unsigned int channel = CR_CHAN(insn->chanspec);
int n; int n;
for (n = 0; n < insn->n; n++) for (n = 0; n < insn->n; n++)
dt9812_analog_out(devpriv->slot, insn->chanspec, data[n]); dt9812_analog_out(devpriv->slot, channel, data[n]);
return n; return n;
} }
......
...@@ -730,10 +730,14 @@ static void usbduxsub_ao_IsocIrq(struct urb *urb) ...@@ -730,10 +730,14 @@ static void usbduxsub_ao_IsocIrq(struct urb *urb)
static int usbduxsub_start(struct usbduxsub *usbduxsub) static int usbduxsub_start(struct usbduxsub *usbduxsub)
{ {
int errcode = 0; int errcode = 0;
uint8_t local_transfer_buffer[16]; uint8_t *local_transfer_buffer;
local_transfer_buffer = kmalloc(1, GFP_KERNEL);
if (!local_transfer_buffer)
return -ENOMEM;
/* 7f92 to zero */ /* 7f92 to zero */
local_transfer_buffer[0] = 0; *local_transfer_buffer = 0;
errcode = usb_control_msg(usbduxsub->usbdev, errcode = usb_control_msg(usbduxsub->usbdev,
/* create a pipe for a control transfer */ /* create a pipe for a control transfer */
usb_sndctrlpipe(usbduxsub->usbdev, 0), usb_sndctrlpipe(usbduxsub->usbdev, 0),
...@@ -751,22 +755,25 @@ static int usbduxsub_start(struct usbduxsub *usbduxsub) ...@@ -751,22 +755,25 @@ static int usbduxsub_start(struct usbduxsub *usbduxsub)
1, 1,
/* Timeout */ /* Timeout */
BULK_TIMEOUT); BULK_TIMEOUT);
if (errcode < 0) { if (errcode < 0)
dev_err(&usbduxsub->interface->dev, dev_err(&usbduxsub->interface->dev,
"comedi_: control msg failed (start)\n"); "comedi_: control msg failed (start)\n");
return errcode;
} kfree(local_transfer_buffer);
return 0; return errcode;
} }
static int usbduxsub_stop(struct usbduxsub *usbduxsub) static int usbduxsub_stop(struct usbduxsub *usbduxsub)
{ {
int errcode = 0; int errcode = 0;
uint8_t *local_transfer_buffer;
uint8_t local_transfer_buffer[16]; local_transfer_buffer = kmalloc(1, GFP_KERNEL);
if (!local_transfer_buffer)
return -ENOMEM;
/* 7f92 to one */ /* 7f92 to one */
local_transfer_buffer[0] = 1; *local_transfer_buffer = 1;
errcode = usb_control_msg(usbduxsub->usbdev, errcode = usb_control_msg(usbduxsub->usbdev,
usb_sndctrlpipe(usbduxsub->usbdev, 0), usb_sndctrlpipe(usbduxsub->usbdev, 0),
/* bRequest, "Firmware" */ /* bRequest, "Firmware" */
...@@ -781,12 +788,12 @@ static int usbduxsub_stop(struct usbduxsub *usbduxsub) ...@@ -781,12 +788,12 @@ static int usbduxsub_stop(struct usbduxsub *usbduxsub)
1, 1,
/* Timeout */ /* Timeout */
BULK_TIMEOUT); BULK_TIMEOUT);
if (errcode < 0) { if (errcode < 0)
dev_err(&usbduxsub->interface->dev, dev_err(&usbduxsub->interface->dev,
"comedi_: control msg failed (stop)\n"); "comedi_: control msg failed (stop)\n");
return errcode;
} kfree(local_transfer_buffer);
return 0; return errcode;
} }
static int usbduxsub_upload(struct usbduxsub *usbduxsub, static int usbduxsub_upload(struct usbduxsub *usbduxsub,
......
...@@ -436,10 +436,14 @@ static void usbduxfastsub_ai_Irq(struct urb *urb) ...@@ -436,10 +436,14 @@ static void usbduxfastsub_ai_Irq(struct urb *urb)
static int usbduxfastsub_start(struct usbduxfastsub_s *udfs) static int usbduxfastsub_start(struct usbduxfastsub_s *udfs)
{ {
int ret; int ret;
unsigned char local_transfer_buffer[16]; unsigned char *local_transfer_buffer;
local_transfer_buffer = kmalloc(1, GFP_KERNEL);
if (!local_transfer_buffer)
return -ENOMEM;
/* 7f92 to zero */ /* 7f92 to zero */
local_transfer_buffer[0] = 0; *local_transfer_buffer = 0;
/* bRequest, "Firmware" */ /* bRequest, "Firmware" */
ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0),
USBDUXFASTSUB_FIRMWARE, USBDUXFASTSUB_FIRMWARE,
...@@ -450,22 +454,25 @@ static int usbduxfastsub_start(struct usbduxfastsub_s *udfs) ...@@ -450,22 +454,25 @@ static int usbduxfastsub_start(struct usbduxfastsub_s *udfs)
local_transfer_buffer, local_transfer_buffer,
1, /* Length */ 1, /* Length */
EZTIMEOUT); /* Timeout */ EZTIMEOUT); /* Timeout */
if (ret < 0) { if (ret < 0)
dev_err(&udfs->interface->dev, dev_err(&udfs->interface->dev,
"control msg failed (start)\n"); "control msg failed (start)\n");
return ret;
}
return 0; kfree(local_transfer_buffer);
return ret;
} }
static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs) static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs)
{ {
int ret; int ret;
unsigned char local_transfer_buffer[16]; unsigned char *local_transfer_buffer;
local_transfer_buffer = kmalloc(1, GFP_KERNEL);
if (!local_transfer_buffer)
return -ENOMEM;
/* 7f92 to one */ /* 7f92 to one */
local_transfer_buffer[0] = 1; *local_transfer_buffer = 1;
/* bRequest, "Firmware" */ /* bRequest, "Firmware" */
ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0),
USBDUXFASTSUB_FIRMWARE, USBDUXFASTSUB_FIRMWARE,
...@@ -474,13 +481,12 @@ static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs) ...@@ -474,13 +481,12 @@ static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs)
0x0000, /* Index */ 0x0000, /* Index */
local_transfer_buffer, 1, /* Length */ local_transfer_buffer, 1, /* Length */
EZTIMEOUT); /* Timeout */ EZTIMEOUT); /* Timeout */
if (ret < 0) { if (ret < 0)
dev_err(&udfs->interface->dev, dev_err(&udfs->interface->dev,
"control msg failed (stop)\n"); "control msg failed (stop)\n");
return ret;
}
return 0; kfree(local_transfer_buffer);
return ret;
} }
static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs, static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs,
......
...@@ -681,7 +681,11 @@ static void usbduxsub_ao_IsocIrq(struct urb *urb) ...@@ -681,7 +681,11 @@ static void usbduxsub_ao_IsocIrq(struct urb *urb)
static int usbduxsub_start(struct usbduxsub *usbduxsub) static int usbduxsub_start(struct usbduxsub *usbduxsub)
{ {
int errcode = 0; int errcode = 0;
uint8_t local_transfer_buffer[16]; uint8_t *local_transfer_buffer;
local_transfer_buffer = kmalloc(16, GFP_KERNEL);
if (!local_transfer_buffer)
return -ENOMEM;
/* 7f92 to zero */ /* 7f92 to zero */
local_transfer_buffer[0] = 0; local_transfer_buffer[0] = 0;
...@@ -702,19 +706,22 @@ static int usbduxsub_start(struct usbduxsub *usbduxsub) ...@@ -702,19 +706,22 @@ static int usbduxsub_start(struct usbduxsub *usbduxsub)
1, 1,
/* Timeout */ /* Timeout */
BULK_TIMEOUT); BULK_TIMEOUT);
if (errcode < 0) { if (errcode < 0)
dev_err(&usbduxsub->interface->dev, dev_err(&usbduxsub->interface->dev,
"comedi_: control msg failed (start)\n"); "comedi_: control msg failed (start)\n");
return errcode;
} kfree(local_transfer_buffer);
return 0; return errcode;
} }
static int usbduxsub_stop(struct usbduxsub *usbduxsub) static int usbduxsub_stop(struct usbduxsub *usbduxsub)
{ {
int errcode = 0; int errcode = 0;
uint8_t *local_transfer_buffer;
uint8_t local_transfer_buffer[16]; local_transfer_buffer = kmalloc(16, GFP_KERNEL);
if (!local_transfer_buffer)
return -ENOMEM;
/* 7f92 to one */ /* 7f92 to one */
local_transfer_buffer[0] = 1; local_transfer_buffer[0] = 1;
...@@ -732,12 +739,12 @@ static int usbduxsub_stop(struct usbduxsub *usbduxsub) ...@@ -732,12 +739,12 @@ static int usbduxsub_stop(struct usbduxsub *usbduxsub)
1, 1,
/* Timeout */ /* Timeout */
BULK_TIMEOUT); BULK_TIMEOUT);
if (errcode < 0) { if (errcode < 0)
dev_err(&usbduxsub->interface->dev, dev_err(&usbduxsub->interface->dev,
"comedi_: control msg failed (stop)\n"); "comedi_: control msg failed (stop)\n");
return errcode;
} kfree(local_transfer_buffer);
return 0; return errcode;
} }
static int usbduxsub_upload(struct usbduxsub *usbduxsub, static int usbduxsub_upload(struct usbduxsub *usbduxsub,
......
...@@ -483,17 +483,6 @@ static int ipu_get_resources(struct ipu_crtc *ipu_crtc, ...@@ -483,17 +483,6 @@ static int ipu_get_resources(struct ipu_crtc *ipu_crtc,
goto err_out; goto err_out;
} }
ipu_crtc->irq = ipu_idmac_channel_irq(ipu, ipu_crtc->ipu_ch,
IPU_IRQ_EOF);
ret = devm_request_irq(ipu_crtc->dev, ipu_crtc->irq, ipu_irq_handler, 0,
"imx_drm", ipu_crtc);
if (ret < 0) {
dev_err(ipu_crtc->dev, "irq request failed with %d.\n", ret);
goto err_out;
}
disable_irq(ipu_crtc->irq);
return 0; return 0;
err_out: err_out:
ipu_put_resources(ipu_crtc); ipu_put_resources(ipu_crtc);
...@@ -504,6 +493,7 @@ static int ipu_get_resources(struct ipu_crtc *ipu_crtc, ...@@ -504,6 +493,7 @@ static int ipu_get_resources(struct ipu_crtc *ipu_crtc,
static int ipu_crtc_init(struct ipu_crtc *ipu_crtc, static int ipu_crtc_init(struct ipu_crtc *ipu_crtc,
struct ipu_client_platformdata *pdata) struct ipu_client_platformdata *pdata)
{ {
struct ipu_soc *ipu = dev_get_drvdata(ipu_crtc->dev->parent);
int ret; int ret;
ret = ipu_get_resources(ipu_crtc, pdata); ret = ipu_get_resources(ipu_crtc, pdata);
...@@ -522,6 +512,17 @@ static int ipu_crtc_init(struct ipu_crtc *ipu_crtc, ...@@ -522,6 +512,17 @@ static int ipu_crtc_init(struct ipu_crtc *ipu_crtc,
goto err_put_resources; goto err_put_resources;
} }
ipu_crtc->irq = ipu_idmac_channel_irq(ipu, ipu_crtc->ipu_ch,
IPU_IRQ_EOF);
ret = devm_request_irq(ipu_crtc->dev, ipu_crtc->irq, ipu_irq_handler, 0,
"imx_drm", ipu_crtc);
if (ret < 0) {
dev_err(ipu_crtc->dev, "irq request failed with %d.\n", ret);
goto err_put_resources;
}
disable_irq(ipu_crtc->irq);
return 0; return 0;
err_put_resources: err_put_resources:
......
...@@ -790,7 +790,7 @@ u64 CARDqGetNextTBTT(u64 qwTSF, WORD wBeaconInterval) ...@@ -790,7 +790,7 @@ u64 CARDqGetNextTBTT(u64 qwTSF, WORD wBeaconInterval)
if ((~uLowNextTBTT) < uLowRemain) if ((~uLowNextTBTT) < uLowRemain)
qwTSF = ((qwTSF >> 32) + 1) << 32; qwTSF = ((qwTSF >> 32) + 1) << 32;
qwTSF = (qwTSF & 0xffffffff00000000UL) | qwTSF = (qwTSF & 0xffffffff00000000ULL) |
(u64)(uLowNextTBTT + uLowRemain); (u64)(uLowNextTBTT + uLowRemain);
return (qwTSF); return (qwTSF);
......
...@@ -669,8 +669,6 @@ static int vt6656_suspend(struct usb_interface *intf, pm_message_t message) ...@@ -669,8 +669,6 @@ static int vt6656_suspend(struct usb_interface *intf, pm_message_t message)
if (device->flags & DEVICE_FLAGS_OPENED) if (device->flags & DEVICE_FLAGS_OPENED)
device_close(device->dev); device_close(device->dev);
usb_put_dev(interface_to_usbdev(intf));
return 0; return 0;
} }
...@@ -681,8 +679,6 @@ static int vt6656_resume(struct usb_interface *intf) ...@@ -681,8 +679,6 @@ static int vt6656_resume(struct usb_interface *intf)
if (!device || !device->dev) if (!device || !device->dev)
return -ENODEV; return -ENODEV;
usb_get_dev(interface_to_usbdev(intf));
if (!(device->flags & DEVICE_FLAGS_OPENED)) if (!(device->flags & DEVICE_FLAGS_OPENED))
device_open(device->dev); device_open(device->dev);
......
...@@ -227,14 +227,17 @@ struct st_sensor_data { ...@@ -227,14 +227,17 @@ struct st_sensor_data {
}; };
#ifdef CONFIG_IIO_BUFFER #ifdef CONFIG_IIO_BUFFER
irqreturn_t st_sensors_trigger_handler(int irq, void *p);
int st_sensors_get_buffer_element(struct iio_dev *indio_dev, u8 *buf);
#endif
#ifdef CONFIG_IIO_TRIGGER
int st_sensors_allocate_trigger(struct iio_dev *indio_dev, int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
const struct iio_trigger_ops *trigger_ops); const struct iio_trigger_ops *trigger_ops);
void st_sensors_deallocate_trigger(struct iio_dev *indio_dev); void st_sensors_deallocate_trigger(struct iio_dev *indio_dev);
irqreturn_t st_sensors_trigger_handler(int irq, void *p);
int st_sensors_get_buffer_element(struct iio_dev *indio_dev, u8 *buf);
#else #else
static inline int st_sensors_allocate_trigger(struct iio_dev *indio_dev, static inline int st_sensors_allocate_trigger(struct iio_dev *indio_dev,
const struct iio_trigger_ops *trigger_ops) const struct iio_trigger_ops *trigger_ops)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment