Thread (24 messages) 24 messages, 4 authors, 2018-03-15

Re: [PATCH v2 04/15] mmc: mmci: Add support for setting pad type via pinctrl

From: Ulf Hansson <hidden>
Date: 2018-01-17 09:34:50
Also in: linux-arm-kernel, linux-clk, linux-gpio, linux-mmc, lkml

[...]
quoted hunk ↗ jump to hunk
        /*
@@ -1616,6 +1625,32 @@ static int mmci_probe(struct amba_device *dev,
        host = mmc_priv(mmc);
        host->mmc = mmc;

+       /*
+        * Some variant (STM32) doesn't have opendrain bit, nevertheless
+        * pins can be set accordingly using pinctrl
+        */
+       if (!variant->opendrain) {
+               host->pinctrl = devm_pinctrl_get(&dev->dev);
+               if (IS_ERR(host->pinctrl)) {
+                       dev_err(&dev->dev, "failed to get pinctrl");
+                       goto host_free;
+               }
+
+               host->pins_default = pinctrl_lookup_state(host->pinctrl,
+                                                         PINCTRL_STATE_DEFAULT);
+               if (IS_ERR(host->pins_default)) {
+                       dev_warn(mmc_dev(mmc), "Can't select default pins\n");
+                       host->pins_default = NULL;
This is wrong, I think you should bail out and return the error code instead.

Moreover, calling pinctrl_select_state() from ->set_ios by using a
NULL state, will likely trigger a NULL pointer deference bug in the
pinctrl layer.
+               }
+
+               host->pins_opendrain = pinctrl_lookup_state(host->pinctrl,
+                                                           MMCI_PINCTRL_STATE_OPENDRAIN);
+               if (IS_ERR(host->pins_opendrain)) {
+                       dev_warn(mmc_dev(mmc), "Can't select opendrain pins\n");
+                       host->pins_opendrain = NULL;
Ditto.
+               }
+       }
+
[...]

Kind regards
Uffe
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help