[linux-pm] Adapt drivers to type-safe pci

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi!

> > This adapts few drivers to type-safe pci powermanagment. I introduced
> > device_to_pci_state helper that will be usefull to few drivers... Does
> > it look okay? 
> 
> I'd rather have something like the attached patch.
> Fixed policy mappings are generically broken; what
> about devices that don't support PCI_D2?

Point taken, this function is probably too big to be in header. 

> This should I guess use the new "pci_power_t", but
> I'm not that current yet.  

I'd still like this function to return suitable state (and do nothing
else), to make converting drivers easier.

For now suspend() only gets 0 or 3; I'd rather not change code for
now. Do we really enter PCI_D1 on standby? I believe PCI transitions
are fast enough to enter PCI_D3hot even for standby / suspend-to-ram.

								Pavel

> +void
> +pci_choose_state(struct pci_dev *pdev, suspend_state_t sleepstate)
> +{
> +	int pm, state;
> +	u16 pmc;
> +
> +	/* nothing to do for legacy PCI devices */
> +	pm = pci_find_capability(pdev, PCI_CAP_ID_PM);
> +	if (!pm)
> +		return;
> +
> +	/* map to a PCI PM state this device supports
> +	 * FIXME ACPI may know what states to use; we should probably
> +	 * prefer that policy to this one.
> +	 */
> +	state = 3;
> +	switch (sleepstate) {
> +	case PM_SUSPEND_ON:
> +		state = 0;
> +		break;
> +	case PM_SUSPEND_STANDBY:
> +	case PM_SUSPEND_MEM:
> +		pci_read_config_word(pdev, pm + PCI_PM_PMC, &pmc);
> +		if (sleepstate == PM_SUSPEND_STANDBY
> +				&& (pmc & PCI_PM_CAP_D1) != 0)
> +			state = 1;
> +		else if ((pmc & PCI_PM_CAP_D2) != 0)
> +			state = 2;
> +		break;
> +	}
> +
> +	/* maybe go to a deeper power state */
> +	if (pdev->current_state < state)
> +		pci_set_power_state(pdev, state);
> +}
> +EXPORT_SYMBOL(pci_choose_state);
>  
>  /**
>   * pci_save_state - save the PCI configuration space of a device before suspending


-- 
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!


[Index of Archives]     [Linux ACPI]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [CPU Freq]     [Kernel Newbies]     [Fedora Kernel]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux