提交 461df4de 编写于 作者: L Linus Torvalds

Merge branch 'staging-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6

* 'staging-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6:
  staging: iio: max517: Fix iio_info changes
  Staging: mei: fix debug code
  Staging: cx23885: fix include of altera.h
  staging: iio: error case memory leak fix
  staging: ath6kl: Fix a kernel panic during suspend/resume
  staging: gma500: get control from firmware framebuffer if conflicts
  staging: gma500: Skip bogus LVDS VBT mode and check for LVDS before adding backlight
  staging: usbip: bugfix prevent driver unbind
  staging: iio: industrialio-trigger: set iio_poll_func private_data
  staging: rts_pstor: use bitwise operator instead of logical one
  staging: fix ath6kl build when CFG80211 is not enabled
  staging: brcm80211: fix for 'multiple definition of wl_msg_level' build err
  staging: fix olpc_dcon build, needs BACKLIGHT_CLASS_DEVICE
  Staging: remove STAGING_EXCLUDE_BUILD option
  Staging: altera: move .h file to proper place
......@@ -25,8 +25,8 @@
#include <linux/delay.h>
#include <media/cx25840.h>
#include <linux/firmware.h>
#include <staging/altera.h>
#include "../../../staging/altera-stapl/altera.h"
#include "cx23885.h"
#include "tuner-xc2028.h"
#include "netup-init.h"
......
......@@ -24,23 +24,6 @@ menuconfig STAGING
if STAGING
config STAGING_EXCLUDE_BUILD
bool "Exclude Staging drivers from being built" if STAGING
default y
---help---
Are you sure you really want to build the staging drivers?
They taint your kernel, don't live up to the normal Linux
kernel quality standards, are a bit crufty around the edges,
and might go off and kick your dog when you aren't paying
attention.
Say N here to be able to select and build the Staging drivers.
This option is primarily here to prevent them from being built
when selecting 'make allyesconfg' and 'make allmodconfig' so
don't be all that put off, your dog will be just fine.
if !STAGING_EXCLUDE_BUILD
source "drivers/staging/tty/Kconfig"
source "drivers/staging/generic_serial/Kconfig"
......@@ -177,5 +160,4 @@ source "drivers/staging/mei/Kconfig"
source "drivers/staging/nvec/Kconfig"
endif # !STAGING_EXCLUDE_BUILD
endif # STAGING
......@@ -26,7 +26,7 @@
#include <linux/delay.h>
#include <linux/firmware.h>
#include <linux/slab.h>
#include <staging/altera.h>
#include "altera.h"
#include "altera-exprt.h"
#include "altera-jtag.h"
......
......@@ -28,7 +28,7 @@
#include <linux/string.h>
#include <linux/firmware.h>
#include <linux/slab.h>
#include <staging/altera.h>
#include "altera.h"
#include "altera-exprt.h"
#include "altera-jtag.h"
......
config ATH6K_LEGACY
tristate "Atheros AR6003 support (non mac80211)"
depends on MMC && WLAN
depends on CFG80211
select WIRELESS_EXT
select WEXT_PRIV
help
......
......@@ -870,7 +870,8 @@ ar6k_cfg80211_scanComplete_event(struct ar6_softc *ar, int status)
if(ar->scan_request)
{
/* Translate data to cfg80211 mgmt format */
wmi_iterate_nodes(ar->arWmi, ar6k_cfg80211_scan_node, ar->wdev->wiphy);
if (ar->arWmi)
wmi_iterate_nodes(ar->arWmi, ar6k_cfg80211_scan_node, ar->wdev->wiphy);
cfg80211_scan_done(ar->scan_request,
((status & A_ECANCELED) || (status & A_EBUSY)) ? true : false);
......
......@@ -64,8 +64,6 @@ wl_iw_extra_params_t g_wl_iw_params;
extern bool wl_iw_conn_status_str(u32 event_type, u32 status,
u32 reason, char *stringBuf, uint buflen);
uint wl_msg_level = WL_ERROR_VAL;
#define MAX_WLIW_IOCTL_LEN 1024
#ifdef CONFIG_WIRELESS_EXT
......
......@@ -542,6 +542,8 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)
unsigned long irqflags;
int ret = -ENOMEM;
uint32_t tt_pages;
struct drm_connector *connector;
struct psb_intel_output *psb_intel_output;
dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL);
if (dev_priv == NULL)
......@@ -663,7 +665,18 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)
drm_kms_helper_poll_init(dev);
}
ret = psb_backlight_init(dev);
/* Only add backlight support if we have LVDS output */
list_for_each_entry(connector, &dev->mode_config.connector_list,
head) {
psb_intel_output = to_psb_intel_output(connector);
switch (psb_intel_output->type) {
case INTEL_OUTPUT_LVDS:
ret = psb_backlight_init(dev);
break;
}
}
if (ret)
return ret;
#if 0
......
......@@ -441,6 +441,16 @@ static int psbfb_create(struct psb_fbdev *fbdev,
info->screen_size = size;
memset(info->screen_base, 0, size);
if (dev_priv->pg->stolen_size) {
info->apertures = alloc_apertures(1);
if (!info->apertures) {
ret = -ENOMEM;
goto out_err0;
}
info->apertures->ranges[0].base = dev->mode_config.fb_base;
info->apertures->ranges[0].size = dev_priv->pg->stolen_size;
}
drm_fb_helper_fill_fix(info, fb->pitch, fb->depth);
drm_fb_helper_fill_var(info, &fbdev->psb_fb_helper,
sizes->fb_width, sizes->fb_height);
......
......@@ -154,10 +154,15 @@ static void parse_lfp_panel_data(struct drm_psb_private *dev_priv,
fill_detail_timing_data(panel_fixed_mode, dvo_timing);
dev_priv->lfp_lvds_vbt_mode = panel_fixed_mode;
DRM_DEBUG("Found panel mode in BIOS VBT tables:\n");
drm_mode_debug_printmodeline(panel_fixed_mode);
if (panel_fixed_mode->htotal > 0 && panel_fixed_mode->vtotal > 0) {
dev_priv->lfp_lvds_vbt_mode = panel_fixed_mode;
DRM_DEBUG("Found panel mode in BIOS VBT tables:\n");
drm_mode_debug_printmodeline(panel_fixed_mode);
} else {
DRM_DEBUG("Ignoring bogus LVDS VBT mode.\n");
dev_priv->lvds_vbt = 0;
kfree(panel_fixed_mode);
}
return;
}
......
......@@ -195,7 +195,7 @@ static const struct iio_info max517_info = {
};
static const struct iio_info max518_info = {
.attrs = &max517_attribute_group,
.attrs = &max518_attribute_group,
.driver_module = THIS_MODULE,
};
......
......@@ -137,13 +137,13 @@ static irqreturn_t adis16400_trigger_handler(int irq, void *p)
if (st->variant->flags & ADIS16400_NO_BURST) {
ret = adis16350_spi_read_all(&indio_dev->dev, st->rx);
if (ret < 0)
return ret;
goto err;
for (; i < ring->scan_count; i++)
data[i] = *(s16 *)(st->rx + i*2);
} else {
ret = adis16400_spi_read_burst(&indio_dev->dev, st->rx);
if (ret < 0)
return ret;
goto err;
for (; i < indio_dev->ring->scan_count; i++) {
j = __ffs(mask);
mask &= ~(1 << j);
......@@ -158,9 +158,13 @@ static irqreturn_t adis16400_trigger_handler(int irq, void *p)
ring->access->store_to(indio_dev->ring, (u8 *) data, pf->timestamp);
iio_trigger_notify_done(indio_dev->trig);
kfree(data);
kfree(data);
return IRQ_HANDLED;
err:
kfree(data);
return ret;
}
void adis16400_unconfigure_ring(struct iio_dev *indio_dev)
......
......@@ -294,6 +294,7 @@ struct iio_poll_func
pf->h = h;
pf->thread = thread;
pf->type = type;
pf->private_data = private;
return pf;
}
......
......@@ -205,10 +205,10 @@ int mei_hw_init(struct mei_device *dev)
"host_hw_state = 0x%08x, me_hw_state = 0x%08x.\n",
dev->host_hw_state, dev->me_hw_state);
if (!(dev->host_hw_state & H_RDY) != H_RDY)
if (!(dev->host_hw_state & H_RDY))
dev_dbg(&dev->pdev->dev, "host turn off H_RDY.\n");
if (!(dev->me_hw_state & ME_RDY_HRA) != ME_RDY_HRA)
if (!(dev->me_hw_state & ME_RDY_HRA))
dev_dbg(&dev->pdev->dev, "ME turn off ME_RDY.\n");
printk(KERN_ERR "mei: link layer initialization failed.\n");
......
......@@ -2,6 +2,7 @@ config FB_OLPC_DCON
tristate "One Laptop Per Child Display CONtroller support"
depends on OLPC && FB
select I2C
select BACKLIGHT_CLASS_DEVICE
---help---
Add support for the OLPC XO DCON controller. This controller is
only available on OLPC platforms. Unless you have one of these
......
......@@ -2328,7 +2328,7 @@ static int reset_sd(struct rtsx_chip *chip)
retval = sd_send_cmd_get_rsp(chip, IO_SEND_OP_COND, 0, SD_RSP_TYPE_R4, rsp, 5);
if (retval == STATUS_SUCCESS) {
int func_num = (rsp[1] >> 4) && 0x07;
int func_num = (rsp[1] >> 4) & 0x07;
if (func_num) {
RTSX_DEBUGP("SD_IO card (Function number: %d)!\n", func_num);
chip->sd_io = 1;
......
......@@ -26,6 +26,8 @@
static int stub_probe(struct usb_interface *interface,
const struct usb_device_id *id);
static void stub_disconnect(struct usb_interface *interface);
static int stub_pre_reset(struct usb_interface *interface);
static int stub_post_reset(struct usb_interface *interface);
/*
* Define device IDs here if you want to explicitly limit exportable devices.
......@@ -59,6 +61,8 @@ struct usb_driver stub_driver = {
.probe = stub_probe,
.disconnect = stub_disconnect,
.id_table = stub_table,
.pre_reset = stub_pre_reset,
.post_reset = stub_post_reset,
};
/*
......@@ -541,3 +545,20 @@ static void stub_disconnect(struct usb_interface *interface)
del_match_busid((char *)udev_busid);
}
}
/*
* Presence of pre_reset and post_reset prevents the driver from being unbound
* when the device is being reset
*/
int stub_pre_reset(struct usb_interface *interface)
{
dev_dbg(&interface->dev, "pre_reset\n");
return 0;
}
int stub_post_reset(struct usb_interface *interface)
{
dev_dbg(&interface->dev, "post_reset\n");
return 0;
}
......@@ -175,16 +175,18 @@ static int tweak_reset_device_cmd(struct urb *urb)
dev_info(&urb->dev->dev, "usb_queue_reset_device\n");
/*
* usb_lock_device_for_reset caused a deadlock: it causes the driver
* to unbind. In the shutdown the rx thread is signalled to shut down
* but this thread is pending in the usb_lock_device_for_reset.
*
* Instead queue the reset.
*
* Unfortunatly an existing usbip connection will be dropped due to
* driver unbinding.
* With the implementation of pre_reset and post_reset the driver no
* longer unbinds. This allows the use of synchronous reset.
*/
usb_queue_reset_device(sdev->interface);
if (usb_lock_device_for_reset(sdev->udev, sdev->interface)<0)
{
dev_err(&urb->dev->dev, "could not obtain lock to reset device\n");
return 0;
}
usb_reset_device(sdev->udev);
usb_unlock_device(sdev->udev);
return 0;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册