From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ulf Hansson Subject: Re: [PATCH 3/4] mmc: sdhci-acpi: Let devices define their own private data Date: Mon, 30 Oct 2017 12:40:27 +0100 Message-ID: References: <1508409706-27026-1-git-send-email-adrian.hunter@intel.com> <1508409706-27026-4-git-send-email-adrian.hunter@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Return-path: Received: from mail-io0-f194.google.com ([209.85.223.194]:45300 "EHLO mail-io0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932294AbdJ3Lk2 (ORCPT ); Mon, 30 Oct 2017 07:40:28 -0400 Received: by mail-io0-f194.google.com with SMTP id i38so26395503iod.2 for ; Mon, 30 Oct 2017 04:40:28 -0700 (PDT) In-Reply-To: <1508409706-27026-4-git-send-email-adrian.hunter@intel.com> Sender: linux-mmc-owner@vger.kernel.org List-Id: linux-mmc@vger.kernel.org To: Adrian Hunter Cc: linux-mmc On 19 October 2017 at 12:41, Adrian Hunter wrote: > Let devices define their own private data to facilitate device-specific > operations. The size of the private structure is specified in the > sdhci_acpi_slot structure, then sdhci_acpi_probe() will allocate extra > space for it, and sdhci_acpi_priv() can be used to get a reference to it. > > Signed-off-by: Adrian Hunter Thanks, applied for next! Kind regards Uffe > --- > drivers/mmc/host/sdhci-acpi.c | 16 ++++++++++++++-- > 1 file changed, 14 insertions(+), 2 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c > index 640be5b618fc..5bb5880403b2 100644 > --- a/drivers/mmc/host/sdhci-acpi.c > +++ b/drivers/mmc/host/sdhci-acpi.c > @@ -73,6 +73,7 @@ struct sdhci_acpi_slot { > unsigned int caps2; > mmc_pm_flag_t pm_caps; > unsigned int flags; > + size_t priv_size; > int (*probe_slot)(struct platform_device *, const char *, const char *); > int (*remove_slot)(struct platform_device *); > }; > @@ -82,8 +83,14 @@ struct sdhci_acpi_host { > const struct sdhci_acpi_slot *slot; > struct platform_device *pdev; > bool use_runtime_pm; > + unsigned long private[0] ____cacheline_aligned; > }; > > +static inline void *sdhci_acpi_priv(struct sdhci_acpi_host *c) > +{ > + return (void *)c->private; > +} > + > static inline bool sdhci_acpi_flag(struct sdhci_acpi_host *c, unsigned int flag) > { > return c->slot && (c->slot->flags & flag); > @@ -393,11 +400,13 @@ static const struct sdhci_acpi_slot *sdhci_acpi_get_slot(const char *hid, > static int sdhci_acpi_probe(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > + const struct sdhci_acpi_slot *slot; > struct acpi_device *device, *child; > struct sdhci_acpi_host *c; > struct sdhci_host *host; > struct resource *iomem; > resource_size_t len; > + size_t priv_size; > const char *hid; > const char *uid; > int err; > @@ -409,6 +418,8 @@ static int sdhci_acpi_probe(struct platform_device *pdev) > hid = acpi_device_hid(device); > uid = acpi_device_uid(device); > > + slot = sdhci_acpi_get_slot(hid, uid); > + > /* Power on the SDHCI controller and its children */ > acpi_device_fix_up_power(device); > if (!sdhci_acpi_no_fixup_child_power(hid, uid)) { > @@ -431,13 +442,14 @@ static int sdhci_acpi_probe(struct platform_device *pdev) > if (!devm_request_mem_region(dev, iomem->start, len, dev_name(dev))) > return -ENOMEM; > > - host = sdhci_alloc_host(dev, sizeof(struct sdhci_acpi_host)); > + priv_size = slot ? slot->priv_size : 0; > + host = sdhci_alloc_host(dev, sizeof(struct sdhci_acpi_host) + priv_size); > if (IS_ERR(host)) > return PTR_ERR(host); > > c = sdhci_priv(host); > c->host = host; > - c->slot = sdhci_acpi_get_slot(hid, uid); > + c->slot = slot; > c->pdev = pdev; > c->use_runtime_pm = sdhci_acpi_flag(c, SDHCI_ACPI_RUNTIME_PM); > > -- > 1.9.1 >