]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
more .32 patches
authorGreg Kroah-Hartman <gregkh@suse.de>
Fri, 22 Jan 2010 15:14:27 +0000 (07:14 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 22 Jan 2010 15:14:27 +0000 (07:14 -0800)
queue-2.6.32/drm-i915-read-the-response-after-issuing-ddc-bus-switch-command.patch [new file with mode: 0644]
queue-2.6.32/drm-i915-try-another-possible-ddc-bus-for-the-sdvo-device-with-multiple-outputs.patch [new file with mode: 0644]
queue-2.6.32/scsi-enclosure-fix-oops-while-iterating-enclosure_status-array.patch [new file with mode: 0644]
queue-2.6.32/series

diff --git a/queue-2.6.32/drm-i915-read-the-response-after-issuing-ddc-bus-switch-command.patch b/queue-2.6.32/drm-i915-read-the-response-after-issuing-ddc-bus-switch-command.patch
new file mode 100644 (file)
index 0000000..e00da34
--- /dev/null
@@ -0,0 +1,100 @@
+From 6a304caf0bf9c429fc261f260b86cabf5bde2cbb Mon Sep 17 00:00:00 2001
+From: Zhao Yakui <yakui.zhao@intel.com>
+Date: Fri, 8 Jan 2010 10:58:19 +0800
+Subject: drm/i915: Read the response after issuing DDC bus switch command
+
+From: Zhao Yakui <yakui.zhao@intel.com>
+
+commit 6a304caf0bf9c429fc261f260b86cabf5bde2cbb upstream.
+
+For some SDVO cards based on conexant chip, we can't read the EDID if
+we don't read the response after issuing SDVO DDC bus switch
+command.
+
+From the SDVO spec once when another I2C transaction is finished after
+completing the I2C transaction of issuing the bus switch command, it
+will be switched back to the SDVO internal state again. So we can't
+initiate a new I2C transaction to read the response after issuing the
+DDC bus switch command. Instead we should issue DDC bus switch command
+and read the response in the same I2C transaction.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=23842
+https://bugs.freedesktop.org/show_bug.cgi?id=24458
+https://bugs.freedesktop.org/show_bug.cgi?id=24522
+https://bugs.freedesktop.org/show_bug.cgi?id=24282
+
+Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
+Tested-by: Sebastien Caty <sebastien.caty@mrnf.gouv.qc.ca>
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+--- a/drivers/gpu/drm/i915/intel_sdvo.c
++++ b/drivers/gpu/drm/i915/intel_sdvo.c
+@@ -462,14 +462,63 @@ static int intel_sdvo_get_pixel_multiplier(struct drm_display_mode *mode)
+ }
+ /**
+- * Don't check status code from this as it switches the bus back to the
+- * SDVO chips which defeats the purpose of doing a bus switch in the first
+- * place.
++ * Try to read the response after issuie the DDC switch command. But it
++ * is noted that we must do the action of reading response and issuing DDC
++ * switch command in one I2C transaction. Otherwise when we try to start
++ * another I2C transaction after issuing the DDC bus switch, it will be
++ * switched to the internal SDVO register.
+  */
+ static void intel_sdvo_set_control_bus_switch(struct intel_output *intel_output,
+                                             u8 target)
+ {
+-      intel_sdvo_write_cmd(intel_output, SDVO_CMD_SET_CONTROL_BUS_SWITCH, &target, 1);
++      struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv;
++      u8 out_buf[2], cmd_buf[2], ret_value[2], ret;
++      struct i2c_msg msgs[] = {
++              {
++                      .addr = sdvo_priv->slave_addr >> 1,
++                      .flags = 0,
++                      .len = 2,
++                      .buf = out_buf,
++              },
++              /* the following two are to read the response */
++              {
++                      .addr = sdvo_priv->slave_addr >> 1,
++                      .flags = 0,
++                      .len = 1,
++                      .buf = cmd_buf,
++              },
++              {
++                      .addr = sdvo_priv->slave_addr >> 1,
++                      .flags = I2C_M_RD,
++                      .len = 1,
++                      .buf = ret_value,
++              },
++      };
++
++      intel_sdvo_debug_write(intel_output, SDVO_CMD_SET_CONTROL_BUS_SWITCH,
++                                      &target, 1);
++      /* write the DDC switch command argument */
++      intel_sdvo_write_byte(intel_output, SDVO_I2C_ARG_0, target);
++
++      out_buf[0] = SDVO_I2C_OPCODE;
++      out_buf[1] = SDVO_CMD_SET_CONTROL_BUS_SWITCH;
++      cmd_buf[0] = SDVO_I2C_CMD_STATUS;
++      cmd_buf[1] = 0;
++      ret_value[0] = 0;
++      ret_value[1] = 0;
++
++      ret = i2c_transfer(intel_output->i2c_bus, msgs, 3);
++      if (ret != 3) {
++              /* failure in I2C transfer */
++              DRM_DEBUG_KMS("I2c transfer returned %d\n", ret);
++              return;
++      }
++      if (ret_value[0] != SDVO_CMD_STATUS_SUCCESS) {
++              DRM_DEBUG_KMS("DDC switch command returns response %d\n",
++                                      ret_value[0]);
++              return;
++      }
++      return;
+ }
+ static bool intel_sdvo_set_target_input(struct intel_output *intel_output, bool target_0, bool target_1)
diff --git a/queue-2.6.32/drm-i915-try-another-possible-ddc-bus-for-the-sdvo-device-with-multiple-outputs.patch b/queue-2.6.32/drm-i915-try-another-possible-ddc-bus-for-the-sdvo-device-with-multiple-outputs.patch
new file mode 100644 (file)
index 0000000..e3e9ba8
--- /dev/null
@@ -0,0 +1,59 @@
+From 7c3f0a2726fed78e0e0afe3b6fc3c1f5b298e447 Mon Sep 17 00:00:00 2001
+From: Zhao Yakui <yakui.zhao@intel.com>
+Date: Fri, 8 Jan 2010 10:58:20 +0800
+Subject: drm/i915: try another possible DDC bus for the SDVO device with multiple outputs
+
+From: Zhao Yakui <yakui.zhao@intel.com>
+
+commit 7c3f0a2726fed78e0e0afe3b6fc3c1f5b298e447 upstream.
+
+There exist multiple DDC buses for the SDVO cards with multiple outputs.
+When we can't get the EDID by using the select DDC bus, we can try the other
+possible DDC bus to see whether the EDID can be obtained.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=23842
+
+Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
+Tested-by: Sebastien Caty <sebastien.caty@mrnf.gouv.qc.ca>
+Signed-off-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/gpu/drm/i915/intel_sdvo.c |   26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+--- a/drivers/gpu/drm/i915/intel_sdvo.c
++++ b/drivers/gpu/drm/i915/intel_sdvo.c
+@@ -1638,6 +1638,32 @@ intel_sdvo_hdmi_sink_detect(struct drm_c
+       edid = drm_get_edid(&intel_output->base,
+                           intel_output->ddc_bus);
++      /* This is only applied to SDVO cards with multiple outputs */
++      if (edid == NULL && intel_sdvo_multifunc_encoder(intel_output)) {
++              uint8_t saved_ddc, temp_ddc;
++              saved_ddc = sdvo_priv->ddc_bus;
++              temp_ddc = sdvo_priv->ddc_bus >> 1;
++              /*
++               * Don't use the 1 as the argument of DDC bus switch to get
++               * the EDID. It is used for SDVO SPD ROM.
++               */
++              while(temp_ddc > 1) {
++                      sdvo_priv->ddc_bus = temp_ddc;
++                      edid = drm_get_edid(&intel_output->base,
++                              intel_output->ddc_bus);
++                      if (edid) {
++                              /*
++                               * When we can get the EDID, maybe it is the
++                               * correct DDC bus. Update it.
++                               */
++                              sdvo_priv->ddc_bus = temp_ddc;
++                              break;
++                      }
++                      temp_ddc >>= 1;
++              }
++              if (edid == NULL)
++                      sdvo_priv->ddc_bus = saved_ddc;
++      }
+       /* when there is no edid and no monitor is connected with VGA
+        * port, try to use the CRT ddc to read the EDID for DVI-connector
+        */
diff --git a/queue-2.6.32/scsi-enclosure-fix-oops-while-iterating-enclosure_status-array.patch b/queue-2.6.32/scsi-enclosure-fix-oops-while-iterating-enclosure_status-array.patch
new file mode 100644 (file)
index 0000000..c8eeacd
--- /dev/null
@@ -0,0 +1,49 @@
+From cc9b2e9f6603190c009e5d2629ce8e3f99571346 Mon Sep 17 00:00:00 2001
+From: James Bottomley <James.Bottomley@suse.de>
+Date: Thu, 26 Nov 2009 09:50:20 -0600
+Subject: SCSI: enclosure: fix oops while iterating enclosure_status array
+
+From: James Bottomley <James.Bottomley@suse.de>
+
+commit cc9b2e9f6603190c009e5d2629ce8e3f99571346 upstream.
+
+Based on patch originally by Jeff Mahoney <jeffm@suse.com>
+
+ enclosure_status is expected to be a NULL terminated array of strings
+ but isn't actually NULL terminated. When writing an invalid value to
+ /sys/class/enclosure/.../.../status, it goes off the end of the array
+ and Oopses.
+
+
+Fix by making the assumption true and adding NULL at the end.
+
+Reported-by: Artur Wojcik <artur.wojcik@intel.com>
+Signed-off-by: James Bottomley <James.Bottomley@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/misc/enclosure.c  |    1 +
+ include/linux/enclosure.h |    2 ++
+ 2 files changed, 3 insertions(+)
+
+--- a/drivers/misc/enclosure.c
++++ b/drivers/misc/enclosure.c
+@@ -391,6 +391,7 @@ static const char *const enclosure_statu
+       [ENCLOSURE_STATUS_NOT_INSTALLED] = "not installed",
+       [ENCLOSURE_STATUS_UNKNOWN] = "unknown",
+       [ENCLOSURE_STATUS_UNAVAILABLE] = "unavailable",
++      [ENCLOSURE_STATUS_MAX] = NULL,
+ };
+ static const char *const enclosure_type [] = {
+--- a/include/linux/enclosure.h
++++ b/include/linux/enclosure.h
+@@ -42,6 +42,8 @@ enum enclosure_status {
+       ENCLOSURE_STATUS_NOT_INSTALLED,
+       ENCLOSURE_STATUS_UNKNOWN,
+       ENCLOSURE_STATUS_UNAVAILABLE,
++      /* last element for counting purposes */
++      ENCLOSURE_STATUS_MAX
+ };
+ /* SFF-8485 activity light settings */
index 87916b3ac6c5d59a737e1cc3694db2bb8a184b08..71c2b34f052a4e89756288da3c996703d06bbf4f 100644 (file)
@@ -16,3 +16,6 @@ usb-add-missing-delay-during-remote-wakeup.patch
 usb-add-speed-values-for-usb-3.0-and-wireless-controllers.patch
 acpi-ec-accelerate-query-execution.patch
 acpi-ec-add-wait-for-irq-storm.patch
+scsi-enclosure-fix-oops-while-iterating-enclosure_status-array.patch
+drm-i915-read-the-response-after-issuing-ddc-bus-switch-command.patch
+drm-i915-try-another-possible-ddc-bus-for-the-sdvo-device-with-multiple-outputs.patch