Add stable 3.0.3
svn path=/dists/sid/linux-2.6/; revision=17984
This commit is contained in:
parent
b5e846c68b
commit
cdcd919fec
|
@ -3,6 +3,10 @@ linux-2.6 (3.0.0-3) UNRELEASED; urgency=low
|
|||
[ Ben Hutchings ]
|
||||
* Disable SENSORS_SHT15, unlikely to be usable on any supported platform
|
||||
(Closes: #638696)
|
||||
* Add stable 3.0.3, including:
|
||||
- atm: br2864: sent packets truncated in VC routed mode (Closes: #638656)
|
||||
For the complete list of changes, see:
|
||||
http://www.kernel.org/pub/linux/kernel/v3.0/ChangeLog-3.0.3
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Sun, 21 Aug 2011 16:18:29 +0100
|
||||
|
||||
|
|
|
@ -0,0 +1,598 @@
|
|||
diff --git a/Documentation/virtual/lguest/lguest.c b/Documentation/virtual/lguest/lguest.c
|
||||
index cd9d6af..aec80e5 100644
|
||||
--- a/Documentation/virtual/lguest/lguest.c
|
||||
+++ b/Documentation/virtual/lguest/lguest.c
|
||||
@@ -2008,6 +2008,9 @@ int main(int argc, char *argv[])
|
||||
/* We use a simple helper to copy the arguments separated by spaces. */
|
||||
concat((char *)(boot + 1), argv+optind+2);
|
||||
|
||||
+ /* Set kernel alignment to 16M (CONFIG_PHYSICAL_ALIGN) */
|
||||
+ boot->hdr.kernel_alignment = 0x1000000;
|
||||
+
|
||||
/* Boot protocol version: 2.07 supports the fields for lguest. */
|
||||
boot->hdr.version = 0x207;
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 794fa28..c44d720 100644
|
||||
diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c
|
||||
index 645b84b..7ad43c6 100644
|
||||
--- a/drivers/gpu/drm/radeon/atombios_dp.c
|
||||
+++ b/drivers/gpu/drm/radeon/atombios_dp.c
|
||||
@@ -613,6 +613,18 @@ static bool radeon_dp_get_link_status(struct radeon_connector *radeon_connector,
|
||||
return true;
|
||||
}
|
||||
|
||||
+bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector)
|
||||
+{
|
||||
+ u8 link_status[DP_LINK_STATUS_SIZE];
|
||||
+ struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;
|
||||
+
|
||||
+ if (!radeon_dp_get_link_status(radeon_connector, link_status))
|
||||
+ return false;
|
||||
+ if (dp_channel_eq_ok(link_status, dig->dp_lane_count))
|
||||
+ return false;
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
struct radeon_dp_link_train_info {
|
||||
struct radeon_device *rdev;
|
||||
struct drm_encoder *encoder;
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
|
||||
index 6d6b5f1..6ab6c41 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
|
||||
@@ -60,18 +60,20 @@ void radeon_connector_hotplug(struct drm_connector *connector)
|
||||
|
||||
radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
|
||||
|
||||
- /* powering up/down the eDP panel generates hpd events which
|
||||
- * can interfere with modesetting.
|
||||
- */
|
||||
- if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
|
||||
+ /* if the connector is already off, don't turn it back on */
|
||||
+ if (connector->dpms != DRM_MODE_DPMS_ON)
|
||||
return;
|
||||
|
||||
- /* pre-r600 did not always have the hpd pins mapped accurately to connectors */
|
||||
- if (rdev->family >= CHIP_R600) {
|
||||
- if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
|
||||
+ /* just deal with DP (not eDP) here. */
|
||||
+ if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
|
||||
+ int saved_dpms = connector->dpms;
|
||||
+
|
||||
+ if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd) &&
|
||||
+ radeon_dp_needs_link_train(radeon_connector))
|
||||
drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
|
||||
else
|
||||
drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
|
||||
+ connector->dpms = saved_dpms;
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
|
||||
index b293487..319d85d 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_encoders.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_encoders.c
|
||||
@@ -2323,6 +2323,9 @@ radeon_add_atom_encoder(struct drm_device *dev,
|
||||
default:
|
||||
encoder->possible_crtcs = 0x3;
|
||||
break;
|
||||
+ case 4:
|
||||
+ encoder->possible_crtcs = 0xf;
|
||||
+ break;
|
||||
case 6:
|
||||
encoder->possible_crtcs = 0x3f;
|
||||
break;
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
|
||||
index d09031c..68820f5 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_mode.h
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_mode.h
|
||||
@@ -479,6 +479,7 @@ extern void radeon_dp_set_link_config(struct drm_connector *connector,
|
||||
struct drm_display_mode *mode);
|
||||
extern void radeon_dp_link_train(struct drm_encoder *encoder,
|
||||
struct drm_connector *connector);
|
||||
+extern bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector);
|
||||
extern u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector);
|
||||
extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector);
|
||||
extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode);
|
||||
diff --git a/drivers/hwmon/ibmaem.c b/drivers/hwmon/ibmaem.c
|
||||
index 1a409c5..c316294 100644
|
||||
--- a/drivers/hwmon/ibmaem.c
|
||||
+++ b/drivers/hwmon/ibmaem.c
|
||||
@@ -432,13 +432,15 @@ static int aem_read_sensor(struct aem_data *data, u8 elt, u8 reg,
|
||||
aem_send_message(ipmi);
|
||||
|
||||
res = wait_for_completion_timeout(&ipmi->read_complete, IPMI_TIMEOUT);
|
||||
- if (!res)
|
||||
- return -ETIMEDOUT;
|
||||
+ if (!res) {
|
||||
+ res = -ETIMEDOUT;
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
if (ipmi->rx_result || ipmi->rx_msg_len != rs_size ||
|
||||
memcmp(&rs_resp->id, &system_x_id, sizeof(system_x_id))) {
|
||||
- kfree(rs_resp);
|
||||
- return -ENOENT;
|
||||
+ res = -ENOENT;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
switch (size) {
|
||||
@@ -463,8 +465,11 @@ static int aem_read_sensor(struct aem_data *data, u8 elt, u8 reg,
|
||||
break;
|
||||
}
|
||||
}
|
||||
+ res = 0;
|
||||
|
||||
- return 0;
|
||||
+out:
|
||||
+ kfree(rs_resp);
|
||||
+ return res;
|
||||
}
|
||||
|
||||
/* Update AEM energy registers */
|
||||
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
|
||||
index b6c5d37..1ae8913 100644
|
||||
--- a/drivers/net/wireless/ath/ath5k/base.c
|
||||
+++ b/drivers/net/wireless/ath/ath5k/base.c
|
||||
@@ -1748,6 +1748,8 @@ ath5k_beacon_setup(struct ath5k_softc *sc, struct ath5k_buf *bf)
|
||||
|
||||
if (dma_mapping_error(sc->dev, bf->skbaddr)) {
|
||||
ATH5K_ERR(sc, "beacon DMA mapping failed\n");
|
||||
+ dev_kfree_skb_any(skb);
|
||||
+ bf->skb = NULL;
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
@@ -1832,8 +1834,6 @@ ath5k_beacon_update(struct ieee80211_hw *hw, struct ieee80211_vif *vif)
|
||||
ath5k_txbuf_free_skb(sc, avf->bbuf);
|
||||
avf->bbuf->skb = skb;
|
||||
ret = ath5k_beacon_setup(sc, avf->bbuf);
|
||||
- if (ret)
|
||||
- avf->bbuf->skb = NULL;
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
@@ -1854,6 +1854,7 @@ ath5k_beacon_send(struct ath5k_softc *sc)
|
||||
struct ath5k_vif *avf;
|
||||
struct ath5k_buf *bf;
|
||||
struct sk_buff *skb;
|
||||
+ int err;
|
||||
|
||||
ATH5K_DBG_UNLIMIT(sc, ATH5K_DEBUG_BEACON, "in beacon_send\n");
|
||||
|
||||
@@ -1902,11 +1903,6 @@ ath5k_beacon_send(struct ath5k_softc *sc)
|
||||
|
||||
avf = (void *)vif->drv_priv;
|
||||
bf = avf->bbuf;
|
||||
- if (unlikely(bf->skb == NULL || sc->opmode == NL80211_IFTYPE_STATION ||
|
||||
- sc->opmode == NL80211_IFTYPE_MONITOR)) {
|
||||
- ATH5K_WARN(sc, "bf=%p bf_skb=%p\n", bf, bf ? bf->skb : NULL);
|
||||
- return;
|
||||
- }
|
||||
|
||||
/*
|
||||
* Stop any current dma and put the new frame on the queue.
|
||||
@@ -1920,8 +1916,17 @@ ath5k_beacon_send(struct ath5k_softc *sc)
|
||||
|
||||
/* refresh the beacon for AP or MESH mode */
|
||||
if (sc->opmode == NL80211_IFTYPE_AP ||
|
||||
- sc->opmode == NL80211_IFTYPE_MESH_POINT)
|
||||
- ath5k_beacon_update(sc->hw, vif);
|
||||
+ sc->opmode == NL80211_IFTYPE_MESH_POINT) {
|
||||
+ err = ath5k_beacon_update(sc->hw, vif);
|
||||
+ if (err)
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (unlikely(bf->skb == NULL || sc->opmode == NL80211_IFTYPE_STATION ||
|
||||
+ sc->opmode == NL80211_IFTYPE_MONITOR)) {
|
||||
+ ATH5K_WARN(sc, "bf=%p bf_skb=%p\n", bf, bf->skb);
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
trace_ath5k_tx(sc, bf->skb, &sc->txqs[sc->bhalq]);
|
||||
|
||||
diff --git a/drivers/staging/rtl8192u/r819xU_firmware.c b/drivers/staging/rtl8192u/r819xU_firmware.c
|
||||
index 6766f46..4bb5fff 100644
|
||||
--- a/drivers/staging/rtl8192u/r819xU_firmware.c
|
||||
+++ b/drivers/staging/rtl8192u/r819xU_firmware.c
|
||||
@@ -399,10 +399,7 @@ download_firmware_fail:
|
||||
|
||||
}
|
||||
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
+MODULE_FIRMWARE("RTL8192U/boot.img");
|
||||
+MODULE_FIRMWARE("RTL8192U/main.img");
|
||||
+MODULE_FIRMWARE("RTL8192U/data.img");
|
||||
|
||||
diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c
|
||||
index 385acb8..3f94ac3 100644
|
||||
--- a/drivers/usb/class/usbtmc.c
|
||||
+++ b/drivers/usb/class/usbtmc.c
|
||||
@@ -268,7 +268,7 @@ usbtmc_abort_bulk_in_status:
|
||||
dev_err(dev, "usb_bulk_msg returned %d\n", rv);
|
||||
goto exit;
|
||||
}
|
||||
- } while ((actual = max_size) &&
|
||||
+ } while ((actual == max_size) &&
|
||||
(n < USBTMC_MAX_READS_TO_CLEAR_BULK_IN));
|
||||
|
||||
if (actual == max_size) {
|
||||
diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
|
||||
index c962608..26678ca 100644
|
||||
--- a/drivers/usb/core/config.c
|
||||
+++ b/drivers/usb/core/config.c
|
||||
@@ -123,10 +123,11 @@ static void usb_parse_ss_endpoint_companion(struct device *ddev, int cfgno,
|
||||
}
|
||||
|
||||
if (usb_endpoint_xfer_isoc(&ep->desc))
|
||||
- max_tx = ep->desc.wMaxPacketSize * (desc->bMaxBurst + 1) *
|
||||
- (desc->bmAttributes + 1);
|
||||
+ max_tx = (desc->bMaxBurst + 1) * (desc->bmAttributes + 1) *
|
||||
+ le16_to_cpu(ep->desc.wMaxPacketSize);
|
||||
else if (usb_endpoint_xfer_int(&ep->desc))
|
||||
- max_tx = ep->desc.wMaxPacketSize * (desc->bMaxBurst + 1);
|
||||
+ max_tx = le16_to_cpu(ep->desc.wMaxPacketSize) *
|
||||
+ (desc->bMaxBurst + 1);
|
||||
else
|
||||
max_tx = 999999;
|
||||
if (le16_to_cpu(desc->wBytesPerInterval) > max_tx) {
|
||||
@@ -134,10 +135,10 @@ static void usb_parse_ss_endpoint_companion(struct device *ddev, int cfgno,
|
||||
"config %d interface %d altsetting %d ep %d: "
|
||||
"setting to %d\n",
|
||||
usb_endpoint_xfer_isoc(&ep->desc) ? "Isoc" : "Int",
|
||||
- desc->wBytesPerInterval,
|
||||
+ le16_to_cpu(desc->wBytesPerInterval),
|
||||
cfgno, inum, asnum, ep->desc.bEndpointAddress,
|
||||
max_tx);
|
||||
- ep->ss_ep_comp.wBytesPerInterval = max_tx;
|
||||
+ ep->ss_ep_comp.wBytesPerInterval = cpu_to_le16(max_tx);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
|
||||
index 04b90ad..e9f004e 100644
|
||||
--- a/drivers/usb/host/pci-quirks.c
|
||||
+++ b/drivers/usb/host/pci-quirks.c
|
||||
@@ -803,7 +803,7 @@ static void __devinit quirk_usb_handoff_xhci(struct pci_dev *pdev)
|
||||
|
||||
/* If the BIOS owns the HC, signal that the OS wants it, and wait */
|
||||
if (val & XHCI_HC_BIOS_OWNED) {
|
||||
- writel(val & XHCI_HC_OS_OWNED, base + ext_cap_offset);
|
||||
+ writel(val | XHCI_HC_OS_OWNED, base + ext_cap_offset);
|
||||
|
||||
/* Wait for 5 seconds with 10 microsecond polling interval */
|
||||
timeout = handshake(base + ext_cap_offset, XHCI_HC_BIOS_OWNED,
|
||||
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
|
||||
index f5fe1ac..9824761 100644
|
||||
--- a/drivers/usb/host/xhci.c
|
||||
+++ b/drivers/usb/host/xhci.c
|
||||
@@ -345,7 +345,8 @@ static void xhci_event_ring_work(unsigned long arg)
|
||||
spin_lock_irqsave(&xhci->lock, flags);
|
||||
temp = xhci_readl(xhci, &xhci->op_regs->status);
|
||||
xhci_dbg(xhci, "op reg status = 0x%x\n", temp);
|
||||
- if (temp == 0xffffffff || (xhci->xhc_state & XHCI_STATE_DYING)) {
|
||||
+ if (temp == 0xffffffff || (xhci->xhc_state & XHCI_STATE_DYING) ||
|
||||
+ (xhci->xhc_state & XHCI_STATE_HALTED)) {
|
||||
xhci_dbg(xhci, "HW died, polling stopped.\n");
|
||||
spin_unlock_irqrestore(&xhci->lock, flags);
|
||||
return;
|
||||
@@ -939,8 +940,11 @@ static int xhci_check_args(struct usb_hcd *hcd, struct usb_device *udev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ xhci = hcd_to_xhci(hcd);
|
||||
+ if (xhci->xhc_state & XHCI_STATE_HALTED)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
if (check_virt_dev) {
|
||||
- xhci = hcd_to_xhci(hcd);
|
||||
if (!udev->slot_id || !xhci->devs
|
||||
|| !xhci->devs[udev->slot_id]) {
|
||||
printk(KERN_DEBUG "xHCI %s called with unaddressed "
|
||||
@@ -1242,7 +1246,8 @@ int xhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
|
||||
xhci_urb_free_priv(xhci, urb_priv);
|
||||
return ret;
|
||||
}
|
||||
- if (xhci->xhc_state & XHCI_STATE_DYING) {
|
||||
+ if ((xhci->xhc_state & XHCI_STATE_DYING) ||
|
||||
+ (xhci->xhc_state & XHCI_STATE_HALTED)) {
|
||||
xhci_dbg(xhci, "Ep 0x%x: URB %p to be canceled on "
|
||||
"non-responsive xHCI host.\n",
|
||||
urb->ep->desc.bEndpointAddress, urb);
|
||||
@@ -2667,7 +2672,10 @@ void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)
|
||||
int i, ret;
|
||||
|
||||
ret = xhci_check_args(hcd, udev, NULL, 0, true, __func__);
|
||||
- if (ret <= 0)
|
||||
+ /* If the host is halted due to driver unload, we still need to free the
|
||||
+ * device.
|
||||
+ */
|
||||
+ if (ret <= 0 && ret != -ENODEV)
|
||||
return;
|
||||
|
||||
virt_dev = xhci->devs[udev->slot_id];
|
||||
@@ -2681,7 +2689,8 @@ void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev)
|
||||
spin_lock_irqsave(&xhci->lock, flags);
|
||||
/* Don't disable the slot if the host controller is dead. */
|
||||
state = xhci_readl(xhci, &xhci->op_regs->status);
|
||||
- if (state == 0xffffffff || (xhci->xhc_state & XHCI_STATE_DYING)) {
|
||||
+ if (state == 0xffffffff || (xhci->xhc_state & XHCI_STATE_DYING) ||
|
||||
+ (xhci->xhc_state & XHCI_STATE_HALTED)) {
|
||||
xhci_free_virt_device(xhci, udev->slot_id);
|
||||
spin_unlock_irqrestore(&xhci->lock, flags);
|
||||
return;
|
||||
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
|
||||
index 6aeb363..548338c 100644
|
||||
--- a/drivers/usb/musb/musb_gadget.c
|
||||
+++ b/drivers/usb/musb/musb_gadget.c
|
||||
@@ -1698,6 +1698,8 @@ static int musb_gadget_pullup(struct usb_gadget *gadget, int is_on)
|
||||
|
||||
is_on = !!is_on;
|
||||
|
||||
+ pm_runtime_get_sync(musb->controller);
|
||||
+
|
||||
/* NOTE: this assumes we are sensing vbus; we'd rather
|
||||
* not pullup unless the B-session is active.
|
||||
*/
|
||||
@@ -1707,6 +1709,9 @@ static int musb_gadget_pullup(struct usb_gadget *gadget, int is_on)
|
||||
musb_pullup(musb, is_on);
|
||||
}
|
||||
spin_unlock_irqrestore(&musb->lock, flags);
|
||||
+
|
||||
+ pm_runtime_put(musb->controller);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
|
||||
index 2e06b90..9afb361 100644
|
||||
--- a/drivers/usb/serial/ftdi_sio.c
|
||||
+++ b/drivers/usb/serial/ftdi_sio.c
|
||||
@@ -1171,7 +1171,7 @@ static __u32 get_ftdi_divisor(struct tty_struct *tty,
|
||||
case FT2232H: /* FT2232H chip */
|
||||
case FT4232H: /* FT4232H chip */
|
||||
case FT232H: /* FT232H chip */
|
||||
- if ((baud <= 12000000) & (baud >= 1200)) {
|
||||
+ if ((baud <= 12000000) && (baud >= 1200)) {
|
||||
div_value = ftdi_2232h_baud_to_divisor(baud);
|
||||
} else if (baud < 1200) {
|
||||
div_value = ftdi_232bm_baud_to_divisor(baud);
|
||||
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
|
||||
index 60b25d8..8156561 100644
|
||||
--- a/drivers/usb/serial/option.c
|
||||
+++ b/drivers/usb/serial/option.c
|
||||
@@ -148,6 +148,10 @@ static void option_instat_callback(struct urb *urb);
|
||||
#define HUAWEI_PRODUCT_K4505 0x1464
|
||||
#define HUAWEI_PRODUCT_K3765 0x1465
|
||||
#define HUAWEI_PRODUCT_E14AC 0x14AC
|
||||
+#define HUAWEI_PRODUCT_K3770 0x14C9
|
||||
+#define HUAWEI_PRODUCT_K3771 0x14CA
|
||||
+#define HUAWEI_PRODUCT_K4510 0x14CB
|
||||
+#define HUAWEI_PRODUCT_K4511 0x14CC
|
||||
#define HUAWEI_PRODUCT_ETS1220 0x1803
|
||||
#define HUAWEI_PRODUCT_E353 0x1506
|
||||
|
||||
@@ -547,6 +551,14 @@ static const struct usb_device_id option_ids[] = {
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC, 0xff, 0xff, 0xff) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x31) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x32) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x31) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x32) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4510, 0xff, 0x01, 0x31) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4510, 0xff, 0x01, 0x32) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4511, 0xff, 0x01, 0x31) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4511, 0xff, 0x01, 0x32) },
|
||||
{ USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x01) },
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) },
|
||||
{ USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) },
|
||||
diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
|
||||
index 54a9dab..27f9ae4 100644
|
||||
--- a/drivers/usb/serial/qcserial.c
|
||||
+++ b/drivers/usb/serial/qcserial.c
|
||||
@@ -45,6 +45,7 @@ static const struct usb_device_id id_table[] = {
|
||||
{USB_DEVICE(0x05c6, 0x9203)}, /* Generic Gobi Modem device */
|
||||
{USB_DEVICE(0x05c6, 0x9222)}, /* Generic Gobi Modem device */
|
||||
{USB_DEVICE(0x05c6, 0x9008)}, /* Generic Gobi QDL device */
|
||||
+ {USB_DEVICE(0x05c6, 0x9009)}, /* Generic Gobi Modem device */
|
||||
{USB_DEVICE(0x05c6, 0x9201)}, /* Generic Gobi QDL device */
|
||||
{USB_DEVICE(0x05c6, 0x9221)}, /* Generic Gobi QDL device */
|
||||
{USB_DEVICE(0x05c6, 0x9231)}, /* Generic Gobi QDL device */
|
||||
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h
|
||||
index ccff348..3041a97 100644
|
||||
--- a/drivers/usb/storage/unusual_devs.h
|
||||
+++ b/drivers/usb/storage/unusual_devs.h
|
||||
@@ -1988,6 +1988,16 @@ UNUSUAL_DEV( 0x4146, 0xba01, 0x0100, 0x0100,
|
||||
"Micro Mini 1GB",
|
||||
USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NOT_LOCKABLE ),
|
||||
|
||||
+/*
|
||||
+ * Nick Bowler <nbowler@elliptictech.com>
|
||||
+ * SCSI stack spams (otherwise harmless) error messages.
|
||||
+ */
|
||||
+UNUSUAL_DEV( 0xc251, 0x4003, 0x0100, 0x0100,
|
||||
+ "Keil Software, Inc.",
|
||||
+ "V2M MotherBoard",
|
||||
+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
|
||||
+ US_FL_NOT_LOCKABLE),
|
||||
+
|
||||
/* Reported by Andrew Simmons <andrew.simmons@gmail.com> */
|
||||
UNUSUAL_DEV( 0xed06, 0x4500, 0x0001, 0x0001,
|
||||
"DataStor",
|
||||
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
|
||||
index 1d34d75..d3d451b 100644
|
||||
--- a/mm/vmalloc.c
|
||||
+++ b/mm/vmalloc.c
|
||||
@@ -732,9 +732,10 @@ static void free_unmap_vmap_area_addr(unsigned long addr)
|
||||
#define VMAP_BBMAP_BITS_MIN (VMAP_MAX_ALLOC*2)
|
||||
#define VMAP_MIN(x, y) ((x) < (y) ? (x) : (y)) /* can't use min() */
|
||||
#define VMAP_MAX(x, y) ((x) > (y) ? (x) : (y)) /* can't use max() */
|
||||
-#define VMAP_BBMAP_BITS VMAP_MIN(VMAP_BBMAP_BITS_MAX, \
|
||||
- VMAP_MAX(VMAP_BBMAP_BITS_MIN, \
|
||||
- VMALLOC_PAGES / NR_CPUS / 16))
|
||||
+#define VMAP_BBMAP_BITS \
|
||||
+ VMAP_MIN(VMAP_BBMAP_BITS_MAX, \
|
||||
+ VMAP_MAX(VMAP_BBMAP_BITS_MIN, \
|
||||
+ VMALLOC_PAGES / roundup_pow_of_two(NR_CPUS) / 16))
|
||||
|
||||
#define VMAP_BLOCK_SIZE (VMAP_BBMAP_BITS * PAGE_SIZE)
|
||||
|
||||
diff --git a/net/atm/br2684.c b/net/atm/br2684.c
|
||||
index 2252c20..52cfd0c 100644
|
||||
--- a/net/atm/br2684.c
|
||||
+++ b/net/atm/br2684.c
|
||||
@@ -242,8 +242,6 @@ static int br2684_xmit_vcc(struct sk_buff *skb, struct net_device *dev,
|
||||
if (brdev->payload == p_bridged) {
|
||||
skb_push(skb, 2);
|
||||
memset(skb->data, 0, 2);
|
||||
- } else { /* p_routed */
|
||||
- skb_pull(skb, ETH_HLEN);
|
||||
}
|
||||
}
|
||||
skb_debug(skb);
|
||||
diff --git a/sound/soc/samsung/jive_wm8750.c b/sound/soc/samsung/jive_wm8750.c
|
||||
index 3b53ad5..14eb6ea 100644
|
||||
--- a/sound/soc/samsung/jive_wm8750.c
|
||||
+++ b/sound/soc/samsung/jive_wm8750.c
|
||||
@@ -131,7 +131,7 @@ static struct snd_soc_dai_link jive_dai = {
|
||||
.cpu_dai_name = "s3c2412-i2s",
|
||||
.codec_dai_name = "wm8750-hifi",
|
||||
.platform_name = "samsung-audio",
|
||||
- .codec_name = "wm8750-codec.0-0x1a",
|
||||
+ .codec_name = "wm8750-codec.0-001a",
|
||||
.init = jive_wm8750_init,
|
||||
.ops = &jive_ops,
|
||||
};
|
||||
diff --git a/sound/soc/tegra/tegra_pcm.c b/sound/soc/tegra/tegra_pcm.c
|
||||
index 3c271f9..6201710 100644
|
||||
--- a/sound/soc/tegra/tegra_pcm.c
|
||||
+++ b/sound/soc/tegra/tegra_pcm.c
|
||||
@@ -309,9 +309,14 @@ static int tegra_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream)
|
||||
|
||||
static void tegra_pcm_deallocate_dma_buffer(struct snd_pcm *pcm, int stream)
|
||||
{
|
||||
- struct snd_pcm_substream *substream = pcm->streams[stream].substream;
|
||||
- struct snd_dma_buffer *buf = &substream->dma_buffer;
|
||||
+ struct snd_pcm_substream *substream;
|
||||
+ struct snd_dma_buffer *buf;
|
||||
+
|
||||
+ substream = pcm->streams[stream].substream;
|
||||
+ if (!substream)
|
||||
+ return;
|
||||
|
||||
+ buf = &substream->dma_buffer;
|
||||
if (!buf->area)
|
||||
return;
|
||||
|
||||
diff --git a/sound/soc/tegra/tegra_wm8903.c b/sound/soc/tegra/tegra_wm8903.c
|
||||
index 0d6738a..7766478 100644
|
||||
--- a/sound/soc/tegra/tegra_wm8903.c
|
||||
+++ b/sound/soc/tegra/tegra_wm8903.c
|
||||
@@ -56,6 +56,7 @@
|
||||
#define GPIO_HP_MUTE BIT(1)
|
||||
#define GPIO_INT_MIC_EN BIT(2)
|
||||
#define GPIO_EXT_MIC_EN BIT(3)
|
||||
+#define GPIO_HP_DET BIT(4)
|
||||
|
||||
struct tegra_wm8903 {
|
||||
struct tegra_asoc_utils_data util_data;
|
||||
@@ -304,6 +305,7 @@ static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd)
|
||||
snd_soc_jack_add_gpios(&tegra_wm8903_hp_jack,
|
||||
1,
|
||||
&tegra_wm8903_hp_jack_gpio);
|
||||
+ machine->gpio_requested |= GPIO_HP_DET;
|
||||
}
|
||||
|
||||
snd_soc_jack_new(codec, "Mic Jack", SND_JACK_MICROPHONE,
|
||||
@@ -429,10 +431,10 @@ static int __devexit tegra_wm8903_driver_remove(struct platform_device *pdev)
|
||||
struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card);
|
||||
struct tegra_wm8903_platform_data *pdata = machine->pdata;
|
||||
|
||||
- snd_soc_unregister_card(card);
|
||||
-
|
||||
- tegra_asoc_utils_fini(&machine->util_data);
|
||||
-
|
||||
+ if (machine->gpio_requested & GPIO_HP_DET)
|
||||
+ snd_soc_jack_free_gpios(&tegra_wm8903_hp_jack,
|
||||
+ 1,
|
||||
+ &tegra_wm8903_hp_jack_gpio);
|
||||
if (machine->gpio_requested & GPIO_EXT_MIC_EN)
|
||||
gpio_free(pdata->gpio_ext_mic_en);
|
||||
if (machine->gpio_requested & GPIO_INT_MIC_EN)
|
||||
@@ -441,6 +443,11 @@ static int __devexit tegra_wm8903_driver_remove(struct platform_device *pdev)
|
||||
gpio_free(pdata->gpio_hp_mute);
|
||||
if (machine->gpio_requested & GPIO_SPKR_EN)
|
||||
gpio_free(pdata->gpio_spkr_en);
|
||||
+ machine->gpio_requested = 0;
|
||||
+
|
||||
+ snd_soc_unregister_card(card);
|
||||
+
|
||||
+ tegra_asoc_utils_fini(&machine->util_data);
|
||||
|
||||
kfree(machine);
|
||||
|
||||
diff --git a/sound/usb/caiaq/audio.c b/sound/usb/caiaq/audio.c
|
||||
index d0d493c..aa52b3e 100644
|
||||
--- a/sound/usb/caiaq/audio.c
|
||||
+++ b/sound/usb/caiaq/audio.c
|
||||
@@ -614,6 +614,7 @@ static void read_completed(struct urb *urb)
|
||||
struct snd_usb_caiaqdev *dev;
|
||||
struct urb *out;
|
||||
int frame, len, send_it = 0, outframe = 0;
|
||||
+ size_t offset = 0;
|
||||
|
||||
if (urb->status || !info)
|
||||
return;
|
||||
@@ -634,7 +635,8 @@ static void read_completed(struct urb *urb)
|
||||
len = urb->iso_frame_desc[outframe].actual_length;
|
||||
out->iso_frame_desc[outframe].length = len;
|
||||
out->iso_frame_desc[outframe].actual_length = 0;
|
||||
- out->iso_frame_desc[outframe].offset = BYTES_PER_FRAME * frame;
|
||||
+ out->iso_frame_desc[outframe].offset = offset;
|
||||
+ offset += len;
|
||||
|
||||
if (len > 0) {
|
||||
spin_lock(&dev->spinlock);
|
||||
@@ -650,7 +652,7 @@ static void read_completed(struct urb *urb)
|
||||
}
|
||||
|
||||
if (send_it) {
|
||||
- out->number_of_packets = FRAMES_PER_URB;
|
||||
+ out->number_of_packets = outframe;
|
||||
out->transfer_flags = URB_ISO_ASAP;
|
||||
usb_submit_urb(out, GFP_ATOMIC);
|
||||
}
|
||||
diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
|
||||
index e02d78c..6c86eca 100644
|
||||
--- a/tools/perf/util/config.c
|
||||
+++ b/tools/perf/util/config.c
|
||||
@@ -399,7 +399,6 @@ static int perf_config_global(void)
|
||||
int perf_config(config_fn_t fn, void *data)
|
||||
{
|
||||
int ret = 0, found = 0;
|
||||
- char *repo_config = NULL;
|
||||
const char *home = NULL;
|
||||
|
||||
/* Setting $PERF_CONFIG makes perf read _only_ the given config file. */
|
||||
@@ -421,12 +420,6 @@ int perf_config(config_fn_t fn, void *data)
|
||||
free(user_config);
|
||||
}
|
||||
|
||||
- repo_config = perf_pathdup("config");
|
||||
- if (!access(repo_config, R_OK)) {
|
||||
- ret += perf_config_from_file(fn, repo_config, data);
|
||||
- found += 1;
|
||||
- }
|
||||
- free(repo_config);
|
||||
if (found == 0)
|
||||
return -1;
|
||||
return ret;
|
|
@ -0,0 +1,2 @@
|
|||
- bugfix/all/perf-do-not-look-at-.-config-for-configuration.patch
|
||||
+ bugfix/all/stable/3.0.3.patch
|
Loading…
Reference in New Issue