* [PATCH V2 1/2] gmux: Add generic write32 function
@ 2012-08-13 22:52 Matthew Garrett
2012-08-13 22:52 ` [PATCH V2 2/2] apple_gmux: Add support for newer hardware Matthew Garrett
2012-08-14 0:44 ` [PATCH V2 1/2] gmux: Add generic write32 function Seth Forshee
0 siblings, 2 replies; 9+ messages in thread
From: Matthew Garrett @ 2012-08-13 22:52 UTC (permalink / raw)
To: linux-kernel; +Cc: platform-driver-x86, Matthew Garrett, Seth Forshee
Move the special-cased backlight update function to a generic gmux_write32
function.
Signed-off-by: Matthew Garrett <mjg@redhat.com>
Cc: Seth Forshee <seth.forshee@canonical.com>
---
Fixed the typo and irrelevant hunk
drivers/platform/x86/apple-gmux.c | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/drivers/platform/x86/apple-gmux.c b/drivers/platform/x86/apple-gmux.c
index 905fa01..c9db5072 100644
--- a/drivers/platform/x86/apple-gmux.c
+++ b/drivers/platform/x86/apple-gmux.c
@@ -75,6 +75,18 @@ static inline u32 gmux_read32(struct apple_gmux_data *gmux_data, int port)
return inl(gmux_data->iostart + port);
}
+static inline u32 gmux_write32(struct apple_gmux_data *gmux_data, int port,
+ u32 val)
+{
+ int i;
+ u8 tmpval;
+
+ for (i = 0; i < 4; i++) {
+ tmpval = (val >> (i * 8)) & 0xff;
+ outb(tmpval, port + i);
+ }
+}
+
static int gmux_get_brightness(struct backlight_device *bd)
{
struct apple_gmux_data *gmux_data = bl_get_data(bd);
@@ -90,16 +102,7 @@ static int gmux_update_status(struct backlight_device *bd)
if (bd->props.state & BL_CORE_SUSPENDED)
return 0;
- /*
- * Older gmux versions require writing out lower bytes first then
- * setting the upper byte to 0 to flush the values. Newer versions
- * accept a single u32 write, but the old method also works, so we
- * just use the old method for all gmux versions.
- */
- gmux_write8(gmux_data, GMUX_PORT_BRIGHTNESS, brightness);
- gmux_write8(gmux_data, GMUX_PORT_BRIGHTNESS + 1, brightness >> 8);
- gmux_write8(gmux_data, GMUX_PORT_BRIGHTNESS + 2, brightness >> 16);
- gmux_write8(gmux_data, GMUX_PORT_BRIGHTNESS + 3, 0);
+ gmux_write32(gmux_data, GMUX_PORT_BRIGHTNESS, brightness);
return 0;
}
--
1.7.11.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH V2 2/2] apple_gmux: Add support for newer hardware
2012-08-13 22:52 [PATCH V2 1/2] gmux: Add generic write32 function Matthew Garrett
@ 2012-08-13 22:52 ` Matthew Garrett
2012-08-14 0:46 ` Seth Forshee
2012-08-14 0:44 ` [PATCH V2 1/2] gmux: Add generic write32 function Seth Forshee
1 sibling, 1 reply; 9+ messages in thread
From: Matthew Garrett @ 2012-08-13 22:52 UTC (permalink / raw)
To: linux-kernel
Cc: platform-driver-x86, Matthew Garrett, Bernhard Froemel,
Seth Forshee
New gmux devices have a different method for accessing the registers.
Update the driver to cope. Incorporates feedback from Bernhard Froemel.
Signed-off-by: Matthew Garrett <mjg@redhat.com>
Cc: Bernhard Froemel <froemel@vmars.tuwien.ac.at>
Cc: Seth Forshee <seth.forshee@canonical.com>
---
drivers/platform/x86/apple-gmux.c | 179 +++++++++++++++++++++++++++++++++++---
1 file changed, 165 insertions(+), 14 deletions(-)
diff --git a/drivers/platform/x86/apple-gmux.c b/drivers/platform/x86/apple-gmux.c
index c9db5072..612b6f6 100644
--- a/drivers/platform/x86/apple-gmux.c
+++ b/drivers/platform/x86/apple-gmux.c
@@ -18,12 +18,15 @@
#include <linux/pnp.h>
#include <linux/apple_bl.h>
#include <linux/slab.h>
+#include <linux/delay.h>
#include <acpi/video.h>
#include <asm/io.h>
struct apple_gmux_data {
unsigned long iostart;
unsigned long iolen;
+ bool indexed;
+ struct mutex index_lock;
struct backlight_device *bdev;
};
@@ -45,6 +48,9 @@ struct apple_gmux_data {
#define GMUX_PORT_DISCRETE_POWER 0x50
#define GMUX_PORT_MAX_BRIGHTNESS 0x70
#define GMUX_PORT_BRIGHTNESS 0x74
+#define GMUX_PORT_VALUE 0xc2
+#define GMUX_PORT_READ 0xd0
+#define GMUX_PORT_WRITE 0xd4
#define GMUX_MIN_IO_LEN (GMUX_PORT_BRIGHTNESS + 4)
@@ -59,24 +65,24 @@ struct apple_gmux_data {
#define GMUX_BRIGHTNESS_MASK 0x00ffffff
#define GMUX_MAX_BRIGHTNESS GMUX_BRIGHTNESS_MASK
-static inline u8 gmux_read8(struct apple_gmux_data *gmux_data, int port)
+static u8 gmux_pio_read8(struct apple_gmux_data *gmux_data, int port)
{
return inb(gmux_data->iostart + port);
}
-static inline void gmux_write8(struct apple_gmux_data *gmux_data, int port,
+static void gmux_pio_write8(struct apple_gmux_data *gmux_data, int port,
u8 val)
{
outb(val, gmux_data->iostart + port);
}
-static inline u32 gmux_read32(struct apple_gmux_data *gmux_data, int port)
+static u32 gmux_pio_read32(struct apple_gmux_data *gmux_data, int port)
{
return inl(gmux_data->iostart + port);
}
-static inline u32 gmux_write32(struct apple_gmux_data *gmux_data, int port,
- u32 val)
+static void gmux_pio_write32(struct apple_gmux_data *gmux_data, int port,
+ u32 val)
{
int i;
u8 tmpval;
@@ -87,6 +93,144 @@ static inline u32 gmux_write32(struct apple_gmux_data *gmux_data, int port,
}
}
+static int gmux_index_wait_ready(struct apple_gmux_data *gmux_data)
+{
+ int i = 200;
+ u8 gwr = inb(gmux_data->iostart + GMUX_PORT_WRITE);
+
+ while (i && (gwr & 0x01)) {
+ inb(gmux_data->iostart + GMUX_PORT_READ);
+ gwr = inb(gmux_data->iostart + GMUX_PORT_WRITE);
+ msleep(100);
+ i--;
+ }
+
+ return !!i;
+}
+
+static int gmux_index_wait_complete(struct apple_gmux_data *gmux_data)
+{
+ int i = 200;
+ u8 gwr = inb(gmux_data->iostart + GMUX_PORT_WRITE);
+
+ while (i && (gwr & 0x01)) {
+ gwr = inb(gmux_data->iostart + GMUX_PORT_WRITE);
+ msleep(100);
+ i--;
+ }
+
+ if (gwr & 0x01)
+ inb(gmux_data->iostart + GMUX_PORT_READ);
+
+ return !!i;
+}
+
+static u8 gmux_index_read8(struct apple_gmux_data *gmux_data, int port)
+{
+ u8 val;
+
+ mutex_lock(&gmux_data->index_lock);
+ outb((port & 0xff), gmux_data->iostart + GMUX_PORT_READ);
+ gmux_index_wait_ready(gmux_data);
+ val = inb(gmux_data->iostart + GMUX_PORT_VALUE);
+ mutex_unlock(&gmux_data->index_lock);
+
+ return val;
+}
+
+static void gmux_index_write8(struct apple_gmux_data *gmux_data, int port,
+ u8 val)
+{
+ mutex_lock(&gmux_data->index_lock);
+ outb(val, gmux_data->iostart + GMUX_PORT_VALUE);
+ gmux_index_wait_ready(gmux_data);
+ outb(port & 0xff, gmux_data->iostart + GMUX_PORT_WRITE);
+ gmux_index_wait_complete(gmux_data);
+ mutex_unlock(&gmux_data->index_lock);
+}
+
+static u32 gmux_index_read32(struct apple_gmux_data *gmux_data, int port)
+{
+ u32 val;
+
+ mutex_lock(&gmux_data->index_lock);
+ outb((port & 0xff), gmux_data->iostart + GMUX_PORT_READ);
+ gmux_index_wait_ready(gmux_data);
+ val = inl(gmux_data->iostart + GMUX_PORT_VALUE);
+ mutex_unlock(&gmux_data->index_lock);
+
+ return val;
+}
+
+static void gmux_index_write32(struct apple_gmux_data *gmux_data, int port,
+ u32 val)
+{
+ int i;
+ u8 tmpval;
+
+ mutex_lock(&gmux_data->index_lock);
+
+ for (i = 0; i < 4; i++) {
+ tmpval = (val >> (i * 8)) & 0xff;
+ outb(tmpval, gmux_data->iostart + GMUX_PORT_VALUE + i);
+ }
+
+ gmux_index_wait_ready(gmux_data);
+ outb(port & 0xff, gmux_data->iostart + GMUX_PORT_WRITE);
+ gmux_index_wait_complete(gmux_data);
+ mutex_unlock(&gmux_data->index_lock);
+}
+
+static u8 gmux_read8(struct apple_gmux_data *gmux_data, int port)
+{
+ if (gmux_data->indexed)
+ return gmux_index_read8(gmux_data, port);
+ else
+ return gmux_pio_read8(gmux_data, port);
+}
+
+static void gmux_write8(struct apple_gmux_data *gmux_data, int port, u8 val)
+{
+ if (gmux_data->indexed)
+ gmux_index_write8(gmux_data, port, val);
+ else
+ gmux_pio_write8(gmux_data, port, val);
+}
+
+static u32 gmux_read32(struct apple_gmux_data *gmux_data, int port)
+{
+ if (gmux_data->indexed)
+ return gmux_index_read32(gmux_data, port);
+ else
+ return gmux_pio_read32(gmux_data, port);
+}
+
+static void gmux_write32(struct apple_gmux_data *gmux_data, int port,
+ u32 val)
+{
+ if (gmux_data->indexed)
+ gmux_index_write32(gmux_data, port, val);
+ else
+ gmux_pio_write32(gmux_data, port, val);
+}
+
+static bool gmux_is_indexed(struct apple_gmux_data *gmux_data)
+{
+ u16 val;
+
+ outb(0xaa, gmux_data->iostart + 0xcc);
+ outb(0x55, gmux_data->iostart + 0xcd);
+ outb(0x00, gmux_data->iostart + 0xce);
+
+ val = inb(gmux_data->iostart + 0xcc) |
+ (inb(gmux_data->iostart + 0xcd) << 8);
+
+ if (val == 0x55aa)
+ return true;
+
+ return false;
+}
+
static int gmux_get_brightness(struct backlight_device *bd)
{
struct apple_gmux_data *gmux_data = bl_get_data(bd);
@@ -150,22 +294,29 @@ static int __devinit gmux_probe(struct pnp_dev *pnp,
}
/*
- * On some machines the gmux is in ACPI even thought the machine
- * doesn't really have a gmux. Check for invalid version information
- * to detect this.
+ * Invalid version information may indicate either that the gmux
+ * device isn't present or that it's a new one that uses indexed
+ * io
*/
+
ver_major = gmux_read8(gmux_data, GMUX_PORT_VERSION_MAJOR);
ver_minor = gmux_read8(gmux_data, GMUX_PORT_VERSION_MINOR);
ver_release = gmux_read8(gmux_data, GMUX_PORT_VERSION_RELEASE);
if (ver_major == 0xff && ver_minor == 0xff && ver_release == 0xff) {
- pr_info("gmux device not present\n");
- ret = -ENODEV;
- goto err_release;
+ if (gmux_is_indexed(gmux_data)) {
+ mutex_init(&gmux_data->index_lock);
+ gmux_data->indexed = true;
+ } else {
+ pr_info("gmux device not present\n");
+ ret = -ENODEV;
+ goto err_release;
+ }
+ pr_info("Found indexed gmux\n");
+ } else {
+ pr_info("Found gmux version %d.%d.%d\n", ver_major, ver_minor,
+ ver_release);
}
- pr_info("Found gmux version %d.%d.%d\n", ver_major, ver_minor,
- ver_release);
-
memset(&props, 0, sizeof(props));
props.type = BACKLIGHT_PLATFORM;
props.max_brightness = gmux_read32(gmux_data, GMUX_PORT_MAX_BRIGHTNESS);
--
1.7.11.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH V2 1/2] gmux: Add generic write32 function
2012-08-13 22:52 [PATCH V2 1/2] gmux: Add generic write32 function Matthew Garrett
2012-08-13 22:52 ` [PATCH V2 2/2] apple_gmux: Add support for newer hardware Matthew Garrett
@ 2012-08-14 0:44 ` Seth Forshee
1 sibling, 0 replies; 9+ messages in thread
From: Seth Forshee @ 2012-08-14 0:44 UTC (permalink / raw)
To: Matthew Garrett; +Cc: linux-kernel, platform-driver-x86
On Mon, Aug 13, 2012 at 06:52:48PM -0400, Matthew Garrett wrote:
> Move the special-cased backlight update function to a generic gmux_write32
> function.
>
> Signed-off-by: Matthew Garrett <mjg@redhat.com>
> Cc: Seth Forshee <seth.forshee@canonical.com>
Acked-by: Seth Forshee <seth.forshee@canonical.com>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 2/2] apple_gmux: Add support for newer hardware
2012-08-13 22:52 ` [PATCH V2 2/2] apple_gmux: Add support for newer hardware Matthew Garrett
@ 2012-08-14 0:46 ` Seth Forshee
2012-08-14 14:05 ` Bernhard Froemel
0 siblings, 1 reply; 9+ messages in thread
From: Seth Forshee @ 2012-08-14 0:46 UTC (permalink / raw)
To: Matthew Garrett; +Cc: linux-kernel, platform-driver-x86, Bernhard Froemel
On Mon, Aug 13, 2012 at 06:52:49PM -0400, Matthew Garrett wrote:
> New gmux devices have a different method for accessing the registers.
> Update the driver to cope. Incorporates feedback from Bernhard Froemel.
>
> Signed-off-by: Matthew Garrett <mjg@redhat.com>
> Cc: Bernhard Froemel <froemel@vmars.tuwien.ac.at>
> Cc: Seth Forshee <seth.forshee@canonical.com>
Acked-by: Seth Forshee <seth.forshee@canonical.com>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 2/2] apple_gmux: Add support for newer hardware
2012-08-14 0:46 ` Seth Forshee
@ 2012-08-14 14:05 ` Bernhard Froemel
2012-08-14 14:53 ` Bernhard Froemel
0 siblings, 1 reply; 9+ messages in thread
From: Bernhard Froemel @ 2012-08-14 14:05 UTC (permalink / raw)
To: Matthew Garrett, linux-kernel, platform-driver-x86
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Please reduce the delay in the gmux_index_wait_[ready|complete]
functions: 100ms is way too long. 1 ms is more than enough. I never
experienced any problems with 100 us.
The version information can also be extracted in the new gmux device
(see my initial patch proposal).
Bernhard
On 08/14/2012 02:46 AM, Seth Forshee wrote:
> On Mon, Aug 13, 2012 at 06:52:49PM -0400, Matthew Garrett wrote:
>> New gmux devices have a different method for accessing the
>> registers. Update the driver to cope. Incorporates feedback from
>> Bernhard Froemel.
>>
>> Signed-off-by: Matthew Garrett <mjg@redhat.com> Cc: Bernhard
>> Froemel <froemel@vmars.tuwien.ac.at> Cc: Seth Forshee
>> <seth.forshee@canonical.com>
>
> Acked-by: Seth Forshee <seth.forshee@canonical.com>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAlAqWz8ACgkQ6iVUjPs37Jny4QCgvIj24lw/hpSF35P3k7vKcxtt
xj4AoNdN4u1QE4YErj771aP2ArZMDOS1
=TJHi
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 2/2] apple_gmux: Add support for newer hardware
2012-08-14 14:05 ` Bernhard Froemel
@ 2012-08-14 14:53 ` Bernhard Froemel
2012-08-14 15:15 ` Seth Forshee
0 siblings, 1 reply; 9+ messages in thread
From: Bernhard Froemel @ 2012-08-14 14:53 UTC (permalink / raw)
To: Matthew Garrett, linux-kernel, platform-driver-x86
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Only in relation to Seth's future apple-gmux patch series about
vgaswitcheroo and restoring the gmux device configuration across
suspend/resume [1]:
On resume the gmux registers 0x28 (DDC) and 0x10 (SWITCH_DISPLAY)
(i.e., the first two writes) are not restored (result: the screen
remains black after suspend/resume).
Of course, this does not happen with my patch proposal ;)
Unfortunately, I have not the time to sort this out in the next couple
of days -- on the other hand this is probably not a problem w.r.t.
this patch, but needs to be taken care of in Seth's patch series.
Bernhard
[1] http://people.canonical.com/~sforshee/apple-gmux-patches/
On 08/14/2012 04:05 PM, Bernhard Froemel wrote:
> Please reduce the delay in the gmux_index_wait_[ready|complete]
> functions: 100ms is way too long. 1 ms is more than enough. I
> never experienced any problems with 100 us.
>
> The version information can also be extracted in the new gmux
> device (see my initial patch proposal).
>
> Bernhard
>
> On 08/14/2012 02:46 AM, Seth Forshee wrote:
>> On Mon, Aug 13, 2012 at 06:52:49PM -0400, Matthew Garrett wrote:
>>> New gmux devices have a different method for accessing the
>>> registers. Update the driver to cope. Incorporates feedback
>>> from Bernhard Froemel.
>>>
>>> Signed-off-by: Matthew Garrett <mjg@redhat.com> Cc: Bernhard
>>> Froemel <froemel@vmars.tuwien.ac.at> Cc: Seth Forshee
>>> <seth.forshee@canonical.com>
>
>> Acked-by: Seth Forshee <seth.forshee@canonical.com>
>
>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAlAqZnsACgkQ6iVUjPs37JlYfwCcCH17qDbQO2xqhlOsqjliVWA/
bm0AnAyeh7pprGvS8qdTAvB0c3RYJsFc
=pQxQ
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 2/2] apple_gmux: Add support for newer hardware
2012-08-14 14:53 ` Bernhard Froemel
@ 2012-08-14 15:15 ` Seth Forshee
2012-08-14 17:11 ` Bernhard Froemel
0 siblings, 1 reply; 9+ messages in thread
From: Seth Forshee @ 2012-08-14 15:15 UTC (permalink / raw)
To: Bernhard Froemel; +Cc: Matthew Garrett, linux-kernel, platform-driver-x86
On Tue, Aug 14, 2012 at 04:53:47PM +0200, Bernhard Froemel wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Only in relation to Seth's future apple-gmux patch series about
> vgaswitcheroo and restoring the gmux device configuration across
> suspend/resume [1]:
> On resume the gmux registers 0x28 (DDC) and 0x10 (SWITCH_DISPLAY)
> (i.e., the first two writes) are not restored (result: the screen
> remains black after suspend/resume).
>
> Of course, this does not happen with my patch proposal ;)
> Unfortunately, I have not the time to sort this out in the next couple
> of days -- on the other hand this is probably not a problem w.r.t.
> this patch, but needs to be taken care of in Seth's patch series.
The patch adding support for switcheroo *does* restore those registers
on resume. Are you saying that isn't happening when you use it?
Seth
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 2/2] apple_gmux: Add support for newer hardware
2012-08-14 15:15 ` Seth Forshee
@ 2012-08-14 17:11 ` Bernhard Froemel
2012-08-15 7:46 ` Bernhard Froemel
0 siblings, 1 reply; 9+ messages in thread
From: Bernhard Froemel @ 2012-08-14 17:11 UTC (permalink / raw)
To: Matthew Garrett, linux-kernel, platform-driver-x86
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 08/14/2012 05:15 PM, Seth Forshee wrote:
> On Tue, Aug 14, 2012 at 04:53:47PM +0200, Bernhard Froemel wrote:
>> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
>>
>> Only in relation to Seth's future apple-gmux patch series about
>> vgaswitcheroo and restoring the gmux device configuration across
>> suspend/resume [1]: On resume the gmux registers 0x28 (DDC) and
>> 0x10 (SWITCH_DISPLAY) (i.e., the first two writes) are not
>> restored (result: the screen remains black after
>> suspend/resume).
>>
>> Of course, this does not happen with my patch proposal ;)
>> Unfortunately, I have not the time to sort this out in the next
>> couple of days -- on the other hand this is probably not a
>> problem w.r.t. this patch, but needs to be taken care of in
>> Seth's patch series.
>
> The patch adding support for switcheroo *does* restore those
> registers on resume. Are you saying that isn't happening when you
> use it?
Yes, the 8bit writes don't seem to get all through with Matthew's
patch, but they do with mine.
Just tested manual switching (/sys/kernel/debug/vgaswitcheroo/switch,
from IGD to DIS) -> doesn't work either; even locks up my system:
> [ 123.680062] hda-intel: spurious response 0x407381:0x0, last
> cmd=0x770883 [ 123.680070] hda-intel: spurious response
> 0x9000094:0x0, last cmd=0x770883 [ 123.680073] hda-intel: spurious
> response 0x185600f0:0x0, last cmd=0x770883 [ 123.680076]
> hda-intel: spurious response 0x4:0x0, last cmd=0x770883 [
> 123.680079] hda-intel: spurious response 0xb0a0908:0x0, last
> cmd=0x770883 [ 123.680082] hda-intel: spurious response
> 0x407381:0x0, last cmd=0x770883 [ 123.680084] hda-intel: spurious
> response 0x9000094:0x0, last cmd=0x770883 [ 123.680087] hda-intel:
> spurious response 0x185600f0:0x0, last cmd=0x770883
While comparing our patches, I discovered that mine isnt' a good
reference here, because in my ready and complete function variants I
didn't write/read the correct ioports (forgot about the offset; so
they were only slightly delaying execution). After I fixed that (and a
status-bit semantic mixup), the results appear similar :/
Need to play around further..
Bernhard
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAlAqhrcACgkQ6iVUjPs37JnhtwCePUp7sLQW+GhBFOkFbkjr6Yrh
VAsAoJ3TjtJu2gQpayFc6iP5nBQfdAPG
=ziXd
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH V2 2/2] apple_gmux: Add support for newer hardware
2012-08-14 17:11 ` Bernhard Froemel
@ 2012-08-15 7:46 ` Bernhard Froemel
0 siblings, 0 replies; 9+ messages in thread
From: Bernhard Froemel @ 2012-08-15 7:46 UTC (permalink / raw)
To: Matthew Garrett, linux-kernel, platform-driver-x86
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 08/14/2012 07:11 PM, Bernhard Froemel wrote:
> Need to play around further..
I think I solved the communication problems concerning byte writes to
the gmux device.
This:
http://luna.vmars.tuwien.ac.at/~froemel/rmbp/patch-apple-gmux_v2.txt
works reliable for me (50+ suspend/resume cycles, many brightness
changes) *without* delays.
I looked once more through Apple's original driver and noticed that
their cmd_done waits until bit 1 is set (not cleared!) and also does
the final read from GMUX_PORT_DPM_RADDR only if bit 1 is not set.
Also it seems that in case of byte writes the old interface should be
followed as well (Apple, why?!).
Bernhard
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAlArU9cACgkQ6iVUjPs37Jk6iACfWuZ7zpbc1vFLgJR29UroJeL2
HvMAnja8D7/o+aqywr/qRtNrB/o217Ci
=gcjo
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2012-08-15 7:46 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-13 22:52 [PATCH V2 1/2] gmux: Add generic write32 function Matthew Garrett
2012-08-13 22:52 ` [PATCH V2 2/2] apple_gmux: Add support for newer hardware Matthew Garrett
2012-08-14 0:46 ` Seth Forshee
2012-08-14 14:05 ` Bernhard Froemel
2012-08-14 14:53 ` Bernhard Froemel
2012-08-14 15:15 ` Seth Forshee
2012-08-14 17:11 ` Bernhard Froemel
2012-08-15 7:46 ` Bernhard Froemel
2012-08-14 0:44 ` [PATCH V2 1/2] gmux: Add generic write32 function Seth Forshee
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.