diff options
author | Alan Hourihane <alanh@fairlite.demon.co.uk> | 2005-06-28 08:03:33 +0000 |
---|---|---|
committer | Alan Hourihane <alanh@fairlite.demon.co.uk> | 2005-06-28 08:03:33 +0000 |
commit | b6b270a2607088997a0ec74cb1d618f140a382f7 (patch) | |
tree | 04bad1e8ba035c41857b9fa0a993d9d26580a0fc | |
parent | 75ba453365380851d3297a9d553302021af923b2 (diff) |
Given that BenH says using the sysdev approach for DRM is bogus, I'll yank
the code for it, rather than introducing something that isn't going to
work 100% of the time.
-rw-r--r-- | linux-core/Makefile.kernel | 2 | ||||
-rw-r--r-- | linux-core/drmP.h | 4 | ||||
-rw-r--r-- | linux-core/drm_drv.c | 8 | ||||
-rw-r--r-- | linux-core/drm_pm.c | 152 | ||||
-rw-r--r-- | linux-core/drm_stub.c | 4 | ||||
-rw-r--r-- | linux-core/i915_drv.c | 1 | ||||
-rw-r--r-- | shared-core/i915_pm.c | 26 |
7 files changed, 1 insertions, 196 deletions
diff --git a/linux-core/Makefile.kernel b/linux-core/Makefile.kernel index bced069b..36cd2e3d 100644 --- a/linux-core/Makefile.kernel +++ b/linux-core/Makefile.kernel @@ -10,7 +10,7 @@ drm-objs := drm_auth.o drm_bufs.o drm_context.o drm_dma.o drm_drawable.o \ drm_drv.o drm_fops.o drm_ioctl.o drm_irq.o \ drm_lock.o drm_memory.o drm_proc.o drm_stub.o drm_vm.o \ - drm_sysfs.o drm_pci.o drm_pm.o drm_agpsupport.o drm_scatter.o \ + drm_sysfs.o drm_pci.o drm_agpsupport.o drm_scatter.o \ drm_memory_debug.o ati_pcigart.o tdfx-objs := tdfx_drv.o r128-objs := r128_drv.o r128_cce.o r128_state.o r128_irq.o diff --git a/linux-core/drmP.h b/linux-core/drmP.h index f38c57d4..ff2af8cf 100644 --- a/linux-core/drmP.h +++ b/linux-core/drmP.h @@ -80,7 +80,6 @@ #endif #include <linux/poll.h> #include <asm/pgalloc.h> -#include <linux/sysdev.h> #include "drm.h" #define __OS_HAS_AGP (defined(CONFIG_AGP) || (defined(CONFIG_AGP_MODULE) && defined(MODULE))) @@ -542,7 +541,6 @@ struct drm_driver { int new); int (*kernel_context_switch_unlock) (struct drm_device * dev); int (*vblank_wait) (struct drm_device * dev, unsigned int *sequence); - int (*power) (struct drm_device * dev, unsigned int state); /** * Called by \c drm_device_is_agp. Typically used to determine if a @@ -722,8 +720,6 @@ typedef struct drm_device { struct drm_driver *driver; drm_local_map_t *agp_buffer_map; drm_head_t primary; /**< primary screen head */ - - struct sys_device sysdev; /**< Power Management device structure */ } drm_device_t; static __inline__ int drm_core_check_feature(struct drm_device *dev, diff --git a/linux-core/drm_drv.c b/linux-core/drm_drv.c index f981631b..6ed5ce1e 100644 --- a/linux-core/drm_drv.c +++ b/linux-core/drm_drv.c @@ -268,9 +268,6 @@ int drm_takedown(drm_device_t * dev) if (drm_core_check_feature(dev, DRIVER_HAVE_DMA)) drm_dma_takedown(dev); - if (drm_fb_loaded) - drm_pm_takedown(dev); - if (dev->lock.hw_lock) { dev->sigdata.lock = dev->lock.hw_lock = NULL; /* SHM removed */ dev->lock.filp = NULL; @@ -339,9 +336,6 @@ int drm_init(struct drm_driver *driver, if (!drm_fb_loaded) pci_register_driver(&driver->pci_driver); else { - if ((rc = drm_pm_init())) - return rc; - for (i = 0; pciidlist[i].vendor != 0; i++) { pid = &pciidlist[i]; @@ -355,7 +349,6 @@ int drm_init(struct drm_driver *driver, pci_dev_get(pdev); if ((rc = drm_get_dev(pdev, &pciidlist[i], driver))) { pci_dev_put(pdev); - drm_pm_exit(); return rc; } } @@ -542,7 +535,6 @@ static void __exit drm_core_exit(void) unregister_chrdev(DRM_MAJOR, "drm"); drm_free(drm_heads, sizeof(*drm_heads) * cards_limit, DRM_MEM_STUB); - drm_pm_exit(); } module_init(drm_core_init); diff --git a/linux-core/drm_pm.c b/linux-core/drm_pm.c deleted file mode 100644 index 1e93e1da..00000000 --- a/linux-core/drm_pm.c +++ /dev/null @@ -1,152 +0,0 @@ -/** - * \file drm_pm.h - * Power management support - * - * \author José Fonseca <jrfonseca@tungstengraphics.com> - */ - -/* - * Copyright 2004 Tungsten Graphics, Inc., Cedar Park, Texas. - * All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#define __NO_VERSION__ -#include "drmP.h" - -#include <linux/device.h> -#include <linux/sysdev.h> - - -static int drm_suspend(struct sys_device *sysdev, u32 state) -{ - struct drm_device *dev = - container_of(sysdev, struct drm_device, sysdev); - - DRM_DEBUG("state=%d\n", state); - - if (dev->driver->power) - return dev->driver->power(dev, state); - else - return 0; -} - -static int drm_resume(struct sys_device *sysdev) -{ - struct drm_device *dev = - container_of(sysdev, struct drm_device, sysdev); - - DRM_DEBUG("\n"); - - if (dev->driver->power) - return dev->driver->power(dev, 0); - else - return 0; -} - -static int shutdown(struct sys_device *sysdev) -{ - return 0; -} - -static atomic_t sysdev_loaded = ATOMIC_INIT(-1); -static struct sysdev_class drm_sysdev_class = { - set_kset_name("drm"), - .resume = drm_resume, - .suspend = drm_suspend, - .shutdown = shutdown, -}; - - -/** - * Initialize the Power Management data. - * - * \param dev DRM device. - * \return zero on success or a negative value on failure. - */ -int drm_pm_setup(drm_device_t *dev) -{ - int rc; - - if (atomic_read(&sysdev_loaded) == -1) - return 0; - - DRM_DEBUG("\n"); - - dev->sysdev.id = dev->primary.minor; - dev->sysdev.cls = &drm_sysdev_class; - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,4) - rc = sys_device_register(&dev->sysdev); -#else - rc = sysdev_register(&dev->sysdev); -#endif - return rc; -} - -/** - * Cleanup the Power Management resources. - * - * \param dev DRM device. - */ -void drm_pm_takedown(drm_device_t *dev) -{ - if (atomic_read(&sysdev_loaded) == -1) - return; - - DRM_DEBUG("\n"); - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,4) - sys_device_unregister(&dev->sysdev); -#else - sysdev_unregister(&dev->sysdev); -#endif -} - -int drm_pm_init(void) -{ - int rc; - DRM_DEBUG("\n"); - - /* triggers on -1 to 0 transition */ - if (!atomic_inc_and_test(&sysdev_loaded)) - return 0; - - if ((rc = sysdev_class_register(&drm_sysdev_class))) { - /* reset it back to -1 */ - atomic_dec(&sysdev_loaded); - } else { - /* inc it up to 1 so that unload will trigger on 1->0 */ - atomic_inc(&sysdev_loaded); - DRM_DEBUG("registered\n"); - } - return rc; -} - -void __exit drm_pm_exit(void) -{ - DRM_DEBUG("\n"); - /* triggers on the 1 to 0 transistion */ - if (atomic_dec_and_test(&sysdev_loaded)) { - sysdev_class_unregister(&drm_sysdev_class); - DRM_DEBUG("unregisted\n"); - } -} diff --git a/linux-core/drm_stub.c b/linux-core/drm_stub.c index d7baeb84..7d0e075a 100644 --- a/linux-core/drm_stub.c +++ b/linux-core/drm_stub.c @@ -94,10 +94,6 @@ static int fill_in_dev(drm_device_t * dev, struct pci_dev *pdev, dev->driver = driver; - if (drm_fb_loaded) - if ((retcode = drm_pm_setup( dev ))) - goto error_out_unreg; - if (dev->driver->preinit) if ((retcode = dev->driver->preinit(dev, ent->driver_data))) goto error_out_unreg; diff --git a/linux-core/i915_drv.c b/linux-core/i915_drv.c index 28154c8c..de6780ec 100644 --- a/linux-core/i915_drv.c +++ b/linux-core/i915_drv.c @@ -90,7 +90,6 @@ static struct drm_driver driver = { .postinit = postinit, .version = version, .ioctls = i915_ioctls, - .power = i915_power, .fops = { .owner = THIS_MODULE, .open = drm_open, diff --git a/shared-core/i915_pm.c b/shared-core/i915_pm.c index d2914aa4..e4bda0ce 100644 --- a/shared-core/i915_pm.c +++ b/shared-core/i915_pm.c @@ -165,29 +165,3 @@ int i915_resume( struct pci_dev *pdev ) return 0; } - -int i915_power( drm_device_t *dev, unsigned int state ) -{ - drm_i915_private_t *dev_priv = - (drm_i915_private_t *)dev->dev_private; - - DRM_DEBUG("%s state=%d\n", __FUNCTION__, state); - - if (!dev_priv) return 0; - - /* Save state for power up later */ - if (state != 0) { - I915_WRITE( SRX_INDEX, SR01 ); - dev_priv->sr01 = I915_READ( SRX_DATA ); - dev_priv->dvoc = I915_READ( DVOC ); - dev_priv->dvob = I915_READ( DVOB ); - dev_priv->lvds = I915_READ( LVDS ); - dev_priv->adpa = I915_READ( ADPA ); - dev_priv->ppcr = I915_READ( PPCR ); - } - - /* D0: set DPMS mode on */ - i915_set_dpms(dev, state); - - return 0; -} |