diff options
| -rw-r--r-- | drivers/iio/common/st_sensors/st_sensors_core.c | 9 | ||||
| -rw-r--r-- | drivers/iio/dac/ad5064.c | 64 | ||||
| -rw-r--r-- | drivers/iio/imu/inv_mpu6050/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/staging/comedi/drivers/dt9812.c | 16 | ||||
| -rw-r--r-- | drivers/staging/comedi/drivers/usbdux.c | 31 | ||||
| -rw-r--r-- | drivers/staging/comedi/drivers/usbduxfast.c | 30 | ||||
| -rw-r--r-- | drivers/staging/comedi/drivers/usbduxsigma.c | 27 | ||||
| -rw-r--r-- | drivers/staging/imx-drm/ipuv3-crtc.c | 23 | ||||
| -rw-r--r-- | drivers/staging/vt6656/card.c | 2 | ||||
| -rw-r--r-- | drivers/staging/vt6656/main_usb.c | 4 | ||||
| -rw-r--r-- | include/linux/iio/common/st_sensors.h | 9 |
11 files changed, 126 insertions, 90 deletions
diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c index 0198324a8b0c..bd33473f8e38 100644 --- a/drivers/iio/common/st_sensors/st_sensors_core.c +++ b/drivers/iio/common/st_sensors/st_sensors_core.c | |||
| @@ -62,7 +62,7 @@ st_sensors_match_odr_error: | |||
| 62 | int st_sensors_set_odr(struct iio_dev *indio_dev, unsigned int odr) | 62 | int st_sensors_set_odr(struct iio_dev *indio_dev, unsigned int odr) |
| 63 | { | 63 | { |
| 64 | int err; | 64 | int err; |
| 65 | struct st_sensor_odr_avl odr_out; | 65 | struct st_sensor_odr_avl odr_out = {0, 0}; |
| 66 | struct st_sensor_data *sdata = iio_priv(indio_dev); | 66 | struct st_sensor_data *sdata = iio_priv(indio_dev); |
| 67 | 67 | ||
| 68 | err = st_sensors_match_odr(sdata->sensor, odr, &odr_out); | 68 | err = st_sensors_match_odr(sdata->sensor, odr, &odr_out); |
| @@ -114,7 +114,7 @@ st_sensors_match_odr_error: | |||
| 114 | 114 | ||
| 115 | static int st_sensors_set_fullscale(struct iio_dev *indio_dev, unsigned int fs) | 115 | static int st_sensors_set_fullscale(struct iio_dev *indio_dev, unsigned int fs) |
| 116 | { | 116 | { |
| 117 | int err, i; | 117 | int err, i = 0; |
| 118 | struct st_sensor_data *sdata = iio_priv(indio_dev); | 118 | struct st_sensor_data *sdata = iio_priv(indio_dev); |
| 119 | 119 | ||
| 120 | err = st_sensors_match_fs(sdata->sensor, fs, &i); | 120 | err = st_sensors_match_fs(sdata->sensor, fs, &i); |
| @@ -139,14 +139,13 @@ st_accel_set_fullscale_error: | |||
| 139 | 139 | ||
| 140 | int st_sensors_set_enable(struct iio_dev *indio_dev, bool enable) | 140 | int st_sensors_set_enable(struct iio_dev *indio_dev, bool enable) |
| 141 | { | 141 | { |
| 142 | bool found; | ||
| 143 | u8 tmp_value; | 142 | u8 tmp_value; |
| 144 | int err = -EINVAL; | 143 | int err = -EINVAL; |
| 145 | struct st_sensor_odr_avl odr_out; | 144 | bool found = false; |
| 145 | struct st_sensor_odr_avl odr_out = {0, 0}; | ||
| 146 | struct st_sensor_data *sdata = iio_priv(indio_dev); | 146 | struct st_sensor_data *sdata = iio_priv(indio_dev); |
| 147 | 147 | ||
| 148 | if (enable) { | 148 | if (enable) { |
| 149 | found = false; | ||
| 150 | tmp_value = sdata->sensor->pw.value_on; | 149 | tmp_value = sdata->sensor->pw.value_on; |
| 151 | if ((sdata->sensor->odr.addr == sdata->sensor->pw.addr) && | 150 | if ((sdata->sensor->odr.addr == sdata->sensor->pw.addr) && |
| 152 | (sdata->sensor->odr.mask == sdata->sensor->pw.mask)) { | 151 | (sdata->sensor->odr.mask == sdata->sensor->pw.mask)) { |
diff --git a/drivers/iio/dac/ad5064.c b/drivers/iio/dac/ad5064.c index 2fe1d4edcb2f..74f2d52795f6 100644 --- a/drivers/iio/dac/ad5064.c +++ b/drivers/iio/dac/ad5064.c | |||
| @@ -27,7 +27,6 @@ | |||
| 27 | #define AD5064_ADDR(x) ((x) << 20) | 27 | #define AD5064_ADDR(x) ((x) << 20) |
| 28 | #define AD5064_CMD(x) ((x) << 24) | 28 | #define AD5064_CMD(x) ((x) << 24) |
| 29 | 29 | ||
| 30 | #define AD5064_ADDR_DAC(chan) (chan) | ||
| 31 | #define AD5064_ADDR_ALL_DAC 0xF | 30 | #define AD5064_ADDR_ALL_DAC 0xF |
| 32 | 31 | ||
| 33 | #define AD5064_CMD_WRITE_INPUT_N 0x0 | 32 | #define AD5064_CMD_WRITE_INPUT_N 0x0 |
| @@ -131,15 +130,15 @@ static int ad5064_write(struct ad5064_state *st, unsigned int cmd, | |||
| 131 | } | 130 | } |
| 132 | 131 | ||
| 133 | static int ad5064_sync_powerdown_mode(struct ad5064_state *st, | 132 | static int ad5064_sync_powerdown_mode(struct ad5064_state *st, |
| 134 | unsigned int channel) | 133 | const struct iio_chan_spec *chan) |
| 135 | { | 134 | { |
| 136 | unsigned int val; | 135 | unsigned int val; |
| 137 | int ret; | 136 | int ret; |
| 138 | 137 | ||
| 139 | val = (0x1 << channel); | 138 | val = (0x1 << chan->address); |
| 140 | 139 | ||
| 141 | if (st->pwr_down[channel]) | 140 | if (st->pwr_down[chan->channel]) |
| 142 | val |= st->pwr_down_mode[channel] << 8; | 141 | val |= st->pwr_down_mode[chan->channel] << 8; |
| 143 | 142 | ||
| 144 | ret = ad5064_write(st, AD5064_CMD_POWERDOWN_DAC, 0, val, 0); | 143 | ret = ad5064_write(st, AD5064_CMD_POWERDOWN_DAC, 0, val, 0); |
| 145 | 144 | ||
| @@ -169,7 +168,7 @@ static int ad5064_set_powerdown_mode(struct iio_dev *indio_dev, | |||
| 169 | mutex_lock(&indio_dev->mlock); | 168 | mutex_lock(&indio_dev->mlock); |
| 170 | st->pwr_down_mode[chan->channel] = mode + 1; | 169 | st->pwr_down_mode[chan->channel] = mode + 1; |
| 171 | 170 | ||
| 172 | ret = ad5064_sync_powerdown_mode(st, chan->channel); | 171 | ret = ad5064_sync_powerdown_mode(st, chan); |
| 173 | mutex_unlock(&indio_dev->mlock); | 172 | mutex_unlock(&indio_dev->mlock); |
| 174 | 173 | ||
| 175 | return ret; | 174 | return ret; |
| @@ -205,7 +204,7 @@ static ssize_t ad5064_write_dac_powerdown(struct iio_dev *indio_dev, | |||
| 205 | mutex_lock(&indio_dev->mlock); | 204 | mutex_lock(&indio_dev->mlock); |
| 206 | st->pwr_down[chan->channel] = pwr_down; | 205 | st->pwr_down[chan->channel] = pwr_down; |
| 207 | 206 | ||
| 208 | ret = ad5064_sync_powerdown_mode(st, chan->channel); | 207 | ret = ad5064_sync_powerdown_mode(st, chan); |
| 209 | mutex_unlock(&indio_dev->mlock); | 208 | mutex_unlock(&indio_dev->mlock); |
| 210 | return ret ? ret : len; | 209 | return ret ? ret : len; |
| 211 | } | 210 | } |
| @@ -258,7 +257,7 @@ static int ad5064_write_raw(struct iio_dev *indio_dev, | |||
| 258 | 257 | ||
| 259 | switch (mask) { | 258 | switch (mask) { |
| 260 | case IIO_CHAN_INFO_RAW: | 259 | case IIO_CHAN_INFO_RAW: |
| 261 | if (val > (1 << chan->scan_type.realbits) || val < 0) | 260 | if (val >= (1 << chan->scan_type.realbits) || val < 0) |
| 262 | return -EINVAL; | 261 | return -EINVAL; |
| 263 | 262 | ||
| 264 | mutex_lock(&indio_dev->mlock); | 263 | mutex_lock(&indio_dev->mlock); |
| @@ -292,34 +291,44 @@ static const struct iio_chan_spec_ext_info ad5064_ext_info[] = { | |||
| 292 | { }, | 291 | { }, |
| 293 | }; | 292 | }; |
| 294 | 293 | ||
| 295 | #define AD5064_CHANNEL(chan, bits) { \ | 294 | #define AD5064_CHANNEL(chan, addr, bits) { \ |
| 296 | .type = IIO_VOLTAGE, \ | 295 | .type = IIO_VOLTAGE, \ |
| 297 | .indexed = 1, \ | 296 | .indexed = 1, \ |
| 298 | .output = 1, \ | 297 | .output = 1, \ |
| 299 | .channel = (chan), \ | 298 | .channel = (chan), \ |
| 300 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ | 299 | .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ |
| 301 | IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ | 300 | IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ |
| 302 | .address = AD5064_ADDR_DAC(chan), \ | 301 | .address = addr, \ |
| 303 | .scan_type = IIO_ST('u', (bits), 16, 20 - (bits)), \ | 302 | .scan_type = IIO_ST('u', (bits), 16, 20 - (bits)), \ |
| 304 | .ext_info = ad5064_ext_info, \ | 303 | .ext_info = ad5064_ext_info, \ |
| 305 | } | 304 | } |
| 306 | 305 | ||
| 307 | #define DECLARE_AD5064_CHANNELS(name, bits) \ | 306 | #define DECLARE_AD5064_CHANNELS(name, bits) \ |
| 308 | const struct iio_chan_spec name[] = { \ | 307 | const struct iio_chan_spec name[] = { \ |
| 309 | AD5064_CHANNEL(0, bits), \ | 308 | AD5064_CHANNEL(0, 0, bits), \ |
| 310 | AD5064_CHANNEL(1, bits), \ | 309 | AD5064_CHANNEL(1, 1, bits), \ |
| 311 | AD5064_CHANNEL(2, bits), \ | 310 | AD5064_CHANNEL(2, 2, bits), \ |
| 312 | AD5064_CHANNEL(3, bits), \ | 311 | AD5064_CHANNEL(3, 3, bits), \ |
| 313 | AD5064_CHANNEL(4, bits), \ | 312 | AD5064_CHANNEL(4, 4, bits), \ |
| 314 | AD5064_CHANNEL(5, bits), \ | 313 | AD5064_CHANNEL(5, 5, bits), \ |
| 315 | AD5064_CHANNEL(6, bits), \ | 314 | AD5064_CHANNEL(6, 6, bits), \ |
| 316 | AD5064_CHANNEL(7, bits), \ | 315 | AD5064_CHANNEL(7, 7, bits), \ |
| 316 | } | ||
| 317 | |||
| 318 | #define DECLARE_AD5065_CHANNELS(name, bits) \ | ||
| 319 | const struct iio_chan_spec name[] = { \ | ||
| 320 | AD5064_CHANNEL(0, 0, bits), \ | ||
| 321 | AD5064_CHANNEL(1, 3, bits), \ | ||
| 317 | } | 322 | } |
| 318 | 323 | ||
| 319 | static DECLARE_AD5064_CHANNELS(ad5024_channels, 12); | 324 | static DECLARE_AD5064_CHANNELS(ad5024_channels, 12); |
| 320 | static DECLARE_AD5064_CHANNELS(ad5044_channels, 14); | 325 | static DECLARE_AD5064_CHANNELS(ad5044_channels, 14); |
| 321 | static DECLARE_AD5064_CHANNELS(ad5064_channels, 16); | 326 | static DECLARE_AD5064_CHANNELS(ad5064_channels, 16); |
| 322 | 327 | ||
| 328 | static DECLARE_AD5065_CHANNELS(ad5025_channels, 12); | ||
| 329 | static DECLARE_AD5065_CHANNELS(ad5045_channels, 14); | ||
| 330 | static DECLARE_AD5065_CHANNELS(ad5065_channels, 16); | ||
| 331 | |||
| 323 | static const struct ad5064_chip_info ad5064_chip_info_tbl[] = { | 332 | static const struct ad5064_chip_info ad5064_chip_info_tbl[] = { |
| 324 | [ID_AD5024] = { | 333 | [ID_AD5024] = { |
| 325 | .shared_vref = false, | 334 | .shared_vref = false, |
| @@ -328,7 +337,7 @@ static const struct ad5064_chip_info ad5064_chip_info_tbl[] = { | |||
| 328 | }, | 337 | }, |
| 329 | [ID_AD5025] = { | 338 | [ID_AD5025] = { |
| 330 | .shared_vref = false, | 339 | .shared_vref = false, |
| 331 | .channels = ad5024_channels, | 340 | .channels = ad5025_channels, |
| 332 | .num_channels = 2, | 341 | .num_channels = 2, |
| 333 | }, | 342 | }, |
| 334 | [ID_AD5044] = { | 343 | [ID_AD5044] = { |
| @@ -338,7 +347,7 @@ static const struct ad5064_chip_info ad5064_chip_info_tbl[] = { | |||
| 338 | }, | 347 | }, |
| 339 | [ID_AD5045] = { | 348 | [ID_AD5045] = { |
| 340 | .shared_vref = false, | 349 | .shared_vref = false, |
| 341 | .channels = ad5044_channels, | 350 | .channels = ad5045_channels, |
| 342 | .num_channels = 2, | 351 | .num_channels = 2, |
| 343 | }, | 352 | }, |
| 344 | [ID_AD5064] = { | 353 | [ID_AD5064] = { |
| @@ -353,7 +362,7 @@ static const struct ad5064_chip_info ad5064_chip_info_tbl[] = { | |||
| 353 | }, | 362 | }, |
| 354 | [ID_AD5065] = { | 363 | [ID_AD5065] = { |
| 355 | .shared_vref = false, | 364 | .shared_vref = false, |
| 356 | .channels = ad5064_channels, | 365 | .channels = ad5065_channels, |
| 357 | .num_channels = 2, | 366 | .num_channels = 2, |
| 358 | }, | 367 | }, |
| 359 | [ID_AD5628_1] = { | 368 | [ID_AD5628_1] = { |
| @@ -429,6 +438,7 @@ static int ad5064_probe(struct device *dev, enum ad5064_type type, | |||
| 429 | { | 438 | { |
| 430 | struct iio_dev *indio_dev; | 439 | struct iio_dev *indio_dev; |
| 431 | struct ad5064_state *st; | 440 | struct ad5064_state *st; |
| 441 | unsigned int midscale; | ||
| 432 | unsigned int i; | 442 | unsigned int i; |
| 433 | int ret; | 443 | int ret; |
| 434 | 444 | ||
| @@ -465,11 +475,6 @@ static int ad5064_probe(struct device *dev, enum ad5064_type type, | |||
| 465 | goto error_free_reg; | 475 | goto error_free_reg; |
| 466 | } | 476 | } |
| 467 | 477 | ||
| 468 | for (i = 0; i < st->chip_info->num_channels; ++i) { | ||
| 469 | st->pwr_down_mode[i] = AD5064_LDAC_PWRDN_1K; | ||
| 470 | st->dac_cache[i] = 0x8000; | ||
| 471 | } | ||
| 472 | |||
| 473 | indio_dev->dev.parent = dev; | 478 | indio_dev->dev.parent = dev; |
| 474 | indio_dev->name = name; | 479 | indio_dev->name = name; |
| 475 | indio_dev->info = &ad5064_info; | 480 | indio_dev->info = &ad5064_info; |
| @@ -477,6 +482,13 @@ static int ad5064_probe(struct device *dev, enum ad5064_type type, | |||
| 477 | indio_dev->channels = st->chip_info->channels; | 482 | indio_dev->channels = st->chip_info->channels; |
| 478 | indio_dev->num_channels = st->chip_info->num_channels; | 483 | indio_dev->num_channels = st->chip_info->num_channels; |
| 479 | 484 | ||
| 485 | midscale = (1 << indio_dev->channels[0].scan_type.realbits) / 2; | ||
| 486 | |||
| 487 | for (i = 0; i < st->chip_info->num_channels; ++i) { | ||
| 488 | st->pwr_down_mode[i] = AD5064_LDAC_PWRDN_1K; | ||
| 489 | st->dac_cache[i] = midscale; | ||
| 490 | } | ||
| 491 | |||
| 480 | ret = iio_device_register(indio_dev); | 492 | ret = iio_device_register(indio_dev); |
| 481 | if (ret) | 493 | if (ret) |
| 482 | goto error_disable_reg; | 494 | goto error_disable_reg; |
diff --git a/drivers/iio/imu/inv_mpu6050/Kconfig b/drivers/iio/imu/inv_mpu6050/Kconfig index b5cfa3a354cf..361b2328453d 100644 --- a/drivers/iio/imu/inv_mpu6050/Kconfig +++ b/drivers/iio/imu/inv_mpu6050/Kconfig | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | config INV_MPU6050_IIO | 5 | config INV_MPU6050_IIO |
| 6 | tristate "Invensense MPU6050 devices" | 6 | tristate "Invensense MPU6050 devices" |
| 7 | depends on I2C && SYSFS | 7 | depends on I2C && SYSFS |
| 8 | select IIO_BUFFER | ||
| 8 | select IIO_TRIGGERED_BUFFER | 9 | select IIO_TRIGGERED_BUFFER |
| 9 | help | 10 | help |
| 10 | This driver supports the Invensense MPU6050 devices. | 11 | This driver supports the Invensense MPU6050 devices. |
diff --git a/drivers/staging/comedi/drivers/dt9812.c b/drivers/staging/comedi/drivers/dt9812.c index 192cf088f834..57b451904791 100644 --- a/drivers/staging/comedi/drivers/dt9812.c +++ b/drivers/staging/comedi/drivers/dt9812.c | |||
| @@ -947,12 +947,13 @@ static int dt9812_di_rinsn(struct comedi_device *dev, | |||
| 947 | unsigned int *data) | 947 | unsigned int *data) |
| 948 | { | 948 | { |
| 949 | struct comedi_dt9812 *devpriv = dev->private; | 949 | struct comedi_dt9812 *devpriv = dev->private; |
| 950 | unsigned int channel = CR_CHAN(insn->chanspec); | ||
| 950 | int n; | 951 | int n; |
| 951 | u8 bits = 0; | 952 | u8 bits = 0; |
| 952 | 953 | ||
| 953 | dt9812_digital_in(devpriv->slot, &bits); | 954 | dt9812_digital_in(devpriv->slot, &bits); |
| 954 | for (n = 0; n < insn->n; n++) | 955 | for (n = 0; n < insn->n; n++) |
| 955 | data[n] = ((1 << insn->chanspec) & bits) != 0; | 956 | data[n] = ((1 << channel) & bits) != 0; |
| 956 | return n; | 957 | return n; |
| 957 | } | 958 | } |
| 958 | 959 | ||
| @@ -961,12 +962,13 @@ static int dt9812_do_winsn(struct comedi_device *dev, | |||
| 961 | unsigned int *data) | 962 | unsigned int *data) |
| 962 | { | 963 | { |
| 963 | struct comedi_dt9812 *devpriv = dev->private; | 964 | struct comedi_dt9812 *devpriv = dev->private; |
| 965 | unsigned int channel = CR_CHAN(insn->chanspec); | ||
| 964 | int n; | 966 | int n; |
| 965 | u8 bits = 0; | 967 | u8 bits = 0; |
| 966 | 968 | ||
| 967 | dt9812_digital_out_shadow(devpriv->slot, &bits); | 969 | dt9812_digital_out_shadow(devpriv->slot, &bits); |
| 968 | for (n = 0; n < insn->n; n++) { | 970 | for (n = 0; n < insn->n; n++) { |
| 969 | u8 mask = 1 << insn->chanspec; | 971 | u8 mask = 1 << channel; |
| 970 | 972 | ||
| 971 | bits &= ~mask; | 973 | bits &= ~mask; |
| 972 | if (data[n]) | 974 | if (data[n]) |
| @@ -981,13 +983,13 @@ static int dt9812_ai_rinsn(struct comedi_device *dev, | |||
| 981 | unsigned int *data) | 983 | unsigned int *data) |
| 982 | { | 984 | { |
| 983 | struct comedi_dt9812 *devpriv = dev->private; | 985 | struct comedi_dt9812 *devpriv = dev->private; |
| 986 | unsigned int channel = CR_CHAN(insn->chanspec); | ||
| 984 | int n; | 987 | int n; |
| 985 | 988 | ||
| 986 | for (n = 0; n < insn->n; n++) { | 989 | for (n = 0; n < insn->n; n++) { |
| 987 | u16 value = 0; | 990 | u16 value = 0; |
| 988 | 991 | ||
| 989 | dt9812_analog_in(devpriv->slot, insn->chanspec, &value, | 992 | dt9812_analog_in(devpriv->slot, channel, &value, DT9812_GAIN_1); |
| 990 | DT9812_GAIN_1); | ||
| 991 | data[n] = value; | 993 | data[n] = value; |
| 992 | } | 994 | } |
| 993 | return n; | 995 | return n; |
| @@ -998,12 +1000,13 @@ static int dt9812_ao_rinsn(struct comedi_device *dev, | |||
| 998 | unsigned int *data) | 1000 | unsigned int *data) |
| 999 | { | 1001 | { |
| 1000 | struct comedi_dt9812 *devpriv = dev->private; | 1002 | struct comedi_dt9812 *devpriv = dev->private; |
| 1003 | unsigned int channel = CR_CHAN(insn->chanspec); | ||
| 1001 | int n; | 1004 | int n; |
| 1002 | u16 value; | 1005 | u16 value; |
| 1003 | 1006 | ||
| 1004 | for (n = 0; n < insn->n; n++) { | 1007 | for (n = 0; n < insn->n; n++) { |
| 1005 | value = 0; | 1008 | value = 0; |
| 1006 | dt9812_analog_out_shadow(devpriv->slot, insn->chanspec, &value); | 1009 | dt9812_analog_out_shadow(devpriv->slot, channel, &value); |
| 1007 | data[n] = value; | 1010 | data[n] = value; |
| 1008 | } | 1011 | } |
| 1009 | return n; | 1012 | return n; |
| @@ -1014,10 +1017,11 @@ static int dt9812_ao_winsn(struct comedi_device *dev, | |||
| 1014 | unsigned int *data) | 1017 | unsigned int *data) |
| 1015 | { | 1018 | { |
| 1016 | struct comedi_dt9812 *devpriv = dev->private; | 1019 | struct comedi_dt9812 *devpriv = dev->private; |
| 1020 | unsigned int channel = CR_CHAN(insn->chanspec); | ||
| 1017 | int n; | 1021 | int n; |
| 1018 | 1022 | ||
| 1019 | for (n = 0; n < insn->n; n++) | 1023 | for (n = 0; n < insn->n; n++) |
| 1020 | dt9812_analog_out(devpriv->slot, insn->chanspec, data[n]); | 1024 | dt9812_analog_out(devpriv->slot, channel, data[n]); |
| 1021 | return n; | 1025 | return n; |
| 1022 | } | 1026 | } |
| 1023 | 1027 | ||
diff --git a/drivers/staging/comedi/drivers/usbdux.c b/drivers/staging/comedi/drivers/usbdux.c index 1a0062a04456..6aac1f60bc42 100644 --- a/drivers/staging/comedi/drivers/usbdux.c +++ b/drivers/staging/comedi/drivers/usbdux.c | |||
| @@ -730,10 +730,14 @@ static void usbduxsub_ao_IsocIrq(struct urb *urb) | |||
| 730 | static int usbduxsub_start(struct usbduxsub *usbduxsub) | 730 | static int usbduxsub_start(struct usbduxsub *usbduxsub) |
| 731 | { | 731 | { |
| 732 | int errcode = 0; | 732 | int errcode = 0; |
| 733 | uint8_t local_transfer_buffer[16]; | 733 | uint8_t *local_transfer_buffer; |
| 734 | |||
| 735 | local_transfer_buffer = kmalloc(1, GFP_KERNEL); | ||
| 736 | if (!local_transfer_buffer) | ||
| 737 | return -ENOMEM; | ||
| 734 | 738 | ||
| 735 | /* 7f92 to zero */ | 739 | /* 7f92 to zero */ |
| 736 | local_transfer_buffer[0] = 0; | 740 | *local_transfer_buffer = 0; |
| 737 | errcode = usb_control_msg(usbduxsub->usbdev, | 741 | errcode = usb_control_msg(usbduxsub->usbdev, |
| 738 | /* create a pipe for a control transfer */ | 742 | /* create a pipe for a control transfer */ |
| 739 | usb_sndctrlpipe(usbduxsub->usbdev, 0), | 743 | usb_sndctrlpipe(usbduxsub->usbdev, 0), |
| @@ -751,22 +755,25 @@ static int usbduxsub_start(struct usbduxsub *usbduxsub) | |||
| 751 | 1, | 755 | 1, |
| 752 | /* Timeout */ | 756 | /* Timeout */ |
| 753 | BULK_TIMEOUT); | 757 | BULK_TIMEOUT); |
| 754 | if (errcode < 0) { | 758 | if (errcode < 0) |
| 755 | dev_err(&usbduxsub->interface->dev, | 759 | dev_err(&usbduxsub->interface->dev, |
| 756 | "comedi_: control msg failed (start)\n"); | 760 | "comedi_: control msg failed (start)\n"); |
| 757 | return errcode; | 761 | |
| 758 | } | 762 | kfree(local_transfer_buffer); |
| 759 | return 0; | 763 | return errcode; |
| 760 | } | 764 | } |
| 761 | 765 | ||
| 762 | static int usbduxsub_stop(struct usbduxsub *usbduxsub) | 766 | static int usbduxsub_stop(struct usbduxsub *usbduxsub) |
| 763 | { | 767 | { |
| 764 | int errcode = 0; | 768 | int errcode = 0; |
| 769 | uint8_t *local_transfer_buffer; | ||
| 765 | 770 | ||
| 766 | uint8_t local_transfer_buffer[16]; | 771 | local_transfer_buffer = kmalloc(1, GFP_KERNEL); |
| 772 | if (!local_transfer_buffer) | ||
| 773 | return -ENOMEM; | ||
| 767 | 774 | ||
| 768 | /* 7f92 to one */ | 775 | /* 7f92 to one */ |
| 769 | local_transfer_buffer[0] = 1; | 776 | *local_transfer_buffer = 1; |
| 770 | errcode = usb_control_msg(usbduxsub->usbdev, | 777 | errcode = usb_control_msg(usbduxsub->usbdev, |
| 771 | usb_sndctrlpipe(usbduxsub->usbdev, 0), | 778 | usb_sndctrlpipe(usbduxsub->usbdev, 0), |
| 772 | /* bRequest, "Firmware" */ | 779 | /* bRequest, "Firmware" */ |
| @@ -781,12 +788,12 @@ static int usbduxsub_stop(struct usbduxsub *usbduxsub) | |||
| 781 | 1, | 788 | 1, |
| 782 | /* Timeout */ | 789 | /* Timeout */ |
| 783 | BULK_TIMEOUT); | 790 | BULK_TIMEOUT); |
| 784 | if (errcode < 0) { | 791 | if (errcode < 0) |
| 785 | dev_err(&usbduxsub->interface->dev, | 792 | dev_err(&usbduxsub->interface->dev, |
| 786 | "comedi_: control msg failed (stop)\n"); | 793 | "comedi_: control msg failed (stop)\n"); |
| 787 | return errcode; | 794 | |
| 788 | } | 795 | kfree(local_transfer_buffer); |
| 789 | return 0; | 796 | return errcode; |
| 790 | } | 797 | } |
| 791 | 798 | ||
| 792 | static int usbduxsub_upload(struct usbduxsub *usbduxsub, | 799 | static int usbduxsub_upload(struct usbduxsub *usbduxsub, |
diff --git a/drivers/staging/comedi/drivers/usbduxfast.c b/drivers/staging/comedi/drivers/usbduxfast.c index 4bf5dd094dc9..1ba0e3df492d 100644 --- a/drivers/staging/comedi/drivers/usbduxfast.c +++ b/drivers/staging/comedi/drivers/usbduxfast.c | |||
| @@ -436,10 +436,14 @@ static void usbduxfastsub_ai_Irq(struct urb *urb) | |||
| 436 | static int usbduxfastsub_start(struct usbduxfastsub_s *udfs) | 436 | static int usbduxfastsub_start(struct usbduxfastsub_s *udfs) |
| 437 | { | 437 | { |
| 438 | int ret; | 438 | int ret; |
| 439 | unsigned char local_transfer_buffer[16]; | 439 | unsigned char *local_transfer_buffer; |
| 440 | |||
| 441 | local_transfer_buffer = kmalloc(1, GFP_KERNEL); | ||
| 442 | if (!local_transfer_buffer) | ||
| 443 | return -ENOMEM; | ||
| 440 | 444 | ||
| 441 | /* 7f92 to zero */ | 445 | /* 7f92 to zero */ |
| 442 | local_transfer_buffer[0] = 0; | 446 | *local_transfer_buffer = 0; |
| 443 | /* bRequest, "Firmware" */ | 447 | /* bRequest, "Firmware" */ |
| 444 | ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), | 448 | ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), |
| 445 | USBDUXFASTSUB_FIRMWARE, | 449 | USBDUXFASTSUB_FIRMWARE, |
| @@ -450,22 +454,25 @@ static int usbduxfastsub_start(struct usbduxfastsub_s *udfs) | |||
| 450 | local_transfer_buffer, | 454 | local_transfer_buffer, |
| 451 | 1, /* Length */ | 455 | 1, /* Length */ |
| 452 | EZTIMEOUT); /* Timeout */ | 456 | EZTIMEOUT); /* Timeout */ |
| 453 | if (ret < 0) { | 457 | if (ret < 0) |
| 454 | dev_err(&udfs->interface->dev, | 458 | dev_err(&udfs->interface->dev, |
| 455 | "control msg failed (start)\n"); | 459 | "control msg failed (start)\n"); |
| 456 | return ret; | ||
| 457 | } | ||
| 458 | 460 | ||
| 459 | return 0; | 461 | kfree(local_transfer_buffer); |
| 462 | return ret; | ||
| 460 | } | 463 | } |
| 461 | 464 | ||
| 462 | static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs) | 465 | static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs) |
| 463 | { | 466 | { |
| 464 | int ret; | 467 | int ret; |
| 465 | unsigned char local_transfer_buffer[16]; | 468 | unsigned char *local_transfer_buffer; |
| 469 | |||
| 470 | local_transfer_buffer = kmalloc(1, GFP_KERNEL); | ||
| 471 | if (!local_transfer_buffer) | ||
| 472 | return -ENOMEM; | ||
| 466 | 473 | ||
| 467 | /* 7f92 to one */ | 474 | /* 7f92 to one */ |
| 468 | local_transfer_buffer[0] = 1; | 475 | *local_transfer_buffer = 1; |
| 469 | /* bRequest, "Firmware" */ | 476 | /* bRequest, "Firmware" */ |
| 470 | ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), | 477 | ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), |
| 471 | USBDUXFASTSUB_FIRMWARE, | 478 | USBDUXFASTSUB_FIRMWARE, |
| @@ -474,13 +481,12 @@ static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs) | |||
| 474 | 0x0000, /* Index */ | 481 | 0x0000, /* Index */ |
| 475 | local_transfer_buffer, 1, /* Length */ | 482 | local_transfer_buffer, 1, /* Length */ |
| 476 | EZTIMEOUT); /* Timeout */ | 483 | EZTIMEOUT); /* Timeout */ |
| 477 | if (ret < 0) { | 484 | if (ret < 0) |
| 478 | dev_err(&udfs->interface->dev, | 485 | dev_err(&udfs->interface->dev, |
| 479 | "control msg failed (stop)\n"); | 486 | "control msg failed (stop)\n"); |
| 480 | return ret; | ||
| 481 | } | ||
| 482 | 487 | ||
| 483 | return 0; | 488 | kfree(local_transfer_buffer); |
| 489 | return ret; | ||
| 484 | } | 490 | } |
| 485 | 491 | ||
| 486 | static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs, | 492 | static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs, |
diff --git a/drivers/staging/comedi/drivers/usbduxsigma.c b/drivers/staging/comedi/drivers/usbduxsigma.c index d066351a71b2..a728c8fc32a2 100644 --- a/drivers/staging/comedi/drivers/usbduxsigma.c +++ b/drivers/staging/comedi/drivers/usbduxsigma.c | |||
| @@ -681,7 +681,11 @@ static void usbduxsub_ao_IsocIrq(struct urb *urb) | |||
| 681 | static int usbduxsub_start(struct usbduxsub *usbduxsub) | 681 | static int usbduxsub_start(struct usbduxsub *usbduxsub) |
| 682 | { | 682 | { |
| 683 | int errcode = 0; | 683 | int errcode = 0; |
| 684 | uint8_t local_transfer_buffer[16]; | 684 | uint8_t *local_transfer_buffer; |
| 685 | |||
| 686 | local_transfer_buffer = kmalloc(16, GFP_KERNEL); | ||
| 687 | if (!local_transfer_buffer) | ||
| 688 | return -ENOMEM; | ||
| 685 | 689 | ||
| 686 | /* 7f92 to zero */ | 690 | /* 7f92 to zero */ |
| 687 | local_transfer_buffer[0] = 0; | 691 | local_transfer_buffer[0] = 0; |
| @@ -702,19 +706,22 @@ static int usbduxsub_start(struct usbduxsub *usbduxsub) | |||
| 702 | 1, | 706 | 1, |
| 703 | /* Timeout */ | 707 | /* Timeout */ |
| 704 | BULK_TIMEOUT); | 708 | BULK_TIMEOUT); |
| 705 | if (errcode < 0) { | 709 | if (errcode < 0) |
| 706 | dev_err(&usbduxsub->interface->dev, | 710 | dev_err(&usbduxsub->interface->dev, |
| 707 | "comedi_: control msg failed (start)\n"); | 711 | "comedi_: control msg failed (start)\n"); |
| 708 | return errcode; | 712 | |
| 709 | } | 713 | kfree(local_transfer_buffer); |
| 710 | return 0; | 714 | return errcode; |
| 711 | } | 715 | } |
| 712 | 716 | ||
| 713 | static int usbduxsub_stop(struct usbduxsub *usbduxsub) | 717 | static int usbduxsub_stop(struct usbduxsub *usbduxsub) |
| 714 | { | 718 | { |
| 715 | int errcode = 0; | 719 | int errcode = 0; |
| 720 | uint8_t *local_transfer_buffer; | ||
| 716 | 721 | ||
| 717 | uint8_t local_transfer_buffer[16]; | 722 | local_transfer_buffer = kmalloc(16, GFP_KERNEL); |
| 723 | if (!local_transfer_buffer) | ||
| 724 | return -ENOMEM; | ||
| 718 | 725 | ||
| 719 | /* 7f92 to one */ | 726 | /* 7f92 to one */ |
| 720 | local_transfer_buffer[0] = 1; | 727 | local_transfer_buffer[0] = 1; |
| @@ -732,12 +739,12 @@ static int usbduxsub_stop(struct usbduxsub *usbduxsub) | |||
| 732 | 1, | 739 | 1, |
| 733 | /* Timeout */ | 740 | /* Timeout */ |
| 734 | BULK_TIMEOUT); | 741 | BULK_TIMEOUT); |
| 735 | if (errcode < 0) { | 742 | if (errcode < 0) |
| 736 | dev_err(&usbduxsub->interface->dev, | 743 | dev_err(&usbduxsub->interface->dev, |
| 737 | "comedi_: control msg failed (stop)\n"); | 744 | "comedi_: control msg failed (stop)\n"); |
| 738 | return errcode; | 745 | |
| 739 | } | 746 | kfree(local_transfer_buffer); |
| 740 | return 0; | 747 | return errcode; |
| 741 | } | 748 | } |
| 742 | 749 | ||
| 743 | static int usbduxsub_upload(struct usbduxsub *usbduxsub, | 750 | static int usbduxsub_upload(struct usbduxsub *usbduxsub, |
diff --git a/drivers/staging/imx-drm/ipuv3-crtc.c b/drivers/staging/imx-drm/ipuv3-crtc.c index 4b3a019409b5..b028b0d1317b 100644 --- a/drivers/staging/imx-drm/ipuv3-crtc.c +++ b/drivers/staging/imx-drm/ipuv3-crtc.c | |||
| @@ -483,17 +483,6 @@ static int ipu_get_resources(struct ipu_crtc *ipu_crtc, | |||
| 483 | goto err_out; | 483 | goto err_out; |
| 484 | } | 484 | } |
| 485 | 485 | ||
| 486 | ipu_crtc->irq = ipu_idmac_channel_irq(ipu, ipu_crtc->ipu_ch, | ||
| 487 | IPU_IRQ_EOF); | ||
| 488 | ret = devm_request_irq(ipu_crtc->dev, ipu_crtc->irq, ipu_irq_handler, 0, | ||
| 489 | "imx_drm", ipu_crtc); | ||
| 490 | if (ret < 0) { | ||
| 491 | dev_err(ipu_crtc->dev, "irq request failed with %d.\n", ret); | ||
| 492 | goto err_out; | ||
| 493 | } | ||
| 494 | |||
| 495 | disable_irq(ipu_crtc->irq); | ||
| 496 | |||
| 497 | return 0; | 486 | return 0; |
| 498 | err_out: | 487 | err_out: |
| 499 | ipu_put_resources(ipu_crtc); | 488 | ipu_put_resources(ipu_crtc); |
| @@ -504,6 +493,7 @@ err_out: | |||
| 504 | static int ipu_crtc_init(struct ipu_crtc *ipu_crtc, | 493 | static int ipu_crtc_init(struct ipu_crtc *ipu_crtc, |
| 505 | struct ipu_client_platformdata *pdata) | 494 | struct ipu_client_platformdata *pdata) |
| 506 | { | 495 | { |
| 496 | struct ipu_soc *ipu = dev_get_drvdata(ipu_crtc->dev->parent); | ||
| 507 | int ret; | 497 | int ret; |
| 508 | 498 | ||
| 509 | ret = ipu_get_resources(ipu_crtc, pdata); | 499 | ret = ipu_get_resources(ipu_crtc, pdata); |
| @@ -522,6 +512,17 @@ static int ipu_crtc_init(struct ipu_crtc *ipu_crtc, | |||
| 522 | goto err_put_resources; | 512 | goto err_put_resources; |
| 523 | } | 513 | } |
| 524 | 514 | ||
| 515 | ipu_crtc->irq = ipu_idmac_channel_irq(ipu, ipu_crtc->ipu_ch, | ||
| 516 | IPU_IRQ_EOF); | ||
| 517 | ret = devm_request_irq(ipu_crtc->dev, ipu_crtc->irq, ipu_irq_handler, 0, | ||
| 518 | "imx_drm", ipu_crtc); | ||
| 519 | if (ret < 0) { | ||
| 520 | dev_err(ipu_crtc->dev, "irq request failed with %d.\n", ret); | ||
| 521 | goto err_put_resources; | ||
| 522 | } | ||
| 523 | |||
| 524 | disable_irq(ipu_crtc->irq); | ||
| 525 | |||
| 525 | return 0; | 526 | return 0; |
| 526 | 527 | ||
| 527 | err_put_resources: | 528 | err_put_resources: |
diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 22918a106d73..d2479b766450 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c | |||
| @@ -790,7 +790,7 @@ u64 CARDqGetNextTBTT(u64 qwTSF, WORD wBeaconInterval) | |||
| 790 | if ((~uLowNextTBTT) < uLowRemain) | 790 | if ((~uLowNextTBTT) < uLowRemain) |
| 791 | qwTSF = ((qwTSF >> 32) + 1) << 32; | 791 | qwTSF = ((qwTSF >> 32) + 1) << 32; |
| 792 | 792 | ||
| 793 | qwTSF = (qwTSF & 0xffffffff00000000UL) | | 793 | qwTSF = (qwTSF & 0xffffffff00000000ULL) | |
| 794 | (u64)(uLowNextTBTT + uLowRemain); | 794 | (u64)(uLowNextTBTT + uLowRemain); |
| 795 | 795 | ||
| 796 | return (qwTSF); | 796 | return (qwTSF); |
diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index d5f53e1a74a2..a5063a6f64d9 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c | |||
| @@ -669,8 +669,6 @@ static int vt6656_suspend(struct usb_interface *intf, pm_message_t message) | |||
| 669 | if (device->flags & DEVICE_FLAGS_OPENED) | 669 | if (device->flags & DEVICE_FLAGS_OPENED) |
| 670 | device_close(device->dev); | 670 | device_close(device->dev); |
| 671 | 671 | ||
| 672 | usb_put_dev(interface_to_usbdev(intf)); | ||
| 673 | |||
| 674 | return 0; | 672 | return 0; |
| 675 | } | 673 | } |
| 676 | 674 | ||
| @@ -681,8 +679,6 @@ static int vt6656_resume(struct usb_interface *intf) | |||
| 681 | if (!device || !device->dev) | 679 | if (!device || !device->dev) |
| 682 | return -ENODEV; | 680 | return -ENODEV; |
| 683 | 681 | ||
| 684 | usb_get_dev(interface_to_usbdev(intf)); | ||
| 685 | |||
| 686 | if (!(device->flags & DEVICE_FLAGS_OPENED)) | 682 | if (!(device->flags & DEVICE_FLAGS_OPENED)) |
| 687 | device_open(device->dev); | 683 | device_open(device->dev); |
| 688 | 684 | ||
diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h index 1f86a97ab2e2..8bd12be0b02f 100644 --- a/include/linux/iio/common/st_sensors.h +++ b/include/linux/iio/common/st_sensors.h | |||
| @@ -227,14 +227,17 @@ struct st_sensor_data { | |||
| 227 | }; | 227 | }; |
| 228 | 228 | ||
| 229 | #ifdef CONFIG_IIO_BUFFER | 229 | #ifdef CONFIG_IIO_BUFFER |
| 230 | irqreturn_t st_sensors_trigger_handler(int irq, void *p); | ||
| 231 | |||
| 232 | int st_sensors_get_buffer_element(struct iio_dev *indio_dev, u8 *buf); | ||
| 233 | #endif | ||
| 234 | |||
| 235 | #ifdef CONFIG_IIO_TRIGGER | ||
| 230 | int st_sensors_allocate_trigger(struct iio_dev *indio_dev, | 236 | int st_sensors_allocate_trigger(struct iio_dev *indio_dev, |
| 231 | const struct iio_trigger_ops *trigger_ops); | 237 | const struct iio_trigger_ops *trigger_ops); |
| 232 | 238 | ||
| 233 | void st_sensors_deallocate_trigger(struct iio_dev *indio_dev); | 239 | void st_sensors_deallocate_trigger(struct iio_dev *indio_dev); |
| 234 | 240 | ||
| 235 | irqreturn_t st_sensors_trigger_handler(int irq, void *p); | ||
| 236 | |||
| 237 | int st_sensors_get_buffer_element(struct iio_dev *indio_dev, u8 *buf); | ||
| 238 | #else | 241 | #else |
| 239 | static inline int st_sensors_allocate_trigger(struct iio_dev *indio_dev, | 242 | static inline int st_sensors_allocate_trigger(struct iio_dev *indio_dev, |
| 240 | const struct iio_trigger_ops *trigger_ops) | 243 | const struct iio_trigger_ops *trigger_ops) |
