326 mutex_unlock(&p_slot->lock);
327 ctrl_dbg(p_slot->ctrl,
328 "Disabling domain:bus:device=%04x:%02x:%02x\n",
329 pci_domain_nr(p_slot->ctrl->pci_dev->subordinate),
330 p_slot->bus, p_slot->device);
331 pciehp_disable_slot(p_slot);
332 mutex_lock(&p_slot->lock);
333 p_slot->state = STATIC_STATE;
334 break;
335 case POWERON_STATE:
336 mutex_unlock(&p_slot->lock);
337 if (pciehp_enable_slot(p_slot) &&
338 PWR_LED(p_slot->ctrl))
339 p_slot->hpc_ops->green_led_off(p_slot);
340 mutex_lock(&p_slot->lock);
341 p_slot->state = STATIC_STATE;
342 break;
343 default:
344 break;
345 }
346 mutex_unlock(&p_slot->lock);
347
348 kfree(info);
349}
350
351void pciehp_queue_pushbutton_work(struct work_struct *work)
352{
353 struct slot *p_slot = container_of(work, struct slot, work.work);
354 struct power_work_info *info;
355
356 info = kmalloc(sizeof(*info), GFP_KERNEL);
357 if (!info) {
358 ctrl_err(p_slot->ctrl, "%s: Cannot allocate memory\n",
359 __func__);
360 return;
361 }
362 info->p_slot = p_slot;
363 INIT_WORK(&info->work, pciehp_power_thread);
364
365 mutex_lock(&p_slot->lock);
366 switch (p_slot->state) {