Commit a563ae0f authored by Linus Torvalds's avatar Linus Torvalds

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

Pull staging and IIO driver fixes from Greg KH:
 "Here are a number of small IIO and staging driver fixes for 5.15-rc6.

  They include:

   - vc04_services bugfix for reported problem

   - r8188eu array underflow fix

   - iio driver fixes for a lot of tiny reported issues.

  All of these have been in linux-next for a while with no reported
  issues"

* tag 'staging-5.15-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging:
  staging: r8188eu: prevent array underflow in rtw_hal_update_ra_mask()
  staging: vc04_services: shut up out-of-range warning
  iio: light: opt3001: Fixed timeout error when 0 lux
  iio: adis16480: fix devices that do not support sleep mode
  iio: mtk-auxadc: fix case IIO_CHAN_INFO_PROCESSED
  iio: adis16475: fix deadlock on frequency set
  iio: ssp_sensors: add more range checking in ssp_parse_dataframe()
  iio: ssp_sensors: fix error code in ssp_print_mcu_debug()
  iio: adc: ad7793: Fix IRQ flag
  iio: adc: ad7780: Fix IRQ flag
  iio: adc: ad7192: Add IRQ flag
  iio: adc: aspeed: set driver data when adc probe.
  iio: adc: rzg2l_adc: add missing clk_disable_unprepare() in rzg2l_adc_pm_runtime_resume()
  iio: adc: max1027: Fix the number of max1X31 channels
  iio: adc: max1027: Fix wrong shift with 12-bit devices
  iio: adc128s052: Fix the error handling path of 'adc128_probe()'
  iio: adc: rzg2l_adc: Fix -EBUSY timeout error return
  iio: accel: fxls8962af: return IRQ_HANDLED when fifo is flushed
  iio: dac: ti-dac5571: fix an error code in probe()
