]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
pinctrl: qcom: spmi-mpp: Skip pullup on ULT type MPPs
authorStephen Boyd <sboyd@codeaurora.org>
Fri, 8 Jan 2016 20:25:53 +0000 (12:25 -0800)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 27 Jan 2016 14:06:19 +0000 (15:06 +0100)
The ULT type of MPPs don't have a pullup. Skip configuring the
pullup on these types of pins.

Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Reviewed-by: Andy Gross <andy.gross@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/qcom/pinctrl-spmi-mpp.c

index 2f18323571a6d9dd8e61a219dc970c72bc88875c..2a3e5490a4834ad5a2e3ba2d6ee023228a4f4d6d 100644 (file)
  * @output_enabled: Set to true if MPP output logic is enabled.
  * @input_enabled: Set to true if MPP input buffer logic is enabled.
  * @paired: Pin operates in paired mode
+ * @has_pullup: Pin has support to configure pullup
  * @num_sources: Number of power-sources supported by this MPP.
  * @power_source: Current power-source used.
  * @amux_input: Set the source for analog input.
@@ -134,6 +135,7 @@ struct pmic_mpp_pad {
        bool            output_enabled;
        bool            input_enabled;
        bool            paired;
+       bool            has_pullup;
        unsigned int    num_sources;
        unsigned int    power_source;
        unsigned int    amux_input;
@@ -477,11 +479,14 @@ static int pmic_mpp_config_set(struct pinctrl_dev *pctldev, unsigned int pin,
        if (ret < 0)
                return ret;
 
-       val = pad->pullup << PMIC_MPP_REG_PULL_SHIFT;
+       if (pad->has_pullup) {
+               val = pad->pullup << PMIC_MPP_REG_PULL_SHIFT;
 
-       ret = pmic_mpp_write(state, pad, PMIC_MPP_REG_DIG_PULL_CTL, val);
-       if (ret < 0)
-               return ret;
+               ret = pmic_mpp_write(state, pad, PMIC_MPP_REG_DIG_PULL_CTL,
+                                    val);
+               if (ret < 0)
+                       return ret;
+       }
 
        val = pad->amux_input & PMIC_MPP_REG_AIN_ROUTE_MASK;
 
@@ -534,7 +539,8 @@ static void pmic_mpp_config_dbg_show(struct pinctrl_dev *pctldev,
                seq_printf(s, " %-7s", pmic_mpp_functions[pad->function]);
                seq_printf(s, " vin-%d", pad->power_source);
                seq_printf(s, " %d", pad->aout_level);
-               seq_printf(s, " %-8s", biases[pad->pullup]);
+               if (pad->has_pullup)
+                       seq_printf(s, " %-8s", biases[pad->pullup]);
                seq_printf(s, " %-4s", pad->out_value ? "high" : "low");
                if (pad->dtest)
                        seq_printf(s, " dtest%d", pad->dtest);
@@ -748,12 +754,16 @@ static int pmic_mpp_populate(struct pmic_mpp_state *state,
        pad->power_source = val >> PMIC_MPP_REG_VIN_SHIFT;
        pad->power_source &= PMIC_MPP_REG_VIN_MASK;
 
-       val = pmic_mpp_read(state, pad, PMIC_MPP_REG_DIG_PULL_CTL);
-       if (val < 0)
-               return val;
+       if (subtype != PMIC_MPP_SUBTYPE_ULT_4CH_NO_ANA_OUT &&
+           subtype != PMIC_MPP_SUBTYPE_ULT_4CH_NO_SINK) {
+               val = pmic_mpp_read(state, pad, PMIC_MPP_REG_DIG_PULL_CTL);
+               if (val < 0)
+                       return val;
 
-       pad->pullup = val >> PMIC_MPP_REG_PULL_SHIFT;
-       pad->pullup &= PMIC_MPP_REG_PULL_MASK;
+               pad->pullup = val >> PMIC_MPP_REG_PULL_SHIFT;
+               pad->pullup &= PMIC_MPP_REG_PULL_MASK;
+               pad->has_pullup = true;
+       }
 
        val = pmic_mpp_read(state, pad, PMIC_MPP_REG_AIN_CTL);
        if (val < 0)