Re: [PATCH 3/4] mmc: sdhci-acpi: Let devices define their own private data

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 19 October 2017 at 12:41, Adrian Hunter <adrian.hunter@xxxxxxxxx> 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 <adrian.hunter@xxxxxxxxx>

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
>
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux