diff options
Diffstat (limited to 'drivers/platform/x86/apple-gmux.c')
-rw-r--r-- | drivers/platform/x86/apple-gmux.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/drivers/platform/x86/apple-gmux.c b/drivers/platform/x86/apple-gmux.c index dfb1a92ce949..db8f63841b42 100644 --- a/drivers/platform/x86/apple-gmux.c +++ b/drivers/platform/x86/apple-gmux.c | |||
@@ -101,7 +101,7 @@ static void gmux_pio_write32(struct apple_gmux_data *gmux_data, int port, | |||
101 | 101 | ||
102 | for (i = 0; i < 4; i++) { | 102 | for (i = 0; i < 4; i++) { |
103 | tmpval = (val >> (i * 8)) & 0xff; | 103 | tmpval = (val >> (i * 8)) & 0xff; |
104 | outb(tmpval, port + i); | 104 | outb(tmpval, gmux_data->iostart + port + i); |
105 | } | 105 | } |
106 | } | 106 | } |
107 | 107 | ||
@@ -142,8 +142,9 @@ static u8 gmux_index_read8(struct apple_gmux_data *gmux_data, int port) | |||
142 | u8 val; | 142 | u8 val; |
143 | 143 | ||
144 | mutex_lock(&gmux_data->index_lock); | 144 | mutex_lock(&gmux_data->index_lock); |
145 | outb((port & 0xff), gmux_data->iostart + GMUX_PORT_READ); | ||
146 | gmux_index_wait_ready(gmux_data); | 145 | gmux_index_wait_ready(gmux_data); |
146 | outb((port & 0xff), gmux_data->iostart + GMUX_PORT_READ); | ||
147 | gmux_index_wait_complete(gmux_data); | ||
147 | val = inb(gmux_data->iostart + GMUX_PORT_VALUE); | 148 | val = inb(gmux_data->iostart + GMUX_PORT_VALUE); |
148 | mutex_unlock(&gmux_data->index_lock); | 149 | mutex_unlock(&gmux_data->index_lock); |
149 | 150 | ||
@@ -166,8 +167,9 @@ static u32 gmux_index_read32(struct apple_gmux_data *gmux_data, int port) | |||
166 | u32 val; | 167 | u32 val; |
167 | 168 | ||
168 | mutex_lock(&gmux_data->index_lock); | 169 | mutex_lock(&gmux_data->index_lock); |
169 | outb((port & 0xff), gmux_data->iostart + GMUX_PORT_READ); | ||
170 | gmux_index_wait_ready(gmux_data); | 170 | gmux_index_wait_ready(gmux_data); |
171 | outb((port & 0xff), gmux_data->iostart + GMUX_PORT_READ); | ||
172 | gmux_index_wait_complete(gmux_data); | ||
171 | val = inl(gmux_data->iostart + GMUX_PORT_VALUE); | 173 | val = inl(gmux_data->iostart + GMUX_PORT_VALUE); |
172 | mutex_unlock(&gmux_data->index_lock); | 174 | mutex_unlock(&gmux_data->index_lock); |
173 | 175 | ||
@@ -461,18 +463,22 @@ static int __devinit gmux_probe(struct pnp_dev *pnp, | |||
461 | ver_release = gmux_read8(gmux_data, GMUX_PORT_VERSION_RELEASE); | 463 | ver_release = gmux_read8(gmux_data, GMUX_PORT_VERSION_RELEASE); |
462 | if (ver_major == 0xff && ver_minor == 0xff && ver_release == 0xff) { | 464 | if (ver_major == 0xff && ver_minor == 0xff && ver_release == 0xff) { |
463 | if (gmux_is_indexed(gmux_data)) { | 465 | if (gmux_is_indexed(gmux_data)) { |
466 | u32 version; | ||
464 | mutex_init(&gmux_data->index_lock); | 467 | mutex_init(&gmux_data->index_lock); |
465 | gmux_data->indexed = true; | 468 | gmux_data->indexed = true; |
469 | version = gmux_read32(gmux_data, | ||
470 | GMUX_PORT_VERSION_MAJOR); | ||
471 | ver_major = (version >> 24) & 0xff; | ||
472 | ver_minor = (version >> 16) & 0xff; | ||
473 | ver_release = (version >> 8) & 0xff; | ||
466 | } else { | 474 | } else { |
467 | pr_info("gmux device not present\n"); | 475 | pr_info("gmux device not present\n"); |
468 | ret = -ENODEV; | 476 | ret = -ENODEV; |
469 | goto err_release; | 477 | goto err_release; |
470 | } | 478 | } |
471 | pr_info("Found indexed gmux\n"); | ||
472 | } else { | ||
473 | pr_info("Found gmux version %d.%d.%d\n", ver_major, ver_minor, | ||
474 | ver_release); | ||
475 | } | 479 | } |
480 | pr_info("Found gmux version %d.%d.%d [%s]\n", ver_major, ver_minor, | ||
481 | ver_release, (gmux_data->indexed ? "indexed" : "classic")); | ||
476 | 482 | ||
477 | memset(&props, 0, sizeof(props)); | 483 | memset(&props, 0, sizeof(props)); |
478 | props.type = BACKLIGHT_PLATFORM; | 484 | props.type = BACKLIGHT_PLATFORM; |
@@ -505,9 +511,7 @@ static int __devinit gmux_probe(struct pnp_dev *pnp, | |||
505 | * Disable the other backlight choices. | 511 | * Disable the other backlight choices. |
506 | */ | 512 | */ |
507 | acpi_video_dmi_promote_vendor(); | 513 | acpi_video_dmi_promote_vendor(); |
508 | #if defined (CONFIG_ACPI_VIDEO) || defined (CONFIG_ACPI_VIDEO_MODULE) | ||
509 | acpi_video_unregister(); | 514 | acpi_video_unregister(); |
510 | #endif | ||
511 | apple_bl_unregister(); | 515 | apple_bl_unregister(); |
512 | 516 | ||
513 | gmux_data->power_state = VGA_SWITCHEROO_ON; | 517 | gmux_data->power_state = VGA_SWITCHEROO_ON; |
@@ -593,9 +597,7 @@ static void __devexit gmux_remove(struct pnp_dev *pnp) | |||
593 | kfree(gmux_data); | 597 | kfree(gmux_data); |
594 | 598 | ||
595 | acpi_video_dmi_demote_vendor(); | 599 | acpi_video_dmi_demote_vendor(); |
596 | #if defined (CONFIG_ACPI_VIDEO) || defined (CONFIG_ACPI_VIDEO_MODULE) | ||
597 | acpi_video_register(); | 600 | acpi_video_register(); |
598 | #endif | ||
599 | apple_bl_register(); | 601 | apple_bl_register(); |
600 | } | 602 | } |
601 | 603 | ||