linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ohad Ben-Cohen <ohad@wizery.com>
To: Linus Walleij <linus.ml.walleij@gmail.com>
Cc: Russell King - ARM Linux <linux@arm.linux.org.uk>,
	Vitaly Wool <vitalywool@gmail.com>,
	Kalle Valo <kalle.valo@iki.fi>,
	Pandita Vikram <vikram.pandita@ti.com>,
	Nicolas Pitre <nico@fluxnic.net>,
	Tony Lindgren <tony@atomide.com>,
	linux-wireless@vger.kernel.org,
	Roger Quadros <roger.quadros@nokia.com>,
	linux-mmc@vger.kernel.org, San Mehat <san@google.com>,
	Chikkature Rajashekar Madhusudhan <madhu.cr@ti.com>,
	Luciano Coelho <luciano.coelho@nokia.com>,
	linux-omap@vger.kernel.org, akpm@linux-foundation.org,
	linux-arm-kernel@lists.infradead.org, Ido Yariv <ido@wizery.com>
Subject: Re: [PATCH v2 03/20] mmc: support embedded data field in mmc_host
Date: Fri, 6 Aug 2010 13:02:24 +0300	[thread overview]
Message-ID: <AANLkTim6Yuor4CAEmQPs3zPVz1svEbckzO0HHeFWGmjy@mail.gmail.com> (raw)
In-Reply-To: <AANLkTimrb5P9cVo30y_udoi4+vu3cM4YzfpDaYCfwGEA@mail.gmail.com>

On Fri, Aug 6, 2010 at 10:07 AM, Linus Walleij
<linus.ml.walleij@gmail.com> wrote:
> 2010/8/4 Ohad Ben-Cohen <ohad@wizery.com>:
>> On Wed, Aug 4, 2010 at 2:41 PM, Russell King - ARM Linux
>>>
>>> Why not arrange for a small piece of code to be built into the kernel
>>> when this driver is selected as a module or built-in, which handles
>>> the passing of platform data to the driver?
>>
>> It's interesting.
>>
>> The only drawback I can see is that it has an inherent limitation of
>> having only a single wl1271 device on board,
>
> ...which is exactly what the *_board_info scheme in the spi
> and i2c subsystems is designed to solve.
>
> This is an established design pattern in the kernel with two
> precedents, what makes it so hard to implement this idea?
> There are plenty of examples all over the place.

How would a driver ask for the platform data of its specific device ?

Using DEVICE_ID and VENDOR_ID is wrong - those numbers do not identify
a specific device instance (think of a board with two wl1271 devices.
the only difference between them is the index of their mmc
controller).

The only sane way to uniquely identify a specific device instance is
to couple its platform data with the host controller the device is
hardwired to.

So if we want to have an external sdio_board_info table to work, it
would have to map a controller index to sdio_board_info objects.
Something in the lines of:

int sdio_get_platform_data(struct sdio_board_info *data, struct sdio_func *func)
{
       if (platform_data[func->card->host->index]) {
               memcpy(data, platform_data[func->card->host->index],
sizeof(*data));
               return 0;
       }
       return -ENODEV;
}

typechecking is not preserved (the driver would have to cast
data->platform_data), and there is a possibility for the wrong driver
to pick up the data (at least as much as there was with the original
proposal).

AFAICS, the difference between SDIO and I2C/SPI in that respect, is
that SDIO devices are created dynamically when hardware is probed,
whereas I2C/SPI uses the *_board_info table to populate the device
tree. The I2C/SPI drivers then elegantly get the platform data in the
probe call. In our case, the device is created dynamically, and the
only way to couple it with the correct platform data is using the
knowledge that it is hardwired to a specific host controller.

So using an external repository of platform data objects seem to have
similar disadvantages like the original proposal, but with much more
code.

We have Russell's suggestion which is nice and simple, but it has the
1 device limitation.

Or, we can go back to the approach of creating another platform device
for that chip. That device's name should be "wl1271.x" where x is the
index of the controller the device is hardwired to. Later, when the
SDIO function probe is invoked, it would register the platform driver
(after dynamically sprintf()ing the name using the
func->card->host->index number), and then
wait_for_completion_interruptible_timeout() for it to probe.

That seem to settle all the concerns raised: we get typechecking, no
wrong driver getting the data, no 1 device limit, no races between the
two probes.

Thanks,
Ohad.

  reply	other threads:[~2010-08-06 10:02 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-21 17:33 [PATCH v2 00/20] native support for wl1271 on ZOOM Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 01/20] sdio: add TI + wl1271 ids Ohad Ben-Cohen
