Staging fixes for 3.13-rc2
Here are a number of staging, and IIO driver, fixes for 3.13-rc2 that resolve issues that have been reported for 3.13-rc1. All of these have been in linux-next for a bit this week. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iEYEABECAAYFAlKWdiEACgkQMUfUDdst+ynbywCfaED1OKlzXXx/VbCd5WRlYd2a 2IEAoJ4c6LmgW9Vn6z0M/pRblvmPyYj1 =Tq5a -----END PGP SIGNATURE----- Merge tag 'staging-3.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging Pull staging fixes from Greg KH: "Here are a number of staging, and IIO driver, fixes for 3.13-rc2 that resolve issues that have been reported for 3.13-rc1. All of these have been in linux-next for a bit this week" * tag 'staging-3.13-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (25 commits) Staging: tidspbridge: disable driver staging: zsmalloc: Ensure handle is never 0 on success staging/lustre/ptlrpc: fix ptlrpc_stop_pinger logic staging: r8188eu: Fix AP mode Staging: btmtk_usb: Add hdev parameter to hdev->send driver callback Staging: go7007: fix up some remaining go->dev issues staging: imx-drm: Fix modular build of DRM_IMX_IPUV3 staging: ft1000: fix use of potentially uninitialized variable Revert "staging:media: Use dev_dbg() instead of pr_debug()" Staging: zram: Fix memory leak by refcount mismatch staging: vt6656: [BUG] Fix for TX USB resets from vendors driver. staging: nvec: potential NULL dereference on error path Staging: vt6655-6: potential NULL dereference in hostap_disable_hostapd() staging: comedi: s626: fix value written by s626_set_dac() Staging: comedi: pcl730: fix some bitwise vs logical AND bugs staging: comedi: fix potentially uninitialised variable iio:accel:kxsd9 fix missing mutex unlock iio: adc: ti_am335x_adc: avoid double free of buffer. staging:iio: Fix hmc5843 Kconfig dependencies iio: Fix tcs3472 Kconfig dependencies ...
This commit is contained in:
commit
0b0f7f1cda
|
@ -350,7 +350,7 @@ static int hid_accel_3d_probe(struct platform_device *pdev)
|
||||||
error_iio_unreg:
|
error_iio_unreg:
|
||||||
iio_device_unregister(indio_dev);
|
iio_device_unregister(indio_dev);
|
||||||
error_remove_trigger:
|
error_remove_trigger:
|
||||||
hid_sensor_remove_trigger(indio_dev);
|
hid_sensor_remove_trigger(&accel_state->common_attributes);
|
||||||
error_unreg_buffer_funcs:
|
error_unreg_buffer_funcs:
|
||||||
iio_triggered_buffer_cleanup(indio_dev);
|
iio_triggered_buffer_cleanup(indio_dev);
|
||||||
error_free_dev_mem:
|
error_free_dev_mem:
|
||||||
|
@ -363,10 +363,11 @@ static int hid_accel_3d_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data;
|
struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data;
|
||||||
struct iio_dev *indio_dev = platform_get_drvdata(pdev);
|
struct iio_dev *indio_dev = platform_get_drvdata(pdev);
|
||||||
|
struct accel_3d_state *accel_state = iio_priv(indio_dev);
|
||||||
|
|
||||||
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_ACCEL_3D);
|
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_ACCEL_3D);
|
||||||
iio_device_unregister(indio_dev);
|
iio_device_unregister(indio_dev);
|
||||||
hid_sensor_remove_trigger(indio_dev);
|
hid_sensor_remove_trigger(&accel_state->common_attributes);
|
||||||
iio_triggered_buffer_cleanup(indio_dev);
|
iio_triggered_buffer_cleanup(indio_dev);
|
||||||
kfree(indio_dev->channels);
|
kfree(indio_dev->channels);
|
||||||
|
|
||||||
|
|
|
@ -112,9 +112,10 @@ static int kxsd9_read(struct iio_dev *indio_dev, u8 address)
|
||||||
mutex_lock(&st->buf_lock);
|
mutex_lock(&st->buf_lock);
|
||||||
st->tx[0] = KXSD9_READ(address);
|
st->tx[0] = KXSD9_READ(address);
|
||||||
ret = spi_sync_transfer(st->us, xfers, ARRAY_SIZE(xfers));
|
ret = spi_sync_transfer(st->us, xfers, ARRAY_SIZE(xfers));
|
||||||
if (ret)
|
if (!ret)
|
||||||
return ret;
|
ret = (((u16)(st->rx[0])) << 8) | (st->rx[1] & 0xF0);
|
||||||
return (((u16)(st->rx[0])) << 8) | (st->rx[1] & 0xF0);
|
mutex_unlock(&st->buf_lock);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static IIO_CONST_ATTR(accel_scale_available,
|
static IIO_CONST_ATTR(accel_scale_available,
|
||||||
|
|
|
@ -1047,6 +1047,7 @@ static int at91_adc_probe(struct platform_device *pdev)
|
||||||
} else {
|
} else {
|
||||||
if (!st->caps->has_tsmr) {
|
if (!st->caps->has_tsmr) {
|
||||||
dev_err(&pdev->dev, "We don't support non-TSMR adc\n");
|
dev_err(&pdev->dev, "We don't support non-TSMR adc\n");
|
||||||
|
ret = -ENODEV;
|
||||||
goto error_disable_adc_clk;
|
goto error_disable_adc_clk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,10 +88,10 @@ static const int mcp3422_sample_rates[4] = {
|
||||||
|
|
||||||
/* sample rates to sign extension table */
|
/* sample rates to sign extension table */
|
||||||
static const int mcp3422_sign_extend[4] = {
|
static const int mcp3422_sign_extend[4] = {
|
||||||
[MCP3422_SRATE_240] = 12,
|
[MCP3422_SRATE_240] = 11,
|
||||||
[MCP3422_SRATE_60] = 14,
|
[MCP3422_SRATE_60] = 13,
|
||||||
[MCP3422_SRATE_15] = 16,
|
[MCP3422_SRATE_15] = 15,
|
||||||
[MCP3422_SRATE_3] = 18 };
|
[MCP3422_SRATE_3] = 17 };
|
||||||
|
|
||||||
/* Client data (each client gets its own) */
|
/* Client data (each client gets its own) */
|
||||||
struct mcp3422 {
|
struct mcp3422 {
|
||||||
|
|
|
@ -229,12 +229,15 @@ static int tiadc_iio_buffered_hardware_setup(struct iio_dev *indio_dev,
|
||||||
unsigned long flags,
|
unsigned long flags,
|
||||||
const struct iio_buffer_setup_ops *setup_ops)
|
const struct iio_buffer_setup_ops *setup_ops)
|
||||||
{
|
{
|
||||||
|
struct iio_buffer *buffer;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
indio_dev->buffer = iio_kfifo_allocate(indio_dev);
|
buffer = iio_kfifo_allocate(indio_dev);
|
||||||
if (!indio_dev->buffer)
|
if (!buffer)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
iio_device_attach_buffer(indio_dev, buffer);
|
||||||
|
|
||||||
ret = request_threaded_irq(irq, pollfunc_th, pollfunc_bh,
|
ret = request_threaded_irq(irq, pollfunc_th, pollfunc_bh,
|
||||||
flags, indio_dev->name, indio_dev);
|
flags, indio_dev->name, indio_dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
|
|
@ -55,11 +55,10 @@ static int hid_sensor_data_rdy_trigger_set_state(struct iio_trigger *trig,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void hid_sensor_remove_trigger(struct iio_dev *indio_dev)
|
void hid_sensor_remove_trigger(struct hid_sensor_common *attrb)
|
||||||
{
|
{
|
||||||
iio_trigger_unregister(indio_dev->trig);
|
iio_trigger_unregister(attrb->trigger);
|
||||||
iio_trigger_free(indio_dev->trig);
|
iio_trigger_free(attrb->trigger);
|
||||||
indio_dev->trig = NULL;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(hid_sensor_remove_trigger);
|
EXPORT_SYMBOL(hid_sensor_remove_trigger);
|
||||||
|
|
||||||
|
@ -90,7 +89,7 @@ int hid_sensor_setup_trigger(struct iio_dev *indio_dev, const char *name,
|
||||||
dev_err(&indio_dev->dev, "Trigger Register Failed\n");
|
dev_err(&indio_dev->dev, "Trigger Register Failed\n");
|
||||||
goto error_free_trig;
|
goto error_free_trig;
|
||||||
}
|
}
|
||||||
indio_dev->trig = trig;
|
indio_dev->trig = attrb->trigger = trig;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,6 @@
|
||||||
|
|
||||||
int hid_sensor_setup_trigger(struct iio_dev *indio_dev, const char *name,
|
int hid_sensor_setup_trigger(struct iio_dev *indio_dev, const char *name,
|
||||||
struct hid_sensor_common *attrb);
|
struct hid_sensor_common *attrb);
|
||||||
void hid_sensor_remove_trigger(struct iio_dev *indio_dev);
|
void hid_sensor_remove_trigger(struct hid_sensor_common *attrb);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -348,7 +348,7 @@ static int hid_gyro_3d_probe(struct platform_device *pdev)
|
||||||
error_iio_unreg:
|
error_iio_unreg:
|
||||||
iio_device_unregister(indio_dev);
|
iio_device_unregister(indio_dev);
|
||||||
error_remove_trigger:
|
error_remove_trigger:
|
||||||
hid_sensor_remove_trigger(indio_dev);
|
hid_sensor_remove_trigger(&gyro_state->common_attributes);
|
||||||
error_unreg_buffer_funcs:
|
error_unreg_buffer_funcs:
|
||||||
iio_triggered_buffer_cleanup(indio_dev);
|
iio_triggered_buffer_cleanup(indio_dev);
|
||||||
error_free_dev_mem:
|
error_free_dev_mem:
|
||||||
|
@ -361,10 +361,11 @@ static int hid_gyro_3d_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data;
|
struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data;
|
||||||
struct iio_dev *indio_dev = platform_get_drvdata(pdev);
|
struct iio_dev *indio_dev = platform_get_drvdata(pdev);
|
||||||
|
struct gyro_3d_state *gyro_state = iio_priv(indio_dev);
|
||||||
|
|
||||||
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_GYRO_3D);
|
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_GYRO_3D);
|
||||||
iio_device_unregister(indio_dev);
|
iio_device_unregister(indio_dev);
|
||||||
hid_sensor_remove_trigger(indio_dev);
|
hid_sensor_remove_trigger(&gyro_state->common_attributes);
|
||||||
iio_triggered_buffer_cleanup(indio_dev);
|
iio_triggered_buffer_cleanup(indio_dev);
|
||||||
kfree(indio_dev->channels);
|
kfree(indio_dev->channels);
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,8 @@ config SENSORS_LM3533
|
||||||
config TCS3472
|
config TCS3472
|
||||||
tristate "TAOS TCS3472 color light-to-digital converter"
|
tristate "TAOS TCS3472 color light-to-digital converter"
|
||||||
depends on I2C
|
depends on I2C
|
||||||
|
select IIO_BUFFER
|
||||||
|
select IIO_TRIGGERED_BUFFER
|
||||||
help
|
help
|
||||||
If you say yes here you get support for the TAOS TCS3472
|
If you say yes here you get support for the TAOS TCS3472
|
||||||
family of color light-to-digital converters with IR filter.
|
family of color light-to-digital converters with IR filter.
|
||||||
|
|
|
@ -314,7 +314,7 @@ static int hid_als_probe(struct platform_device *pdev)
|
||||||
error_iio_unreg:
|
error_iio_unreg:
|
||||||
iio_device_unregister(indio_dev);
|
iio_device_unregister(indio_dev);
|
||||||
error_remove_trigger:
|
error_remove_trigger:
|
||||||
hid_sensor_remove_trigger(indio_dev);
|
hid_sensor_remove_trigger(&als_state->common_attributes);
|
||||||
error_unreg_buffer_funcs:
|
error_unreg_buffer_funcs:
|
||||||
iio_triggered_buffer_cleanup(indio_dev);
|
iio_triggered_buffer_cleanup(indio_dev);
|
||||||
error_free_dev_mem:
|
error_free_dev_mem:
|
||||||
|
@ -327,10 +327,11 @@ static int hid_als_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data;
|
struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data;
|
||||||
struct iio_dev *indio_dev = platform_get_drvdata(pdev);
|
struct iio_dev *indio_dev = platform_get_drvdata(pdev);
|
||||||
|
struct als_state *als_state = iio_priv(indio_dev);
|
||||||
|
|
||||||
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_ALS);
|
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_ALS);
|
||||||
iio_device_unregister(indio_dev);
|
iio_device_unregister(indio_dev);
|
||||||
hid_sensor_remove_trigger(indio_dev);
|
hid_sensor_remove_trigger(&als_state->common_attributes);
|
||||||
iio_triggered_buffer_cleanup(indio_dev);
|
iio_triggered_buffer_cleanup(indio_dev);
|
||||||
kfree(indio_dev->channels);
|
kfree(indio_dev->channels);
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,8 @@ config AK8975
|
||||||
config MAG3110
|
config MAG3110
|
||||||
tristate "Freescale MAG3110 3-Axis Magnetometer"
|
tristate "Freescale MAG3110 3-Axis Magnetometer"
|
||||||
depends on I2C
|
depends on I2C
|
||||||
|
select IIO_BUFFER
|
||||||
|
select IIO_TRIGGERED_BUFFER
|
||||||
help
|
help
|
||||||
Say yes here to build support for the Freescale MAG3110 3-Axis
|
Say yes here to build support for the Freescale MAG3110 3-Axis
|
||||||
magnetometer.
|
magnetometer.
|
||||||
|
|
|
@ -351,7 +351,7 @@ static int hid_magn_3d_probe(struct platform_device *pdev)
|
||||||
error_iio_unreg:
|
error_iio_unreg:
|
||||||
iio_device_unregister(indio_dev);
|
iio_device_unregister(indio_dev);
|
||||||
error_remove_trigger:
|
error_remove_trigger:
|
||||||
hid_sensor_remove_trigger(indio_dev);
|
hid_sensor_remove_trigger(&magn_state->common_attributes);
|
||||||
error_unreg_buffer_funcs:
|
error_unreg_buffer_funcs:
|
||||||
iio_triggered_buffer_cleanup(indio_dev);
|
iio_triggered_buffer_cleanup(indio_dev);
|
||||||
error_free_dev_mem:
|
error_free_dev_mem:
|
||||||
|
@ -364,10 +364,11 @@ static int hid_magn_3d_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data;
|
struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data;
|
||||||
struct iio_dev *indio_dev = platform_get_drvdata(pdev);
|
struct iio_dev *indio_dev = platform_get_drvdata(pdev);
|
||||||
|
struct magn_3d_state *magn_state = iio_priv(indio_dev);
|
||||||
|
|
||||||
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_COMPASS_3D);
|
sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_COMPASS_3D);
|
||||||
iio_device_unregister(indio_dev);
|
iio_device_unregister(indio_dev);
|
||||||
hid_sensor_remove_trigger(indio_dev);
|
hid_sensor_remove_trigger(&magn_state->common_attributes);
|
||||||
iio_triggered_buffer_cleanup(indio_dev);
|
iio_triggered_buffer_cleanup(indio_dev);
|
||||||
kfree(indio_dev->channels);
|
kfree(indio_dev->channels);
|
||||||
|
|
||||||
|
|
|
@ -250,7 +250,12 @@ done:
|
||||||
.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
|
.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
|
||||||
BIT(IIO_CHAN_INFO_SCALE), \
|
BIT(IIO_CHAN_INFO_SCALE), \
|
||||||
.scan_index = idx, \
|
.scan_index = idx, \
|
||||||
.scan_type = IIO_ST('s', 16, 16, IIO_BE), \
|
.scan_type = { \
|
||||||
|
.sign = 's', \
|
||||||
|
.realbits = 16, \
|
||||||
|
.storagebits = 16, \
|
||||||
|
.endianness = IIO_BE, \
|
||||||
|
}, \
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct iio_chan_spec mag3110_channels[] = {
|
static const struct iio_chan_spec mag3110_channels[] = {
|
||||||
|
|
|
@ -1284,9 +1284,8 @@ done:
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int btmtk_usb_send_frame(struct sk_buff *skb)
|
static int btmtk_usb_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct hci_dev *hdev = (struct hci_dev *)skb->dev;
|
|
||||||
struct btmtk_usb_data *data = hci_get_drvdata(hdev);
|
struct btmtk_usb_data *data = hci_get_drvdata(hdev);
|
||||||
struct usb_ctrlrequest *dr;
|
struct usb_ctrlrequest *dr;
|
||||||
struct urb *urb;
|
struct urb *urb;
|
||||||
|
|
|
@ -173,11 +173,11 @@ static int pcl730_do_insn_bits(struct comedi_device *dev,
|
||||||
if (mask) {
|
if (mask) {
|
||||||
if (mask & 0x00ff)
|
if (mask & 0x00ff)
|
||||||
outb(s->state & 0xff, dev->iobase + reg);
|
outb(s->state & 0xff, dev->iobase + reg);
|
||||||
if ((mask & 0xff00) & (s->n_chan > 8))
|
if ((mask & 0xff00) && (s->n_chan > 8))
|
||||||
outb((s->state >> 8) & 0xff, dev->iobase + reg + 1);
|
outb((s->state >> 8) & 0xff, dev->iobase + reg + 1);
|
||||||
if ((mask & 0xff0000) & (s->n_chan > 16))
|
if ((mask & 0xff0000) && (s->n_chan > 16))
|
||||||
outb((s->state >> 16) & 0xff, dev->iobase + reg + 2);
|
outb((s->state >> 16) & 0xff, dev->iobase + reg + 2);
|
||||||
if ((mask & 0xff000000) & (s->n_chan > 24))
|
if ((mask & 0xff000000) && (s->n_chan > 24))
|
||||||
outb((s->state >> 24) & 0xff, dev->iobase + reg + 3);
|
outb((s->state >> 24) & 0xff, dev->iobase + reg + 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -494,7 +494,7 @@ static void s626_send_dac(struct comedi_device *dev, uint32_t val)
|
||||||
* Private helper function: Write setpoint to an application DAC channel.
|
* Private helper function: Write setpoint to an application DAC channel.
|
||||||
*/
|
*/
|
||||||
static void s626_set_dac(struct comedi_device *dev, uint16_t chan,
|
static void s626_set_dac(struct comedi_device *dev, uint16_t chan,
|
||||||
unsigned short dacdata)
|
int16_t dacdata)
|
||||||
{
|
{
|
||||||
struct s626_private *devpriv = dev->private;
|
struct s626_private *devpriv = dev->private;
|
||||||
uint16_t signmask;
|
uint16_t signmask;
|
||||||
|
|
|
@ -465,7 +465,7 @@ static int vmk80xx_do_insn_bits(struct comedi_device *dev,
|
||||||
unsigned char *rx_buf = devpriv->usb_rx_buf;
|
unsigned char *rx_buf = devpriv->usb_rx_buf;
|
||||||
unsigned char *tx_buf = devpriv->usb_tx_buf;
|
unsigned char *tx_buf = devpriv->usb_tx_buf;
|
||||||
int reg, cmd;
|
int reg, cmd;
|
||||||
int ret;
|
int ret = 0;
|
||||||
|
|
||||||
if (devpriv->model == VMK8061_MODEL) {
|
if (devpriv->model == VMK8061_MODEL) {
|
||||||
reg = VMK8061_DO_REG;
|
reg = VMK8061_DO_REG;
|
||||||
|
|
|
@ -578,7 +578,7 @@ static int request_code_segment(struct ft1000_usb *ft1000dev, u16 **s_file,
|
||||||
u8 **c_file, const u8 *endpoint, bool boot_case)
|
u8 **c_file, const u8 *endpoint, bool boot_case)
|
||||||
{
|
{
|
||||||
long word_length;
|
long word_length;
|
||||||
int status;
|
int status = 0;
|
||||||
|
|
||||||
/*DEBUG("FT1000:REQUEST_CODE_SEGMENT\n");i*/
|
/*DEBUG("FT1000:REQUEST_CODE_SEGMENT\n");i*/
|
||||||
word_length = get_request_value(ft1000dev);
|
word_length = get_request_value(ft1000dev);
|
||||||
|
@ -1074,4 +1074,3 @@ int scram_dnldr(struct ft1000_usb *ft1000dev, void *pFileStart,
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,8 @@ menu "Magnetometer sensors"
|
||||||
config SENSORS_HMC5843
|
config SENSORS_HMC5843
|
||||||
tristate "Honeywell HMC5843/5883/5883L 3-Axis Magnetometer"
|
tristate "Honeywell HMC5843/5883/5883L 3-Axis Magnetometer"
|
||||||
depends on I2C
|
depends on I2C
|
||||||
|
select IIO_BUFFER
|
||||||
|
select IIO_TRIGGERED_BUFFER
|
||||||
help
|
help
|
||||||
Say Y here to add support for the Honeywell HMC5843, HMC5883 and
|
Say Y here to add support for the Honeywell HMC5843, HMC5883 and
|
||||||
HMC5883L 3-Axis Magnetometer (digital compass).
|
HMC5883L 3-Axis Magnetometer (digital compass).
|
||||||
|
|
|
@ -8,4 +8,6 @@ obj-$(CONFIG_DRM_IMX_TVE) += imx-tve.o
|
||||||
obj-$(CONFIG_DRM_IMX_LDB) += imx-ldb.o
|
obj-$(CONFIG_DRM_IMX_LDB) += imx-ldb.o
|
||||||
obj-$(CONFIG_DRM_IMX_FB_HELPER) += imx-fbdev.o
|
obj-$(CONFIG_DRM_IMX_FB_HELPER) += imx-fbdev.o
|
||||||
obj-$(CONFIG_DRM_IMX_IPUV3_CORE) += ipu-v3/
|
obj-$(CONFIG_DRM_IMX_IPUV3_CORE) += ipu-v3/
|
||||||
obj-$(CONFIG_DRM_IMX_IPUV3) += ipuv3-crtc.o ipuv3-plane.o
|
|
||||||
|
imx-ipuv3-crtc-objs := ipuv3-crtc.o ipuv3-plane.o
|
||||||
|
obj-$(CONFIG_DRM_IMX_IPUV3) += imx-ipuv3-crtc.o
|
||||||
|
|
|
@ -72,6 +72,7 @@ int imx_drm_crtc_id(struct imx_drm_crtc *crtc)
|
||||||
{
|
{
|
||||||
return crtc->pipe;
|
return crtc->pipe;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(imx_drm_crtc_id);
|
||||||
|
|
||||||
static void imx_drm_driver_lastclose(struct drm_device *drm)
|
static void imx_drm_driver_lastclose(struct drm_device *drm)
|
||||||
{
|
{
|
||||||
|
|
|
@ -409,8 +409,8 @@ int ptlrpc_stop_pinger(void)
|
||||||
struct l_wait_info lwi = { 0 };
|
struct l_wait_info lwi = { 0 };
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
if (!thread_is_init(&pinger_thread) &&
|
if (thread_is_init(&pinger_thread) ||
|
||||||
!thread_is_stopped(&pinger_thread))
|
thread_is_stopped(&pinger_thread))
|
||||||
return -EALREADY;
|
return -EALREADY;
|
||||||
|
|
||||||
ptlrpc_pinger_remove_timeouts();
|
ptlrpc_pinger_remove_timeouts();
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
* Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
* Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
@ -661,7 +663,7 @@ static int go7007_usb_interface_reset(struct go7007 *go)
|
||||||
|
|
||||||
if (usb->board->flags & GO7007_USB_EZUSB) {
|
if (usb->board->flags & GO7007_USB_EZUSB) {
|
||||||
/* Reset buffer in EZ-USB */
|
/* Reset buffer in EZ-USB */
|
||||||
dev_dbg(go->dev, "resetting EZ-USB buffers\n");
|
pr_debug("resetting EZ-USB buffers\n");
|
||||||
if (go7007_usb_vendor_request(go, 0x10, 0, 0, NULL, 0, 0) < 0 ||
|
if (go7007_usb_vendor_request(go, 0x10, 0, 0, NULL, 0, 0) < 0 ||
|
||||||
go7007_usb_vendor_request(go, 0x10, 0, 0, NULL, 0, 0) < 0)
|
go7007_usb_vendor_request(go, 0x10, 0, 0, NULL, 0, 0) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -689,7 +691,7 @@ static int go7007_usb_ezusb_write_interrupt(struct go7007 *go,
|
||||||
u16 status_reg = 0;
|
u16 status_reg = 0;
|
||||||
int timeout = 500;
|
int timeout = 500;
|
||||||
|
|
||||||
dev_dbg(go->dev, "WriteInterrupt: %04x %04x\n", addr, data);
|
pr_debug("WriteInterrupt: %04x %04x\n", addr, data);
|
||||||
|
|
||||||
for (i = 0; i < 100; ++i) {
|
for (i = 0; i < 100; ++i) {
|
||||||
r = usb_control_msg(usb->usbdev,
|
r = usb_control_msg(usb->usbdev,
|
||||||
|
@ -734,7 +736,7 @@ static int go7007_usb_onboard_write_interrupt(struct go7007 *go,
|
||||||
int r;
|
int r;
|
||||||
int timeout = 500;
|
int timeout = 500;
|
||||||
|
|
||||||
dev_dbg(go->dev, "WriteInterrupt: %04x %04x\n", addr, data);
|
pr_debug("WriteInterrupt: %04x %04x\n", addr, data);
|
||||||
|
|
||||||
go->usb_buf[0] = data & 0xff;
|
go->usb_buf[0] = data & 0xff;
|
||||||
go->usb_buf[1] = data >> 8;
|
go->usb_buf[1] = data >> 8;
|
||||||
|
@ -771,7 +773,7 @@ static void go7007_usb_readinterrupt_complete(struct urb *urb)
|
||||||
go->interrupt_available = 1;
|
go->interrupt_available = 1;
|
||||||
go->interrupt_data = __le16_to_cpu(regs[0]);
|
go->interrupt_data = __le16_to_cpu(regs[0]);
|
||||||
go->interrupt_value = __le16_to_cpu(regs[1]);
|
go->interrupt_value = __le16_to_cpu(regs[1]);
|
||||||
dev_dbg(go->dev, "ReadInterrupt: %04x %04x\n",
|
pr_debug("ReadInterrupt: %04x %04x\n",
|
||||||
go->interrupt_value, go->interrupt_data);
|
go->interrupt_value, go->interrupt_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -891,7 +893,7 @@ static int go7007_usb_send_firmware(struct go7007 *go, u8 *data, int len)
|
||||||
int transferred, pipe;
|
int transferred, pipe;
|
||||||
int timeout = 500;
|
int timeout = 500;
|
||||||
|
|
||||||
dev_dbg(go->dev, "DownloadBuffer sending %d bytes\n", len);
|
pr_debug("DownloadBuffer sending %d bytes\n", len);
|
||||||
|
|
||||||
if (usb->board->flags & GO7007_USB_EZUSB)
|
if (usb->board->flags & GO7007_USB_EZUSB)
|
||||||
pipe = usb_sndbulkpipe(usb->usbdev, 2);
|
pipe = usb_sndbulkpipe(usb->usbdev, 2);
|
||||||
|
@ -977,7 +979,7 @@ static int go7007_usb_i2c_master_xfer(struct i2c_adapter *adapter,
|
||||||
!(msgs[i].flags & I2C_M_RD) &&
|
!(msgs[i].flags & I2C_M_RD) &&
|
||||||
(msgs[i + 1].flags & I2C_M_RD)) {
|
(msgs[i + 1].flags & I2C_M_RD)) {
|
||||||
#ifdef GO7007_I2C_DEBUG
|
#ifdef GO7007_I2C_DEBUG
|
||||||
dev_dbg(go->dev, "i2c write/read %d/%d bytes on %02x\n",
|
pr_debug("i2c write/read %d/%d bytes on %02x\n",
|
||||||
msgs[i].len, msgs[i + 1].len, msgs[i].addr);
|
msgs[i].len, msgs[i + 1].len, msgs[i].addr);
|
||||||
#endif
|
#endif
|
||||||
buf[0] = 0x01;
|
buf[0] = 0x01;
|
||||||
|
@ -988,7 +990,7 @@ static int go7007_usb_i2c_master_xfer(struct i2c_adapter *adapter,
|
||||||
buf[buf_len++] = msgs[++i].len;
|
buf[buf_len++] = msgs[++i].len;
|
||||||
} else if (msgs[i].flags & I2C_M_RD) {
|
} else if (msgs[i].flags & I2C_M_RD) {
|
||||||
#ifdef GO7007_I2C_DEBUG
|
#ifdef GO7007_I2C_DEBUG
|
||||||
dev_dbg(go->dev, "i2c read %d bytes on %02x\n",
|
pr_debug("i2c read %d bytes on %02x\n",
|
||||||
msgs[i].len, msgs[i].addr);
|
msgs[i].len, msgs[i].addr);
|
||||||
#endif
|
#endif
|
||||||
buf[0] = 0x01;
|
buf[0] = 0x01;
|
||||||
|
@ -998,7 +1000,7 @@ static int go7007_usb_i2c_master_xfer(struct i2c_adapter *adapter,
|
||||||
buf_len = 4;
|
buf_len = 4;
|
||||||
} else {
|
} else {
|
||||||
#ifdef GO7007_I2C_DEBUG
|
#ifdef GO7007_I2C_DEBUG
|
||||||
dev_dbg(go->dev, "i2c write %d bytes on %02x\n",
|
pr_debug("i2c write %d bytes on %02x\n",
|
||||||
msgs[i].len, msgs[i].addr);
|
msgs[i].len, msgs[i].addr);
|
||||||
#endif
|
#endif
|
||||||
buf[0] = 0x00;
|
buf[0] = 0x00;
|
||||||
|
@ -1057,7 +1059,7 @@ static int go7007_usb_probe(struct usb_interface *intf,
|
||||||
char *name;
|
char *name;
|
||||||
int video_pipe, i, v_urb_len;
|
int video_pipe, i, v_urb_len;
|
||||||
|
|
||||||
dev_dbg(go->dev, "probing new GO7007 USB board\n");
|
pr_debug("probing new GO7007 USB board\n");
|
||||||
|
|
||||||
switch (id->driver_info) {
|
switch (id->driver_info) {
|
||||||
case GO7007_BOARDID_MATRIX_II:
|
case GO7007_BOARDID_MATRIX_II:
|
||||||
|
@ -1097,13 +1099,13 @@ static int go7007_usb_probe(struct usb_interface *intf,
|
||||||
board = &board_px_tv402u;
|
board = &board_px_tv402u;
|
||||||
break;
|
break;
|
||||||
case GO7007_BOARDID_LIFEVIEW_LR192:
|
case GO7007_BOARDID_LIFEVIEW_LR192:
|
||||||
dev_err(go->dev, "The Lifeview TV Walker Ultra is not supported. Sorry!\n");
|
dev_err(&intf->dev, "The Lifeview TV Walker Ultra is not supported. Sorry!\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
name = "Lifeview TV Walker Ultra";
|
name = "Lifeview TV Walker Ultra";
|
||||||
board = &board_lifeview_lr192;
|
board = &board_lifeview_lr192;
|
||||||
break;
|
break;
|
||||||
case GO7007_BOARDID_SENSORAY_2250:
|
case GO7007_BOARDID_SENSORAY_2250:
|
||||||
dev_info(go->dev, "Sensoray 2250 found\n");
|
dev_info(&intf->dev, "Sensoray 2250 found\n");
|
||||||
name = "Sensoray 2250/2251";
|
name = "Sensoray 2250/2251";
|
||||||
board = &board_sensoray_2250;
|
board = &board_sensoray_2250;
|
||||||
break;
|
break;
|
||||||
|
@ -1112,7 +1114,7 @@ static int go7007_usb_probe(struct usb_interface *intf,
|
||||||
board = &board_ads_usbav_709;
|
board = &board_ads_usbav_709;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dev_err(go->dev, "unknown board ID %d!\n",
|
dev_err(&intf->dev, "unknown board ID %d!\n",
|
||||||
(unsigned int)id->driver_info);
|
(unsigned int)id->driver_info);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
@ -1247,7 +1249,7 @@ static int go7007_usb_probe(struct usb_interface *intf,
|
||||||
sizeof(go->name));
|
sizeof(go->name));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dev_dbg(go->dev, "unable to detect tuner type!\n");
|
pr_debug("unable to detect tuner type!\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* Configure tuner mode selection inputs connected
|
/* Configure tuner mode selection inputs connected
|
||||||
|
|
|
@ -681,7 +681,8 @@ static irqreturn_t nvec_interrupt(int irq, void *dev)
|
||||||
dev_err(nvec->dev,
|
dev_err(nvec->dev,
|
||||||
"RX buffer overflow on %p: "
|
"RX buffer overflow on %p: "
|
||||||
"Trying to write byte %u of %u\n",
|
"Trying to write byte %u of %u\n",
|
||||||
nvec->rx, nvec->rx->pos, NVEC_MSG_SIZE);
|
nvec->rx, nvec->rx ? nvec->rx->pos : 0,
|
||||||
|
NVEC_MSG_SIZE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
nvec->state = 0;
|
nvec->state = 0;
|
||||||
|
|
|
@ -1115,6 +1115,9 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
|
||||||
return _FAIL;
|
return _FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* fix bug of flush_cam_entry at STOP AP mode */
|
||||||
|
psta->state |= WIFI_AP_STATE;
|
||||||
|
rtw_indicate_connect(padapter);
|
||||||
pmlmepriv->cur_network.join_res = true;/* for check if already set beacon */
|
pmlmepriv->cur_network.join_res = true;/* for check if already set beacon */
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
menuconfig TIDSPBRIDGE
|
menuconfig TIDSPBRIDGE
|
||||||
tristate "DSP Bridge driver"
|
tristate "DSP Bridge driver"
|
||||||
depends on ARCH_OMAP3 && !ARCH_MULTIPLATFORM
|
depends on ARCH_OMAP3 && !ARCH_MULTIPLATFORM && BROKEN
|
||||||
select MAILBOX
|
select MAILBOX
|
||||||
select OMAP2PLUS_MBOX
|
select OMAP2PLUS_MBOX
|
||||||
help
|
help
|
||||||
|
|
|
@ -143,7 +143,8 @@ static int hostap_disable_hostapd(PSDevice pDevice, int rtnl_locked)
|
||||||
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Netdevice %s unregistered\n",
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Netdevice %s unregistered\n",
|
||||||
pDevice->dev->name, pDevice->apdev->name);
|
pDevice->dev->name, pDevice->apdev->name);
|
||||||
}
|
}
|
||||||
free_netdev(pDevice->apdev);
|
if (pDevice->apdev)
|
||||||
|
free_netdev(pDevice->apdev);
|
||||||
pDevice->apdev = NULL;
|
pDevice->apdev = NULL;
|
||||||
pDevice->bEnable8021x = false;
|
pDevice->bEnable8021x = false;
|
||||||
pDevice->bEnableHostWEP = false;
|
pDevice->bEnableHostWEP = false;
|
||||||
|
|
|
@ -939,6 +939,7 @@ int BBbVT3184Init(struct vnt_private *pDevice)
|
||||||
u8 * pbyAgc;
|
u8 * pbyAgc;
|
||||||
u16 wLengthAgc;
|
u16 wLengthAgc;
|
||||||
u8 abyArray[256];
|
u8 abyArray[256];
|
||||||
|
u8 data;
|
||||||
|
|
||||||
ntStatus = CONTROLnsRequestIn(pDevice,
|
ntStatus = CONTROLnsRequestIn(pDevice,
|
||||||
MESSAGE_TYPE_READ,
|
MESSAGE_TYPE_READ,
|
||||||
|
@ -1104,6 +1105,16 @@ else {
|
||||||
ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
|
ControlvWriteByte(pDevice,MESSAGE_REQUEST_BBREG,0x0D,0x01);
|
||||||
|
|
||||||
RFbRFTableDownload(pDevice);
|
RFbRFTableDownload(pDevice);
|
||||||
|
|
||||||
|
/* Fix for TX USB resets from vendors driver */
|
||||||
|
CONTROLnsRequestIn(pDevice, MESSAGE_TYPE_READ, USB_REG4,
|
||||||
|
MESSAGE_REQUEST_MEM, sizeof(data), &data);
|
||||||
|
|
||||||
|
data |= 0x2;
|
||||||
|
|
||||||
|
CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_WRITE, USB_REG4,
|
||||||
|
MESSAGE_REQUEST_MEM, sizeof(data), &data);
|
||||||
|
|
||||||
return true;//ntStatus;
|
return true;//ntStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -133,7 +133,8 @@ static int hostap_disable_hostapd(struct vnt_private *pDevice, int rtnl_locked)
|
||||||
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Netdevice %s unregistered\n",
|
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Netdevice %s unregistered\n",
|
||||||
pDevice->dev->name, pDevice->apdev->name);
|
pDevice->dev->name, pDevice->apdev->name);
|
||||||
}
|
}
|
||||||
free_netdev(pDevice->apdev);
|
if (pDevice->apdev)
|
||||||
|
free_netdev(pDevice->apdev);
|
||||||
pDevice->apdev = NULL;
|
pDevice->apdev = NULL;
|
||||||
pDevice->bEnable8021x = false;
|
pDevice->bEnable8021x = false;
|
||||||
pDevice->bEnableHostWEP = false;
|
pDevice->bEnableHostWEP = false;
|
||||||
|
|
|
@ -66,6 +66,8 @@
|
||||||
|
|
||||||
#define VIAUSB20_PACKET_HEADER 0x04
|
#define VIAUSB20_PACKET_HEADER 0x04
|
||||||
|
|
||||||
|
#define USB_REG4 0x604
|
||||||
|
|
||||||
typedef struct _CMD_MESSAGE
|
typedef struct _CMD_MESSAGE
|
||||||
{
|
{
|
||||||
u8 byData[256];
|
u8 byData[256];
|
||||||
|
|
|
@ -652,21 +652,30 @@ static ssize_t reset_store(struct device *dev,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* Do not reset an active device! */
|
/* Do not reset an active device! */
|
||||||
if (bdev->bd_holders)
|
if (bdev->bd_holders) {
|
||||||
return -EBUSY;
|
ret = -EBUSY;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
ret = kstrtou16(buf, 10, &do_reset);
|
ret = kstrtou16(buf, 10, &do_reset);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto out;
|
||||||
|
|
||||||
if (!do_reset)
|
if (!do_reset) {
|
||||||
return -EINVAL;
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* Make sure all pending I/O is finished */
|
/* Make sure all pending I/O is finished */
|
||||||
fsync_bdev(bdev);
|
fsync_bdev(bdev);
|
||||||
|
bdput(bdev);
|
||||||
|
|
||||||
zram_reset_device(zram, true);
|
zram_reset_device(zram, true);
|
||||||
return len;
|
return len;
|
||||||
|
|
||||||
|
out:
|
||||||
|
bdput(bdev);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __zram_make_request(struct zram *zram, struct bio *bio, int rw)
|
static void __zram_make_request(struct zram *zram, struct bio *bio, int rw)
|
||||||
|
|
|
@ -430,7 +430,12 @@ static struct page *get_next_page(struct page *page)
|
||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Encode <page, obj_idx> as a single handle value */
|
/*
|
||||||
|
* Encode <page, obj_idx> as a single handle value.
|
||||||
|
* On hardware platforms with physical memory starting at 0x0 the pfn
|
||||||
|
* could be 0 so we ensure that the handle will never be 0 by adjusting the
|
||||||
|
* encoded obj_idx value before encoding.
|
||||||
|
*/
|
||||||
static void *obj_location_to_handle(struct page *page, unsigned long obj_idx)
|
static void *obj_location_to_handle(struct page *page, unsigned long obj_idx)
|
||||||
{
|
{
|
||||||
unsigned long handle;
|
unsigned long handle;
|
||||||
|
@ -441,17 +446,21 @@ static void *obj_location_to_handle(struct page *page, unsigned long obj_idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
handle = page_to_pfn(page) << OBJ_INDEX_BITS;
|
handle = page_to_pfn(page) << OBJ_INDEX_BITS;
|
||||||
handle |= (obj_idx & OBJ_INDEX_MASK);
|
handle |= ((obj_idx + 1) & OBJ_INDEX_MASK);
|
||||||
|
|
||||||
return (void *)handle;
|
return (void *)handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Decode <page, obj_idx> pair from the given object handle */
|
/*
|
||||||
|
* Decode <page, obj_idx> pair from the given object handle. We adjust the
|
||||||
|
* decoded obj_idx back to its original value since it was adjusted in
|
||||||
|
* obj_location_to_handle().
|
||||||
|
*/
|
||||||
static void obj_handle_to_location(unsigned long handle, struct page **page,
|
static void obj_handle_to_location(unsigned long handle, struct page **page,
|
||||||
unsigned long *obj_idx)
|
unsigned long *obj_idx)
|
||||||
{
|
{
|
||||||
*page = pfn_to_page(handle >> OBJ_INDEX_BITS);
|
*page = pfn_to_page(handle >> OBJ_INDEX_BITS);
|
||||||
*obj_idx = handle & OBJ_INDEX_MASK;
|
*obj_idx = (handle & OBJ_INDEX_MASK) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long obj_idx_to_offset(struct page *page,
|
static unsigned long obj_idx_to_offset(struct page *page,
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
|
|
||||||
#include <linux/hid.h>
|
#include <linux/hid.h>
|
||||||
#include <linux/hid-sensor-ids.h>
|
#include <linux/hid-sensor-ids.h>
|
||||||
|
#include <linux/iio/iio.h>
|
||||||
|
#include <linux/iio/trigger.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct hid_sensor_hub_attribute_info - Attribute info
|
* struct hid_sensor_hub_attribute_info - Attribute info
|
||||||
|
@ -184,6 +186,7 @@ struct hid_sensor_common {
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
unsigned usage_id;
|
unsigned usage_id;
|
||||||
bool data_ready;
|
bool data_ready;
|
||||||
|
struct iio_trigger *trigger;
|
||||||
struct hid_sensor_hub_attribute_info poll;
|
struct hid_sensor_hub_attribute_info poll;
|
||||||
struct hid_sensor_hub_attribute_info report_state;
|
struct hid_sensor_hub_attribute_info report_state;
|
||||||
struct hid_sensor_hub_attribute_info power_state;
|
struct hid_sensor_hub_attribute_info power_state;
|
||||||
|
|
Loading…
Reference in a new issue