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:
Linus Torvalds 2013-11-27 21:05:31 -08:00
commit 0b0f7f1cda
33 changed files with 124 additions and 62 deletions

View file

@ -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);

View file

@ -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,

View file

@ -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;
} }

View file

@ -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 {

View file

@ -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)

View file

@ -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;

View file

@ -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

View file

@ -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);

View file

@ -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.

View file

@ -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);

View file

@ -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.

View file

@ -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);

View file

@ -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[] = {

View file

@ -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;

View file

@ -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);
} }

View file

@ -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;

View file

@ -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;

View file

@ -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;
} }

View file

@ -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).

View file

@ -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

View file

@ -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)
{ {

View file

@ -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();

View file

@ -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

View file

@ -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;

View file

@ -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;
} }

View file

@ -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

View file

@ -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;

View file

@ -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;
} }

View file

@ -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;

View file

@ -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];

View file

@ -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)

View file

@ -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,

View file

@ -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;