All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 1/2] Documentation: mmc: add optional cd-debounce-delay-ms
@ 2018-04-24  0:42 Shawn Lin
  2018-04-24  0:42 ` [PATCH v4 2/2] mmc: core: Add tunable delay before detecting card after card is inserted Shawn Lin
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Shawn Lin @ 2018-04-24  0:42 UTC (permalink / raw)
  To: Ulf Hansson; +Cc: Rob Herring, linux-mmc, devicetree, Shawn Lin

cd-gpios uses a fixed delay, 200ms, before detecting card after the card
is inserted. 200ms doesn't work for some platforms, so some host drivers
added their own properties for parsing that from DT, for instance,
dw_mmc and pxamci. That being said, it should also be tunable when using
cd-gpios.

Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>

---

Changes in v4:
- rename to cd-debounce-delay-ms suggested by Ulf

Changes in v3:
- fix misleading typo in commit msg

Changes in v2: None

 Documentation/devicetree/bindings/mmc/mmc.txt | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/Documentation/devicetree/bindings/mmc/mmc.txt b/Documentation/devicetree/bindings/mmc/mmc.txt
index 467cd7b..dbe23b1 100644
--- a/Documentation/devicetree/bindings/mmc/mmc.txt
+++ b/Documentation/devicetree/bindings/mmc/mmc.txt
@@ -19,6 +19,8 @@ Optional properties:
 - wp-gpios: Specify GPIOs for write protection, see gpio binding
 - cd-inverted: when present, polarity on the CD line is inverted. See the note
   below for the case, when a GPIO is used for the CD line
+- cd-debounce-delay-ms: Set delay time before detecting card after card insert interrupt.
+  It's only valid when cd-gpios is present.
 - wp-inverted: when present, polarity on the WP line is inverted. See the note
   below for the case, when a GPIO is used for the WP line
 - disable-wp: When set no physical WP line is present. This property should
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v4 2/2] mmc: core: Add tunable delay before detecting card after card is inserted
  2018-04-24  0:42 [PATCH v4 1/2] Documentation: mmc: add optional cd-debounce-delay-ms Shawn Lin
@ 2018-04-24  0:42 ` Shawn Lin
  2018-05-02 13:15   ` Ulf Hansson
  2018-04-27 14:30 ` [PATCH v4 1/2] Documentation: mmc: add optional cd-debounce-delay-ms Rob Herring
  2018-05-02 13:15 ` Ulf Hansson
  2 siblings, 1 reply; 5+ messages in thread
From: Shawn Lin @ 2018-04-24  0:42 UTC (permalink / raw)
  To: Ulf Hansson; +Cc: Rob Herring, linux-mmc, devicetree, Shawn Lin

Allow to use tunable delay before detecting card after card is inserted,
which either comes from firmware node, or comes from debounce value
passed on to mmc_gpiod_request_cd(). If the platform doesn't support
debounce, then we fall back to use the debounce period as the delay,
otherwise, it behaves the same as before that a HW debounce(if set) plus
a 200ms hardcode delay before detecting the card.

Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>

---

Changes in v4: None
Changes in v3:
- rename to cd_debounce_delay_ms

Changes in v2:
- doesn't introduce new agrument for mmc_gpiod_request_cd and drop
  the change for host drivers

 drivers/mmc/core/host.c      | 9 +++++++--
 drivers/mmc/core/slot-gpio.c | 7 +++++--
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
index 64b03d6..da08a17 100644
--- a/drivers/mmc/core/host.c
+++ b/drivers/mmc/core/host.c
@@ -179,7 +179,7 @@ static void mmc_retune_timer(struct timer_list *t)
 int mmc_of_parse(struct mmc_host *host)
 {
 	struct device *dev = host->parent;
-	u32 bus_width, drv_type;
+	u32 bus_width, drv_type, cd_debounce_delay_ms;
 	int ret;
 	bool cd_cap_invert, cd_gpio_invert = false;
 	bool ro_cap_invert, ro_gpio_invert = false;
@@ -230,11 +230,16 @@ int mmc_of_parse(struct mmc_host *host)
 	} else {
 		cd_cap_invert = device_property_read_bool(dev, "cd-inverted");
 
+		if (device_property_read_u32(dev, "cd-debounce-delay-ms",
+					     &cd_debounce_delay_ms))
+			cd_debounce_delay_ms = 200;
+
 		if (device_property_read_bool(dev, "broken-cd"))
 			host->caps |= MMC_CAP_NEEDS_POLL;
 
 		ret = mmc_gpiod_request_cd(host, "cd", 0, true,
-					   0, &cd_gpio_invert);
+					   cd_debounce_delay_ms,
+					   &cd_gpio_invert);
 		if (!ret)
 			dev_info(host->parent, "Got CD GPIO\n");
 		else if (ret != -ENOENT && ret != -ENOSYS)
diff --git a/drivers/mmc/core/slot-gpio.c b/drivers/mmc/core/slot-gpio.c
index 31f7dbb..5655935 100644
--- a/drivers/mmc/core/slot-gpio.c
+++ b/drivers/mmc/core/slot-gpio.c
@@ -28,15 +28,17 @@ struct mmc_gpio {
 	irqreturn_t (*cd_gpio_isr)(int irq, void *dev_id);
 	char *ro_label;
 	char cd_label[0];
+	u32 cd_debounce_delay_ms;
 };
 
 static irqreturn_t mmc_gpio_cd_irqt(int irq, void *dev_id)
 {
 	/* Schedule a card detection after a debounce timeout */
 	struct mmc_host *host = dev_id;
+	struct mmc_gpio *ctx = host->slot.handler_priv;
 
 	host->trigger_card_event = true;
-	mmc_detect_change(host, msecs_to_jiffies(200));
+	mmc_detect_change(host, msecs_to_jiffies(ctx->cd_debounce_delay_ms));
 
 	return IRQ_HANDLED;
 }
@@ -49,6 +51,7 @@ int mmc_gpio_alloc(struct mmc_host *host)
 
 	if (ctx) {
 		ctx->ro_label = ctx->cd_label + len;
+		ctx->cd_debounce_delay_ms = 200;
 		snprintf(ctx->cd_label, len, "%s cd", dev_name(host->parent));
 		snprintf(ctx->ro_label, len, "%s ro", dev_name(host->parent));
 		host->slot.handler_priv = ctx;
@@ -261,7 +264,7 @@ int mmc_gpiod_request_cd(struct mmc_host *host, const char *con_id,
 	if (debounce) {
 		ret = gpiod_set_debounce(desc, debounce);
 		if (ret < 0)
-			return ret;
+			ctx->cd_debounce_delay_ms = debounce;
 	}
 
 	if (gpio_invert)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v4 1/2] Documentation: mmc: add optional cd-debounce-delay-ms
  2018-04-24  0:42 [PATCH v4 1/2] Documentation: mmc: add optional cd-debounce-delay-ms Shawn Lin
  2018-04-24  0:42 ` [PATCH v4 2/2] mmc: core: Add tunable delay before detecting card after card is inserted Shawn Lin
@ 2018-04-27 14:30 ` Rob Herring
  2018-05-02 13:15 ` Ulf Hansson
  2 siblings, 0 replies; 5+ messages in thread
From: Rob Herring @ 2018-04-27 14:30 UTC (permalink / raw)
  To: Shawn Lin; +Cc: Ulf Hansson, linux-mmc, devicetree

On Tue, Apr 24, 2018 at 08:42:56AM +0800, Shawn Lin wrote:
> cd-gpios uses a fixed delay, 200ms, before detecting card after the card
> is inserted. 200ms doesn't work for some platforms, so some host drivers
> added their own properties for parsing that from DT, for instance,
> dw_mmc and pxamci. That being said, it should also be tunable when using
> cd-gpios.
> 
> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
> 
> ---
> 
> Changes in v4:
> - rename to cd-debounce-delay-ms suggested by Ulf
> 
> Changes in v3:
> - fix misleading typo in commit msg
> 
> Changes in v2: None
> 
>  Documentation/devicetree/bindings/mmc/mmc.txt | 2 ++
>  1 file changed, 2 insertions(+)

Reviewed-by: Rob Herring <robh@kernel.org>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v4 1/2] Documentation: mmc: add optional cd-debounce-delay-ms
  2018-04-24  0:42 [PATCH v4 1/2] Documentation: mmc: add optional cd-debounce-delay-ms Shawn Lin
  2018-04-24  0:42 ` [PATCH v4 2/2] mmc: core: Add tunable delay before detecting card after card is inserted Shawn Lin
  2018-04-27 14:30 ` [PATCH v4 1/2] Documentation: mmc: add optional cd-debounce-delay-ms Rob Herring
@ 2018-05-02 13:15 ` Ulf Hansson
  2 siblings, 0 replies; 5+ messages in thread
From: Ulf Hansson @ 2018-05-02 13:15 UTC (permalink / raw)
  To: Shawn Lin; +Cc: Rob Herring, linux-mmc, devicetree

On 24 April 2018 at 02:42, Shawn Lin <shawn.lin@rock-chips.com> wrote:
> cd-gpios uses a fixed delay, 200ms, before detecting card after the card
> is inserted. 200ms doesn't work for some platforms, so some host drivers
> added their own properties for parsing that from DT, for instance,
> dw_mmc and pxamci. That being said, it should also be tunable when using
> cd-gpios.
>
> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>

Thanks, applied for next!

Kind regards
Uffe

>
> ---
>
> Changes in v4:
> - rename to cd-debounce-delay-ms suggested by Ulf
>
> Changes in v3:
> - fix misleading typo in commit msg
>
> Changes in v2: None
>
>  Documentation/devicetree/bindings/mmc/mmc.txt | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/mmc/mmc.txt b/Documentation/devicetree/bindings/mmc/mmc.txt
> index 467cd7b..dbe23b1 100644
> --- a/Documentation/devicetree/bindings/mmc/mmc.txt
> +++ b/Documentation/devicetree/bindings/mmc/mmc.txt
> @@ -19,6 +19,8 @@ Optional properties:
>  - wp-gpios: Specify GPIOs for write protection, see gpio binding
>  - cd-inverted: when present, polarity on the CD line is inverted. See the note
>    below for the case, when a GPIO is used for the CD line
> +- cd-debounce-delay-ms: Set delay time before detecting card after card insert interrupt.
> +  It's only valid when cd-gpios is present.
>  - wp-inverted: when present, polarity on the WP line is inverted. See the note
>    below for the case, when a GPIO is used for the WP line
>  - disable-wp: When set no physical WP line is present. This property should
> --
> 1.9.1
>
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v4 2/2] mmc: core: Add tunable delay before detecting card after card is inserted
  2018-04-24  0:42 ` [PATCH v4 2/2] mmc: core: Add tunable delay before detecting card after card is inserted Shawn Lin
@ 2018-05-02 13:15   ` Ulf Hansson
  0 siblings, 0 replies; 5+ messages in thread
From: Ulf Hansson @ 2018-05-02 13:15 UTC (permalink / raw)
  To: Shawn Lin; +Cc: Rob Herring, linux-mmc, devicetree, Linus Walleij

+Linus

On 24 April 2018 at 02:42, Shawn Lin <shawn.lin@rock-chips.com> wrote:
> Allow to use tunable delay before detecting card after card is inserted,
> which either comes from firmware node, or comes from debounce value
> passed on to mmc_gpiod_request_cd(). If the platform doesn't support
> debounce, then we fall back to use the debounce period as the delay,
> otherwise, it behaves the same as before that a HW debounce(if set) plus
> a 200ms hardcode delay before detecting the card.
>
> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>

Thanks, applied for next and by adding Linus' reviewed-by tag from v2.

Kind regards
Uffe

>
> ---
>
> Changes in v4: None
> Changes in v3:
> - rename to cd_debounce_delay_ms
>
> Changes in v2:
> - doesn't introduce new agrument for mmc_gpiod_request_cd and drop
>   the change for host drivers
>
>  drivers/mmc/core/host.c      | 9 +++++++--
>  drivers/mmc/core/slot-gpio.c | 7 +++++--
>  2 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
> index 64b03d6..da08a17 100644
> --- a/drivers/mmc/core/host.c
> +++ b/drivers/mmc/core/host.c
> @@ -179,7 +179,7 @@ static void mmc_retune_timer(struct timer_list *t)
>  int mmc_of_parse(struct mmc_host *host)
>  {
>         struct device *dev = host->parent;
> -       u32 bus_width, drv_type;
> +       u32 bus_width, drv_type, cd_debounce_delay_ms;
>         int ret;
>         bool cd_cap_invert, cd_gpio_invert = false;
>         bool ro_cap_invert, ro_gpio_invert = false;
> @@ -230,11 +230,16 @@ int mmc_of_parse(struct mmc_host *host)
>         } else {
>                 cd_cap_invert = device_property_read_bool(dev, "cd-inverted");
>
> +               if (device_property_read_u32(dev, "cd-debounce-delay-ms",
> +                                            &cd_debounce_delay_ms))
> +                       cd_debounce_delay_ms = 200;
> +
>                 if (device_property_read_bool(dev, "broken-cd"))
>                         host->caps |= MMC_CAP_NEEDS_POLL;
>
>                 ret = mmc_gpiod_request_cd(host, "cd", 0, true,
> -                                          0, &cd_gpio_invert);
> +                                          cd_debounce_delay_ms,
> +                                          &cd_gpio_invert);
>                 if (!ret)
>                         dev_info(host->parent, "Got CD GPIO\n");
>                 else if (ret != -ENOENT && ret != -ENOSYS)
> diff --git a/drivers/mmc/core/slot-gpio.c b/drivers/mmc/core/slot-gpio.c
> index 31f7dbb..5655935 100644
> --- a/drivers/mmc/core/slot-gpio.c
> +++ b/drivers/mmc/core/slot-gpio.c
> @@ -28,15 +28,17 @@ struct mmc_gpio {
>         irqreturn_t (*cd_gpio_isr)(int irq, void *dev_id);
>         char *ro_label;
>         char cd_label[0];
> +       u32 cd_debounce_delay_ms;
>  };
>
>  static irqreturn_t mmc_gpio_cd_irqt(int irq, void *dev_id)
>  {
>         /* Schedule a card detection after a debounce timeout */
>         struct mmc_host *host = dev_id;
> +       struct mmc_gpio *ctx = host->slot.handler_priv;
>
>         host->trigger_card_event = true;
> -       mmc_detect_change(host, msecs_to_jiffies(200));
> +       mmc_detect_change(host, msecs_to_jiffies(ctx->cd_debounce_delay_ms));
>
>         return IRQ_HANDLED;
>  }
> @@ -49,6 +51,7 @@ int mmc_gpio_alloc(struct mmc_host *host)
>
>         if (ctx) {
>                 ctx->ro_label = ctx->cd_label + len;
> +               ctx->cd_debounce_delay_ms = 200;
>                 snprintf(ctx->cd_label, len, "%s cd", dev_name(host->parent));
>                 snprintf(ctx->ro_label, len, "%s ro", dev_name(host->parent));
>                 host->slot.handler_priv = ctx;
> @@ -261,7 +264,7 @@ int mmc_gpiod_request_cd(struct mmc_host *host, const char *con_id,
>         if (debounce) {
>                 ret = gpiod_set_debounce(desc, debounce);
>                 if (ret < 0)
> -                       return ret;
> +                       ctx->cd_debounce_delay_ms = debounce;
>         }
>
>         if (gpio_invert)
> --
> 1.9.1
>
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-05-02 13:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-24  0:42 [PATCH v4 1/2] Documentation: mmc: add optional cd-debounce-delay-ms Shawn Lin
2018-04-24  0:42 ` [PATCH v4 2/2] mmc: core: Add tunable delay before detecting card after card is inserted Shawn Lin
2018-05-02 13:15   ` Ulf Hansson
2018-04-27 14:30 ` [PATCH v4 1/2] Documentation: mmc: add optional cd-debounce-delay-ms Rob Herring
2018-05-02 13:15 ` Ulf Hansson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.