lkml.org 
[lkml]   [2007]   [Oct]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 4/4] Fix PCIe hotplug for non-ACPI ExpressCard slots (version 2)
    Make use of the previously split out pcie_init_enable_events() function
    to reinitialize the hotplug hardware on resume from suspend,
    but only when pciehp_force==1. Otherwise behaviour is unmodified.

    Signed-off-by: Mark Lord <mlord@pobox.com>
    ---
    --- old/drivers/pci/hotplug/pciehp_ctrl.c 2007-10-16 21:17:27.000000000 -0400
    +++ linux/drivers/pci/hotplug/pciehp_ctrl.c 2007-10-16 21:28:36.000000000 -0400
    @@ -37,7 +37,6 @@
    #include "pciehp.h"

    static void interrupt_event_handler(struct work_struct *work);
    -static int pciehp_disable_slot(struct slot *p_slot);

    static int queue_interrupt_event(struct slot *p_slot, u32 event_type)
    {
    --- old/drivers/pci/hotplug/pciehp.h 2007-10-16 21:17:27.000000000 -0400
    +++ linux/drivers/pci/hotplug/pciehp.h 2007-10-16 21:28:42.000000000 -0400
    @@ -162,6 +162,8 @@
    extern void pciehp_queue_pushbutton_work(struct work_struct *work);
    int pcie_init(struct controller *ctrl, struct pcie_device *dev);
    int pciehp_enable_slot(struct slot *p_slot);
    +int pciehp_disable_slot(struct slot *p_slot);
    +int pcie_init_enable_events(struct controller *ctrl, struct pcie_device *dev);

    static inline struct slot *pciehp_find_slot(struct controller *ctrl, u8 device)
    {
    --- old/drivers/pci/hotplug/pciehp_core.c 2007-10-16 21:17:27.000000000 -0400
    +++ linux/drivers/pci/hotplug/pciehp_core.c 2007-10-16 21:30:19.000000000 -0400
    @@ -512,6 +512,24 @@
    static int pciehp_resume (struct pcie_device *dev)
    {
    printk("%s ENTRY\n", __FUNCTION__);
    + if (pciehp_force) {
    + struct pci_dev *pdev = dev->port;
    + struct controller *ctrl = pci_get_drvdata(pdev);
    + struct slot *t_slot;
    + u8 status;
    +
    + /* reinitialize the chipset's event detection logic */
    + pcie_init_enable_events(ctrl, dev);
    +
    + t_slot = pciehp_find_slot(ctrl, ctrl->slot_device_offset);
    +
    + /* Check if slot is occupied */
    + t_slot->hpc_ops->get_adapter_status(t_slot, &status);
    + if (status)
    + pciehp_enable_slot(t_slot);
    + else
    + pciehp_disable_slot(t_slot);
    + }
    return 0;
    }
    #endif
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-10-17 03:57    [W:0.024 / U:121.536 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site