Commit 08bbc4fc authored by Linus Torvalds's avatar Linus Torvalds

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

Pull staging/IIO fixes from Greg KH:
 "Here are some small staging/IIO driver fixes for 4.14-rc4

  Most of these have been in my tree for a while due to travels, sorry
  for the delay. They resolve a number of small issues reported by
  people, mostly for the iio drivers. Nothing major in here, full
  details are in the shortlog.

  All have been linux-next for a few weeks with no reported issues"

* tag 'staging-4.14-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (23 commits)
  staging: iio: ad7192: Fix - use the dedicated reset function avoiding dma from stack.
  iio: core: Return error for failed read_reg
  iio: ad7793: Fix the serial interface reset
  iio: ad_sigma_delta: Implement a dedicated reset function
  IIO: BME280: Updates to Humidity readings need ctrl_reg write!
  iio: adc: mcp320x: Fix readout of negative voltages
  iio: adc: mcp320x: Fix oops on module unload
  iio: adc: stm32: fix bad error check on max_channels
  iio: trigger: stm32-timer: fix a corner case to write preset
  iio: trigger: stm32-timer: preset shouldn't be buffered
  iio: adc: twl4030: Return an error if we can not enable the vusb3v1 regulator in 'twl4030_madc_probe()'
  iio: adc: twl4030: Disable the vusb3v1 rugulator in the error handling path of 'twl4030_madc_probe()'
  iio: adc: twl4030: Fix an error handling path in 'twl4030_madc_probe()'
  staging: rtl8723bs: avoid null pointer dereference on pmlmepriv
  staging: rtl8723bs: add missing range check on id
  staging: vchiq_2835_arm: Fix NULL ptr dereference in free_pagelist
  staging: speakup: fix speakup-r empty line lockup
  staging: pi433: Move limit check to switch default to kill warning
  staging: r8822be: fix null pointer dereferences with a null driver_adapter
  staging: mt29f_spinand: Enable the read ECC before program the page
  ...
