mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
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
This commit is contained in:
commit
461df4ded3
19 changed files with 84 additions and 45 deletions
|
@ -25,8 +25,8 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <media/cx25840.h>
|
#include <media/cx25840.h>
|
||||||
#include <linux/firmware.h>
|
#include <linux/firmware.h>
|
||||||
#include <staging/altera.h>
|
|
||||||
|
|
||||||
|
#include "../../../staging/altera-stapl/altera.h"
|
||||||
#include "cx23885.h"
|
#include "cx23885.h"
|
||||||
#include "tuner-xc2028.h"
|
#include "tuner-xc2028.h"
|
||||||
#include "netup-init.h"
|
#include "netup-init.h"
|
||||||
|
|
|
@ -24,23 +24,6 @@ menuconfig STAGING
|
||||||
|
|
||||||
if 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/tty/Kconfig"
|
||||||
|
|
||||||
source "drivers/staging/generic_serial/Kconfig"
|
source "drivers/staging/generic_serial/Kconfig"
|
||||||
|
@ -177,5 +160,4 @@ source "drivers/staging/mei/Kconfig"
|
||||||
|
|
||||||
source "drivers/staging/nvec/Kconfig"
|
source "drivers/staging/nvec/Kconfig"
|
||||||
|
|
||||||
endif # !STAGING_EXCLUDE_BUILD
|
|
||||||
endif # STAGING
|
endif # STAGING
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/firmware.h>
|
#include <linux/firmware.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <staging/altera.h>
|
#include "altera.h"
|
||||||
#include "altera-exprt.h"
|
#include "altera-exprt.h"
|
||||||
#include "altera-jtag.h"
|
#include "altera-jtag.h"
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/firmware.h>
|
#include <linux/firmware.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <staging/altera.h>
|
#include "altera.h"
|
||||||
#include "altera-exprt.h"
|
#include "altera-exprt.h"
|
||||||
#include "altera-jtag.h"
|
#include "altera-jtag.h"
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
config ATH6K_LEGACY
|
config ATH6K_LEGACY
|
||||||
tristate "Atheros AR6003 support (non mac80211)"
|
tristate "Atheros AR6003 support (non mac80211)"
|
||||||
depends on MMC && WLAN
|
depends on MMC && WLAN
|
||||||
|
depends on CFG80211
|
||||||
select WIRELESS_EXT
|
select WIRELESS_EXT
|
||||||
select WEXT_PRIV
|
select WEXT_PRIV
|
||||||
help
|
help
|
||||||
|
|
|
@ -870,7 +870,8 @@ ar6k_cfg80211_scanComplete_event(struct ar6_softc *ar, int status)
|
||||||
if(ar->scan_request)
|
if(ar->scan_request)
|
||||||
{
|
{
|
||||||
/* Translate data to cfg80211 mgmt format */
|
/* 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,
|
cfg80211_scan_done(ar->scan_request,
|
||||||
((status & A_ECANCELED) || (status & A_EBUSY)) ? true : false);
|
((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,
|
extern bool wl_iw_conn_status_str(u32 event_type, u32 status,
|
||||||
u32 reason, char *stringBuf, uint buflen);
|
u32 reason, char *stringBuf, uint buflen);
|
||||||
|
|
||||||
uint wl_msg_level = WL_ERROR_VAL;
|
|
||||||
|
|
||||||
#define MAX_WLIW_IOCTL_LEN 1024
|
#define MAX_WLIW_IOCTL_LEN 1024
|
||||||
|
|
||||||
#ifdef CONFIG_WIRELESS_EXT
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
|
|
|
@ -542,6 +542,8 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)
|
||||||
unsigned long irqflags;
|
unsigned long irqflags;
|
||||||
int ret = -ENOMEM;
|
int ret = -ENOMEM;
|
||||||
uint32_t tt_pages;
|
uint32_t tt_pages;
|
||||||
|
struct drm_connector *connector;
|
||||||
|
struct psb_intel_output *psb_intel_output;
|
||||||
|
|
||||||
dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL);
|
dev_priv = kzalloc(sizeof(*dev_priv), GFP_KERNEL);
|
||||||
if (dev_priv == NULL)
|
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);
|
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)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
#if 0
|
#if 0
|
||||||
|
|
|
@ -441,6 +441,16 @@ static int psbfb_create(struct psb_fbdev *fbdev,
|
||||||
info->screen_size = size;
|
info->screen_size = size;
|
||||||
memset(info->screen_base, 0, 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_fix(info, fb->pitch, fb->depth);
|
||||||
drm_fb_helper_fill_var(info, &fbdev->psb_fb_helper,
|
drm_fb_helper_fill_var(info, &fbdev->psb_fb_helper,
|
||||||
sizes->fb_width, sizes->fb_height);
|
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);
|
fill_detail_timing_data(panel_fixed_mode, dvo_timing);
|
||||||
|
|
||||||
dev_priv->lfp_lvds_vbt_mode = 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_DEBUG("Found panel mode in BIOS VBT tables:\n");
|
||||||
drm_mode_debug_printmodeline(panel_fixed_mode);
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,7 +195,7 @@ static const struct iio_info max517_info = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct iio_info max518_info = {
|
static const struct iio_info max518_info = {
|
||||||
.attrs = &max517_attribute_group,
|
.attrs = &max518_attribute_group,
|
||||||
.driver_module = THIS_MODULE,
|
.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) {
|
if (st->variant->flags & ADIS16400_NO_BURST) {
|
||||||
ret = adis16350_spi_read_all(&indio_dev->dev, st->rx);
|
ret = adis16350_spi_read_all(&indio_dev->dev, st->rx);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
goto err;
|
||||||
for (; i < ring->scan_count; i++)
|
for (; i < ring->scan_count; i++)
|
||||||
data[i] = *(s16 *)(st->rx + i*2);
|
data[i] = *(s16 *)(st->rx + i*2);
|
||||||
} else {
|
} else {
|
||||||
ret = adis16400_spi_read_burst(&indio_dev->dev, st->rx);
|
ret = adis16400_spi_read_burst(&indio_dev->dev, st->rx);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
goto err;
|
||||||
for (; i < indio_dev->ring->scan_count; i++) {
|
for (; i < indio_dev->ring->scan_count; i++) {
|
||||||
j = __ffs(mask);
|
j = __ffs(mask);
|
||||||
mask &= ~(1 << j);
|
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);
|
ring->access->store_to(indio_dev->ring, (u8 *) data, pf->timestamp);
|
||||||
|
|
||||||
iio_trigger_notify_done(indio_dev->trig);
|
iio_trigger_notify_done(indio_dev->trig);
|
||||||
kfree(data);
|
|
||||||
|
|
||||||
|
kfree(data);
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
|
|
||||||
|
err:
|
||||||
|
kfree(data);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void adis16400_unconfigure_ring(struct iio_dev *indio_dev)
|
void adis16400_unconfigure_ring(struct iio_dev *indio_dev)
|
||||||
|
|
|
@ -294,6 +294,7 @@ struct iio_poll_func
|
||||||
pf->h = h;
|
pf->h = h;
|
||||||
pf->thread = thread;
|
pf->thread = thread;
|
||||||
pf->type = type;
|
pf->type = type;
|
||||||
|
pf->private_data = private;
|
||||||
|
|
||||||
return pf;
|
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",
|
"host_hw_state = 0x%08x, me_hw_state = 0x%08x.\n",
|
||||||
dev->host_hw_state, dev->me_hw_state);
|
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");
|
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");
|
dev_dbg(&dev->pdev->dev, "ME turn off ME_RDY.\n");
|
||||||
|
|
||||||
printk(KERN_ERR "mei: link layer initialization failed.\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"
|
tristate "One Laptop Per Child Display CONtroller support"
|
||||||
depends on OLPC && FB
|
depends on OLPC && FB
|
||||||
select I2C
|
select I2C
|
||||||
|
select BACKLIGHT_CLASS_DEVICE
|
||||||
---help---
|
---help---
|
||||||
Add support for the OLPC XO DCON controller. This controller is
|
Add support for the OLPC XO DCON controller. This controller is
|
||||||
only available on OLPC platforms. Unless you have one of these
|
only available on OLPC platforms. Unless you have one of these
|
||||||
|
|
|
@ -2328,7 +2328,7 @@ Switch_Fail:
|
||||||
|
|
||||||
retval = sd_send_cmd_get_rsp(chip, IO_SEND_OP_COND, 0, SD_RSP_TYPE_R4, rsp, 5);
|
retval = sd_send_cmd_get_rsp(chip, IO_SEND_OP_COND, 0, SD_RSP_TYPE_R4, rsp, 5);
|
||||||
if (retval == STATUS_SUCCESS) {
|
if (retval == STATUS_SUCCESS) {
|
||||||
int func_num = (rsp[1] >> 4) && 0x07;
|
int func_num = (rsp[1] >> 4) & 0x07;
|
||||||
if (func_num) {
|
if (func_num) {
|
||||||
RTSX_DEBUGP("SD_IO card (Function number: %d)!\n", func_num);
|
RTSX_DEBUGP("SD_IO card (Function number: %d)!\n", func_num);
|
||||||
chip->sd_io = 1;
|
chip->sd_io = 1;
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
static int stub_probe(struct usb_interface *interface,
|
static int stub_probe(struct usb_interface *interface,
|
||||||
const struct usb_device_id *id);
|
const struct usb_device_id *id);
|
||||||
static void stub_disconnect(struct usb_interface *interface);
|
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.
|
* Define device IDs here if you want to explicitly limit exportable devices.
|
||||||
|
@ -59,6 +61,8 @@ struct usb_driver stub_driver = {
|
||||||
.probe = stub_probe,
|
.probe = stub_probe,
|
||||||
.disconnect = stub_disconnect,
|
.disconnect = stub_disconnect,
|
||||||
.id_table = stub_table,
|
.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);
|
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");
|
dev_info(&urb->dev->dev, "usb_queue_reset_device\n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* usb_lock_device_for_reset caused a deadlock: it causes the driver
|
* With the implementation of pre_reset and post_reset the driver no
|
||||||
* to unbind. In the shutdown the rx thread is signalled to shut down
|
* longer unbinds. This allows the use of synchronous reset.
|
||||||
* 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.
|
|
||||||
*/
|
*/
|
||||||
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue