Lines Matching refs:gmux_data

82 static u8 gmux_pio_read8(struct apple_gmux_data *gmux_data, int port)  in gmux_pio_read8()  argument
84 return inb(gmux_data->iostart + port); in gmux_pio_read8()
87 static void gmux_pio_write8(struct apple_gmux_data *gmux_data, int port, in gmux_pio_write8() argument
90 outb(val, gmux_data->iostart + port); in gmux_pio_write8()
93 static u32 gmux_pio_read32(struct apple_gmux_data *gmux_data, int port) in gmux_pio_read32() argument
95 return inl(gmux_data->iostart + port); in gmux_pio_read32()
98 static void gmux_pio_write32(struct apple_gmux_data *gmux_data, int port, in gmux_pio_write32() argument
106 outb(tmpval, gmux_data->iostart + port + i); in gmux_pio_write32()
110 static int gmux_index_wait_ready(struct apple_gmux_data *gmux_data) in gmux_index_wait_ready() argument
113 u8 gwr = inb(gmux_data->iostart + GMUX_PORT_WRITE); in gmux_index_wait_ready()
116 inb(gmux_data->iostart + GMUX_PORT_READ); in gmux_index_wait_ready()
117 gwr = inb(gmux_data->iostart + GMUX_PORT_WRITE); in gmux_index_wait_ready()
125 static int gmux_index_wait_complete(struct apple_gmux_data *gmux_data) in gmux_index_wait_complete() argument
128 u8 gwr = inb(gmux_data->iostart + GMUX_PORT_WRITE); in gmux_index_wait_complete()
131 gwr = inb(gmux_data->iostart + GMUX_PORT_WRITE); in gmux_index_wait_complete()
137 inb(gmux_data->iostart + GMUX_PORT_READ); in gmux_index_wait_complete()
142 static u8 gmux_index_read8(struct apple_gmux_data *gmux_data, int port) in gmux_index_read8() argument
146 mutex_lock(&gmux_data->index_lock); in gmux_index_read8()
147 gmux_index_wait_ready(gmux_data); in gmux_index_read8()
148 outb((port & 0xff), gmux_data->iostart + GMUX_PORT_READ); in gmux_index_read8()
149 gmux_index_wait_complete(gmux_data); in gmux_index_read8()
150 val = inb(gmux_data->iostart + GMUX_PORT_VALUE); in gmux_index_read8()
151 mutex_unlock(&gmux_data->index_lock); in gmux_index_read8()
156 static void gmux_index_write8(struct apple_gmux_data *gmux_data, int port, in gmux_index_write8() argument
159 mutex_lock(&gmux_data->index_lock); in gmux_index_write8()
160 outb(val, gmux_data->iostart + GMUX_PORT_VALUE); in gmux_index_write8()
161 gmux_index_wait_ready(gmux_data); in gmux_index_write8()
162 outb(port & 0xff, gmux_data->iostart + GMUX_PORT_WRITE); in gmux_index_write8()
163 gmux_index_wait_complete(gmux_data); in gmux_index_write8()
164 mutex_unlock(&gmux_data->index_lock); in gmux_index_write8()
167 static u32 gmux_index_read32(struct apple_gmux_data *gmux_data, int port) in gmux_index_read32() argument
171 mutex_lock(&gmux_data->index_lock); in gmux_index_read32()
172 gmux_index_wait_ready(gmux_data); in gmux_index_read32()
173 outb((port & 0xff), gmux_data->iostart + GMUX_PORT_READ); in gmux_index_read32()
174 gmux_index_wait_complete(gmux_data); in gmux_index_read32()
175 val = inl(gmux_data->iostart + GMUX_PORT_VALUE); in gmux_index_read32()
176 mutex_unlock(&gmux_data->index_lock); in gmux_index_read32()
181 static void gmux_index_write32(struct apple_gmux_data *gmux_data, int port, in gmux_index_write32() argument
187 mutex_lock(&gmux_data->index_lock); in gmux_index_write32()
191 outb(tmpval, gmux_data->iostart + GMUX_PORT_VALUE + i); in gmux_index_write32()
194 gmux_index_wait_ready(gmux_data); in gmux_index_write32()
195 outb(port & 0xff, gmux_data->iostart + GMUX_PORT_WRITE); in gmux_index_write32()
196 gmux_index_wait_complete(gmux_data); in gmux_index_write32()
197 mutex_unlock(&gmux_data->index_lock); in gmux_index_write32()
200 static u8 gmux_read8(struct apple_gmux_data *gmux_data, int port) in gmux_read8() argument
202 if (gmux_data->indexed) in gmux_read8()
203 return gmux_index_read8(gmux_data, port); in gmux_read8()
205 return gmux_pio_read8(gmux_data, port); in gmux_read8()
208 static void gmux_write8(struct apple_gmux_data *gmux_data, int port, u8 val) in gmux_write8() argument
210 if (gmux_data->indexed) in gmux_write8()
211 gmux_index_write8(gmux_data, port, val); in gmux_write8()
213 gmux_pio_write8(gmux_data, port, val); in gmux_write8()
216 static u32 gmux_read32(struct apple_gmux_data *gmux_data, int port) in gmux_read32() argument
218 if (gmux_data->indexed) in gmux_read32()
219 return gmux_index_read32(gmux_data, port); in gmux_read32()
221 return gmux_pio_read32(gmux_data, port); in gmux_read32()
224 static void gmux_write32(struct apple_gmux_data *gmux_data, int port, in gmux_write32() argument
227 if (gmux_data->indexed) in gmux_write32()
228 gmux_index_write32(gmux_data, port, val); in gmux_write32()
230 gmux_pio_write32(gmux_data, port, val); in gmux_write32()
233 static bool gmux_is_indexed(struct apple_gmux_data *gmux_data) in gmux_is_indexed() argument
237 outb(0xaa, gmux_data->iostart + 0xcc); in gmux_is_indexed()
238 outb(0x55, gmux_data->iostart + 0xcd); in gmux_is_indexed()
239 outb(0x00, gmux_data->iostart + 0xce); in gmux_is_indexed()
241 val = inb(gmux_data->iostart + 0xcc) | in gmux_is_indexed()
242 (inb(gmux_data->iostart + 0xcd) << 8); in gmux_is_indexed()
252 struct apple_gmux_data *gmux_data = bl_get_data(bd); in gmux_get_brightness() local
253 return gmux_read32(gmux_data, GMUX_PORT_BRIGHTNESS) & in gmux_get_brightness()
259 struct apple_gmux_data *gmux_data = bl_get_data(bd); in gmux_update_status() local
265 gmux_write32(gmux_data, GMUX_PORT_BRIGHTNESS, brightness); in gmux_update_status()
291 static int gmux_set_discrete_state(struct apple_gmux_data *gmux_data, in gmux_set_discrete_state() argument
294 reinit_completion(&gmux_data->powerchange_done); in gmux_set_discrete_state()
297 gmux_write8(gmux_data, GMUX_PORT_DISCRETE_POWER, 1); in gmux_set_discrete_state()
298 gmux_write8(gmux_data, GMUX_PORT_DISCRETE_POWER, 3); in gmux_set_discrete_state()
301 gmux_write8(gmux_data, GMUX_PORT_DISCRETE_POWER, 1); in gmux_set_discrete_state()
302 gmux_write8(gmux_data, GMUX_PORT_DISCRETE_POWER, 0); in gmux_set_discrete_state()
306 gmux_data->power_state = state; in gmux_set_discrete_state()
308 if (gmux_data->gpe >= 0 && in gmux_set_discrete_state()
309 !wait_for_completion_interruptible_timeout(&gmux_data->powerchange_done, in gmux_set_discrete_state()
341 gmux_active_client(struct apple_gmux_data *gmux_data) in gmux_active_client() argument
343 if (gmux_read8(gmux_data, GMUX_PORT_SWITCH_DISPLAY) == 2) in gmux_active_client()
355 static inline void gmux_disable_interrupts(struct apple_gmux_data *gmux_data) in gmux_disable_interrupts() argument
357 gmux_write8(gmux_data, GMUX_PORT_INTERRUPT_ENABLE, in gmux_disable_interrupts()
361 static inline void gmux_enable_interrupts(struct apple_gmux_data *gmux_data) in gmux_enable_interrupts() argument
363 gmux_write8(gmux_data, GMUX_PORT_INTERRUPT_ENABLE, in gmux_enable_interrupts()
367 static inline u8 gmux_interrupt_get_status(struct apple_gmux_data *gmux_data) in gmux_interrupt_get_status() argument
369 return gmux_read8(gmux_data, GMUX_PORT_INTERRUPT_STATUS); in gmux_interrupt_get_status()
372 static void gmux_clear_interrupts(struct apple_gmux_data *gmux_data) in gmux_clear_interrupts() argument
377 status = gmux_interrupt_get_status(gmux_data); in gmux_clear_interrupts()
378 gmux_write8(gmux_data, GMUX_PORT_INTERRUPT_STATUS, status); in gmux_clear_interrupts()
385 struct apple_gmux_data *gmux_data = pnp_get_drvdata(pnp); in gmux_notify_handler() local
387 status = gmux_interrupt_get_status(gmux_data); in gmux_notify_handler()
388 gmux_disable_interrupts(gmux_data); in gmux_notify_handler()
391 gmux_clear_interrupts(gmux_data); in gmux_notify_handler()
392 gmux_enable_interrupts(gmux_data); in gmux_notify_handler()
395 complete(&gmux_data->powerchange_done); in gmux_notify_handler()
401 struct apple_gmux_data *gmux_data = pnp_get_drvdata(pnp); in gmux_suspend() local
403 gmux_data->resume_client_id = gmux_active_client(gmux_data); in gmux_suspend()
404 gmux_disable_interrupts(gmux_data); in gmux_suspend()
411 struct apple_gmux_data *gmux_data = pnp_get_drvdata(pnp); in gmux_resume() local
413 gmux_enable_interrupts(gmux_data); in gmux_resume()
414 gmux_switchto(gmux_data->resume_client_id); in gmux_resume()
415 if (gmux_data->power_state == VGA_SWITCHEROO_OFF) in gmux_resume()
416 gmux_set_discrete_state(gmux_data, gmux_data->power_state); in gmux_resume()
439 struct apple_gmux_data *gmux_data; in gmux_probe() local
452 gmux_data = kzalloc(sizeof(*gmux_data), GFP_KERNEL); in gmux_probe()
453 if (!gmux_data) in gmux_probe()
455 pnp_set_drvdata(pnp, gmux_data); in gmux_probe()
463 gmux_data->iostart = res->start; in gmux_probe()
464 gmux_data->iolen = res->end - res->start; in gmux_probe()
466 if (gmux_data->iolen < GMUX_MIN_IO_LEN) { in gmux_probe()
468 gmux_data->iolen, GMUX_MIN_IO_LEN); in gmux_probe()
472 if (!request_region(gmux_data->iostart, gmux_data->iolen, in gmux_probe()
484 ver_major = gmux_read8(gmux_data, GMUX_PORT_VERSION_MAJOR); in gmux_probe()
485 ver_minor = gmux_read8(gmux_data, GMUX_PORT_VERSION_MINOR); in gmux_probe()
486 ver_release = gmux_read8(gmux_data, GMUX_PORT_VERSION_RELEASE); in gmux_probe()
488 if (gmux_is_indexed(gmux_data)) { in gmux_probe()
490 mutex_init(&gmux_data->index_lock); in gmux_probe()
491 gmux_data->indexed = true; in gmux_probe()
492 version = gmux_read32(gmux_data, in gmux_probe()
504 ver_release, (gmux_data->indexed ? "indexed" : "classic")); in gmux_probe()
521 gmux_data->pdev = pdev; in gmux_probe()
525 props.max_brightness = gmux_read32(gmux_data, GMUX_PORT_MAX_BRIGHTNESS); in gmux_probe()
537 gmux_data, &gmux_bl_ops, &props); in gmux_probe()
543 gmux_data->bdev = bdev; in gmux_probe()
557 gmux_data->power_state = VGA_SWITCHEROO_ON; in gmux_probe()
559 gmux_data->dhandle = ACPI_HANDLE(&pnp->dev); in gmux_probe()
560 if (!gmux_data->dhandle) { in gmux_probe()
567 status = acpi_evaluate_integer(gmux_data->dhandle, "GMGP", NULL, &gpe); in gmux_probe()
569 gmux_data->gpe = (int)gpe; in gmux_probe()
571 status = acpi_install_notify_handler(gmux_data->dhandle, in gmux_probe()
581 status = acpi_enable_gpe(NULL, gmux_data->gpe); in gmux_probe()
589 gmux_data->gpe = -1; in gmux_probe()
597 init_completion(&gmux_data->powerchange_done); in gmux_probe()
598 apple_gmux_data = gmux_data; in gmux_probe()
599 gmux_enable_interrupts(gmux_data); in gmux_probe()
604 if (gmux_data->gpe >= 0) in gmux_probe()
605 acpi_disable_gpe(NULL, gmux_data->gpe); in gmux_probe()
607 if (gmux_data->gpe >= 0) in gmux_probe()
608 acpi_remove_notify_handler(gmux_data->dhandle, in gmux_probe()
614 if (gmux_data->pdev) in gmux_probe()
615 vga_put(gmux_data->pdev, in gmux_probe()
618 release_region(gmux_data->iostart, gmux_data->iolen); in gmux_probe()
620 kfree(gmux_data); in gmux_probe()
626 struct apple_gmux_data *gmux_data = pnp_get_drvdata(pnp); in gmux_remove() local
629 gmux_disable_interrupts(gmux_data); in gmux_remove()
630 if (gmux_data->gpe >= 0) { in gmux_remove()
631 acpi_disable_gpe(NULL, gmux_data->gpe); in gmux_remove()
632 acpi_remove_notify_handler(gmux_data->dhandle, in gmux_remove()
637 if (gmux_data->pdev) { in gmux_remove()
638 vga_put(gmux_data->pdev, in gmux_remove()
640 pci_dev_put(gmux_data->pdev); in gmux_remove()
642 backlight_device_unregister(gmux_data->bdev); in gmux_remove()
644 release_region(gmux_data->iostart, gmux_data->iolen); in gmux_remove()
646 kfree(gmux_data); in gmux_remove()