parents b9e42b3c 37f12202
...@@ -738,7 +738,7 @@ static irqreturn_t fxls8962af_interrupt(int irq, void *p) ...@@ -738,7 +738,7 @@ static irqreturn_t fxls8962af_interrupt(int irq, void *p)
if (reg & FXLS8962AF_INT_STATUS_SRC_BUF) { if (reg & FXLS8962AF_INT_STATUS_SRC_BUF) {
ret = fxls8962af_fifo_flush(indio_dev); ret = fxls8962af_fifo_flush(indio_dev);
if (ret) if (ret < 0)
return IRQ_NONE; return IRQ_NONE;
return IRQ_HANDLED; return IRQ_HANDLED;
......
...@@ -293,6 +293,7 @@ static const struct ad_sigma_delta_info ad7192_sigma_delta_info = { ...@@ -293,6 +293,7 @@ static const struct ad_sigma_delta_info ad7192_sigma_delta_info = {
.has_registers = true, .has_registers = true,
.addr_shift = 3, .addr_shift = 3,
.read_mask = BIT(6), .read_mask = BIT(6),
.irq_flags = IRQF_TRIGGER_FALLING,
}; };
static const struct ad_sd_calib_data ad7192_calib_arr[8] = { static const struct ad_sd_calib_data ad7192_calib_arr[8] = {
......
...@@ -203,7 +203,7 @@ static const struct ad_sigma_delta_info ad7780_sigma_delta_info = { ...@@ -203,7 +203,7 @@ static const struct ad_sigma_delta_info ad7780_sigma_delta_info = {
.set_mode = ad7780_set_mode, .set_mode = ad7780_set_mode,
.postprocess_sample = ad7780_postprocess_sample, .postprocess_sample = ad7780_postprocess_sample,
.has_registers = false, .has_registers = false,
.irq_flags = IRQF_TRIGGER_LOW, .irq_flags = IRQF_TRIGGER_FALLING,
}; };
#define _AD7780_CHANNEL(_bits, _wordsize, _mask_all) \ #define _AD7780_CHANNEL(_bits, _wordsize, _mask_all) \
......
...@@ -206,7 +206,7 @@ static const struct ad_sigma_delta_info ad7793_sigma_delta_info = { ...@@ -206,7 +206,7 @@ static const struct ad_sigma_delta_info ad7793_sigma_delta_info = {
.has_registers = true, .has_registers = true,
.addr_shift = 3, .addr_shift = 3,
.read_mask = BIT(6), .read_mask = BIT(6),
.irq_flags = IRQF_TRIGGER_LOW, .irq_flags = IRQF_TRIGGER_FALLING,
}; };
static const struct ad_sd_calib_data ad7793_calib_arr[6] = { static const struct ad_sd_calib_data ad7793_calib_arr[6] = {
......
...@@ -183,6 +183,7 @@ static int aspeed_adc_probe(struct platform_device *pdev) ...@@ -183,6 +183,7 @@ static int aspeed_adc_probe(struct platform_device *pdev)
data = iio_priv(indio_dev); data = iio_priv(indio_dev);
data->dev = &pdev->dev; data->dev = &pdev->dev;
platform_set_drvdata(pdev, indio_dev);
data->base = devm_platform_ioremap_resource(pdev, 0); data->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(data->base)) if (IS_ERR(data->base))
......
...@@ -103,7 +103,7 @@ MODULE_DEVICE_TABLE(of, max1027_adc_dt_ids); ...@@ -103,7 +103,7 @@ MODULE_DEVICE_TABLE(of, max1027_adc_dt_ids);
.sign = 'u', \ .sign = 'u', \
.realbits = depth, \ .realbits = depth, \
.storagebits = 16, \ .storagebits = 16, \
.shift = 2, \ .shift = (depth == 10) ? 2 : 0, \
.endianness = IIO_BE, \ .endianness = IIO_BE, \
}, \ }, \
} }
...@@ -142,7 +142,6 @@ MODULE_DEVICE_TABLE(of, max1027_adc_dt_ids); ...@@ -142,7 +142,6 @@ MODULE_DEVICE_TABLE(of, max1027_adc_dt_ids);
MAX1027_V_CHAN(11, depth) MAX1027_V_CHAN(11, depth)
#define MAX1X31_CHANNELS(depth) \ #define MAX1X31_CHANNELS(depth) \
MAX1X27_CHANNELS(depth), \
MAX1X29_CHANNELS(depth), \ MAX1X29_CHANNELS(depth), \
MAX1027_V_CHAN(12, depth), \ MAX1027_V_CHAN(12, depth), \
MAX1027_V_CHAN(13, depth), \ MAX1027_V_CHAN(13, depth), \
......
...@@ -82,6 +82,10 @@ static const struct iio_chan_spec mt6577_auxadc_iio_channels[] = { ...@@ -82,6 +82,10 @@ static const struct iio_chan_spec mt6577_auxadc_iio_channels[] = {
MT6577_AUXADC_CHANNEL(15), MT6577_AUXADC_CHANNEL(15),
}; };
/* For Voltage calculation */
#define VOLTAGE_FULL_RANGE 1500 /* VA voltage */
#define AUXADC_PRECISE 4096 /* 12 bits */
static int mt_auxadc_get_cali_data(int rawdata, bool enable_cali) static int mt_auxadc_get_cali_data(int rawdata, bool enable_cali)
{ {
return rawdata; return rawdata;
...@@ -191,6 +195,10 @@ static int mt6577_auxadc_read_raw(struct iio_dev *indio_dev, ...@@ -191,6 +195,10 @@ static int mt6577_auxadc_read_raw(struct iio_dev *indio_dev,
} }
if (adc_dev->dev_comp->sample_data_cali) if (adc_dev->dev_comp->sample_data_cali)
*val = mt_auxadc_get_cali_data(*val, true); *val = mt_auxadc_get_cali_data(*val, true);
/* Convert adc raw data to voltage: 0 - 1500 mV */
*val = *val * VOLTAGE_FULL_RANGE / AUXADC_PRECISE;
return IIO_VAL_INT; return IIO_VAL_INT;
default: default:
......
...@@ -401,7 +401,7 @@ static int rzg2l_adc_hw_init(struct rzg2l_adc *adc) ...@@ -401,7 +401,7 @@ static int rzg2l_adc_hw_init(struct rzg2l_adc *adc)
exit_hw_init: exit_hw_init:
clk_disable_unprepare(adc->pclk); clk_disable_unprepare(adc->pclk);
return 0; return ret;
} }
static void rzg2l_adc_pm_runtime_disable(void *data) static void rzg2l_adc_pm_runtime_disable(void *data)
...@@ -570,8 +570,10 @@ static int __maybe_unused rzg2l_adc_pm_runtime_resume(struct device *dev) ...@@ -570,8 +570,10 @@ static int __maybe_unused rzg2l_adc_pm_runtime_resume(struct device *dev)
return ret; return ret;
ret = clk_prepare_enable(adc->adclk); ret = clk_prepare_enable(adc->adclk);
if (ret) if (ret) {
clk_disable_unprepare(adc->pclk);
return ret; return ret;
}
rzg2l_adc_pwr(adc, true); rzg2l_adc_pwr(adc, true);
......
...@@ -171,7 +171,13 @@ static int adc128_probe(struct spi_device *spi) ...@@ -171,7 +171,13 @@ static int adc128_probe(struct spi_device *spi)
mutex_init(&adc->lock); mutex_init(&adc->lock);
ret = iio_device_register(indio_dev); ret = iio_device_register(indio_dev);
if (ret)
goto err_disable_regulator;
return 0;
err_disable_regulator:
regulator_disable(adc->reg);
return ret; return ret;
} }
......
...@@ -137,7 +137,7 @@ static int ssp_print_mcu_debug(char *data_frame, int *data_index, ...@@ -137,7 +137,7 @@ static int ssp_print_mcu_debug(char *data_frame, int *data_index,
if (length > received_len - *data_index || length <= 0) { if (length > received_len - *data_index || length <= 0) {
ssp_dbg("[SSP]: MSG From MCU-invalid debug length(%d/%d)\n", ssp_dbg("[SSP]: MSG From MCU-invalid debug length(%d/%d)\n",
length, received_len); length, received_len);
return length ? length : -EPROTO; return -EPROTO;
} }
ssp_dbg("[SSP]: MSG From MCU - %s\n", &data_frame[*data_index]); ssp_dbg("[SSP]: MSG From MCU - %s\n", &data_frame[*data_index]);
...@@ -273,6 +273,8 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len) ...@@ -273,6 +273,8 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len)
for (idx = 0; idx < len;) { for (idx = 0; idx < len;) {
switch (dataframe[idx++]) { switch (dataframe[idx++]) {
case SSP_MSG2AP_INST_BYPASS_DATA: case SSP_MSG2AP_INST_BYPASS_DATA:
if (idx >= len)
return -EPROTO;
sd = dataframe[idx++]; sd = dataframe[idx++];
if (sd < 0 || sd >= SSP_SENSOR_MAX) { if (sd < 0 || sd >= SSP_SENSOR_MAX) {
dev_err(SSP_DEV, dev_err(SSP_DEV,
...@@ -282,10 +284,13 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len) ...@@ -282,10 +284,13 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len)
if (indio_devs[sd]) { if (indio_devs[sd]) {
spd = iio_priv(indio_devs[sd]); spd = iio_priv(indio_devs[sd]);
if (spd->process_data) if (spd->process_data) {
if (idx >= len)
return -EPROTO;
spd->process_data(indio_devs[sd], spd->process_data(indio_devs[sd],
&dataframe[idx], &dataframe[idx],
data->timestamp); data->timestamp);
}
} else { } else {
dev_err(SSP_DEV, "no client for frame\n"); dev_err(SSP_DEV, "no client for frame\n");
} }
...@@ -293,6 +298,8 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len) ...@@ -293,6 +298,8 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len)
idx += ssp_offset_map[sd]; idx += ssp_offset_map[sd];
break; break;
case SSP_MSG2AP_INST_DEBUG_DATA: case SSP_MSG2AP_INST_DEBUG_DATA:
if (idx >= len)
return -EPROTO;
sd = ssp_print_mcu_debug(dataframe, &idx, len); sd = ssp_print_mcu_debug(dataframe, &idx, len);
if (sd) { if (sd) {
dev_err(SSP_DEV, dev_err(SSP_DEV,
......
...@@ -350,6 +350,7 @@ static int dac5571_probe(struct i2c_client *client, ...@@ -350,6 +350,7 @@ static int dac5571_probe(struct i2c_client *client,
data->dac5571_pwrdwn = dac5571_pwrdwn_quad; data->dac5571_pwrdwn = dac5571_pwrdwn_quad;
break; break;
default: default:
ret = -EINVAL;
goto err; goto err;
} }
......
...@@ -353,10 +353,11 @@ static int adis16475_set_freq(struct adis16475 *st, const u32 freq) ...@@ -353,10 +353,11 @@ static int adis16475_set_freq(struct adis16475 *st, const u32 freq)
if (dec > st->info->max_dec) if (dec > st->info->max_dec)
dec = st->info->max_dec; dec = st->info->max_dec;
ret = adis_write_reg_16(&st->adis, ADIS16475_REG_DEC_RATE, dec); ret = __adis_write_reg_16(&st->adis, ADIS16475_REG_DEC_RATE, dec);
if (ret) if (ret)
goto error; goto error;
adis_dev_unlock(&st->adis);
/* /*
* If decimation is used, then gyro and accel data will have meaningful * If decimation is used, then gyro and accel data will have meaningful
* bits on the LSB registers. This info is used on the trigger handler. * bits on the LSB registers. This info is used on the trigger handler.
......
...@@ -144,6 +144,7 @@ struct adis16480_chip_info { ...@@ -144,6 +144,7 @@ struct adis16480_chip_info {
unsigned int max_dec_rate; unsigned int max_dec_rate;
const unsigned int *filter_freqs; const unsigned int *filter_freqs;
bool has_pps_clk_mode; bool has_pps_clk_mode;
bool has_sleep_cnt;
const struct adis_data adis_data; const struct adis_data adis_data;
}; };
...@@ -939,6 +940,7 @@ static const struct adis16480_chip_info adis16480_chip_info[] = { ...@@ -939,6 +940,7 @@ static const struct adis16480_chip_info adis16480_chip_info[] = {
.temp_scale = 5650, /* 5.65 milli degree Celsius */ .temp_scale = 5650, /* 5.65 milli degree Celsius */
.int_clk = 2460000, .int_clk = 2460000,
.max_dec_rate = 2048, .max_dec_rate = 2048,
.has_sleep_cnt = true,
.filter_freqs = adis16480_def_filter_freqs, .filter_freqs = adis16480_def_filter_freqs,
.adis_data = ADIS16480_DATA(16375, &adis16485_timeouts, 0), .adis_data = ADIS16480_DATA(16375, &adis16485_timeouts, 0),
}, },
...@@ -952,6 +954,7 @@ static const struct adis16480_chip_info adis16480_chip_info[] = { ...@@ -952,6 +954,7 @@ static const struct adis16480_chip_info adis16480_chip_info[] = {
.temp_scale = 5650, /* 5.65 milli degree Celsius */ .temp_scale = 5650, /* 5.65 milli degree Celsius */
.int_clk = 2460000, .int_clk = 2460000,
.max_dec_rate = 2048, .max_dec_rate = 2048,
.has_sleep_cnt = true,
.filter_freqs = adis16480_def_filter_freqs, .filter_freqs = adis16480_def_filter_freqs,
.adis_data = ADIS16480_DATA(16480, &adis16480_timeouts, 0), .adis_data = ADIS16480_DATA(16480, &adis16480_timeouts, 0),
}, },
...@@ -965,6 +968,7 @@ static const struct adis16480_chip_info adis16480_chip_info[] = { ...@@ -965,6 +968,7 @@ static const struct adis16480_chip_info adis16480_chip_info[] = {
.temp_scale = 5650, /* 5.65 milli degree Celsius */ .temp_scale = 5650, /* 5.65 milli degree Celsius */
.int_clk = 2460000, .int_clk = 2460000,
.max_dec_rate = 2048, .max_dec_rate = 2048,
.has_sleep_cnt = true,
.filter_freqs = adis16480_def_filter_freqs, .filter_freqs = adis16480_def_filter_freqs,
.adis_data = ADIS16480_DATA(16485, &adis16485_timeouts, 0), .adis_data = ADIS16480_DATA(16485, &adis16485_timeouts, 0),
}, },
...@@ -978,6 +982,7 @@ static const struct adis16480_chip_info adis16480_chip_info[] = { ...@@ -978,6 +982,7 @@ static const struct adis16480_chip_info adis16480_chip_info[] = {
.temp_scale = 5650, /* 5.65 milli degree Celsius */ .temp_scale = 5650, /* 5.65 milli degree Celsius */
.int_clk = 2460000, .int_clk = 2460000,
.max_dec_rate = 2048, .max_dec_rate = 2048,
.has_sleep_cnt = true,
.filter_freqs = adis16480_def_filter_freqs, .filter_freqs = adis16480_def_filter_freqs,
.adis_data = ADIS16480_DATA(16488, &adis16485_timeouts, 0), .adis_data = ADIS16480_DATA(16488, &adis16485_timeouts, 0),
}, },
...@@ -1425,9 +1430,12 @@ static int adis16480_probe(struct spi_device *spi) ...@@ -1425,9 +1430,12 @@ static int adis16480_probe(struct spi_device *spi)
if (ret) if (ret)
return ret; return ret;
ret = devm_add_action_or_reset(&spi->dev, adis16480_stop, indio_dev); if (st->chip_info->has_sleep_cnt) {
if (ret) ret = devm_add_action_or_reset(&spi->dev, adis16480_stop,
return ret; indio_dev);
if (ret)
return ret;
}
ret = adis16480_config_irq_pin(spi->dev.of_node, st); ret = adis16480_config_irq_pin(spi->dev.of_node, st);
if (ret) if (ret)
......
...@@ -276,6 +276,8 @@ static int opt3001_get_lux(struct opt3001 *opt, int *val, int *val2) ...@@ -276,6 +276,8 @@ static int opt3001_get_lux(struct opt3001 *opt, int *val, int *val2)
ret = wait_event_timeout(opt->result_ready_queue, ret = wait_event_timeout(opt->result_ready_queue,
opt->result_ready, opt->result_ready,
msecs_to_jiffies(OPT3001_RESULT_READY_LONG)); msecs_to_jiffies(OPT3001_RESULT_READY_LONG));
if (ret == 0)
return -ETIMEDOUT;
} else { } else {
/* Sleep for result ready time */ /* Sleep for result ready time */
timeout = (opt->int_time == OPT3001_INT_TIME_SHORT) ? timeout = (opt->int_time == OPT3001_INT_TIME_SHORT) ?
...@@ -312,9 +314,7 @@ static int opt3001_get_lux(struct opt3001 *opt, int *val, int *val2) ...@@ -312,9 +314,7 @@ static int opt3001_get_lux(struct opt3001 *opt, int *val, int *val2)
/* Disallow IRQ to access the device while lock is active */ /* Disallow IRQ to access the device while lock is active */
opt->ok_to_ignore_lock = false; opt->ok_to_ignore_lock = false;
if (ret == 0) if (ret < 0)
return -ETIMEDOUT;
else if (ret < 0)
return ret; return ret;
if (opt->use_irq) { if (opt->use_irq) {
......
...@@ -248,7 +248,7 @@ void rtw_hal_update_ra_mask(struct adapter *adapt, u32 mac_id, u8 rssi_level) ...@@ -248,7 +248,7 @@ void rtw_hal_update_ra_mask(struct adapter *adapt, u32 mac_id, u8 rssi_level)
#ifdef CONFIG_88EU_AP_MODE #ifdef CONFIG_88EU_AP_MODE
struct sta_info *psta = NULL; struct sta_info *psta = NULL;
struct sta_priv *pstapriv = &adapt->stapriv; struct sta_priv *pstapriv = &adapt->stapriv;
if ((mac_id - 1) > 0) if (mac_id >= 2)
psta = pstapriv->sta_aid[(mac_id - 1) - 1]; psta = pstapriv->sta_aid[(mac_id - 1) - 1];
if (psta) if (psta)
add_RATid(adapt, psta, 0);/* todo: based on rssi_level*/ add_RATid(adapt, psta, 0);/* todo: based on rssi_level*/
......
...@@ -182,7 +182,7 @@ create_pagelist(char *buf, char __user *ubuf, ...@@ -182,7 +182,7 @@ create_pagelist(char *buf, char __user *ubuf,
offset = (uintptr_t)ubuf & (PAGE_SIZE - 1); offset = (uintptr_t)ubuf & (PAGE_SIZE - 1);
num_pages = DIV_ROUND_UP(count + offset, PAGE_SIZE); num_pages = DIV_ROUND_UP(count + offset, PAGE_SIZE);
if (num_pages > (SIZE_MAX - sizeof(struct pagelist) - if ((size_t)num_pages > (SIZE_MAX - sizeof(struct pagelist) -
sizeof(struct vchiq_pagelist_info)) / sizeof(struct vchiq_pagelist_info)) /
(sizeof(u32) + sizeof(pages[0]) + (sizeof(u32) + sizeof(pages[0]) +
sizeof(struct scatterlist))) sizeof(struct scatterlist)))
......
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