Merge tag 'selinux-pr-20210629' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / regulator / qcom_usb_vbus-regulator.c
index 457788b505720775ce8d96b83dc0a332bcebd292..2e627c2b6c512d0c80fcff720248244fbceae8f8 100644 (file)
 
 #define CMD_OTG                                0x40
 #define OTG_EN                         BIT(0)
+#define OTG_CURRENT_LIMIT_CFG          0x52
+#define OTG_CURRENT_LIMIT_MASK         GENMASK(2, 0)
 #define OTG_CFG                                0x53
 #define OTG_EN_SRC_CFG                 BIT(1)
 
+static const unsigned int curr_table[] = {
+       500000, 1000000, 1500000, 2000000, 2500000, 3000000,
+};
+
 static const struct regulator_ops qcom_usb_vbus_reg_ops = {
        .enable = regulator_enable_regmap,
        .disable = regulator_disable_regmap,
        .is_enabled = regulator_is_enabled_regmap,
+       .get_current_limit = regulator_get_current_limit_regmap,
+       .set_current_limit = regulator_set_current_limit_regmap,
 };
 
 static struct regulator_desc qcom_usb_vbus_rdesc = {
@@ -30,6 +38,8 @@ static struct regulator_desc qcom_usb_vbus_rdesc = {
        .ops = &qcom_usb_vbus_reg_ops,
        .owner = THIS_MODULE,
        .type = REGULATOR_VOLTAGE,
+       .curr_table = curr_table,
+       .n_current_limits = ARRAY_SIZE(curr_table),
 };
 
 static int qcom_usb_vbus_regulator_probe(struct platform_device *pdev)
@@ -61,6 +71,8 @@ static int qcom_usb_vbus_regulator_probe(struct platform_device *pdev)
 
        qcom_usb_vbus_rdesc.enable_reg = base + CMD_OTG;
        qcom_usb_vbus_rdesc.enable_mask = OTG_EN;
+       qcom_usb_vbus_rdesc.csel_reg = base + OTG_CURRENT_LIMIT_CFG;
+       qcom_usb_vbus_rdesc.csel_mask = OTG_CURRENT_LIMIT_MASK;
        config.dev = dev;
        config.init_data = init_data;
        config.of_node = dev->of_node;