Re: [PATCH 1/4] mmc: dw_mmc: add common capabilities to replace caps

From: Jaehoon Chung
Date: Thu Nov 25 2021 - 18:38:36 EST


On 11/25/21 3:45 AM, John Keeping wrote:
> The caps field depends on the mshcN alias ID but for some devices this
> is unnecessary as the capabilities are the same for all instances
> sharing the same compatible.
>
> Add a common_caps field for this case which updates the host's
> capabilities without needing the mshcN alias ID.
>
> Signed-off-by: John Keeping <john@xxxxxxxxxxxx>

Reviewed-by: Jaehoon Chung <jh80.chung@xxxxxxxxxxx>

Best Regards,
Jaehoon Chung

> ---
> drivers/mmc/host/dw_mmc.c | 3 +++
> drivers/mmc/host/dw_mmc.h | 3 +++
> 2 files changed, 6 insertions(+)
>
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index 195f2b2434b0..f2a14a434bef 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -2856,6 +2856,9 @@ static int dw_mci_init_slot_caps(struct dw_mci_slot *slot)
> if (host->pdata->pm_caps)
> mmc->pm_caps = host->pdata->pm_caps;
>
> + if (drv_data)
> + mmc->caps |= drv_data->common_caps;
> +
> if (host->dev->of_node) {
> ctrl_id = of_alias_get_id(host->dev->of_node, "mshc");
> if (ctrl_id < 0)
> diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h
> index ce05d81477d9..771d5afa3136 100644
> --- a/drivers/mmc/host/dw_mmc.h
> +++ b/drivers/mmc/host/dw_mmc.h
> @@ -550,6 +550,8 @@ struct dw_mci_slot {
> * dw_mci driver data - dw-mshc implementation specific driver data.
> * @caps: mmc subsystem specified capabilities of the controller(s).
> * @num_caps: number of capabilities specified by @caps.
> + * @common_caps: mmc subsystem specified capabilities applicable to all of
> + * the controllers
> * @init: early implementation specific initialization.
> * @set_ios: handle bus specific extensions.
> * @parse_dt: parse implementation specific device tree properties.
> @@ -562,6 +564,7 @@ struct dw_mci_slot {
> struct dw_mci_drv_data {
> unsigned long *caps;
> u32 num_caps;
> + u32 common_caps;
> int (*init)(struct dw_mci *host);
> void (*set_ios)(struct dw_mci *host, struct mmc_ios *ios);
> int (*parse_dt)(struct dw_mci *host);
>