static int __init pcie_portdrv_init(void) { int retval = 0; pcie_port_bus_register(); retval = pci_register_driver(&pcie_portdrv); if (retval) pcie_port_bus_unregister(); return retval; }
static int __init pcie_portdrv_init(void) { int retval; retval = pcie_port_bus_register(); if (retval) { printk(KERN_WARNING "PCIE: bus_register error: %d\n", retval); goto out; } retval = pci_register_driver(&pcie_portdriver); if (retval) pcie_port_bus_unregister(); out: return retval; }
int pcie_wifi_pwrctrl_save(void) { /* the precondition of invoking pci_get_class: there is only one bridge in the system, and the bridge vendor is hisilicon. otherwise, we have to invoke other api, such as pci_get_subsys */ pcie_port_dev = pci_get_class((PCI_CLASS_BRIDGE_PCI << 8), NULL); if(!pcie_port_dev) { printk(KERN_ERR "bridge not found,please check.\n"); return -EIO; } pcie_wifi_dev = pci_get_subsys(WIFI_VENDOR_ID,WIFI_DEVICE_ID, WIFI_SS_VENDOR_ID,WIFI_SS_ID,NULL); if(!pcie_wifi_dev) { printk(KERN_ERR "wifi dev not found,please check.\n"); return -EIO; } /*save interrupt pin&line*/ pcie_port_dev_int_pin = pcie_port_dev->pin; pcie_port_dev_int_irq = pcie_port_dev->irq; pcie_wifi_dev_int_pin = pcie_wifi_dev->pin; pcie_wifi_dev_int_irq = pcie_wifi_dev->irq; pci_unregister_driver(&pcie_portdriver); pcie_port_bus_unregister(); root_bus = pcie_port_dev->bus; pci_stop_and_remove_bus_device(pcie_port_dev); pcie_port_dev = NULL; pcie_wifi_powerdown(); pcie_ltssm_enable(false); disable_irq(INT_LVL_PCIE0_LINK_DOWN); #if !defined(BSP_CONFIG_V7R2_SFT) /* the power consumption when disable clk and reset is more than only diable clk. */ /*pcie_phy_ctrl_reset();*/ pcie_clk_disable(); #endif return regulator_disable(pcie_regulator); }
static int __init pcie_portdrv_init(void) { int retval; if (pcie_ports_disabled) return pci_register_driver(&pcie_portdriver); dmi_check_system(pcie_portdrv_dmi_table); retval = pcie_port_bus_register(); if (retval) { printk(KERN_WARNING "PCIE: bus_register error: %d\n", retval); goto out; } retval = pci_register_driver(&pcie_portdriver); if (retval) pcie_port_bus_unregister(); out: return retval; }
static void __exit pcie_portdrv_exit(void) { pci_unregister_driver(&pcie_portdriver); pcie_port_bus_unregister(); }
int pcie_wifi_pwrctrl_restore(void) { int ret = 0; ret = regulator_enable(pcie_regulator); if (ret) { printk(KERN_ERR "fail to enable regulator\n"); return ret; } pcie_wifi_poweron(); #if !defined(BSP_CONFIG_V7R2_SFT) pcie_clk_enable(); pcie_phy_ctrl_reset(); pcie_phy_ctrl_undo_reset(); #endif enable_irq(INT_LVL_PCIE0_LINK_DOWN); pcie_hw_preinit(); pcie_ltssm_enable(true); ret = pcie_link_up_confirm(); if(-EIO == ret) { goto out; } pcie_hw_postinit(); pci_rescan_bus(root_bus); pcie_port_dev = pci_get_class((PCI_CLASS_BRIDGE_PCI << 8), NULL); if(!pcie_port_dev) { printk(KERN_ERR "bridge not found,please check.\n"); return -EIO; } pcie_wifi_dev = pci_get_subsys(WIFI_VENDOR_ID,WIFI_DEVICE_ID, WIFI_SS_VENDOR_ID,WIFI_SS_ID,NULL); if(!pcie_wifi_dev) { printk(KERN_ERR "wifi dev not found,please check.\n"); return -EIO; } /*recover interrupt pin&line*/ pci_write_config_byte(pcie_port_dev,PCI_INTERRUPT_PIN,pcie_port_dev_int_pin); pci_write_config_byte(pcie_wifi_dev,PCI_INTERRUPT_PIN,pcie_wifi_dev_int_pin); pcie_port_dev->pin = pcie_port_dev_int_pin; pcie_port_dev->irq = pcie_port_dev_int_irq; pcie_wifi_dev->pin = pcie_wifi_dev_int_pin; pcie_wifi_dev->irq = pcie_wifi_dev_int_irq; pcibios_update_irq(pcie_port_dev,pcie_port_dev_int_irq); pcibios_update_irq(pcie_wifi_dev,pcie_wifi_dev_int_irq); ret = pcie_port_bus_register(); if (ret) { printk(KERN_WARNING "PCIE: bus_register error: %d\n", ret); goto out; } ret = pci_register_driver(&pcie_portdriver); if (ret) { pcie_port_bus_unregister(); } out: return ret; }