linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
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
> 

  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).