mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 12:43:55 +08:00
Staging/IIO fixes for 4.14-rc4
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. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCWdN+KQ8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+yluygCgneh7i/okOfsmt/p75eCA4ClWVLwAoIE7BZzt 1WdBcY/Zxv1ANIoY7ZTQ =K+FX -----END PGP SIGNATURE----- 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 ...
This commit is contained in:
commit
08bbc4fcf7
@ -257,7 +257,7 @@ static int ad7793_setup(struct iio_dev *indio_dev,
|
||||
unsigned int vref_mv)
|
||||
{
|
||||
struct ad7793_state *st = iio_priv(indio_dev);
|
||||
int i, ret = -1;
|
||||
int i, ret;
|
||||
unsigned long long scale_uv;
|
||||
u32 id;
|
||||
|
||||
@ -266,7 +266,7 @@ static int ad7793_setup(struct iio_dev *indio_dev,
|
||||
return ret;
|
||||
|
||||
/* reset the serial interface */
|
||||
ret = spi_write(st->sd.spi, (u8 *)&ret, sizeof(ret));
|
||||
ret = ad_sd_reset(&st->sd, 32);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
usleep_range(500, 2000); /* Wait for at least 500us */
|
||||
|
@ -177,6 +177,34 @@ out:
|
||||
}
|
||||
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,
|
||||
unsigned int mode, unsigned int channel)
|
||||
{
|
||||
|
@ -17,6 +17,8 @@
|
||||
* MCP3204
|
||||
* MCP3208
|
||||
* ------------
|
||||
* 13 bit converter
|
||||
* MCP3301
|
||||
*
|
||||
* Datasheet can be found here:
|
||||
* http://ww1.microchip.com/downloads/en/DeviceDoc/21293C.pdf mcp3001
|
||||
@ -96,7 +98,7 @@ static int mcp320x_channel_to_tx_data(int device_index,
|
||||
}
|
||||
|
||||
static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel,
|
||||
bool differential, int device_index)
|
||||
bool differential, int device_index, int *val)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@ -117,19 +119,25 @@ static int mcp320x_adc_conversion(struct mcp320x *adc, u8 channel,
|
||||
|
||||
switch (device_index) {
|
||||
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 mcp3004:
|
||||
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:
|
||||
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 mcp3204:
|
||||
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:
|
||||
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:
|
||||
return -EINVAL;
|
||||
}
|
||||
@ -150,12 +158,10 @@ static int mcp320x_read_raw(struct iio_dev *indio_dev,
|
||||
switch (mask) {
|
||||
case IIO_CHAN_INFO_RAW:
|
||||
ret = mcp320x_adc_conversion(adc, channel->address,
|
||||
channel->differential, device_index);
|
||||
|
||||
channel->differential, device_index, val);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
*val = ret;
|
||||
ret = IIO_VAL_INT;
|
||||
break;
|
||||
|
||||
@ -312,6 +318,7 @@ static int mcp320x_probe(struct spi_device *spi)
|
||||
indio_dev->name = spi_get_device_id(spi)->name;
|
||||
indio_dev->modes = INDIO_DIRECT_MODE;
|
||||
indio_dev->info = &mcp320x_info;
|
||||
spi_set_drvdata(spi, indio_dev);
|
||||
|
||||
chip_info = &mcp320x_chip_infos[spi_get_device_id(spi)->driver_data];
|
||||
indio_dev->channels = chip_info->channels;
|
||||
|
@ -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");
|
||||
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");
|
||||
return num_channels < 0 ? num_channels : -EINVAL;
|
||||
}
|
||||
|
@ -52,7 +52,7 @@
|
||||
|
||||
#define ADS1015_CFG_COMP_QUE_MASK GENMASK(1, 0)
|
||||
#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_DR_MASK GENMASK(7, 5)
|
||||
#define ADS1015_CFG_MOD_MASK BIT(8)
|
||||
@ -1017,10 +1017,12 @@ static int ads1015_probe(struct i2c_client *client,
|
||||
|
||||
switch (irq_trig) {
|
||||
case IRQF_TRIGGER_LOW:
|
||||
cfg_comp |= ADS1015_CFG_COMP_POL_LOW;
|
||||
cfg_comp |= ADS1015_CFG_COMP_POL_LOW <<
|
||||
ADS1015_CFG_COMP_POL_SHIFT;
|
||||
break;
|
||||
case IRQF_TRIGGER_HIGH:
|
||||
cfg_comp |= ADS1015_CFG_COMP_POL_HIGH;
|
||||
cfg_comp |= ADS1015_CFG_COMP_POL_HIGH <<
|
||||
ADS1015_CFG_COMP_POL_SHIFT;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
|
@ -887,21 +887,27 @@ static int twl4030_madc_probe(struct platform_device *pdev)
|
||||
|
||||
/* Enable 3v1 bias regulator for MADC[3:6] */
|
||||
madc->usb3v1 = devm_regulator_get(madc->dev, "vusb3v1");
|
||||
if (IS_ERR(madc->usb3v1))
|
||||
return -ENODEV;
|
||||
if (IS_ERR(madc->usb3v1)) {
|
||||
ret = -ENODEV;
|
||||
goto err_i2c;
|
||||
}
|
||||
|
||||
ret = regulator_enable(madc->usb3v1);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
dev_err(madc->dev, "could not enable 3v1 bias regulator\n");
|
||||
goto err_i2c;
|
||||
}
|
||||
|
||||
ret = iio_device_register(iio_dev);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "could not register iio device\n");
|
||||
goto err_i2c;
|
||||
goto err_usb3v1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_usb3v1:
|
||||
regulator_disable(madc->usb3v1);
|
||||
err_i2c:
|
||||
twl4030_madc_set_current_generator(madc, 0, 0);
|
||||
err_current_generator:
|
||||
|
@ -463,8 +463,17 @@ int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable)
|
||||
u8 drdy_mask;
|
||||
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;
|
||||
}
|
||||
|
||||
/* Enable/Disable the interrupt generator 1. */
|
||||
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,
|
||||
ret = indio_dev->info->debugfs_reg_access(indio_dev,
|
||||
indio_dev->cached_reg_addr,
|
||||
0, &val);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
dev_err(indio_dev->dev.parent, "%s: read failed\n", __func__);
|
||||
return ret;
|
||||
}
|
||||
|
||||
len = snprintf(buf, sizeof(buf), "0x%X\n", val);
|
||||
|
||||
|
@ -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,
|
||||
.bootime = 2,
|
||||
},
|
||||
|
@ -573,7 +573,7 @@ static int bmp280_chip_config(struct bmp280_data *data)
|
||||
u8 osrs = BMP280_OSRS_TEMP_X(data->oversampling_temp + 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_PRESS_MASK |
|
||||
BMP280_MODE_MASK,
|
||||
|
@ -174,6 +174,7 @@ static void stm32_timer_stop(struct stm32_timer_trigger *priv)
|
||||
clk_disable(priv->clk);
|
||||
|
||||
/* 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_write(priv->regmap, TIM_PSC, 0);
|
||||
regmap_write(priv->regmap, TIM_ARR, 0);
|
||||
@ -715,8 +716,9 @@ static ssize_t stm32_count_set_preset(struct iio_dev *indio_dev,
|
||||
if (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_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, TIM_CR1_ARPE);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
@ -223,11 +223,9 @@ static int ad7192_setup(struct ad7192_state *st,
|
||||
struct iio_dev *indio_dev = spi_get_drvdata(st->sd.spi);
|
||||
unsigned long long scale_uv;
|
||||
int i, ret, id;
|
||||
u8 ones[6];
|
||||
|
||||
/* reset the serial interface */
|
||||
memset(&ones, 0xFF, 6);
|
||||
ret = spi_write(st->sd.spi, &ones, 6);
|
||||
ret = ad_sd_reset(&st->sd, 48);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
usleep_range(500, 1000); /* Wait for at least 500us */
|
||||
|
@ -496,8 +496,12 @@ static int spinand_program_page(struct spi_device *spi_nand,
|
||||
if (!wbuf)
|
||||
return -ENOMEM;
|
||||
|
||||
enable_read_hw_ecc = 0;
|
||||
spinand_read_page(spi_nand, page_id, 0, CACHE_BUF, wbuf);
|
||||
enable_read_hw_ecc = 1;
|
||||
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++)
|
||||
wbuf[i] &= buf[j];
|
||||
|
@ -570,12 +570,6 @@ int rf69_set_dio_mapping(struct spi_device *spi, u8 DIONumber, u8 value)
|
||||
dev_dbg(&spi->dev, "set: DIO mapping");
|
||||
#endif
|
||||
|
||||
// check DIO number
|
||||
if (DIONumber > 5) {
|
||||
dev_dbg(&spi->dev, "set: illegal input param");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
switch (DIONumber) {
|
||||
case 0: mask=MASK_DIO0; shift=SHIFT_DIO0; 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)
|
||||
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 5: mask=MASK_DIO5; shift=SHIFT_DIO5; regaddr=REG_DIOMAPPING2; break;
|
||||
default:
|
||||
dev_dbg(&spi->dev, "set: illegal input param");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
// read reg
|
||||
|
@ -119,9 +119,8 @@ void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv)
|
||||
|
||||
void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv)
|
||||
{
|
||||
rtw_free_mlme_priv_ie_data(pmlmepriv);
|
||||
|
||||
if (pmlmepriv) {
|
||||
rtw_free_mlme_priv_ie_data(pmlmepriv);
|
||||
if (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
|
||||
|
||||
if (num < 2)
|
||||
return count;
|
||||
if (id >= TOTAL_CAM_ENTRY)
|
||||
return -EINVAL;
|
||||
|
||||
if (strcmp("c", cmd) == 0) {
|
||||
_clear_cam_entry(adapter, id);
|
||||
|
@ -2901,11 +2901,11 @@ halmac_update_datapack_88xx(struct halmac_adapter *halmac_adapter,
|
||||
if (halmac_adapter->fw_version.h2c_version < 4)
|
||||
return HALMAC_RET_FW_NO_SUPPORT;
|
||||
|
||||
driver_adapter = halmac_adapter->driver_adapter;
|
||||
|
||||
HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG,
|
||||
"[TRACE]%s ==========>\n", __func__);
|
||||
|
||||
driver_adapter = halmac_adapter->driver_adapter;
|
||||
|
||||
HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG,
|
||||
"[TRACE]%s <==========\n", __func__);
|
||||
|
||||
|
@ -1618,10 +1618,11 @@ halmac_send_h2c_set_pwr_mode_88xx(struct halmac_adapter *halmac_adapter,
|
||||
void *driver_adapter = NULL;
|
||||
enum halmac_ret_status status = HALMAC_RET_SUCCESS;
|
||||
|
||||
driver_adapter = halmac_adapter->driver_adapter;
|
||||
|
||||
HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG,
|
||||
"%s!!\n", __func__);
|
||||
|
||||
driver_adapter = halmac_adapter->driver_adapter;
|
||||
h2c_header = h2c_buff;
|
||||
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,
|
||||
void *driver_adapter = NULL;
|
||||
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_send_h2c_set_pwr_mode_88xx!!\n");
|
||||
|
||||
driver_adapter = halmac_adapter->driver_adapter;
|
||||
h2c_header = H2c_buff;
|
||||
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,
|
||||
enum halmac_cmd_process_status *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_ctrl_ch_switch!!\n");
|
||||
|
||||
driver_adapter = halmac_adapter->driver_adapter;
|
||||
halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
|
||||
|
||||
if (halmac_transition_scan_state_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};
|
||||
u16 h2c_seq_mum = 0;
|
||||
void *driver_adapter = NULL;
|
||||
void *driver_adapter = halmac_adapter->driver_adapter;
|
||||
struct halmac_h2c_header_info h2c_header_info;
|
||||
enum halmac_ret_status status = HALMAC_RET_SUCCESS;
|
||||
|
||||
HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_H2C, DBG_DMESG,
|
||||
"%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_SIZE_TH(h2c_buff, bcn_ie_info->size_th);
|
||||
UPDATE_BEACON_PARSING_INFO_SET_TIMEOUT(h2c_buff, bcn_ie_info->timeout);
|
||||
|
@ -1376,6 +1376,8 @@ static void reset_highlight_buffers(struct vc_data *);
|
||||
|
||||
static int read_all_key;
|
||||
|
||||
static int in_keyboard_notifier;
|
||||
|
||||
static void start_read_all_timer(struct vc_data *vc, int command);
|
||||
|
||||
enum {
|
||||
@ -1408,7 +1410,10 @@ static void read_all_doc(struct vc_data *vc)
|
||||
cursor_track = read_all_mode;
|
||||
spk_reset_index_count(0);
|
||||
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 {
|
||||
say_sentence_num(0, 0);
|
||||
synth_insert_next_index(0);
|
||||
@ -2212,8 +2217,10 @@ static int keyboard_notifier_call(struct notifier_block *nb,
|
||||
int ret = NOTIFY_OK;
|
||||
static int keycode; /* to hold the current keycode */
|
||||
|
||||
in_keyboard_notifier = 1;
|
||||
|
||||
if (vc->vc_mode == KD_GRAPHICS)
|
||||
return ret;
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* First, determine whether we are handling a fake keypress on
|
||||
@ -2225,7 +2232,7 @@ static int keyboard_notifier_call(struct notifier_block *nb,
|
||||
*/
|
||||
|
||||
if (speakup_fake_key_pressed())
|
||||
return ret;
|
||||
goto out;
|
||||
|
||||
switch (code) {
|
||||
case KBD_KEYCODE:
|
||||
@ -2266,6 +2273,8 @@ static int keyboard_notifier_call(struct notifier_block *nb,
|
||||
break;
|
||||
}
|
||||
}
|
||||
out:
|
||||
in_keyboard_notifier = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1826,7 +1826,7 @@ static __init int visorutil_spar_detect(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int init_unisys(void)
|
||||
static int __init init_unisys(void)
|
||||
{
|
||||
int result;
|
||||
|
||||
@ -1841,7 +1841,7 @@ static int init_unisys(void)
|
||||
return 0;
|
||||
};
|
||||
|
||||
static void exit_unisys(void)
|
||||
static void __exit exit_unisys(void)
|
||||
{
|
||||
acpi_bus_unregister_driver(&unisys_acpi_driver);
|
||||
}
|
||||
|
@ -612,18 +612,20 @@ free_pagelist(struct vchiq_pagelist_info *pagelistinfo,
|
||||
if (head_bytes > actual)
|
||||
head_bytes = actual;
|
||||
|
||||
memcpy((char *)page_address(pages[0]) +
|
||||
memcpy((char *)kmap(pages[0]) +
|
||||
pagelist->offset,
|
||||
fragments,
|
||||
head_bytes);
|
||||
kunmap(pages[0]);
|
||||
}
|
||||
if ((actual >= 0) && (head_bytes < actual) &&
|
||||
(tail_bytes != 0)) {
|
||||
memcpy((char *)page_address(pages[num_pages - 1]) +
|
||||
memcpy((char *)kmap(pages[num_pages - 1]) +
|
||||
((pagelist->offset + actual) &
|
||||
(PAGE_SIZE - 1) & ~(g_cache_line_size - 1)),
|
||||
fragments + g_cache_line_size,
|
||||
tail_bytes);
|
||||
kunmap(pages[num_pages - 1]);
|
||||
}
|
||||
|
||||
down(&g_free_fragments_mutex);
|
||||
|
@ -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,
|
||||
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,
|
||||
const struct iio_chan_spec *chan, int *val);
|
||||
int ad_sd_calibrate_all(struct ad_sigma_delta *sigma_delta,
|
||||
|
Loading…
Reference in New Issue
Block a user