mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 14:41:27 +00:00
Staging/IIO fixes for 5.7-rc7
Here are some small staging and IIO driver fixes for 5.7-rc7 Nothing major, just a collection of IIO driver fixes for reported issues, and a few small staging driver fixes that people have found. Full details are in the shortlog. All of these have been in linux-next for a while with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCXskgsA8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ykrWgCfeBhbhJRHNRPQW83rugYPxkIUQEwAn1Qrp5P3 8HA1TrRn0rWgtFVARy/x =2EKs -----END PGP SIGNATURE----- Merge tag 'staging-5.7-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging Pull staging/iio fixes from Greg KH: "Here are some small staging and IIO driver fixes for 5.7-rc7 Nothing major, just a collection of IIO driver fixes for reported issues, and a few small staging driver fixes that people have found. Full details are in the shortlog. All of these have been in linux-next for a while with no reported issues" * tag 'staging-5.7-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: staging: wfx: unlock on error path staging: greybus: Fix uninitialized scalar variable staging: kpc2000: fix error return code in kp2000_pcie_probe() iio: sca3000: Remove an erroneous 'get_device()' iio: adc: stm32-dfsdm: fix device used to request dma iio: adc: stm32-adc: fix device used to request dma iio: adc: ti-ads8344: Fix channel selection staging: iio: ad2s1210: Fix SPI reading iio: dac: vf610: Fix an error handling path in 'vf610_dac_probe()' iio: imu: st_lsm6dsx: unlock on error in st_lsm6dsx_shub_write_raw() iio: chemical: atlas-sensor: correct DO-SM channels
This commit is contained in:
commit
8f261041b1
11 changed files with 61 additions and 34 deletions
|
@ -980,7 +980,7 @@ static int sca3000_read_data(struct sca3000_state *st,
|
||||||
st->tx[0] = SCA3000_READ_REG(reg_address_high);
|
st->tx[0] = SCA3000_READ_REG(reg_address_high);
|
||||||
ret = spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer));
|
ret = spi_sync_transfer(st->us, xfer, ARRAY_SIZE(xfer));
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(get_device(&st->us->dev), "problem reading register");
|
dev_err(&st->us->dev, "problem reading register\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1812,18 +1812,18 @@ static int stm32_adc_chan_of_init(struct iio_dev *indio_dev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stm32_adc_dma_request(struct iio_dev *indio_dev)
|
static int stm32_adc_dma_request(struct device *dev, struct iio_dev *indio_dev)
|
||||||
{
|
{
|
||||||
struct stm32_adc *adc = iio_priv(indio_dev);
|
struct stm32_adc *adc = iio_priv(indio_dev);
|
||||||
struct dma_slave_config config;
|
struct dma_slave_config config;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
adc->dma_chan = dma_request_chan(&indio_dev->dev, "rx");
|
adc->dma_chan = dma_request_chan(dev, "rx");
|
||||||
if (IS_ERR(adc->dma_chan)) {
|
if (IS_ERR(adc->dma_chan)) {
|
||||||
ret = PTR_ERR(adc->dma_chan);
|
ret = PTR_ERR(adc->dma_chan);
|
||||||
if (ret != -ENODEV) {
|
if (ret != -ENODEV) {
|
||||||
if (ret != -EPROBE_DEFER)
|
if (ret != -EPROBE_DEFER)
|
||||||
dev_err(&indio_dev->dev,
|
dev_err(dev,
|
||||||
"DMA channel request failed with %d\n",
|
"DMA channel request failed with %d\n",
|
||||||
ret);
|
ret);
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1930,7 +1930,7 @@ static int stm32_adc_probe(struct platform_device *pdev)
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = stm32_adc_dma_request(indio_dev);
|
ret = stm32_adc_dma_request(dev, indio_dev);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ enum sd_converter_type {
|
||||||
|
|
||||||
struct stm32_dfsdm_dev_data {
|
struct stm32_dfsdm_dev_data {
|
||||||
int type;
|
int type;
|
||||||
int (*init)(struct iio_dev *indio_dev);
|
int (*init)(struct device *dev, struct iio_dev *indio_dev);
|
||||||
unsigned int num_channels;
|
unsigned int num_channels;
|
||||||
const struct regmap_config *regmap_cfg;
|
const struct regmap_config *regmap_cfg;
|
||||||
};
|
};
|
||||||
|
@ -1365,11 +1365,12 @@ static void stm32_dfsdm_dma_release(struct iio_dev *indio_dev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stm32_dfsdm_dma_request(struct iio_dev *indio_dev)
|
static int stm32_dfsdm_dma_request(struct device *dev,
|
||||||
|
struct iio_dev *indio_dev)
|
||||||
{
|
{
|
||||||
struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
|
struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
|
||||||
|
|
||||||
adc->dma_chan = dma_request_chan(&indio_dev->dev, "rx");
|
adc->dma_chan = dma_request_chan(dev, "rx");
|
||||||
if (IS_ERR(adc->dma_chan)) {
|
if (IS_ERR(adc->dma_chan)) {
|
||||||
int ret = PTR_ERR(adc->dma_chan);
|
int ret = PTR_ERR(adc->dma_chan);
|
||||||
|
|
||||||
|
@ -1425,7 +1426,7 @@ static int stm32_dfsdm_adc_chan_init_one(struct iio_dev *indio_dev,
|
||||||
&adc->dfsdm->ch_list[ch->channel]);
|
&adc->dfsdm->ch_list[ch->channel]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stm32_dfsdm_audio_init(struct iio_dev *indio_dev)
|
static int stm32_dfsdm_audio_init(struct device *dev, struct iio_dev *indio_dev)
|
||||||
{
|
{
|
||||||
struct iio_chan_spec *ch;
|
struct iio_chan_spec *ch;
|
||||||
struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
|
struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
|
||||||
|
@ -1452,10 +1453,10 @@ static int stm32_dfsdm_audio_init(struct iio_dev *indio_dev)
|
||||||
indio_dev->num_channels = 1;
|
indio_dev->num_channels = 1;
|
||||||
indio_dev->channels = ch;
|
indio_dev->channels = ch;
|
||||||
|
|
||||||
return stm32_dfsdm_dma_request(indio_dev);
|
return stm32_dfsdm_dma_request(dev, indio_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int stm32_dfsdm_adc_init(struct iio_dev *indio_dev)
|
static int stm32_dfsdm_adc_init(struct device *dev, struct iio_dev *indio_dev)
|
||||||
{
|
{
|
||||||
struct iio_chan_spec *ch;
|
struct iio_chan_spec *ch;
|
||||||
struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
|
struct stm32_dfsdm_adc *adc = iio_priv(indio_dev);
|
||||||
|
@ -1499,17 +1500,17 @@ static int stm32_dfsdm_adc_init(struct iio_dev *indio_dev)
|
||||||
init_completion(&adc->completion);
|
init_completion(&adc->completion);
|
||||||
|
|
||||||
/* Optionally request DMA */
|
/* Optionally request DMA */
|
||||||
ret = stm32_dfsdm_dma_request(indio_dev);
|
ret = stm32_dfsdm_dma_request(dev, indio_dev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
if (ret != -ENODEV) {
|
if (ret != -ENODEV) {
|
||||||
if (ret != -EPROBE_DEFER)
|
if (ret != -EPROBE_DEFER)
|
||||||
dev_err(&indio_dev->dev,
|
dev_err(dev,
|
||||||
"DMA channel request failed with %d\n",
|
"DMA channel request failed with %d\n",
|
||||||
ret);
|
ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_dbg(&indio_dev->dev, "No DMA support\n");
|
dev_dbg(dev, "No DMA support\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1622,7 +1623,7 @@ static int stm32_dfsdm_adc_probe(struct platform_device *pdev)
|
||||||
adc->dfsdm->fl_list[adc->fl_id].sync_mode = val;
|
adc->dfsdm->fl_list[adc->fl_id].sync_mode = val;
|
||||||
|
|
||||||
adc->dev_data = dev_data;
|
adc->dev_data = dev_data;
|
||||||
ret = dev_data->init(iio);
|
ret = dev_data->init(dev, iio);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -32,16 +32,17 @@ struct ads8344 {
|
||||||
u8 rx_buf[3];
|
u8 rx_buf[3];
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ADS8344_VOLTAGE_CHANNEL(chan, si) \
|
#define ADS8344_VOLTAGE_CHANNEL(chan, addr) \
|
||||||
{ \
|
{ \
|
||||||
.type = IIO_VOLTAGE, \
|
.type = IIO_VOLTAGE, \
|
||||||
.indexed = 1, \
|
.indexed = 1, \
|
||||||
.channel = chan, \
|
.channel = chan, \
|
||||||
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
|
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
|
||||||
.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
|
.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
|
||||||
|
.address = addr, \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ADS8344_VOLTAGE_CHANNEL_DIFF(chan1, chan2, si) \
|
#define ADS8344_VOLTAGE_CHANNEL_DIFF(chan1, chan2, addr) \
|
||||||
{ \
|
{ \
|
||||||
.type = IIO_VOLTAGE, \
|
.type = IIO_VOLTAGE, \
|
||||||
.indexed = 1, \
|
.indexed = 1, \
|
||||||
|
@ -50,6 +51,7 @@ struct ads8344 {
|
||||||
.differential = 1, \
|
.differential = 1, \
|
||||||
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
|
.info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
|
||||||
.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
|
.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
|
||||||
|
.address = addr, \
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct iio_chan_spec ads8344_channels[] = {
|
static const struct iio_chan_spec ads8344_channels[] = {
|
||||||
|
@ -105,7 +107,7 @@ static int ads8344_read_raw(struct iio_dev *iio,
|
||||||
switch (mask) {
|
switch (mask) {
|
||||||
case IIO_CHAN_INFO_RAW:
|
case IIO_CHAN_INFO_RAW:
|
||||||
mutex_lock(&adc->lock);
|
mutex_lock(&adc->lock);
|
||||||
*value = ads8344_adc_conversion(adc, channel->scan_index,
|
*value = ads8344_adc_conversion(adc, channel->address,
|
||||||
channel->differential);
|
channel->differential);
|
||||||
mutex_unlock(&adc->lock);
|
mutex_unlock(&adc->lock);
|
||||||
if (*value < 0)
|
if (*value < 0)
|
||||||
|
|
|
@ -194,7 +194,19 @@ static const struct iio_chan_spec atlas_orp_channels[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct iio_chan_spec atlas_do_channels[] = {
|
static const struct iio_chan_spec atlas_do_channels[] = {
|
||||||
ATLAS_CONCENTRATION_CHANNEL(0, ATLAS_REG_DO_DATA),
|
{
|
||||||
|
.type = IIO_CONCENTRATION,
|
||||||
|
.address = ATLAS_REG_DO_DATA,
|
||||||
|
.info_mask_separate =
|
||||||
|
BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
|
||||||
|
.scan_index = 0,
|
||||||
|
.scan_type = {
|
||||||
|
.sign = 'u',
|
||||||
|
.realbits = 32,
|
||||||
|
.storagebits = 32,
|
||||||
|
.endianness = IIO_BE,
|
||||||
|
},
|
||||||
|
},
|
||||||
IIO_CHAN_SOFT_TIMESTAMP(1),
|
IIO_CHAN_SOFT_TIMESTAMP(1),
|
||||||
{
|
{
|
||||||
.type = IIO_TEMP,
|
.type = IIO_TEMP,
|
||||||
|
|
|
@ -223,6 +223,7 @@ static int vf610_dac_probe(struct platform_device *pdev)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error_iio_device_register:
|
error_iio_device_register:
|
||||||
|
vf610_dac_exit(info);
|
||||||
clk_disable_unprepare(info->clk);
|
clk_disable_unprepare(info->clk);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -544,8 +544,10 @@ st_lsm6dsx_shub_write_raw(struct iio_dev *iio_dev,
|
||||||
|
|
||||||
ref_sensor = iio_priv(hw->iio_devs[ST_LSM6DSX_ID_ACC]);
|
ref_sensor = iio_priv(hw->iio_devs[ST_LSM6DSX_ID_ACC]);
|
||||||
odr = st_lsm6dsx_check_odr(ref_sensor, val, &odr_val);
|
odr = st_lsm6dsx_check_odr(ref_sensor, val, &odr_val);
|
||||||
if (odr < 0)
|
if (odr < 0) {
|
||||||
return odr;
|
err = odr;
|
||||||
|
goto release;
|
||||||
|
}
|
||||||
|
|
||||||
sensor->ext_info.slv_odr = val;
|
sensor->ext_info.slv_odr = val;
|
||||||
sensor->odr = odr;
|
sensor->odr = odr;
|
||||||
|
@ -557,6 +559,7 @@ st_lsm6dsx_shub_write_raw(struct iio_dev *iio_dev,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
release:
|
||||||
iio_device_release_direct_mode(iio_dev);
|
iio_device_release_direct_mode(iio_dev);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -537,9 +537,9 @@ static void gb_tty_set_termios(struct tty_struct *tty,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (C_CRTSCTS(tty) && C_BAUD(tty) != B0)
|
if (C_CRTSCTS(tty) && C_BAUD(tty) != B0)
|
||||||
newline.flow_control |= GB_SERIAL_AUTO_RTSCTS_EN;
|
newline.flow_control = GB_SERIAL_AUTO_RTSCTS_EN;
|
||||||
else
|
else
|
||||||
newline.flow_control &= ~GB_SERIAL_AUTO_RTSCTS_EN;
|
newline.flow_control = 0;
|
||||||
|
|
||||||
if (memcmp(&gb_tty->line_coding, &newline, sizeof(newline))) {
|
if (memcmp(&gb_tty->line_coding, &newline, sizeof(newline))) {
|
||||||
memcpy(&gb_tty->line_coding, &newline, sizeof(newline));
|
memcpy(&gb_tty->line_coding, &newline, sizeof(newline));
|
||||||
|
|
|
@ -130,17 +130,24 @@ static int ad2s1210_config_write(struct ad2s1210_state *st, u8 data)
|
||||||
static int ad2s1210_config_read(struct ad2s1210_state *st,
|
static int ad2s1210_config_read(struct ad2s1210_state *st,
|
||||||
unsigned char address)
|
unsigned char address)
|
||||||
{
|
{
|
||||||
struct spi_transfer xfer = {
|
struct spi_transfer xfers[] = {
|
||||||
.len = 2,
|
{
|
||||||
.rx_buf = st->rx,
|
.len = 1,
|
||||||
.tx_buf = st->tx,
|
.rx_buf = &st->rx[0],
|
||||||
|
.tx_buf = &st->tx[0],
|
||||||
|
.cs_change = 1,
|
||||||
|
}, {
|
||||||
|
.len = 1,
|
||||||
|
.rx_buf = &st->rx[1],
|
||||||
|
.tx_buf = &st->tx[1],
|
||||||
|
},
|
||||||
};
|
};
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
ad2s1210_set_mode(MOD_CONFIG, st);
|
ad2s1210_set_mode(MOD_CONFIG, st);
|
||||||
st->tx[0] = address | AD2S1210_MSB_IS_HIGH;
|
st->tx[0] = address | AD2S1210_MSB_IS_HIGH;
|
||||||
st->tx[1] = AD2S1210_REG_FAULT;
|
st->tx[1] = AD2S1210_REG_FAULT;
|
||||||
ret = spi_sync_transfer(st->sdev, &xfer, 1);
|
ret = spi_sync_transfer(st->sdev, xfers, 2);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -298,7 +298,6 @@ static int kp2000_pcie_probe(struct pci_dev *pdev,
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
struct kp2000_device *pcard;
|
struct kp2000_device *pcard;
|
||||||
int rv;
|
|
||||||
unsigned long reg_bar_phys_addr;
|
unsigned long reg_bar_phys_addr;
|
||||||
unsigned long reg_bar_phys_len;
|
unsigned long reg_bar_phys_len;
|
||||||
unsigned long dma_bar_phys_addr;
|
unsigned long dma_bar_phys_addr;
|
||||||
|
@ -445,11 +444,11 @@ static int kp2000_pcie_probe(struct pci_dev *pdev,
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto err_release_dma;
|
goto err_release_dma;
|
||||||
|
|
||||||
rv = request_irq(pcard->pdev->irq, kp2000_irq_handler, IRQF_SHARED,
|
err = request_irq(pcard->pdev->irq, kp2000_irq_handler, IRQF_SHARED,
|
||||||
pcard->name, pcard);
|
pcard->name, pcard);
|
||||||
if (rv) {
|
if (err) {
|
||||||
dev_err(&pcard->pdev->dev,
|
dev_err(&pcard->pdev->dev,
|
||||||
"%s: failed to request_irq: %d\n", __func__, rv);
|
"%s: failed to request_irq: %d\n", __func__, err);
|
||||||
goto err_disable_msi;
|
goto err_disable_msi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,8 +57,10 @@ static int send_scan_req(struct wfx_vif *wvif,
|
||||||
wvif->scan_abort = false;
|
wvif->scan_abort = false;
|
||||||
reinit_completion(&wvif->scan_complete);
|
reinit_completion(&wvif->scan_complete);
|
||||||
timeout = hif_scan(wvif, req, start_idx, i - start_idx);
|
timeout = hif_scan(wvif, req, start_idx, i - start_idx);
|
||||||
if (timeout < 0)
|
if (timeout < 0) {
|
||||||
|
wfx_tx_unlock(wvif->wdev);
|
||||||
return timeout;
|
return timeout;
|
||||||
|
}
|
||||||
ret = wait_for_completion_timeout(&wvif->scan_complete, timeout);
|
ret = wait_for_completion_timeout(&wvif->scan_complete, timeout);
|
||||||
if (req->channels[start_idx]->max_power != wvif->vif->bss_conf.txpower)
|
if (req->channels[start_idx]->max_power != wvif->vif->bss_conf.txpower)
|
||||||
hif_set_output_power(wvif, wvif->vif->bss_conf.txpower);
|
hif_set_output_power(wvif, wvif->vif->bss_conf.txpower);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue