sd8686 driver: cleanup power management code
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Moblin Kernel |
Fix Committed
|
Low
|
Feng Tang |
Bug Description
If the CONFIG_ENABLE_PM flag in the Makefile for the Marvell sd8686 driver is set to "y", the driver doesn't compile ( see first attachment ).
Closer examination of the patch ( 0019-marvell_
The sd8686 code attempts to register wlan_pm_
One other troubling piece of code is in the sd8686 driver. If the function wlan_pm_suspend() ( in wlan_main.c ) if the given level is SUSPEND_DISABLE, the code rejects this level if the Adapteris not already in DeepSleep mode. In the past, working with other Wi-Fi drivers, this seems odd to me. I would think that one of the responsibilities of this function would be to put the Adapter ( ie. firmware ) into deepsleep mode.
Changed in moblin-kernel: | |
assignee: | nobody → feng-tang |
status: | New → Triaged |
This is a long story :)
For PM issue, you may need read the original code from Marvell first.
Marvell's code is against their own reference platform. Their SDIO device first connects to a SDIO-To-CardBus converter which connects to the host machine, so that the code will contains a folder which has their own SDIO stack for the converter/ controller.
Their own controller driver provides some API with which the 8686/8688 driver can use to control the controller's clock/power. In short, their SDIO device need control the host controller to make the PM work, which is not acceptable to SD/SDIO kernel maintainer Pierre Ossman. I have discussed this with Marvell engineers, and there is no solution so far. So when I port Marvell's driver to mainstream SDIO stack, I just change the SDIO interface layer, skip the PM part, and let SD host controller driver dealing with PM stuff, like turnning on/off device during system's suspend/resume power cycle.
If you have specail PM request, you may need directly ask for Marvell's support, as I don't have their detailed internal PM document.