#ifdef CONFIG_PM // Powermanagement

static int template_suspend(struct device *dev, pm_message_t state)
{
  switch (state.event) {
  case PM_EVENT_ON:
    printk("on ...\n"); break;
  case PM_EVENT_FREEZE:
    printk("freeze ...\n"); break;
  case PM_EVENT_SUSPEND:
    // Stromsparmodus einschalten
    printk("suspend ...\n"); break;
  case PM_EVENT_HIBERNATE:
    // Tiefschlaf einschalten
    printk("hibernate ...\n"); break;
  default:
    printk("pm_event: 0x%x\n", state.event);
    break;
  }
  printk("template_suspend(%p)\n", dev);
  return 0;
}

static int template_resume(struct device *dev)
{
  // Stromsparmodus ausschalten, Gerät reaktivieren
  printk("template_resume(%p)\n", dev);
  return 0;
}
#endif

[...]

static int __init template_init(void)
{
  init_waitqueue_head(&wq_read);
  init_waitqueue_head(&wq_write);
  [...]
  template_class = class_create(THIS_MODULE, TEMPLATE);
  if (IS_ERR(template_class)) {
    printk("template: no udev support\n");
    goto free_cdev;
  }
#ifdef CONFIG_PM
  template_class->suspend = template_suspend;
  template_class->resume = template_resume;
#endif
  [...]