LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Andres Salomon <dilinger@queued.net> To: Mark Brown <broonie@opensource.wolfsonmicro.com> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>, Samuel Ortiz <sameo@linux.intel.com>, linux-kernel@vger.kernel.org, Peter Ujfalusi <peter.ujfalusi@nokia.com>, Liam Girdwood <lrg@slimlogic.co.uk>, Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.de>, Timur Tabi <timur@freescale.com>, linux-input@vger.kernel.org, alsa-devel@alsa-project.org Subject: Re: [PATCH 12/19] twl4030: mfd_cell is now implicitly available to drivers Date: Fri, 4 Feb 2011 19:25:35 -0800 [thread overview] Message-ID: <20110204192535.329d2280@queued.net> (raw) In-Reply-To: <20110204183913.318e6664@debxo> On Fri, 4 Feb 2011 18:39:13 -0800 Andres Salomon <dilinger@queued.net> wrote: > On Thu, 3 Feb 2011 09:31:54 +0000 > Mark Brown <broonie@opensource.wolfsonmicro.com> wrote: > > > On Wed, Feb 02, 2011 at 11:03:26PM -0800, Andres Salomon wrote: > > > Dmitry Torokhov <dmitry.torokhov@gmail.com> wrote: > > > > > > Then they are doing it incorrectly. One possible way is to have > > > > parent device carry relevant data in its drvdata and have > > > > children get it from there. > > > > > I believe some drivers are even using the parent device already. > > > See drivers/leds/leds-mc13783.c, for example, whose parent device > > > drvdata is used to pass around a struct mc13783 to its children. > > > Sounds like a possibility, will need to look into it further. > > > > That's the current best practice approach. > [rambling] > Even that would require the weird API of mfd_add_devices needing to be > passed the type of what's pointed to by the parent's drvdata. > Actually, how about something like the following? This would leave drvdata unaffected. diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c index d83ad0f..a324a83 100644 --- a/drivers/mfd/mfd-core.c +++ b/drivers/mfd/mfd-core.c @@ -25,6 +25,7 @@ static int mfd_add_device(struct device *parent, int id, { struct resource *res; struct platform_device *pdev; + struct mfd_platform_data pdata = { NULL, NULL }; int ret = -ENOMEM; int r; @@ -39,12 +40,18 @@ static int mfd_add_device(struct device *parent, int id, pdev->dev.parent = parent; platform_set_drvdata(pdev, cell->driver_data); + pdata.cell = cell; if (cell->data_size) { - ret = platform_device_add_data(pdev, - cell->platform_data, cell->data_size); - if (ret) + pdata.platform_data = kmemdup(cell->platform_data, + cell->data_size, GFP_KERNEL); + if (!pdata.platform_data) { + ret = -ENOMEM; goto fail_res; + } } + ret = platform_device_add_data(pdev, &pdata, sizeof(pdata)); + if (ret) + goto fail_pdata; for (r = 0; r < cell->num_resources; r++) { res[r].name = cell->resources[r].name; @@ -91,6 +98,9 @@ static int mfd_add_device(struct device *parent, int id, return 0; /* platform_device_del(pdev); */ +fail_pdata: + if (pdata.platform_data) + kfree(pdata.platform_data); fail_res: kfree(res); fail_device: @@ -122,6 +132,7 @@ EXPORT_SYMBOL(mfd_add_devices); static int mfd_remove_devices_fn(struct device *dev, void *unused) { + /* TODO: nuke pdata memory */ platform_device_unregister(to_platform_device(dev)); return 0; } diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h index 835996e..dbc52a2 100644 --- a/include/linux/mfd/core.h +++ b/include/linux/mfd/core.h @@ -55,6 +55,26 @@ struct mfd_cell { bool pm_runtime_no_callbacks; }; +/* simple wrapper for a platform device's pdata */ +struct mfd_platform_data { + void *platform_data; + struct mfd_cell *cell; +}; + +/* + * Given a platform device that's been created by mfd_add_devices(), fetch + * the mfd_cell that created it. + */ +static inline const struct mfd_cell *mfd_get_cell(struct platform_device *pdev) +{ + return ((struct mfd_platform_data *)pdev->dev.platform_data)->cell; +} + +static inline void *mfd_platform_data(struct platform_device *pdev) +{ + return ((struct mfd_platform_data *)pdev->dev.platform_data)->data; +} + extern int mfd_add_devices(struct device *parent, int id, const struct mfd_cell *cells, int n_devs, struct resource *mem_base,
next prev parent reply other threads:[~2011-02-05 3:25 UTC|newest] Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top 2011-02-03 3:54 [RFC] [PATCH 0/19] mfd sharing support Andres Salomon 2011-02-03 3:55 ` [PATCH 01/19] mfd-core: unconditionally add mfd_cell to every platform_device Andres Salomon 2011-02-03 3:58 ` [PATCH 02/19] jz4740: mfd_cell is now implicitly available to drivers Andres Salomon 2011-02-03 8:09 ` Jean Delvare 2011-02-03 4:01 ` [PATCH 03/19] ab3550: " Andres Salomon 2011-02-04 8:20 ` Mattias Wallin 2011-02-03 4:03 ` [PATCH 04/19] ab3100: " Andres Salomon 2011-02-03 12:52 ` Linus Walleij 2011-02-03 4:04 ` [PATCH 05/19] asic3: " Andres Salomon 2011-02-03 4:05 ` [PATCH 06/19] htc-pasic3: " Andres Salomon 2011-02-03 4:08 ` [PATCH 07/19] timberdale: " Andres Salomon 2011-03-31 23:05 ` Grant Likely 2011-04-01 11:20 ` Samuel Ortiz 2011-04-01 17:47 ` Andres Salomon 2011-04-01 17:56 ` Grant Likely 2011-04-01 18:00 ` Grant Likely 2011-04-01 23:52 ` Samuel Ortiz 2011-04-01 23:58 ` Grant Likely 2011-04-02 0:10 ` Andres Salomon 2011-04-04 10:03 ` Samuel Ortiz 2011-04-05 3:04 ` Grant Likely 2011-04-06 15:23 ` Samuel Ortiz 2011-04-06 15:58 ` Greg KH 2011-04-06 17:05 ` Samuel Ortiz 2011-04-06 17:16 ` Ben Hutchings 2011-04-06 17:51 ` Samuel Ortiz 2011-04-06 18:07 ` Ben Hutchings 2011-04-06 17:56 ` Greg KH 2011-04-06 18:25 ` Andres Salomon 2011-04-06 18:38 ` Greg KH 2011-04-07 8:04 ` Grant Likely 2011-04-06 18:47 ` Samuel Ortiz 2011-04-06 18:59 ` Felipe Balbi 2011-04-06 22:09 ` Greg KH 2011-04-07 8:09 ` Felipe Balbi 2011-04-07 13:40 ` Samuel Ortiz 2011-04-07 14:35 ` Grant Likely 2011-04-07 15:03 ` Samuel Ortiz 2011-04-07 18:06 ` Grant Likely 2011-04-07 16:24 ` Grant Likely 2011-04-01 18:26 ` Samuel Ortiz 2011-02-03 4:09 ` [PATCH 08/19] t7166xb: " Andres Salomon 2011-02-03 4:11 ` [PATCH 09/19] wl1273: " Andres Salomon 2011-02-03 4:12 ` [PATCH 10/19] sh_mobile_sdhi: " Andres Salomon 2011-02-03 4:13 ` [PATCH 11/19] tc6393xb: " Andres Salomon 2011-02-03 4:15 ` [PATCH 12/19] twl4030: " Andres Salomon 2011-02-03 6:05 ` Dmitry Torokhov 2011-02-03 6:39 ` Andres Salomon 2011-02-03 6:53 ` Dmitry Torokhov 2011-02-03 7:03 ` Andres Salomon 2011-02-03 9:31 ` Mark Brown 2011-02-05 2:39 ` Andres Salomon 2011-02-05 3:25 ` Andres Salomon [this message] 2011-02-03 12:23 ` Peter Ujfalusi 2011-02-04 10:41 ` Uwe Kleine-König 2011-02-03 4:16 ` [PATCH 13/19] tc6387xb: " Andres Salomon 2011-02-03 4:17 ` [PATCH 14/19] janz: " Andres Salomon 2011-02-03 4:20 ` [PATCH 15/19] mc13xxx: " Andres Salomon 2011-02-04 9:34 ` Uwe Kleine-König 2011-02-04 10:13 ` Uwe Kleine-König 2011-02-04 10:16 ` Andres Salomon 2011-02-03 4:21 ` [PATCH 16/19] mfd-core: drop platform_data/data_size from core mfd_cell struct Andres Salomon 2011-02-03 4:22 ` [PATCH 17/19] mfd-core: add refcounting support to mfd_cells Andres Salomon 2011-02-03 4:23 ` [PATCH 18/19] mfd-core: add platform_device sharing support for mfd Andres Salomon 2011-02-03 4:26 ` [PATCH 19/19] cs5535-mfd: add sharing for acpi/pms cells Andres Salomon
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=20110204192535.329d2280@queued.net \ --to=dilinger@queued.net \ --cc=alsa-devel@alsa-project.org \ --cc=broonie@opensource.wolfsonmicro.com \ --cc=dmitry.torokhov@gmail.com \ --cc=linux-input@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=lrg@slimlogic.co.uk \ --cc=perex@perex.cz \ --cc=peter.ujfalusi@nokia.com \ --cc=sameo@linux.intel.com \ --cc=timur@freescale.com \ --cc=tiwai@suse.de \ /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: linkBe 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).