From: adrian.hunter@nokia.com (Adrian Hunter)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 11/15] wireless: wl1271: introduce platform device support
Date: Tue, 06 Jul 2010 22:51:03 +0300 [thread overview]
Message-ID: <4C338927.5020400@nokia.com> (raw)
In-Reply-To: <alpine.LFD.2.00.1007061316010.6020@xanadu.home>
Nicolas Pitre wrote:
> On Tue, 6 Jul 2010, Roger Quadros wrote:
>
>> On 07/06/2010 03:53 PM, ext Ohad Ben-Cohen wrote:
>>> Hi Roger,
>>>
>>> On Tue, Jul 6, 2010 at 1:35 PM, Roger Quadros<roger.quadros@nokia.com>
>>> wrote:
>>>> My point is that shouldn't this be handled by SDIO core?
>>> Care to explain what you mean / give a code example ?
>> If the Power enable GPIO can be treated as SDIO slot supply (i.e. vmmc), then
>> the SDIO/MMC core should tackle it, just like it deals with supply for slots
>> with removable cards.
>
> Exact.
>
>>> You need card detect events in order to trigger card& sdio function
>>> initialization and removals.
>
> Why would you trigger function initialization and removal? Just to turn
> off power? That's a bit like pulling off the battery from your laptop
> when you want to suspend it. There is a better way to go about things.
>
>>> Please share any alternative approach you may be thinking on.
>> OK, this is how I see it.
>>
>> - Treat the non-removable card as non-removable. So no need to do card detect
>> emulation.
>>
>> - Treat the GPIO power enable on wl1271 as VMMC supply. Use fixed regulator
>> framework to define this regulator & supply. Even though you mention that it
>> is not actually a supply, it fits well in the fixed supply framework.
>>
>> - When the host controller is enumerated, the mmc core will power up the slot,
>> find the sdio card, and probe the function driver (i.e. wl1271_sdio).
>>
>> - if interface is not in use, the function driver must release the sdio host,
>> and this should eventually disable the vmmc supply.
>>
>> - Whenever the wlan interface must be brought up, wl1271_sdio, can claim the
>> sdio host. this will cause the vmmc supply to be enabled, for as long as the
>> interface is up.
>>
>> Does this address all issues?
>
> This is mostly all good, except that claiming/releasing the SDIO host is
> about access to the bus. It must be claimed right before doing any IO,
> and released right after that, even when the card is expected to remain
> powered. This is not the proper place to hook power control.
>
> Another function pair would be needed instead, which would do almost
> like the suspend/resume code is already doing. Something like:
>
> /*
> * Indicate to the core SDIO layer that we're not requiring that the
> * function remain powered. If all functions for the card are in the
> * same "no power" state, then the host controller can remove power from
> * the card. Note: the function driver must preserve hardware states if
> * necessary.
> */
> int sdio_release_power(struct sdio_func *func);
>
> /*
> * Indicate to the core SDIO layer that we want power back for this
> * SDIO function. The power may or may not actually have been removed
> * since last call to sdio_release_power(), so the function driver must
> * not assume any preserved state at the hardware level and re-perform
> * all the necessary hardware config. This function returns 0 when
> * power is actually restored, or some error code if this cannot be
> * achieved. One error reason might be that the card is no longer
> * available on the bus (was removed while powered down and card
> * detection didn't trigger yet).
> */
> int sdio_claim_power(struct sdio_func *func);
>
> That's it. When the network interface is down and the hardware is not
> needed, you call sdio_release_power(). When the request to activate the
> network interface is received, you call sdio_claim_power() and configure
> the hardware appropriately. If sdio_claim_power() returns an error,
> then you just return an error to the network request, and eventually the
> driver's remove method will be called if this is indeed because the card
> was removed.
>
> In the core SDIO code, this is almost identical to a suspend/resume
> request, except that the request comes from the function driver instead
> of the core MMC code.
For eMMC in omap_hsmmc, this is all done via claim_host / release_host
which call ->enable() / ->disable() methods. omap_hsmmc makes use of
mmc_power_restore_host() which calls host->bus_ops->power_restore()
which is not implemented for SDIO, but for MMC and SD it reinitializes
the card.
Set omap2_hsmmc_info mmc[x] {.nonremovable=true, .power_saving=true} and
implement host->bus_ops->power_restore() for SDIO, then the power will
go off 9 seconds after sdio_release_host() is called. Then tweak omap_hsmmc
so that it doesn't wait 9 seconds for the SDIO case
>
>
> Nicolas
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
next prev parent reply other threads:[~2010-07-06 19:51 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-06 0:37 [PATCH 00/15] wlan+omap+mmc: out-of-the-box WLAN support for ZOOM2/3 Ohad Ben-Cohen
2010-07-06 0:37 ` [PATCH 01/15] sdio: add TI + wl1271 ids Ohad Ben-Cohen
2010-07-06 0:37 ` [PATCH 02/15] wireless: wl1271: remove SDIO IDs from driver Ohad Ben-Cohen
2010-07-06 7:04 ` Luciano Coelho
2010-07-06 0:37 ` [PATCH 03/15] omap: mmc: prepare for software card detect support Ohad Ben-Cohen
2010-07-06 0:37 ` [PATCH 04/15] mmc: support embedded data field in mmc_host Ohad Ben-Cohen
2010-07-06 15:49 ` Grazvydas Ignotas
2010-07-06 15:54 ` Ohad Ben-Cohen
2010-07-08 3:39 ` Ghorai, Sukumar
2010-07-06 0:37 ` [PATCH 05/15] omap: hsmmc: add virtual card detect support Ohad Ben-Cohen
2010-07-06 1:45 ` Nicolas Pitre
2010-07-06 10:22 ` Ohad Ben-Cohen
2010-07-06 11:02 ` Roger Quadros
2010-07-06 12:02 ` Ohad Ben-Cohen
2010-07-06 11:48 ` Ohad Ben-Cohen
2010-07-06 12:39 ` Roger Quadros
2010-07-06 13:44 ` Ohad Ben-Cohen
2010-07-06 15:34 ` Madhusudhan
2010-07-06 17:00 ` Nicolas Pitre
2010-07-06 0:37 ` [PATCH 06/15] omap zoom2: wlan board muxing Ohad Ben-Cohen
2010-07-06 11:43 ` Tony Lindgren
2010-07-08 3:39 ` Ghorai, Sukumar
2010-07-08 9:45 ` Tony Lindgren
2010-07-08 20:12 ` Ohad Ben-Cohen
2010-07-06 0:37 ` [PATCH 07/15] omap zoom3: " Ohad Ben-Cohen
2010-07-06 0:37 ` [PATCH 08/15] wireless: wl1271: make wl12xx.h common to both spi and sdio Ohad Ben-Cohen
2010-07-06 7:08 ` Luciano Coelho
2010-07-06 0:37 ` [PATCH 09/15] wireless: wl12xx: support pdata SDIO handlers Ohad Ben-Cohen
2010-07-06 0:37 ` [PATCH 10/15] wireless: wl1271: support return value for the set power func Ohad Ben-Cohen
2010-07-06 7:11 ` Luciano Coelho
2010-07-06 0:37 ` [PATCH 11/15] wireless: wl1271: introduce platform device support Ohad Ben-Cohen
2010-07-06 8:53 ` Roger Quadros
2010-07-06 9:30 ` Ohad Ben-Cohen
2010-07-06 10:35 ` Roger Quadros
2010-07-06 12:53 ` Ohad Ben-Cohen
2010-07-06 14:30 ` Roger Quadros
2010-07-06 17:42 ` Nicolas Pitre
2010-07-06 19:51 ` Adrian Hunter [this message]
2010-07-07 8:02 ` Roger Quadros
2010-07-07 14:02 ` Nicolas Pitre
2010-07-07 14:54 ` Madhusudhan
2010-07-07 15:46 ` Nicolas Pitre
2010-07-07 19:59 ` Adrian Hunter
2010-07-08 4:34 ` Nicolas Pitre
2010-07-07 7:48 ` Roger Quadros
2010-07-07 13:52 ` Nicolas Pitre
2010-07-08 8:54 ` Roger Quadros
2010-07-08 20:10 ` Ohad Ben-Cohen
2010-07-09 8:12 ` Roger Quadros
2010-07-09 8:32 ` Ohad Ben-Cohen
2010-07-09 9:24 ` Grazvydas Ignotas
2010-08-10 21:21 ` Ohad Ben-Cohen
2010-07-06 0:37 ` [PATCH 12/15] wireless: wl1271: take irq info from platform data Ohad Ben-Cohen
2010-07-06 0:37 ` [PATCH 13/15] wireless: wl1271: make ref_clock configurable by board Ohad Ben-Cohen
2010-07-06 0:37 ` [PATCH 14/15] omap: zoom: add WLAN device Ohad Ben-Cohen
2010-07-06 12:33 ` Roger Quadros
2010-07-06 13:47 ` Ohad Ben-Cohen
2010-07-08 3:39 ` Ghorai, Sukumar
2010-07-06 0:37 ` [PATCH 15/15] omap: zoom: enable " Ohad Ben-Cohen
2010-07-08 3:39 ` Ghorai, Sukumar
2010-07-08 20:13 ` Ohad Ben-Cohen
2010-07-08 3:39 ` [PATCH 00/15] wlan+omap+mmc: out-of-the-box WLAN support for ZOOM2/3 Ghorai, Sukumar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C338927.5020400@nokia.com \
--to=adrian.hunter@nokia.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).