aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2012-03-20 14:59:50 -0400
committerFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2012-03-20 14:59:50 -0400
commit44e8ba93cf330f075178e31759100f367313790a (patch)
tree27956beb159bfb603d672b43cb207690a087dd0a /drivers
parente9fe8a714e450b26f76eaf8832f5b9fe24d00e79 (diff)
parentc16fa4f2ad19908a47c63d8fa436a1178438c7e7 (diff)
Merge commit 'v3.3' into fbdev-next
Diffstat (limited to 'drivers')
-rw-r--r--drivers/block/DAC960.c18
-rw-r--r--drivers/block/floppy.c2
-rw-r--r--drivers/block/sx8.c2
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_connector.c16
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_drv.c2
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_fbdev.c28
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_fimd.c17
-rw-r--r--drivers/gpu/drm/gma500/cdv_device.c2
-rw-r--r--drivers/gpu/drm/gma500/framebuffer.c1
-rw-r--r--drivers/gpu/drm/gma500/gtt.c9
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h2
-rw-r--r--drivers/gpu/drm/i915/intel_display.c1
-rw-r--r--drivers/gpu/drm/i915/intel_sprite.c6
-rw-r--r--drivers/gpu/drm/radeon/r600.c3
-rw-r--r--drivers/gpu/drm/radeon/r600_blit_shaders.c8
-rw-r--r--drivers/gpu/drm/radeon/r600d.h1
-rw-r--r--drivers/gpu/drm/radeon/radeon_connectors.c2
-rw-r--r--drivers/gpu/drm/radeon/radeon_display.c18
-rw-r--r--drivers/gpu/drm/radeon/radeon_encoders.c6
-rw-r--r--drivers/gpu/drm/radeon/radeon_fb.c11
-rw-r--r--drivers/gpu/drm/radeon/radeon_mode.h2
-rw-r--r--drivers/hid/hid-ids.h3
-rw-r--r--drivers/hid/hid-input.c9
-rw-r--r--drivers/hid/usbhid/hid-quirks.c1
-rw-r--r--drivers/hwmon/Kconfig5
-rw-r--r--drivers/hwmon/jc42.c30
-rw-r--r--drivers/hwmon/pmbus/pmbus_core.c3
-rw-r--r--drivers/hwmon/pmbus/zl6100.c20
-rw-r--r--drivers/hwmon/w83627ehf.c17
-rw-r--r--drivers/i2c/algos/i2c-algo-bit.c8
-rw-r--r--drivers/i2c/i2c-core.c12
-rw-r--r--drivers/input/evdev.c2
-rw-r--r--drivers/input/misc/twl4030-vibra.c6
-rw-r--r--drivers/input/mouse/alps.c7
-rw-r--r--drivers/input/tablet/Kconfig2
-rw-r--r--drivers/input/tablet/wacom_wac.c2
-rw-r--r--drivers/iommu/amd_iommu_init.c2
-rw-r--r--drivers/md/dm-flakey.c2
-rw-r--r--drivers/md/dm-io.c23
-rw-r--r--drivers/md/dm-ioctl.c2
-rw-r--r--drivers/md/dm-raid.c17
-rw-r--r--drivers/md/dm-thin-metadata.c25
-rw-r--r--drivers/md/raid1.c2
-rw-r--r--drivers/md/raid10.c38
-rw-r--r--drivers/media/dvb/siano/smsdvb.c127
-rw-r--r--drivers/media/video/davinci/isif.c1
-rw-r--r--drivers/media/video/uvc/uvc_video.c14
-rw-r--r--drivers/mfd/ab8500-core.c5
-rw-r--r--drivers/mfd/mfd-core.c2
-rw-r--r--drivers/mfd/s5m-core.c2
-rw-r--r--drivers/mfd/tps65910.c2
-rw-r--r--drivers/mfd/tps65912-core.c2
-rw-r--r--drivers/mfd/wm8350-irq.c1
-rw-r--r--drivers/mfd/wm8994-core.c14
-rw-r--r--drivers/mfd/wm8994-regmap.c1
-rw-r--r--drivers/misc/c2port/core.c4
-rw-r--r--drivers/mmc/core/core.c3
-rw-r--r--drivers/mmc/core/host.c4
-rw-r--r--drivers/mmc/core/mmc.c3
-rw-r--r--drivers/mmc/core/sd.c8
-rw-r--r--drivers/mmc/core/sdio.c8
-rw-r--r--drivers/mmc/host/atmel-mci.c21
-rw-r--r--drivers/mmc/host/mmci.c7
-rw-r--r--drivers/mmc/host/sdhci-esdhc-imx.c5
-rw-r--r--drivers/net/caif/caif_hsi.c2
-rw-r--r--drivers/net/ethernet/atheros/atl1c/atl1c_main.c2
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c2
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h12
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c8
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c51
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c2
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c12
-rw-r--r--drivers/net/ethernet/broadcom/tg3.c51
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c2
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c2
-rw-r--r--drivers/net/ethernet/cisco/enic/enic.h2
-rw-r--r--drivers/net/ethernet/cisco/enic/enic_main.c2
-rw-r--r--drivers/net/ethernet/ibm/ehea/ehea_main.c4
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/qp.c5
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/resource_tracker.c3
-rw-r--r--drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c15
-rw-r--r--drivers/net/ethernet/packetengines/Kconfig1
-rw-r--r--drivers/net/ethernet/qlogic/qla3xxx.c5
-rw-r--r--drivers/net/ethernet/realtek/r8169.c13
-rw-r--r--drivers/net/hyperv/netvsc_drv.c8
-rw-r--r--drivers/net/tun.c15
-rw-r--r--drivers/net/usb/asix.c4
-rw-r--r--drivers/net/usb/usbnet.c6
-rw-r--r--drivers/net/vmxnet3/vmxnet3_drv.c7
-rw-r--r--drivers/net/vmxnet3/vmxnet3_int.h4
-rw-r--r--drivers/net/wimax/i2400m/netdev.c30
-rw-r--r--drivers/net/wireless/ath/ath9k/ar5008_phy.c25
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9002_hw.c19
-rw-r--r--drivers/net/wireless/ath/ath9k/hw.h1
-rw-r--r--drivers/net/wireless/ath/carl9170/tx.c9
-rw-r--r--drivers/net/wireless/brcm80211/brcmsmac/ampdu.c12
-rw-r--r--drivers/net/wireless/iwlegacy/3945-mac.c2
-rw-r--r--drivers/net/wireless/iwlegacy/3945.c7
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-lib.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-sta.c10
-rw-r--r--drivers/net/wireless/mwifiex/cfg80211.c1
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00dev.c9
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00mac.c9
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00queue.c3
-rw-r--r--drivers/of/fdt.c1
-rw-r--r--drivers/of/of_mdio.c2
-rw-r--r--drivers/pci/pcie/aspm.c3
-rw-r--r--drivers/platform/x86/Kconfig24
-rw-r--r--drivers/platform/x86/Makefile2
-rw-r--r--drivers/platform/x86/acer-wmi.c30
-rw-r--r--drivers/platform/x86/amilo-rfkill.c173
-rw-r--r--drivers/platform/x86/fujitsu-tablet.c478
-rw-r--r--drivers/platform/x86/panasonic-laptop.c4
-rw-r--r--drivers/pps/pps.c4
-rw-r--r--drivers/rapidio/devices/tsi721.c5
-rw-r--r--drivers/rapidio/devices/tsi721.h30
-rw-r--r--drivers/regulator/da9052-regulator.c20
-rw-r--r--drivers/regulator/tps6524x-regulator.c2
-rw-r--r--drivers/regulator/tps65910-regulator.c2
-rw-r--r--drivers/rtc/rtc-r9701.c14
-rw-r--r--drivers/s390/cio/qdio_main.c4
-rw-r--r--drivers/scsi/sd_dif.c2
-rw-r--r--drivers/spi/spi-pl022.c2
-rw-r--r--drivers/target/iscsi/iscsi_target.c2
-rw-r--r--drivers/target/target_core_pr.c34
-rw-r--r--drivers/target/target_core_transport.c1
-rw-r--r--drivers/tty/Kconfig2
-rw-r--r--drivers/tty/serial/sh-sci.c5
-rw-r--r--drivers/usb/host/ehci-fsl.c11
-rw-r--r--drivers/usb/host/ehci-fsl.h1
-rw-r--r--drivers/video/backlight/s6e63m0.c2
131 files changed, 1427 insertions, 441 deletions
diff --git a/drivers/block/DAC960.c b/drivers/block/DAC960.c
index e086fbbbe853..8db9089127c5 100644
--- a/drivers/block/DAC960.c
+++ b/drivers/block/DAC960.c
@@ -1177,7 +1177,8 @@ static bool DAC960_V1_EnableMemoryMailboxInterface(DAC960_Controller_T
1177 int TimeoutCounter; 1177 int TimeoutCounter;
1178 int i; 1178 int i;
1179 1179
1180 1180 memset(&CommandMailbox, 0, sizeof(DAC960_V1_CommandMailbox_T));
1181
1181 if (pci_set_dma_mask(Controller->PCIDevice, DMA_BIT_MASK(32))) 1182 if (pci_set_dma_mask(Controller->PCIDevice, DMA_BIT_MASK(32)))
1182 return DAC960_Failure(Controller, "DMA mask out of range"); 1183 return DAC960_Failure(Controller, "DMA mask out of range");
1183 Controller->BounceBufferLimit = DMA_BIT_MASK(32); 1184 Controller->BounceBufferLimit = DMA_BIT_MASK(32);
@@ -4627,7 +4628,8 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
4627 DAC960_Controller_T *Controller = Command->Controller; 4628 DAC960_Controller_T *Controller = Command->Controller;
4628 DAC960_CommandType_T CommandType = Command->CommandType; 4629 DAC960_CommandType_T CommandType = Command->CommandType;
4629 DAC960_V2_CommandMailbox_T *CommandMailbox = &Command->V2.CommandMailbox; 4630 DAC960_V2_CommandMailbox_T *CommandMailbox = &Command->V2.CommandMailbox;
4630 DAC960_V2_IOCTL_Opcode_T CommandOpcode = CommandMailbox->Common.IOCTL_Opcode; 4631 DAC960_V2_IOCTL_Opcode_T IOCTLOpcode = CommandMailbox->Common.IOCTL_Opcode;
4632 DAC960_V2_CommandOpcode_T CommandOpcode = CommandMailbox->SCSI_10.CommandOpcode;
4631 DAC960_V2_CommandStatus_T CommandStatus = Command->V2.CommandStatus; 4633 DAC960_V2_CommandStatus_T CommandStatus = Command->V2.CommandStatus;
4632 4634
4633 if (CommandType == DAC960_ReadCommand || 4635 if (CommandType == DAC960_ReadCommand ||
@@ -4699,7 +4701,7 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
4699 { 4701 {
4700 if (Controller->ShutdownMonitoringTimer) 4702 if (Controller->ShutdownMonitoringTimer)
4701 return; 4703 return;
4702 if (CommandOpcode == DAC960_V2_GetControllerInfo) 4704 if (IOCTLOpcode == DAC960_V2_GetControllerInfo)
4703 { 4705 {
4704 DAC960_V2_ControllerInfo_T *NewControllerInfo = 4706 DAC960_V2_ControllerInfo_T *NewControllerInfo =
4705 Controller->V2.NewControllerInformation; 4707 Controller->V2.NewControllerInformation;
@@ -4719,14 +4721,14 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
4719 memcpy(ControllerInfo, NewControllerInfo, 4721 memcpy(ControllerInfo, NewControllerInfo,
4720 sizeof(DAC960_V2_ControllerInfo_T)); 4722 sizeof(DAC960_V2_ControllerInfo_T));
4721 } 4723 }
4722 else if (CommandOpcode == DAC960_V2_GetEvent) 4724 else if (IOCTLOpcode == DAC960_V2_GetEvent)
4723 { 4725 {
4724 if (CommandStatus == DAC960_V2_NormalCompletion) { 4726 if (CommandStatus == DAC960_V2_NormalCompletion) {
4725 DAC960_V2_ReportEvent(Controller, Controller->V2.Event); 4727 DAC960_V2_ReportEvent(Controller, Controller->V2.Event);
4726 } 4728 }
4727 Controller->V2.NextEventSequenceNumber++; 4729 Controller->V2.NextEventSequenceNumber++;
4728 } 4730 }
4729 else if (CommandOpcode == DAC960_V2_GetPhysicalDeviceInfoValid && 4731 else if (IOCTLOpcode == DAC960_V2_GetPhysicalDeviceInfoValid &&
4730 CommandStatus == DAC960_V2_NormalCompletion) 4732 CommandStatus == DAC960_V2_NormalCompletion)
4731 { 4733 {
4732 DAC960_V2_PhysicalDeviceInfo_T *NewPhysicalDeviceInfo = 4734 DAC960_V2_PhysicalDeviceInfo_T *NewPhysicalDeviceInfo =
@@ -4915,7 +4917,7 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
4915 NewPhysicalDeviceInfo->LogicalUnit++; 4917 NewPhysicalDeviceInfo->LogicalUnit++;
4916 Controller->V2.PhysicalDeviceIndex++; 4918 Controller->V2.PhysicalDeviceIndex++;
4917 } 4919 }
4918 else if (CommandOpcode == DAC960_V2_GetPhysicalDeviceInfoValid) 4920 else if (IOCTLOpcode == DAC960_V2_GetPhysicalDeviceInfoValid)
4919 { 4921 {
4920 unsigned int DeviceIndex; 4922 unsigned int DeviceIndex;
4921 for (DeviceIndex = Controller->V2.PhysicalDeviceIndex; 4923 for (DeviceIndex = Controller->V2.PhysicalDeviceIndex;
@@ -4938,7 +4940,7 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
4938 } 4940 }
4939 Controller->V2.NeedPhysicalDeviceInformation = false; 4941 Controller->V2.NeedPhysicalDeviceInformation = false;
4940 } 4942 }
4941 else if (CommandOpcode == DAC960_V2_GetLogicalDeviceInfoValid && 4943 else if (IOCTLOpcode == DAC960_V2_GetLogicalDeviceInfoValid &&
4942 CommandStatus == DAC960_V2_NormalCompletion) 4944 CommandStatus == DAC960_V2_NormalCompletion)
4943 { 4945 {
4944 DAC960_V2_LogicalDeviceInfo_T *NewLogicalDeviceInfo = 4946 DAC960_V2_LogicalDeviceInfo_T *NewLogicalDeviceInfo =
@@ -5065,7 +5067,7 @@ static void DAC960_V2_ProcessCompletedCommand(DAC960_Command_T *Command)
5065 [LogicalDeviceNumber] = true; 5067 [LogicalDeviceNumber] = true;
5066 NewLogicalDeviceInfo->LogicalDeviceNumber++; 5068 NewLogicalDeviceInfo->LogicalDeviceNumber++;
5067 } 5069 }
5068 else if (CommandOpcode == DAC960_V2_GetLogicalDeviceInfoValid) 5070 else if (IOCTLOpcode == DAC960_V2_GetLogicalDeviceInfoValid)
5069 { 5071 {
5070 int LogicalDriveNumber; 5072 int LogicalDriveNumber;
5071 for (LogicalDriveNumber = 0; 5073 for (LogicalDriveNumber = 0;
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 9baf11e86362..744f078f4dd8 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -3832,7 +3832,7 @@ static int __floppy_read_block_0(struct block_device *bdev)
3832 bio.bi_size = size; 3832 bio.bi_size = size;
3833 bio.bi_bdev = bdev; 3833 bio.bi_bdev = bdev;
3834 bio.bi_sector = 0; 3834 bio.bi_sector = 0;
3835 bio.bi_flags = BIO_QUIET; 3835 bio.bi_flags = (1 << BIO_QUIET);
3836 init_completion(&complete); 3836 init_completion(&complete);
3837 bio.bi_private = &complete; 3837 bio.bi_private = &complete;
3838 bio.bi_end_io = floppy_rb0_complete; 3838 bio.bi_end_io = floppy_rb0_complete;
diff --git a/drivers/block/sx8.c b/drivers/block/sx8.c
index e7472f567c9d..3fb6ab4c8b4e 100644
--- a/drivers/block/sx8.c
+++ b/drivers/block/sx8.c
@@ -1120,7 +1120,7 @@ static inline void carm_handle_resp(struct carm_host *host,
1120 break; 1120 break;
1121 case MISC_GET_FW_VER: { 1121 case MISC_GET_FW_VER: {
1122 struct carm_fw_ver *ver = (struct carm_fw_ver *) 1122 struct carm_fw_ver *ver = (struct carm_fw_ver *)
1123 mem + sizeof(struct carm_msg_get_fw_ver); 1123 (mem + sizeof(struct carm_msg_get_fw_ver));
1124 if (!error) { 1124 if (!error) {
1125 host->fw_ver = le32_to_cpu(ver->version); 1125 host->fw_ver = le32_to_cpu(ver->version);
1126 host->flags |= (ver->features & FL_FW_VER_MASK); 1126 host->flags |= (ver->features & FL_FW_VER_MASK);
diff --git a/drivers/gpu/drm/exynos/exynos_drm_connector.c b/drivers/gpu/drm/exynos/exynos_drm_connector.c
index 618bd4d87d28..99d5527b2ca6 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_connector.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_connector.c
@@ -54,14 +54,14 @@ convert_to_display_mode(struct drm_display_mode *mode,
54 mode->vrefresh = timing->refresh; 54 mode->vrefresh = timing->refresh;
55 55
56 mode->hdisplay = timing->xres; 56 mode->hdisplay = timing->xres;
57 mode->hsync_start = mode->hdisplay + timing->left_margin; 57 mode->hsync_start = mode->hdisplay + timing->right_margin;
58 mode->hsync_end = mode->hsync_start + timing->hsync_len; 58 mode->hsync_end = mode->hsync_start + timing->hsync_len;
59 mode->htotal = mode->hsync_end + timing->right_margin; 59 mode->htotal = mode->hsync_end + timing->left_margin;
60 60
61 mode->vdisplay = timing->yres; 61 mode->vdisplay = timing->yres;
62 mode->vsync_start = mode->vdisplay + timing->upper_margin; 62 mode->vsync_start = mode->vdisplay + timing->lower_margin;
63 mode->vsync_end = mode->vsync_start + timing->vsync_len; 63 mode->vsync_end = mode->vsync_start + timing->vsync_len;
64 mode->vtotal = mode->vsync_end + timing->lower_margin; 64 mode->vtotal = mode->vsync_end + timing->upper_margin;
65 mode->width_mm = panel->width_mm; 65 mode->width_mm = panel->width_mm;
66 mode->height_mm = panel->height_mm; 66 mode->height_mm = panel->height_mm;
67 67
@@ -85,14 +85,14 @@ convert_to_video_timing(struct fb_videomode *timing,
85 timing->refresh = drm_mode_vrefresh(mode); 85 timing->refresh = drm_mode_vrefresh(mode);
86 86
87 timing->xres = mode->hdisplay; 87 timing->xres = mode->hdisplay;
88 timing->left_margin = mode->hsync_start - mode->hdisplay; 88 timing->right_margin = mode->hsync_start - mode->hdisplay;
89 timing->hsync_len = mode->hsync_end - mode->hsync_start; 89 timing->hsync_len = mode->hsync_end - mode->hsync_start;
90 timing->right_margin = mode->htotal - mode->hsync_end; 90 timing->left_margin = mode->htotal - mode->hsync_end;
91 91
92 timing->yres = mode->vdisplay; 92 timing->yres = mode->vdisplay;
93 timing->upper_margin = mode->vsync_start - mode->vdisplay; 93 timing->lower_margin = mode->vsync_start - mode->vdisplay;
94 timing->vsync_len = mode->vsync_end - mode->vsync_start; 94 timing->vsync_len = mode->vsync_end - mode->vsync_start;
95 timing->lower_margin = mode->vtotal - mode->vsync_end; 95 timing->upper_margin = mode->vtotal - mode->vsync_end;
96 96
97 if (mode->flags & DRM_MODE_FLAG_INTERLACE) 97 if (mode->flags & DRM_MODE_FLAG_INTERLACE)
98 timing->vmode = FB_VMODE_INTERLACED; 98 timing->vmode = FB_VMODE_INTERLACED;
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 58820ebd3558..09cc13f791b3 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -246,7 +246,7 @@ static struct platform_driver exynos_drm_platform_driver = {
246 .remove = __devexit_p(exynos_drm_platform_remove), 246 .remove = __devexit_p(exynos_drm_platform_remove),
247 .driver = { 247 .driver = {
248 .owner = THIS_MODULE, 248 .owner = THIS_MODULE,
249 .name = DRIVER_NAME, 249 .name = "exynos-drm",
250 }, 250 },
251}; 251};
252 252
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
index 3508700e529b..54f8f074822f 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c
@@ -46,39 +46,13 @@ struct exynos_drm_fbdev {
46 struct exynos_drm_gem_obj *exynos_gem_obj; 46 struct exynos_drm_gem_obj *exynos_gem_obj;
47}; 47};
48 48
49static int exynos_drm_fbdev_set_par(struct fb_info *info)
50{
51 struct fb_var_screeninfo *var = &info->var;
52
53 switch (var->bits_per_pixel) {
54 case 32:
55 case 24:
56 case 18:
57 case 16:
58 case 12:
59 info->fix.visual = FB_VISUAL_TRUECOLOR;
60 break;
61 case 1:
62 info->fix.visual = FB_VISUAL_MONO01;
63 break;
64 default:
65 info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
66 break;
67 }
68
69 info->fix.line_length = (var->xres_virtual * var->bits_per_pixel) / 8;
70
71 return drm_fb_helper_set_par(info);
72}
73
74
75static struct fb_ops exynos_drm_fb_ops = { 49static struct fb_ops exynos_drm_fb_ops = {
76 .owner = THIS_MODULE, 50 .owner = THIS_MODULE,
77 .fb_fillrect = cfb_fillrect, 51 .fb_fillrect = cfb_fillrect,
78 .fb_copyarea = cfb_copyarea, 52 .fb_copyarea = cfb_copyarea,
79 .fb_imageblit = cfb_imageblit, 53 .fb_imageblit = cfb_imageblit,
80 .fb_check_var = drm_fb_helper_check_var, 54 .fb_check_var = drm_fb_helper_check_var,
81 .fb_set_par = exynos_drm_fbdev_set_par, 55 .fb_set_par = drm_fb_helper_set_par,
82 .fb_blank = drm_fb_helper_blank, 56 .fb_blank = drm_fb_helper_blank,
83 .fb_pan_display = drm_fb_helper_pan_display, 57 .fb_pan_display = drm_fb_helper_pan_display,
84 .fb_setcmap = drm_fb_helper_setcmap, 58 .fb_setcmap = drm_fb_helper_setcmap,
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index 360adf2bba04..56458eea0501 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -817,8 +817,6 @@ static int __devinit fimd_probe(struct platform_device *pdev)
817 goto err_clk_get; 817 goto err_clk_get;
818 } 818 }
819 819
820 clk_enable(ctx->bus_clk);
821
822 ctx->lcd_clk = clk_get(dev, "sclk_fimd"); 820 ctx->lcd_clk = clk_get(dev, "sclk_fimd");
823 if (IS_ERR(ctx->lcd_clk)) { 821 if (IS_ERR(ctx->lcd_clk)) {
824 dev_err(dev, "failed to get lcd clock\n"); 822 dev_err(dev, "failed to get lcd clock\n");
@@ -826,8 +824,6 @@ static int __devinit fimd_probe(struct platform_device *pdev)
826 goto err_bus_clk; 824 goto err_bus_clk;
827 } 825 }
828 826
829 clk_enable(ctx->lcd_clk);
830
831 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 827 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
832 if (!res) { 828 if (!res) {
833 dev_err(dev, "failed to find registers\n"); 829 dev_err(dev, "failed to find registers\n");
@@ -864,17 +860,11 @@ static int __devinit fimd_probe(struct platform_device *pdev)
864 goto err_req_irq; 860 goto err_req_irq;
865 } 861 }
866 862
867 ctx->clkdiv = fimd_calc_clkdiv(ctx, &panel->timing);
868 ctx->vidcon0 = pdata->vidcon0; 863 ctx->vidcon0 = pdata->vidcon0;
869 ctx->vidcon1 = pdata->vidcon1; 864 ctx->vidcon1 = pdata->vidcon1;
870 ctx->default_win = pdata->default_win; 865 ctx->default_win = pdata->default_win;
871 ctx->panel = panel; 866 ctx->panel = panel;
872 867
873 panel->timing.pixclock = clk_get_rate(ctx->lcd_clk) / ctx->clkdiv;
874
875 DRM_DEBUG_KMS("pixel clock = %d, clkdiv = %d\n",
876 panel->timing.pixclock, ctx->clkdiv);
877
878 subdrv = &ctx->subdrv; 868 subdrv = &ctx->subdrv;
879 869
880 subdrv->probe = fimd_subdrv_probe; 870 subdrv->probe = fimd_subdrv_probe;
@@ -889,10 +879,15 @@ static int __devinit fimd_probe(struct platform_device *pdev)
889 879
890 platform_set_drvdata(pdev, ctx); 880 platform_set_drvdata(pdev, ctx);
891 881
892 pm_runtime_set_active(dev);
893 pm_runtime_enable(dev); 882 pm_runtime_enable(dev);
894 pm_runtime_get_sync(dev); 883 pm_runtime_get_sync(dev);
895 884
885 ctx->clkdiv = fimd_calc_clkdiv(ctx, &panel->timing);
886 panel->timing.pixclock = clk_get_rate(ctx->lcd_clk) / ctx->clkdiv;
887
888 DRM_DEBUG_KMS("pixel clock = %d, clkdiv = %d\n",
889 panel->timing.pixclock, ctx->clkdiv);
890
896 for (win = 0; win < WINDOWS_NR; win++) 891 for (win = 0; win < WINDOWS_NR; win++)
897 fimd_clear_win(ctx, win); 892 fimd_clear_win(ctx, win);
898 893
diff --git a/drivers/gpu/drm/gma500/cdv_device.c b/drivers/gpu/drm/gma500/cdv_device.c
index 4a5b099c3bc5..53404af2e748 100644
--- a/drivers/gpu/drm/gma500/cdv_device.c
+++ b/drivers/gpu/drm/gma500/cdv_device.c
@@ -321,6 +321,8 @@ static int cdv_chip_setup(struct drm_device *dev)
321 cdv_get_core_freq(dev); 321 cdv_get_core_freq(dev);
322 gma_intel_opregion_init(dev); 322 gma_intel_opregion_init(dev);
323 psb_intel_init_bios(dev); 323 psb_intel_init_bios(dev);
324 REG_WRITE(PORT_HOTPLUG_EN, 0);
325 REG_WRITE(PORT_HOTPLUG_STAT, REG_READ(PORT_HOTPLUG_STAT));
324 return 0; 326 return 0;
325} 327}
326 328
diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
index 830dfdd6bf15..be616735ec91 100644
--- a/drivers/gpu/drm/gma500/framebuffer.c
+++ b/drivers/gpu/drm/gma500/framebuffer.c
@@ -247,7 +247,6 @@ static struct fb_ops psbfb_roll_ops = {
247 .fb_imageblit = cfb_imageblit, 247 .fb_imageblit = cfb_imageblit,
248 .fb_pan_display = psbfb_pan, 248 .fb_pan_display = psbfb_pan,
249 .fb_mmap = psbfb_mmap, 249 .fb_mmap = psbfb_mmap,
250 .fb_sync = psbfb_sync,
251 .fb_ioctl = psbfb_ioctl, 250 .fb_ioctl = psbfb_ioctl,
252}; 251};
253 252
diff --git a/drivers/gpu/drm/gma500/gtt.c b/drivers/gpu/drm/gma500/gtt.c
index 5d5330f667f1..aff194fbe9f3 100644
--- a/drivers/gpu/drm/gma500/gtt.c
+++ b/drivers/gpu/drm/gma500/gtt.c
@@ -446,10 +446,9 @@ int psb_gtt_init(struct drm_device *dev, int resume)
446 pg->gtt_start = pci_resource_start(dev->pdev, PSB_GTT_RESOURCE); 446 pg->gtt_start = pci_resource_start(dev->pdev, PSB_GTT_RESOURCE);
447 gtt_pages = pci_resource_len(dev->pdev, PSB_GTT_RESOURCE) 447 gtt_pages = pci_resource_len(dev->pdev, PSB_GTT_RESOURCE)
448 >> PAGE_SHIFT; 448 >> PAGE_SHIFT;
449 /* Some CDV firmware doesn't report this currently. In which case the 449 /* CDV doesn't report this. In which case the system has 64 gtt pages */
450 system has 64 gtt pages */
451 if (pg->gtt_start == 0 || gtt_pages == 0) { 450 if (pg->gtt_start == 0 || gtt_pages == 0) {
452 dev_err(dev->dev, "GTT PCI BAR not initialized.\n"); 451 dev_dbg(dev->dev, "GTT PCI BAR not initialized.\n");
453 gtt_pages = 64; 452 gtt_pages = 64;
454 pg->gtt_start = dev_priv->pge_ctl; 453 pg->gtt_start = dev_priv->pge_ctl;
455 } 454 }
@@ -461,10 +460,10 @@ int psb_gtt_init(struct drm_device *dev, int resume)
461 460
462 if (pg->gatt_pages == 0 || pg->gatt_start == 0) { 461 if (pg->gatt_pages == 0 || pg->gatt_start == 0) {
463 static struct resource fudge; /* Preferably peppermint */ 462 static struct resource fudge; /* Preferably peppermint */
464 /* This can occur on CDV SDV systems. Fudge it in this case. 463 /* This can occur on CDV systems. Fudge it in this case.
465 We really don't care what imaginary space is being allocated 464 We really don't care what imaginary space is being allocated
466 at this point */ 465 at this point */
467 dev_err(dev->dev, "GATT PCI BAR not initialized.\n"); 466 dev_dbg(dev->dev, "GATT PCI BAR not initialized.\n");
468 pg->gatt_start = 0x40000000; 467 pg->gatt_start = 0x40000000;
469 pg->gatt_pages = (128 * 1024 * 1024) >> PAGE_SHIFT; 468 pg->gatt_pages = (128 * 1024 * 1024) >> PAGE_SHIFT;
470 /* This is a little confusing but in fact the GTT is providing 469 /* This is a little confusing but in fact the GTT is providing
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 03c53fcf8653..558ac716a328 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -2689,7 +2689,7 @@
2689#define DVS_FORMAT_RGBX888 (2<<25) 2689#define DVS_FORMAT_RGBX888 (2<<25)
2690#define DVS_FORMAT_RGBX161616 (3<<25) 2690#define DVS_FORMAT_RGBX161616 (3<<25)
2691#define DVS_SOURCE_KEY (1<<22) 2691#define DVS_SOURCE_KEY (1<<22)
2692#define DVS_RGB_ORDER_RGBX (1<<20) 2692#define DVS_RGB_ORDER_XBGR (1<<20)
2693#define DVS_YUV_BYTE_ORDER_MASK (3<<16) 2693#define DVS_YUV_BYTE_ORDER_MASK (3<<16)
2694#define DVS_YUV_ORDER_YUYV (0<<16) 2694#define DVS_YUV_ORDER_YUYV (0<<16)
2695#define DVS_YUV_ORDER_UYVY (1<<16) 2695#define DVS_YUV_ORDER_UYVY (1<<16)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index f851db7be2cc..397087cf689e 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -7828,6 +7828,7 @@ int intel_framebuffer_init(struct drm_device *dev,
7828 case DRM_FORMAT_RGB332: 7828 case DRM_FORMAT_RGB332:
7829 case DRM_FORMAT_RGB565: 7829 case DRM_FORMAT_RGB565:
7830 case DRM_FORMAT_XRGB8888: 7830 case DRM_FORMAT_XRGB8888:
7831 case DRM_FORMAT_XBGR8888:
7831 case DRM_FORMAT_ARGB8888: 7832 case DRM_FORMAT_ARGB8888:
7832 case DRM_FORMAT_XRGB2101010: 7833 case DRM_FORMAT_XRGB2101010:
7833 case DRM_FORMAT_ARGB2101010: 7834 case DRM_FORMAT_ARGB2101010:
diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c
index 2288abf88cce..a0835040c86b 100644
--- a/drivers/gpu/drm/i915/intel_sprite.c
+++ b/drivers/gpu/drm/i915/intel_sprite.c
@@ -225,16 +225,16 @@ snb_update_plane(struct drm_plane *plane, struct drm_framebuffer *fb,
225 225
226 /* Mask out pixel format bits in case we change it */ 226 /* Mask out pixel format bits in case we change it */
227 dvscntr &= ~DVS_PIXFORMAT_MASK; 227 dvscntr &= ~DVS_PIXFORMAT_MASK;
228 dvscntr &= ~DVS_RGB_ORDER_RGBX; 228 dvscntr &= ~DVS_RGB_ORDER_XBGR;
229 dvscntr &= ~DVS_YUV_BYTE_ORDER_MASK; 229 dvscntr &= ~DVS_YUV_BYTE_ORDER_MASK;
230 230
231 switch (fb->pixel_format) { 231 switch (fb->pixel_format) {
232 case DRM_FORMAT_XBGR8888: 232 case DRM_FORMAT_XBGR8888:
233 dvscntr |= DVS_FORMAT_RGBX888; 233 dvscntr |= DVS_FORMAT_RGBX888 | DVS_RGB_ORDER_XBGR;
234 pixel_size = 4; 234 pixel_size = 4;
235 break; 235 break;
236 case DRM_FORMAT_XRGB8888: 236 case DRM_FORMAT_XRGB8888:
237 dvscntr |= DVS_FORMAT_RGBX888 | DVS_RGB_ORDER_RGBX; 237 dvscntr |= DVS_FORMAT_RGBX888;
238 pixel_size = 4; 238 pixel_size = 4;
239 break; 239 break;
240 case DRM_FORMAT_YUYV: 240 case DRM_FORMAT_YUYV:
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index fbcd84803b60..17ca72ce3027 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -2362,6 +2362,9 @@ void r600_semaphore_ring_emit(struct radeon_device *rdev,
2362 uint64_t addr = semaphore->gpu_addr; 2362 uint64_t addr = semaphore->gpu_addr;
2363 unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL; 2363 unsigned sel = emit_wait ? PACKET3_SEM_SEL_WAIT : PACKET3_SEM_SEL_SIGNAL;
2364 2364
2365 if (rdev->family < CHIP_CAYMAN)
2366 sel |= PACKET3_SEM_WAIT_ON_SIGNAL;
2367
2365 radeon_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 1)); 2368 radeon_ring_write(ring, PACKET3(PACKET3_MEM_SEMAPHORE, 1));
2366 radeon_ring_write(ring, addr & 0xffffffff); 2369 radeon_ring_write(ring, addr & 0xffffffff);
2367 radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | sel); 2370 radeon_ring_write(ring, (upper_32_bits(addr) & 0xff) | sel);
diff --git a/drivers/gpu/drm/radeon/r600_blit_shaders.c b/drivers/gpu/drm/radeon/r600_blit_shaders.c
index 2d1f6c5ee2a7..73e2c7c6edbc 100644
--- a/drivers/gpu/drm/radeon/r600_blit_shaders.c
+++ b/drivers/gpu/drm/radeon/r600_blit_shaders.c
@@ -314,6 +314,10 @@ const u32 r6xx_default_state[] =
314 0x00000000, /* VGT_VTX_CNT_EN */ 314 0x00000000, /* VGT_VTX_CNT_EN */
315 315
316 0xc0016900, 316 0xc0016900,
317 0x000000d4,
318 0x00000000, /* SX_MISC */
319
320 0xc0016900,
317 0x000002c8, 321 0x000002c8,
318 0x00000000, /* VGT_STRMOUT_BUFFER_EN */ 322 0x00000000, /* VGT_STRMOUT_BUFFER_EN */
319 323
@@ -626,6 +630,10 @@ const u32 r7xx_default_state[] =
626 0x00000000, /* VGT_VTX_CNT_EN */ 630 0x00000000, /* VGT_VTX_CNT_EN */
627 631
628 0xc0016900, 632 0xc0016900,
633 0x000000d4,
634 0x00000000, /* SX_MISC */
635
636 0xc0016900,
629 0x000002c8, 637 0x000002c8,
630 0x00000000, /* VGT_STRMOUT_BUFFER_EN */ 638 0x00000000, /* VGT_STRMOUT_BUFFER_EN */
631 639
diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h
index 3ee1fd7ef394..9b23670716f1 100644
--- a/drivers/gpu/drm/radeon/r600d.h
+++ b/drivers/gpu/drm/radeon/r600d.h
@@ -831,6 +831,7 @@
831#define PACKET3_STRMOUT_BUFFER_UPDATE 0x34 831#define PACKET3_STRMOUT_BUFFER_UPDATE 0x34
832#define PACKET3_INDIRECT_BUFFER_MP 0x38 832#define PACKET3_INDIRECT_BUFFER_MP 0x38
833#define PACKET3_MEM_SEMAPHORE 0x39 833#define PACKET3_MEM_SEMAPHORE 0x39
834# define PACKET3_SEM_WAIT_ON_SIGNAL (0x1 << 12)
834# define PACKET3_SEM_SEL_SIGNAL (0x6 << 29) 835# define PACKET3_SEM_SEL_SIGNAL (0x6 << 29)
835# define PACKET3_SEM_SEL_WAIT (0x7 << 29) 836# define PACKET3_SEM_SEL_WAIT (0x7 << 29)
836#define PACKET3_MPEG_INDEX 0x3A 837#define PACKET3_MPEG_INDEX 0x3A
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
index 8b3d8ed52ff6..8c9a8115b632 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -1057,7 +1057,7 @@ static int radeon_dvi_mode_valid(struct drm_connector *connector,
1057 (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B)) 1057 (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
1058 return MODE_OK; 1058 return MODE_OK;
1059 else if (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_A) { 1059 else if (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_A) {
1060 if (ASIC_IS_DCE3(rdev)) { 1060 if (0) {
1061 /* HDMI 1.3+ supports max clock of 340 Mhz */ 1061 /* HDMI 1.3+ supports max clock of 340 Mhz */
1062 if (mode->clock > 340000) 1062 if (mode->clock > 340000)
1063 return MODE_CLOCK_HIGH; 1063 return MODE_CLOCK_HIGH;
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index 8c49fef1ce78..3d314338d843 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -1078,15 +1078,21 @@ static const struct drm_framebuffer_funcs radeon_fb_funcs = {
1078 .create_handle = radeon_user_framebuffer_create_handle, 1078 .create_handle = radeon_user_framebuffer_create_handle,
1079}; 1079};
1080 1080
1081void 1081int
1082radeon_framebuffer_init(struct drm_device *dev, 1082radeon_framebuffer_init(struct drm_device *dev,
1083 struct radeon_framebuffer *rfb, 1083 struct radeon_framebuffer *rfb,
1084 struct drm_mode_fb_cmd2 *mode_cmd, 1084 struct drm_mode_fb_cmd2 *mode_cmd,
1085 struct drm_gem_object *obj) 1085 struct drm_gem_object *obj)
1086{ 1086{
1087 int ret;
1087 rfb->obj = obj; 1088 rfb->obj = obj;
1088 drm_framebuffer_init(dev, &rfb->base, &radeon_fb_funcs); 1089 ret = drm_framebuffer_init(dev, &rfb->base, &radeon_fb_funcs);
1090 if (ret) {
1091 rfb->obj = NULL;
1092 return ret;
1093 }
1089 drm_helper_mode_fill_fb_struct(&rfb->base, mode_cmd); 1094 drm_helper_mode_fill_fb_struct(&rfb->base, mode_cmd);
1095 return 0;
1090} 1096}
1091 1097
1092static struct drm_framebuffer * 1098static struct drm_framebuffer *
@@ -1096,6 +1102,7 @@ radeon_user_framebuffer_create(struct drm_device *dev,
1096{ 1102{
1097 struct drm_gem_object *obj; 1103 struct drm_gem_object *obj;
1098 struct radeon_framebuffer *radeon_fb; 1104 struct radeon_framebuffer *radeon_fb;
1105 int ret;
1099 1106
1100 obj = drm_gem_object_lookup(dev, file_priv, mode_cmd->handles[0]); 1107 obj = drm_gem_object_lookup(dev, file_priv, mode_cmd->handles[0]);
1101 if (obj == NULL) { 1108 if (obj == NULL) {
@@ -1108,7 +1115,12 @@ radeon_user_framebuffer_create(struct drm_device *dev,
1108 if (radeon_fb == NULL) 1115 if (radeon_fb == NULL)
1109 return ERR_PTR(-ENOMEM); 1116 return ERR_PTR(-ENOMEM);
1110 1117
1111 radeon_framebuffer_init(dev, radeon_fb, mode_cmd, obj); 1118 ret = radeon_framebuffer_init(dev, radeon_fb, mode_cmd, obj);
1119 if (ret) {
1120 kfree(radeon_fb);
1121 drm_gem_object_unreference_unlocked(obj);
1122 return NULL;
1123 }
1112 1124
1113 return &radeon_fb->base; 1125 return &radeon_fb->base;
1114} 1126}
diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
index 9419c51bcf50..26e92708d114 100644
--- a/drivers/gpu/drm/radeon/radeon_encoders.c
+++ b/drivers/gpu/drm/radeon/radeon_encoders.c
@@ -307,8 +307,6 @@ void radeon_panel_mode_fixup(struct drm_encoder *encoder,
307bool radeon_dig_monitor_is_duallink(struct drm_encoder *encoder, 307bool radeon_dig_monitor_is_duallink(struct drm_encoder *encoder,
308 u32 pixel_clock) 308 u32 pixel_clock)
309{ 309{
310 struct drm_device *dev = encoder->dev;
311 struct radeon_device *rdev = dev->dev_private;
312 struct drm_connector *connector; 310 struct drm_connector *connector;
313 struct radeon_connector *radeon_connector; 311 struct radeon_connector *radeon_connector;
314 struct radeon_connector_atom_dig *dig_connector; 312 struct radeon_connector_atom_dig *dig_connector;
@@ -326,7 +324,7 @@ bool radeon_dig_monitor_is_duallink(struct drm_encoder *encoder,
326 case DRM_MODE_CONNECTOR_HDMIB: 324 case DRM_MODE_CONNECTOR_HDMIB:
327 if (radeon_connector->use_digital) { 325 if (radeon_connector->use_digital) {
328 /* HDMI 1.3 supports up to 340 Mhz over single link */ 326 /* HDMI 1.3 supports up to 340 Mhz over single link */
329 if (ASIC_IS_DCE3(rdev) && drm_detect_hdmi_monitor(radeon_connector->edid)) { 327 if (0 && drm_detect_hdmi_monitor(radeon_connector->edid)) {
330 if (pixel_clock > 340000) 328 if (pixel_clock > 340000)
331 return true; 329 return true;
332 else 330 else
@@ -348,7 +346,7 @@ bool radeon_dig_monitor_is_duallink(struct drm_encoder *encoder,
348 return false; 346 return false;
349 else { 347 else {
350 /* HDMI 1.3 supports up to 340 Mhz over single link */ 348 /* HDMI 1.3 supports up to 340 Mhz over single link */
351 if (ASIC_IS_DCE3(rdev) && drm_detect_hdmi_monitor(radeon_connector->edid)) { 349 if (0 && drm_detect_hdmi_monitor(radeon_connector->edid)) {
352 if (pixel_clock > 340000) 350 if (pixel_clock > 340000)
353 return true; 351 return true;
354 else 352 else
diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
index cf2bf35b56b8..195471cf65d3 100644
--- a/drivers/gpu/drm/radeon/radeon_fb.c
+++ b/drivers/gpu/drm/radeon/radeon_fb.c
@@ -209,6 +209,11 @@ static int radeonfb_create(struct radeon_fbdev *rfbdev,
209 sizes->surface_depth); 209 sizes->surface_depth);
210 210
211 ret = radeonfb_create_pinned_object(rfbdev, &mode_cmd, &gobj); 211 ret = radeonfb_create_pinned_object(rfbdev, &mode_cmd, &gobj);
212 if (ret) {
213 DRM_ERROR("failed to create fbcon object %d\n", ret);
214 return ret;
215 }
216
212 rbo = gem_to_radeon_bo(gobj); 217 rbo = gem_to_radeon_bo(gobj);
213 218
214 /* okay we have an object now allocate the framebuffer */ 219 /* okay we have an object now allocate the framebuffer */
@@ -220,7 +225,11 @@ static int radeonfb_create(struct radeon_fbdev *rfbdev,
220 225
221 info->par = rfbdev; 226 info->par = rfbdev;
222 227
223 radeon_framebuffer_init(rdev->ddev, &rfbdev->rfb, &mode_cmd, gobj); 228 ret = radeon_framebuffer_init(rdev->ddev, &rfbdev->rfb, &mode_cmd, gobj);
229 if (ret) {
230 DRM_ERROR("failed to initalise framebuffer %d\n", ret);
231 goto out_unref;
232 }
224 233
225 fb = &rfbdev->rfb.base; 234 fb = &rfbdev->rfb.base;
226 235
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
index 4330e3253573..8a85598fb242 100644
--- a/drivers/gpu/drm/radeon/radeon_mode.h
+++ b/drivers/gpu/drm/radeon/radeon_mode.h
@@ -649,7 +649,7 @@ extern void radeon_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
649 u16 blue, int regno); 649 u16 blue, int regno);
650extern void radeon_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green, 650extern void radeon_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
651 u16 *blue, int regno); 651 u16 *blue, int regno);
652void radeon_framebuffer_init(struct drm_device *dev, 652int radeon_framebuffer_init(struct drm_device *dev,
653 struct radeon_framebuffer *rfb, 653 struct radeon_framebuffer *rfb,
654 struct drm_mode_fb_cmd2 *mode_cmd, 654 struct drm_mode_fb_cmd2 *mode_cmd,
655 struct drm_gem_object *obj); 655 struct drm_gem_object *obj);
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index b8574cddd953..63552e30d0c3 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -59,6 +59,9 @@
59#define USB_VENDOR_ID_AIRCABLE 0x16CA 59#define USB_VENDOR_ID_AIRCABLE 0x16CA
60#define USB_DEVICE_ID_AIRCABLE1 0x1502 60#define USB_DEVICE_ID_AIRCABLE1 0x1502
61 61
62#define USB_VENDOR_ID_AIREN 0x1a2c
63#define USB_DEVICE_ID_AIREN_SLIMPLUS 0x0002
64
62#define USB_VENDOR_ID_ALCOR 0x058f 65#define USB_VENDOR_ID_ALCOR 0x058f
63#define USB_DEVICE_ID_ALCOR_USBRS232 0x9720 66#define USB_DEVICE_ID_ALCOR_USBRS232 0x9720
64 67
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index 9333d692a786..627850a54d34 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -986,8 +986,13 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
986 return; 986 return;
987 } 987 }
988 988
989 /* Ignore out-of-range values as per HID specification, section 5.10 */ 989 /*
990 if (value < field->logical_minimum || value > field->logical_maximum) { 990 * Ignore out-of-range values as per HID specification,
991 * section 5.10 and 6.2.25
992 */
993 if ((field->flags & HID_MAIN_ITEM_VARIABLE) &&
994 (value < field->logical_minimum ||
995 value > field->logical_maximum)) {
991 dbg_hid("Ignoring out-of-range value %x\n", value); 996 dbg_hid("Ignoring out-of-range value %x\n", value);
992 return; 997 return;
993 } 998 }
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index c831af937481..57d4e1e1df48 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -54,6 +54,7 @@ static const struct hid_blacklist {
54 { USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT }, 54 { USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT },
55 { USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS, HID_QUIRK_MULTI_INPUT }, 55 { USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS, HID_QUIRK_MULTI_INPUT },
56 56
57 { USB_VENDOR_ID_AIREN, USB_DEVICE_ID_AIREN_SLIMPLUS, HID_QUIRK_NOGET },
57 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET }, 58 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET },
58 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET }, 59 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET },
59 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET }, 60 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 02260406b9e4..dad895fec62a 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -497,8 +497,9 @@ config SENSORS_JC42
497 If you say yes here, you get support for JEDEC JC42.4 compliant 497 If you say yes here, you get support for JEDEC JC42.4 compliant
498 temperature sensors, which are used on many DDR3 memory modules for 498 temperature sensors, which are used on many DDR3 memory modules for
499 mobile devices and servers. Support will include, but not be limited 499 mobile devices and servers. Support will include, but not be limited
500 to, ADT7408, CAT34TS02, CAT6095, MAX6604, MCP9805, MCP98242, MCP98243, 500 to, ADT7408, AT30TS00, CAT34TS02, CAT6095, MAX6604, MCP9804, MCP9805,
501 MCP9843, SE97, SE98, STTS424(E), TSE2002B3, and TS3000B3. 501 MCP98242, MCP98243, MCP9843, SE97, SE98, STTS424(E), STTS2002,
502 STTS3000, TSE2002B3, TSE2002GB2, TS3000B3, and TS3000GB2.
502 503
503 This driver can also be built as a module. If so, the module 504 This driver can also be built as a module. If so, the module
504 will be called jc42. 505 will be called jc42.
diff --git a/drivers/hwmon/jc42.c b/drivers/hwmon/jc42.c
index 28c09eead36b..b927ee5ccdd7 100644
--- a/drivers/hwmon/jc42.c
+++ b/drivers/hwmon/jc42.c
@@ -64,6 +64,7 @@ static const unsigned short normal_i2c[] = {
64 64
65/* Manufacturer IDs */ 65/* Manufacturer IDs */
66#define ADT_MANID 0x11d4 /* Analog Devices */ 66#define ADT_MANID 0x11d4 /* Analog Devices */
67#define ATMEL_MANID 0x001f /* Atmel */
67#define MAX_MANID 0x004d /* Maxim */ 68#define MAX_MANID 0x004d /* Maxim */
68#define IDT_MANID 0x00b3 /* IDT */ 69#define IDT_MANID 0x00b3 /* IDT */
69#define MCP_MANID 0x0054 /* Microchip */ 70#define MCP_MANID 0x0054 /* Microchip */
@@ -77,15 +78,25 @@ static const unsigned short normal_i2c[] = {
77#define ADT7408_DEVID 0x0801 78#define ADT7408_DEVID 0x0801
78#define ADT7408_DEVID_MASK 0xffff 79#define ADT7408_DEVID_MASK 0xffff
79 80
81/* Atmel */
82#define AT30TS00_DEVID 0x8201
83#define AT30TS00_DEVID_MASK 0xffff
84
80/* IDT */ 85/* IDT */
81#define TS3000B3_DEVID 0x2903 /* Also matches TSE2002B3 */ 86#define TS3000B3_DEVID 0x2903 /* Also matches TSE2002B3 */
82#define TS3000B3_DEVID_MASK 0xffff 87#define TS3000B3_DEVID_MASK 0xffff
83 88
89#define TS3000GB2_DEVID 0x2912 /* Also matches TSE2002GB2 */
90#define TS3000GB2_DEVID_MASK 0xffff
91
84/* Maxim */ 92/* Maxim */
85#define MAX6604_DEVID 0x3e00 93#define MAX6604_DEVID 0x3e00
86#define MAX6604_DEVID_MASK 0xffff 94#define MAX6604_DEVID_MASK 0xffff
87 95
88/* Microchip */ 96/* Microchip */
97#define MCP9804_DEVID 0x0200
98#define MCP9804_DEVID_MASK 0xfffc
99
89#define MCP98242_DEVID 0x2000 100#define MCP98242_DEVID 0x2000
90#define MCP98242_DEVID_MASK 0xfffc 101#define MCP98242_DEVID_MASK 0xfffc
91 102
@@ -113,6 +124,12 @@ static const unsigned short normal_i2c[] = {
113#define STTS424E_DEVID 0x0000 124#define STTS424E_DEVID 0x0000
114#define STTS424E_DEVID_MASK 0xfffe 125#define STTS424E_DEVID_MASK 0xfffe
115 126
127#define STTS2002_DEVID 0x0300
128#define STTS2002_DEVID_MASK 0xffff
129
130#define STTS3000_DEVID 0x0200
131#define STTS3000_DEVID_MASK 0xffff
132
116static u16 jc42_hysteresis[] = { 0, 1500, 3000, 6000 }; 133static u16 jc42_hysteresis[] = { 0, 1500, 3000, 6000 };
117 134
118struct jc42_chips { 135struct jc42_chips {
@@ -123,8 +140,11 @@ struct jc42_chips {
123 140
124static struct jc42_chips jc42_chips[] = { 141static struct jc42_chips jc42_chips[] = {
125 { ADT_MANID, ADT7408_DEVID, ADT7408_DEVID_MASK }, 142 { ADT_MANID, ADT7408_DEVID, ADT7408_DEVID_MASK },
143 { ATMEL_MANID, AT30TS00_DEVID, AT30TS00_DEVID_MASK },
126 { IDT_MANID, TS3000B3_DEVID, TS3000B3_DEVID_MASK }, 144 { IDT_MANID, TS3000B3_DEVID, TS3000B3_DEVID_MASK },
145 { IDT_MANID, TS3000GB2_DEVID, TS3000GB2_DEVID_MASK },
127 { MAX_MANID, MAX6604_DEVID, MAX6604_DEVID_MASK }, 146 { MAX_MANID, MAX6604_DEVID, MAX6604_DEVID_MASK },
147 { MCP_MANID, MCP9804_DEVID, MCP9804_DEVID_MASK },
128 { MCP_MANID, MCP98242_DEVID, MCP98242_DEVID_MASK }, 148 { MCP_MANID, MCP98242_DEVID, MCP98242_DEVID_MASK },
129 { MCP_MANID, MCP98243_DEVID, MCP98243_DEVID_MASK }, 149 { MCP_MANID, MCP98243_DEVID, MCP98243_DEVID_MASK },
130 { MCP_MANID, MCP9843_DEVID, MCP9843_DEVID_MASK }, 150 { MCP_MANID, MCP9843_DEVID, MCP9843_DEVID_MASK },
@@ -133,6 +153,8 @@ static struct jc42_chips jc42_chips[] = {
133 { NXP_MANID, SE98_DEVID, SE98_DEVID_MASK }, 153 { NXP_MANID, SE98_DEVID, SE98_DEVID_MASK },
134 { STM_MANID, STTS424_DEVID, STTS424_DEVID_MASK }, 154 { STM_MANID, STTS424_DEVID, STTS424_DEVID_MASK },
135 { STM_MANID, STTS424E_DEVID, STTS424E_DEVID_MASK }, 155 { STM_MANID, STTS424E_DEVID, STTS424E_DEVID_MASK },
156 { STM_MANID, STTS2002_DEVID, STTS2002_DEVID_MASK },
157 { STM_MANID, STTS3000_DEVID, STTS3000_DEVID_MASK },
136}; 158};
137 159
138/* Each client has this additional data */ 160/* Each client has this additional data */
@@ -159,10 +181,12 @@ static struct jc42_data *jc42_update_device(struct device *dev);
159 181
160static const struct i2c_device_id jc42_id[] = { 182static const struct i2c_device_id jc42_id[] = {
161 { "adt7408", 0 }, 183 { "adt7408", 0 },
184 { "at30ts00", 0 },
162 { "cat94ts02", 0 }, 185 { "cat94ts02", 0 },
163 { "cat6095", 0 }, 186 { "cat6095", 0 },
164 { "jc42", 0 }, 187 { "jc42", 0 },
165 { "max6604", 0 }, 188 { "max6604", 0 },
189 { "mcp9804", 0 },
166 { "mcp9805", 0 }, 190 { "mcp9805", 0 },
167 { "mcp98242", 0 }, 191 { "mcp98242", 0 },
168 { "mcp98243", 0 }, 192 { "mcp98243", 0 },
@@ -171,8 +195,10 @@ static const struct i2c_device_id jc42_id[] = {
171 { "se97b", 0 }, 195 { "se97b", 0 },
172 { "se98", 0 }, 196 { "se98", 0 },
173 { "stts424", 0 }, 197 { "stts424", 0 },
174 { "tse2002b3", 0 }, 198 { "stts2002", 0 },
175 { "ts3000b3", 0 }, 199 { "stts3000", 0 },
200 { "tse2002", 0 },
201 { "ts3000", 0 },
176 { } 202 { }
177}; 203};
178MODULE_DEVICE_TABLE(i2c, jc42_id); 204MODULE_DEVICE_TABLE(i2c, jc42_id);
diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c
index 00460d8d8423..d89b33967a85 100644
--- a/drivers/hwmon/pmbus/pmbus_core.c
+++ b/drivers/hwmon/pmbus/pmbus_core.c
@@ -54,7 +54,8 @@
54 lcrit_alarm, crit_alarm */ 54 lcrit_alarm, crit_alarm */
55#define PMBUS_IOUT_BOOLEANS_PER_PAGE 3 /* alarm, lcrit_alarm, 55#define PMBUS_IOUT_BOOLEANS_PER_PAGE 3 /* alarm, lcrit_alarm,
56 crit_alarm */ 56 crit_alarm */
57#define PMBUS_POUT_BOOLEANS_PER_PAGE 2 /* alarm, crit_alarm */ 57#define PMBUS_POUT_BOOLEANS_PER_PAGE 3 /* cap_alarm, alarm, crit_alarm
58 */
58#define PMBUS_MAX_BOOLEANS_PER_FAN 2 /* alarm, fault */ 59#define PMBUS_MAX_BOOLEANS_PER_FAN 2 /* alarm, fault */
59#define PMBUS_MAX_BOOLEANS_PER_TEMP 4 /* min_alarm, max_alarm, 60#define PMBUS_MAX_BOOLEANS_PER_TEMP 4 /* min_alarm, max_alarm,
60 lcrit_alarm, crit_alarm */ 61 lcrit_alarm, crit_alarm */
diff --git a/drivers/hwmon/pmbus/zl6100.c b/drivers/hwmon/pmbus/zl6100.c
index 48c7b4a716ae..e3e8420b7b81 100644
--- a/drivers/hwmon/pmbus/zl6100.c
+++ b/drivers/hwmon/pmbus/zl6100.c
@@ -33,6 +33,7 @@ enum chips { zl2004, zl2005, zl2006, zl2008, zl2105, zl2106, zl6100, zl6105 };
33struct zl6100_data { 33struct zl6100_data {
34 int id; 34 int id;
35 ktime_t access; /* chip access time */ 35 ktime_t access; /* chip access time */
36 int delay; /* Delay between chip accesses in uS */
36 struct pmbus_driver_info info; 37 struct pmbus_driver_info info;
37}; 38};
38 39
@@ -52,10 +53,10 @@ MODULE_PARM_DESC(delay, "Delay between chip accesses in uS");
52/* Some chips need a delay between accesses */ 53/* Some chips need a delay between accesses */
53static inline void zl6100_wait(const struct zl6100_data *data) 54static inline void zl6100_wait(const struct zl6100_data *data)
54{ 55{
55 if (delay) { 56 if (data->delay) {
56 s64 delta = ktime_us_delta(ktime_get(), data->access); 57 s64 delta = ktime_us_delta(ktime_get(), data->access);
57 if (delta < delay) 58 if (delta < data->delay)
58 udelay(delay - delta); 59 udelay(data->delay - delta);
59 } 60 }
60} 61}
61 62
@@ -199,16 +200,11 @@ static int zl6100_probe(struct i2c_client *client,
199 data->id = mid->driver_data; 200 data->id = mid->driver_data;
200 201
201 /* 202 /*
202 * ZL2005, ZL2008, ZL2105, and ZL6100 are known to require a wait time 203 * According to information from the chip vendor, all currently
203 * between I2C accesses. ZL2004 and ZL6105 are known to be safe. 204 * supported chips are known to require a wait time between I2C
204 * Other chips have not yet been tested. 205 * accesses.
205 *
206 * Only clear the wait time for chips known to be safe. The wait time
207 * can be cleared later for additional chips if tests show that it
208 * is not needed (in other words, better be safe than sorry).
209 */ 206 */
210 if (data->id == zl2004 || data->id == zl6105) 207 data->delay = delay;
211 delay = 0;
212 208
213 /* 209 /*
214 * Since there was a direct I2C device access above, wait before 210 * Since there was a direct I2C device access above, wait before
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
index 5276d1933dbc..a658d62c5e10 100644
--- a/drivers/hwmon/w83627ehf.c
+++ b/drivers/hwmon/w83627ehf.c
@@ -39,7 +39,7 @@
39 0x8860 0xa1 39 0x8860 0xa1
40 w83627dhg 9 5 4 3 0xa020 0xc1 0x5ca3 40 w83627dhg 9 5 4 3 0xa020 0xc1 0x5ca3
41 w83627dhg-p 9 5 4 3 0xb070 0xc1 0x5ca3 41 w83627dhg-p 9 5 4 3 0xb070 0xc1 0x5ca3
42 w83627uhg 8 2 2 2 0xa230 0xc1 0x5ca3 42 w83627uhg 8 2 2 3 0xa230 0xc1 0x5ca3
43 w83667hg 9 5 3 3 0xa510 0xc1 0x5ca3 43 w83667hg 9 5 3 3 0xa510 0xc1 0x5ca3
44 w83667hg-b 9 5 3 4 0xb350 0xc1 0x5ca3 44 w83667hg-b 9 5 3 4 0xb350 0xc1 0x5ca3
45 nct6775f 9 4 3 9 0xb470 0xc1 0x5ca3 45 nct6775f 9 4 3 9 0xb470 0xc1 0x5ca3
@@ -1607,7 +1607,7 @@ store_##reg(struct device *dev, struct device_attribute *attr, \
1607 val = step_time_to_reg(val, data->pwm_mode[nr]); \ 1607 val = step_time_to_reg(val, data->pwm_mode[nr]); \
1608 mutex_lock(&data->update_lock); \ 1608 mutex_lock(&data->update_lock); \
1609 data->reg[nr] = val; \ 1609 data->reg[nr] = val; \
1610 w83627ehf_write_value(data, W83627EHF_REG_##REG[nr], val); \ 1610 w83627ehf_write_value(data, data->REG_##REG[nr], val); \
1611 mutex_unlock(&data->update_lock); \ 1611 mutex_unlock(&data->update_lock); \
1612 return count; \ 1612 return count; \
1613} \ 1613} \
@@ -2004,7 +2004,8 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)
2004 goto exit; 2004 goto exit;
2005 } 2005 }
2006 2006
2007 data = kzalloc(sizeof(struct w83627ehf_data), GFP_KERNEL); 2007 data = devm_kzalloc(&pdev->dev, sizeof(struct w83627ehf_data),
2008 GFP_KERNEL);
2008 if (!data) { 2009 if (!data) {
2009 err = -ENOMEM; 2010 err = -ENOMEM;
2010 goto exit_release; 2011 goto exit_release;
@@ -2157,16 +2158,16 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)
2157 w83627ehf_set_temp_reg_ehf(data, 3); 2158 w83627ehf_set_temp_reg_ehf(data, 3);
2158 2159
2159 /* 2160 /*
2160 * Temperature sources for temp1 and temp2 are selected with 2161 * Temperature sources for temp2 and temp3 are selected with
2161 * bank 0, registers 0x49 and 0x4a. 2162 * bank 0, registers 0x49 and 0x4a.
2162 */ 2163 */
2163 data->temp_src[0] = 0; /* SYSTIN */ 2164 data->temp_src[0] = 0; /* SYSTIN */
2164 reg = w83627ehf_read_value(data, 0x49) & 0x07; 2165 reg = w83627ehf_read_value(data, 0x49) & 0x07;
2165 /* Adjust to have the same mapping as other source registers */ 2166 /* Adjust to have the same mapping as other source registers */
2166 if (reg == 0) 2167 if (reg == 0)
2167 data->temp_src[1]++; 2168 data->temp_src[1] = 1;
2168 else if (reg >= 2 && reg <= 5) 2169 else if (reg >= 2 && reg <= 5)
2169 data->temp_src[1] += 2; 2170 data->temp_src[1] = reg + 2;
2170 else /* should never happen */ 2171 else /* should never happen */
2171 data->have_temp &= ~(1 << 1); 2172 data->have_temp &= ~(1 << 1);
2172 reg = w83627ehf_read_value(data, 0x4a); 2173 reg = w83627ehf_read_value(data, 0x4a);
@@ -2493,9 +2494,8 @@ static int __devinit w83627ehf_probe(struct platform_device *pdev)
2493 2494
2494exit_remove: 2495exit_remove:
2495 w83627ehf_device_remove_files(dev); 2496 w83627ehf_device_remove_files(dev);
2496 kfree(data);
2497 platform_set_drvdata(pdev, NULL);
2498exit_release: 2497exit_release:
2498 platform_set_drvdata(pdev, NULL);
2499 release_region(res->start, IOREGION_LENGTH); 2499 release_region(res->start, IOREGION_LENGTH);
2500exit: 2500exit:
2501 return err; 2501 return err;
@@ -2509,7 +2509,6 @@ static int __devexit w83627ehf_remove(struct platform_device *pdev)
2509 w83627ehf_device_remove_files(&pdev->dev); 2509 w83627ehf_device_remove_files(&pdev->dev);
2510 release_region(data->addr, IOREGION_LENGTH); 2510 release_region(data->addr, IOREGION_LENGTH);
2511 platform_set_drvdata(pdev, NULL); 2511 platform_set_drvdata(pdev, NULL);
2512 kfree(data);
2513 2512
2514 return 0; 2513 return 0;
2515} 2514}
diff --git a/drivers/i2c/algos/i2c-algo-bit.c b/drivers/i2c/algos/i2c-algo-bit.c
index 525c7345fa0b..24f94f4ae395 100644
--- a/drivers/i2c/algos/i2c-algo-bit.c
+++ b/drivers/i2c/algos/i2c-algo-bit.c
@@ -103,8 +103,14 @@ static int sclhi(struct i2c_algo_bit_data *adap)
103 * chips may hold it low ("clock stretching") while they 103 * chips may hold it low ("clock stretching") while they
104 * are processing data internally. 104 * are processing data internally.
105 */ 105 */
106 if (time_after(jiffies, start + adap->timeout)) 106 if (time_after(jiffies, start + adap->timeout)) {
107 /* Test one last time, as we may have been preempted
108 * between last check and timeout test.
109 */
110 if (getscl(adap))
111 break;
107 return -ETIMEDOUT; 112 return -ETIMEDOUT;
113 }
108 cond_resched(); 114 cond_resched();
109 } 115 }
110#ifdef DEBUG 116#ifdef DEBUG
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 1e5606185b4f..e9c18939eda7 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -1386,8 +1386,10 @@ int i2c_master_send(const struct i2c_client *client, const char *buf, int count)
1386 1386
1387 ret = i2c_transfer(adap, &msg, 1); 1387 ret = i2c_transfer(adap, &msg, 1);
1388 1388
1389 /* If everything went ok (i.e. 1 msg transmitted), return #bytes 1389 /*
1390 transmitted, else error code. */ 1390 * If everything went ok (i.e. 1 msg transmitted), return #bytes
1391 * transmitted, else error code.
1392 */
1391 return (ret == 1) ? count : ret; 1393 return (ret == 1) ? count : ret;
1392} 1394}
1393EXPORT_SYMBOL(i2c_master_send); 1395EXPORT_SYMBOL(i2c_master_send);
@@ -1414,8 +1416,10 @@ int i2c_master_recv(const struct i2c_client *client, char *buf, int count)
1414 1416
1415 ret = i2c_transfer(adap, &msg, 1); 1417 ret = i2c_transfer(adap, &msg, 1);
1416 1418
1417 /* If everything went ok (i.e. 1 msg transmitted), return #bytes 1419 /*
1418 transmitted, else error code. */ 1420 * If everything went ok (i.e. 1 msg received), return #bytes received,
1421 * else error code.
1422 */
1419 return (ret == 1) ? count : ret; 1423 return (ret == 1) ? count : ret;
1420} 1424}
1421EXPORT_SYMBOL(i2c_master_recv); 1425EXPORT_SYMBOL(i2c_master_recv);
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
index afc166fcc3d9..7df5bfef2624 100644
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -332,7 +332,7 @@ static ssize_t evdev_write(struct file *file, const char __user *buffer,
332 struct evdev_client *client = file->private_data; 332 struct evdev_client *client = file->private_data;
333 struct evdev *evdev = client->evdev; 333 struct evdev *evdev = client->evdev;
334 struct input_event event; 334 struct input_event event;
335 int retval; 335 int retval = 0;
336 336
337 if (count < input_event_size()) 337 if (count < input_event_size())
338 return -EINVAL; 338 return -EINVAL;
diff --git a/drivers/input/misc/twl4030-vibra.c b/drivers/input/misc/twl4030-vibra.c
index 37651373a95b..f3bc4189a7ba 100644
--- a/drivers/input/misc/twl4030-vibra.c
+++ b/drivers/input/misc/twl4030-vibra.c
@@ -172,7 +172,7 @@ static void twl4030_vibra_close(struct input_dev *input)
172} 172}
173 173
174/*** Module ***/ 174/*** Module ***/
175#if CONFIG_PM 175#if CONFIG_PM_SLEEP
176static int twl4030_vibra_suspend(struct device *dev) 176static int twl4030_vibra_suspend(struct device *dev)
177{ 177{
178 struct platform_device *pdev = to_platform_device(dev); 178 struct platform_device *pdev = to_platform_device(dev);
@@ -189,10 +189,10 @@ static int twl4030_vibra_resume(struct device *dev)
189 vibra_disable_leds(); 189 vibra_disable_leds();
190 return 0; 190 return 0;
191} 191}
192#endif
192 193
193static SIMPLE_DEV_PM_OPS(twl4030_vibra_pm_ops, 194static SIMPLE_DEV_PM_OPS(twl4030_vibra_pm_ops,
194 twl4030_vibra_suspend, twl4030_vibra_resume); 195 twl4030_vibra_suspend, twl4030_vibra_resume);
195#endif
196 196
197static int __devinit twl4030_vibra_probe(struct platform_device *pdev) 197static int __devinit twl4030_vibra_probe(struct platform_device *pdev)
198{ 198{
@@ -273,9 +273,7 @@ static struct platform_driver twl4030_vibra_driver = {
273 .driver = { 273 .driver = {
274 .name = "twl4030-vibra", 274 .name = "twl4030-vibra",
275 .owner = THIS_MODULE, 275 .owner = THIS_MODULE,
276#ifdef CONFIG_PM
277 .pm = &twl4030_vibra_pm_ops, 276 .pm = &twl4030_vibra_pm_ops,
278#endif
279 }, 277 },
280}; 278};
281module_platform_driver(twl4030_vibra_driver); 279module_platform_driver(twl4030_vibra_driver);
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index bd87380bd879..4c6a72d3d48c 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -952,7 +952,9 @@ static const struct alps_model_info *alps_get_model(struct psmouse *psmouse, int
952 952
953 /* 953 /*
954 * First try "E6 report". 954 * First try "E6 report".
955 * ALPS should return 0,0,10 or 0,0,100 955 * ALPS should return 0,0,10 or 0,0,100 if no buttons are pressed.
956 * The bits 0-2 of the first byte will be 1s if some buttons are
957 * pressed.
956 */ 958 */
957 param[0] = 0; 959 param[0] = 0;
958 if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES) || 960 if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES) ||
@@ -968,7 +970,8 @@ static const struct alps_model_info *alps_get_model(struct psmouse *psmouse, int
968 psmouse_dbg(psmouse, "E6 report: %2.2x %2.2x %2.2x", 970 psmouse_dbg(psmouse, "E6 report: %2.2x %2.2x %2.2x",
969 param[0], param[1], param[2]); 971 param[0], param[1], param[2]);
970 972
971 if (param[0] != 0 || param[1] != 0 || (param[2] != 10 && param[2] != 100)) 973 if ((param[0] & 0xf8) != 0 || param[1] != 0 ||
974 (param[2] != 10 && param[2] != 100))
972 return NULL; 975 return NULL;
973 976
974 /* 977 /*
diff --git a/drivers/input/tablet/Kconfig b/drivers/input/tablet/Kconfig
index 58a87755b936..e53f4081a586 100644
--- a/drivers/input/tablet/Kconfig
+++ b/drivers/input/tablet/Kconfig
@@ -77,6 +77,8 @@ config TABLET_USB_WACOM
77 tristate "Wacom Intuos/Graphire tablet support (USB)" 77 tristate "Wacom Intuos/Graphire tablet support (USB)"
78 depends on USB_ARCH_HAS_HCD 78 depends on USB_ARCH_HAS_HCD
79 select USB 79 select USB
80 select NEW_LEDS
81 select LEDS_CLASS
80 help 82 help
81 Say Y here if you want to use the USB version of the Wacom Intuos 83 Say Y here if you want to use the USB version of the Wacom Intuos
82 or Graphire tablet. Make sure to say Y to "Mouse support" 84 or Graphire tablet. Make sure to say Y to "Mouse support"
diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c
index 88672ec296c1..cd3ed29e0801 100644
--- a/drivers/input/tablet/wacom_wac.c
+++ b/drivers/input/tablet/wacom_wac.c
@@ -926,7 +926,7 @@ static int wacom_bpt3_touch(struct wacom_wac *wacom)
926{ 926{
927 struct input_dev *input = wacom->input; 927 struct input_dev *input = wacom->input;
928 unsigned char *data = wacom->data; 928 unsigned char *data = wacom->data;
929 int count = data[1] & 0x03; 929 int count = data[1] & 0x07;
930 int i; 930 int i;
931 931
932 if (data[0] != 0x02) 932 if (data[0] != 0x02)
diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
index bdea288dc185..a35e98ad9725 100644
--- a/drivers/iommu/amd_iommu_init.c
+++ b/drivers/iommu/amd_iommu_init.c
@@ -275,7 +275,7 @@ static void iommu_set_exclusion_range(struct amd_iommu *iommu)
275} 275}
276 276
277/* Programs the physical address of the device table into the IOMMU hardware */ 277/* Programs the physical address of the device table into the IOMMU hardware */
278static void __init iommu_set_device_table(struct amd_iommu *iommu) 278static void iommu_set_device_table(struct amd_iommu *iommu)
279{ 279{
280 u64 entry; 280 u64 entry;
281 281
diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
index 9fb18c147825..b280c433e4a0 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -323,7 +323,7 @@ static int flakey_end_io(struct dm_target *ti, struct bio *bio,
323 * Corrupt successful READs while in down state. 323 * Corrupt successful READs while in down state.
324 * If flags were specified, only corrupt those that match. 324 * If flags were specified, only corrupt those that match.
325 */ 325 */
326 if (!error && bio_submitted_while_down && 326 if (fc->corrupt_bio_byte && !error && bio_submitted_while_down &&
327 (bio_data_dir(bio) == READ) && (fc->corrupt_bio_rw == READ) && 327 (bio_data_dir(bio) == READ) && (fc->corrupt_bio_rw == READ) &&
328 all_corrupt_bio_flags_match(bio, fc)) 328 all_corrupt_bio_flags_match(bio, fc))
329 corrupt_bio_data(bio, fc); 329 corrupt_bio_data(bio, fc);
diff --git a/drivers/md/dm-io.c b/drivers/md/dm-io.c
index ad2eba40e319..ea5dd289fe2a 100644
--- a/drivers/md/dm-io.c
+++ b/drivers/md/dm-io.c
@@ -296,6 +296,8 @@ static void do_region(int rw, unsigned region, struct dm_io_region *where,
296 unsigned offset; 296 unsigned offset;
297 unsigned num_bvecs; 297 unsigned num_bvecs;
298 sector_t remaining = where->count; 298 sector_t remaining = where->count;
299 struct request_queue *q = bdev_get_queue(where->bdev);
300 sector_t discard_sectors;
299 301
300 /* 302 /*
301 * where->count may be zero if rw holds a flush and we need to 303 * where->count may be zero if rw holds a flush and we need to
@@ -305,9 +307,12 @@ static void do_region(int rw, unsigned region, struct dm_io_region *where,
305 /* 307 /*
306 * Allocate a suitably sized-bio. 308 * Allocate a suitably sized-bio.
307 */ 309 */
308 num_bvecs = dm_sector_div_up(remaining, 310 if (rw & REQ_DISCARD)
309 (PAGE_SIZE >> SECTOR_SHIFT)); 311 num_bvecs = 1;
310 num_bvecs = min_t(int, bio_get_nr_vecs(where->bdev), num_bvecs); 312 else
313 num_bvecs = min_t(int, bio_get_nr_vecs(where->bdev),
314 dm_sector_div_up(remaining, (PAGE_SIZE >> SECTOR_SHIFT)));
315
311 bio = bio_alloc_bioset(GFP_NOIO, num_bvecs, io->client->bios); 316 bio = bio_alloc_bioset(GFP_NOIO, num_bvecs, io->client->bios);
312 bio->bi_sector = where->sector + (where->count - remaining); 317 bio->bi_sector = where->sector + (where->count - remaining);
313 bio->bi_bdev = where->bdev; 318 bio->bi_bdev = where->bdev;
@@ -315,10 +320,14 @@ static void do_region(int rw, unsigned region, struct dm_io_region *where,
315 bio->bi_destructor = dm_bio_destructor; 320 bio->bi_destructor = dm_bio_destructor;
316 store_io_and_region_in_bio(bio, io, region); 321 store_io_and_region_in_bio(bio, io, region);
317 322
318 /* 323 if (rw & REQ_DISCARD) {
319 * Try and add as many pages as possible. 324 discard_sectors = min_t(sector_t, q->limits.max_discard_sectors, remaining);
320 */ 325 bio->bi_size = discard_sectors << SECTOR_SHIFT;
321 while (remaining) { 326 remaining -= discard_sectors;
327 } else while (remaining) {
328 /*
329 * Try and add as many pages as possible.
330 */
322 dp->get_page(dp, &page, &len, &offset); 331 dp->get_page(dp, &page, &len, &offset);
323 len = min(len, to_bytes(remaining)); 332 len = min(len, to_bytes(remaining));
324 if (!bio_add_page(bio, page, len, offset)) 333 if (!bio_add_page(bio, page, len, offset))
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index 31c2dc25886d..1ce84ed0b765 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -1437,7 +1437,7 @@ static int target_message(struct dm_ioctl *param, size_t param_size)
1437 1437
1438 if (!argc) { 1438 if (!argc) {
1439 DMWARN("Empty message received."); 1439 DMWARN("Empty message received.");
1440 goto out; 1440 goto out_argv;
1441 } 1441 }
1442 1442
1443 table = dm_get_live_table(md); 1443 table = dm_get_live_table(md);
diff --git a/drivers/md/dm-raid.c b/drivers/md/dm-raid.c
index 86cb7e5d83d5..787022c18187 100644
--- a/drivers/md/dm-raid.c
+++ b/drivers/md/dm-raid.c
@@ -668,7 +668,14 @@ static int super_load(struct md_rdev *rdev, struct md_rdev *refdev)
668 return ret; 668 return ret;
669 669
670 sb = page_address(rdev->sb_page); 670 sb = page_address(rdev->sb_page);
671 if (sb->magic != cpu_to_le32(DM_RAID_MAGIC)) { 671
672 /*
673 * Two cases that we want to write new superblocks and rebuild:
674 * 1) New device (no matching magic number)
675 * 2) Device specified for rebuild (!In_sync w/ offset == 0)
676 */
677 if ((sb->magic != cpu_to_le32(DM_RAID_MAGIC)) ||
678 (!test_bit(In_sync, &rdev->flags) && !rdev->recovery_offset)) {
672 super_sync(rdev->mddev, rdev); 679 super_sync(rdev->mddev, rdev);
673 680
674 set_bit(FirstUse, &rdev->flags); 681 set_bit(FirstUse, &rdev->flags);
@@ -745,11 +752,8 @@ static int super_init_validation(struct mddev *mddev, struct md_rdev *rdev)
745 */ 752 */
746 rdev_for_each(r, t, mddev) { 753 rdev_for_each(r, t, mddev) {
747 if (!test_bit(In_sync, &r->flags)) { 754 if (!test_bit(In_sync, &r->flags)) {
748 if (!test_bit(FirstUse, &r->flags)) 755 DMINFO("Device %d specified for rebuild: "
749 DMERR("Superblock area of " 756 "Clearing superblock", r->raid_disk);
750 "rebuild device %d should have been "
751 "cleared.", r->raid_disk);
752 set_bit(FirstUse, &r->flags);
753 rebuilds++; 757 rebuilds++;
754 } else if (test_bit(FirstUse, &r->flags)) 758 } else if (test_bit(FirstUse, &r->flags))
755 new_devs++; 759 new_devs++;
@@ -971,6 +975,7 @@ static int raid_ctr(struct dm_target *ti, unsigned argc, char **argv)
971 975
972 INIT_WORK(&rs->md.event_work, do_table_event); 976 INIT_WORK(&rs->md.event_work, do_table_event);
973 ti->private = rs; 977 ti->private = rs;
978 ti->num_flush_requests = 1;
974 979
975 mutex_lock(&rs->md.reconfig_mutex); 980 mutex_lock(&rs->md.reconfig_mutex);
976 ret = md_run(&rs->md); 981 ret = md_run(&rs->md);
diff --git a/drivers/md/dm-thin-metadata.c b/drivers/md/dm-thin-metadata.c
index 59c4f0446ffa..237571af77fd 100644
--- a/drivers/md/dm-thin-metadata.c
+++ b/drivers/md/dm-thin-metadata.c
@@ -385,6 +385,7 @@ static int init_pmd(struct dm_pool_metadata *pmd,
385 data_sm = dm_sm_disk_create(tm, nr_blocks); 385 data_sm = dm_sm_disk_create(tm, nr_blocks);
386 if (IS_ERR(data_sm)) { 386 if (IS_ERR(data_sm)) {
387 DMERR("sm_disk_create failed"); 387 DMERR("sm_disk_create failed");
388 dm_tm_unlock(tm, sblock);
388 r = PTR_ERR(data_sm); 389 r = PTR_ERR(data_sm);
389 goto bad; 390 goto bad;
390 } 391 }
@@ -789,6 +790,11 @@ int dm_pool_metadata_close(struct dm_pool_metadata *pmd)
789 return 0; 790 return 0;
790} 791}
791 792
793/*
794 * __open_device: Returns @td corresponding to device with id @dev,
795 * creating it if @create is set and incrementing @td->open_count.
796 * On failure, @td is undefined.
797 */
792static int __open_device(struct dm_pool_metadata *pmd, 798static int __open_device(struct dm_pool_metadata *pmd,
793 dm_thin_id dev, int create, 799 dm_thin_id dev, int create,
794 struct dm_thin_device **td) 800 struct dm_thin_device **td)
@@ -799,10 +805,16 @@ static int __open_device(struct dm_pool_metadata *pmd,
799 struct disk_device_details details_le; 805 struct disk_device_details details_le;
800 806
801 /* 807 /*
802 * Check the device isn't already open. 808 * If the device is already open, return it.
803 */ 809 */
804 list_for_each_entry(td2, &pmd->thin_devices, list) 810 list_for_each_entry(td2, &pmd->thin_devices, list)
805 if (td2->id == dev) { 811 if (td2->id == dev) {
812 /*
813 * May not create an already-open device.
814 */
815 if (create)
816 return -EEXIST;
817
806 td2->open_count++; 818 td2->open_count++;
807 *td = td2; 819 *td = td2;
808 return 0; 820 return 0;
@@ -817,6 +829,9 @@ static int __open_device(struct dm_pool_metadata *pmd,
817 if (r != -ENODATA || !create) 829 if (r != -ENODATA || !create)
818 return r; 830 return r;
819 831
832 /*
833 * Create new device.
834 */
820 changed = 1; 835 changed = 1;
821 details_le.mapped_blocks = 0; 836 details_le.mapped_blocks = 0;
822 details_le.transaction_id = cpu_to_le64(pmd->trans_id); 837 details_le.transaction_id = cpu_to_le64(pmd->trans_id);
@@ -882,12 +897,10 @@ static int __create_thin(struct dm_pool_metadata *pmd,
882 897
883 r = __open_device(pmd, dev, 1, &td); 898 r = __open_device(pmd, dev, 1, &td);
884 if (r) { 899 if (r) {
885 __close_device(td);
886 dm_btree_remove(&pmd->tl_info, pmd->root, &key, &pmd->root); 900 dm_btree_remove(&pmd->tl_info, pmd->root, &key, &pmd->root);
887 dm_btree_del(&pmd->bl_info, dev_root); 901 dm_btree_del(&pmd->bl_info, dev_root);
888 return r; 902 return r;
889 } 903 }
890 td->changed = 1;
891 __close_device(td); 904 __close_device(td);
892 905
893 return r; 906 return r;
@@ -967,14 +980,14 @@ static int __create_snap(struct dm_pool_metadata *pmd,
967 goto bad; 980 goto bad;
968 981
969 r = __set_snapshot_details(pmd, td, origin, pmd->time); 982 r = __set_snapshot_details(pmd, td, origin, pmd->time);
983 __close_device(td);
984
970 if (r) 985 if (r)
971 goto bad; 986 goto bad;
972 987
973 __close_device(td);
974 return 0; 988 return 0;
975 989
976bad: 990bad:
977 __close_device(td);
978 dm_btree_remove(&pmd->tl_info, pmd->root, &key, &pmd->root); 991 dm_btree_remove(&pmd->tl_info, pmd->root, &key, &pmd->root);
979 dm_btree_remove(&pmd->details_info, pmd->details_root, 992 dm_btree_remove(&pmd->details_info, pmd->details_root,
980 &key, &pmd->details_root); 993 &key, &pmd->details_root);
@@ -1211,6 +1224,8 @@ static int __remove(struct dm_thin_device *td, dm_block_t block)
1211 if (r) 1224 if (r)
1212 return r; 1225 return r;
1213 1226
1227 td->mapped_blocks--;
1228 td->changed = 1;
1214 pmd->need_commit = 1; 1229 pmd->need_commit = 1;
1215 1230
1216 return 0; 1231 return 0;
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index a368db2431a5..a0b225eb4ac4 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -624,7 +624,7 @@ int md_raid1_congested(struct mddev *mddev, int bits)
624 return 1; 624 return 1;
625 625
626 rcu_read_lock(); 626 rcu_read_lock();
627 for (i = 0; i < conf->raid_disks; i++) { 627 for (i = 0; i < conf->raid_disks * 2; i++) {
628 struct md_rdev *rdev = rcu_dereference(conf->mirrors[i].rdev); 628 struct md_rdev *rdev = rcu_dereference(conf->mirrors[i].rdev);
629 if (rdev && !test_bit(Faulty, &rdev->flags)) { 629 if (rdev && !test_bit(Faulty, &rdev->flags)) {
630 struct request_queue *q = bdev_get_queue(rdev->bdev); 630 struct request_queue *q = bdev_get_queue(rdev->bdev);
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 6e8aa213f0d5..58c44d6453a0 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -67,6 +67,7 @@ static int max_queued_requests = 1024;
67 67
68static void allow_barrier(struct r10conf *conf); 68static void allow_barrier(struct r10conf *conf);
69static void lower_barrier(struct r10conf *conf); 69static void lower_barrier(struct r10conf *conf);
70static int enough(struct r10conf *conf, int ignore);
70 71
71static void * r10bio_pool_alloc(gfp_t gfp_flags, void *data) 72static void * r10bio_pool_alloc(gfp_t gfp_flags, void *data)
72{ 73{
@@ -347,6 +348,19 @@ static void raid10_end_read_request(struct bio *bio, int error)
347 * wait for the 'master' bio. 348 * wait for the 'master' bio.
348 */ 349 */
349 set_bit(R10BIO_Uptodate, &r10_bio->state); 350 set_bit(R10BIO_Uptodate, &r10_bio->state);
351 } else {
352 /* If all other devices that store this block have
353 * failed, we want to return the error upwards rather
354 * than fail the last device. Here we redefine
355 * "uptodate" to mean "Don't want to retry"
356 */
357 unsigned long flags;
358 spin_lock_irqsave(&conf->device_lock, flags);
359 if (!enough(conf, rdev->raid_disk))
360 uptodate = 1;
361 spin_unlock_irqrestore(&conf->device_lock, flags);
362 }
363 if (uptodate) {
350 raid_end_bio_io(r10_bio); 364 raid_end_bio_io(r10_bio);
351 rdev_dec_pending(rdev, conf->mddev); 365 rdev_dec_pending(rdev, conf->mddev);
352 } else { 366 } else {
@@ -2052,6 +2066,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
2052 "md/raid10:%s: %s: Failing raid device\n", 2066 "md/raid10:%s: %s: Failing raid device\n",
2053 mdname(mddev), b); 2067 mdname(mddev), b);
2054 md_error(mddev, conf->mirrors[d].rdev); 2068 md_error(mddev, conf->mirrors[d].rdev);
2069 r10_bio->devs[r10_bio->read_slot].bio = IO_BLOCKED;
2055 return; 2070 return;
2056 } 2071 }
2057 2072
@@ -2105,8 +2120,11 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
2105 rdev, 2120 rdev,
2106 r10_bio->devs[r10_bio->read_slot].addr 2121 r10_bio->devs[r10_bio->read_slot].addr
2107 + sect, 2122 + sect,
2108 s, 0)) 2123 s, 0)) {
2109 md_error(mddev, rdev); 2124 md_error(mddev, rdev);
2125 r10_bio->devs[r10_bio->read_slot].bio
2126 = IO_BLOCKED;
2127 }
2110 break; 2128 break;
2111 } 2129 }
2112 2130
@@ -2299,17 +2317,20 @@ static void handle_read_error(struct mddev *mddev, struct r10bio *r10_bio)
2299 * This is all done synchronously while the array is 2317 * This is all done synchronously while the array is
2300 * frozen. 2318 * frozen.
2301 */ 2319 */
2320 bio = r10_bio->devs[slot].bio;
2321 bdevname(bio->bi_bdev, b);
2322 bio_put(bio);
2323 r10_bio->devs[slot].bio = NULL;
2324
2302 if (mddev->ro == 0) { 2325 if (mddev->ro == 0) {
2303 freeze_array(conf); 2326 freeze_array(conf);
2304 fix_read_error(conf, mddev, r10_bio); 2327 fix_read_error(conf, mddev, r10_bio);
2305 unfreeze_array(conf); 2328 unfreeze_array(conf);
2306 } 2329 } else
2330 r10_bio->devs[slot].bio = IO_BLOCKED;
2331
2307 rdev_dec_pending(rdev, mddev); 2332 rdev_dec_pending(rdev, mddev);
2308 2333
2309 bio = r10_bio->devs[slot].bio;
2310 bdevname(bio->bi_bdev, b);
2311 r10_bio->devs[slot].bio =
2312 mddev->ro ? IO_BLOCKED : NULL;
2313read_more: 2334read_more:
2314 rdev = read_balance(conf, r10_bio, &max_sectors); 2335 rdev = read_balance(conf, r10_bio, &max_sectors);
2315 if (rdev == NULL) { 2336 if (rdev == NULL) {
@@ -2318,13 +2339,10 @@ read_more:
2318 mdname(mddev), b, 2339 mdname(mddev), b,
2319 (unsigned long long)r10_bio->sector); 2340 (unsigned long long)r10_bio->sector);
2320 raid_end_bio_io(r10_bio); 2341 raid_end_bio_io(r10_bio);
2321 bio_put(bio);
2322 return; 2342 return;
2323 } 2343 }
2324 2344
2325 do_sync = (r10_bio->master_bio->bi_rw & REQ_SYNC); 2345 do_sync = (r10_bio->master_bio->bi_rw & REQ_SYNC);
2326 if (bio)
2327 bio_put(bio);
2328 slot = r10_bio->read_slot; 2346 slot = r10_bio->read_slot;
2329 printk_ratelimited( 2347 printk_ratelimited(
2330 KERN_ERR 2348 KERN_ERR
@@ -2360,7 +2378,6 @@ read_more:
2360 mbio->bi_phys_segments++; 2378 mbio->bi_phys_segments++;
2361 spin_unlock_irq(&conf->device_lock); 2379 spin_unlock_irq(&conf->device_lock);
2362 generic_make_request(bio); 2380 generic_make_request(bio);
2363 bio = NULL;
2364 2381
2365 r10_bio = mempool_alloc(conf->r10bio_pool, 2382 r10_bio = mempool_alloc(conf->r10bio_pool,
2366 GFP_NOIO); 2383 GFP_NOIO);
@@ -3243,7 +3260,6 @@ static int run(struct mddev *mddev)
3243 disk->rdev = rdev; 3260 disk->rdev = rdev;
3244 } 3261 }
3245 3262
3246 disk->rdev = rdev;
3247 disk_stack_limits(mddev->gendisk, rdev->bdev, 3263 disk_stack_limits(mddev->gendisk, rdev->bdev,
3248 rdev->data_offset << 9); 3264 rdev->data_offset << 9);
3249 /* as we don't honour merge_bvec_fn, we must never risk 3265 /* as we don't honour merge_bvec_fn, we must never risk
diff --git a/drivers/media/dvb/siano/smsdvb.c b/drivers/media/dvb/siano/smsdvb.c
index 654685c9303e..aa77e54a8fae 100644
--- a/drivers/media/dvb/siano/smsdvb.c
+++ b/drivers/media/dvb/siano/smsdvb.c
@@ -49,9 +49,6 @@ struct smsdvb_client_t {
49 49
50 struct completion tune_done; 50 struct completion tune_done;
51 51
52 /* todo: save freq/band instead whole struct */
53 struct dtv_frontend_properties fe_params;
54
55 struct SMSHOSTLIB_STATISTICS_DVB_S sms_stat_dvb; 52 struct SMSHOSTLIB_STATISTICS_DVB_S sms_stat_dvb;
56 int event_fe_state; 53 int event_fe_state;
57 int event_unc_state; 54 int event_unc_state;
@@ -744,12 +741,124 @@ static int smsdvb_get_frontend(struct dvb_frontend *fe)
744 struct dtv_frontend_properties *fep = &fe->dtv_property_cache; 741 struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
745 struct smsdvb_client_t *client = 742 struct smsdvb_client_t *client =
746 container_of(fe, struct smsdvb_client_t, frontend); 743 container_of(fe, struct smsdvb_client_t, frontend);
744 struct smscore_device_t *coredev = client->coredev;
745 struct TRANSMISSION_STATISTICS_S *td =
746 &client->sms_stat_dvb.TransmissionData;
747 747
748 sms_debug(""); 748 switch (smscore_get_device_mode(coredev)) {
749 case DEVICE_MODE_DVBT:
750 case DEVICE_MODE_DVBT_BDA:
751 fep->frequency = td->Frequency;
752
753 switch (td->Bandwidth) {
754 case 6:
755 fep->bandwidth_hz = 6000000;
756 break;
757 case 7:
758 fep->bandwidth_hz = 7000000;
759 break;
760 case 8:
761 fep->bandwidth_hz = 8000000;
762 break;
763 }
764
765 switch (td->TransmissionMode) {
766 case 2:
767 fep->transmission_mode = TRANSMISSION_MODE_2K;
768 break;
769 case 8:
770 fep->transmission_mode = TRANSMISSION_MODE_8K;
771 }
772
773 switch (td->GuardInterval) {
774 case 0:
775 fep->guard_interval = GUARD_INTERVAL_1_32;
776 break;
777 case 1:
778 fep->guard_interval = GUARD_INTERVAL_1_16;
779 break;
780 case 2:
781 fep->guard_interval = GUARD_INTERVAL_1_8;
782 break;
783 case 3:
784 fep->guard_interval = GUARD_INTERVAL_1_4;
785 break;
786 }
787
788 switch (td->CodeRate) {
789 case 0:
790 fep->code_rate_HP = FEC_1_2;
791 break;
792 case 1:
793 fep->code_rate_HP = FEC_2_3;
794 break;
795 case 2:
796 fep->code_rate_HP = FEC_3_4;
797 break;
798 case 3:
799 fep->code_rate_HP = FEC_5_6;
800 break;
801 case 4:
802 fep->code_rate_HP = FEC_7_8;
803 break;
804 }
805
806 switch (td->LPCodeRate) {
807 case 0:
808 fep->code_rate_LP = FEC_1_2;
809 break;
810 case 1:
811 fep->code_rate_LP = FEC_2_3;
812 break;
813 case 2:
814 fep->code_rate_LP = FEC_3_4;
815 break;
816 case 3:
817 fep->code_rate_LP = FEC_5_6;
818 break;
819 case 4:
820 fep->code_rate_LP = FEC_7_8;
821 break;
822 }
823
824 switch (td->Constellation) {
825 case 0:
826 fep->modulation = QPSK;
827 break;
828 case 1:
829 fep->modulation = QAM_16;
830 break;
831 case 2:
832 fep->modulation = QAM_64;
833 break;
834 }
835
836 switch (td->Hierarchy) {
837 case 0:
838 fep->hierarchy = HIERARCHY_NONE;
839 break;
840 case 1:
841 fep->hierarchy = HIERARCHY_1;
842 break;
843 case 2:
844 fep->hierarchy = HIERARCHY_2;
845 break;
846 case 3:
847 fep->hierarchy = HIERARCHY_4;
848 break;
849 }
749 850
750 /* todo: */ 851 fep->inversion = INVERSION_AUTO;
751 memcpy(fep, &client->fe_params, 852 break;
752 sizeof(struct dtv_frontend_properties)); 853 case DEVICE_MODE_ISDBT:
854 case DEVICE_MODE_ISDBT_BDA:
855 fep->frequency = td->Frequency;
856 fep->bandwidth_hz = 6000000;
857 /* todo: retrive the other parameters */
858 break;
859 default:
860 return -EINVAL;
861 }
753 862
754 return 0; 863 return 0;
755} 864}
@@ -872,11 +981,11 @@ static int smsdvb_hotplug(struct smscore_device_t *coredev,
872 switch (smscore_get_device_mode(coredev)) { 981 switch (smscore_get_device_mode(coredev)) {
873 case DEVICE_MODE_DVBT: 982 case DEVICE_MODE_DVBT:
874 case DEVICE_MODE_DVBT_BDA: 983 case DEVICE_MODE_DVBT_BDA:
875 smsdvb_fe_ops.delsys[0] = SYS_DVBT; 984 client->frontend.ops.delsys[0] = SYS_DVBT;
876 break; 985 break;
877 case DEVICE_MODE_ISDBT: 986 case DEVICE_MODE_ISDBT:
878 case DEVICE_MODE_ISDBT_BDA: 987 case DEVICE_MODE_ISDBT_BDA:
879 smsdvb_fe_ops.delsys[0] = SYS_ISDBT; 988 client->frontend.ops.delsys[0] = SYS_ISDBT;
880 break; 989 break;
881 } 990 }
882 991
diff --git a/drivers/media/video/davinci/isif.c b/drivers/media/video/davinci/isif.c
index 1e63852374be..5278fe7d6d0c 100644
--- a/drivers/media/video/davinci/isif.c
+++ b/drivers/media/video/davinci/isif.c
@@ -34,6 +34,7 @@
34#include <linux/videodev2.h> 34#include <linux/videodev2.h>
35#include <linux/clk.h> 35#include <linux/clk.h>
36#include <linux/err.h> 36#include <linux/err.h>
37#include <linux/module.h>
37 38
38#include <mach/mux.h> 39#include <mach/mux.h>
39 40
diff --git a/drivers/media/video/uvc/uvc_video.c b/drivers/media/video/uvc/uvc_video.c
index c7e69b8f81c9..4a44f9a1bae0 100644
--- a/drivers/media/video/uvc/uvc_video.c
+++ b/drivers/media/video/uvc/uvc_video.c
@@ -611,9 +611,11 @@ void uvc_video_clock_update(struct uvc_streaming *stream,
611 delta_stc = buf->pts - (1UL << 31); 611 delta_stc = buf->pts - (1UL << 31);
612 x1 = first->dev_stc - delta_stc; 612 x1 = first->dev_stc - delta_stc;
613 x2 = last->dev_stc - delta_stc; 613 x2 = last->dev_stc - delta_stc;
614 if (x1 == x2)
615 goto done;
616
614 y1 = (first->dev_sof + 2048) << 16; 617 y1 = (first->dev_sof + 2048) << 16;
615 y2 = (last->dev_sof + 2048) << 16; 618 y2 = (last->dev_sof + 2048) << 16;
616
617 if (y2 < y1) 619 if (y2 < y1)
618 y2 += 2048 << 16; 620 y2 += 2048 << 16;
619 621
@@ -631,14 +633,16 @@ void uvc_video_clock_update(struct uvc_streaming *stream,
631 x1, x2, y1, y2, clock->sof_offset); 633 x1, x2, y1, y2, clock->sof_offset);
632 634
633 /* Second step, SOF to host clock conversion. */ 635 /* Second step, SOF to host clock conversion. */
634 ts = timespec_sub(last->host_ts, first->host_ts);
635 x1 = (uvc_video_clock_host_sof(first) + 2048) << 16; 636 x1 = (uvc_video_clock_host_sof(first) + 2048) << 16;
636 x2 = (uvc_video_clock_host_sof(last) + 2048) << 16; 637 x2 = (uvc_video_clock_host_sof(last) + 2048) << 16;
637 y1 = NSEC_PER_SEC;
638 y2 = (ts.tv_sec + 1) * NSEC_PER_SEC + ts.tv_nsec;
639
640 if (x2 < x1) 638 if (x2 < x1)
641 x2 += 2048 << 16; 639 x2 += 2048 << 16;
640 if (x1 == x2)
641 goto done;
642
643 ts = timespec_sub(last->host_ts, first->host_ts);
644 y1 = NSEC_PER_SEC;
645 y2 = (ts.tv_sec + 1) * NSEC_PER_SEC + ts.tv_nsec;
642 646
643 /* Interpolated and host SOF timestamps can wrap around at slightly 647 /* Interpolated and host SOF timestamps can wrap around at slightly
644 * different times. Handle this by adding or removing 2048 to or from 648 * different times. Handle this by adding or removing 2048 to or from
diff --git a/drivers/mfd/ab8500-core.c b/drivers/mfd/ab8500-core.c
index 53e2a80f42fa..d295941c9a3d 100644
--- a/drivers/mfd/ab8500-core.c
+++ b/drivers/mfd/ab8500-core.c
@@ -956,11 +956,12 @@ int __devinit ab8500_init(struct ab8500 *ab8500)
956 return ret; 956 return ret;
957 957
958out_freeirq: 958out_freeirq:
959 if (ab8500->irq_base) { 959 if (ab8500->irq_base)
960 free_irq(ab8500->irq, ab8500); 960 free_irq(ab8500->irq, ab8500);
961out_removeirq: 961out_removeirq:
962 if (ab8500->irq_base)
962 ab8500_irq_remove(ab8500); 963 ab8500_irq_remove(ab8500);
963 } 964
964 return ret; 965 return ret;
965} 966}
966 967
diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c
index 0f5922812bff..411f523d4878 100644
--- a/drivers/mfd/mfd-core.c
+++ b/drivers/mfd/mfd-core.c
@@ -123,7 +123,7 @@ static int mfd_add_device(struct device *parent, int id,
123 } 123 }
124 124
125 if (!cell->ignore_resource_conflicts) { 125 if (!cell->ignore_resource_conflicts) {
126 ret = acpi_check_resource_conflict(res); 126 ret = acpi_check_resource_conflict(&res[r]);
127 if (ret) 127 if (ret)
128 goto fail_res; 128 goto fail_res;
129 } 129 }
diff --git a/drivers/mfd/s5m-core.c b/drivers/mfd/s5m-core.c
index e075c113eec6..caadabeed8e9 100644
--- a/drivers/mfd/s5m-core.c
+++ b/drivers/mfd/s5m-core.c
@@ -105,7 +105,7 @@ static int s5m87xx_i2c_probe(struct i2c_client *i2c,
105 s5m87xx->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR); 105 s5m87xx->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR);
106 i2c_set_clientdata(s5m87xx->rtc, s5m87xx); 106 i2c_set_clientdata(s5m87xx->rtc, s5m87xx);
107 107
108 if (pdata->cfg_pmic_irq) 108 if (pdata && pdata->cfg_pmic_irq)
109 pdata->cfg_pmic_irq(); 109 pdata->cfg_pmic_irq();
110 110
111 s5m_irq_init(s5m87xx); 111 s5m_irq_init(s5m87xx);
diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
index 01cf5012a08f..4392f6bca156 100644
--- a/drivers/mfd/tps65910.c
+++ b/drivers/mfd/tps65910.c
@@ -168,7 +168,7 @@ static int tps65910_i2c_probe(struct i2c_client *i2c,
168 goto err; 168 goto err;
169 169
170 init_data->irq = pmic_plat_data->irq; 170 init_data->irq = pmic_plat_data->irq;
171 init_data->irq_base = pmic_plat_data->irq; 171 init_data->irq_base = pmic_plat_data->irq_base;
172 172
173 tps65910_gpio_init(tps65910, pmic_plat_data->gpio_base); 173 tps65910_gpio_init(tps65910, pmic_plat_data->gpio_base);
174 174
diff --git a/drivers/mfd/tps65912-core.c b/drivers/mfd/tps65912-core.c
index 5fec23a9ac03..74fd8cb5f372 100644
--- a/drivers/mfd/tps65912-core.c
+++ b/drivers/mfd/tps65912-core.c
@@ -151,7 +151,7 @@ int tps65912_device_init(struct tps65912 *tps65912)
151 goto err; 151 goto err;
152 152
153 init_data->irq = pmic_plat_data->irq; 153 init_data->irq = pmic_plat_data->irq;
154 init_data->irq_base = pmic_plat_data->irq; 154 init_data->irq_base = pmic_plat_data->irq_base;
155 ret = tps65912_irq_init(tps65912, init_data->irq, init_data); 155 ret = tps65912_irq_init(tps65912, init_data->irq, init_data);
156 if (ret < 0) 156 if (ret < 0)
157 goto err; 157 goto err;
diff --git a/drivers/mfd/wm8350-irq.c b/drivers/mfd/wm8350-irq.c
index 8a1fafd0bf7d..9fd01bf63c51 100644
--- a/drivers/mfd/wm8350-irq.c
+++ b/drivers/mfd/wm8350-irq.c
@@ -496,7 +496,6 @@ int wm8350_irq_init(struct wm8350 *wm8350, int irq,
496 496
497 mutex_init(&wm8350->irq_lock); 497 mutex_init(&wm8350->irq_lock);
498 wm8350->chip_irq = irq; 498 wm8350->chip_irq = irq;
499 wm8350->irq_base = pdata->irq_base;
500 499
501 if (pdata && pdata->irq_base > 0) 500 if (pdata && pdata->irq_base > 0)
502 irq_base = pdata->irq_base; 501 irq_base = pdata->irq_base;
diff --git a/drivers/mfd/wm8994-core.c b/drivers/mfd/wm8994-core.c
index f117e7fb9321..a04b3c108c8c 100644
--- a/drivers/mfd/wm8994-core.c
+++ b/drivers/mfd/wm8994-core.c
@@ -256,6 +256,20 @@ static int wm8994_suspend(struct device *dev)
256 break; 256 break;
257 } 257 }
258 258
259 switch (wm8994->type) {
260 case WM1811:
261 ret = wm8994_reg_read(wm8994, WM8994_ANTIPOP_2);
262 if (ret < 0) {
263 dev_err(dev, "Failed to read jackdet: %d\n", ret);
264 } else if (ret & WM1811_JACKDET_MODE_MASK) {
265 dev_dbg(dev, "CODEC still active, ignoring suspend\n");
266 return 0;
267 }
268 break;
269 default:
270 break;
271 }
272
259 /* Disable LDO pulldowns while the device is suspended if we 273 /* Disable LDO pulldowns while the device is suspended if we
260 * don't know that something will be driving them. */ 274 * don't know that something will be driving them. */
261 if (!wm8994->ldo_ena_always_driven) 275 if (!wm8994->ldo_ena_always_driven)
diff --git a/drivers/mfd/wm8994-regmap.c b/drivers/mfd/wm8994-regmap.c
index c598ae69b8ff..bc0c5096539a 100644
--- a/drivers/mfd/wm8994-regmap.c
+++ b/drivers/mfd/wm8994-regmap.c
@@ -806,6 +806,7 @@ static bool wm1811_readable_register(struct device *dev, unsigned int reg)
806 case WM8994_DC_SERVO_2: 806 case WM8994_DC_SERVO_2:
807 case WM8994_DC_SERVO_READBACK: 807 case WM8994_DC_SERVO_READBACK:
808 case WM8994_DC_SERVO_4: 808 case WM8994_DC_SERVO_4:
809 case WM8994_DC_SERVO_4E:
809 case WM8994_ANALOGUE_HP_1: 810 case WM8994_ANALOGUE_HP_1:
810 case WM8958_MIC_DETECT_1: 811 case WM8958_MIC_DETECT_1:
811 case WM8958_MIC_DETECT_2: 812 case WM8958_MIC_DETECT_2:
diff --git a/drivers/misc/c2port/core.c b/drivers/misc/c2port/core.c
index 19fc7c1cb428..f428d86bfc10 100644
--- a/drivers/misc/c2port/core.c
+++ b/drivers/misc/c2port/core.c
@@ -984,9 +984,9 @@ static int __init c2port_init(void)
984 " - (C) 2007 Rodolfo Giometti\n"); 984 " - (C) 2007 Rodolfo Giometti\n");
985 985
986 c2port_class = class_create(THIS_MODULE, "c2port"); 986 c2port_class = class_create(THIS_MODULE, "c2port");
987 if (!c2port_class) { 987 if (IS_ERR(c2port_class)) {
988 printk(KERN_ERR "c2port: failed to allocate class\n"); 988 printk(KERN_ERR "c2port: failed to allocate class\n");
989 return -ENOMEM; 989 return PTR_ERR(c2port_class);
990 } 990 }
991 c2port_class->dev_attrs = c2port_attrs; 991 c2port_class->dev_attrs = c2port_attrs;
992 992
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 690255c7d4dc..132378b89d76 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -2068,6 +2068,9 @@ static int mmc_rescan_try_freq(struct mmc_host *host, unsigned freq)
2068 */ 2068 */
2069 mmc_hw_reset_for_init(host); 2069 mmc_hw_reset_for_init(host);
2070 2070
2071 /* Initialization should be done at 3.3 V I/O voltage. */
2072 mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, 0);
2073
2071 /* 2074 /*
2072 * sdio_reset sends CMD52 to reset card. Since we do not know 2075 * sdio_reset sends CMD52 to reset card. Since we do not know
2073 * if the card is being re-initialized, just send it. CMD52 2076 * if the card is being re-initialized, just send it. CMD52
diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
index 30055f2b0d44..c3704e293a7b 100644
--- a/drivers/mmc/core/host.c
+++ b/drivers/mmc/core/host.c
@@ -238,10 +238,10 @@ static inline void mmc_host_clk_init(struct mmc_host *host)
238 /* Hold MCI clock for 8 cycles by default */ 238 /* Hold MCI clock for 8 cycles by default */
239 host->clk_delay = 8; 239 host->clk_delay = 8;
240 /* 240 /*
241 * Default clock gating delay is 200ms. 241 * Default clock gating delay is 0ms to avoid wasting power.
242 * This value can be tuned by writing into sysfs entry. 242 * This value can be tuned by writing into sysfs entry.
243 */ 243 */
244 host->clkgate_delay = 200; 244 host->clkgate_delay = 0;
245 host->clk_gated = false; 245 host->clk_gated = false;
246 INIT_DELAYED_WORK(&host->clk_gate_work, mmc_host_clk_gate_work); 246 INIT_DELAYED_WORK(&host->clk_gate_work, mmc_host_clk_gate_work);
247 spin_lock_init(&host->clk_lock); 247 spin_lock_init(&host->clk_lock);
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index a48066344fa8..2b9ed1401dc4 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -816,6 +816,9 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr,
816 if (!mmc_host_is_spi(host)) 816 if (!mmc_host_is_spi(host))
817 mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN); 817 mmc_set_bus_mode(host, MMC_BUSMODE_OPENDRAIN);
818 818
819 /* Initialization should be done at 3.3 V I/O voltage. */
820 mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, 0);
821
819 /* 822 /*
820 * Since we're changing the OCR value, we seem to 823 * Since we're changing the OCR value, we seem to
821 * need to tell some cards to go back to the idle 824 * need to tell some cards to go back to the idle
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index 5017f9354ce2..c272c6868ecf 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -911,6 +911,9 @@ static int mmc_sd_init_card(struct mmc_host *host, u32 ocr,
911 BUG_ON(!host); 911 BUG_ON(!host);
912 WARN_ON(!host->claimed); 912 WARN_ON(!host->claimed);
913 913
914 /* The initialization should be done at 3.3 V I/O voltage. */
915 mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, 0);
916
914 err = mmc_sd_get_cid(host, ocr, cid, &rocr); 917 err = mmc_sd_get_cid(host, ocr, cid, &rocr);
915 if (err) 918 if (err)
916 return err; 919 return err;
@@ -1156,11 +1159,6 @@ int mmc_attach_sd(struct mmc_host *host)
1156 BUG_ON(!host); 1159 BUG_ON(!host);
1157 WARN_ON(!host->claimed); 1160 WARN_ON(!host->claimed);
1158 1161
1159 /* Make sure we are at 3.3V signalling voltage */
1160 err = mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, false);
1161 if (err)
1162 return err;
1163
1164 /* Disable preset value enable if already set since last time */ 1162 /* Disable preset value enable if already set since last time */
1165 if (host->ops->enable_preset_value) { 1163 if (host->ops->enable_preset_value) {
1166 mmc_host_clk_hold(host); 1164 mmc_host_clk_hold(host);
diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c
index 12cde6ee17f5..2c7c83f832d2 100644
--- a/drivers/mmc/core/sdio.c
+++ b/drivers/mmc/core/sdio.c
@@ -585,6 +585,9 @@ static int mmc_sdio_init_card(struct mmc_host *host, u32 ocr,
585 * Inform the card of the voltage 585 * Inform the card of the voltage
586 */ 586 */
587 if (!powered_resume) { 587 if (!powered_resume) {
588 /* The initialization should be done at 3.3 V I/O voltage. */
589 mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, 0);
590
588 err = mmc_send_io_op_cond(host, host->ocr, &ocr); 591 err = mmc_send_io_op_cond(host, host->ocr, &ocr);
589 if (err) 592 if (err)
590 goto err; 593 goto err;
@@ -996,6 +999,11 @@ static int mmc_sdio_power_restore(struct mmc_host *host)
996 * With these steps taken, mmc_select_voltage() is also required to 999 * With these steps taken, mmc_select_voltage() is also required to
997 * restore the correct voltage setting of the card. 1000 * restore the correct voltage setting of the card.
998 */ 1001 */
1002
1003 /* The initialization should be done at 3.3 V I/O voltage. */
1004 if (!mmc_card_keep_power(host))
1005 mmc_set_signal_voltage(host, MMC_SIGNAL_VOLTAGE_330, 0);
1006
999 sdio_reset(host); 1007 sdio_reset(host);
1000 mmc_go_idle(host); 1008 mmc_go_idle(host);
1001 mmc_send_if_cond(host, host->ocr_avail); 1009 mmc_send_if_cond(host, host->ocr_avail);
diff --git a/drivers/mmc/host/atmel-mci.c b/drivers/mmc/host/atmel-mci.c
index 6985cdb0bb26..e4449a54ae8f 100644
--- a/drivers/mmc/host/atmel-mci.c
+++ b/drivers/mmc/host/atmel-mci.c
@@ -1948,12 +1948,12 @@ static bool atmci_filter(struct dma_chan *chan, void *slave)
1948 } 1948 }
1949} 1949}
1950 1950
1951static void atmci_configure_dma(struct atmel_mci *host) 1951static bool atmci_configure_dma(struct atmel_mci *host)
1952{ 1952{
1953 struct mci_platform_data *pdata; 1953 struct mci_platform_data *pdata;
1954 1954
1955 if (host == NULL) 1955 if (host == NULL)
1956 return; 1956 return false;
1957 1957
1958 pdata = host->pdev->dev.platform_data; 1958 pdata = host->pdev->dev.platform_data;
1959 1959
@@ -1970,12 +1970,15 @@ static void atmci_configure_dma(struct atmel_mci *host)
1970 host->dma.chan = 1970 host->dma.chan =
1971 dma_request_channel(mask, atmci_filter, pdata->dma_slave); 1971 dma_request_channel(mask, atmci_filter, pdata->dma_slave);
1972 } 1972 }
1973 if (!host->dma.chan) 1973 if (!host->dma.chan) {
1974 dev_notice(&host->pdev->dev, "DMA not available, using PIO\n"); 1974 dev_warn(&host->pdev->dev, "no DMA channel available\n");
1975 else 1975 return false;
1976 } else {
1976 dev_info(&host->pdev->dev, 1977 dev_info(&host->pdev->dev,
1977 "Using %s for DMA transfers\n", 1978 "Using %s for DMA transfers\n",
1978 dma_chan_name(host->dma.chan)); 1979 dma_chan_name(host->dma.chan));
1980 return true;
1981 }
1979} 1982}
1980 1983
1981static inline unsigned int atmci_get_version(struct atmel_mci *host) 1984static inline unsigned int atmci_get_version(struct atmel_mci *host)
@@ -2085,8 +2088,7 @@ static int __init atmci_probe(struct platform_device *pdev)
2085 2088
2086 /* Get MCI capabilities and set operations according to it */ 2089 /* Get MCI capabilities and set operations according to it */
2087 atmci_get_cap(host); 2090 atmci_get_cap(host);
2088 if (host->caps.has_dma) { 2091 if (host->caps.has_dma && atmci_configure_dma(host)) {
2089 dev_info(&pdev->dev, "using DMA\n");
2090 host->prepare_data = &atmci_prepare_data_dma; 2092 host->prepare_data = &atmci_prepare_data_dma;
2091 host->submit_data = &atmci_submit_data_dma; 2093 host->submit_data = &atmci_submit_data_dma;
2092 host->stop_transfer = &atmci_stop_transfer_dma; 2094 host->stop_transfer = &atmci_stop_transfer_dma;
@@ -2096,15 +2098,12 @@ static int __init atmci_probe(struct platform_device *pdev)
2096 host->submit_data = &atmci_submit_data_pdc; 2098 host->submit_data = &atmci_submit_data_pdc;
2097 host->stop_transfer = &atmci_stop_transfer_pdc; 2099 host->stop_transfer = &atmci_stop_transfer_pdc;
2098 } else { 2100 } else {
2099 dev_info(&pdev->dev, "no DMA, no PDC\n"); 2101 dev_info(&pdev->dev, "using PIO\n");
2100 host->prepare_data = &atmci_prepare_data; 2102 host->prepare_data = &atmci_prepare_data;
2101 host->submit_data = &atmci_submit_data; 2103 host->submit_data = &atmci_submit_data;
2102 host->stop_transfer = &atmci_stop_transfer; 2104 host->stop_transfer = &atmci_stop_transfer;
2103 } 2105 }
2104 2106
2105 if (host->caps.has_dma)
2106 atmci_configure_dma(host);
2107
2108 platform_set_drvdata(pdev, host); 2107 platform_set_drvdata(pdev, host);
2109 2108
2110 /* We need at least one slot to succeed */ 2109 /* We need at least one slot to succeed */
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
index 0d955ffaf44e..11e589cd8233 100644
--- a/drivers/mmc/host/mmci.c
+++ b/drivers/mmc/host/mmci.c
@@ -1271,12 +1271,13 @@ static int __devinit mmci_probe(struct amba_device *dev,
1271 /* 1271 /*
1272 * Block size can be up to 2048 bytes, but must be a power of two. 1272 * Block size can be up to 2048 bytes, but must be a power of two.
1273 */ 1273 */
1274 mmc->max_blk_size = 2048; 1274 mmc->max_blk_size = 1 << 11;
1275 1275
1276 /* 1276 /*
1277 * No limit on the number of blocks transferred. 1277 * Limit the number of blocks transferred so that we don't overflow
1278 * the maximum request size.
1278 */ 1279 */
1279 mmc->max_blk_count = mmc->max_req_size; 1280 mmc->max_blk_count = mmc->max_req_size >> 11;
1280 1281
1281 spin_lock_init(&host->lock); 1282 spin_lock_init(&host->lock);
1282 1283
diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
index d601e41af282..0be4e2013632 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -269,8 +269,9 @@ static void esdhc_writew_le(struct sdhci_host *host, u16 val, int reg)
269 imx_data->scratchpad = val; 269 imx_data->scratchpad = val;
270 return; 270 return;
271 case SDHCI_COMMAND: 271 case SDHCI_COMMAND:
272 if ((host->cmd->opcode == MMC_STOP_TRANSMISSION) 272 if ((host->cmd->opcode == MMC_STOP_TRANSMISSION ||
273 && (imx_data->flags & ESDHC_FLAG_MULTIBLK_NO_INT)) 273 host->cmd->opcode == MMC_SET_BLOCK_COUNT) &&
274 (imx_data->flags & ESDHC_FLAG_MULTIBLK_NO_INT))
274 val |= SDHCI_CMD_ABORTCMD; 275 val |= SDHCI_CMD_ABORTCMD;
275 276
276 if (is_imx6q_usdhc(imx_data)) { 277 if (is_imx6q_usdhc(imx_data)) {
diff --git a/drivers/net/caif/caif_hsi.c b/drivers/net/caif/caif_hsi.c
index 0a4fc62a381d..c998e1afebc6 100644
--- a/drivers/net/caif/caif_hsi.c
+++ b/drivers/net/caif/caif_hsi.c
@@ -978,7 +978,7 @@ static void cfhsi_setup(struct net_device *dev)
978 dev->netdev_ops = &cfhsi_ops; 978 dev->netdev_ops = &cfhsi_ops;
979 dev->type = ARPHRD_CAIF; 979 dev->type = ARPHRD_CAIF;
980 dev->flags = IFF_POINTOPOINT | IFF_NOARP; 980 dev->flags = IFF_POINTOPOINT | IFF_NOARP;
981 dev->mtu = CFHSI_MAX_PAYLOAD_SZ; 981 dev->mtu = CFHSI_MAX_CAIF_FRAME_SZ;
982 dev->tx_queue_len = 0; 982 dev->tx_queue_len = 0;
983 dev->destructor = free_netdev; 983 dev->destructor = free_netdev;
984 skb_queue_head_init(&cfhsi->qhead); 984 skb_queue_head_init(&cfhsi->qhead);
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index 1ff3c6df35a2..47a9bb2c813c 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -1710,7 +1710,7 @@ static irqreturn_t atl1c_intr(int irq, void *data)
1710 "atl1c hardware error (status = 0x%x)\n", 1710 "atl1c hardware error (status = 0x%x)\n",
1711 status & ISR_ERROR); 1711 status & ISR_ERROR);
1712 /* reset MAC */ 1712 /* reset MAC */
1713 adapter->work_event |= ATL1C_WORK_EVENT_RESET; 1713 set_bit(ATL1C_WORK_EVENT_RESET, &adapter->work_event);
1714 schedule_work(&adapter->common_task); 1714 schedule_work(&adapter->common_task);
1715 return IRQ_HANDLED; 1715 return IRQ_HANDLED;
1716 } 1716 }
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index 7aee46983be4..99389c8dda21 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -1934,7 +1934,7 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
1934 } 1934 }
1935 1935
1936 if (bp->port.pmf) 1936 if (bp->port.pmf)
1937 bnx2x_update_drv_flags(bp, DRV_FLAGS_DCB_CONFIGURED, 0); 1937 bnx2x_update_drv_flags(bp, 1 << DRV_FLAGS_DCB_CONFIGURED, 0);
1938 else 1938 else
1939 bnx2x__link_status_update(bp); 1939 bnx2x__link_status_update(bp);
1940 1940
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
index bf27c54ff2e0..4f40f7d7d8c6 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
@@ -1179,10 +1179,16 @@ static inline int bnx2x_alloc_rx_bds(struct bnx2x_fastpath *fp,
1179 */ 1179 */
1180static inline u8 bnx2x_stats_id(struct bnx2x_fastpath *fp) 1180static inline u8 bnx2x_stats_id(struct bnx2x_fastpath *fp)
1181{ 1181{
1182 if (!CHIP_IS_E1x(fp->bp)) 1182 struct bnx2x *bp = fp->bp;
1183 if (!CHIP_IS_E1x(bp)) {
1184#ifdef BCM_CNIC
1185 /* there are special statistics counters for FCoE 136..140 */
1186 if (IS_FCOE_FP(fp))
1187 return bp->cnic_base_cl_id + (bp->pf_num >> 1);
1188#endif
1183 return fp->cl_id; 1189 return fp->cl_id;
1184 else 1190 }
1185 return fp->cl_id + BP_PORT(fp->bp) * FP_SB_MAX_E1x; 1191 return fp->cl_id + BP_PORT(bp) * FP_SB_MAX_E1x;
1186} 1192}
1187 1193
1188static inline void bnx2x_init_vlan_mac_fp_objs(struct bnx2x_fastpath *fp, 1194static inline void bnx2x_init_vlan_mac_fp_objs(struct bnx2x_fastpath *fp,
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
index 5051cf3deb20..6d82ade4c31c 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_dcb.c
@@ -735,7 +735,9 @@ void bnx2x_dcbx_set_params(struct bnx2x *bp, u32 state)
735 bp->dcbx_error); 735 bp->dcbx_error);
736 736
737 /* mark DCBX result for PMF migration */ 737 /* mark DCBX result for PMF migration */
738 bnx2x_update_drv_flags(bp, DRV_FLAGS_DCB_CONFIGURED, 1); 738 bnx2x_update_drv_flags(bp,
739 1 << DRV_FLAGS_DCB_CONFIGURED,
740 1);
739#ifdef BCM_DCBNL 741#ifdef BCM_DCBNL
740 /* 742 /*
741 * Add new app tlvs to dcbnl 743 * Add new app tlvs to dcbnl
@@ -1020,7 +1022,7 @@ void bnx2x_dcbx_init(struct bnx2x *bp)
1020 DP(NETIF_MSG_LINK, "dcbx_lldp_params_offset 0x%x\n", 1022 DP(NETIF_MSG_LINK, "dcbx_lldp_params_offset 0x%x\n",
1021 dcbx_lldp_params_offset); 1023 dcbx_lldp_params_offset);
1022 1024
1023 bnx2x_update_drv_flags(bp, DRV_FLAGS_DCB_CONFIGURED, 0); 1025 bnx2x_update_drv_flags(bp, 1 << DRV_FLAGS_DCB_CONFIGURED, 0);
1024 1026
1025 if (SHMEM_LLDP_DCBX_PARAMS_NONE != dcbx_lldp_params_offset) { 1027 if (SHMEM_LLDP_DCBX_PARAMS_NONE != dcbx_lldp_params_offset) {
1026 bnx2x_dcbx_admin_mib_updated_params(bp, 1028 bnx2x_dcbx_admin_mib_updated_params(bp,
@@ -1857,7 +1859,7 @@ void bnx2x_dcbx_pmf_update(struct bnx2x *bp)
1857 * read it from shmem and update bp and netdev accordingly 1859 * read it from shmem and update bp and netdev accordingly
1858 */ 1860 */
1859 if (SHMEM2_HAS(bp, drv_flags) && 1861 if (SHMEM2_HAS(bp, drv_flags) &&
1860 GET_FLAGS(SHMEM2_RD(bp, drv_flags), DRV_FLAGS_DCB_CONFIGURED)) { 1862 GET_FLAGS(SHMEM2_RD(bp, drv_flags), 1 << DRV_FLAGS_DCB_CONFIGURED)) {
1861 /* Read neg results if dcbx is in the FW */ 1863 /* Read neg results if dcbx is in the FW */
1862 if (bnx2x_dcbx_read_shmem_neg_results(bp)) 1864 if (bnx2x_dcbx_read_shmem_neg_results(bp))
1863 return; 1865 return;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
index 254521319150..b69f8762b339 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
@@ -10824,38 +10824,36 @@ do { \
10824 10824
10825int bnx2x_init_firmware(struct bnx2x *bp) 10825int bnx2x_init_firmware(struct bnx2x *bp)
10826{ 10826{
10827 const char *fw_file_name;
10827 struct bnx2x_fw_file_hdr *fw_hdr; 10828 struct bnx2x_fw_file_hdr *fw_hdr;
10828 int rc; 10829 int rc;
10829 10830
10831 if (bp->firmware)
10832 return 0;
10830 10833
10831 if (!bp->firmware) { 10834 if (CHIP_IS_E1(bp))
10832 const char *fw_file_name; 10835 fw_file_name = FW_FILE_NAME_E1;
10833 10836 else if (CHIP_IS_E1H(bp))
10834 if (CHIP_IS_E1(bp)) 10837 fw_file_name = FW_FILE_NAME_E1H;
10835 fw_file_name = FW_FILE_NAME_E1; 10838 else if (!CHIP_IS_E1x(bp))
10836 else if (CHIP_IS_E1H(bp)) 10839 fw_file_name = FW_FILE_NAME_E2;
10837 fw_file_name = FW_FILE_NAME_E1H; 10840 else {
10838 else if (!CHIP_IS_E1x(bp)) 10841 BNX2X_ERR("Unsupported chip revision\n");
10839 fw_file_name = FW_FILE_NAME_E2; 10842 return -EINVAL;
10840 else { 10843 }
10841 BNX2X_ERR("Unsupported chip revision\n"); 10844 BNX2X_DEV_INFO("Loading %s\n", fw_file_name);
10842 return -EINVAL;
10843 }
10844 BNX2X_DEV_INFO("Loading %s\n", fw_file_name);
10845 10845
10846 rc = request_firmware(&bp->firmware, fw_file_name, 10846 rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev);
10847 &bp->pdev->dev); 10847 if (rc) {
10848 if (rc) { 10848 BNX2X_ERR("Can't load firmware file %s\n",
10849 BNX2X_ERR("Can't load firmware file %s\n", 10849 fw_file_name);
10850 fw_file_name); 10850 goto request_firmware_exit;
10851 goto request_firmware_exit; 10851 }
10852 }
10853 10852
10854 rc = bnx2x_check_firmware(bp); 10853 rc = bnx2x_check_firmware(bp);
10855 if (rc) { 10854 if (rc) {
10856 BNX2X_ERR("Corrupt firmware file %s\n", fw_file_name); 10855 BNX2X_ERR("Corrupt firmware file %s\n", fw_file_name);
10857 goto request_firmware_exit; 10856 goto request_firmware_exit;
10858 }
10859 } 10857 }
10860 10858
10861 fw_hdr = (struct bnx2x_fw_file_hdr *)bp->firmware->data; 10859 fw_hdr = (struct bnx2x_fw_file_hdr *)bp->firmware->data;
@@ -10901,6 +10899,7 @@ init_ops_alloc_err:
10901 kfree(bp->init_data); 10899 kfree(bp->init_data);
10902request_firmware_exit: 10900request_firmware_exit:
10903 release_firmware(bp->firmware); 10901 release_firmware(bp->firmware);
10902 bp->firmware = NULL;
10904 10903
10905 return rc; 10904 return rc;
10906} 10905}
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
index cb6339c35571..94110e9ce51d 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
@@ -5601,7 +5601,7 @@ static inline int bnx2x_func_send_start(struct bnx2x *bp,
5601 5601
5602 /* Fill the ramrod data with provided parameters */ 5602 /* Fill the ramrod data with provided parameters */
5603 rdata->function_mode = cpu_to_le16(start_params->mf_mode); 5603 rdata->function_mode = cpu_to_le16(start_params->mf_mode);
5604 rdata->sd_vlan_tag = start_params->sd_vlan_tag; 5604 rdata->sd_vlan_tag = cpu_to_le16(start_params->sd_vlan_tag);
5605 rdata->path_id = BP_PATH(bp); 5605 rdata->path_id = BP_PATH(bp);
5606 rdata->network_cos_mode = start_params->network_cos_mode; 5606 rdata->network_cos_mode = start_params->network_cos_mode;
5607 5607
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c
index 1adef266fcd5..a766b25eec5f 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c
@@ -554,23 +554,11 @@ static void bnx2x_bmac_stats_update(struct bnx2x *bp)
554 UPDATE_STAT64(tx_stat_gtufl, tx_stat_mac_ufl); 554 UPDATE_STAT64(tx_stat_gtufl, tx_stat_mac_ufl);
555 555
556 /* collect PFC stats */ 556 /* collect PFC stats */
557 DIFF_64(diff.hi, new->tx_stat_gtpp_hi,
558 pstats->pfc_frames_tx_hi,
559 diff.lo, new->tx_stat_gtpp_lo,
560 pstats->pfc_frames_tx_lo);
561 pstats->pfc_frames_tx_hi = new->tx_stat_gtpp_hi; 557 pstats->pfc_frames_tx_hi = new->tx_stat_gtpp_hi;
562 pstats->pfc_frames_tx_lo = new->tx_stat_gtpp_lo; 558 pstats->pfc_frames_tx_lo = new->tx_stat_gtpp_lo;
563 ADD_64(pstats->pfc_frames_tx_hi, diff.hi,
564 pstats->pfc_frames_tx_lo, diff.lo);
565 559
566 DIFF_64(diff.hi, new->rx_stat_grpp_hi,
567 pstats->pfc_frames_rx_hi,
568 diff.lo, new->rx_stat_grpp_lo,
569 pstats->pfc_frames_rx_lo);
570 pstats->pfc_frames_rx_hi = new->rx_stat_grpp_hi; 560 pstats->pfc_frames_rx_hi = new->rx_stat_grpp_hi;
571 pstats->pfc_frames_rx_lo = new->rx_stat_grpp_lo; 561 pstats->pfc_frames_rx_lo = new->rx_stat_grpp_lo;
572 ADD_64(pstats->pfc_frames_rx_hi, diff.hi,
573 pstats->pfc_frames_rx_lo, diff.lo);
574 } 562 }
575 563
576 estats->pause_frames_received_hi = 564 estats->pause_frames_received_hi =
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index a1f2e0fed78b..35c2a202d67a 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -5352,7 +5352,7 @@ static void tg3_tx(struct tg3_napi *tnapi)
5352 } 5352 }
5353 } 5353 }
5354 5354
5355 netdev_completed_queue(tp->dev, pkts_compl, bytes_compl); 5355 netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
5356 5356
5357 tnapi->tx_cons = sw_idx; 5357 tnapi->tx_cons = sw_idx;
5358 5358
@@ -6793,7 +6793,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
6793 } 6793 }
6794 6794
6795 skb_tx_timestamp(skb); 6795 skb_tx_timestamp(skb);
6796 netdev_sent_queue(tp->dev, skb->len); 6796 netdev_tx_sent_queue(txq, skb->len);
6797 6797
6798 /* Packets are ready, update Tx producer idx local and on card. */ 6798 /* Packets are ready, update Tx producer idx local and on card. */
6799 tw32_tx_mbox(tnapi->prodmbox, entry); 6799 tw32_tx_mbox(tnapi->prodmbox, entry);
@@ -7275,8 +7275,8 @@ static void tg3_free_rings(struct tg3 *tp)
7275 7275
7276 dev_kfree_skb_any(skb); 7276 dev_kfree_skb_any(skb);
7277 } 7277 }
7278 netdev_tx_reset_queue(netdev_get_tx_queue(tp->dev, j));
7278 } 7279 }
7279 netdev_reset_queue(tp->dev);
7280} 7280}
7281 7281
7282/* Initialize tx/rx rings for packet processing. 7282/* Initialize tx/rx rings for packet processing.
@@ -7886,10 +7886,8 @@ static int tg3_chip_reset(struct tg3 *tp)
7886 return 0; 7886 return 0;
7887} 7887}
7888 7888
7889static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *, 7889static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *);
7890 struct rtnl_link_stats64 *); 7890static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *);
7891static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *,
7892 struct tg3_ethtool_stats *);
7893 7891
7894/* tp->lock is held. */ 7892/* tp->lock is held. */
7895static int tg3_halt(struct tg3 *tp, int kind, int silent) 7893static int tg3_halt(struct tg3 *tp, int kind, int silent)
@@ -7910,7 +7908,7 @@ static int tg3_halt(struct tg3 *tp, int kind, int silent)
7910 7908
7911 if (tp->hw_stats) { 7909 if (tp->hw_stats) {
7912 /* Save the stats across chip resets... */ 7910 /* Save the stats across chip resets... */
7913 tg3_get_stats64(tp->dev, &tp->net_stats_prev), 7911 tg3_get_nstats(tp, &tp->net_stats_prev),
7914 tg3_get_estats(tp, &tp->estats_prev); 7912 tg3_get_estats(tp, &tp->estats_prev);
7915 7913
7916 /* And make sure the next sample is new data */ 7914 /* And make sure the next sample is new data */
@@ -9847,7 +9845,7 @@ static inline u64 get_stat64(tg3_stat64_t *val)
9847 return ((u64)val->high << 32) | ((u64)val->low); 9845 return ((u64)val->high << 32) | ((u64)val->low);
9848} 9846}
9849 9847
9850static u64 calc_crc_errors(struct tg3 *tp) 9848static u64 tg3_calc_crc_errors(struct tg3 *tp)
9851{ 9849{
9852 struct tg3_hw_stats *hw_stats = tp->hw_stats; 9850 struct tg3_hw_stats *hw_stats = tp->hw_stats;
9853 9851
@@ -9856,14 +9854,12 @@ static u64 calc_crc_errors(struct tg3 *tp)
9856 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { 9854 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) {
9857 u32 val; 9855 u32 val;
9858 9856
9859 spin_lock_bh(&tp->lock);
9860 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { 9857 if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) {
9861 tg3_writephy(tp, MII_TG3_TEST1, 9858 tg3_writephy(tp, MII_TG3_TEST1,
9862 val | MII_TG3_TEST1_CRC_EN); 9859 val | MII_TG3_TEST1_CRC_EN);
9863 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); 9860 tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val);
9864 } else 9861 } else
9865 val = 0; 9862 val = 0;
9866 spin_unlock_bh(&tp->lock);
9867 9863
9868 tp->phy_crc_errors += val; 9864 tp->phy_crc_errors += val;
9869 9865
@@ -9877,14 +9873,13 @@ static u64 calc_crc_errors(struct tg3 *tp)
9877 estats->member = old_estats->member + \ 9873 estats->member = old_estats->member + \
9878 get_stat64(&hw_stats->member) 9874 get_stat64(&hw_stats->member)
9879 9875
9880static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp, 9876static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats)
9881 struct tg3_ethtool_stats *estats)
9882{ 9877{
9883 struct tg3_ethtool_stats *old_estats = &tp->estats_prev; 9878 struct tg3_ethtool_stats *old_estats = &tp->estats_prev;
9884 struct tg3_hw_stats *hw_stats = tp->hw_stats; 9879 struct tg3_hw_stats *hw_stats = tp->hw_stats;
9885 9880
9886 if (!hw_stats) 9881 if (!hw_stats)
9887 return old_estats; 9882 return;
9888 9883
9889 ESTAT_ADD(rx_octets); 9884 ESTAT_ADD(rx_octets);
9890 ESTAT_ADD(rx_fragments); 9885 ESTAT_ADD(rx_fragments);
@@ -9963,20 +9958,13 @@ static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp,
9963 ESTAT_ADD(nic_tx_threshold_hit); 9958 ESTAT_ADD(nic_tx_threshold_hit);
9964 9959
9965 ESTAT_ADD(mbuf_lwm_thresh_hit); 9960 ESTAT_ADD(mbuf_lwm_thresh_hit);
9966
9967 return estats;
9968} 9961}
9969 9962
9970static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, 9963static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats)
9971 struct rtnl_link_stats64 *stats)
9972{ 9964{
9973 struct tg3 *tp = netdev_priv(dev);
9974 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; 9965 struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev;
9975 struct tg3_hw_stats *hw_stats = tp->hw_stats; 9966 struct tg3_hw_stats *hw_stats = tp->hw_stats;
9976 9967
9977 if (!hw_stats)
9978 return old_stats;
9979
9980 stats->rx_packets = old_stats->rx_packets + 9968 stats->rx_packets = old_stats->rx_packets +
9981 get_stat64(&hw_stats->rx_ucast_packets) + 9969 get_stat64(&hw_stats->rx_ucast_packets) +
9982 get_stat64(&hw_stats->rx_mcast_packets) + 9970 get_stat64(&hw_stats->rx_mcast_packets) +
@@ -10019,15 +10007,13 @@ static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
10019 get_stat64(&hw_stats->tx_carrier_sense_errors); 10007 get_stat64(&hw_stats->tx_carrier_sense_errors);
10020 10008
10021 stats->rx_crc_errors = old_stats->rx_crc_errors + 10009 stats->rx_crc_errors = old_stats->rx_crc_errors +
10022 calc_crc_errors(tp); 10010 tg3_calc_crc_errors(tp);
10023 10011
10024 stats->rx_missed_errors = old_stats->rx_missed_errors + 10012 stats->rx_missed_errors = old_stats->rx_missed_errors +
10025 get_stat64(&hw_stats->rx_discards); 10013 get_stat64(&hw_stats->rx_discards);
10026 10014
10027 stats->rx_dropped = tp->rx_dropped; 10015 stats->rx_dropped = tp->rx_dropped;
10028 stats->tx_dropped = tp->tx_dropped; 10016 stats->tx_dropped = tp->tx_dropped;
10029
10030 return stats;
10031} 10017}
10032 10018
10033static inline u32 calc_crc(unsigned char *buf, int len) 10019static inline u32 calc_crc(unsigned char *buf, int len)
@@ -15409,6 +15395,21 @@ static void __devinit tg3_init_coal(struct tg3 *tp)
15409 } 15395 }
15410} 15396}
15411 15397
15398static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
15399 struct rtnl_link_stats64 *stats)
15400{
15401 struct tg3 *tp = netdev_priv(dev);
15402
15403 if (!tp->hw_stats)
15404 return &tp->net_stats_prev;
15405
15406 spin_lock_bh(&tp->lock);
15407 tg3_get_nstats(tp, stats);
15408 spin_unlock_bh(&tp->lock);
15409
15410 return stats;
15411}
15412
15412static const struct net_device_ops tg3_netdev_ops = { 15413static const struct net_device_ops tg3_netdev_ops = {
15413 .ndo_open = tg3_open, 15414 .ndo_open = tg3_open,
15414 .ndo_stop = tg3_close, 15415 .ndo_stop = tg3_close,
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index e83d12c7bf20..9d76e59d9526 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -196,6 +196,8 @@ static DEFINE_PCI_DEVICE_TABLE(cxgb4_pci_tbl) = {
196 CH_DEVICE(0x4408, 4), 196 CH_DEVICE(0x4408, 4),
197 CH_DEVICE(0x4409, 4), 197 CH_DEVICE(0x4409, 4),
198 CH_DEVICE(0x440a, 4), 198 CH_DEVICE(0x440a, 4),
199 CH_DEVICE(0x440d, 4),
200 CH_DEVICE(0x440e, 4),
199 { 0, } 201 { 0, }
200}; 202};
201 203
diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
index e53365a71484..d963c1d57f71 100644
--- a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
@@ -2892,6 +2892,8 @@ static struct pci_device_id cxgb4vf_pci_tbl[] = {
2892 CH_DEVICE(0x4808, 0), /* T420-cx */ 2892 CH_DEVICE(0x4808, 0), /* T420-cx */
2893 CH_DEVICE(0x4809, 0), /* T420-bt */ 2893 CH_DEVICE(0x4809, 0), /* T420-bt */
2894 CH_DEVICE(0x480a, 0), /* T404-bt */ 2894 CH_DEVICE(0x480a, 0), /* T404-bt */
2895 CH_DEVICE(0x480d, 0), /* T480-cr */
2896 CH_DEVICE(0x480e, 0), /* T440-lp-cr */
2895 { 0, } 2897 { 0, }
2896}; 2898};
2897 2899
diff --git a/drivers/net/ethernet/cisco/enic/enic.h b/drivers/net/ethernet/cisco/enic/enic.h
index ee93a2087fe6..c52295cd05ef 100644
--- a/drivers/net/ethernet/cisco/enic/enic.h
+++ b/drivers/net/ethernet/cisco/enic/enic.h
@@ -94,7 +94,7 @@ struct enic {
94 u32 rx_coalesce_usecs; 94 u32 rx_coalesce_usecs;
95 u32 tx_coalesce_usecs; 95 u32 tx_coalesce_usecs;
96#ifdef CONFIG_PCI_IOV 96#ifdef CONFIG_PCI_IOV
97 u32 num_vfs; 97 u16 num_vfs;
98#endif 98#endif
99 struct enic_port_profile *pp; 99 struct enic_port_profile *pp;
100 100
diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
index ab3f67f980d8..0e4edd3b6bee 100644
--- a/drivers/net/ethernet/cisco/enic/enic_main.c
+++ b/drivers/net/ethernet/cisco/enic/enic_main.c
@@ -2370,7 +2370,7 @@ static int __devinit enic_probe(struct pci_dev *pdev,
2370 pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_SRIOV); 2370 pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_SRIOV);
2371 if (pos) { 2371 if (pos) {
2372 pci_read_config_word(pdev, pos + PCI_SRIOV_TOTAL_VF, 2372 pci_read_config_word(pdev, pos + PCI_SRIOV_TOTAL_VF,
2373 (u16 *)&enic->num_vfs); 2373 &enic->num_vfs);
2374 if (enic->num_vfs) { 2374 if (enic->num_vfs) {
2375 err = pci_enable_sriov(pdev, enic->num_vfs); 2375 err = pci_enable_sriov(pdev, enic->num_vfs);
2376 if (err) { 2376 if (err) {
diff --git a/drivers/net/ethernet/ibm/ehea/ehea_main.c b/drivers/net/ethernet/ibm/ehea/ehea_main.c
index 5d5fb2627184..e6893cdfd13b 100644
--- a/drivers/net/ethernet/ibm/ehea/ehea_main.c
+++ b/drivers/net/ethernet/ibm/ehea/ehea_main.c
@@ -336,7 +336,9 @@ static struct rtnl_link_stats64 *ehea_get_stats64(struct net_device *dev,
336 stats->tx_bytes = tx_bytes; 336 stats->tx_bytes = tx_bytes;
337 stats->rx_packets = rx_packets; 337 stats->rx_packets = rx_packets;
338 338
339 return &port->stats; 339 stats->multicast = port->stats.multicast;
340 stats->rx_errors = port->stats.rx_errors;
341 return stats;
340} 342}
341 343
342static void ehea_update_stats(struct work_struct *work) 344static void ehea_update_stats(struct work_struct *work)
diff --git a/drivers/net/ethernet/mellanox/mlx4/qp.c b/drivers/net/ethernet/mellanox/mlx4/qp.c
index 738f950a1ce5..fb2b36759cbf 100644
--- a/drivers/net/ethernet/mellanox/mlx4/qp.c
+++ b/drivers/net/ethernet/mellanox/mlx4/qp.c
@@ -151,11 +151,6 @@ static int __mlx4_qp_modify(struct mlx4_dev *dev, struct mlx4_mtt *mtt,
151 context->log_page_size = mtt->page_shift - MLX4_ICM_PAGE_SHIFT; 151 context->log_page_size = mtt->page_shift - MLX4_ICM_PAGE_SHIFT;
152 } 152 }
153 153
154 port = ((context->pri_path.sched_queue >> 6) & 1) + 1;
155 if (dev->caps.port_type[port] == MLX4_PORT_TYPE_ETH)
156 context->pri_path.sched_queue = (context->pri_path.sched_queue &
157 0xc3);
158
159 *(__be32 *) mailbox->buf = cpu_to_be32(optpar); 154 *(__be32 *) mailbox->buf = cpu_to_be32(optpar);
160 memcpy(mailbox->buf + 8, context, sizeof *context); 155 memcpy(mailbox->buf + 8, context, sizeof *context);
161 156
diff --git a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
index bfdb7af19e49..8752e6e08169 100644
--- a/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
+++ b/drivers/net/ethernet/mellanox/mlx4/resource_tracker.c
@@ -2255,8 +2255,7 @@ int mlx4_MODIFY_CQ_wrapper(struct mlx4_dev *dev, int slave,
2255 2255
2256 if (vhcr->op_modifier == 0) { 2256 if (vhcr->op_modifier == 0) {
2257 err = handle_resize(dev, slave, vhcr, inbox, outbox, cmd, cq); 2257 err = handle_resize(dev, slave, vhcr, inbox, outbox, cmd, cq);
2258 if (err) 2258 goto ex_put;
2259 goto ex_put;
2260 } 2259 }
2261 2260
2262 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd); 2261 err = mlx4_DMA_wrapper(dev, slave, vhcr, inbox, outbox, cmd);
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c
index 9cb5f912e489..29e23bec809c 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c
@@ -321,10 +321,10 @@ static void pch_gbe_check_copper_options(struct pch_gbe_adapter *adapter)
321 pr_debug("AutoNeg specified along with Speed or Duplex, AutoNeg parameter ignored\n"); 321 pr_debug("AutoNeg specified along with Speed or Duplex, AutoNeg parameter ignored\n");
322 hw->phy.autoneg_advertised = opt.def; 322 hw->phy.autoneg_advertised = opt.def;
323 } else { 323 } else {
324 hw->phy.autoneg_advertised = AutoNeg; 324 int tmp = AutoNeg;
325 pch_gbe_validate_option( 325
326 (int *)(&hw->phy.autoneg_advertised), 326 pch_gbe_validate_option(&tmp, &opt, adapter);
327 &opt, adapter); 327 hw->phy.autoneg_advertised = tmp;
328 } 328 }
329 } 329 }
330 330
@@ -495,9 +495,10 @@ void pch_gbe_check_options(struct pch_gbe_adapter *adapter)
495 .arg = { .l = { .nr = (int)ARRAY_SIZE(fc_list), 495 .arg = { .l = { .nr = (int)ARRAY_SIZE(fc_list),
496 .p = fc_list } } 496 .p = fc_list } }
497 }; 497 };
498 hw->mac.fc = FlowControl; 498 int tmp = FlowControl;
499 pch_gbe_validate_option((int *)(&hw->mac.fc), 499
500 &opt, adapter); 500 pch_gbe_validate_option(&tmp, &opt, adapter);
501 hw->mac.fc = tmp;
501 } 502 }
502 503
503 pch_gbe_check_copper_options(adapter); 504 pch_gbe_check_copper_options(adapter);
diff --git a/drivers/net/ethernet/packetengines/Kconfig b/drivers/net/ethernet/packetengines/Kconfig
index b97132d9dff0..8f29feb35548 100644
--- a/drivers/net/ethernet/packetengines/Kconfig
+++ b/drivers/net/ethernet/packetengines/Kconfig
@@ -4,6 +4,7 @@
4 4
5config NET_PACKET_ENGINE 5config NET_PACKET_ENGINE
6 bool "Packet Engine devices" 6 bool "Packet Engine devices"
7 default y
7 depends on PCI 8 depends on PCI
8 ---help--- 9 ---help---
9 If you have a network (Ethernet) card belonging to this class, say Y 10 If you have a network (Ethernet) card belonging to this class, say Y
diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c b/drivers/net/ethernet/qlogic/qla3xxx.c
index 7931531c3a40..e61560e16385 100644
--- a/drivers/net/ethernet/qlogic/qla3xxx.c
+++ b/drivers/net/ethernet/qlogic/qla3xxx.c
@@ -3017,7 +3017,6 @@ static int ql_adapter_initialize(struct ql3_adapter *qdev)
3017 (void __iomem *)port_regs; 3017 (void __iomem *)port_regs;
3018 u32 delay = 10; 3018 u32 delay = 10;
3019 int status = 0; 3019 int status = 0;
3020 unsigned long hw_flags = 0;
3021 3020
3022 if (ql_mii_setup(qdev)) 3021 if (ql_mii_setup(qdev))
3023 return -1; 3022 return -1;
@@ -3228,9 +3227,9 @@ static int ql_adapter_initialize(struct ql3_adapter *qdev)
3228 value = ql_read_page0_reg(qdev, &port_regs->portStatus); 3227 value = ql_read_page0_reg(qdev, &port_regs->portStatus);
3229 if (value & PORT_STATUS_IC) 3228 if (value & PORT_STATUS_IC)
3230 break; 3229 break;
3231 spin_unlock_irqrestore(&qdev->hw_lock, hw_flags); 3230 spin_unlock_irq(&qdev->hw_lock);
3232 msleep(500); 3231 msleep(500);
3233 spin_lock_irqsave(&qdev->hw_lock, hw_flags); 3232 spin_lock_irq(&qdev->hw_lock);
3234 } while (--delay); 3233 } while (--delay);
3235 3234
3236 if (delay == 0) { 3235 if (delay == 0) {
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index 7a0c800b50ad..bbacb3741ec0 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -3781,12 +3781,20 @@ static void rtl8169_init_ring_indexes(struct rtl8169_private *tp)
3781 3781
3782static void rtl_hw_jumbo_enable(struct rtl8169_private *tp) 3782static void rtl_hw_jumbo_enable(struct rtl8169_private *tp)
3783{ 3783{
3784 void __iomem *ioaddr = tp->mmio_addr;
3785
3786 RTL_W8(Cfg9346, Cfg9346_Unlock);
3784 rtl_generic_op(tp, tp->jumbo_ops.enable); 3787 rtl_generic_op(tp, tp->jumbo_ops.enable);
3788 RTL_W8(Cfg9346, Cfg9346_Lock);
3785} 3789}
3786 3790
3787static void rtl_hw_jumbo_disable(struct rtl8169_private *tp) 3791static void rtl_hw_jumbo_disable(struct rtl8169_private *tp)
3788{ 3792{
3793 void __iomem *ioaddr = tp->mmio_addr;
3794
3795 RTL_W8(Cfg9346, Cfg9346_Unlock);
3789 rtl_generic_op(tp, tp->jumbo_ops.disable); 3796 rtl_generic_op(tp, tp->jumbo_ops.disable);
3797 RTL_W8(Cfg9346, Cfg9346_Lock);
3790} 3798}
3791 3799
3792static void r8168c_hw_jumbo_enable(struct rtl8169_private *tp) 3800static void r8168c_hw_jumbo_enable(struct rtl8169_private *tp)
@@ -6186,6 +6194,9 @@ static void rtl_shutdown(struct pci_dev *pdev)
6186{ 6194{
6187 struct net_device *dev = pci_get_drvdata(pdev); 6195 struct net_device *dev = pci_get_drvdata(pdev);
6188 struct rtl8169_private *tp = netdev_priv(dev); 6196 struct rtl8169_private *tp = netdev_priv(dev);
6197 struct device *d = &pdev->dev;
6198
6199 pm_runtime_get_sync(d);
6189 6200
6190 rtl8169_net_suspend(dev); 6201 rtl8169_net_suspend(dev);
6191 6202
@@ -6207,6 +6218,8 @@ static void rtl_shutdown(struct pci_dev *pdev)
6207 pci_wake_from_d3(pdev, true); 6218 pci_wake_from_d3(pdev, true);
6208 pci_set_power_state(pdev, PCI_D3hot); 6219 pci_set_power_state(pdev, PCI_D3hot);
6209 } 6220 }
6221
6222 pm_runtime_put_noidle(d);
6210} 6223}
6211 6224
6212static struct pci_driver rtl8169_pci_driver = { 6225static struct pci_driver rtl8169_pci_driver = {
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 466c58a7353d..610860f28968 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -166,7 +166,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
166 166
167 dev_kfree_skb(skb); 167 dev_kfree_skb(skb);
168 net->stats.tx_dropped++; 168 net->stats.tx_dropped++;
169 return NETDEV_TX_BUSY; 169 return NETDEV_TX_OK;
170 } 170 }
171 171
172 packet->extension = (void *)(unsigned long)packet + 172 packet->extension = (void *)(unsigned long)packet +
@@ -226,7 +226,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
226 dev_kfree_skb_any(skb); 226 dev_kfree_skb_any(skb);
227 } 227 }
228 228
229 return ret ? NETDEV_TX_BUSY : NETDEV_TX_OK; 229 return NETDEV_TX_OK;
230} 230}
231 231
232/* 232/*
@@ -313,7 +313,7 @@ int netvsc_recv_callback(struct hv_device *device_obj,
313static void netvsc_get_drvinfo(struct net_device *net, 313static void netvsc_get_drvinfo(struct net_device *net,
314 struct ethtool_drvinfo *info) 314 struct ethtool_drvinfo *info)
315{ 315{
316 strcpy(info->driver, "hv_netvsc"); 316 strcpy(info->driver, KBUILD_MODNAME);
317 strcpy(info->version, HV_DRV_VERSION); 317 strcpy(info->version, HV_DRV_VERSION);
318 strcpy(info->fw_version, "N/A"); 318 strcpy(info->fw_version, "N/A");
319} 319}
@@ -485,7 +485,7 @@ MODULE_DEVICE_TABLE(vmbus, id_table);
485 485
486/* The one and only one */ 486/* The one and only one */
487static struct hv_driver netvsc_drv = { 487static struct hv_driver netvsc_drv = {
488 .name = "netvsc", 488 .name = KBUILD_MODNAME,
489 .id_table = id_table, 489 .id_table = id_table,
490 .probe = netvsc_probe, 490 .probe = netvsc_probe,
491 .remove = netvsc_remove, 491 .remove = netvsc_remove,
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 93c5d72711b0..2d7601dd6660 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -359,7 +359,7 @@ static void tun_free_netdev(struct net_device *dev)
359{ 359{
360 struct tun_struct *tun = netdev_priv(dev); 360 struct tun_struct *tun = netdev_priv(dev);
361 361
362 sock_put(tun->socket.sk); 362 sk_release_kernel(tun->socket.sk);
363} 363}
364 364
365/* Net device open. */ 365/* Net device open. */
@@ -980,10 +980,18 @@ static int tun_recvmsg(struct kiocb *iocb, struct socket *sock,
980 return ret; 980 return ret;
981} 981}
982 982
983static int tun_release(struct socket *sock)
984{
985 if (sock->sk)
986 sock_put(sock->sk);
987 return 0;
988}
989
983/* Ops structure to mimic raw sockets with tun */ 990/* Ops structure to mimic raw sockets with tun */
984static const struct proto_ops tun_socket_ops = { 991static const struct proto_ops tun_socket_ops = {
985 .sendmsg = tun_sendmsg, 992 .sendmsg = tun_sendmsg,
986 .recvmsg = tun_recvmsg, 993 .recvmsg = tun_recvmsg,
994 .release = tun_release,
987}; 995};
988 996
989static struct proto tun_proto = { 997static struct proto tun_proto = {
@@ -1110,10 +1118,11 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
1110 tun->vnet_hdr_sz = sizeof(struct virtio_net_hdr); 1118 tun->vnet_hdr_sz = sizeof(struct virtio_net_hdr);
1111 1119
1112 err = -ENOMEM; 1120 err = -ENOMEM;
1113 sk = sk_alloc(net, AF_UNSPEC, GFP_KERNEL, &tun_proto); 1121 sk = sk_alloc(&init_net, AF_UNSPEC, GFP_KERNEL, &tun_proto);
1114 if (!sk) 1122 if (!sk)
1115 goto err_free_dev; 1123 goto err_free_dev;
1116 1124
1125 sk_change_net(sk, net);
1117 tun->socket.wq = &tun->wq; 1126 tun->socket.wq = &tun->wq;
1118 init_waitqueue_head(&tun->wq.wait); 1127 init_waitqueue_head(&tun->wq.wait);
1119 tun->socket.ops = &tun_socket_ops; 1128 tun->socket.ops = &tun_socket_ops;
@@ -1174,7 +1183,7 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
1174 return 0; 1183 return 0;
1175 1184
1176 err_free_sk: 1185 err_free_sk:
1177 sock_put(sk); 1186 tun_free_netdev(dev);
1178 err_free_dev: 1187 err_free_dev:
1179 free_netdev(dev); 1188 free_netdev(dev);
1180 failed: 1189 failed:
diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c
index 8e84f5bdd6ca..d6da5eed5453 100644
--- a/drivers/net/usb/asix.c
+++ b/drivers/net/usb/asix.c
@@ -1599,6 +1599,10 @@ static const struct usb_device_id products [] = {
1599 USB_DEVICE (0x6189, 0x182d), 1599 USB_DEVICE (0x6189, 0x182d),
1600 .driver_info = (unsigned long) &ax8817x_info, 1600 .driver_info = (unsigned long) &ax8817x_info,
1601}, { 1601}, {
1602 // Sitecom LN-031 "USB 2.0 10/100/1000 Ethernet adapter"
1603 USB_DEVICE (0x0df6, 0x0056),
1604 .driver_info = (unsigned long) &ax88178_info,
1605}, {
1602 // corega FEther USB2-TX 1606 // corega FEther USB2-TX
1603 USB_DEVICE (0x07aa, 0x0017), 1607 USB_DEVICE (0x07aa, 0x0017),
1604 .driver_info = (unsigned long) &ax8817x_info, 1608 .driver_info = (unsigned long) &ax8817x_info,
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index fae0fbd8bc88..59681f01a54e 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -328,13 +328,13 @@ static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags)
328 unsigned long lockflags; 328 unsigned long lockflags;
329 size_t size = dev->rx_urb_size; 329 size_t size = dev->rx_urb_size;
330 330
331 if ((skb = alloc_skb (size + NET_IP_ALIGN, flags)) == NULL) { 331 skb = __netdev_alloc_skb_ip_align(dev->net, size, flags);
332 if (!skb) {
332 netif_dbg(dev, rx_err, dev->net, "no rx skb\n"); 333 netif_dbg(dev, rx_err, dev->net, "no rx skb\n");
333 usbnet_defer_kevent (dev, EVENT_RX_MEMORY); 334 usbnet_defer_kevent (dev, EVENT_RX_MEMORY);
334 usb_free_urb (urb); 335 usb_free_urb (urb);
335 return -ENOMEM; 336 return -ENOMEM;
336 } 337 }
337 skb_reserve (skb, NET_IP_ALIGN);
338 338
339 entry = (struct skb_data *) skb->cb; 339 entry = (struct skb_data *) skb->cb;
340 entry->urb = urb; 340 entry->urb = urb;
@@ -589,6 +589,7 @@ static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
589 entry = (struct skb_data *) skb->cb; 589 entry = (struct skb_data *) skb->cb;
590 urb = entry->urb; 590 urb = entry->urb;
591 591
592 spin_unlock_irqrestore(&q->lock, flags);
592 // during some PM-driven resume scenarios, 593 // during some PM-driven resume scenarios,
593 // these (async) unlinks complete immediately 594 // these (async) unlinks complete immediately
594 retval = usb_unlink_urb (urb); 595 retval = usb_unlink_urb (urb);
@@ -596,6 +597,7 @@ static int unlink_urbs (struct usbnet *dev, struct sk_buff_head *q)
596 netdev_dbg(dev->net, "unlink urb err, %d\n", retval); 597 netdev_dbg(dev->net, "unlink urb err, %d\n", retval);
597 else 598 else
598 count++; 599 count++;
600 spin_lock_irqsave(&q->lock, flags);
599 } 601 }
600 spin_unlock_irqrestore (&q->lock, flags); 602 spin_unlock_irqrestore (&q->lock, flags);
601 return count; 603 return count;
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c
index 3dcd3857a36c..756c0f5565a5 100644
--- a/drivers/net/vmxnet3/vmxnet3_drv.c
+++ b/drivers/net/vmxnet3/vmxnet3_drv.c
@@ -830,13 +830,8 @@ vmxnet3_parse_and_copy_hdr(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
830 ctx->l4_hdr_size = ((struct tcphdr *) 830 ctx->l4_hdr_size = ((struct tcphdr *)
831 skb_transport_header(skb))->doff * 4; 831 skb_transport_header(skb))->doff * 4;
832 else if (iph->protocol == IPPROTO_UDP) 832 else if (iph->protocol == IPPROTO_UDP)
833 /*
834 * Use tcp header size so that bytes to
835 * be copied are more than required by
836 * the device.
837 */
838 ctx->l4_hdr_size = 833 ctx->l4_hdr_size =
839 sizeof(struct tcphdr); 834 sizeof(struct udphdr);
840 else 835 else
841 ctx->l4_hdr_size = 0; 836 ctx->l4_hdr_size = 0;
842 } else { 837 } else {
diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h
index ed54797db191..fc46a81ad538 100644
--- a/drivers/net/vmxnet3/vmxnet3_int.h
+++ b/drivers/net/vmxnet3/vmxnet3_int.h
@@ -70,10 +70,10 @@
70/* 70/*
71 * Version numbers 71 * Version numbers
72 */ 72 */
73#define VMXNET3_DRIVER_VERSION_STRING "1.1.18.0-k" 73#define VMXNET3_DRIVER_VERSION_STRING "1.1.29.0-k"
74 74
75/* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */ 75/* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */
76#define VMXNET3_DRIVER_VERSION_NUM 0x01011200 76#define VMXNET3_DRIVER_VERSION_NUM 0x01011D00
77 77
78#if defined(CONFIG_PCI_MSI) 78#if defined(CONFIG_PCI_MSI)
79 /* RSS only makes sense if MSI-X is supported. */ 79 /* RSS only makes sense if MSI-X is supported. */
diff --git a/drivers/net/wimax/i2400m/netdev.c b/drivers/net/wimax/i2400m/netdev.c
index 64a110604ad3..63e4b709efa9 100644
--- a/drivers/net/wimax/i2400m/netdev.c
+++ b/drivers/net/wimax/i2400m/netdev.c
@@ -367,38 +367,28 @@ netdev_tx_t i2400m_hard_start_xmit(struct sk_buff *skb,
367{ 367{
368 struct i2400m *i2400m = net_dev_to_i2400m(net_dev); 368 struct i2400m *i2400m = net_dev_to_i2400m(net_dev);
369 struct device *dev = i2400m_dev(i2400m); 369 struct device *dev = i2400m_dev(i2400m);
370 int result; 370 int result = -1;
371 371
372 d_fnstart(3, dev, "(skb %p net_dev %p)\n", skb, net_dev); 372 d_fnstart(3, dev, "(skb %p net_dev %p)\n", skb, net_dev);
373 if (skb_header_cloned(skb)) { 373
374 /* 374 if (skb_header_cloned(skb) &&
375 * Make tcpdump/wireshark happy -- if they are 375 pskb_expand_head(skb, 0, 0, GFP_ATOMIC))
376 * running, the skb is cloned and we will overwrite 376 goto drop;
377 * the mac fields in i2400m_tx_prep_header. Expand
378 * seems to fix this...
379 */
380 result = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
381 if (result) {
382 result = NETDEV_TX_BUSY;
383 goto error_expand;
384 }
385 }
386 377
387 if (i2400m->state == I2400M_SS_IDLE) 378 if (i2400m->state == I2400M_SS_IDLE)
388 result = i2400m_net_wake_tx(i2400m, net_dev, skb); 379 result = i2400m_net_wake_tx(i2400m, net_dev, skb);
389 else 380 else
390 result = i2400m_net_tx(i2400m, net_dev, skb); 381 result = i2400m_net_tx(i2400m, net_dev, skb);
391 if (result < 0) 382 if (result < 0) {
383drop:
392 net_dev->stats.tx_dropped++; 384 net_dev->stats.tx_dropped++;
393 else { 385 } else {
394 net_dev->stats.tx_packets++; 386 net_dev->stats.tx_packets++;
395 net_dev->stats.tx_bytes += skb->len; 387 net_dev->stats.tx_bytes += skb->len;
396 } 388 }
397 result = NETDEV_TX_OK; 389 dev_kfree_skb(skb);
398error_expand:
399 kfree_skb(skb);
400 d_fnend(3, dev, "(skb %p net_dev %p) = %d\n", skb, net_dev, result); 390 d_fnend(3, dev, "(skb %p net_dev %p) = %d\n", skb, net_dev, result);
401 return result; 391 return NETDEV_TX_OK;
402} 392}
403 393
404 394
diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
index f901a17f76ba..86a891f93fc9 100644
--- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c
+++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c
@@ -489,8 +489,6 @@ static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah)
489 ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows); 489 ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows);
490 ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows); 490 ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows);
491 ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows); 491 ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows);
492 ATH_ALLOC_BANK(ah->addac5416_21,
493 ah->iniAddac.ia_rows * ah->iniAddac.ia_columns);
494 ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows); 492 ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows);
495 493
496 return 0; 494 return 0;
@@ -519,7 +517,6 @@ static void ar5008_hw_rf_free_ext_banks(struct ath_hw *ah)
519 ATH_FREE_BANK(ah->analogBank6Data); 517 ATH_FREE_BANK(ah->analogBank6Data);
520 ATH_FREE_BANK(ah->analogBank6TPCData); 518 ATH_FREE_BANK(ah->analogBank6TPCData);
521 ATH_FREE_BANK(ah->analogBank7Data); 519 ATH_FREE_BANK(ah->analogBank7Data);
522 ATH_FREE_BANK(ah->addac5416_21);
523 ATH_FREE_BANK(ah->bank6Temp); 520 ATH_FREE_BANK(ah->bank6Temp);
524 521
525#undef ATH_FREE_BANK 522#undef ATH_FREE_BANK
@@ -805,27 +802,7 @@ static int ar5008_hw_process_ini(struct ath_hw *ah,
805 if (ah->eep_ops->set_addac) 802 if (ah->eep_ops->set_addac)
806 ah->eep_ops->set_addac(ah, chan); 803 ah->eep_ops->set_addac(ah, chan);
807 804
808 if (AR_SREV_5416_22_OR_LATER(ah)) { 805 REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
809 REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites);
810 } else {
811 struct ar5416IniArray temp;
812 u32 addacSize =
813 sizeof(u32) * ah->iniAddac.ia_rows *
814 ah->iniAddac.ia_columns;
815
816 /* For AR5416 2.0/2.1 */
817 memcpy(ah->addac5416_21,
818 ah->iniAddac.ia_array, addacSize);
819
820 /* override CLKDRV value at [row, column] = [31, 1] */
821 (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0;
822
823 temp.ia_array = ah->addac5416_21;
824 temp.ia_columns = ah->iniAddac.ia_columns;
825 temp.ia_rows = ah->iniAddac.ia_rows;
826 REG_WRITE_ARRAY(&temp, 1, regWrites);
827 }
828
829 REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC); 806 REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC);
830 807
831 ENABLE_REGWRITE_BUFFER(ah); 808 ENABLE_REGWRITE_BUFFER(ah);
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
index 11f192a1ceb7..d190411ac8f5 100644
--- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c
+++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c
@@ -180,6 +180,25 @@ static void ar9002_hw_init_mode_regs(struct ath_hw *ah)
180 INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac, 180 INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac,
181 ARRAY_SIZE(ar5416Addac), 2); 181 ARRAY_SIZE(ar5416Addac), 2);
182 } 182 }
183
184 /* iniAddac needs to be modified for these chips */
185 if (AR_SREV_9160(ah) || !AR_SREV_5416_22_OR_LATER(ah)) {
186 struct ar5416IniArray *addac = &ah->iniAddac;
187 u32 size = sizeof(u32) * addac->ia_rows * addac->ia_columns;
188 u32 *data;
189
190 data = kmalloc(size, GFP_KERNEL);
191 if (!data)
192 return;
193
194 memcpy(data, addac->ia_array, size);
195 addac->ia_array = data;
196
197 if (!AR_SREV_5416_22_OR_LATER(ah)) {
198 /* override CLKDRV value */
199 INI_RA(addac, 31,1) = 0;
200 }
201 }
183} 202}
184 203
185/* Support for Japan ch.14 (2484) spread */ 204/* Support for Japan ch.14 (2484) spread */
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
index 6a29004a71b0..c8261d4fc780 100644
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
@@ -940,7 +940,6 @@ struct ath_hw {
940 u32 *analogBank6Data; 940 u32 *analogBank6Data;
941 u32 *analogBank6TPCData; 941 u32 *analogBank6TPCData;
942 u32 *analogBank7Data; 942 u32 *analogBank7Data;
943 u32 *addac5416_21;
944 u32 *bank6Temp; 943 u32 *bank6Temp;
945 944
946 u8 txpower_limit; 945 u8 txpower_limit;
diff --git a/drivers/net/wireless/ath/carl9170/tx.c b/drivers/net/wireless/ath/carl9170/tx.c
index d19a9ee9d057..bbc813dee983 100644
--- a/drivers/net/wireless/ath/carl9170/tx.c
+++ b/drivers/net/wireless/ath/carl9170/tx.c
@@ -1234,6 +1234,7 @@ static bool carl9170_tx_ps_drop(struct ar9170 *ar, struct sk_buff *skb)
1234{ 1234{
1235 struct ieee80211_sta *sta; 1235 struct ieee80211_sta *sta;
1236 struct carl9170_sta_info *sta_info; 1236 struct carl9170_sta_info *sta_info;
1237 struct ieee80211_tx_info *tx_info;
1237 1238
1238 rcu_read_lock(); 1239 rcu_read_lock();
1239 sta = __carl9170_get_tx_sta(ar, skb); 1240 sta = __carl9170_get_tx_sta(ar, skb);
@@ -1241,16 +1242,18 @@ static bool carl9170_tx_ps_drop(struct ar9170 *ar, struct sk_buff *skb)
1241 goto out_rcu; 1242 goto out_rcu;
1242 1243
1243 sta_info = (void *) sta->drv_priv; 1244 sta_info = (void *) sta->drv_priv;
1244 if (unlikely(sta_info->sleeping)) { 1245 tx_info = IEEE80211_SKB_CB(skb);
1245 struct ieee80211_tx_info *tx_info;
1246 1246
1247 if (unlikely(sta_info->sleeping) &&
1248 !(tx_info->flags & (IEEE80211_TX_CTL_POLL_RESPONSE |
1249 IEEE80211_TX_CTL_CLEAR_PS_FILT))) {
1247 rcu_read_unlock(); 1250 rcu_read_unlock();
1248 1251
1249 tx_info = IEEE80211_SKB_CB(skb);
1250 if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) 1252 if (tx_info->flags & IEEE80211_TX_CTL_AMPDU)
1251 atomic_dec(&ar->tx_ampdu_upload); 1253 atomic_dec(&ar->tx_ampdu_upload);
1252 1254
1253 tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED; 1255 tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
1256 carl9170_release_dev_space(ar, skb);
1254 carl9170_tx_status(ar, skb, false); 1257 carl9170_tx_status(ar, skb, false);
1255 return true; 1258 return true;
1256 } 1259 }
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c b/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c
index 90911eec0cf5..30b58870b1b6 100644
--- a/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c
+++ b/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c
@@ -1051,17 +1051,13 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb,
1051 } 1051 }
1052 /* either retransmit or send bar if ack not recd */ 1052 /* either retransmit or send bar if ack not recd */
1053 if (!ack_recd) { 1053 if (!ack_recd) {
1054 struct ieee80211_tx_rate *txrate = 1054 if (retry && (ini->txretry[index] < (int)retry_limit)) {
1055 tx_info->status.rates;
1056 if (retry && (txrate[0].count < (int)retry_limit)) {
1057 ini->txretry[index]++; 1055 ini->txretry[index]++;
1058 ini->tx_in_transit--; 1056 ini->tx_in_transit--;
1059 /* 1057 /*
1060 * Use high prededence for retransmit to 1058 * Use high prededence for retransmit to
1061 * give some punch 1059 * give some punch
1062 */ 1060 */
1063 /* brcms_c_txq_enq(wlc, scb, p,
1064 * BRCMS_PRIO_TO_PREC(tid)); */
1065 brcms_c_txq_enq(wlc, scb, p, 1061 brcms_c_txq_enq(wlc, scb, p,
1066 BRCMS_PRIO_TO_HI_PREC(tid)); 1062 BRCMS_PRIO_TO_HI_PREC(tid));
1067 } else { 1063 } else {
@@ -1074,9 +1070,9 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb,
1074 IEEE80211_TX_STAT_AMPDU_NO_BACK; 1070 IEEE80211_TX_STAT_AMPDU_NO_BACK;
1075 skb_pull(p, D11_PHY_HDR_LEN); 1071 skb_pull(p, D11_PHY_HDR_LEN);
1076 skb_pull(p, D11_TXH_LEN); 1072 skb_pull(p, D11_TXH_LEN);
1077 wiphy_err(wiphy, "%s: BA Timeout, seq %d, in_" 1073 BCMMSG(wiphy,
1078 "transit %d\n", "AMPDU status", seq, 1074 "BA Timeout, seq %d, in_transit %d\n",
1079 ini->tx_in_transit); 1075 seq, ini->tx_in_transit);
1080 ieee80211_tx_status_irqsafe(wlc->pub->ieee_hw, 1076 ieee80211_tx_status_irqsafe(wlc->pub->ieee_hw,
1081 p); 1077 p);
1082 } 1078 }
diff --git a/drivers/net/wireless/iwlegacy/3945-mac.c b/drivers/net/wireless/iwlegacy/3945-mac.c
index 54b2d391e91a..a7dfba8d164e 100644
--- a/drivers/net/wireless/iwlegacy/3945-mac.c
+++ b/drivers/net/wireless/iwlegacy/3945-mac.c
@@ -2475,7 +2475,7 @@ il3945_bg_alive_start(struct work_struct *data)
2475 container_of(data, struct il_priv, alive_start.work); 2475 container_of(data, struct il_priv, alive_start.work);
2476 2476
2477 mutex_lock(&il->mutex); 2477 mutex_lock(&il->mutex);
2478 if (test_bit(S_EXIT_PENDING, &il->status)) 2478 if (test_bit(S_EXIT_PENDING, &il->status) || il->txq == NULL)
2479 goto out; 2479 goto out;
2480 2480
2481 il3945_alive_start(il); 2481 il3945_alive_start(il);
diff --git a/drivers/net/wireless/iwlegacy/3945.c b/drivers/net/wireless/iwlegacy/3945.c
index 1489b1573a6a..c80eb9b31551 100644
--- a/drivers/net/wireless/iwlegacy/3945.c
+++ b/drivers/net/wireless/iwlegacy/3945.c
@@ -1870,11 +1870,12 @@ il3945_bg_reg_txpower_periodic(struct work_struct *work)
1870 struct il_priv *il = container_of(work, struct il_priv, 1870 struct il_priv *il = container_of(work, struct il_priv,
1871 _3945.thermal_periodic.work); 1871 _3945.thermal_periodic.work);
1872 1872
1873 if (test_bit(S_EXIT_PENDING, &il->status))
1874 return;
1875
1876 mutex_lock(&il->mutex); 1873 mutex_lock(&il->mutex);
1874 if (test_bit(S_EXIT_PENDING, &il->status) || il->txq == NULL)
1875 goto out;
1876
1877 il3945_reg_txpower_periodic(il); 1877 il3945_reg_txpower_periodic(il);
1878out:
1878 mutex_unlock(&il->mutex); 1879 mutex_unlock(&il->mutex);
1879} 1880}
1880 1881
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
index 64cf439035c3..ca78e91de86c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c
@@ -1240,7 +1240,7 @@ int iwlagn_suspend(struct iwl_priv *priv,
1240 .flags = CMD_SYNC, 1240 .flags = CMD_SYNC,
1241 .data[0] = key_data.rsc_tsc, 1241 .data[0] = key_data.rsc_tsc,
1242 .dataflags[0] = IWL_HCMD_DFL_NOCOPY, 1242 .dataflags[0] = IWL_HCMD_DFL_NOCOPY,
1243 .len[0] = sizeof(key_data.rsc_tsc), 1243 .len[0] = sizeof(*key_data.rsc_tsc),
1244 }; 1244 };
1245 1245
1246 ret = iwl_trans_send_cmd(trans(priv), &rsc_tsc_cmd); 1246 ret = iwl_trans_send_cmd(trans(priv), &rsc_tsc_cmd);
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
index 7353826095f1..e483cfa8d14e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
@@ -1187,6 +1187,7 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
1187 unsigned long flags; 1187 unsigned long flags;
1188 struct iwl_addsta_cmd sta_cmd; 1188 struct iwl_addsta_cmd sta_cmd;
1189 u8 sta_id = iwlagn_key_sta_id(priv, ctx->vif, sta); 1189 u8 sta_id = iwlagn_key_sta_id(priv, ctx->vif, sta);
1190 __le16 key_flags;
1190 1191
1191 /* if station isn't there, neither is the key */ 1192 /* if station isn't there, neither is the key */
1192 if (sta_id == IWL_INVALID_STATION) 1193 if (sta_id == IWL_INVALID_STATION)
@@ -1212,7 +1213,14 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
1212 IWL_ERR(priv, "offset %d not used in uCode key table.\n", 1213 IWL_ERR(priv, "offset %d not used in uCode key table.\n",
1213 keyconf->hw_key_idx); 1214 keyconf->hw_key_idx);
1214 1215
1215 sta_cmd.key.key_flags = STA_KEY_FLG_NO_ENC | STA_KEY_FLG_INVALID; 1216 key_flags = cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS);
1217 key_flags |= STA_KEY_FLG_MAP_KEY_MSK | STA_KEY_FLG_NO_ENC |
1218 STA_KEY_FLG_INVALID;
1219
1220 if (!(keyconf->flags & IEEE80211_KEY_FLAG_PAIRWISE))
1221 key_flags |= STA_KEY_MULTICAST_MSK;
1222
1223 sta_cmd.key.key_flags = key_flags;
1216 sta_cmd.key.key_offset = WEP_INVALID_OFFSET; 1224 sta_cmd.key.key_offset = WEP_INVALID_OFFSET;
1217 sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK; 1225 sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK;
1218 sta_cmd.mode = STA_CONTROL_MODIFY_MSK; 1226 sta_cmd.mode = STA_CONTROL_MODIFY_MSK;
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c
index 5b2972b43b0e..2210a0f9af2d 100644
--- a/drivers/net/wireless/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/mwifiex/cfg80211.c
@@ -846,6 +846,7 @@ mwifiex_cfg80211_assoc(struct mwifiex_private *priv, size_t ssid_len, u8 *ssid,
846 priv->sec_info.wpa_enabled = false; 846 priv->sec_info.wpa_enabled = false;
847 priv->sec_info.wpa2_enabled = false; 847 priv->sec_info.wpa2_enabled = false;
848 priv->wep_key_curr_index = 0; 848 priv->wep_key_curr_index = 0;
849 priv->sec_info.encryption_mode = 0;
849 ret = mwifiex_set_encode(priv, NULL, 0, 0, 1); 850 ret = mwifiex_set_encode(priv, NULL, 0, 0, 1);
850 851
851 if (mode == NL80211_IFTYPE_ADHOC) { 852 if (mode == NL80211_IFTYPE_ADHOC) {
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
index c3e1aa7c1a80..fd356b7c0476 100644
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
@@ -426,10 +426,14 @@ void rt2x00lib_txdone(struct queue_entry *entry,
426 /* 426 /*
427 * If the data queue was below the threshold before the txdone 427 * If the data queue was below the threshold before the txdone
428 * handler we must make sure the packet queue in the mac80211 stack 428 * handler we must make sure the packet queue in the mac80211 stack
429 * is reenabled when the txdone handler has finished. 429 * is reenabled when the txdone handler has finished. This has to be
430 * serialized with rt2x00mac_tx(), otherwise we can wake up queue
431 * before it was stopped.
430 */ 432 */
433 spin_lock_bh(&entry->queue->tx_lock);
431 if (!rt2x00queue_threshold(entry->queue)) 434 if (!rt2x00queue_threshold(entry->queue))
432 rt2x00queue_unpause_queue(entry->queue); 435 rt2x00queue_unpause_queue(entry->queue);
436 spin_unlock_bh(&entry->queue->tx_lock);
433} 437}
434EXPORT_SYMBOL_GPL(rt2x00lib_txdone); 438EXPORT_SYMBOL_GPL(rt2x00lib_txdone);
435 439
@@ -1220,7 +1224,8 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
1220 cancel_work_sync(&rt2x00dev->rxdone_work); 1224 cancel_work_sync(&rt2x00dev->rxdone_work);
1221 cancel_work_sync(&rt2x00dev->txdone_work); 1225 cancel_work_sync(&rt2x00dev->txdone_work);
1222 } 1226 }
1223 destroy_workqueue(rt2x00dev->workqueue); 1227 if (rt2x00dev->workqueue)
1228 destroy_workqueue(rt2x00dev->workqueue);
1224 1229
1225 /* 1230 /*
1226 * Free the tx status fifo. 1231 * Free the tx status fifo.
diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c
index ede3c58e6783..2df2eb6d3e06 100644
--- a/drivers/net/wireless/rt2x00/rt2x00mac.c
+++ b/drivers/net/wireless/rt2x00/rt2x00mac.c
@@ -152,13 +152,22 @@ void rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
152 if (unlikely(rt2x00queue_write_tx_frame(queue, skb, false))) 152 if (unlikely(rt2x00queue_write_tx_frame(queue, skb, false)))
153 goto exit_fail; 153 goto exit_fail;
154 154
155 /*
156 * Pausing queue has to be serialized with rt2x00lib_txdone(). Note
157 * we should not use spin_lock_bh variant as bottom halve was already
158 * disabled before ieee80211_xmit() call.
159 */
160 spin_lock(&queue->tx_lock);
155 if (rt2x00queue_threshold(queue)) 161 if (rt2x00queue_threshold(queue))
156 rt2x00queue_pause_queue(queue); 162 rt2x00queue_pause_queue(queue);
163 spin_unlock(&queue->tx_lock);
157 164
158 return; 165 return;
159 166
160 exit_fail: 167 exit_fail:
168 spin_lock(&queue->tx_lock);
161 rt2x00queue_pause_queue(queue); 169 rt2x00queue_pause_queue(queue);
170 spin_unlock(&queue->tx_lock);
162 exit_free_skb: 171 exit_free_skb:
163 ieee80211_free_txskb(hw, skb); 172 ieee80211_free_txskb(hw, skb);
164} 173}
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
index 5adfb3eab9cd..9b1b2b7a7807 100644
--- a/drivers/net/wireless/rt2x00/rt2x00queue.c
+++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
@@ -619,6 +619,9 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,
619 else if (test_bit(REQUIRE_DMA, &queue->rt2x00dev->cap_flags)) 619 else if (test_bit(REQUIRE_DMA, &queue->rt2x00dev->cap_flags))
620 rt2x00queue_align_frame(skb); 620 rt2x00queue_align_frame(skb);
621 621
622 /*
623 * That function must be called with bh disabled.
624 */
622 spin_lock(&queue->tx_lock); 625 spin_lock(&queue->tx_lock);
623 626
624 if (unlikely(rt2x00queue_full(queue))) { 627 if (unlikely(rt2x00queue_full(queue))) {
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index ea2bd1be2640..91a375fb6ae6 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -23,7 +23,6 @@
23#include <asm/machdep.h> 23#include <asm/machdep.h>
24#endif /* CONFIG_PPC */ 24#endif /* CONFIG_PPC */
25 25
26#include <asm/setup.h>
27#include <asm/page.h> 26#include <asm/page.h>
28 27
29char *of_fdt_get_string(struct boot_param_header *blob, u32 offset) 28char *of_fdt_get_string(struct boot_param_header *blob, u32 offset)
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c
index 980c079e4443..483c0adcad87 100644
--- a/drivers/of/of_mdio.c
+++ b/drivers/of/of_mdio.c
@@ -182,7 +182,7 @@ struct phy_device *of_phy_connect_fixed_link(struct net_device *dev,
182 if (!phy_id || sz < sizeof(*phy_id)) 182 if (!phy_id || sz < sizeof(*phy_id))
183 return NULL; 183 return NULL;
184 184
185 sprintf(bus_id, PHY_ID_FMT, "0", be32_to_cpu(phy_id[0])); 185 sprintf(bus_id, PHY_ID_FMT, "fixed-0", be32_to_cpu(phy_id[0]));
186 186
187 phy = phy_connect(dev, bus_id, hndlr, 0, iface); 187 phy = phy_connect(dev, bus_id, hndlr, 0, iface);
188 return IS_ERR(phy) ? NULL : phy; 188 return IS_ERR(phy) ? NULL : phy;
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index 1cfbf228fbb1..24f049e73952 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -500,6 +500,9 @@ static int pcie_aspm_sanity_check(struct pci_dev *pdev)
500 int pos; 500 int pos;
501 u32 reg32; 501 u32 reg32;
502 502
503 if (aspm_disabled)
504 return 0;
505
503 /* 506 /*
504 * Some functions in a slot might not all be PCIe functions, 507 * Some functions in a slot might not all be PCIe functions,
505 * very strange. Disable ASPM for the whole slot 508 * very strange. Disable ASPM for the whole slot
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index f995e6e2f78c..15dbd8cc445f 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -143,6 +143,30 @@ config FUJITSU_LAPTOP_DEBUG
143 143
144 If you are not sure, say N here. 144 If you are not sure, say N here.
145 145
146config FUJITSU_TABLET
147 tristate "Fujitsu Tablet Extras"
148 depends on ACPI
149 depends on INPUT
150 ---help---
151 This is a driver for tablets built by Fujitsu:
152
153 * Lifebook P1510/P1610/P1620/Txxxx
154 * Stylistic ST5xxx
155 * Possibly other Fujitsu tablet models
156
157 It adds support for the panel buttons, docking station detection,
158 tablet/notebook mode detection for convertible and
159 orientation detection for docked slates.
160
161 If you have a Fujitsu convertible or slate, say Y or M here.
162
163config AMILO_RFKILL
164 tristate "Fujitsu-Siemens Amilo rfkill support"
165 depends on RFKILL
166 ---help---
167 This is a driver for enabling wifi on some Fujitsu-Siemens Amilo
168 laptops.
169
146config TC1100_WMI 170config TC1100_WMI
147 tristate "HP Compaq TC1100 Tablet WMI Extras (EXPERIMENTAL)" 171 tristate "HP Compaq TC1100 Tablet WMI Extras (EXPERIMENTAL)"
148 depends on !X86_64 172 depends on !X86_64
diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
index 293a320d9faa..d328f21e9fdd 100644
--- a/drivers/platform/x86/Makefile
+++ b/drivers/platform/x86/Makefile
@@ -17,12 +17,14 @@ obj-$(CONFIG_ACER_WMI) += acer-wmi.o
17obj-$(CONFIG_ACERHDF) += acerhdf.o 17obj-$(CONFIG_ACERHDF) += acerhdf.o
18obj-$(CONFIG_HP_ACCEL) += hp_accel.o 18obj-$(CONFIG_HP_ACCEL) += hp_accel.o
19obj-$(CONFIG_HP_WMI) += hp-wmi.o 19obj-$(CONFIG_HP_WMI) += hp-wmi.o
20obj-$(CONFIG_AMILO_RFKILL) += amilo-rfkill.o
20obj-$(CONFIG_TC1100_WMI) += tc1100-wmi.o 21obj-$(CONFIG_TC1100_WMI) += tc1100-wmi.o
21obj-$(CONFIG_SONY_LAPTOP) += sony-laptop.o 22obj-$(CONFIG_SONY_LAPTOP) += sony-laptop.o
22obj-$(CONFIG_IDEAPAD_LAPTOP) += ideapad-laptop.o 23obj-$(CONFIG_IDEAPAD_LAPTOP) += ideapad-laptop.o
23obj-$(CONFIG_THINKPAD_ACPI) += thinkpad_acpi.o 24obj-$(CONFIG_THINKPAD_ACPI) += thinkpad_acpi.o
24obj-$(CONFIG_SENSORS_HDAPS) += hdaps.o 25obj-$(CONFIG_SENSORS_HDAPS) += hdaps.o
25obj-$(CONFIG_FUJITSU_LAPTOP) += fujitsu-laptop.o 26obj-$(CONFIG_FUJITSU_LAPTOP) += fujitsu-laptop.o
27obj-$(CONFIG_FUJITSU_TABLET) += fujitsu-tablet.o
26obj-$(CONFIG_PANASONIC_LAPTOP) += panasonic-laptop.o 28obj-$(CONFIG_PANASONIC_LAPTOP) += panasonic-laptop.o
27obj-$(CONFIG_INTEL_MENLOW) += intel_menlow.o 29obj-$(CONFIG_INTEL_MENLOW) += intel_menlow.o
28obj-$(CONFIG_ACPI_WMI) += wmi.o 30obj-$(CONFIG_ACPI_WMI) += wmi.o
diff --git a/drivers/platform/x86/acer-wmi.c b/drivers/platform/x86/acer-wmi.c
index b848277171a4..1e5290b5396d 100644
--- a/drivers/platform/x86/acer-wmi.c
+++ b/drivers/platform/x86/acer-wmi.c
@@ -679,6 +679,32 @@ static acpi_status AMW0_find_mailled(void)
679 return AE_OK; 679 return AE_OK;
680} 680}
681 681
682static int AMW0_set_cap_acpi_check_device_found;
683
684static acpi_status AMW0_set_cap_acpi_check_device_cb(acpi_handle handle,
685 u32 level, void *context, void **retval)
686{
687 AMW0_set_cap_acpi_check_device_found = 1;
688 return AE_OK;
689}
690
691static const struct acpi_device_id norfkill_ids[] = {
692 { "VPC2004", 0},
693 { "IBM0068", 0},
694 { "LEN0068", 0},
695 { "", 0},
696};
697
698static int AMW0_set_cap_acpi_check_device(void)
699{
700 const struct acpi_device_id *id;
701
702 for (id = norfkill_ids; id->id[0]; id++)
703 acpi_get_devices(id->id, AMW0_set_cap_acpi_check_device_cb,
704 NULL, NULL);
705 return AMW0_set_cap_acpi_check_device_found;
706}
707
682static acpi_status AMW0_set_capabilities(void) 708static acpi_status AMW0_set_capabilities(void)
683{ 709{
684 struct wmab_args args; 710 struct wmab_args args;
@@ -692,7 +718,9 @@ static acpi_status AMW0_set_capabilities(void)
692 * work. 718 * work.
693 */ 719 */
694 if (wmi_has_guid(AMW0_GUID2)) { 720 if (wmi_has_guid(AMW0_GUID2)) {
695 interface->capability |= ACER_CAP_WIRELESS; 721 if ((quirks != &quirk_unknown) ||
722 !AMW0_set_cap_acpi_check_device())
723 interface->capability |= ACER_CAP_WIRELESS;
696 return AE_OK; 724 return AE_OK;
697 } 725 }
698 726
diff --git a/drivers/platform/x86/amilo-rfkill.c b/drivers/platform/x86/amilo-rfkill.c
new file mode 100644
index 000000000000..19170bb7700b
--- /dev/null
+++ b/drivers/platform/x86/amilo-rfkill.c
@@ -0,0 +1,173 @@
1/*
2 * Support for rfkill on some Fujitsu-Siemens Amilo laptops.
3 * Copyright 2011 Ben Hutchings.
4 *
5 * Based in part on the fsam7440 driver, which is:
6 * Copyright 2005 Alejandro Vidal Mata & Javier Vidal Mata.
7 * and on the fsaa1655g driver, which is:
8 * Copyright 2006 Martin Večeřa.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 */
15
16#include <linux/module.h>
17#include <linux/dmi.h>
18#include <linux/i8042.h>
19#include <linux/io.h>
20#include <linux/moduleparam.h>
21#include <linux/platform_device.h>
22#include <linux/rfkill.h>
23
24/*
25 * These values were obtained from disassembling and debugging the
26 * PM.exe program installed in the Fujitsu-Siemens AMILO A1655G
27 */
28#define A1655_WIFI_COMMAND 0x10C5
29#define A1655_WIFI_ON 0x25
30#define A1655_WIFI_OFF 0x45
31
32static int amilo_a1655_rfkill_set_block(void *data, bool blocked)
33{
34 u8 param = blocked ? A1655_WIFI_OFF : A1655_WIFI_ON;
35 int rc;
36
37 i8042_lock_chip();
38 rc = i8042_command(&param, A1655_WIFI_COMMAND);
39 i8042_unlock_chip();
40 return rc;
41}
42
43static const struct rfkill_ops amilo_a1655_rfkill_ops = {
44 .set_block = amilo_a1655_rfkill_set_block
45};
46
47/*
48 * These values were obtained from disassembling the PM.exe program
49 * installed in the Fujitsu-Siemens AMILO M 7440
50 */
51#define M7440_PORT1 0x118f
52#define M7440_PORT2 0x118e
53#define M7440_RADIO_ON1 0x12
54#define M7440_RADIO_ON2 0x80
55#define M7440_RADIO_OFF1 0x10
56#define M7440_RADIO_OFF2 0x00
57
58static int amilo_m7440_rfkill_set_block(void *data, bool blocked)
59{
60 u8 val1 = blocked ? M7440_RADIO_OFF1 : M7440_RADIO_ON1;
61 u8 val2 = blocked ? M7440_RADIO_OFF2 : M7440_RADIO_ON2;
62
63 outb(val1, M7440_PORT1);
64 outb(val2, M7440_PORT2);
65
66 /* Check whether the state has changed correctly */
67 if (inb(M7440_PORT1) != val1 || inb(M7440_PORT2) != val2)
68 return -EIO;
69
70 return 0;
71}
72
73static const struct rfkill_ops amilo_m7440_rfkill_ops = {
74 .set_block = amilo_m7440_rfkill_set_block
75};
76
77static const struct dmi_system_id __devinitdata amilo_rfkill_id_table[] = {
78 {
79 .matches = {
80 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
81 DMI_MATCH(DMI_BOARD_NAME, "AMILO A1655"),
82 },
83 .driver_data = (void *)&amilo_a1655_rfkill_ops
84 },
85 {
86 .matches = {
87 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
88 DMI_MATCH(DMI_BOARD_NAME, "AMILO M7440"),
89 },
90 .driver_data = (void *)&amilo_m7440_rfkill_ops
91 },
92 {}
93};
94
95static struct platform_device *amilo_rfkill_pdev;
96static struct rfkill *amilo_rfkill_dev;
97
98static int __devinit amilo_rfkill_probe(struct platform_device *device)
99{
100 const struct dmi_system_id *system_id =
101 dmi_first_match(amilo_rfkill_id_table);
102 int rc;
103
104 amilo_rfkill_dev = rfkill_alloc(KBUILD_MODNAME, &device->dev,
105 RFKILL_TYPE_WLAN,
106 system_id->driver_data, NULL);
107 if (!amilo_rfkill_dev)
108 return -ENOMEM;
109
110 rc = rfkill_register(amilo_rfkill_dev);
111 if (rc)
112 goto fail;
113
114 return 0;
115
116fail:
117 rfkill_destroy(amilo_rfkill_dev);
118 return rc;
119}
120
121static int amilo_rfkill_remove(struct platform_device *device)
122{
123 rfkill_unregister(amilo_rfkill_dev);
124 rfkill_destroy(amilo_rfkill_dev);
125 return 0;
126}
127
128static struct platform_driver amilo_rfkill_driver = {
129 .driver = {
130 .name = KBUILD_MODNAME,
131 .owner = THIS_MODULE,
132 },
133 .probe = amilo_rfkill_probe,
134 .remove = amilo_rfkill_remove,
135};
136
137static int __init amilo_rfkill_init(void)
138{
139 int rc;
140
141 if (dmi_first_match(amilo_rfkill_id_table) == NULL)
142 return -ENODEV;
143
144 rc = platform_driver_register(&amilo_rfkill_driver);
145 if (rc)
146 return rc;
147
148 amilo_rfkill_pdev = platform_device_register_simple(KBUILD_MODNAME, -1,
149 NULL, 0);
150 if (IS_ERR(amilo_rfkill_pdev)) {
151 rc = PTR_ERR(amilo_rfkill_pdev);
152 goto fail;
153 }
154
155 return 0;
156
157fail:
158 platform_driver_unregister(&amilo_rfkill_driver);
159 return rc;
160}
161
162static void __exit amilo_rfkill_exit(void)
163{
164 platform_device_unregister(amilo_rfkill_pdev);
165 platform_driver_unregister(&amilo_rfkill_driver);
166}
167
168MODULE_AUTHOR("Ben Hutchings <ben@decadent.org.uk>");
169MODULE_LICENSE("GPL");
170MODULE_DEVICE_TABLE(dmi, amilo_rfkill_id_table);
171
172module_init(amilo_rfkill_init);
173module_exit(amilo_rfkill_exit);
diff --git a/drivers/platform/x86/fujitsu-tablet.c b/drivers/platform/x86/fujitsu-tablet.c
new file mode 100644
index 000000000000..580d80a73c3a
--- /dev/null
+++ b/drivers/platform/x86/fujitsu-tablet.c
@@ -0,0 +1,478 @@
1/*
2 * Copyright (C) 2006-2012 Robert Gerlach <khnz@gmx.de>
3 * Copyright (C) 2005-2006 Jan Rychter <jan@rychter.com>
4 *
5 * You can redistribute and/or modify this program under the terms of the
6 * GNU General Public License version 2 as published by the Free Software
7 * Foundation.
8 *
9 * This program is distributed in the hope that it will be useful, but
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
12 * Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 59 Temple Place Suite 330, Boston, MA 02111-1307, USA.
17 */
18
19#include <linux/kernel.h>
20#include <linux/module.h>
21#include <linux/init.h>
22#include <linux/bitops.h>
23#include <linux/io.h>
24#include <linux/ioport.h>
25#include <linux/acpi.h>
26#include <linux/device.h>
27#include <linux/interrupt.h>
28#include <linux/input.h>
29#include <linux/delay.h>
30#include <linux/dmi.h>
31
32#define MODULENAME "fujitsu-tablet"
33
34#define ACPI_FUJITSU_CLASS "fujitsu"
35
36#define INVERT_TABLET_MODE_BIT 0x01
37#define FORCE_TABLET_MODE_IF_UNDOCK 0x02
38
39#define KEYMAP_LEN 16
40
41static const struct acpi_device_id fujitsu_ids[] = {
42 { .id = "FUJ02BD" },
43 { .id = "FUJ02BF" },
44 { .id = "" }
45};
46
47struct fujitsu_config {
48 unsigned short keymap[KEYMAP_LEN];
49 unsigned int quirks;
50};
51
52static unsigned short keymap_Lifebook_Tseries[KEYMAP_LEN] __initconst = {
53 KEY_RESERVED,
54 KEY_RESERVED,
55 KEY_RESERVED,
56 KEY_RESERVED,
57 KEY_SCROLLDOWN,
58 KEY_SCROLLUP,
59 KEY_DIRECTION,
60 KEY_LEFTCTRL,
61 KEY_BRIGHTNESSUP,
62 KEY_BRIGHTNESSDOWN,
63 KEY_BRIGHTNESS_ZERO,
64 KEY_RESERVED,
65 KEY_RESERVED,
66 KEY_RESERVED,
67 KEY_RESERVED,
68 KEY_LEFTALT
69};
70
71static unsigned short keymap_Lifebook_U810[KEYMAP_LEN] __initconst = {
72 KEY_RESERVED,
73 KEY_RESERVED,
74 KEY_RESERVED,
75 KEY_RESERVED,
76 KEY_PROG1,
77 KEY_PROG2,
78 KEY_DIRECTION,
79 KEY_RESERVED,
80 KEY_RESERVED,
81 KEY_RESERVED,
82 KEY_UP,
83 KEY_DOWN,
84 KEY_RESERVED,
85 KEY_RESERVED,
86 KEY_LEFTCTRL,
87 KEY_LEFTALT
88};
89
90static unsigned short keymap_Stylistic_Tseries[KEYMAP_LEN] __initconst = {
91 KEY_RESERVED,
92 KEY_RESERVED,
93 KEY_RESERVED,
94 KEY_RESERVED,
95 KEY_PRINT,
96 KEY_BACKSPACE,
97 KEY_SPACE,
98 KEY_ENTER,
99 KEY_BRIGHTNESSUP,
100 KEY_BRIGHTNESSDOWN,
101 KEY_DOWN,
102 KEY_UP,
103 KEY_SCROLLUP,
104 KEY_SCROLLDOWN,
105 KEY_LEFTCTRL,
106 KEY_LEFTALT
107};
108
109static unsigned short keymap_Stylistic_ST5xxx[KEYMAP_LEN] __initconst = {
110 KEY_RESERVED,
111 KEY_RESERVED,
112 KEY_RESERVED,
113 KEY_RESERVED,
114 KEY_MAIL,
115 KEY_DIRECTION,
116 KEY_ESC,
117 KEY_ENTER,
118 KEY_BRIGHTNESSUP,
119 KEY_BRIGHTNESSDOWN,
120 KEY_DOWN,
121 KEY_UP,
122 KEY_SCROLLUP,
123 KEY_SCROLLDOWN,
124 KEY_LEFTCTRL,
125 KEY_LEFTALT
126};
127
128static struct {
129 struct input_dev *idev;
130 struct fujitsu_config config;
131 unsigned long prev_keymask;
132
133 char phys[21];
134
135 int irq;
136 int io_base;
137 int io_length;
138} fujitsu;
139
140static u8 fujitsu_ack(void)
141{
142 return inb(fujitsu.io_base + 2);
143}
144
145static u8 fujitsu_status(void)
146{
147 return inb(fujitsu.io_base + 6);
148}
149
150static u8 fujitsu_read_register(const u8 addr)
151{
152 outb(addr, fujitsu.io_base);
153 return inb(fujitsu.io_base + 4);
154}
155
156static void fujitsu_send_state(void)
157{
158 int state;
159 int dock, tablet_mode;
160
161 state = fujitsu_read_register(0xdd);
162
163 dock = state & 0x02;
164
165 if ((fujitsu.config.quirks & FORCE_TABLET_MODE_IF_UNDOCK) && (!dock)) {
166 tablet_mode = 1;
167 } else{
168 tablet_mode = state & 0x01;
169 if (fujitsu.config.quirks & INVERT_TABLET_MODE_BIT)
170 tablet_mode = !tablet_mode;
171 }
172
173 input_report_switch(fujitsu.idev, SW_DOCK, dock);
174 input_report_switch(fujitsu.idev, SW_TABLET_MODE, tablet_mode);
175 input_sync(fujitsu.idev);
176}
177
178static void fujitsu_reset(void)
179{
180 int timeout = 50;
181
182 fujitsu_ack();
183
184 while ((fujitsu_status() & 0x02) && (--timeout))
185 msleep(20);
186
187 fujitsu_send_state();
188}
189
190static int __devinit input_fujitsu_setup(struct device *parent,
191 const char *name, const char *phys)
192{
193 struct input_dev *idev;
194 int error;
195 int i;
196
197 idev = input_allocate_device();
198 if (!idev)
199 return -ENOMEM;
200
201 idev->dev.parent = parent;
202 idev->phys = phys;
203 idev->name = name;
204 idev->id.bustype = BUS_HOST;
205 idev->id.vendor = 0x1734; /* Fujitsu Siemens Computer GmbH */
206 idev->id.product = 0x0001;
207 idev->id.version = 0x0101;
208
209 idev->keycode = fujitsu.config.keymap;
210 idev->keycodesize = sizeof(fujitsu.config.keymap[0]);
211 idev->keycodemax = ARRAY_SIZE(fujitsu.config.keymap);
212
213 __set_bit(EV_REP, idev->evbit);
214
215 for (i = 0; i < ARRAY_SIZE(fujitsu.config.keymap); i++)
216 if (fujitsu.config.keymap[i])
217 input_set_capability(idev, EV_KEY, fujitsu.config.keymap[i]);
218
219 input_set_capability(idev, EV_MSC, MSC_SCAN);
220
221 input_set_capability(idev, EV_SW, SW_DOCK);
222 input_set_capability(idev, EV_SW, SW_TABLET_MODE);
223
224 input_set_capability(idev, EV_SW, SW_DOCK);
225 input_set_capability(idev, EV_SW, SW_TABLET_MODE);
226
227 error = input_register_device(idev);
228 if (error) {
229 input_free_device(idev);
230 return error;
231 }
232
233 fujitsu.idev = idev;
234 return 0;
235}
236
237static void input_fujitsu_remove(void)
238{
239 input_unregister_device(fujitsu.idev);
240}
241
242static irqreturn_t fujitsu_interrupt(int irq, void *dev_id)
243{
244 unsigned long keymask, changed;
245 unsigned int keycode;
246 int pressed;
247 int i;
248
249 if (unlikely(!(fujitsu_status() & 0x01)))
250 return IRQ_NONE;
251
252 fujitsu_send_state();
253
254 keymask = fujitsu_read_register(0xde);
255 keymask |= fujitsu_read_register(0xdf) << 8;
256 keymask ^= 0xffff;
257
258 changed = keymask ^ fujitsu.prev_keymask;
259 if (changed) {
260 fujitsu.prev_keymask = keymask;
261
262 for_each_set_bit(i, &changed, KEYMAP_LEN) {
263 keycode = fujitsu.config.keymap[i];
264 pressed = keymask & changed & BIT(i);
265
266 if (pressed)
267 input_event(fujitsu.idev, EV_MSC, MSC_SCAN, i);
268
269 input_report_key(fujitsu.idev, keycode, pressed);
270 input_sync(fujitsu.idev);
271 }
272 }
273
274 fujitsu_ack();
275 return IRQ_HANDLED;
276}
277
278static int __devinit fujitsu_dmi_default(const struct dmi_system_id *dmi)
279{
280 printk(KERN_INFO MODULENAME ": %s\n", dmi->ident);
281 memcpy(fujitsu.config.keymap, dmi->driver_data,
282 sizeof(fujitsu.config.keymap));
283 return 1;
284}
285
286static int __devinit fujitsu_dmi_stylistic(const struct dmi_system_id *dmi)
287{
288 fujitsu_dmi_default(dmi);
289 fujitsu.config.quirks |= FORCE_TABLET_MODE_IF_UNDOCK;
290 fujitsu.config.quirks |= INVERT_TABLET_MODE_BIT;
291 return 1;
292}
293
294static struct dmi_system_id dmi_ids[] __initconst = {
295 {
296 .callback = fujitsu_dmi_default,
297 .ident = "Fujitsu Siemens P/T Series",
298 .matches = {
299 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
300 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK")
301 },
302 .driver_data = keymap_Lifebook_Tseries
303 },
304 {
305 .callback = fujitsu_dmi_default,
306 .ident = "Fujitsu Lifebook T Series",
307 .matches = {
308 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
309 DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook T")
310 },
311 .driver_data = keymap_Lifebook_Tseries
312 },
313 {
314 .callback = fujitsu_dmi_stylistic,
315 .ident = "Fujitsu Siemens Stylistic T Series",
316 .matches = {
317 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
318 DMI_MATCH(DMI_PRODUCT_NAME, "Stylistic T")
319 },
320 .driver_data = keymap_Stylistic_Tseries
321 },
322 {
323 .callback = fujitsu_dmi_default,
324 .ident = "Fujitsu LifeBook U810",
325 .matches = {
326 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
327 DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook U810")
328 },
329 .driver_data = keymap_Lifebook_U810
330 },
331 {
332 .callback = fujitsu_dmi_stylistic,
333 .ident = "Fujitsu Siemens Stylistic ST5xxx Series",
334 .matches = {
335 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
336 DMI_MATCH(DMI_PRODUCT_NAME, "STYLISTIC ST5")
337 },
338 .driver_data = keymap_Stylistic_ST5xxx
339 },
340 {
341 .callback = fujitsu_dmi_stylistic,
342 .ident = "Fujitsu Siemens Stylistic ST5xxx Series",
343 .matches = {
344 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
345 DMI_MATCH(DMI_PRODUCT_NAME, "Stylistic ST5")
346 },
347 .driver_data = keymap_Stylistic_ST5xxx
348 },
349 {
350 .callback = fujitsu_dmi_default,
351 .ident = "Unknown (using defaults)",
352 .matches = {
353 DMI_MATCH(DMI_SYS_VENDOR, ""),
354 DMI_MATCH(DMI_PRODUCT_NAME, "")
355 },
356 .driver_data = keymap_Lifebook_Tseries
357 },
358 { NULL }
359};
360
361static acpi_status __devinit
362fujitsu_walk_resources(struct acpi_resource *res, void *data)
363{
364 switch (res->type) {
365 case ACPI_RESOURCE_TYPE_IRQ:
366 fujitsu.irq = res->data.irq.interrupts[0];
367 return AE_OK;
368
369 case ACPI_RESOURCE_TYPE_IO:
370 fujitsu.io_base = res->data.io.minimum;
371 fujitsu.io_length = res->data.io.address_length;
372 return AE_OK;
373
374 case ACPI_RESOURCE_TYPE_END_TAG:
375 if (fujitsu.irq && fujitsu.io_base)
376 return AE_OK;
377 else
378 return AE_NOT_FOUND;
379
380 default:
381 return AE_ERROR;
382 }
383}
384
385static int __devinit acpi_fujitsu_add(struct acpi_device *adev)
386{
387 acpi_status status;
388 int error;
389
390 if (!adev)
391 return -EINVAL;
392
393 status = acpi_walk_resources(adev->handle, METHOD_NAME__CRS,
394 fujitsu_walk_resources, NULL);
395 if (ACPI_FAILURE(status) || !fujitsu.irq || !fujitsu.io_base)
396 return -ENODEV;
397
398 sprintf(acpi_device_name(adev), "Fujitsu %s", acpi_device_hid(adev));
399 sprintf(acpi_device_class(adev), "%s", ACPI_FUJITSU_CLASS);
400
401 snprintf(fujitsu.phys, sizeof(fujitsu.phys),
402 "%s/input0", acpi_device_hid(adev));
403
404 error = input_fujitsu_setup(&adev->dev,
405 acpi_device_name(adev), fujitsu.phys);
406 if (error)
407 return error;
408
409 if (!request_region(fujitsu.io_base, fujitsu.io_length, MODULENAME)) {
410 input_fujitsu_remove();
411 return -EBUSY;
412 }
413
414 fujitsu_reset();
415
416 error = request_irq(fujitsu.irq, fujitsu_interrupt,
417 IRQF_SHARED, MODULENAME, fujitsu_interrupt);
418 if (error) {
419 release_region(fujitsu.io_base, fujitsu.io_length);
420 input_fujitsu_remove();
421 return error;
422 }
423
424 return 0;
425}
426
427static int __devexit acpi_fujitsu_remove(struct acpi_device *adev, int type)
428{
429 free_irq(fujitsu.irq, fujitsu_interrupt);
430 release_region(fujitsu.io_base, fujitsu.io_length);
431 input_fujitsu_remove();
432 return 0;
433}
434
435static int acpi_fujitsu_resume(struct acpi_device *adev)
436{
437 fujitsu_reset();
438 return 0;
439}
440
441static struct acpi_driver acpi_fujitsu_driver = {
442 .name = MODULENAME,
443 .class = "hotkey",
444 .ids = fujitsu_ids,
445 .ops = {
446 .add = acpi_fujitsu_add,
447 .remove = acpi_fujitsu_remove,
448 .resume = acpi_fujitsu_resume,
449 }
450};
451
452static int __init fujitsu_module_init(void)
453{
454 int error;
455
456 dmi_check_system(dmi_ids);
457
458 error = acpi_bus_register_driver(&acpi_fujitsu_driver);
459 if (error)
460 return error;
461
462 return 0;
463}
464
465static void __exit fujitsu_module_exit(void)
466{
467 acpi_bus_unregister_driver(&acpi_fujitsu_driver);
468}
469
470module_init(fujitsu_module_init);
471module_exit(fujitsu_module_exit);
472
473MODULE_AUTHOR("Robert Gerlach <khnz@gmx.de>");
474MODULE_DESCRIPTION("Fujitsu tablet pc extras driver");
475MODULE_LICENSE("GPL");
476MODULE_VERSION("2.4");
477
478MODULE_DEVICE_TABLE(acpi, fujitsu_ids);
diff --git a/drivers/platform/x86/panasonic-laptop.c b/drivers/platform/x86/panasonic-laptop.c
index 05be30ee158b..ffff8b4b4949 100644
--- a/drivers/platform/x86/panasonic-laptop.c
+++ b/drivers/platform/x86/panasonic-laptop.c
@@ -562,8 +562,8 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device)
562 562
563 num_sifr = acpi_pcc_get_sqty(device); 563 num_sifr = acpi_pcc_get_sqty(device);
564 564
565 if (num_sifr > 255) { 565 if (num_sifr < 0 || num_sifr > 255) {
566 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "num_sifr too large")); 566 ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "num_sifr out of range"));
567 return -ENODEV; 567 return -ENODEV;
568 } 568 }
569 569
diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
index 2baadd21b7a6..98fbe62694d4 100644
--- a/drivers/pps/pps.c
+++ b/drivers/pps/pps.c
@@ -369,9 +369,9 @@ static int __init pps_init(void)
369 int err; 369 int err;
370 370
371 pps_class = class_create(THIS_MODULE, "pps"); 371 pps_class = class_create(THIS_MODULE, "pps");
372 if (!pps_class) { 372 if (IS_ERR(pps_class)) {
373 pr_err("failed to allocate class\n"); 373 pr_err("failed to allocate class\n");
374 return -ENOMEM; 374 return PTR_ERR(pps_class);
375 } 375 }
376 pps_class->dev_attrs = pps_attrs; 376 pps_class->dev_attrs = pps_attrs;
377 377
diff --git a/drivers/rapidio/devices/tsi721.c b/drivers/rapidio/devices/tsi721.c
index 691b1ab1a3d0..30d2072f480b 100644
--- a/drivers/rapidio/devices/tsi721.c
+++ b/drivers/rapidio/devices/tsi721.c
@@ -410,13 +410,14 @@ static void tsi721_db_dpc(struct work_struct *work)
410 */ 410 */
411 mport = priv->mport; 411 mport = priv->mport;
412 412
413 wr_ptr = ioread32(priv->regs + TSI721_IDQ_WP(IDB_QUEUE)); 413 wr_ptr = ioread32(priv->regs + TSI721_IDQ_WP(IDB_QUEUE)) % IDB_QSIZE;
414 rd_ptr = ioread32(priv->regs + TSI721_IDQ_RP(IDB_QUEUE)); 414 rd_ptr = ioread32(priv->regs + TSI721_IDQ_RP(IDB_QUEUE)) % IDB_QSIZE;
415 415
416 while (wr_ptr != rd_ptr) { 416 while (wr_ptr != rd_ptr) {
417 idb_entry = (u64 *)(priv->idb_base + 417 idb_entry = (u64 *)(priv->idb_base +
418 (TSI721_IDB_ENTRY_SIZE * rd_ptr)); 418 (TSI721_IDB_ENTRY_SIZE * rd_ptr));
419 rd_ptr++; 419 rd_ptr++;
420 rd_ptr %= IDB_QSIZE;
420 idb.msg = *idb_entry; 421 idb.msg = *idb_entry;
421 *idb_entry = 0; 422 *idb_entry = 0;
422 423
diff --git a/drivers/rapidio/devices/tsi721.h b/drivers/rapidio/devices/tsi721.h
index 822e54c394d5..1c226b31af13 100644
--- a/drivers/rapidio/devices/tsi721.h
+++ b/drivers/rapidio/devices/tsi721.h
@@ -118,34 +118,34 @@
118 118
119#define TSI721_IDB_ENTRY_SIZE 64 119#define TSI721_IDB_ENTRY_SIZE 64
120 120
121#define TSI721_IDQ_CTL(x) (0x20000 + (x) * 1000) 121#define TSI721_IDQ_CTL(x) (0x20000 + (x) * 0x1000)
122#define TSI721_IDQ_SUSPEND 0x00000002 122#define TSI721_IDQ_SUSPEND 0x00000002
123#define TSI721_IDQ_INIT 0x00000001 123#define TSI721_IDQ_INIT 0x00000001
124 124
125#define TSI721_IDQ_STS(x) (0x20004 + (x) * 1000) 125#define TSI721_IDQ_STS(x) (0x20004 + (x) * 0x1000)
126#define TSI721_IDQ_RUN 0x00200000 126#define TSI721_IDQ_RUN 0x00200000
127 127
128#define TSI721_IDQ_MASK(x) (0x20008 + (x) * 1000) 128#define TSI721_IDQ_MASK(x) (0x20008 + (x) * 0x1000)
129#define TSI721_IDQ_MASK_MASK 0xffff0000 129#define TSI721_IDQ_MASK_MASK 0xffff0000
130#define TSI721_IDQ_MASK_PATT 0x0000ffff 130#define TSI721_IDQ_MASK_PATT 0x0000ffff
131 131
132#define TSI721_IDQ_RP(x) (0x2000c + (x) * 1000) 132#define TSI721_IDQ_RP(x) (0x2000c + (x) * 0x1000)
133#define TSI721_IDQ_RP_PTR 0x0007ffff 133#define TSI721_IDQ_RP_PTR 0x0007ffff
134 134
135#define TSI721_IDQ_WP(x) (0x20010 + (x) * 1000) 135#define TSI721_IDQ_WP(x) (0x20010 + (x) * 0x1000)
136#define TSI721_IDQ_WP_PTR 0x0007ffff 136#define TSI721_IDQ_WP_PTR 0x0007ffff
137 137
138#define TSI721_IDQ_BASEL(x) (0x20014 + (x) * 1000) 138#define TSI721_IDQ_BASEL(x) (0x20014 + (x) * 0x1000)
139#define TSI721_IDQ_BASEL_ADDR 0xffffffc0 139#define TSI721_IDQ_BASEL_ADDR 0xffffffc0
140#define TSI721_IDQ_BASEU(x) (0x20018 + (x) * 1000) 140#define TSI721_IDQ_BASEU(x) (0x20018 + (x) * 0x1000)
141#define TSI721_IDQ_SIZE(x) (0x2001c + (x) * 1000) 141#define TSI721_IDQ_SIZE(x) (0x2001c + (x) * 0x1000)
142#define TSI721_IDQ_SIZE_VAL(size) (__fls(size) - 4) 142#define TSI721_IDQ_SIZE_VAL(size) (__fls(size) - 4)
143#define TSI721_IDQ_SIZE_MIN 512 143#define TSI721_IDQ_SIZE_MIN 512
144#define TSI721_IDQ_SIZE_MAX (512 * 1024) 144#define TSI721_IDQ_SIZE_MAX (512 * 1024)
145 145
146#define TSI721_SR_CHINT(x) (0x20040 + (x) * 1000) 146#define TSI721_SR_CHINT(x) (0x20040 + (x) * 0x1000)
147#define TSI721_SR_CHINTE(x) (0x20044 + (x) * 1000) 147#define TSI721_SR_CHINTE(x) (0x20044 + (x) * 0x1000)
148#define TSI721_SR_CHINTSET(x) (0x20048 + (x) * 1000) 148#define TSI721_SR_CHINTSET(x) (0x20048 + (x) * 0x1000)
149#define TSI721_SR_CHINT_ODBOK 0x00000020 149#define TSI721_SR_CHINT_ODBOK 0x00000020
150#define TSI721_SR_CHINT_IDBQRCV 0x00000010 150#define TSI721_SR_CHINT_IDBQRCV 0x00000010
151#define TSI721_SR_CHINT_SUSP 0x00000008 151#define TSI721_SR_CHINT_SUSP 0x00000008
@@ -156,7 +156,7 @@
156 156
157#define TSI721_IBWIN_NUM 8 157#define TSI721_IBWIN_NUM 8
158 158
159#define TSI721_IBWINLB(x) (0x29000 + (x) * 20) 159#define TSI721_IBWINLB(x) (0x29000 + (x) * 0x20)
160#define TSI721_IBWINLB_BA 0xfffff000 160#define TSI721_IBWINLB_BA 0xfffff000
161#define TSI721_IBWINLB_WEN 0x00000001 161#define TSI721_IBWINLB_WEN 0x00000001
162 162
@@ -187,13 +187,13 @@
187 */ 187 */
188#define TSI721_OBWIN_NUM TSI721_PC2SR_WINS 188#define TSI721_OBWIN_NUM TSI721_PC2SR_WINS
189 189
190#define TSI721_OBWINLB(x) (0x40000 + (x) * 20) 190#define TSI721_OBWINLB(x) (0x40000 + (x) * 0x20)
191#define TSI721_OBWINLB_BA 0xffff8000 191#define TSI721_OBWINLB_BA 0xffff8000
192#define TSI721_OBWINLB_WEN 0x00000001 192#define TSI721_OBWINLB_WEN 0x00000001
193 193
194#define TSI721_OBWINUB(x) (0x40004 + (x) * 20) 194#define TSI721_OBWINUB(x) (0x40004 + (x) * 0x20)
195 195
196#define TSI721_OBWINSZ(x) (0x40008 + (x) * 20) 196#define TSI721_OBWINSZ(x) (0x40008 + (x) * 0x20)
197#define TSI721_OBWINSZ_SIZE 0x00001f00 197#define TSI721_OBWINSZ_SIZE 0x00001f00
198#define TSI721_OBWIN_SIZE(size) (__fls(size) - 15) 198#define TSI721_OBWIN_SIZE(size) (__fls(size) - 15)
199 199
diff --git a/drivers/regulator/da9052-regulator.c b/drivers/regulator/da9052-regulator.c
index 3767364452fd..09915e89705d 100644
--- a/drivers/regulator/da9052-regulator.c
+++ b/drivers/regulator/da9052-regulator.c
@@ -226,7 +226,7 @@ static int da9052_regulator_set_voltage_int(struct regulator_dev *rdev,
226 if (min_uV < info->min_uV) 226 if (min_uV < info->min_uV)
227 min_uV = info->min_uV; 227 min_uV = info->min_uV;
228 228
229 *selector = (min_uV - info->min_uV) / info->step_uV; 229 *selector = DIV_ROUND_UP(min_uV - info->min_uV, info->step_uV);
230 230
231 ret = da9052_list_voltage(rdev, *selector); 231 ret = da9052_list_voltage(rdev, *selector);
232 if (ret < 0) 232 if (ret < 0)
@@ -260,8 +260,8 @@ static int da9052_set_ldo5_6_voltage(struct regulator_dev *rdev,
260 * the LDO activate bit to implment the changes on the 260 * the LDO activate bit to implment the changes on the
261 * LDO output. 261 * LDO output.
262 */ 262 */
263 return da9052_reg_update(regulator->da9052, DA9052_SUPPLY_REG, 0, 263 return da9052_reg_update(regulator->da9052, DA9052_SUPPLY_REG,
264 info->activate_bit); 264 info->activate_bit, info->activate_bit);
265} 265}
266 266
267static int da9052_set_dcdc_voltage(struct regulator_dev *rdev, 267static int da9052_set_dcdc_voltage(struct regulator_dev *rdev,
@@ -280,8 +280,8 @@ static int da9052_set_dcdc_voltage(struct regulator_dev *rdev,
280 * the DCDC activate bit to implment the changes on the 280 * the DCDC activate bit to implment the changes on the
281 * DCDC output. 281 * DCDC output.
282 */ 282 */
283 return da9052_reg_update(regulator->da9052, DA9052_SUPPLY_REG, 0, 283 return da9052_reg_update(regulator->da9052, DA9052_SUPPLY_REG,
284 info->activate_bit); 284 info->activate_bit, info->activate_bit);
285} 285}
286 286
287static int da9052_get_regulator_voltage_sel(struct regulator_dev *rdev) 287static int da9052_get_regulator_voltage_sel(struct regulator_dev *rdev)
@@ -318,10 +318,10 @@ static int da9052_set_buckperi_voltage(struct regulator_dev *rdev, int min_uV,
318 if ((regulator->da9052->chip_id == DA9052) && 318 if ((regulator->da9052->chip_id == DA9052) &&
319 (min_uV >= DA9052_CONST_3uV)) 319 (min_uV >= DA9052_CONST_3uV))
320 *selector = DA9052_BUCK_PERI_REG_MAP_UPTO_3uV + 320 *selector = DA9052_BUCK_PERI_REG_MAP_UPTO_3uV +
321 ((min_uV - DA9052_CONST_3uV) / 321 DIV_ROUND_UP(min_uV - DA9052_CONST_3uV,
322 (DA9052_BUCK_PERI_3uV_STEP)); 322 DA9052_BUCK_PERI_3uV_STEP);
323 else 323 else
324 *selector = (min_uV - info->min_uV) / info->step_uV; 324 *selector = DIV_ROUND_UP(min_uV - info->min_uV, info->step_uV);
325 325
326 ret = da9052_list_buckperi_voltage(rdev, *selector); 326 ret = da9052_list_buckperi_voltage(rdev, *selector);
327 if (ret < 0) 327 if (ret < 0)
@@ -400,6 +400,7 @@ static struct regulator_ops da9052_ldo_ops = {
400 .ops = &da9052_ldo5_6_ops,\ 400 .ops = &da9052_ldo5_6_ops,\
401 .type = REGULATOR_VOLTAGE,\ 401 .type = REGULATOR_VOLTAGE,\
402 .id = _id,\ 402 .id = _id,\
403 .n_voltages = (max - min) / step + 1, \
403 .owner = THIS_MODULE,\ 404 .owner = THIS_MODULE,\
404 },\ 405 },\
405 .min_uV = (min) * 1000,\ 406 .min_uV = (min) * 1000,\
@@ -417,6 +418,7 @@ static struct regulator_ops da9052_ldo_ops = {
417 .ops = &da9052_ldo_ops,\ 418 .ops = &da9052_ldo_ops,\
418 .type = REGULATOR_VOLTAGE,\ 419 .type = REGULATOR_VOLTAGE,\
419 .id = _id,\ 420 .id = _id,\
421 .n_voltages = (max - min) / step + 1, \
420 .owner = THIS_MODULE,\ 422 .owner = THIS_MODULE,\
421 },\ 423 },\
422 .min_uV = (min) * 1000,\ 424 .min_uV = (min) * 1000,\
@@ -434,6 +436,7 @@ static struct regulator_ops da9052_ldo_ops = {
434 .ops = &da9052_dcdc_ops,\ 436 .ops = &da9052_dcdc_ops,\
435 .type = REGULATOR_VOLTAGE,\ 437 .type = REGULATOR_VOLTAGE,\
436 .id = _id,\ 438 .id = _id,\
439 .n_voltages = (max - min) / step + 1, \
437 .owner = THIS_MODULE,\ 440 .owner = THIS_MODULE,\
438 },\ 441 },\
439 .min_uV = (min) * 1000,\ 442 .min_uV = (min) * 1000,\
@@ -451,6 +454,7 @@ static struct regulator_ops da9052_ldo_ops = {
451 .ops = &da9052_buckperi_ops,\ 454 .ops = &da9052_buckperi_ops,\
452 .type = REGULATOR_VOLTAGE,\ 455 .type = REGULATOR_VOLTAGE,\
453 .id = _id,\ 456 .id = _id,\
457 .n_voltages = (max - min) / step + 1, \
454 .owner = THIS_MODULE,\ 458 .owner = THIS_MODULE,\
455 },\ 459 },\
456 .min_uV = (min) * 1000,\ 460 .min_uV = (min) * 1000,\
diff --git a/drivers/regulator/tps6524x-regulator.c b/drivers/regulator/tps6524x-regulator.c
index 70b7b1f4f000..2e94686b6fe6 100644
--- a/drivers/regulator/tps6524x-regulator.c
+++ b/drivers/regulator/tps6524x-regulator.c
@@ -481,7 +481,7 @@ static int set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV,
481 if (i >= info->n_voltages) 481 if (i >= info->n_voltages)
482 i = info->n_voltages - 1; 482 i = info->n_voltages - 1;
483 483
484 *selector = info->voltages[i]; 484 *selector = i;
485 485
486 return write_field(hw, &info->voltage, i); 486 return write_field(hw, &info->voltage, i);
487} 487}
diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c
index 5c15ba01e9c7..40ecf5165899 100644
--- a/drivers/regulator/tps65910-regulator.c
+++ b/drivers/regulator/tps65910-regulator.c
@@ -662,7 +662,7 @@ static int tps65910_set_voltage_dcdc(struct regulator_dev *dev,
662 tps65910_reg_write(pmic, TPS65910_VDD2_OP, vsel); 662 tps65910_reg_write(pmic, TPS65910_VDD2_OP, vsel);
663 break; 663 break;
664 case TPS65911_REG_VDDCTRL: 664 case TPS65911_REG_VDDCTRL:
665 vsel = selector; 665 vsel = selector + 3;
666 tps65910_reg_write(pmic, TPS65911_VDDCTRL_OP, vsel); 666 tps65910_reg_write(pmic, TPS65911_VDDCTRL_OP, vsel);
667 } 667 }
668 668
diff --git a/drivers/rtc/rtc-r9701.c b/drivers/rtc/rtc-r9701.c
index 9beba49c3c5b..2853c2a6f10f 100644
--- a/drivers/rtc/rtc-r9701.c
+++ b/drivers/rtc/rtc-r9701.c
@@ -125,6 +125,13 @@ static int __devinit r9701_probe(struct spi_device *spi)
125 unsigned char tmp; 125 unsigned char tmp;
126 int res; 126 int res;
127 127
128 tmp = R100CNT;
129 res = read_regs(&spi->dev, &tmp, 1);
130 if (res || tmp != 0x20) {
131 dev_err(&spi->dev, "cannot read RTC register\n");
132 return -ENODEV;
133 }
134
128 rtc = rtc_device_register("r9701", 135 rtc = rtc_device_register("r9701",
129 &spi->dev, &r9701_rtc_ops, THIS_MODULE); 136 &spi->dev, &r9701_rtc_ops, THIS_MODULE);
130 if (IS_ERR(rtc)) 137 if (IS_ERR(rtc))
@@ -132,13 +139,6 @@ static int __devinit r9701_probe(struct spi_device *spi)
132 139
133 dev_set_drvdata(&spi->dev, rtc); 140 dev_set_drvdata(&spi->dev, rtc);
134 141
135 tmp = R100CNT;
136 res = read_regs(&spi->dev, &tmp, 1);
137 if (res || tmp != 0x20) {
138 rtc_device_unregister(rtc);
139 return res;
140 }
141
142 return 0; 142 return 0;
143} 143}
144 144
diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
index 3ef8d071c64a..770a740a393c 100644
--- a/drivers/s390/cio/qdio_main.c
+++ b/drivers/s390/cio/qdio_main.c
@@ -167,7 +167,7 @@ again:
167 DBF_ERROR("%4x EQBS ERROR", SCH_NO(q)); 167 DBF_ERROR("%4x EQBS ERROR", SCH_NO(q));
168 DBF_ERROR("%3d%3d%2d", count, tmp_count, nr); 168 DBF_ERROR("%3d%3d%2d", count, tmp_count, nr);
169 q->handler(q->irq_ptr->cdev, QDIO_ERROR_ACTIVATE_CHECK_CONDITION, 169 q->handler(q->irq_ptr->cdev, QDIO_ERROR_ACTIVATE_CHECK_CONDITION,
170 0, -1, -1, q->irq_ptr->int_parm); 170 q->nr, q->first_to_kick, count, q->irq_ptr->int_parm);
171 return 0; 171 return 0;
172} 172}
173 173
@@ -215,7 +215,7 @@ again:
215 DBF_ERROR("%4x SQBS ERROR", SCH_NO(q)); 215 DBF_ERROR("%4x SQBS ERROR", SCH_NO(q));
216 DBF_ERROR("%3d%3d%2d", count, tmp_count, nr); 216 DBF_ERROR("%3d%3d%2d", count, tmp_count, nr);
217 q->handler(q->irq_ptr->cdev, QDIO_ERROR_ACTIVATE_CHECK_CONDITION, 217 q->handler(q->irq_ptr->cdev, QDIO_ERROR_ACTIVATE_CHECK_CONDITION,
218 0, -1, -1, q->irq_ptr->int_parm); 218 q->nr, q->first_to_kick, count, q->irq_ptr->int_parm);
219 return 0; 219 return 0;
220} 220}
221 221
diff --git a/drivers/scsi/sd_dif.c b/drivers/scsi/sd_dif.c
index 0cb39ff21171..f8fb2d691c0a 100644
--- a/drivers/scsi/sd_dif.c
+++ b/drivers/scsi/sd_dif.c
@@ -408,7 +408,7 @@ int sd_dif_prepare(struct request *rq, sector_t hw_sector, unsigned int sector_s
408 kunmap_atomic(sdt, KM_USER0); 408 kunmap_atomic(sdt, KM_USER0);
409 } 409 }
410 410
411 bio->bi_flags |= BIO_MAPPED_INTEGRITY; 411 bio->bi_flags |= (1 << BIO_MAPPED_INTEGRITY);
412 } 412 }
413 413
414 return 0; 414 return 0;
diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c
index 2f9cb43a2398..f37ad2271ad5 100644
--- a/drivers/spi/spi-pl022.c
+++ b/drivers/spi/spi-pl022.c
@@ -1083,7 +1083,7 @@ err_alloc_rx_sg:
1083 return -ENOMEM; 1083 return -ENOMEM;
1084} 1084}
1085 1085
1086static int __init pl022_dma_probe(struct pl022 *pl022) 1086static int __devinit pl022_dma_probe(struct pl022 *pl022)
1087{ 1087{
1088 dma_cap_mask_t mask; 1088 dma_cap_mask_t mask;
1089 1089
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c
index 44262908def5..501b27c18145 100644
--- a/drivers/target/iscsi/iscsi_target.c
+++ b/drivers/target/iscsi/iscsi_target.c
@@ -1028,7 +1028,7 @@ done:
1028 return iscsit_add_reject_from_cmd( 1028 return iscsit_add_reject_from_cmd(
1029 ISCSI_REASON_BOOKMARK_NO_RESOURCES, 1029 ISCSI_REASON_BOOKMARK_NO_RESOURCES,
1030 1, 1, buf, cmd); 1030 1, 1, buf, cmd);
1031 } else if (transport_ret == -EINVAL) { 1031 } else if (transport_ret < 0) {
1032 /* 1032 /*
1033 * Unsupported SAM Opcode. CHECK_CONDITION will be sent 1033 * Unsupported SAM Opcode. CHECK_CONDITION will be sent
1034 * in iscsit_execute_cmd() during the CmdSN OOO Execution 1034 * in iscsit_execute_cmd() during the CmdSN OOO Execution
diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
index b7c779389eea..63e703bb6ac9 100644
--- a/drivers/target/target_core_pr.c
+++ b/drivers/target/target_core_pr.c
@@ -117,7 +117,7 @@ static struct t10_pr_registration *core_scsi3_locate_pr_reg(struct se_device *,
117 struct se_node_acl *, struct se_session *); 117 struct se_node_acl *, struct se_session *);
118static void core_scsi3_put_pr_reg(struct t10_pr_registration *); 118static void core_scsi3_put_pr_reg(struct t10_pr_registration *);
119 119
120static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd, int *ret) 120static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd)
121{ 121{
122 struct se_session *se_sess = cmd->se_sess; 122 struct se_session *se_sess = cmd->se_sess;
123 struct se_subsystem_dev *su_dev = cmd->se_dev->se_sub_dev; 123 struct se_subsystem_dev *su_dev = cmd->se_dev->se_sub_dev;
@@ -127,7 +127,7 @@ static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd, int *ret)
127 int conflict = 0; 127 int conflict = 0;
128 128
129 if (!crh) 129 if (!crh)
130 return false; 130 return -EINVAL;
131 131
132 pr_reg = core_scsi3_locate_pr_reg(cmd->se_dev, se_sess->se_node_acl, 132 pr_reg = core_scsi3_locate_pr_reg(cmd->se_dev, se_sess->se_node_acl,
133 se_sess); 133 se_sess);
@@ -155,16 +155,14 @@ static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd, int *ret)
155 */ 155 */
156 if (pr_reg->pr_res_holder) { 156 if (pr_reg->pr_res_holder) {
157 core_scsi3_put_pr_reg(pr_reg); 157 core_scsi3_put_pr_reg(pr_reg);
158 *ret = 0; 158 return 1;
159 return false;
160 } 159 }
161 if ((pr_reg->pr_res_type == PR_TYPE_WRITE_EXCLUSIVE_REGONLY) || 160 if ((pr_reg->pr_res_type == PR_TYPE_WRITE_EXCLUSIVE_REGONLY) ||
162 (pr_reg->pr_res_type == PR_TYPE_EXCLUSIVE_ACCESS_REGONLY) || 161 (pr_reg->pr_res_type == PR_TYPE_EXCLUSIVE_ACCESS_REGONLY) ||
163 (pr_reg->pr_res_type == PR_TYPE_WRITE_EXCLUSIVE_ALLREG) || 162 (pr_reg->pr_res_type == PR_TYPE_WRITE_EXCLUSIVE_ALLREG) ||
164 (pr_reg->pr_res_type == PR_TYPE_EXCLUSIVE_ACCESS_ALLREG)) { 163 (pr_reg->pr_res_type == PR_TYPE_EXCLUSIVE_ACCESS_ALLREG)) {
165 core_scsi3_put_pr_reg(pr_reg); 164 core_scsi3_put_pr_reg(pr_reg);
166 *ret = 0; 165 return 1;
167 return true;
168 } 166 }
169 core_scsi3_put_pr_reg(pr_reg); 167 core_scsi3_put_pr_reg(pr_reg);
170 conflict = 1; 168 conflict = 1;
@@ -189,10 +187,10 @@ static int target_check_scsi2_reservation_conflict(struct se_cmd *cmd, int *ret)
189 " while active SPC-3 registrations exist," 187 " while active SPC-3 registrations exist,"
190 " returning RESERVATION_CONFLICT\n"); 188 " returning RESERVATION_CONFLICT\n");
191 cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT; 189 cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT;
192 return true; 190 return -EBUSY;
193 } 191 }
194 192
195 return false; 193 return 0;
196} 194}
197 195
198int target_scsi2_reservation_release(struct se_task *task) 196int target_scsi2_reservation_release(struct se_task *task)
@@ -201,12 +199,18 @@ int target_scsi2_reservation_release(struct se_task *task)
201 struct se_device *dev = cmd->se_dev; 199 struct se_device *dev = cmd->se_dev;
202 struct se_session *sess = cmd->se_sess; 200 struct se_session *sess = cmd->se_sess;
203 struct se_portal_group *tpg = sess->se_tpg; 201 struct se_portal_group *tpg = sess->se_tpg;
204 int ret = 0; 202 int ret = 0, rc;
205 203
206 if (!sess || !tpg) 204 if (!sess || !tpg)
207 goto out; 205 goto out;
208 if (target_check_scsi2_reservation_conflict(cmd, &ret)) 206 rc = target_check_scsi2_reservation_conflict(cmd);
207 if (rc == 1)
208 goto out;
209 else if (rc < 0) {
210 cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT;
211 ret = -EINVAL;
209 goto out; 212 goto out;
213 }
210 214
211 ret = 0; 215 ret = 0;
212 spin_lock(&dev->dev_reservation_lock); 216 spin_lock(&dev->dev_reservation_lock);
@@ -243,7 +247,7 @@ int target_scsi2_reservation_reserve(struct se_task *task)
243 struct se_device *dev = cmd->se_dev; 247 struct se_device *dev = cmd->se_dev;
244 struct se_session *sess = cmd->se_sess; 248 struct se_session *sess = cmd->se_sess;
245 struct se_portal_group *tpg = sess->se_tpg; 249 struct se_portal_group *tpg = sess->se_tpg;
246 int ret = 0; 250 int ret = 0, rc;
247 251
248 if ((cmd->t_task_cdb[1] & 0x01) && 252 if ((cmd->t_task_cdb[1] & 0x01) &&
249 (cmd->t_task_cdb[1] & 0x02)) { 253 (cmd->t_task_cdb[1] & 0x02)) {
@@ -259,8 +263,14 @@ int target_scsi2_reservation_reserve(struct se_task *task)
259 */ 263 */
260 if (!sess || !tpg) 264 if (!sess || !tpg)
261 goto out; 265 goto out;
262 if (target_check_scsi2_reservation_conflict(cmd, &ret)) 266 rc = target_check_scsi2_reservation_conflict(cmd);
267 if (rc == 1)
263 goto out; 268 goto out;
269 else if (rc < 0) {
270 cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT;
271 ret = -EINVAL;
272 goto out;
273 }
264 274
265 ret = 0; 275 ret = 0;
266 spin_lock(&dev->dev_reservation_lock); 276 spin_lock(&dev->dev_reservation_lock);
diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
index 58cea07b12fb..cd5cd95812bb 100644
--- a/drivers/target/target_core_transport.c
+++ b/drivers/target/target_core_transport.c
@@ -2539,6 +2539,7 @@ static int transport_generic_cmd_sequencer(
2539 cmd, cdb, pr_reg_type) != 0) { 2539 cmd, cdb, pr_reg_type) != 0) {
2540 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION; 2540 cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION;
2541 cmd->se_cmd_flags |= SCF_SCSI_RESERVATION_CONFLICT; 2541 cmd->se_cmd_flags |= SCF_SCSI_RESERVATION_CONFLICT;
2542 cmd->scsi_status = SAM_STAT_RESERVATION_CONFLICT;
2542 cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT; 2543 cmd->scsi_sense_reason = TCM_RESERVATION_CONFLICT;
2543 return -EBUSY; 2544 return -EBUSY;
2544 } 2545 }
diff --git a/drivers/tty/Kconfig b/drivers/tty/Kconfig
index b3d17416d86a..830cd62d8492 100644
--- a/drivers/tty/Kconfig
+++ b/drivers/tty/Kconfig
@@ -365,7 +365,7 @@ config PPC_EPAPR_HV_BYTECHAN
365 365
366config PPC_EARLY_DEBUG_EHV_BC 366config PPC_EARLY_DEBUG_EHV_BC
367 bool "Early console (udbg) support for ePAPR hypervisors" 367 bool "Early console (udbg) support for ePAPR hypervisors"
368 depends on PPC_EPAPR_HV_BYTECHAN 368 depends on PPC_EPAPR_HV_BYTECHAN=y
369 help 369 help
370 Select this option to enable early console (a.k.a. "udbg") support 370 Select this option to enable early console (a.k.a. "udbg") support
371 via an ePAPR byte channel. You also need to choose the byte channel 371 via an ePAPR byte channel. You also need to choose the byte channel
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index 75085795528e..61b7fd2729cd 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -1710,6 +1710,8 @@ static int sci_startup(struct uart_port *port)
1710 1710
1711 dev_dbg(port->dev, "%s(%d)\n", __func__, port->line); 1711 dev_dbg(port->dev, "%s(%d)\n", __func__, port->line);
1712 1712
1713 pm_runtime_put_noidle(port->dev);
1714
1713 sci_port_enable(s); 1715 sci_port_enable(s);
1714 1716
1715 ret = sci_request_irq(s); 1717 ret = sci_request_irq(s);
@@ -1737,6 +1739,8 @@ static void sci_shutdown(struct uart_port *port)
1737 sci_free_irq(s); 1739 sci_free_irq(s);
1738 1740
1739 sci_port_disable(s); 1741 sci_port_disable(s);
1742
1743 pm_runtime_get_noresume(port->dev);
1740} 1744}
1741 1745
1742static unsigned int sci_scbrr_calc(unsigned int algo_id, unsigned int bps, 1746static unsigned int sci_scbrr_calc(unsigned int algo_id, unsigned int bps,
@@ -2075,6 +2079,7 @@ static int __devinit sci_init_single(struct platform_device *dev,
2075 sci_init_gpios(sci_port); 2079 sci_init_gpios(sci_port);
2076 2080
2077 pm_runtime_irq_safe(&dev->dev); 2081 pm_runtime_irq_safe(&dev->dev);
2082 pm_runtime_get_noresume(&dev->dev);
2078 pm_runtime_enable(&dev->dev); 2083 pm_runtime_enable(&dev->dev);
2079 } 2084 }
2080 2085
diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c
index c26a82e83f6e..b556a72264d1 100644
--- a/drivers/usb/host/ehci-fsl.c
+++ b/drivers/usb/host/ehci-fsl.c
@@ -239,7 +239,7 @@ static void ehci_fsl_setup_phy(struct ehci_hcd *ehci,
239 ehci_writel(ehci, portsc, &ehci->regs->port_status[port_offset]); 239 ehci_writel(ehci, portsc, &ehci->regs->port_status[port_offset]);
240} 240}
241 241
242static int ehci_fsl_usb_setup(struct ehci_hcd *ehci) 242static void ehci_fsl_usb_setup(struct ehci_hcd *ehci)
243{ 243{
244 struct usb_hcd *hcd = ehci_to_hcd(ehci); 244 struct usb_hcd *hcd = ehci_to_hcd(ehci);
245 struct fsl_usb2_platform_data *pdata; 245 struct fsl_usb2_platform_data *pdata;
@@ -299,19 +299,12 @@ static int ehci_fsl_usb_setup(struct ehci_hcd *ehci)
299#endif 299#endif
300 out_be32(non_ehci + FSL_SOC_USB_SICTRL, 0x00000001); 300 out_be32(non_ehci + FSL_SOC_USB_SICTRL, 0x00000001);
301 } 301 }
302
303 if (!(in_be32(non_ehci + FSL_SOC_USB_CTRL) & CTRL_PHY_CLK_VALID)) {
304 printk(KERN_WARNING "fsl-ehci: USB PHY clock invalid\n");
305 return -ENODEV;
306 }
307 return 0;
308} 302}
309 303
310/* called after powerup, by probe or system-pm "wakeup" */ 304/* called after powerup, by probe or system-pm "wakeup" */
311static int ehci_fsl_reinit(struct ehci_hcd *ehci) 305static int ehci_fsl_reinit(struct ehci_hcd *ehci)
312{ 306{
313 if (ehci_fsl_usb_setup(ehci)) 307 ehci_fsl_usb_setup(ehci);
314 return -ENODEV;
315 ehci_port_power(ehci, 0); 308 ehci_port_power(ehci, 0);
316 309
317 return 0; 310 return 0;
diff --git a/drivers/usb/host/ehci-fsl.h b/drivers/usb/host/ehci-fsl.h
index bdf43e2adc51..491806221165 100644
--- a/drivers/usb/host/ehci-fsl.h
+++ b/drivers/usb/host/ehci-fsl.h
@@ -45,6 +45,5 @@
45#define FSL_SOC_USB_PRICTRL 0x40c /* NOTE: big-endian */ 45#define FSL_SOC_USB_PRICTRL 0x40c /* NOTE: big-endian */
46#define FSL_SOC_USB_SICTRL 0x410 /* NOTE: big-endian */ 46#define FSL_SOC_USB_SICTRL 0x410 /* NOTE: big-endian */
47#define FSL_SOC_USB_CTRL 0x500 /* NOTE: big-endian */ 47#define FSL_SOC_USB_CTRL 0x500 /* NOTE: big-endian */
48#define CTRL_PHY_CLK_VALID (1 << 17)
49#define SNOOP_SIZE_2GB 0x1e 48#define SNOOP_SIZE_2GB 0x1e
50#endif /* _EHCI_FSL_H */ 49#endif /* _EHCI_FSL_H */
diff --git a/drivers/video/backlight/s6e63m0.c b/drivers/video/backlight/s6e63m0.c
index e132157d8545..516db703dd24 100644
--- a/drivers/video/backlight/s6e63m0.c
+++ b/drivers/video/backlight/s6e63m0.c
@@ -690,7 +690,7 @@ static ssize_t s6e63m0_sysfs_store_gamma_mode(struct device *dev,
690 struct backlight_device *bd = NULL; 690 struct backlight_device *bd = NULL;
691 int brightness, rc; 691 int brightness, rc;
692 692
693 rc = strict_strtoul(buf, 0, (unsigned long *)&lcd->gamma_mode); 693 rc = kstrtouint(buf, 0, &lcd->gamma_mode);
694 if (rc < 0) 694 if (rc < 0)
695 return rc; 695 return rc;
696 696