From: Cyril Chemparathy <cyril-l0cyMroinI0@public.gmane.org>
To: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
Cc: "davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org"
<davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org>,
"dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org"
<dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>,
"sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org"
<sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
"linus.ml.walleij-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org"
<linus.ml.walleij-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
"broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org"
<broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org>,
"rpurdie-Fm38FmjxZ/leoWH0uzbU5w@public.gmane.org"
<rpurdie-Fm38FmjxZ/leoWH0uzbU5w@public.gmane.org>,
"alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org"
<alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org>,
"spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org"
<spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>,
"akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org"
<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
"lrg-kDsPt+C1G03kYMGBc/C6ZA@public.gmane.org"
<lrg-kDsPt+C1G03kYMGBc/C6ZA@public.gmane.org>
Subject: Re: [PATCH v5 04/12] spi: add ti-ssp spi master driver
Date: Tue, 16 Nov 2010 19:17:18 -0500 [thread overview]
Message-ID: <4CE31F0E.7050103@ti.com> (raw)
In-Reply-To: <AANLkTi=utWumLKo9QVWXpkC8WxpgaNJJs+dj=pa2eq-q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
On 11/16/2010 02:47 AM, Grant Likely wrote:
> On Tue, Nov 16, 2010 at 12:22 AM, Grant Likely
> <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org> wrote:
>> On Mon, Nov 15, 2010 at 02:12:06PM -0500, Cyril Chemparathy wrote:
>>> This patch adds an SPI master implementation that operates on top of an
>>> underlying TI-SSP port.
>>>
>>> Signed-off-by: Cyril Chemparathy <cyril-l0cyMroinI0@public.gmane.org>
>> [...]
>>> +static int __init ti_ssp_spi_init(void)
>>> +{
>>> + return platform_driver_register(&ti_ssp_spi_driver);
>>> +}
>>> +subsys_initcall(ti_ssp_spi_init);
>>
>> After discussions about device init dependencies at plumbers, and
>> since this is the first SPI device driver I've reviewed since that
>> dicussion, this driver gets to be the first to implement the proposed
>> policy. :-)
>>
>> Change this to module_initcall(). Many spi and i2c drivers use
>> module or subsys_initcall to try and influence driver probe order so
>> that certain regulator chips get registered before the devices that
>> try to use them. This approach is insane.
>>
>> Instead, it is now incumbent on the board support code to ensure that
>> any device that depends on another device (including i2c or spi
>> regulators) will defer registration until the prerequisite devices are
>> bound to drivers.
>>
>> I don't *think* this change will affect anything in this particular
>> patch series, but if it does then let me know and I'll help you work out
>> how to fix it using a bus notifier.
>
> Oh, wait, spoke too soon. You do add a regulator in this series, so
> this change will require a fixup. The solution is to register an
> bus_notifier to the spi bus type before you start registering devices.
> It also requires deferring the musb_hdrc.1 and tps6116x registrations
> until the bus_notifier callback gets called with an indication that
> the regulator is bound. It will look something like this:
>
> static int tnetv107x_spi_notifier_call(struct notifier_block *nb,
> unsigned long event, void *__dev)
> {
> struct device *dev = __dev;
>
> if ((event == BUS_NOTIFY_BOUND_DRIVER) && (dev == (the-regulator))) {
> register-the-remaining-devices();
> return NOTIFY_STOP;
> };
> return NOTIFY_DONE;
> }
>
> static struct notifier_block tnetv107x_spi_nb = {
> .notifier_call = tnetv107x_spi_notifier_call,
> };
>
> and then in the device registration code, before registering the
> regulator:
>
> bus_register_notifier(&spi_bus_type, &tnetv107x_spi_nb);
>
> Let me know if you have any trouble.
The ability to wait on multiple devices may come handy. In this
particular case the backlight driver depends on both ssp-gpio and
regulator devices. Ideally, boards should be able to do something like...
platform_device_register_after(&backlight_device, "spi1.0");
platform_device_register_after(&backlight_device, "ti-ssp-gpio.0");
... and the device should get automatically registered once its
dependencies have been met.
Crude and incomplete code follows:
struct platform_device_depend {
struct list_head node;
const char *dev_name;
struct platform_device *pdev;
};
LIST_HEAD(platform_device_depend);
static int platform_device_register_after(struct platform_device *pdev,
const char *dev_name)
{
struct platform_device_depend *dep;
dep = kzalloc(sizeof(*dep), GFP_KERNEL);
if (!dep)
return -ENOMEM;
dep->dev_name = dev_name;
dep->pdev = pdev;
list_add_tail(&dep->node, &platform_device_depend);
return 0;
}
static int platform_device_try_register(struct platform_device *pdev)
{
struct platform_device_depend *dep;
list_for_each_entry(dep, &platform_device_depend, node) {
if (dep->pdev == pdev)
return -EBUSY;
}
return platform_device_register(pdev);
}
static int bus_notifier_func(struct notifier_block *nb,
unsigned long event, void *__dev)
{
struct platform_device_depend *dep, *tmp;
struct device *dev = __dev;
if (event != BUS_NOTIFY_BOUND_DRIVER)
return NOTIFY_DONE;
list_for_each_entry_safe(dep, tmp, &platform_device_depend,
node) {
if (strcmp(dep->dev_name, dev_name(dev)) != 0)
continue;
list_del(&dep->node);
platform_device_try_register(dep->pdev);
kfree(dep);
}
return NOTIFY_OK;
}
Regards
Cyril.
next prev parent reply other threads:[~2010-11-17 0:17 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-15 19:12 [PATCH v5 00/12] tnetv107x ssp drivers Cyril Chemparathy
[not found] ` <1289848334-8695-1-git-send-email-cyril-l0cyMroinI0@public.gmane.org>
2010-11-15 19:12 ` [PATCH v5 01/12] misc: add driver for sequencer serial port Cyril Chemparathy
[not found] ` <1289848334-8695-2-git-send-email-cyril-l0cyMroinI0@public.gmane.org>
2010-11-16 7:10 ` Grant Likely
[not found] ` <20101116071047.GE4074-MrY2KI0G/OVr83L8+7iqerDks+cytr/Z@public.gmane.org>
2010-11-16 16:15 ` Cyril Chemparathy
[not found] ` <4CE2AE3C.4040805-l0cyMroinI0@public.gmane.org>
2010-11-16 20:35 ` Grant Likely
[not found] ` <AANLkTik76EY8Xh01YP2Tep6k1ETPO+3idmNuk3pVikJG-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-11-16 21:19 ` Cyril Chemparathy
2010-11-16 22:23 ` Russell King - ARM Linux
[not found] ` <20101116222340.GF21926-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2010-11-16 23:57 ` Grant Likely
2010-11-15 19:12 ` [PATCH v5 02/12] davinci: add tnetv107x ssp platform device Cyril Chemparathy
2010-11-15 19:12 ` [PATCH v5 03/12] davinci: add ssp config for tnetv107x evm board Cyril Chemparathy
2010-11-15 19:12 ` [PATCH v5 04/12] spi: add ti-ssp spi master driver Cyril Chemparathy
2010-11-15 21:59 ` Ryan Mallon
[not found] ` <1289848334-8695-5-git-send-email-cyril-l0cyMroinI0@public.gmane.org>
2010-11-16 7:22 ` Grant Likely
[not found] ` <20101116072225.GF4074-MrY2KI0G/OVr83L8+7iqerDks+cytr/Z@public.gmane.org>
2010-11-16 7:47 ` Grant Likely
2010-11-16 11:34 ` Mark Brown
[not found] ` <20101116113409.GH3338-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2010-11-16 20:45 ` Grant Likely
[not found] ` <20101116204554.GB5016-MrY2KI0G/OVr83L8+7iqerDks+cytr/Z@public.gmane.org>
2010-11-16 22:48 ` Mark Brown
[not found] ` <AANLkTi=utWumLKo9QVWXpkC8WxpgaNJJs+dj=pa2eq-q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-11-17 0:17 ` Cyril Chemparathy [this message]
2010-11-17 13:31 ` Mark Brown
[not found] ` <20101117133136.GA19488-HF5t3jzXg/6ND3a5+9QAFujbO/Zr0HzV@public.gmane.org>
2010-11-17 15:25 ` David Brownell
[not found] ` <781931.83221.qm-g47maUHHHF+ORdMXk8NaZPu2YVrzzGjVVpNB7YpNyf8@public.gmane.org>
2010-11-17 17:54 ` Cyril Chemparathy
[not found] ` <4CE31F0E.7050103-l0cyMroinI0@public.gmane.org>
2010-11-17 16:11 ` Grant Likely
[not found] ` <20101117161130.GC5757-MrY2KI0G/OVr83L8+7iqerDks+cytr/Z@public.gmane.org>
2010-11-17 17:23 ` Mark Brown
2010-11-17 17:35 ` Cyril Chemparathy
2010-11-18 5:46 ` Greg KH
2010-11-25 23:32 ` Rafael J. Wysocki
2010-11-16 14:19 ` David Brownell
2010-11-15 19:12 ` [PATCH v5 05/12] davinci: add spi devices on tnetv107x evm Cyril Chemparathy
2010-11-15 19:12 ` [PATCH v5 06/12] regulator: add driver for tps6524x regulator Cyril Chemparathy
2010-11-15 19:12 ` [PATCH v5 07/12] davinci: add tnetv107x evm regulators Cyril Chemparathy
2010-11-15 19:12 ` [PATCH v5 08/12] gpio: add ti-ssp gpio driver Cyril Chemparathy
[not found] ` <1289848334-8695-9-git-send-email-cyril-l0cyMroinI0@public.gmane.org>
2010-11-15 22:38 ` Ryan Mallon
[not found] ` <4CE1B651.1060006-7Wk5F4Od5/oYd5yxfr4S2w@public.gmane.org>
2010-11-16 19:38 ` Cyril Chemparathy
2010-11-15 19:12 ` [PATCH v5 09/12] davinci: add tnetv107x evm ti-ssp gpio device Cyril Chemparathy
2010-11-15 19:12 ` [PATCH v5 10/12] backlight: add support for tps6116x controller Cyril Chemparathy
2010-11-15 19:12 ` [PATCH v5 11/12] davinci: add tnetv107x evm backlight device Cyril Chemparathy
2010-11-15 19:12 ` [PATCH v5 12/12] davinci: add tnetv107x evm i2c eeprom device Cyril Chemparathy
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=4CE31F0E.7050103@ti.com \
--to=cyril-l0cymroini0@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=alan-qBU/x9rampVanCEyBjwyrvXRex20P6io@public.gmane.org \
--cc=broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org \
--cc=davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org \
--cc=dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org \
--cc=linus.ml.walleij-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=lrg-kDsPt+C1G03kYMGBc/C6ZA@public.gmane.org \
--cc=rpurdie-Fm38FmjxZ/leoWH0uzbU5w@public.gmane.org \
--cc=sameo-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.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).