.groups = ipq4019_groups,
        .ngroups = ARRAY_SIZE(ipq4019_groups),
        .ngpios = 100,
+       .pull_no_keeper = true,
 };
 
 static int ipq4019_pinctrl_probe(struct platform_device *pdev)
 
        return 0;
 }
 
-#define MSM_NO_PULL    0
-#define MSM_PULL_DOWN  1
-#define MSM_KEEPER     2
-#define MSM_PULL_UP    3
+#define MSM_NO_PULL            0
+#define MSM_PULL_DOWN          1
+#define MSM_KEEPER             2
+#define MSM_PULL_UP_NO_KEEPER  2
+#define MSM_PULL_UP            3
 
 static unsigned msm_regval_to_drive(u32 val)
 {
                arg = arg == MSM_PULL_DOWN;
                break;
        case PIN_CONFIG_BIAS_BUS_HOLD:
+               if (pctrl->soc->pull_no_keeper)
+                       return -ENOTSUPP;
+
                arg = arg == MSM_KEEPER;
                break;
        case PIN_CONFIG_BIAS_PULL_UP:
-               arg = arg == MSM_PULL_UP;
+               if (pctrl->soc->pull_no_keeper)
+                       arg = arg == MSM_PULL_UP_NO_KEEPER;
+               else
+                       arg = arg == MSM_PULL_UP;
                break;
        case PIN_CONFIG_DRIVE_STRENGTH:
                arg = msm_regval_to_drive(arg);
                        arg = MSM_PULL_DOWN;
                        break;
                case PIN_CONFIG_BIAS_BUS_HOLD:
+                       if (pctrl->soc->pull_no_keeper)
+                               return -ENOTSUPP;
+
                        arg = MSM_KEEPER;
                        break;
                case PIN_CONFIG_BIAS_PULL_UP:
-                       arg = MSM_PULL_UP;
+                       if (pctrl->soc->pull_no_keeper)
+                               arg = MSM_PULL_UP_NO_KEEPER;
+                       else
+                               arg = MSM_PULL_UP;
                        break;
                case PIN_CONFIG_DRIVE_STRENGTH:
                        /* Check for invalid values */
 
 
 /**
  * struct msm_pinctrl_soc_data - Qualcomm pin controller driver configuration
- * @pins:       An array describing all pins the pin controller affects.
- * @npins:      The number of entries in @pins.
- * @functions:  An array describing all mux functions the SoC supports.
- * @nfunctions: The number of entries in @functions.
- * @groups:     An array describing all pin groups the pin SoC supports.
- * @ngroups:    The numbmer of entries in @groups.
- * @ngpio:      The number of pingroups the driver should expose as GPIOs.
+ * @pins:          An array describing all pins the pin controller affects.
+ * @npins:         The number of entries in @pins.
+ * @functions:     An array describing all mux functions the SoC supports.
+ * @nfunctions:            The number of entries in @functions.
+ * @groups:        An array describing all pin groups the pin SoC supports.
+ * @ngroups:       The numbmer of entries in @groups.
+ * @ngpio:         The number of pingroups the driver should expose as GPIOs.
+ * @pull_no_keeper: The SoC does not support keeper bias.
  */
 struct msm_pinctrl_soc_data {
        const struct pinctrl_pin_desc *pins;
        const struct msm_pingroup *groups;
        unsigned ngroups;
        unsigned ngpios;
+       bool pull_no_keeper;
 };
 
 int msm_pinctrl_probe(struct platform_device *pdev,