parents c4142ed6 b2e31206
...@@ -257,7 +257,7 @@ static int ad7793_setup(struct iio_dev *indio_dev, ...@@ -257,7 +257,7 @@ static int ad7793_setup(struct iio_dev *indio_dev,
unsigned int vref_mv) unsigned int vref_mv)
{ {
struct ad7793_state *st = iio_priv(indio_dev); struct ad7793_state *st = iio_priv(indio_dev);
int i, ret = -1; int i, ret;
unsigned long long scale_uv; unsigned long long scale_uv;
u32 id; u32 id;
...@@ -266,7 +266,7 @@ static int ad7793_setup(struct iio_dev *indio_dev, ...@@ -266,7 +266,7 @@ static int ad7793_setup(struct iio_dev *indio_dev,
return ret; return ret;
/* reset the serial interface */ /* reset the serial interface */
ret = spi_write(st->sd.spi, (u8 *)&ret, sizeof(ret)); ret = ad_sd_reset(&st->sd, 32);
if (ret < 0) if (ret < 0)
goto out; goto out;
usleep_range(500, 2000); /* Wait for at least 500us */ usleep_range(500, 2000); /* Wait for at least 500us */
......
...@@ -177,6 +177,34 @@ int ad_sd_read_reg(struct ad_sigma_delta *sigma_delta, ...@@ -177,6 +177,34 @@ int ad_sd_read_reg(struct ad_sigma_delta *sigma_delta,
} }
EXPORT_SYMBOL_GPL(ad_sd_read_reg); EXPORT_SYMBOL_GPL(ad_sd_read_reg);
/**
* ad_sd_reset() - Reset the serial interface
*
* @sigma_delta: The sigma delta device
* @reset_length: Number of SCLKs with DIN = 1
*
* Returns 0 on success, an error code otherwise.
**/
int ad_sd_reset(struct ad_sigma_delta *sigma_delta,
unsigned int reset_length)
{
uint8_t *buf;
unsigned int size;
int ret;
size = DIV_ROUND_UP(reset_length, 8);
buf = kcalloc(size, sizeof(*buf), GFP_KERNEL);
if (!buf)
return -ENOMEM;
memset(buf, 0xff, size);
ret = spi_write(sigma_delta->spi, buf, size);
kfree(buf);
return ret;
}
EXPORT_SYMBOL_GPL(ad_sd_reset);
static int ad_sd_calibrate(struct ad_sigma_delta *sigma_delta, static int ad_sd_calibrate(struct ad_sigma_delta *sigma_delta,
unsigned int mode, unsigned int channel) unsigned int mode, unsigned int channel)
{ {
......
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
* MCP3204 * MCP3204
* MCP3208 * MCP3208
* ------------ * ------------
* 13 bit converter
* MCP3301
* *
* Datasheet can be found here: * Datasheet can be found here:
* http://ww1.microchip.com/downloads/en/DeviceDoc/21293C.pdf mcp3001 * http://ww1.microchip.com/downloads/en/DeviceDoc/21293C.pdf mcp3001
...@@ -96,7 +98,7 @@ static int mcp320x_channel_to_tx_data(int device_index, ...@@ -96,7 +98,7 @@ static int mcp320x_channel_to_tx_data(int device_index,
} }
static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel, static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel,
bool differential, int device_index) bool differential, int device_index, int *val)
{ {
int ret; int ret;
...@@ -117,19 +119,25 @@ static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel, ...@@ -117,19 +119,25 @@ static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel,
switch (device_index) { switch (device_index) {
case mcp3001: case mcp3001:
return (adc->rx_buf[0] << 5 | adc->rx_buf[1] >> 3); *val = (adc->rx_buf[0] << 5 | adc->rx_buf[1] >> 3);
return 0;
case mcp3002: case mcp3002:
case mcp3004: case mcp3004:
case mcp3008: case mcp3008:
return (adc->rx_buf[0] << 2 | adc->rx_buf[1] >> 6); *val = (adc->rx_buf[0] << 2 | adc->rx_buf[1] >> 6);
return 0;
case mcp3201: case mcp3201:
return (adc->rx_buf[0] << 7 | adc->rx_buf[1] >> 1); *val = (adc->rx_buf[0] << 7 | adc->rx_buf[1] >> 1);
return 0;
case mcp3202: case mcp3202:
case mcp3204: case mcp3204:
case mcp3208: case mcp3208:
return (adc->rx_buf[0] << 4 | adc->rx_buf[1] >> 4); *val = (adc->rx_buf[0] << 4 | adc->rx_buf[1] >> 4);
return 0;
case mcp3301: case mcp3301:
return sign_extend32((adc->rx_buf[0] & 0x1f) << 8 | adc->rx_buf[1], 12); *val = sign_extend32((adc->rx_buf[0] & 0x1f) << 8
| adc->rx_buf[1], 12);
return 0;
default: default:
return -EINVAL; return -EINVAL;
} }
...@@ -150,12 +158,10 @@ static int mcp320x_read_raw(struct iio_dev *indio_dev, ...@@ -150,12 +158,10 @@ static int mcp320x_read_raw(struct iio_dev *indio_dev,
switch (mask) { switch (mask) {
case IIO_CHAN_INFO_RAW: case IIO_CHAN_INFO_RAW:
ret = mcp320x_adc_conversion(adc, channel->address, ret = mcp320x_adc_conversion(adc, channel->address,
channel->differential, device_index); channel->differential, device_index, val);
if (ret < 0) if (ret < 0)
goto out; goto out;
*val = ret;
ret = IIO_VAL_INT; ret = IIO_VAL_INT;
break; break;
...@@ -312,6 +318,7 @@ static int mcp320x_probe(struct spi_device *spi) ...@@ -312,6 +318,7 @@ static int mcp320x_probe(struct spi_device *spi)
indio_dev->name = spi_get_device_id(spi)->name; indio_dev->name = spi_get_device_id(spi)->name;
indio_dev->modes = INDIO_DIRECT_MODE; indio_dev->modes = INDIO_DIRECT_MODE;
indio_dev->info = &mcp320x_info; indio_dev->info = &mcp320x_info;
spi_set_drvdata(spi, indio_dev);
chip_info = &mcp320x_chip_infos[spi_get_device_id(spi)->driver_data]; chip_info = &mcp320x_chip_infos[spi_get_device_id(spi)->driver_data];
indio_dev->channels = chip_info->channels; indio_dev->channels = chip_info->channels;
......
...@@ -1666,7 +1666,7 @@ static int stm32_adc_chan_of_init(struct iio_dev *indio_dev) ...@@ -1666,7 +1666,7 @@ static int stm32_adc_chan_of_init(struct iio_dev *indio_dev)
num_channels = of_property_count_u32_elems(node, "st,adc-channels"); num_channels = of_property_count_u32_elems(node, "st,adc-channels");
if (num_channels < 0 || if (num_channels < 0 ||
num_channels >= adc_info->max_channels) { num_channels > adc_info->max_channels) {
dev_err(&indio_dev->dev, "Bad st,adc-channels?\n"); dev_err(&indio_dev->dev, "Bad st,adc-channels?\n");
return num_channels < 0 ? num_channels : -EINVAL; return num_channels < 0 ? num_channels : -EINVAL;
} }
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
#define ADS1015_CFG_COMP_QUE_MASK GENMASK(1, 0) #define ADS1015_CFG_COMP_QUE_MASK GENMASK(1, 0)
#define ADS1015_CFG_COMP_LAT_MASK BIT(2) #define ADS1015_CFG_COMP_LAT_MASK BIT(2)
#define ADS1015_CFG_COMP_POL_MASK BIT(2) #define ADS1015_CFG_COMP_POL_MASK BIT(3)
#define ADS1015_CFG_COMP_MODE_MASK BIT(4) #define ADS1015_CFG_COMP_MODE_MASK BIT(4)
#define ADS1015_CFG_DR_MASK GENMASK(7, 5) #define ADS1015_CFG_DR_MASK GENMASK(7, 5)
#define ADS1015_CFG_MOD_MASK BIT(8) #define ADS1015_CFG_MOD_MASK BIT(8)
...@@ -1017,10 +1017,12 @@ static int ads1015_probe(struct i2c_client *client, ...@@ -1017,10 +1017,12 @@ static int ads1015_probe(struct i2c_client *client,
switch (irq_trig) { switch (irq_trig) {
case IRQF_TRIGGER_LOW: case IRQF_TRIGGER_LOW:
cfg_comp |= ADS1015_CFG_COMP_POL_LOW; cfg_comp |= ADS1015_CFG_COMP_POL_LOW <<
ADS1015_CFG_COMP_POL_SHIFT;
break; break;
case IRQF_TRIGGER_HIGH: case IRQF_TRIGGER_HIGH:
cfg_comp |= ADS1015_CFG_COMP_POL_HIGH; cfg_comp |= ADS1015_CFG_COMP_POL_HIGH <<
ADS1015_CFG_COMP_POL_SHIFT;
break; break;
default: default:
return -EINVAL; return -EINVAL;
......
...@@ -887,21 +887,27 @@ static int twl4030_madc_probe(struct platform_device *pdev) ...@@ -887,21 +887,27 @@ static int twl4030_madc_probe(struct platform_device *pdev)
/* Enable 3v1 bias regulator for MADC[3:6] */ /* Enable 3v1 bias regulator for MADC[3:6] */
madc->usb3v1 = devm_regulator_get(madc->dev, "vusb3v1"); madc->usb3v1 = devm_regulator_get(madc->dev, "vusb3v1");
if (IS_ERR(madc->usb3v1)) if (IS_ERR(madc->usb3v1)) {
return -ENODEV; ret = -ENODEV;
goto err_i2c;
}
ret = regulator_enable(madc->usb3v1); ret = regulator_enable(madc->usb3v1);
if (ret) if (ret) {
dev_err(madc->dev, "could not enable 3v1 bias regulator\n"); dev_err(madc->dev, "could not enable 3v1 bias regulator\n");
goto err_i2c;
}
ret = iio_device_register(iio_dev); ret = iio_device_register(iio_dev);
if (ret) { if (ret) {
dev_err(&pdev->dev, "could not register iio device\n"); dev_err(&pdev->dev, "could not register iio device\n");
goto err_i2c; goto err_usb3v1;
} }
return 0; return 0;
err_usb3v1:
regulator_disable(madc->usb3v1);
err_i2c: err_i2c:
twl4030_madc_set_current_generator(madc, 0, 0); twl4030_madc_set_current_generator(madc, 0, 0);
err_current_generator: err_current_generator:
......
...@@ -463,8 +463,17 @@ int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable) ...@@ -463,8 +463,17 @@ int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable)
u8 drdy_mask; u8 drdy_mask;
struct st_sensor_data *sdata = iio_priv(indio_dev); struct st_sensor_data *sdata = iio_priv(indio_dev);
if (!sdata->sensor_settings->drdy_irq.addr) if (!sdata->sensor_settings->drdy_irq.addr) {
/*
* there are some devices (e.g. LIS3MDL) where drdy line is
* routed to a given pin and it is not possible to select a
* different one. Take into account irq status register
* to understand if irq trigger can be properly supported
*/
if (sdata->sensor_settings->drdy_irq.addr_stat_drdy)
sdata->hw_irq_trigger = enable;
return 0; return 0;
}
/* Enable/Disable the interrupt generator 1. */ /* Enable/Disable the interrupt generator 1. */
if (sdata->sensor_settings->drdy_irq.ig1.en_addr > 0) { if (sdata->sensor_settings->drdy_irq.ig1.en_addr > 0) {
......
...@@ -310,8 +310,10 @@ static ssize_t iio_debugfs_read_reg(struct file *file, char __user *userbuf, ...@@ -310,8 +310,10 @@ static ssize_t iio_debugfs_read_reg(struct file *file, char __user *userbuf,
ret = indio_dev->info->debugfs_reg_access(indio_dev, ret = indio_dev->info->debugfs_reg_access(indio_dev,
indio_dev->cached_reg_addr, indio_dev->cached_reg_addr,
0, &val); 0, &val);
if (ret) if (ret) {
dev_err(indio_dev->dev.parent, "%s: read failed\n", __func__); dev_err(indio_dev->dev.parent, "%s: read failed\n", __func__);
return ret;
}
len = snprintf(buf, sizeof(buf), "0x%X\n", val); len = snprintf(buf, sizeof(buf), "0x%X\n", val);
......
...@@ -315,6 +315,10 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = { ...@@ -315,6 +315,10 @@ static const struct st_sensor_settings st_magn_sensors_settings[] = {
}, },
}, },
}, },
.drdy_irq = {
/* drdy line is routed drdy pin */
.addr_stat_drdy = ST_SENSORS_DEFAULT_STAT_ADDR,
},
.multi_read_bit = true, .multi_read_bit = true,
.bootime = 2, .bootime = 2,
}, },
......
...@@ -573,7 +573,7 @@ static int bmp280_chip_config(struct bmp280_data *data) ...@@ -573,7 +573,7 @@ static int bmp280_chip_config(struct bmp280_data *data)
u8 osrs = BMP280_OSRS_TEMP_X(data->oversampling_temp + 1) | u8 osrs = BMP280_OSRS_TEMP_X(data->oversampling_temp + 1) |
BMP280_OSRS_PRESS_X(data->oversampling_press + 1); BMP280_OSRS_PRESS_X(data->oversampling_press + 1);
ret = regmap_update_bits(data->regmap, BMP280_REG_CTRL_MEAS, ret = regmap_write_bits(data->regmap, BMP280_REG_CTRL_MEAS,
BMP280_OSRS_TEMP_MASK | BMP280_OSRS_TEMP_MASK |
BMP280_OSRS_PRESS_MASK | BMP280_OSRS_PRESS_MASK |
BMP280_MODE_MASK, BMP280_MODE_MASK,
......
...@@ -174,6 +174,7 @@ static void stm32_timer_stop(struct stm32_timer_trigger *priv) ...@@ -174,6 +174,7 @@ static void stm32_timer_stop(struct stm32_timer_trigger *priv)
clk_disable(priv->clk); clk_disable(priv->clk);
/* Stop timer */ /* Stop timer */
regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0); regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0);
regmap_write(priv->regmap, TIM_PSC, 0); regmap_write(priv->regmap, TIM_PSC, 0);
regmap_write(priv->regmap, TIM_ARR, 0); regmap_write(priv->regmap, TIM_ARR, 0);
...@@ -715,8 +716,9 @@ static ssize_t stm32_count_set_preset(struct iio_dev *indio_dev, ...@@ -715,8 +716,9 @@ static ssize_t stm32_count_set_preset(struct iio_dev *indio_dev,
if (ret) if (ret)
return ret; return ret;
/* TIMx_ARR register shouldn't be buffered (ARPE=0) */
regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
regmap_write(priv->regmap, TIM_ARR, preset); regmap_write(priv->regmap, TIM_ARR, preset);
regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, TIM_CR1_ARPE);
return len; return len;
} }
......
...@@ -223,11 +223,9 @@ static int ad7192_setup(struct ad7192_state *st, ...@@ -223,11 +223,9 @@ static int ad7192_setup(struct ad7192_state *st,
struct iio_dev *indio_dev = spi_get_drvdata(st->sd.spi); struct iio_dev *indio_dev = spi_get_drvdata(st->sd.spi);
unsigned long long scale_uv; unsigned long long scale_uv;
int i, ret, id; int i, ret, id;
u8 ones[6];
/* reset the serial interface */ /* reset the serial interface */
memset(&ones, 0xFF, 6); ret = ad_sd_reset(&st->sd, 48);
ret = spi_write(st->sd.spi, &ones, 6);
if (ret < 0) if (ret < 0)
goto out; goto out;
usleep_range(500, 1000); /* Wait for at least 500us */ usleep_range(500, 1000); /* Wait for at least 500us */
......
...@@ -496,8 +496,12 @@ static int spinand_program_page(struct spi_device *spi_nand, ...@@ -496,8 +496,12 @@ static int spinand_program_page(struct spi_device *spi_nand,
if (!wbuf) if (!wbuf)
return -ENOMEM; return -ENOMEM;
enable_read_hw_ecc = 0; enable_read_hw_ecc = 1;
spinand_read_page(spi_nand, page_id, 0, CACHE_BUF, wbuf); retval = spinand_read_page(spi_nand, page_id, 0, CACHE_BUF, wbuf);
if (retval < 0) {
dev_err(&spi_nand->dev, "ecc error on read page!!!\n");
return retval;
}
for (i = offset, j = 0; i < len; i++, j++) for (i = offset, j = 0; i < len; i++, j++)
wbuf[i] &= buf[j]; wbuf[i] &= buf[j];
......
...@@ -570,12 +570,6 @@ int rf69_set_dio_mapping(struct spi_device *spi, u8 DIONumber, u8 value) ...@@ -570,12 +570,6 @@ int rf69_set_dio_mapping(struct spi_device *spi, u8 DIONumber, u8 value)
dev_dbg(&spi->dev, "set: DIO mapping"); dev_dbg(&spi->dev, "set: DIO mapping");
#endif #endif
// check DIO number
if (DIONumber > 5) {
dev_dbg(&spi->dev, "set: illegal input param");
return -EINVAL;
}
switch (DIONumber) { switch (DIONumber) {
case 0: mask=MASK_DIO0; shift=SHIFT_DIO0; regaddr=REG_DIOMAPPING1; break; case 0: mask=MASK_DIO0; shift=SHIFT_DIO0; regaddr=REG_DIOMAPPING1; break;
case 1: mask=MASK_DIO1; shift=SHIFT_DIO1; regaddr=REG_DIOMAPPING1; break; case 1: mask=MASK_DIO1; shift=SHIFT_DIO1; regaddr=REG_DIOMAPPING1; break;
...@@ -583,6 +577,9 @@ int rf69_set_dio_mapping(struct spi_device *spi, u8 DIONumber, u8 value) ...@@ -583,6 +577,9 @@ int rf69_set_dio_mapping(struct spi_device *spi, u8 DIONumber, u8 value)
case 3: mask=MASK_DIO3; shift=SHIFT_DIO3; regaddr=REG_DIOMAPPING1; break; case 3: mask=MASK_DIO3; shift=SHIFT_DIO3; regaddr=REG_DIOMAPPING1; break;
case 4: mask=MASK_DIO4; shift=SHIFT_DIO4; regaddr=REG_DIOMAPPING2; break; case 4: mask=MASK_DIO4; shift=SHIFT_DIO4; regaddr=REG_DIOMAPPING2; break;
case 5: mask=MASK_DIO5; shift=SHIFT_DIO5; regaddr=REG_DIOMAPPING2; break; case 5: mask=MASK_DIO5; shift=SHIFT_DIO5; regaddr=REG_DIOMAPPING2; break;
default:
dev_dbg(&spi->dev, "set: illegal input param");
return -EINVAL;
} }
// read reg // read reg
......
...@@ -119,9 +119,8 @@ void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv) ...@@ -119,9 +119,8 @@ void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv)
void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv) void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv)
{ {
rtw_free_mlme_priv_ie_data(pmlmepriv);
if (pmlmepriv) { if (pmlmepriv) {
rtw_free_mlme_priv_ie_data(pmlmepriv);
if (pmlmepriv->free_bss_buf) { if (pmlmepriv->free_bss_buf) {
vfree(pmlmepriv->free_bss_buf); vfree(pmlmepriv->free_bss_buf);
} }
......
...@@ -311,6 +311,8 @@ static ssize_t proc_set_cam(struct file *file, const char __user *buffer, size_t ...@@ -311,6 +311,8 @@ static ssize_t proc_set_cam(struct file *file, const char __user *buffer, size_t
if (num < 2) if (num < 2)
return count; return count;
if (id >= TOTAL_CAM_ENTRY)
return -EINVAL;
if (strcmp("c", cmd) == 0) { if (strcmp("c", cmd) == 0) {
_clear_cam_entry(adapter, id); _clear_cam_entry(adapter, id);
......
...@@ -2901,11 +2901,11 @@ halmac_update_datapack_88xx(struct halmac_adapter *halmac_adapter, ...@@ -2901,11 +2901,11 @@ halmac_update_datapack_88xx(struct halmac_adapter *halmac_adapter,
if (halmac_adapter->fw_version.h2c_version < 4) if (halmac_adapter->fw_version.h2c_version < 4)
return HALMAC_RET_FW_NO_SUPPORT; return HALMAC_RET_FW_NO_SUPPORT;
driver_adapter = halmac_adapter->driver_adapter;
HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG,
"[TRACE]%s ==========>\n", __func__); "[TRACE]%s ==========>\n", __func__);
driver_adapter = halmac_adapter->driver_adapter;
HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG,
"[TRACE]%s <==========\n", __func__); "[TRACE]%s <==========\n", __func__);
......
...@@ -1618,10 +1618,11 @@ halmac_send_h2c_set_pwr_mode_88xx(struct halmac_adapter *halmac_adapter, ...@@ -1618,10 +1618,11 @@ halmac_send_h2c_set_pwr_mode_88xx(struct halmac_adapter *halmac_adapter,
void *driver_adapter = NULL; void *driver_adapter = NULL;
enum halmac_ret_status status = HALMAC_RET_SUCCESS; enum halmac_ret_status status = HALMAC_RET_SUCCESS;
driver_adapter = halmac_adapter->driver_adapter;
HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG,
"%s!!\n", __func__); "%s!!\n", __func__);
driver_adapter = halmac_adapter->driver_adapter;
h2c_header = h2c_buff; h2c_header = h2c_buff;
h2c_cmd = h2c_header + HALMAC_H2C_CMD_HDR_SIZE_88XX; h2c_cmd = h2c_header + HALMAC_H2C_CMD_HDR_SIZE_88XX;
...@@ -1713,10 +1714,11 @@ halmac_media_status_rpt_88xx(struct halmac_adapter *halmac_adapter, u8 op_mode, ...@@ -1713,10 +1714,11 @@ halmac_media_status_rpt_88xx(struct halmac_adapter *halmac_adapter, u8 op_mode,
void *driver_adapter = NULL; void *driver_adapter = NULL;
enum halmac_ret_status status = HALMAC_RET_SUCCESS; enum halmac_ret_status status = HALMAC_RET_SUCCESS;
driver_adapter = halmac_adapter->driver_adapter;
HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG,
"halmac_send_h2c_set_pwr_mode_88xx!!\n"); "halmac_send_h2c_set_pwr_mode_88xx!!\n");
driver_adapter = halmac_adapter->driver_adapter;
h2c_header = H2c_buff; h2c_header = H2c_buff;
h2c_cmd = h2c_header + HALMAC_H2C_CMD_HDR_SIZE_88XX; h2c_cmd = h2c_header + HALMAC_H2C_CMD_HDR_SIZE_88XX;
...@@ -2143,10 +2145,11 @@ halmac_func_ctrl_ch_switch_88xx(struct halmac_adapter *halmac_adapter, ...@@ -2143,10 +2145,11 @@ halmac_func_ctrl_ch_switch_88xx(struct halmac_adapter *halmac_adapter,
enum halmac_cmd_process_status *process_status = enum halmac_cmd_process_status *process_status =
&halmac_adapter->halmac_state.scan_state_set.process_status; &halmac_adapter->halmac_state.scan_state_set.process_status;
driver_adapter = halmac_adapter->driver_adapter;
HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG,
"halmac_ctrl_ch_switch!!\n"); "halmac_ctrl_ch_switch!!\n");
driver_adapter = halmac_adapter->driver_adapter;
halmac_api = (struct halmac_api *)halmac_adapter->halmac_api; halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
if (halmac_transition_scan_state_88xx( if (halmac_transition_scan_state_88xx(
...@@ -2276,15 +2279,13 @@ enum halmac_ret_status halmac_send_h2c_update_bcn_parse_info_88xx( ...@@ -2276,15 +2279,13 @@ enum halmac_ret_status halmac_send_h2c_update_bcn_parse_info_88xx(
{ {
u8 h2c_buff[HALMAC_H2C_CMD_SIZE_88XX] = {0}; u8 h2c_buff[HALMAC_H2C_CMD_SIZE_88XX] = {0};
u16 h2c_seq_mum = 0; u16 h2c_seq_mum = 0;
void *driver_adapter = NULL; void *driver_adapter = halmac_adapter->driver_adapter;
struct halmac_h2c_header_info h2c_header_info; struct halmac_h2c_header_info h2c_header_info;
enum halmac_ret_status status = HALMAC_RET_SUCCESS; enum halmac_ret_status status = HALMAC_RET_SUCCESS;
HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG, HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG,
"%s!!\n", __func__); "%s!!\n", __func__);
driver_adapter = halmac_adapter->driver_adapter;
UPDATE_BEACON_PARSING_INFO_SET_FUNC_EN(h2c_buff, bcn_ie_info->func_en); UPDATE_BEACON_PARSING_INFO_SET_FUNC_EN(h2c_buff, bcn_ie_info->func_en);
UPDATE_BEACON_PARSING_INFO_SET_SIZE_TH(h2c_buff, bcn_ie_info->size_th); UPDATE_BEACON_PARSING_INFO_SET_SIZE_TH(h2c_buff, bcn_ie_info->size_th);
UPDATE_BEACON_PARSING_INFO_SET_TIMEOUT(h2c_buff, bcn_ie_info->timeout); UPDATE_BEACON_PARSING_INFO_SET_TIMEOUT(h2c_buff, bcn_ie_info->timeout);
......
...@@ -1376,6 +1376,8 @@ static void reset_highlight_buffers(struct vc_data *); ...@@ -1376,6 +1376,8 @@ static void reset_highlight_buffers(struct vc_data *);
static int read_all_key; static int read_all_key;
static int in_keyboard_notifier;
static void start_read_all_timer(struct vc_data *vc, int command); static void start_read_all_timer(struct vc_data *vc, int command);
enum { enum {
...@@ -1408,7 +1410,10 @@ static void read_all_doc(struct vc_data *vc) ...@@ -1408,7 +1410,10 @@ static void read_all_doc(struct vc_data *vc)
cursor_track = read_all_mode; cursor_track = read_all_mode;
spk_reset_index_count(0); spk_reset_index_count(0);
if (get_sentence_buf(vc, 0) == -1) { if (get_sentence_buf(vc, 0) == -1) {
kbd_fakekey2(vc, RA_DOWN_ARROW); del_timer(&cursor_timer);
if (!in_keyboard_notifier)
speakup_fake_down_arrow();
start_read_all_timer(vc, RA_DOWN_ARROW);
} else { } else {
say_sentence_num(0, 0); say_sentence_num(0, 0);
synth_insert_next_index(0); synth_insert_next_index(0);
...@@ -2212,8 +2217,10 @@ static int keyboard_notifier_call(struct notifier_block *nb, ...@@ -2212,8 +2217,10 @@ static int keyboard_notifier_call(struct notifier_block *nb,
int ret = NOTIFY_OK; int ret = NOTIFY_OK;
static int keycode; /* to hold the current keycode */ static int keycode; /* to hold the current keycode */
in_keyboard_notifier = 1;
if (vc->vc_mode == KD_GRAPHICS) if (vc->vc_mode == KD_GRAPHICS)
return ret; goto out;
/* /*
* First, determine whether we are handling a fake keypress on * First, determine whether we are handling a fake keypress on
...@@ -2225,7 +2232,7 @@ static int keyboard_notifier_call(struct notifier_block *nb, ...@@ -2225,7 +2232,7 @@ static int keyboard_notifier_call(struct notifier_block *nb,
*/ */
if (speakup_fake_key_pressed()) if (speakup_fake_key_pressed())
return ret; goto out;
switch (code) { switch (code) {
case KBD_KEYCODE: case KBD_KEYCODE:
...@@ -2266,6 +2273,8 @@ static int keyboard_notifier_call(struct notifier_block *nb, ...@@ -2266,6 +2273,8 @@ static int keyboard_notifier_call(struct notifier_block *nb,
break; break;
} }
} }
out:
in_keyboard_notifier = 0;
return ret; return ret;
} }
......
...@@ -1826,7 +1826,7 @@ static __init int visorutil_spar_detect(void) ...@@ -1826,7 +1826,7 @@ static __init int visorutil_spar_detect(void)
return 0; return 0;
} }
static int init_unisys(void) static int __init init_unisys(void)
{ {
int result; int result;
...@@ -1841,7 +1841,7 @@ static int init_unisys(void) ...@@ -1841,7 +1841,7 @@ static int init_unisys(void)
return 0; return 0;
}; };
static void exit_unisys(void) static void __exit exit_unisys(void)
{ {
acpi_bus_unregister_driver(&unisys_acpi_driver); acpi_bus_unregister_driver(&unisys_acpi_driver);
} }
......
...@@ -612,18 +612,20 @@ free_pagelist(struct vchiq_pagelist_info *pagelistinfo, ...@@ -612,18 +612,20 @@ free_pagelist(struct vchiq_pagelist_info *pagelistinfo,
if (head_bytes > actual) if (head_bytes > actual)
head_bytes = actual; head_bytes = actual;
memcpy((char *)page_address(pages[0]) + memcpy((char *)kmap(pages[0]) +
pagelist->offset, pagelist->offset,
fragments, fragments,
head_bytes); head_bytes);
kunmap(pages[0]);
} }
if ((actual >= 0) && (head_bytes < actual) && if ((actual >= 0) && (head_bytes < actual) &&
(tail_bytes != 0)) { (tail_bytes != 0)) {
memcpy((char *)page_address(pages[num_pages - 1]) + memcpy((char *)kmap(pages[num_pages - 1]) +
((pagelist->offset + actual) & ((pagelist->offset + actual) &
(PAGE_SIZE - 1) & ~(g_cache_line_size - 1)), (PAGE_SIZE - 1) & ~(g_cache_line_size - 1)),
fragments + g_cache_line_size, fragments + g_cache_line_size,
tail_bytes); tail_bytes);
kunmap(pages[num_pages - 1]);
} }
down(&g_free_fragments_mutex); down(&g_free_fragments_mutex);
......
...@@ -111,6 +111,9 @@ int ad_sd_write_reg(struct ad_sigma_delta *sigma_delta, unsigned int reg, ...@@ -111,6 +111,9 @@ int ad_sd_write_reg(struct ad_sigma_delta *sigma_delta, unsigned int reg,
int ad_sd_read_reg(struct ad_sigma_delta *sigma_delta, unsigned int reg, int ad_sd_read_reg(struct ad_sigma_delta *sigma_delta, unsigned int reg,
unsigned int size, unsigned int *val); unsigned int size, unsigned int *val);
int ad_sd_reset(struct ad_sigma_delta *sigma_delta,
unsigned int reset_length);
int ad_sigma_delta_single_conversion(struct iio_dev *indio_dev, int ad_sigma_delta_single_conversion(struct iio_dev *indio_dev,
const struct iio_chan_spec *chan, int *val); const struct iio_chan_spec *chan, int *val);
int ad_sd_calibrate_all(struct ad_sigma_delta *sigma_delta, int ad_sd_calibrate_all(struct ad_sigma_delta *sigma_delta,
......
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