Commit 0b0f7f1c authored by Linus Torvalds's avatar Linus Torvalds

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
  ...
parents f4968636 930ba4a3
...@@ -350,7 +350,7 @@ static int hid_accel_3d_probe(struct platform_device *pdev) ...@@ -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) ...@@ -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) ...@@ -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)
ret = (((u16)(st->rx[0])) << 8) | (st->rx[1] & 0xF0);
mutex_unlock(&st->buf_lock);
return ret; return ret;
return (((u16)(st->rx[0])) << 8) | (st->rx[1] & 0xF0);
} }
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) ...@@ -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] = { ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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 @@ static irqreturn_t mag3110_trigger_handler(int irq, void *p) ...@@ -250,7 +250,12 @@ static irqreturn_t mag3110_trigger_handler(int irq, void *p)
.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 @@ static void btmtk_usb_isoc_tx_complete(struct urb *urb) ...@@ -1284,9 +1284,8 @@ static void btmtk_usb_isoc_tx_complete(struct urb *urb)
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, ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -1074,4 +1074,3 @@ int scram_dnldr(struct ft1000_usb *ft1000dev, void *pFileStart,
return status; return status;
} }
...@@ -6,6 +6,8 @@ menu "Magnetometer sensors" ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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,6 +143,7 @@ static int hostap_disable_hostapd(PSDevice pDevice, int rtnl_locked) ...@@ -143,6 +143,7 @@ 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);
} }
if (pDevice->apdev)
free_netdev(pDevice->apdev); free_netdev(pDevice->apdev);
pDevice->apdev = NULL; pDevice->apdev = NULL;
pDevice->bEnable8021x = false; pDevice->bEnable8021x = false;
......
...@@ -939,6 +939,7 @@ int BBbVT3184Init(struct vnt_private *pDevice) ...@@ -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 { ...@@ -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,6 +133,7 @@ static int hostap_disable_hostapd(struct vnt_private *pDevice, int rtnl_locked) ...@@ -133,6 +133,7 @@ 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);
} }
if (pDevice->apdev)
free_netdev(pDevice->apdev); free_netdev(pDevice->apdev);
pDevice->apdev = NULL; pDevice->apdev = NULL;
pDevice->bEnable8021x = false; pDevice->bEnable8021x = false;
......
...@@ -66,6 +66,8 @@ ...@@ -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, ...@@ -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) ...@@ -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) ...@@ -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 @@ ...@@ -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 { ...@@ -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;
......
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