2010-07-21 17:58   ` Marcel Holtmann
2010-07-22 23:38     ` Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 02/20] wireless: wl1271: remove SDIO IDs from driver Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 03/20] mmc: support embedded data field in mmc_host Ohad Ben-Cohen
2010-07-28 19:47   ` Vitaly Wool
2010-07-29  6:00     ` Ohad Ben-Cohen
2010-07-29 16:16       ` Vitaly Wool
2010-08-02 15:54         ` Ohad Ben-Cohen
2010-08-02 16:25           ` Vitaly Wool
2010-08-02 21:35             ` Ohad Ben-Cohen
2010-08-03 14:17               ` Vitaly Wool
2010-08-04 11:24                 ` Ohad Ben-Cohen
2010-08-04 11:41                   ` Russell King - ARM Linux
2010-08-04 12:42                     ` Ohad Ben-Cohen
2010-08-04 14:01                       ` Vitaly Wool
2010-08-06  7:07                       ` Linus Walleij
2010-08-06 10:02                         ` Ohad Ben-Cohen [this message]
2010-08-06 14:46                           ` Russell King - ARM Linux
2010-08-06 16:53                             ` Nicolas Pitre
2010-07-21 17:33 ` [PATCH v2 04/20] omap zoom2: wlan board muxing Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 05/20] omap zoom3: " Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 06/20] wireless: wl1271: make wl12xx.h common to both spi and sdio Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 07/20] wireless: wl1271: support return value for the set power func Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 08/20] wireless: wl1271: take irq info from private board data Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 09/20] wireless: wl1271: make ref_clock configurable by board Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 10/20] omap: zoom: add fixed regulator device for wlan Ohad Ben-Cohen
2010-07-21 17:59   ` Mark Brown
2010-07-22 11:16     ` Roger Quadros
2010-07-22 23:13       ` Ohad Ben-Cohen
2010-07-23  9:15         ` Mark Brown
2010-07-25 10:40           ` Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 11/20] omap: hsmmc: support mmc3 regulator power control Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 12/20] omap: hsmmc: allow board-specific settings of private mmc data Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 13/20] omap: zoom: add mmc3/wl1271 device support Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 14/20] mmc: sdio: fully reconfigure oldcard on resume Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 15/20] mmc: sdio: verify existence of resume handler Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 16/20] mmc: introduce API to control the card's power Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 17/20] mmc: sdio: relocate sdio_set_block_size call Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 18/20] mmc: sdio: enable a default power off mode of the card Ohad Ben-Cohen
2010-07-22 11:35   ` Roger Quadros
2010-07-25 12:40     ` Ohad Ben-Cohen
2010-07-25 13:56       ` Nicolas Pitre
2010-07-25 14:05         ` Ohad Ben-Cohen
2010-07-21 17:33 ` [PATCH v2 19/20] omap: zoom: keep the MMC3 wl1271 device powered off Ohad Ben-Cohen
2010-07-21 18:55   ` Gabay, Benzy
2010-07-22 23:18     ` Ohad Ben-Cohen
2010-07-26 18:33       ` Gabay, Benzy
2010-07-21 17:33 ` [PATCH v2 20/20] wireless: wl1271: call SDIO claim/release power API Ohad Ben-Cohen
2010-07-22 22:56 ` [PATCH v2 00/20] native support for wl1271 on ZOOM Nicolas Pitre
2010-07-22 23:56   ` Ohad Ben-Cohen
2010-07-26 19:30 ` John W. Linville
2010-07-27  9:32   ` Ohad Ben-Cohen
2010-08-02  8:16   ` Luciano Coelho
2010-08-02 11:42     ` Tony Lindgren
2010-08-02 12:08       ` Ohad Ben-Cohen
2010-08-02 15:12       ` Vitaly Wool
2010-08-02 15:59         ` Ohad Ben-Cohen
2010-08-02 16:19           ` Vitaly Wool
2010-08-02 16:40             ` Ohad Ben-Cohen

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=AANLkTim6Yuor4CAEmQPs3zPVz1svEbckzO0HHeFWGmjy@mail.gmail.com \
    --to=ohad@wizery.com \
    --cc=akpm@linux-foundation.org \
    --cc=ido@wizery.com \
    --cc=kalle.valo@iki.fi \
    --cc=linus.ml.walleij@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=luciano.coelho@nokia.com \
    --cc=madhu.cr@ti.com \
    --cc=nico@fluxnic.net \
    --cc=roger.quadros@nokia.com \
    --cc=san@google.com \
    --cc=tony@atomide.com \
    --cc=vikram.pandita@ti.com \
    --cc=vitalywool@gmail.com \
    /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).